Difference between revisions of "CudaText plugins"

From Lazarus wiki
m (Fixed heading levels)
Line 1: Line 1:
=Comments=
+
== Comments ==
  
 
You can add/remove code comments, via "Comments" plugin. Plugin is preinstalled in CudaText. It gives about 6 commands in menu "Plugins / Comments". Plugin supports only adding/removing of comments, not syntax highlighting for them (highlighting is lexer's work).
 
You can add/remove code comments, via "Comments" plugin. Plugin is preinstalled in CudaText. It gives about 6 commands in menu "Plugins / Comments". Plugin supports only adding/removing of comments, not syntax highlighting for them (highlighting is lexer's work).
Line 18: Line 18:
 
* Range comments: in files data/lexlib/nnn.cuda-lexmap.
 
* Range comments: in files data/lexlib/nnn.cuda-lexmap.
  
=Macros=
+
== Macros ==
  
 
Macro is a sequence of CudaText actions, which can be saved to a file and invoked later by some command.
 
Macro is a sequence of CudaText actions, which can be saved to a file and invoked later by some command.
Line 48: Line 48:
 
* or call dialog "Macros / Macros..." which allows to run available macros: it can be simple running, running N times, or running in loop ([x] While text changes, [x] Until caret on last line)
 
* or call dialog "Macros / Macros..." which allows to run available macros: it can be simple running, running N times, or running in loop ([x] While text changes, [x] Until caret on last line)
  
=Project Manager=
+
== Project Manager ==
  
 
This plugin is preinstalled in CudaText. It shows panel "Project" in the sidebar (to show this panel, call plugin by any command, or set plugin's option "Load on program start" and restart, CudaText sidebar will have Project button). On the project panel, on its tree-view, you can add several "root nodes", each node must be existing file or folder. For folder nodes, plugin auto shows all nested folders. You cannot add nodes on other levels (like SynWrite editor does).
 
This plugin is preinstalled in CudaText. It shows panel "Project" in the sidebar (to show this panel, call plugin by any command, or set plugin's option "Load on program start" and restart, CudaText sidebar will have Project button). On the project panel, on its tree-view, you can add several "root nodes", each node must be existing file or folder. For folder nodes, plugin auto shows all nested folders. You cannot add nodes on other levels (like SynWrite editor does).
Line 73: Line 73:
 
Any project can have "main file", you can choose it in the context menu: "Selected file / Set as main file". Main file's path is used by plugin External Tools, when some tool is configured with macro {ProjMainFile}. This allows tools to run compilation of the main file.
 
Any project can have "main file", you can choose it in the context menu: "Selected file / Set as main file". Main file's path is used by plugin External Tools, when some tool is configured with macro {ProjMainFile}. This allows tools to run compilation of the main file.
  
==Project Manager options dialog==
+
=== Project Manager options dialog ===
  
 
* "Ignore files": ";"-separated shell wildcards, which are [https://docs.python.org/3/library/fnmatch.html documented here]. If file name (without path) matches any of these wildcards, it will not be listed in the treeview.
 
* "Ignore files": ";"-separated shell wildcards, which are [https://docs.python.org/3/library/fnmatch.html documented here]. If file name (without path) matches any of these wildcards, it will not be listed in the treeview.
Line 85: Line 85:
 
* "Toolbar theme": Set of icons for Project Manager toolbar buttons. You can install additional themes from Addon Manager, see the category "projtoolbaricons" there. This option shows themes, which are present in the folder "data/projtoolbaricons".
 
* "Toolbar theme": Set of icons for Project Manager toolbar buttons. You can install additional themes from Addon Manager, see the category "projtoolbaricons" there. This option shows themes, which are present in the folder "data/projtoolbaricons".
  
==Preview tab==
+
=== Preview tab ===
 +
 
 
To see preview tab, call "File / Open folder" and choose a folder with text files. Folder will open in the side panel "Project". Make single click on files in this panel, they will open in "preview tab". Single preview tab is shared by all clicked files in "Project". It has italic caption. When you begin to edit file in this preview tab, tab becomes "normal".
 
To see preview tab, call "File / Open folder" and choose a folder with text files. Folder will open in the side panel "Project". Make single click on files in this panel, they will open in "preview tab". Single preview tab is shared by all clicked files in "Project". It has italic caption. When you begin to edit file in this preview tab, tab becomes "normal".
  
=Snippets=
+
== Snippets ==
  
 
To use snippets you need:
 
To use snippets you need:
Line 105: Line 106:
 
Texts of snippets usually have tab-stop(s), e.g. ${1:some_text}. Plugin Snippets finds tab-stops and places "markers" for them. After markers are placed, Tab-key works special in editor, it jumps to next marker. See detailed information in the [[#Markers]].
 
Texts of snippets usually have tab-stop(s), e.g. ${1:some_text}. Plugin Snippets finds tab-stops and places "markers" for them. After markers are placed, Tab-key works special in editor, it jumps to next marker. See detailed information in the [[#Markers]].
  
==Snippets for HTML tags==
+
=== Snippets for HTML tags ===
  
 
CudaText has preinstalled 120+ snippets for HTML tags. (You still need to install Snippets plugin.) They are enabled with HTML lexer. Just type tag name without a bracket, press Tab, and snippet is inserted. E.g. "a"<Tab> will insert:
 
CudaText has preinstalled 120+ snippets for HTML tags. (You still need to install Snippets plugin.) They are enabled with HTML lexer. Just type tag name without a bracket, press Tab, and snippet is inserted. E.g. "a"<Tab> will insert:
Line 113: Line 114:
 
These snippets have markers, so Tab key jumps to the next marker. Last marker is usually placed after the entire tag, ie after ">" bracket.
 
These snippets have markers, so Tab key jumps to the next marker. Last marker is usually placed after the entire tag, ie after ">" bracket.
  
=Snippet Panel=
+
=== Snippet Panel ===
  
 
Plugin "Snippet Panel" is preinstalled in CudaText. It gives an alternative way to use short text fragments (only simple ones) in editor. It adds button to sidebar, and command "Plugins / Snippet Panel". When called, plugin shows panel in the sidebar, with a drop-down list of folders, which contain several "snippets". You can double-click snippets to insert them into text (multi-carets are supported).
 
Plugin "Snippet Panel" is preinstalled in CudaText. It gives an alternative way to use short text fragments (only simple ones) in editor. It adds button to sidebar, and command "Plugins / Snippet Panel". When called, plugin shows panel in the sidebar, with a drop-down list of folders, which contain several "snippets". You can double-click snippets to insert them into text (multi-carets are supported).
Line 140: Line 141:
 
Each snippet folder can contain one or more .txt files, in UTF-8 (no BOM) or UTF-16 (with BOM) encoding. Files have snippet per line, in the form "name=value" or simply "name" (if value missed, it equals to name). Each snippet can be simple short string, or string with ${sel} macro to replace selected text. This allows to quote currently selected text by calling snippets from "Quote selection" folder.
 
Each snippet folder can contain one or more .txt files, in UTF-8 (no BOM) or UTF-16 (with BOM) encoding. Files have snippet per line, in the form "name=value" or simply "name" (if value missed, it equals to name). Each snippet can be simple short string, or string with ${sel} macro to replace selected text. This allows to quote currently selected text by calling snippets from "Quote selection" folder.
  
=CudaLint=
+
== CudaLint ==
 +
 
 
CudaLint plugin allows to check correctness of documents in many syntaxes.
 
CudaLint plugin allows to check correctness of documents in many syntaxes.
 
It was initially ported from SublimeLinter 2.x plugin for Sublime Text.  
 
It was initially ported from SublimeLinter 2.x plugin for Sublime Text.  
Line 155: Line 157:
 
After you install a linter, see readme in its folder, maybe how-to-use info is written there.
 
After you install a linter, see readme in its folder, maybe how-to-use info is written there.
  
==Linters - usage==
+
=== Linters - usage ===
 +
 
 
To run linting, use menu item "Plugins / CudaLint / Lint", or set hotkey to this command
 
To run linting, use menu item "Plugins / CudaLint / Lint", or set hotkey to this command
 
(in CudaText Command Palette, press F9). You will see statusbar message, which tells how many errors
 
(in CudaText Command Palette, press F9). You will see statusbar message, which tells how many errors
Line 171: Line 174:
 
Call config by menu item in "Options / Settings-plugins".
 
Call config by menu item in "Options / Settings-plugins".
  
==Linters - Node.js==
+
=== Linters - Node.js ===
 +
 
 
Some linters require Node.js, so for those linters, you must install Node first.
 
Some linters require Node.js, so for those linters, you must install Node first.
 
Those linters are sometimes shipped with Node modules preinstalled (in plugin folder)
 
Those linters are sometimes shipped with Node modules preinstalled (in plugin folder)
Line 180: Line 184:
 
* Linux: "nodejs" package must be installed, command "nodejs -v" must work in terminal.
 
* Linux: "nodejs" package must be installed, command "nodejs -v" must work in terminal.
  
==Linters - authoring==
+
=== Linters - authoring ===
 +
 
 
To support more lexers, it's a good idea to port linter from SublimeLinter. To port a linter, most you need is:
 
To support more lexers, it's a good idea to port linter from SublimeLinter. To port a linter, most you need is:
  
Line 188: Line 193:
 
* If linter was using Node.js, take some code to run Node, from cuda_lint_csslint linter.
 
* If linter was using Node.js, take some code to run Node, from cuda_lint_csslint linter.
  
==Linters - per project==
+
=== Linters - per project ===
 +
 
 
How to configure linters per project? In your project (Project Manager plugin), right-click root node of project treeview, call menu item "Project file / Project properties...". In this dialog, in the "Variablies" field, enter variable(s) like this:
 
How to configure linters per project? In your project (Project Manager plugin), right-click root node of project treeview, call menu item "Project file / Project properties...". In this dialog, in the "Variablies" field, enter variable(s) like this:
  
Line 197: Line 203:
 
In this example, CudaLint plugin allows, for mentioned lexer CSS, only linter "csslint", even if another CSS linter (e.g. "csstree") is installed and found first.
 
In this example, CudaLint plugin allows, for mentioned lexer CSS, only linter "csslint", even if another CSS linter (e.g. "csstree") is installed and found first.
  
=External Tools=
+
== External Tools ==
==Introduction==
+
 
 +
=== Introduction ===
  
 
Plugin "External Tools" (ExtTools) can be installed from Addon Manager. It allows to run external programs, catch their output, and display this output in the Output/Validate panels of CudaText. Or to insert/replace some text in the editor.
 
Plugin "External Tools" (ExtTools) can be installed from Addon Manager. It allows to run external programs, catch their output, and display this output in the Output/Validate panels of CudaText. Or to insert/replace some text in the editor.
Line 209: Line 216:
 
[[File:cudatext-tools-props.png]]
 
[[File:cudatext-tools-props.png]]
  
==Tool to compile by GCC==
+
=== Tool to compile by GCC ===
  
 
You can test how this tool works on any Linux, because GCC is preinstalled. Test the tool on C++ example, which is created from CudaText by menu "File / New from template / C++".
 
You can test how this tool works on any Linux, because GCC is preinstalled. Test the tool on C++ example, which is created from CudaText by menu "File / New from template / C++".
Line 228: Line 235:
 
* Pattern: (?P<file>[^:]+):(?P<line>\d+):(?P<col>\d+): .+
 
* Pattern: (?P<file>[^:]+):(?P<line>\d+):(?P<col>\d+): .+
  
==Tool to run C program==
+
=== Tool to run C program ===
  
 
Tool is for Linux, so "File name" don't have an extension. For Windows, change "File name" field to "{FileNameNoExt}.exe".
 
Tool is for Linux, so "File name" don't have an extension. For Windows, change "File name" field to "{FileNameNoExt}.exe".
Line 244: Line 251:
 
* Pattern: (empty)
 
* Pattern: (empty)
  
==Tool to run C program, on Windows, with input in terminal==
+
=== Tool to run C program, on Windows, with input in terminal ===
  
 
Tool is for Windows, it allows to run compiled C/C++ program in new console window. Text input will work in this console.
 
Tool is for Windows, it allows to run compiled C/C++ program in new console window. Text input will work in this console.
  
 
Example C++ program:
 
Example C++ program:
 +
 
<syntaxhighlight lang="C++">
 
<syntaxhighlight lang="C++">
 
#include <stdio.h>
 
#include <stdio.h>
Line 275: Line 283:
 
* Pattern: (empty)
 
* Pattern: (empty)
  
==Tool to run C program, on Linux, with input in terminal==
+
=== Tool to run C program, on Linux, with input in terminal ===
  
 
Tool is for Linux, it allows to run compiled C/C++ program in new terminal window. Text input will work in this terminal window.
 
Tool is for Linux, it allows to run compiled C/C++ program in new terminal window. Text input will work in this terminal window.
  
 
Example C++ program:
 
Example C++ program:
 +
 
<syntaxhighlight lang="C++">
 
<syntaxhighlight lang="C++">
 
#include <stdio.h>
 
#include <stdio.h>
Line 309: Line 318:
 
* Pattern: (empty)
 
* Pattern: (empty)
  
==Tool to compile+run C program==
+
=== Tool to compile+run C program ===
  
 
In the External Tools dialog, press Join button, to join 2 tools created in above steps. Properties of joined tool:
 
In the External Tools dialog, press Join button, to join 2 tools created in above steps. Properties of joined tool:
Line 317: Line 326:
 
* Lexers: C,C++
 
* Lexers: C,C++
  
==Tool to run current Batch file==
+
=== Tool to run current Batch file ===
 +
 
 
Tool properties:
 
Tool properties:
  
Line 329: Line 339:
 
* Encoding: the same as file's encoding: e.g. utf_8 or cp1251 (cp1251 is Russian ANSI codepage)
 
* Encoding: the same as file's encoding: e.g. utf_8 or cp1251 (cp1251 is Russian ANSI codepage)
  
==Tool to compile by Free Pascal==
+
=== Tool to compile by Free Pascal ===
  
 
This tool is for Free Pascal 3.x on Linux x64.
 
This tool is for Free Pascal 3.x on Linux x64.
Line 348: Line 358:
 
Optionally, configure "Pattern", so double click in the Output panel will put caret to the source code. In the "Tool properties" dialog, press "Set" button near the "Pattern" and choose there ready preset for Free Pascal.
 
Optionally, configure "Pattern", so double click in the Output panel will put caret to the source code. In the "Tool properties" dialog, press "Set" button near the "Pattern" and choose there ready preset for Free Pascal.
  
==Tool to call file-compare utility ==
+
=== Tool to call file-compare utility ===
 +
 
 
Tools, which call file-compare utility, to compare 2 files: active files in group-1 and group-2.
 
Tools, which call file-compare utility, to compare 2 files: active files in group-1 and group-2.
  
===WinMerge, KDiff, Kompare===
+
==== WinMerge, KDiff, Kompare====
  
 
* Name: Compare files in G1, G2
 
* Name: Compare files in G1, G2
Line 360: Line 371:
 
* Capture output: Ignore
 
* Capture output: Ignore
  
===Meld===
+
==== Meld ====
  
 
* Name: Compare files in G1, G2
 
* Name: Compare files in G1, G2
Line 369: Line 380:
 
* Capture output: Ignore
 
* Capture output: Ignore
  
===diff===
+
==== diff ====
  
 
* Name: Compare files in G1, G2
 
* Name: Compare files in G1, G2
Line 378: Line 389:
 
* Capture output: Copy to new document
 
* Capture output: Copy to new document
  
==Tool to run Python scripts==
+
=== Tool to run Python scripts ===
  
 
* Name: Python3
 
* Name: Python3
Line 394: Line 405:
 
* Pattern: \s*File "(?P<file>.+)", line (?P<line>\d+)
 
* Pattern: \s*File "(?P<file>.+)", line (?P<line>\d+)
  
==Tool to open PHP documentation with given topic==
+
=== Tool to open PHP documentation with given topic ===
  
 
Tool to open PHP documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.
 
Tool to open PHP documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.
Line 413: Line 424:
 
* Capture output: Ignore
 
* Capture output: Ignore
  
==Tool to open AutoIt documentation with given topic==
+
=== Tool to open AutoIt documentation with given topic ===
  
 
Tool to open AutoIt documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.
 
Tool to open AutoIt documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.
Line 430: Line 441:
 
* Capture output: Ignore
 
* Capture output: Ignore
  
==Tool to open .chm documentation for all lexers==
+
=== Tool to open .chm documentation for all lexers ===
  
 
See above example about tool for PHP documentation. Create the similar tool
 
See above example about tool for PHP documentation. Create the similar tool
Line 441: Line 452:
 
This tool needs renamed .chm files: for lexer AutoIt it needs "AutoIt.chm" and so on. It needs .chm files in a single folder relative to CudaText folder.
 
This tool needs renamed .chm files: for lexer AutoIt it needs "AutoIt.chm" and so on. It needs .chm files in a single folder relative to CudaText folder.
  
==URL for Google search==
+
=== URL for Google search ===
  
 
This is URL, not tool. In the External Tools dialog, press URL button, then press Add to add a new URL.
 
This is URL, not tool. In the External Tools dialog, press URL button, then press Add to add a new URL.
Line 447: Line 458:
 
* Name: Google find
 
* Name: Google find
 
* URL:
 
* URL:
 +
 
<syntaxhighlight lang="text">
 
<syntaxhighlight lang="text">
 
http://google.com/search?q={SelectedText|q}
 
http://google.com/search?q={SelectedText|q}
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==Tool to open folder of current file in Windows Explorer==
+
=== Tool to open folder of current file in Windows Explorer ===
 +
 
 
Tool properties:
 
Tool properties:
  
Line 460: Line 473:
 
* Initial folder: {FileDir}
 
* Initial folder: {FileDir}
  
==Tool to go to current file in FreeCommander==
+
=== Tool to go to current file in FreeCommander ===
 +
 
 
* Name: Go to file in FreeCommander
 
* Name: Go to file in FreeCommander
 
* File name: path\to\FreeCommander.exe
 
* File name: path\to\FreeCommander.exe

Revision as of 02:03, 18 September 2020

Comments

You can add/remove code comments, via "Comments" plugin. Plugin is preinstalled in CudaText. It gives about 6 commands in menu "Plugins / Comments". Plugin supports only adding/removing of comments, not syntax highlighting for them (highlighting is lexer's work).

  • Line comments: from some position to line-end. E.g. in C lexer: "//text here", in Python lexer: "# text here".
  • Comments for range (Stream comments): from offset to another offset. E.g. in C lexer: "/* text here */".
  • Comments for full lines: from newline to another newline. Rarely used, e.g. used in PowerShell.

For example, Python lexer supports only line comment, and don't support stream comments. PowerShell lexer supports comments for full lines, while don't support comments for any range.

Comment chars are editable in SynWrite editor, in dialog "Lexer properties" (after you install the same lexer to SynWrite). In dialog tab "Commenting" you'll see input fields.

Command "Toggle stream comment" in plugin adds/removes comments of last 2 types: for range, for full lines (plugin chooses needed kind).

Comment chars are saved:

  • Line comments: in lexer file data/lexlib/nnn.lcf.
  • Range comments: in files data/lexlib/nnn.cuda-lexmap.

Macros

Macro is a sequence of CudaText actions, which can be saved to a file and invoked later by some command. To use macros, you must install plugin "Macros" from Addon Manager. It adds "Macros" menu to CudaText main menu bar. This menu gives items:

  • Macros...
  • Start record
  • Stop record
  • Cancel record
  • Export...
  • Import...
  • (items for saved macros)

To record a macro:

  • call menu item "Macros / Start record", or use dialog "Macros / Macros..." which gives "Start record" button too
  • pefrorm some action(s) in CudaText:
    • built-in commands, plugin commands (invoked by hotkey, by menu, by Command Palette)
    • some mouse actions (clicks/selections, they save/playback relative to caret position)
    • calling of Find/Replace dialog, "Go to" dialog
    • actions in Find/Replace dialog
  • call menu item "Macros / Stop record" to save your macro, plugin will ask for macro name

Macro saves action(s) performed inside its original editor tab (not other tabs). And it doesn't save actions inside plugin dialogs (e.g. FindInFiles).

To playback macro:

  • call menu item "Macros / (macro name)", the end of this menu lists all available/saved macros
  • or call dialog "Macros / Macros..." which allows to run available macros: it can be simple running, running N times, or running in loop ([x] While text changes, [x] Until caret on last line)

Project Manager

This plugin is preinstalled in CudaText. It shows panel "Project" in the sidebar (to show this panel, call plugin by any command, or set plugin's option "Load on program start" and restart, CudaText sidebar will have Project button). On the project panel, on its tree-view, you can add several "root nodes", each node must be existing file or folder. For folder nodes, plugin auto shows all nested folders. You cannot add nodes on other levels (like SynWrite editor does).

Plugin has context menu on its panel, with items:

  • Project file
    • New project
    • Open project
    • Recent projects
    • Save project as...
    • Go to file... - this shows menu with all project files, and then tree-view selection jumps on selected file
    • Project properties... - this shows dialog with current project's options
    • Config... - this shows dialog with global Project Manager options
  • Root nodes - commands for nodes on the project's root level
    • Add folder...
    • Add file...
    • Clear project
    • Remove node
  • Selected file - it's shown only for files
  • Selected directory - it's shown only for folders
  • Refresh - it re-reads state of files/folders from disk

Any project can have "main file", you can choose it in the context menu: "Selected file / Set as main file". Main file's path is used by plugin External Tools, when some tool is configured with macro {ProjMainFile}. This allows tools to run compilation of the main file.

Project Manager options dialog

  • "Ignore files": ";"-separated shell wildcards, which are documented here. If file name (without path) matches any of these wildcards, it will not be listed in the treeview.
  • "Ignore folders": ";"-separated shell wildcards. If folder name matches any of these wildcards, it will not be listed in the treeview.
  • "Ignore all hidden files/folders": Additionally don't list all hidden items. On Unix, hidden mean "beginning with dot". On Windows, hidden means having file-system "hidden" attribute.
  • "Use preview tab on item clicking": If option is on, single click on treeview file item, will open file in "preview tab". Preview tab is single such tab, it's shared by all files, it has italic+underlined tab title. If option is off, clicking file item will open normal tab, separate normal tabs per each file.
  • "Open file after 'Go to file' command": If turned on, command "Project Manager: Go to file" will not only jump to chosen file in the treeview, but also open that file in editor.
  • "Open files by double-click": If turned on, only double-click in the treeview will open file for editing, but not the single click.
  • "On opening file in Git/SVN repo...": On opening any file, Project Manager will check if this file is in the Git/SVN repository (by presense of folder ".git" or ".svn" near the file, or in upper level folders). If yes, Project Manager will create the project from that repository and open it. This gives some slowdown of course.
  • "File type icons": Set of file/folder icons for treeview. You can install additional themes from Addons Manager, see category "filetypeicons" there. Example of such theme: "VSCode Material 24x24". This option shows themes, which are present in the folder "data/filetypeicons".
  • "Toolbar theme": Set of icons for Project Manager toolbar buttons. You can install additional themes from Addon Manager, see the category "projtoolbaricons" there. This option shows themes, which are present in the folder "data/projtoolbaricons".

Preview tab

To see preview tab, call "File / Open folder" and choose a folder with text files. Folder will open in the side panel "Project". Make single click on files in this panel, they will open in "preview tab". Single preview tab is shared by all clicked files in "Project". It has italic caption. When you begin to edit file in this preview tab, tab becomes "normal".

Snippets

To use snippets you need:

  • plugin "Snippets" (install from Addon Manager)
  • snippet package for needed lexer (install from Addon Manager)

Each snippet has a name (shown in the dialog when Snippets plugin is called) and short id (letters, digits, '_', dot). You can type id in editor and press Tab key: snippet for this id will be inserted into text. You can insert snippets also by choosing in dialog: call menu item "Plugins / Snippets".

Only those snippets are enabled, which are suitable for the current lexer. For example, a snippet may be for lexers "C,C++,Objective C" - it is enabled only when these lexers are active. If a snippet has no lexer property, it is always enabled.

Dialog of Snippets plugin:

cudatext snippets menu.png

Texts of snippets usually have tab-stop(s), e.g. ${1:some_text}. Plugin Snippets finds tab-stops and places "markers" for them. After markers are placed, Tab-key works special in editor, it jumps to next marker. See detailed information in the #Markers.

Snippets for HTML tags

CudaText has preinstalled 120+ snippets for HTML tags. (You still need to install Snippets plugin.) They are enabled with HTML lexer. Just type tag name without a bracket, press Tab, and snippet is inserted. E.g. "a"<Tab> will insert:

 <a href="http" title="Title" target="_blank"></a>

These snippets have markers, so Tab key jumps to the next marker. Last marker is usually placed after the entire tag, ie after ">" bracket.

Snippet Panel

Plugin "Snippet Panel" is preinstalled in CudaText. It gives an alternative way to use short text fragments (only simple ones) in editor. It adds button to sidebar, and command "Plugins / Snippet Panel". When called, plugin shows panel in the sidebar, with a drop-down list of folders, which contain several "snippets". You can double-click snippets to insert them into text (multi-carets are supported).

Preinstalled folders:

  • Arrows
  • Currency symbols
  • Greek alphabet (lower)
  • Greek alphabet (upper)
  • HTML - Arrows
  • HTML - Color names
  • HTML - Color names+values
  • HTML - Letters
  • HTML - Math symbols
  • HTML - Special characters
  • Math symbols
  • Quote selection
  • Special characters

Plugin looks for its folders in two places:

  • Folder "clips" in the plugin folder.
  • Folder CudaText/data/clips, which is absent by default, for custom user folders.

Each snippet folder can contain one or more .txt files, in UTF-8 (no BOM) or UTF-16 (with BOM) encoding. Files have snippet per line, in the form "name=value" or simply "name" (if value missed, it equals to name). Each snippet can be simple short string, or string with ${sel} macro to replace selected text. This allows to quote currently selected text by calling snippets from "Quote selection" folder.

CudaLint

CudaLint plugin allows to check correctness of documents in many syntaxes. It was initially ported from SublimeLinter 2.x plugin for Sublime Text. Each lexer must be supported with additionally installed linter, for example:

  • JavaScript is supported with linter based on JSLint tool,
  • HTML is supported with linter based on HTML Tidy tool,
  • CSS is supported with linter based on CSSLint tool,
  • etc

You will find all linters in the Addon Manager: "Plugins / Addon Manager / Install". Linters are installable like other plugins but they don't add commands, they only add folders "[CudaText]/py/cuda_lint_*", which are automatically used by CudaLint. After you install a linter, see readme in its folder, maybe how-to-use info is written there.

Linters - usage

To run linting, use menu item "Plugins / CudaLint / Lint", or set hotkey to this command (in CudaText Command Palette, press F9). You will see statusbar message, which tells how many errors linter found. For each found error, you'll see yellow/red bookmark (you can use usual commands for these bookmarks). Plugin also shows list of errors in the "Validate" panel (to show Validate panel, click V icon on the CudaText sidebar).

Linting can also be run by events:

  • after opening file
  • on saving file
  • after text is changed + pause passed

Events aren't used by default (to not slowdown usual work). To use events, you must enable them in config. Call config by menu item in "Options / Settings-plugins".

Linters - Node.js

Some linters require Node.js, so for those linters, you must install Node first. Those linters are sometimes shipped with Node modules preinstalled (in plugin folder) and sometimes you need to install Node modules via NPM. See linter's readme file for details.

  • Windows: "node.exe" must be in PATH, command "node -v" must work in console.
  • Linux: "nodejs" package must be installed, command "nodejs -v" must work in terminal.

Linters - authoring

To support more lexers, it's a good idea to port linter from SublimeLinter. To port a linter, most you need is:

  • Fix "imports" to use "cuda_lint" module, instead of SublimeLinter modules. cuda_lint gives almost the same classes which SublimeLinter gives. Except Node.js linter class - it's not supported yet. Usual Linter and PythonLinter classes are supported.
  • Change syntax name (for Sublime Text) to CudaText lexer name, names are often different. If no such lexer for CudaText exists yet, ask for it.
  • Remove in linter usage of Sublime Text API to read settings (often used in linters). You can add usage of settings via CudaText API ini_read, or via json module.
  • If linter was using Node.js, take some code to run Node, from cuda_lint_csslint linter.

Linters - per project

How to configure linters per project? In your project (Project Manager plugin), right-click root node of project treeview, call menu item "Project file / Project properties...". In this dialog, in the "Variablies" field, enter variable(s) like this:

linter_css=csslint

Variable prefix "linter_" required, after goes lower-case lexer name (CSS). Value of variable must be name of linter's folder (in "py" folder) without "cuda_lint_". So if linter's folder is py/cuda_lint_aaa, specify value "aaa".

In this example, CudaLint plugin allows, for mentioned lexer CSS, only linter "csslint", even if another CSS linter (e.g. "csstree") is installed and found first.

External Tools

Introduction

Plugin "External Tools" (ExtTools) can be installed from Addon Manager. It allows to run external programs, catch their output, and display this output in the Output/Validate panels of CudaText. Or to insert/replace some text in the editor. Plugin adds "Tools" top menu (near "Plugins"), it has item to configure all tools, and items for individual tools.

cudatext-tools-menuitem.png

Some external tools configs are shown in topics below. Enter these strings in the "Tool properties" dialog.

cudatext-tools-props.png

Tool to compile by GCC

You can test how this tool works on any Linux, because GCC is preinstalled. Test the tool on C++ example, which is created from CudaText by menu "File / New from template / C++".

Properties:

  • Name: C - compile
  • File name: gcc
  • Shell command: unchecked
  • Parameters: "{FileNameOnly}" -o "{FileNameNoExt}"
  • Initial folder: {FileDir}
  • Lexers: C,C++
  • Capture output: Output panel
  • Encoding: utf_8

Optionally, configure "Pattern", so double click in the Output panel will put caret to the source code. Example of GCC error line in the Output panel, it will be handled by double click: "new.cpp:10:3: error: 'zz' was not declared in this scope".

  • Pattern: (?P<file>[^:]+):(?P<line>\d+):(?P<col>\d+): .+

Tool to run C program

Tool is for Linux, so "File name" don't have an extension. For Windows, change "File name" field to "{FileNameNoExt}.exe".

Tool will catch the program output in the Output panel, program text input will not work.

  • Name: C - run
  • File name: "./{FileNameNoExt}"
  • Shell command: checked
  • Parameters: (empty)
  • Initial folder: {FileDir}
  • Lexers: C,C++
  • Capture output: Output panel
  • Encoding: utf_8
  • Pattern: (empty)

Tool to run C program, on Windows, with input in terminal

Tool is for Windows, it allows to run compiled C/C++ program in new console window. Text input will work in this console.

Example C++ program:

#include <stdio.h>
int main ()
{
  int c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}

Tool props:

  • Name: C - run
  • File name: cmd
  • Shell command: unchecked
  • Parameters: /K "{FileNameNoExt}.exe"
    • Alternative value: /C "{FileNameNoExt}.exe" && pause
  • Initial folder: {FileDir}
  • Lexers: C,C++
  • Capture output: Ignore
  • Encoding: utf_8
  • Pattern: (empty)

Tool to run C program, on Linux, with input in terminal

Tool is for Linux, it allows to run compiled C/C++ program in new terminal window. Text input will work in this terminal window.

Example C++ program:

#include <stdio.h>
int main ()
{
  int c;
  puts ("Enter text. Include a dot ('.') in a sentence to exit:");
  do {
    c=getchar();
    putchar (c);
  } while (c != '.');
  return 0;
}

Tool props:

  • Name: C - run
  • Variant for xterm:
    • File name: xterm
    • Parameters: -hold -e "./{FileNameNoExt}"
  • Variant for gnome-terminal:
    • File name: gnome-terminal
    • Parameters: -- bash -c "./{FileNameNoExt}; read -s -n1 -r -p 'Press any key... '; echo"
  • Shell command: unchecked
  • Initial folder: {FileDir}
  • Lexers: C,C++
  • Capture output: Ignore
  • Encoding: utf_8
  • Pattern: (empty)

Tool to compile+run C program

In the External Tools dialog, press Join button, to join 2 tools created in above steps. Properties of joined tool:

  • Name: C - make+run
  • Series: C - compile; C - run
  • Lexers: C,C++

Tool to run current Batch file

Tool properties:

  • Name: Run batch file
  • File name: cmd.exe
  • Shell command: unchecked
  • Parameters: /c "{FileName}"
  • Initial folder: {FileDir}
  • Lexers: Batch files
  • Capture output: Output panel
  • Encoding: the same as file's encoding: e.g. utf_8 or cp1251 (cp1251 is Russian ANSI codepage)

Tool to compile by Free Pascal

This tool is for Free Pascal 3.x on Linux x64.

Properties:

  • Name: FPC - compile
  • File name:
    • for FPC installed system-wide: fpc
    • for FPC installed via fpcupdeluxe: /home/user/fpcupdeluxe/fpcupdeluxe/fpc/bin/x86_64-linux/fpc.sh
  • Shell command: unchecked
  • Parameters: {FileNameOnly}
  • Initial folder: {FileDir}
  • Lexers: Pascal
  • Capture output: Output panel
  • Encoding: utf_8

Optionally, configure "Pattern", so double click in the Output panel will put caret to the source code. In the "Tool properties" dialog, press "Set" button near the "Pattern" and choose there ready preset for Free Pascal.

Tool to call file-compare utility

Tools, which call file-compare utility, to compare 2 files: active files in group-1 and group-2.

WinMerge, KDiff, Kompare

  • Name: Compare files in G1, G2
  • File name: (full name of executable file)
  • Shell command: unchecked
  • Parameters: "{FileName_g1}" "{FileName_g2}"
  • Initial folder: (empty)
  • Capture output: Ignore

Meld

  • Name: Compare files in G1, G2
  • File name: (full name of executable file)
  • Shell command: unchecked
  • Parameters: --newtab "{FileName_g1}" "{FileName_g2}"
  • Initial folder: (empty)
  • Capture output: Ignore

diff

  • Name: Compare files in G1, G2
  • File name: diff
  • Shell command: unchecked
  • Parameters: -Nau "{FileName_g1}" "{FileName_g2}"
  • Initial folder: (empty)
  • Capture output: Copy to new document

Tool to run Python scripts

  • Name: Python3
  • File name:
    • on Windows: full path to "python.exe"
    • on Unix: python3
  • Shell command:
    • on Windows: checked
    • on Unix: unchecked
  • Parameters: "{FileNameOnly}"
  • Initial folder: {FileDir}
  • Lexers: Python
  • Capture output: Output panel
  • Encoding: utf_8
  • Pattern: \s*File "(?P<file>.+)", line (?P<line>\d+)

Tool to open PHP documentation with given topic

Tool to open PHP documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.

Before making the tool, add "$" char to word chars for PHP lexer. To do it, call "Plugins / Options Editor", in the Options Editor dialog find option "word_chars" and set it to "$". You must save option to PHP lexer-specific config, so in the dialog you must check flag "For [x] Lexer", and choose lexer "PHP", and then write option value "$" and press Enter.

Download PHP documentation in .chm format from PHP.net, google for "php_manual_en chm", it is 16M file.

Tool properties:

  • Name: PHP Help
  • File name: keyhh.exe
  • Shell command: unchecked
  • Parameters: -MyHelp -#klink {CurrentWord} "C:\Work\php_manual_en.chm"
  • Initial folder: (empty)
  • Lexers: PHP
  • Save before: Nothing
  • Capture output: Ignore

Tool to open AutoIt documentation with given topic

Tool to open AutoIt documentation, in .chm format, for the word under editor's caret. For Windows only. You need to install KeyHH from http://keyworks.helpmvp.com/ , it is stable tool mentioned on several sites. Program "keyhh.exe" will be in your system PATH.

With AutoIt installed, you also have .chm documentation, its path is usually "C:\Program Files (x86)\AutoIt3\AutoIt.chm".

Tool properties:

  • Name: AutoIt Help
  • File name: keyhh.exe
  • Shell command: unchecked
  • Parameters: -MyHelp -#klink {CurrentWord} "C:\Program Files (x86)\AutoIt3\AutoIt.chm"
  • Initial folder: (empty)
  • Lexers: AutoIt
  • Save before: Nothing
  • Capture output: Ignore

Tool to open .chm documentation for all lexers

See above example about tool for PHP documentation. Create the similar tool

  • File name: keyhh.exe
  • Shell command: unchecked
  • Parameters: -MyHelp -#klink "{CurrentWord}" "{AppDir}\..\Docs\{Lexer}.chm"
  • Lexers: (empty)

This tool needs renamed .chm files: for lexer AutoIt it needs "AutoIt.chm" and so on. It needs .chm files in a single folder relative to CudaText folder.

URL for Google search

This is URL, not tool. In the External Tools dialog, press URL button, then press Add to add a new URL.

  • Name: Google find
  • URL:
http://google.com/search?q={SelectedText|q}

Tool to open folder of current file in Windows Explorer

Tool properties:

  • Name: Open cur dir in Explorer
  • File name: explorer.exe
  • Shell command: unchecked
  • Parameters: {FileDir}
  • Initial folder: {FileDir}

Tool to go to current file in FreeCommander

  • Name: Go to file in FreeCommander
  • File name: path\to\FreeCommander.exe
  • Shell command: unchecked
  • Parameters: "/L={FileName}" /C
  • Initial folder: {FileDir}