Excerpt - Foicica
Transcription
Excerpt - Foicica
SECOND EDITION Textadept Quick Reference Mitchell Textadept Quick Reference by Mitchell Copyright © 2013, 2015 Mitchell. All rights reserved. Contact the author at [email protected]. Although great care has been taken in preparing this book, the author assumes no responsibility for errors or omissions, or for damages resulting from the use of the information contained herein. All product names mentioned in this book are trademarks of their respective owners. Editor: Ana Balan Cover Designer: Mitchell Interior Designer: Mitchell Indexer: Mitchell Printing history: December 2013: First Edition May 2015: Second Edition ISBN: 978-0-9912379-1-3 Preface to the Second Edition This book is an updated version of the first edition of Textadept Quick Reference and covers many of the new features introduced in the Textadept 7.x releases. It reflects the current state of Textadept 8.0 and provides a collection of new and updated examples that demonstrate the power and flexibility of the editor. In a nutshell, this book covers the following new topics: • Textadept’s project support, including build commands. • Its new autocompletion and documentation framework along with built-in, preregistered list images. • Multi-input inputbox dialogs and the new option (checkbox) dialog. • Textadept’s new and improved command entry. • Spawning and interacting with asynchronous processes. • The vast number of terminal version improvements, including suspend, resume, Control Sequence Introducer (CSI), and mouse events. • Extending existing menus in-place. For a comprehensive list of changes between Textadept versions, please refer to the editor’s CHANGELOG.md or doc/ CHANGELOG.html files, which are distributed with the application. The online version is located at http://foicica.com/text adept/CHANGELOG.html. Contents Introduction Download Conventions Terminology 1 2 2 2 Environment Variables 3 Important Files and Directories 3 Command Line Options Define Custom Options 8 9 Global Variables Platform Variables 9 10 Handle Events 10 Create Buffers and Views Query View Information Handle Buffer and View Events 11 12 13 Work with Files and Projects Detect or Change File Encodings Query File Information Handle Input and Output Events 13 15 16 17 Work with Sessions Configure Session Settings 18 18 Move Around Move Within Lines Move Between Lines Move Between Pages Move Between Buffers and Views 18 18 19 20 20 Contents | v Other Movements Handle Movement Events 21 21 Manipulate Text Retrieve Text Set Text Delete Text Transform Text Undo and Redo Employ the Clipboard Handle Text Events 22 22 23 25 26 29 29 30 Select Text Make Simple Selections Make Multiple Selections Make Rectangular Selections Query Selection Information 30 31 34 35 36 Search for Text Simple Search Search and Replace Interact with the Find & Replace Pane Incremental Search Handle Find & Replace Events 38 40 41 42 44 44 Query Buffer Information Query Position Information Query Line and Line Number Information Query Measurement Information 45 45 46 47 Configure Line Margins Query Margin Information Handle Margin Events 47 49 49 vi | Contents Mark Lines with Markers Bookmark Lines Query Marker Information 50 53 54 Annotate Lines Query Annotated Lines 54 55 Mark Text with Indicators Highlight Words Query Indicator Information Handle Indicator Events 55 57 58 58 Show an Interactive List Display an Autocompletion List Display a User List Configure List Behavior and Display Display Images in Lists Query Interactive List Information Handle Interactive List Events 58 59 60 61 62 64 65 Show a Call Tip Configure Call Tip Display Query Call Tip Information Handle Call Tip Events 65 66 67 67 Fold or Hide Lines Query Folded or Hidden Line Information 67 68 Scroll the View 69 Prompt for Input with Dialogs Prompt with Messagebox Dialogs Prompt with Inputbox Dialogs Prompt with File Selection Dialogs Prompt with a Textbox Dialog 70 70 72 73 75 Contents | vii Prompt with Dropdown Dialogs Prompt with a Filtered List Dialog Prompt with an Option Dialog 76 78 80 Manipulate the Command Entry Issue Lua Commands 81 83 Compile and Run Code Configure Compile and Run Settings Query Compile and Run Information Handle Compile and Run Events 83 84 85 85 Spawn Processes 85 Configure Textadept Configure Indentation and Line Endings Configure Character Settings Configure the Color Theme Create or Modify a Color Theme Configure the Display Settings Configure File Types Configure Key Bindings Configure Key Settings Configure Snippets Configure Miscellaneous Settings 87 87 89 90 90 97 106 107 110 111 113 Define a Lexer Declare the Lexer Configuration Construct Patterns Define Tokens Define Rules Assign Styles Specify Fold Points Embed Lexers 113 113 114 118 118 119 120 120 viii | Contents Query Lexer Properties and Rules Handle Lexer Events 121 121 Manually Style Text Refresh Styling Assign Plain Text Styles Style Plain Text Query Style Information 122 122 122 123 124 Miscellaneous Handle Miscellaneous Events 124 125 Appendix: Image Formats XPM Image Format RGBA Image Format 128 128 129 Index of Key and Mouse Bindings 130 Lua API Index 139 Concept Index 151 Contents | ix Introduction Textadept is a fast, minimalist, and remarkably extensible cross-platform text editor for programmers. Written in a combination of C and Lua1 and relentlessly optimized for speed and minimalism for over six years, Textadept is an ideal editor for programmers who want endless extensibility without sacrificing speed or succumbing to code bloat and featuritis. Textadept runs in both graphical and text-based user interface environments. The text-based version of the editor is referred to as the “terminal version”, since it executes within a terminal emulator. Textadept also supports the standard Lua and LuaJIT2 environments. The version that utilizes LuaJIT is referred to as the “LuaJIT version”. Textadept Quick Reference is designed to help the user “get things done” when it comes to scripting and configuring Textadept. Its pragmatic approach assumes the user has a working knowledge of both Lua and Textadept. This book is broken up into a number of descriptive sections with conveniently grouped tasks that cover nearly every aspect of Textadept’s Application Programming Interface (API). For the most part, the contents of each task are not listed in conceptual order. They are listed in procedural order, an order the user would likely follow when writing Lua scripts. This quick reference serves as a complement to Textadept’s comprehensive Manual and extensive API documentation. While this book aims to be a complete reference, it does omit some of the less useful features of Textadept’s API. For example, although many of Textadept’s table fields are both readable and writable, this reference sometimes chooses to cover only one of those operations. (Unless a field is marked “Readonly” or “Write-only”, it is readable and writable.) This book also does not cover Lua’s standard libraries. Finally, the facilities in this book are designed to be used primarily in user-written Lua scripts and in the occasional “oneshot” Lua command. If the user keeps this in mind, he or she can realize Textadept’s full potential. 1 2 http://www.lua.org http://luajit.org Introduction | 1 Download Textadept binary packages for Windows, Mac OSX, and Linux platforms are available from http://foicica.com/textadept. Each package is self-contained and need not be installed. Textadept’s source code is also included in each archive. The user may compile the application manually by following the instructions in the editor’s Manual. Conventions This book uses the following conventions. Italic Used for filenames and for introducing new terms. Constant width Used for environment variables, command line options, and Lua code, including functions, tables, and variables. Constant width italic Used for user-specified parameters. [] Used for optional function arguments, except in code examples that index Lua tables. Unless otherwise specified, optional arguments default to nil. Terminology This book uses the following terminology. Buffer An object that contains editable text. View An object that contains a single buffer. Caret Either the visual that represents the text insertion point or the end point of a text selection. Anchor The start point of a text selection or search. 2 | Textadept Quick Reference Virtual Space The space past the ends of lines. Lexer A Lua module that highlights the syntax of source code written in a particular programming language. Textadept refers to a programming language by its lexer’s name. Style A collection of display settings specific to source code comments, strings, keywords, and other ranges of text. Language Module A Lua module automatically loaded by Textadept when editing source code in a particular programming language. The module’s name matches the language’s lexer name. Not all languages have language modules. Environment Variables Textadept utilizes the following environment variables. HOME or USERHOME The user’s home directory. Textadept’s user data and preferences exist in a .textadept/ sub-directory, denoted as ~/.textadept/ throughout this book. LANG The user’s default locale. Textadept will display localized text and messages in it if possible. TEXTADEPTJIT (Mac OSX only) When set, Textadept.app runs its LuaJIT version. TA_LUA_PATH TA_LUA_CPATH The Textadept equivalent of LUA_PATH and LUA_CPATH. Used by Lua’s require() function for finding modules. Important Files and Directories Textadept allows the user to configure and customize the editor using several important files and directories contained within his or her ~/.textadept/ directory. Important Files and Directories | 3 notations to match the annotated text, and outlines them with a box. buffer.ANNOTATION_INDENTED draws indented annotations without a box, buffer.ANNOTATION_STANDARD draws annotations left-justified with no decoration, and buffer.ANNOTATION_HIDDEN hides annotations. Query Annotated Lines The user can request a line’s annotation text along with the number of lines needed to display that text. buffer.annotation_text[line] The annotation text for line number line. buffer.annotation_lines[line] (Read-only) The number of annotation text lines for line number line. Mark Text with Indicators Textadept supplies 32 indicators, numbered from 0 to 31, to mark text with. Each indicator has an assigned indicator style from the list in Table 7. The editor displays indicators along with any existing styles text may have. Example 12 shows how to create and interact with clickable hyperlinks. Table 7. Indicator styles Indicator Style Visual or Description buffer.INDIC_SQUIGGLEPIXMAP A squiggly underline. buffer.INDIC_PLAIN An underline. buffer.INDIC_DASH A dashed underline. buffer.INDIC_DOTS A dotted underline. buffer.INDIC_COMPOSITIONTHICK A thick underline. buffer.INDIC_STRIKEOUT A strikeout line. buffer.INDIC_BOX A bounding box. buffer.INDIC_DOTBOX A dotted bounding box. buffer.INDIC_STRAIGHTBOX A translucent box. Mark Text with Indicators | 55 Indicator Style Visual or Description buffer.INDIC_ROUNDBOX A translucent box with rounded corners. buffer.INDIC_FULLBOX A translucent box that extends to the top of its line. buffer.INDIC_TT An underline of small ‘T’ shapes. buffer.INDIC_DIAGONAL An underline of diagonal hatches. buffer.INDIC_TEXTFORE Changes text’s foreground color. buffer.INDIC_HIDDEN Plain text with no decorations. Example 12. Create and interact with hyperlinks local browser_cmd = 'firefox "%s"' -- Define the hyperlink indicator. indic_link = _SCINTILLA.next_indic_number() buffer.indic_style[indic_link] = buffer.INDIC_HIDDEN local TEXTFORE = buffer.INDIC_TEXTFORE buffer.indic_hover_style[indic_link] = TEXTFORE buffer.indic_hover_fore[indic_link] = 0xFF0000 -- blue -- Search the buffer and mark hyperlinks. local text = buffer:get_text() buffer.indicator_current = indic_link buffer:indicator_clear_range(0, buffer.length) for s, e in text:gmatch('()http://%S+()') do buffer:indicator_fill_range(s - 1, e - s) end -- Open clicked hyperlinks in a web browser. events.connect(events.INDICATOR_CLICK, function(pos) local indicators = buffer:indicator_all_on_for(pos) if bit32.band(indicators, indic_link) then local s = buffer:indicator_start(indic_link, pos) local e = buffer:indicator_end(indic_link, pos) local url = buffer:text_range(s, e + 1) spawn(browser_cmd:format(url)) end end) _SCINTILLA.next_indic_number() Returns a unique indicator number. buffer.indic_style[indicator] = style Assigns indicator style style to indicator number indica tor. Table 7 lists all available indicator styles. The section “Assign Indicator Colors” on page 95 describes how to 56 | Textadept Quick Reference change the color and alpha values of indicator. Also resets buffer.indic_hover_style[indicator] to style. The terminal version requires style to be buffer.INDIC_ STRAIGHTBOX, but cannot draw it translucently. TIP The user should either assign indicator styles in his or her ~/.textadept/properties.lua file or within an events.VIEW_ NEW handler, so subsequent views can recognize them. buffer.indic_under[indicator] = bool Draw indicator number indicator behind text instead of in front of it. The default value is false. buffer.indic_hover_style[indicator] = style Assigns indicator style style to indicator number indica tor when either the mouse is hovering over that indica- tor or when the caret is within that indicator. buffer.indicator_current = indicator Designates indicator number indicator as the indicator used by buffer:indicator_fill_range() and buffer:indi cator_clear_range(). buffer:indicator_fill_range(pos, length) buffer:indicator_clear_range(pos, length) Fills or clears the range of text from position pos to pos + length with indicator number buffer.indicator_current. Highlight Words The user can highlight all instances of a word (for example, all instances of a variable name). Subsequent calls to text adept.editing.select_word() select each occurrence of that word, providing a simple renaming tool. textadept.editing.highlight_word() Highlights all occurrences of the selected text or all occurrences of the current word. buffer.word_chars is a string that contains all word characters. Mark Text with Indicators | 57 Query Indicator Information The user can fetch indicator locations and retrieve the indicators present at particular positions. buffer:indicator_start(indicator, pos) buffer:indicator_end(indicator, pos) Returns the previous or next boundary position, starting from position pos, of indicator number indicator. Returns 0 or buffer.length, respectively, if indicator was not found. buffer:indicator_all_on_for(pos) Returns a bit-mask that represents the indicators present at position pos. The mask is a 32-bit value whose bits correspond to Textadept’s 32 indicators. Handle Indicator Events The user can connect to the following indicator click events. events.INDICATOR_CLICK position, modifiers Emitted when clicking the mouse on text that has an indicator present. position is the clicked text’s position and modifiers is a bit-mask of any modifier keys used (buf fer.MOD_CTRL for Control, buffer.MOD_SHIFT for Shift, buf fer.MOD_ALT for Alt, and buffer.MOD_META for Command). events.INDICATOR_RELEASE position Emitted when releasing the mouse after clicking on text that has an indicator present. position is the clicked text’s position. Show an Interactive List Textadept has the ability to display two types of interactive lists that update as the user types: an autocompletion list and a user list. An autocompletion list is a list of completions shown for the current word. A user list is a more general list of options presented to the user. Both types of lists have similar behavior and may display images alongside text. All of the above is described in the following sections. 58 | Textadept Quick Reference Concept Index Symbols ~/.textadept/, 3, 8, 10 A annotations, 54 autocompleting code, 59 autocompletion list configuring, 61 displaying, 59 images in, displaying, 62-64 information, 64 autopaired characters, 25 B block comments, 28 bookmarks, 21, 53, 95 brace matching, 21, 96, 104 buffers creating, 12 line information in, 46 list of open, 9 manipulating text in (see manipulating text) measurements, 47 moving around in (see moving around) moving between, 20 position information in, 45 searching and replacing in (see searching for text) selecting text in (see selecting text) C call tip configuring, 66, 92, 96 displaying, 65 information, 67 character classifications, 89 clipboard operations, 29 code autocompletion, 59 code folding, 67, 103, 120 color theme bookmarks, 95 carets, 93 changing, 90 color definitions, 91, 93 highlighted words, 96 indicators, 95 location of, 6 long lines, 97 margins, 94 markers, 94 matching braces, 96 selections, 94 styles for, 91-93 whitespace, 96 Command Entry, 81 Lua commands with, issuing, 83 command line options, 8-10 commenting code, 28 compiling and running code, 83 configuring Textadept ~/.textadept/, 8 autopaired characters, 25 block comments, 28 character classifications, 89 color theme (see color theme) compile and run code, 84 display settings (see display settings) file types, 106 Index | 151 configuring Textadept (continued) key bindings (see key bindings) line endings, 88 line indentation, 87 locale, 5 matching braces, 104 sessions, 8, 18 snippets (see snippets) typeover characters, 25 D deleting text, 25 dialogs dropdown, 76-78 file selection, 73 filtered list, 78 inputbox, 72 messagebox, 70 option, 80 textbox, 75 display settings carets, 97 indentation guides, 104 long lines, 103 matching braces, 104 mouse cursor, 100 scrollbars, 99 selections, 98 whitespace, 98 window, 104 wrapped lines, 101 zoom, 102 downloading Textadept, 2 dropdown dialog, 76-78 E encodings converting between, 28 for files, 15 of filesystem, 10 supported, list of, 15 end of lines, 88 152 | Index environment variables, 3 events autocompletion list, 65 buffer and view, 13 call tip, 67 compile and run, 85 connecting to, 11 CSI, 125 double click, 125 dwell, 125 emitting, 11 error, 126 Find & Replace, 44 focus, 126 indicator, 58 initialized, 126 input and output, 17 interactive list, 65 keypress, 126 lexer, 121 margin, 49 mouse, 126 movement, 21 no command line arguments, 125 quit, 126 reset, 126 resume, 126 suspend, 126 text, 30 update, 126 user list, 65 F file encodings, 15 file filters, 15 file information, 16 file operations, 13-16 file selection dialog, 73 file types, 106 filesystem encoding, 10 filtered list dialog, 78 filtering text through shell commands, 27 Find & Replace Pane, 42 Lua pattern syntax for, 39 search flags for, 42 searching and replacing with, 43 searching in files with, 43 finding text (see searching for text) fold markers, 51 folding lines, 67 fonts and font sizes, 91-93, 102 H hiding lines, 68 highlighting words, 57, 96 I image formats, RGBA, 129 XPM, 128 incremental searching, 44 indentation, 26, 46, 87-89 indentation guides, 104 indicators, 55-58, 95 init.lua, 4 input, prompting for (see dialogs) inputbox dialog, 72 inserting text, 23 installing Textadept, 2 interactive lists (see autocompletion list; user list) internationalizing messages, 9 K key bindings configuring, 110 keys.KEYSYMS, 109 modifier keys, list of, 109 terminology, 107-109 L language modules, location of, 5 lexers changing, 106 code folding, 120 defining, 113 embedding, 120 fold points, 120 information, 106 location of, 6 patterns, 114-117 properties for, 121 rules, 118 styles, 119 tokens, 118 line annotations, 54 line endings, 88 line indentation, 26, 46, 87-89 line information, 46 line margins, 47-49, 94 line markers, 50-54, 94 line wrapping, 101 lines annotations, 54 bookmarking, 53 endings for, 88 folding, 67 hiding, 68 indentation for, 26, 46, 87-89 information for, 46, 68 joining, 27 long, 97, 103 marking, 50-53, 94 moving between, 19 moving up or down, 27 moving within, 18 splitting, 27 transposing, 26 wrapping, 101 locale, 3, 5 Index | 153 localizing messages, 9 long lines, 97, 103 Lua commands, issuing, 8, 83 Lua pattern syntax, 39 M manipulating text clipboard, using the, 29 converting between encodings, 28 deleting, 25 inserting, 23 replacing, 24 retrieving, 22 setting, 23 transforming, 27 margins, 47-49, 94 marking lines, 50-53, 94 marking text, 55-57, 95 matching braces, 21, 96, 104 measurements, 47 messagebox dialog, 70 modules, location of, 5 moving around between bookmarks, 21 between buffers, 20 between lines, 19 within lines, 18 between matching braces, 21 between pages, 20 between paragraphs, 21 selecting and, 32, 36 between views, 20 multiple selections, 34, 37 O option dialog, 80 overtype mode, toggling, 124 P pages, moving between, 20 154 | Index paragraphs, moving between, 21 piping text through shell commands, 27 pixmaps, 128 position information, 45 post_init.lua, 5 printing messages, 23 processes, spawning of, 85-87 properties.lua, 5 Q quitting, 124 R rectangular selections, 35-37 replacing text, 24, 41 resetting, 124 retrieving text, 22 RGBA image format, 129 running code, 83 running Textadept, 8 S scrolling, 69, 99 search flags, 38, 42 searching for text in files, 43 Find & Replace Pane, using the, 42 incrementally, 44 regular expression syntax for, 39 replacing and, 41 search flags for, 38, 42 simple search, 40 selecting text modal selection, 34 multiple selection, 34 rectangular selection, 35 simple selection, 31 while moving, 32 selections, 36, 94, 98 sessions, 8, 18 setting text, 23 snippets configuring, 112 inserting, 24 special characters, list of, 112 terminology, 111 spawning processes, 85-87 split views, 12 style information, 124 styles, 91-93 styling text, 122-124 (see also lexers) switching buffers, 20 switching views, 20 syntax highlighting, 106, 122 (see also lexers) user data directory, 3, 8, 10 user list configuring, 61 displaying, 60 images in, displaying, 62-64 information, 64 T window, 104 wrapping lines, 101 target ranges, 24, 27, 41 text indicators, 55-58, 95 text manipulations (see manipulating text) text selections (see selecting text; selections) Textadept configuring (see configuring Textadept) downloading, 2 installing, 2 running, 8 user data directory of, 3, 8, 10 textbox dialog, 75 theme (see color theme) transforming text, 27 transposing characters and lines, 26 typeover characters, 25 V variables, 9 views information, 12 list of open, 9 moving between, 20 scrolling, 69 splitting, 12 unsplitting, 12 W X XPM image format, 128 Z zooming, 102 U undo and redo actions, 29 Index | 155