aboutsummaryrefslogtreecommitdiff
path: root/doc/07_Modules.md
blob: f78419eee64404299aacb4de52034168d60280c2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# Modules

Most of Textadept's functionality comes from Lua modules. Essentially there are
two classes of module: generic and language-specific. A generic module provides
features for all programming languages while a language-specific module provides
features for a specific programming language.

## Generic

Generic modules have a broad scope and are usually available 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
bindings, 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]: 08_Preferences.html#Loading.Modules

## Language-Specific

Language-specific modules have a scope limited to a single programming language.
The name of the module is named after the language's lexer in the *lexers/*
directory and is automatically loaded when editing source code in that
particular language. In addition to some of the editing features discussed
[earlier][], these kinds of modules typically also have shell commands for
running and compiling code, indentation settings, custom key bindings, and
perhaps a custom context menu. These features are discussed below.

[earlier]: 06_AdeptEditing.html#Source.Code.Editing

### Compile and Run

Most language-specific modules have a command that compiles and/or runs the code
in the current file. Pressing `Ctrl+Shift+R` (`⌘⇧R` on Mac OSX | `M-^R` in
ncurses) executes the command for compiling code and `Ctrl+R` (`⌘R` | `^R`)
executes the command for running code. Double-clicking on any error messages
will jump to where the errors occurred. Note: In order for these features to
work, the language you are working with must have its compile and run commands
and error format defined. If the language-specific module does not exist or does
not [define][] commands or an error format, it can be done [manually][] in your
[user-init file][].

[define]: api/_M.html#Compile.and.Run
[manually]: http://foicica.com/wiki/run-supplemental
[user-init file]: 08_Preferences.html#User.Init

### Buffer Properties

Some programming languages have style guidelines for indentation and/or line
endings which differ from Textadept's defaults. In this case, language-specific
modules [set][] these preferences. If you wish to change them or use your own
preferences, see the [language module preferences][] section.

[set]: api/_M.html#Buffer.Properties
[language module preferences]: 08_Preferences.html#Language-Specific

### Key Bindings

Most language-specific modules have a set of key bindings for
[custom commands][]. See the module's [LuaDoc][] or code to find out which key
bindings are assigned. They are typically stored in the `Ctrl+L` (`⌘L` on Mac
OSX | `M-L` in ncurses) key chain prefix.

[custom commands]: api/_M.html#Commands
[LuaDoc]: api/index.html

### 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.

For now, user-created modules are obtained from the [wiki][].

[here]: http://foicica.com/hg
[Mercurial]: http://mercurial.selenic.com
[wiki]: http://foicica.com/wiki/textadept

## Installing Modules

If you do not have write permissions for the directory Textadept is installed
in, place the module in your *~/.textadept/modules/* folder and replace all
instances of `_HOME` with `_USERHOME` in the module's *init.lua*. 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 [module LuaDoc][].

[module LuaDoc]: api/_M.html