aboutsummaryrefslogtreecommitdiff
path: root/doc/11_Scripting.md
blob: facc1a55ebf29387a77ac1eecc655bcfa3da6cae (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
103
104
105
106
107
108
109
# Scripting

Textadept is entirely scriptable with Lua. In fact, the editor is mostly written
in Lua. As a result, Textadept has superb support for editing Lua code. Syntax
autocomplete and API documentation is available for many Textadept objects as
well as Lua's standard libraries. The [`lua` module][] also has more tools for
working with Lua code.

![Adeptsense ta](images/adeptsense_ta.png)
    
![Adeptsense tadoc](images/adeptsense_tadoc.png)

[`lua` module]: api/_M.lua.html

## LuaDoc and Examples

Textadept's API is heavily documented. The [API documentation][] is the ultimate
resource on scripting Textadept. There are of course abundant scripting examples
since the editor is written primarily in Lua.

[API documentation]: api/index.html

### Generating LuaDoc

You can generate Textadept-like API documentation for your own modules using the
*doc/markdowndoc.lua* [LuaDoc][] module (you must have [Discount][] installed):

    luadoc -d . [-t template_dir] --doclet _HOME/doc/markdowndoc [module(s)]

where `_HOME` is where Textadept is installed and `template_dir` is an optional
template directory that contains two Markdown files: *.header.md* and
*.footer.md*. (See *doc/.header.md* and *doc/.footer.md* for examples.) An
*api/* directory containing the API documentation HTML files is created in the
current directory.

[LuaDoc]: http://keplerproject.github.com/luadoc/
[Discount]: http://www.pell.portland.or.us/~orc/Code/discount/

## Lua Configuration

[Lua 5.2][] is built into Textadept. It has the same configuration (*luaconf.h*)
as vanilla Lua with the following exceptions:

* `TA_LUA_PATH` and `TA_LUA_CPATH` are the environment variable used in place of
  the usual `LUA_PATH` and `LUA_CPATH`.
* `LUA_ROOT` is "/usr/" in Linux systems instead of "/usr/local/".
* `LUA_PATH` and `LUA_CPATH` do not have "./?.lua" and "./?.so" in them.
* All compatibility flags for Lua 5.1 are turned off. (`LUA_COMPAT_UNPACK`,
  `LUA_COMPAT_LOADERS`, `LUA_COMPAT_LOG10`, `LUA_COMPAT_LOADSTRING`,
  `LUA_COMPAT_MAXN`, and `LUA_COMPAT_MODULE`.)

[Lua 5.2]: http://www.lua.org/manual/5.2/

### LuaJIT

Even though Textadept can be run with [LuaJIT][], LuaJIT is based on Lua 5.1 and
is not fully compatible with Lua 5.2. Therefore, modules and scripts should be
written to be compatible with both versions. There is a compatibility layer in
*core/compat.lua*. Please see it for more information.

[LuaJIT]: http://luajit.org

## Scintilla

The editing component used by Textadept is [Scintilla][]. The [buffer][] part of
Textadept's API is derived from the [Scintilla API][] so any C/C++ code using
Scintilla calls can be ported to Lua without too much trouble.

[Scintilla]: http://scintilla.org
[buffer]: api/buffer.html
[Scintilla API]: http://scintilla.org/ScintillaDoc.html

## Textadept Structure

Because Textadept is mostly written in Lua, its Lua scripts have to be stored in
an organized folder structure.

### Core

Textadept's core Lua modules are contained in *core/*. These are absolutely
necessary in order for the application to run. They are responsible for
Textadept's Lua to C interface, event structure, file interactions, and
localization.

### Lexers

Lexer modules are responsible for the syntax highlighting of source code. They
are located in *lexers/*.

### Modules

Generic and language-specific modules for editing text and source code are
contained in *modules/*.

### Themes

Built-in themes to customize the look and behavior of Textadept are located in
*themes/*.

### User

User preferences, Lua modules, themes, and user-data are contained in the
*~/.textadept/* folder. This folder may contain *lexers/*, *modules/*, and
*themes/* sub-directories.

### GTK+

The *etc/*, *lib/*, and *share/* directories are used by GTK+ and only appear in
the Win32 and Mac OSX packages.