TECLA(7) Standards, Environments, and Macros TECLA(7)
NAME
tecla, teclarc - User interface provided by the tecla library.
DESCRIPTION
This man page describes the command-line editing features that are
available to users of programs that read keyboard input via the tecla
library. Users of the
tcsh shell will find the default key bindings very
familiar. Users of the
bash shell will also find it quite familiar, but
with a few minor differences, most notably in how forward and backward
searches through the list of historical commands are performed. There are
two major editing modes, one with
emacs-like key bindings and another
with
vi-like key bindings. By default
emacs mode is enabled, but
vi(1) mode can alternatively be selected via the user's configuration file.
This file can also be used to change the bindings of individual keys to
suit the user's preferences. By default, tab completion is provided. If
the application hasn't reconfigured this to complete other types of
symbols, then tab completion completes file names.
Key Sequence Notation
In the rest of this man page, and also in all tecla configuration files,
key sequences are expressed as follows.
^A or
C-a This is a 'CONTROL-A', entered by pressing the CONTROL key
at the same time as the 'A' key.
\E or
M- In key sequences, both of these notations can be entered
either by pressing the ESCAPE key, then the following key,
or by pressing the META key at the same time as the
following key. Thus the key sequence
M-p can be typed in two
ways, by pressing the ESCAPE key, followed by pressing 'P',
or by pressing the META key at the same time as 'P'.
up This refers to the up-arrow key.
down This refers to the down-arrow key.
left This refers to the left-arrow key.
right This refers to the right-arrow key.
a This is just a normal 'A' key.
The Tecla Configuration File
By default, tecla looks for a file called
.teclarc in your home directory
(ie.
~/.teclarc). If it finds this file, it reads it, interpreting each
line as defining a new key binding or an editing configuration option.
Since the
emacs key-bindings are installed by default, if you want to use
the non-default
vi editing mode, the most important item to go in this
file is the following line:
edit-mode vi
This will re-configure the default bindings for
vi-mode. The complete set
of arguments that this command accepts are:
vi Install key bindings like those of the
vi editor.
emacs Install key bindings like those of the
emacs editor. This is the
default.
none Use just the native line editing facilities provided by the
terminal driver.
To prevent the terminal bell from being rung, such as when an
unrecognized control-sequence is typed, place the following line in the
configuration file:
nobeep
An example of a key binding line in the configuration file is the
following.
bind M-[2~ insert-mode
On many keyboards, the above key sequence is generated when one presses
the insert key, so with this key binding, one can toggle between the
emacs-mode insert and overwrite modes by hitting one key. One could also
do it by typing out the above sequence of characters one by one. As
explained above, the
M- part of this sequence can be typed either by
pressing the ESCAPE key before the following key, or by pressing the META
key at the same time as the following key. Thus if you had set the above
key binding, and the insert key on your keyboard didn't generate the
above key sequence, you could still type it in either of the following 2
ways.
1. Hit the ESCAPE key momentarily, then press '[', then '2', then
finally '~'.
2. Press the META key at the same time as pressing the '[' key,
then press '2', then '~'.
If you set a key binding for a key sequence that is already bound to a
function, the new binding overrides the old one. If in the new binding
you omit the name of the new function to bind to the key sequence, the
original binding becomes undefined.
Starting with versions of
libtecla later than 1.3.3 it is now possible to
bind key sequences that begin with a printable character. Previously key
sequences were required to start with a CONTROL or META character.
Note that the special keywords "up", "down", "left", and "right" refer to
the arrow keys, and are thus not treated as key sequences. So, for
example, to rebind the up and down arrow keys to use the history search
mechanism instead of the simple history recall method, you could place
the following in your configuration file:
bind up history-search-backwards
bind down history-search-backwards
To unbind an existing binding, you can do this with the bind command by
omitting to name any action to rebind the key sequence to. For example,
by not specifying an action function, the following command unbinds the
default beginning-of-line action from the
^A key sequence:
bind ^A
If you create a
~/.teclarc configuration file, but it appears to have no
effect on the program, check the documentation of the program to see if
the author chose a different name for this file.
Filename and Tilde Completion
With the default key bindings, pressing the TAB key (aka.
^I) results in
tecla attempting to complete the incomplete file name that precedes the
cursor. Tecla searches backwards from the cursor, looking for the start
of the file name, stopping when it hits either a space or the start of
the line. If more than one file has the specified prefix, then tecla
completes the file name up to the point at which the ambiguous matches
start to differ, then lists the possible matches.
In addition to literally written file names, tecla can complete files
that start with
~/ and
~user/ expressions and that contain
$envvar expressions. In particular, if you hit TAB within an incomplete
~user,
expression, tecla will attempt to complete the username, listing any
ambiguous matches.
The completion binding is implemented using the
cpl_complete_word() function, which is also available separately to users of this library.
See the
cpl_complete_word(3TECLA) man page for more details.
Filename Expansion
With the default key bindings, pressing
^X* causes tecla to expand the
file name that precedes the cursor, replacing
~/ and
~user/ expressions
with the corresponding home directories, and replacing
$envvar expressions with the value of the specified environment variable, then if
there are any wildcards, replacing the so far expanded file name with a
space-separated list of the files which match the wild cards.
The expansion binding is implemented using the
ef_expand_file() function.
See the
ef_expand_file(3TECLA) man page for more details.
Recalling Previously Typed Lines
Every time that a new line is entered by the user, it is appended to a
list of historical input lines maintained within the
GetLine resource
object. You can traverse up and down this list using the up and down
arrow keys. Alternatively, you can do the same with the
^P, and
^N keys,
and in
vi command mode you can alternatively use the k and j characters.
Thus pressing up-arrow once, replaces the current input line with the
previously entered line. Pressing up-arrow again, replaces this with the
line that was entered before it, etc.. Having gone back one or more lines
into the history list, one can return to newer lines by pressing down-
arrow one or more times. If you do this sufficient times, you will
return to the original line that you were entering when you first hit up-
arrow.
Note that in
vi mode, all of the history recall functions switch the
library into command mode.
In
emacs mode the
M-p and
M-n keys work just like the
^P and
^N keys,
except that they skip all but those historical lines which share the
prefix that precedes the cursor. In
vi command mode the upper case 'K'
and 'J' characters do the same thing, except that the string that they
search for includes the character under the cursor as well as what
precedes it.
Thus for example, suppose that you were in
emacs mode, and you had just
entered the following list of commands in the order shown:
ls ~/tecla/
cd ~/tecla
ls -l getline.c
emacs ~/tecla/getline.c
If you next typed:
ls
and then hit
M-p, then rather than returning the previously typed
emacs line, which doesn't start with "ls", tecla would recall the "ls -l
getline.c" line. Pressing
M-p again would recall the "ls ~/tecla/" line.
Note that if the string that you are searching for, contains any of the
special characters, *, ?, or '[', then it is interpreted as a pattern to
be matched. Thus, continuing with the above example, after typing in the
list of commands shown, if you then typed:
*tecla*
and hit
M-p, then the "
emacs ~/tecla/getline.c" line would be recalled
first, since it contains the word tecla somewhere in the line, Similarly,
hitting
M-p again, would recall the "ls ~/tecla/" line, and hitting it
once more would recall the "ls ~/tecla/" line. The pattern syntax is the
same as that described for file name expansion, in the
ef_expand_file(3TECLA).
History Files
Authors of programs that use the tecla library have the option of saving
historical command-lines in a file before exiting, and subsequently
reading them back in from this file when the program is next started.
There is no standard name for this file, since it makes sense for each
application to use its own history file, so that commands from different
applications don't get mixed up.
International Character Sets
Since
libtecla version 1.4.0, tecla has been 8-bit clean. This means that
all 8-bit characters that are printable in the user's current locale are
now displayed verbatim and included in the returned input line. Assuming
that the calling program correctly contains a call like the following,
setlocale(LC_CTYPE, "");
then the current locale is determined by the first of the environment
variables
LC_CTYPE,
LC_ALL, and
LANG, that is found to contain a valid
locale name. If none of these variables are defined, or the program
neglects to call
setlocale, then the default C locale is used, which is
US 7-bit ASCII. On most unix-like platforms, you can get a list of valid
locales by typing the command:
locale -a
at the shell prompt.
Meta Keys and Locales
Beware that in most locales other than the default C locale, META
characters become printable, and they are then no longer considered to
match
M-c style key bindings. This allows international characters to be
entered with the compose key without unexpectedly triggering META key
bindings. You can still invoke META bindings, since there are actually
two ways to do this. For example the binding
M-c can also be invoked by
pressing the ESCAPE key momentarily, then pressing the c key, and this
will work regardless of locale. Moreover, many modern terminal
emulators, such as gnome's gnome-terminal's and KDE's konsole terminals,
already generate escape pairs like this when you use the META key, rather
than a real meta character, and other emulators usually have a way to
request this behavior, so you can continue to use the META key on most
systems.
For example, although xterm terminal emulators generate real 8-bit meta
characters by default when you use the META key, they can be configured
to output the equivalent escape pair by setting their
EightBitInput X
resource to False. You can either do this by placing a line like the
following in your
~/.Xdefaults file,
XTerm*EightBitInput: False
or by starting an
xterm with an
-xrm '*EightBitInput: False' command-line
argument. In recent versions of xterm you can toggle this feature on and
off with the 'Meta Sends Escape' option in the menu that is displayed
when you press the left mouse button and the CONTROL key within an xterm
window. In CDE, dtterms can be similarly coerced to generate escape pairs
in place of meta characters, by setting the
Dtterm*KshMode resource to
True.
Entering International Characters
If you don't have a keyboard that generates all of the international
characters that you need, there is usually a compose key that will allow
you to enter special characters, or a way to create one. For example,
under X windows on unix-like systems, if your keyboard doesn't have a
compose key, you can designate a redundant key to serve this purpose with
the xmodmap command. For example, on many PC keyboards there is a
microsoft-windows key, which is otherwise useless under Linux. On a
laptop, for example, the
xev program might report that pressing this key
generates keycode 115. To turn this key into a COMPOSE key, do the
following:
xmodmap -e 'keycode 115 = Multi_key'
Type this key followed by a " character to enter an 'I' with a umlaut
over it.
The Available Key Binding Functions
The following is a list of the editing functions provided by the tecla
library. The names in the leftmost column of the list can be used in
configuration files to specify which function a given key or combination
of keys should invoke. They are also used in the next two sections to
list the default key bindings in
emacs and
vi modes.
user-interrupt Send a SIGINT signal to the parent process.
suspend Suspend the parent process.
stop-output Pause terminal output.
start-output Resume paused terminal output.
literal-next Arrange for the next character to be
treated as a normal character. This allows
control characters to be entered.
cursor-right Move the cursor one character right.
cursor-left Move the cursor one character left.
insert-mode Toggle between insert mode and overwrite
mode.
beginning-of-line Move the cursor to the beginning of the
line.
end-of-line Move the cursor to the end of the line.
delete-line Delete the contents of the current line.
kill-line Delete everything that follows the cursor.
backward-kill-line Delete all characters between the cursor
and the start of the line.
forward-word Move to the end of the word which follows
the cursor.
forward-to-word Move the cursor to the start of the word
that follows the cursor.
backward-word Move to the start of the word which
precedes the cursor.
goto-column Move the cursor to the 1-relative column in
the line specified by any preceding digit-
argument sequences (see Entering Repeat
Counts below).
find-parenthesis If the cursor is currently over a
parenthesis character, move it to the
matching parenthesis character. If not over
a parenthesis character move right to the
next close parenthesis.
forward-delete-char Delete the character under the cursor.
backward-delete-char Delete the character which precedes the
cursor.
list-or-eof This is intended for binding to
^D. When
invoked when the cursor is within the line
it displays all possible completions then
redisplays the line unchanged. When invoked
on an empty line, it signals end-of-input
(EOF) to the caller of
gl_get_line().
del-char-or-list-or-eof This is intended for binding to
^D. When
invoked when the cursor is within the line
it invokes forward-delete-char. When
invoked at the end of the line it displays
all possible completions then redisplays
the line unchanged. When invoked on an
empty line, it signals end-of-input (EOF)
to the caller of
gl_get_line().
forward-delete-word Delete the word which follows the cursor.
backward-delete-word Delete the word which precedes the cursor.
upcase-word Convert all of the characters of the word
which follows the cursor, to upper case.
downcase-word Convert all of the characters of the word
which follows the cursor, to lower case.
capitalize-word Capitalize the word which follows the
cursor.
change-case If the next character is upper case, toggle
it to lower case and vice versa.
redisplay Redisplay the line.
clear-screen Clear the terminal, then redisplay the
current line.
transpose-chars Swap the character under the cursor with
the character just before the cursor.
set-mark Set a mark at the position of the cursor.
exchange-point-and-mark Move the cursor to the last mark that was
set, and move the mark to where the cursor
used to be.
kill-region Delete the characters that lie between the
last mark that was set, and the cursor.
copy-region-as-kill Copy the text between the mark and the
cursor to the cut buffer, without deleting
the original text.
yank Insert the text that was last deleted, just
before the current position of the cursor.
append-yank Paste the current contents of the cut
buffer, after the cursor.
up-history Recall the next oldest line that was
entered. Note that in
vi mode you are left
in command mode.
down-history Recall the next most recent line that was
entered. If no history recall session is
currently active, the next line from a
previous recall session is recalled. Note
that in vi mode you are left in command
mode.
history-search-backward Recall the next oldest line who's prefix
matches the string which currently precedes
the cursor (in
vi command-mode the
character under the cursor is also included
in the search string). Note that in
vi mode
you are left in command mode.
history-search-forward Recall the next newest line who's prefix
matches the string which currently precedes
the cursor (in
vi command-mode the
character under the cursor is also included
in the search string). Note that in
vi mode
you are left in command mode.
history-re-search-backward Recall the next oldest line who's prefix
matches that established by the last
invocation of either history-search-forward
or history-search-backward.
history-re-search-forward Recall the next newest line who's prefix
matches that established by the last
invocation of either history-search-forward
or history-search-backward.
complete-word Attempt to complete the incomplete word
which precedes the cursor. Unless the host
program has customized word completion,
file name completion is attempted. In
vi command mode the character under the cursor
is also included in the word being
completed, and you are left in
vi insert
mode.
expand-filename Within the command line, expand wild cards,
tilde expressions and dollar expressions in
the file name which immediately precedes
the cursor. In
vi command mode the
character under the cursor is also included
in the file name being expanded, and you
are left in
vi insert mode.
list-glob List any file names which match the wild-
card, tilde and dollar expressions in the
file name which immediately precedes the
cursor, then redraw the input line
unchanged.
list-history Display the contents of the history list
for the current history group. If a repeat
count of
> 1 is specified, only that many
of the most recent lines are displayed. See
the Entering Repeat Counts section.
read-from-file Temporarily switch to reading input from
the file who's name precedes the cursor.
read-init-files Re-read
teclarc configuration files.
beginning-of-history Move to the oldest line in the history
list. Note that in
vi mode you are left in
command mode.
end-of-history Move to the newest line in the history list
(ie. the current line). Note that in
vi mode this leaves you in command mode.
digit-argument Enter a repeat count for the next key
binding function. For details, see the
Entering Repeat Counts section.
newline Terminate and return the current contents
of the line, after appending a newline
character. The newline character is
normally '\n', but will be the first
character of the key sequence that invoked
the newline action, if this happens to be a
printable character. If the action was
invoked by the '\n' newline character or
the '\r' carriage return character, the
line is appended to the history buffer.
repeat-history Return the line that is being edited, then
arrange for the next most recent entry in
the history buffer to be recalled when
tecla is next called. Repeatedly invoking
this action causes successive historical
input lines to be re-executed. Note that
this action is equivalent to the 'Operate'
action in ksh.
ring-bell Ring the terminal bell, unless the bell has
been silenced via the nobeep configuration
option (see The Tecla Configuration File
section).
forward-copy-char Copy the next character into the cut buffer
(NB. use repeat counts to copy more than
one).
backward-copy-char Copy the previous character into the cut
buffer.
forward-copy-word Copy the next word into the cut buffer.
backward-copy-word Copy the previous word into the cut buffer.
forward-find-char Move the cursor to the next occurrence of
the next character that you type.
backward-find-char Move the cursor to the last occurrence of
the next character that you type.
forward-to-char Move the cursor to the character just
before the next occurrence of the next
character that the user types.
backward-to-char Move the cursor to the character just after
the last occurrence before the cursor of
the next character that the user types.
repeat-find-char Repeat the last backward-find-char,
forward-find-char, backward-to-char or
forward-to-char.
invert-refind-char Repeat the last backward-find-char,
forward-find-char, backward-to-char, or
forward-to-char in the opposite direction.
delete-to-column Delete the characters from the cursor up to
the column that is specified by the repeat
count.
delete-to-parenthesis Delete the characters from the cursor up to
and including the matching parenthesis, or
next close parenthesis.
forward-delete-find Delete the characters from the cursor up to
and including the following occurrence of
the next character typed.
backward-delete-find Delete the characters from the cursor up to
and including the preceding occurrence of
the next character typed.
forward-delete-to Delete the characters from the cursor up
to, but not including, the following
occurrence of the next character typed.
backward-delete-to Delete the characters from the cursor up
to, but not including, the preceding
occurrence of the next character typed.
delete-refind Repeat the last *-delete-find or *-delete-
to action.
delete-invert-refind Repeat the last *-delete-find or *-delete-
to action, in the opposite direction.
copy-to-column Copy the characters from the cursor up to
the column that is specified by the repeat
count, into the cut buffer.
copy-to-parenthesis Copy the characters from the cursor up to
and including the matching parenthesis, or
next close parenthesis, into the cut
buffer.
forward-copy-find Copy the characters from the cursor up to
and including the following occurrence of
the next character typed, into the cut
buffer.
backward-copy-find Copy the characters from the cursor up to
and including the preceding occurrence of
the next character typed, into the cut
buffer.
forward-copy-to Copy the characters from the cursor up to,
but not including, the following occurrence
of the next character typed, into the cut
buffer.
backward-copy-to Copy the characters from the cursor up to,
but not including, the preceding occurrence
of the next character typed, into the cut
buffer.
copy-refind Repeat the last *-copy-find or *-copy-to
action.
copy-invert-refind Repeat the last *-copy-find or *-copy-to
action, in the opposite direction.
vi-mode Switch to
vi mode from emacs mode.
emacs-mode Switch to
emacs mode from
vi mode.
vi-insert From
vi command mode, switch to insert
mode.
vi-overwrite From
vi command mode, switch to overwrite
mode.
vi-insert-at-bol From
vi command mode, move the cursor to
the start of the line and switch to insert
mode.
vi-append-at-eol From
vi command mode, move the cursor to
the end of the line and switch to append
mode.
vi-append From
vi command mode, move the cursor one
position right, and switch to insert mode.
vi-replace-char From
vi command mode, replace the character
under the cursor with the next character
entered.
vi-forward-change-char From
vi command mode, delete the next
character then enter insert mode.
vi-backward-change-char From vi command mode, delete the preceding
character then enter insert mode.
vi-forward-change-word From
vi command mode, delete the next word
then enter insert mode.
vi-backward-change-word From vi command mode, delete the preceding
word then enter insert mode.
vi-change-rest-of-line From
vi command mode, delete from the
cursor to the end of the line, then enter
insert mode.
vi-change-line From
vi command mode, delete the current
line, then enter insert mode.
vi-change-to-bol From
vi command mode, delete all characters
between the cursor and the beginning of the
line, then enter insert mode.
vi-change-to-column From
vi command mode, delete the characters
from the cursor up to the column that is
specified by the repeat count, then enter
insert mode.
vi-change-to-parenthesis Delete the characters from the cursor up to
and including the matching parenthesis, or
next close parenthesis, then enter
vi insert mode.
vi-forward-change-find From
vi command mode, delete the characters
from the cursor up to and including the
following occurrence of the next character
typed, then enter insert mode.
vi-backward-change-find From vi command mode, delete the characters
from the cursor up to and including the
preceding occurrence of the next character
typed, then enter insert mode.
vi-forward-change-to From
vi command mode, delete the characters
from the cursor up to, but not including,
the following occurrence of the next
character typed, then enter insert mode.
vi-backward-change-to From
vi command mode, delete the characters
from the cursor up to, but not including,
the preceding occurrence of the next
character typed, then enter insert mode.
vi-change-refind Repeat the last vi-*-change-find or
vi-*-change-to action.
vi-change-invert-refind Repeat the last vi-*-change-find or
vi-*-change-to action, in the opposite
direction.
vi-undo In
vi mode, undo the last editing
operation.
vi-repeat-change In
vi command mode, repeat the last command
that modified the line.
Default Key Bindings In emacs Mode
The following default key bindings, which can be overridden by the tecla
configuration file, are designed to mimic most of the bindings of the
unix
tcsh shell, when it is in
emacs editing mode.
This is the default editing mode of the tecla library.
Under UNIX the terminal driver sets a number of special keys for certain
functions. The tecla library attempts to use the same key bindings to
maintain consistency. The key sequences shown for the following 6
bindings are thus just examples of what they will probably be set to. If
you have used the stty command to change these keys, then the default
bindings should match.
^C user-interrupt
^\ abort
^Z suspend
^Q start-output
^S stop-output
^V literal-next
The cursor keys are referred to by name, as follows. This is necessary
because different types of terminals generate different key sequences
when their cursor keys are pressed.
right cursor-right
left cursor-left
up up-history
down down-history
The remaining bindings don't depend on the terminal settings.
^F cursor-right
^B cursor-left
M-i insert-mode
^A beginning-of-line
^E end-of-line
^U delete-line
^K kill-line
M-f forward-word
M-b backward-word
^D del-char-or-list-or-eof
^H backward-delete-char
^? backward-delete-char
M-d forward-delete-word
M-^H backward-delete-word
M-^? backward-delete-word
M-u upcase-word
M-l downcase-word
M-c capitalize-word
^R redisplay
^L clear-screen
^T transpose-chars
^@ set-mark
^X^X exchange-point-and-mark
^W kill-region
M-w copy-region-as-kill
^Y yank
^P up-history
^N down-history
M-p history-search-backward
M-n history-search-forward
^I complete-word
^X* expand-filename
^X^F read-from-file
^X^R read-init-files
^Xg list-glob
^Xh list-history
M-< beginning-of-history
M-> end-of-history
\n newline
\r newline
M-o repeat-history
M-^V vi-mode
M-0, M-1, ... M-9 digit-argument (see below)
Note that
^I is what the TAB key generates, and that
^@ can be generated
not only by pressing the CONTROL key and the @ key simultaneously, but
also by pressing the CONTROL key and the space bar at the same time.
Default Key Bindings in vi Mode
The following default key bindings are designed to mimic the
vi style of
editing as closely as possible. This means that very few editing
functions are provided in the initial character input mode, editing
functions instead being provided by the
vi command mode. The
vi command
mode is entered whenever the ESCAPE character is pressed, or whenever a
key sequence that starts with a meta character is entered. In addition to
mimicing
vi,
libtecla provides bindings for tab completion, wild-card
expansion of file names, and historical line recall.
To learn how to tell the tecla library to use
vi mode instead of the
default
emacs editing mode, see the earlier section entitled The Tecla
Configuration File.
Under UNIX the terminal driver sets a number of special keys for certain
functions. The tecla library attempts to use the same key bindings to
maintain consistency, binding them both in input mode and in command
mode. The key sequences shown for the following 6 bindings are thus just
examples of what they will probably be set to. If you have used the
stty command to change these keys, then the default bindings should match.
^C user-interrupt
^\ abort
^Z suspend
^Q start-output
^S stop-output
^V literal-next
M-^C user-interrupt
M-^\ abort
M-^Z suspend
M-^Q start-output
M-^S stop-output
Note that above, most of the bindings are defined twice, once as a raw
control code like
^C and then a second time as a META character like
M-^C. The former is the binding for
vi input mode, whereas the latter is
the binding for
vi command mode. Once in command mode all key sequences
that the user types that they don't explicitly start with an ESCAPE or a
META key, have their first key secretly converted to a META character
before the key sequence is looked up in the key binding table. Thus, once
in command mode, when you type the letter i, for example, the tecla
library actually looks up the binding for
M-i.
The cursor keys are referred to by name, as follows. This is necessary
because different types of terminals generate different key sequences
when their cursor keys are pressed.
right cursor-right
left cursor-left
up up-history
down down-history
The cursor keys normally generate a key sequence that start with an
ESCAPE character, so beware that using the arrow keys will put you into
command mode (if you aren't already in command mode).
The following are the terminal-independent key bindings for
vi input
mode.
^D list-or-eof
^G list-glob
^H backward-delete-char
^I complete-word
\r newline
\n newline
^L clear-screen
^N down-history
^P up-history
^R redisplay
^U backward-kill-line
^W backward-delete-word
^X* expand-filename
^X^F read-from-file
^X^R read-init-files
^? backward-delete-char
The following are the key bindings that are defined in
vi command mode,
this being specified by them all starting with a META character. As
mentioned above, once in command mode the initial meta character is
optional. For example, you might enter command mode by typing ESCAPE, and
then press 'H' twice to move the cursor two positions to the left. Both
'H' characters get quietly converted to
M-h before being compared to the
key binding table, the first one because ESCAPE followed by a character
is always converted to the equivalent META character, and the second
because command mode was already active.
M-<space> cursor-right (META-space)
M-$ end-of-line
M-* expand-filename
M-+ down-history
M-- up-history
M-< beginning-of-history
M-> end-of-history
M-^ beginning-of-line
M- repeat-find-char
M-, invert-refind-char
M-| goto-column
M-~ change-case
M-. vi-repeat-change
M-% find-parenthesis
M-a vi-append
M-A vi-append-at-eol
M-b backward-word
M-B backward-word
M-C vi-change-rest-of-line
M-cb vi-backward-change-word
M-cB vi-backward-change-word
M-cc vi-change-line
M-ce vi-forward-change-word
M-cE vi-forward-change-word
M-cw vi-forward-change-word
M-cW vi-forward-change-word
M-cF vi-backward-change-find
M-cf vi-forward-change-find
M-cT vi-backward-change-to
M-ct vi-forward-change-to
M-c; vi-change-refind
M-c, vi-change-invert-refind
M-ch vi-backward-change-char
M-c^H vi-backward-change-char
M-c^? vi-backward-change-char
M-cl vi-forward-change-char
M-c<space> vi-forward-change-char (META-c-space)
M-c^ vi-change-to-bol
M-c0 vi-change-to-bol
M-c$ vi-change-rest-of-line
M-c| vi-change-to-column
M-c% vi-change-to-parenthesis
M-dh backward-delete-char
M-d^H backward-delete-char
M-d^? backward-delete-char
M-dl forward-delete-char
M-d<space> forward-delete-char (META-d-space)
M-dd delete-line
M-db backward-delete-word
M-dB backward-delete-word
M-de forward-delete-word
M-dE forward-delete-word
M-dw forward-delete-word
M-dW forward-delete-word
M-dF backward-delete-find
M-df forward-delete-find
M-dT backward-delete-to
M-dt forward-delete-to
M-d; delete-refind
M-d, delete-invert-refind
M-d^ backward-kill-line
M-d0 backward-kill-line
M-d$ kill-line
M-D kill-line
M-d| delete-to-column
M-d% delete-to-parenthesis
M-e forward-word
M-E forward-word
M-f forward-find-char
M-F backward-find-char
M-- up-history
M-h cursor-left
M-H beginning-of-history
M-i vi-insert
M-I vi-insert-at-bol
M-j down-history
M-J history-search-forward
M-k up-history
M-K history-search-backward
M-l cursor-right
M-L end-of-history
M-n history-re-search-forward
M-N history-re-search-backward
M-p append-yank
M-P yank
M-r vi-replace-char
M-R vi-overwrite
M-s vi-forward-change-char
M-S vi-change-line
M-t forward-to-char
M-T backward-to-char
M-u vi-undo
M-w forward-to-word
M-W forward-to-word
M-x forward-delete-char
M-X backward-delete-char
M-yh backward-copy-char
M-y^H backward-copy-char
M-y^? backward-copy-char
M-yl forward-copy-char
M-y<space> forward-copy-char (META-y-space)
M-ye forward-copy-word
M-yE forward-copy-word
M-yw forward-copy-word
M-yW forward-copy-word
M-yb backward-copy-word
M-yB backward-copy-word
M-yf forward-copy-find
M-yF backward-copy-find
M-yt forward-copy-to
M-yT backward-copy-to
M-y; copy-refind
M-y, copy-invert-refind
M-y^ copy-to-bol
M-y0 copy-to-bol
M-y$ copy-rest-of-line
M-yy copy-line
M-Y copy-line
M-y| copy-to-column
M-y% copy-to-parenthesis
M-^E emacs-mode
M-^H cursor-left
M-^? cursor-left
M-^L clear-screen
M-^N down-history
M-^P up-history
M-^R redisplay
M-^D list-or-eof
M-^I complete-word
M-\r newline
M-\n newline
M-^X^R read-init-files
M-^Xh list-history
M-0, M-1, ... M-9 digit-argument (see below)
Note that
^I is what the TAB key generates.
Entering Repeat Counts
Many of the key binding functions described previously, take an optional
count, typed in before the target key sequence. This is interpreted as a
repeat count by most bindings. A notable exception is the goto-column
binding, which interprets the count as a column number.
By default you can specify this count argument by pressing the META key
while typing in the numeric count. This relies on the digit-argument
action being bound to 'META-0', 'META-1' etc. Once any one of these
bindings has been activated, you can optionally take your finger off the
META key to type in the rest of the number, since every numeric digit
thereafter is treated as part of the number, unless it is preceded by the
literal-next binding. As soon as a non-digit, or literal digit key is
pressed the repeat count is terminated and either causes the just typed
character to be added to the line that many times, or causes the next key
binding function to be given that argument.
For example, in
emacs mode, typing:
M-12a
causes the letter 'a' to be added to the line 12 times, whereas
M-4M-c
Capitalizes the next 4 words.
In
vi command mode the meta modifier is automatically added to all
characters typed in, so to enter a count in
vi command-mode, just
involves typing in the number, just as it does in the
vi editor itself.
So for example, in vi command mode, typing:
4w2x
moves the cursor four words to the right, then deletes two characters.
You can also bind digit-argument to other key sequences. If these end in
a numeric digit, that digit gets appended to the current repeat count. If
it doesn't end in a numeric digit, a new repeat count is started with a
value of zero, and can be completed by typing in the number, after
letting go of the key which triggered the digit-argument action.
FILES
/usr/lib/libtecla.so The tecla library
/usr/include/libtecla.h The tecla header file
~/.teclarc The personal tecla customization file
ATTRIBUTES
See
attributes(7) for descriptions of the following attributes:
+--------------------+-----------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+--------------------+-----------------+
|Interface Stability | Evolving |
+--------------------+-----------------+
SEE ALSO
vi(1),
libtecla(3LIB),
cpl_complete_word(3TECLA),
ef_expand_file(3TECLA),
gl_get_line(3TECLA),
gl_io_mode(3TECLA),
pca_lookup_file(3TECLA),
attributes(7) April 9, 2016
TECLA(7)