# 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. For the most part, only Lua 5.2's `_ENV` is not supported by LuaJIT. [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.