aboutsummaryrefslogtreecommitdiff
path: root/doc/manual/07_Modules.md
diff options
context:
space:
mode:
authormitchell <70453897+667e-11@users.noreply.github.com>2012-03-07 09:31:09 -0500
committermitchell <70453897+667e-11@users.noreply.github.com>2012-03-07 09:31:09 -0500
commitcbe7f531f956573cf55efba417965976672e6c63 (patch)
tree17fb2eaa554fa188484d5ee5bb8db4217afd7e33 /doc/manual/07_Modules.md
parent96c85498c019e381d0aeed2e33e626563563ea8c (diff)
downloadtextadept-cbe7f531f956573cf55efba417965976672e6c63.tar.gz
textadept-cbe7f531f956573cf55efba417965976672e6c63.zip
Renamed manual pages 1-9 to preserve sort order.
Diffstat (limited to 'doc/manual/07_Modules.md')
-rw-r--r--doc/manual/07_Modules.md158
1 files changed, 158 insertions, 0 deletions
diff --git a/doc/manual/07_Modules.md b/doc/manual/07_Modules.md
new file mode 100644
index 00000000..1b915c85
--- /dev/null
+++ b/doc/manual/07_Modules.md
@@ -0,0 +1,158 @@
+# Modules
+
+Most of Textadept's functionality comes from modules written in Lua. A module
+consists of a single directory with an `init.lua` script to load any additional
+Lua files (typically in the same location). Essentially there are two classes of
+module: generic and language-specific.
+
+## Generic
+
+This class of modules is usually available globally for programming in all
+languages or writing plain-text. An example is the [textadept module][] which
+implements most of Textadept's functionality (find/replace, key commands, menus,
+snippets, etc.). These kinds of modules are generally loaded on startup. See the
+[preferences][] page for instructions on how to load generic modules when
+Textadept starts.
+
+[textadept module]: ../api/_M.textadept.html
+[preferences]: 9_Preferences.html#User.Init
+
+## Language Specific
+
+Each module of this class of modules is named after a language lexer in the
+`lexers/` directory and is only available only for editing code in that
+particular programming language unless you specify otherwise. Examples are the
+[cpp][] and [lua][] modules which provide special editing features for the C/C++
+and Lua languages respectively.
+
+[cpp]: ../api/_M.cpp.html
+[lua]: ../api/_M.lua.html
+
+### Lexer
+
+All languages have a [lexer][] that performs syntax highlighting on the source
+code. While the lexer itself is not part of the module, its existence in
+`lexers/` is required.
+
+[lexer]: ../api/lexer.html
+
+### Activation
+
+Language-specific modules are automatically loaded when a file of that language
+is loaded or a buffer's lexer is set to that language.
+
+### Snippets
+
+Most language-specific modules have a set of [snippets][]. Press `Ctrl+K` (`⌥⇥`
+on Mac OSX) for a list of available snippets or see the module's Lua code. To
+insert a snippet, type its trigger followed by the `Tab` (`⇥`) key. Subsequent
+presses of `Tab` (`⇥`) causes the caret to enter tab stops in sequential order,
+`Shift+Tab` (`⇧⇥`) goes back to the previous tab stop, and `Ctrl+Shift+K` (`⌥⇧⇥`
+on Mac OSX) cancels the current snippet. Snippets can be nested (inserted from
+within another snippet).
+
+![Snippet](images/snippet.png)
+&nbsp;&nbsp;&nbsp;&nbsp;
+![Snippet Expanded](images/snippet2.png)
+
+[snippets]: ../api/_M.textadept.snippets.html
+
+### Commands
+
+Most language-specific modules have a set of [key commands][]. See the module's
+Lua code for which key commands are available. They are typically stored in the
+`Ctrl+L` (`⌘L` on Mac OSX) key prefix.
+
+[key commands]: ../api/_M.textadept.keys.html
+
+#### Run
+
+Most language-specific modules have a command that runs the code in the current
+file. Pressing `Ctrl+R` (`⌘R` on Mac OSX) runs that command.
+
+#### Compile
+
+Most language-specific modules have a command that compiles the code in the
+current file. Pressing `Ctrl+Shift+R` (`⌘⇧R` on Mac OSX) runs that command.
+
+#### Block Comments
+
+Pressing `Ctrl+/` (`⌘/` on Mac OSX) comments or uncomments the code on the
+selected lines.
+
+### Buffer Properties
+
+Sometimes language-specific modules set default buffer properties like tabs and
+indentation size. See the module's Lua code for these settings. If you wish to
+change them or use different settings, see the
+[Customizing Modules](#Customizing.Modules) section below.
+
+### Context Menu
+
+Some language-specific modules add extra actions to the context menu.
+Right-click inside the view to bring up this menu.
+
+## Getting Modules
+
+The officially supported language modules are hosted [here][] and are available
+as a separate download. To upgrade to the most recent version of a module, you
+can either use [Mercurial][] (run `hg pull` and then `hg update` on or from
+within the module) or download a zipped version from the module's repository
+homepage and overwrite the existing one. If you do not have access to `_HOME`,
+place the updated module in your `_USERHOME` and replace all instances of
+`_HOME` with `_USERHOME` in the module's `init.lua`.
+
+For now, user-created modules are obtained from the [wiki][].
+
+[here]: http://foicica.com/hg
+[Mercurial]: http://mercurial.selenic.com
+[wiki]: http://caladbolg.net/textadeptwiki
+
+## Installing Modules
+
+It is recommended to put all custom or user-created modules in your
+`~/.textadept/modules/` directory so they will not be overwritten when you
+update Textadept. Also, modules in that directory override any modules in
+Textadept's `modules/` directory. This means that if you have your own `lua`
+module, it will be loaded instead of the one that comes with Textadept.
+
+## Developing Modules
+
+See the [LuaDoc][] for modules.
+
+[LuaDoc]: ../api/_M.html
+
+## Customizing Modules
+
+It is never recommended to modify the default modules that come with Textadept,
+even if you just want to change the buffer settings for a language-specific
+module or add a few more snippets. Instead you have two options: load your own
+module instead of the default one or load your custom module code after the
+default module loads. To load your own module, simply place it appropriately in
+`~/.textadept/modules/`. To load your module code after the default module
+loads, create a `post_init.lua` Lua script in the appropriate
+`~/.textadept/modules/` sub-folder. Please note that for generic modules, only
+the first option applies. Either option applies for language-specific modules.
+
+Suppose you wanted to completely change the menubar structure. You would first
+create a new `menu.lua` and then put it in `~/.textadept/modules/textadept/`.
+Now when Textadept looks for `menu.lua`, it will load yours instead of its own.
+Similarly, if you copy the default Lua language-specific module (`modules/lua`)
+to `~/.textadept/modules/` and make custom changes, that module is loaded for
+editing Lua code instead of the default module.
+
+If you keep a modified copy of language-specific modules, you will likely want
+to update them with each new Textadept release. Instead of potentially wasting
+time merging your changes, you can load custom code independent of the module in
+a `post_init.lua` file. For example, instead of copying the `lua` module and
+changing its `set_buffer_properties()` function to use tabs, you can do this
+from `post_init.lua`:
+
+ function _M.lua.set_buffer_properties()
+ buffer.use_tabs = true
+ end
+
+Similarly, you can use `post_init.lua` to change the compile/run commands, load
+more [Adeptsense tags][], and add additional key commands and snippets.
+
+[Adeptsense tags]: ../api/_M.textadept.adeptsense.html#load_ctags