aboutsummaryrefslogtreecommitdiffhomepage
path: root/doc/10_Advanced.md
blob: 1009733e3a2c042121b20b64da5c44f682c8ce6a (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
# Advanced

## Command Entry

Access to the Lua state is available through the command entry. Press `Ctrl+E`
(`⌘E` on Mac OSX | `M-C` in ncurses) to access it. It is useful for debugging,
inspecting, and entering `buffer` or `view` commands. If you try to cause
instability in Textadept's Lua state, you might very well succeed so be careful.
For available commands, see the [Lua API][]. Abbreviated commands for
[`buffer`][], [`view`][] and [`gui`][] are available: the command
`buffer:append_text('foo')` can be shortened to `append_text('foo')`. As a
result, use `_G.print()` for Lua's `print()` since [`gui.print()`][] is
shortened to `print()`.

![Command Entry](images/commandentry.png)

[Lua API]: api/index.html
[`buffer`]: api/buffer.html
[`view`]: api/view.html
[`gui`]: api/gui.html
[`gui.print()`]: api/gui.html#print

### Tab Completion

Tab-completion for functions, variables, tables, etc. is available. Press the
`Tab` (`⇥` on Mac OSX | `Tab` in ncurses) key to display a list of available
completions. Use the arrow keys to make a selection and press `Enter` (`↩` |
`Enter`) to insert it.

![Command Completion](images/commandentrycompletion.png)

### Extending

You can extend the command entry to do more than enter Lua commands. An
example of this is [incremental search][]. See `modules/textadept/find.lua` for
the implementation.

[incremental search]: api/gui.find.html#find_incremental

## Command Selection

If you did not disable the menu in your [preferences][], then pressing
`Ctrl+Shift+E` (`⌘⇧E` on Mac OSX | `M-S-C` in ncurses) brings up the command
selection dialog. Typing part of any command filters the list, with spaces being
wildcards. This is an easy way to run commands without navigating the menus,
using the mouse, or remembering key bindings. It is also useful for looking up
particular key bindings quickly. Note: the key bindings in the dialog do not
look like those in the menu. This different notation is how bindings are
represented internally. You can learn more about this in the [keys LuaDoc].

[preferences]: 08_Preferences.html#User.Init
[keys LuaDoc]: api/keys.html

## Shell Commands and Filtering Text

Sometimes it is easier to use an existing shell command to manipulate text
instead of using the command entry. An example would be sorting all text in a
buffer (or a selection). You could do the following from the command entry:

    ls={}; for l in buffer:get_text():gmatch('[^\n]+') do ls[#ls+1]=l end;
    table.sort(ls); buffer:set_text(table.concat(ls, '\n'))

A simpler way would be to press `Ctrl+|` (`⌘|` on Mac OSX | `^\` in ncurses),
enter the shell command `sort`, and hit `Enter` (`↩` | `Enter`).

The standard input (stdin) for shell commands is determined as follows:

* If text is selected and spans multiple lines, all text on the lines containing
  the selection is used. However, if the end of the selection is at the
  beginning of a line, only the EOL (end of line) characters from the previous
  line are included as input. The rest of the line is excluded.
* If text is selected and spans a single line, only the selected text is used.
* If no text is selected, the entire buffer is used.

The input text is replaced with the standard output (stdout) of the command.