summaryrefslogtreecommitdiff
path: root/usr/src/man/man7/tecla.7
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/man/man7/tecla.7')
-rw-r--r--usr/src/man/man7/tecla.73666
1 files changed, 3666 insertions, 0 deletions
diff --git a/usr/src/man/man7/tecla.7 b/usr/src/man/man7/tecla.7
new file mode 100644
index 0000000000..ba148db78f
--- /dev/null
+++ b/usr/src/man/man7/tecla.7
@@ -0,0 +1,3666 @@
+'\" te
+.\" Copyright (c) 2000, 2001, 2002, 2003, 2004 by Martin C. Shepherd. All Rights Reserved.
+.\" Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the
+.\" "Software"), to deal in the Software without restriction, including
+.\" without limitation the rights to use, copy, modify, merge, publish,
+.\" distribute, and/or sell copies of the Software, and to permit persons
+.\" to whom the Software is furnished to do so, provided that the above
+.\" copyright notice(s) and this permission notice appear in all copies of
+.\" the Software and that both the above copyright notice(s) and this
+.\" permission notice appear in supporting documentation.
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+.\" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+.\" MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+.\" OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+.\" HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL
+.\" INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING
+.\" FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
+.\" NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
+.\" WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+.\"
+.\" Except as contained in this notice, the name of a copyright holder
+.\" shall not be used in advertising or otherwise to promote the sale, use
+.\" or other dealings in this Software without prior written authorization
+.\" of the copyright holder.
+.\" Portions Copyright (c) 2005, Sun Microsystems, Inc. All Rights Reserved.
+.TH TECLA 7 "April 9, 2016"
+.SH NAME
+tecla, teclarc \- User interface provided by the tecla library.
+.SH DESCRIPTION
+.LP
+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
+\fBtcsh\fR shell will find the default key bindings very familiar. Users of the
+\fBbash\fR 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 \fBemacs\fR-like key bindings and another with \fBvi\fR-like key bindings.
+By default \fBemacs\fR mode is enabled, but \fBvi\fR(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.
+.SS "Key Sequence Notation"
+.LP
+In the rest of this man page, and also in all tecla configuration files, key
+sequences are expressed as follows.
+.sp
+.ne 2
+.na
+\fB\fB^A\fR or \fBC-a\fR\fR
+.ad
+.RS 13n
+This is a 'CONTROL-A', entered by pressing the CONTROL key at the same time as
+the 'A' key.
+.RE
+
+.sp
+.ne 2
+.na
+\fB\eE\fR or \fBM-\fR
+.ad
+.RS 13n
+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 \fBM-p\fR 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'.
+.RE
+
+.sp
+.ne 2
+.na
+\fBup\fR
+.ad
+.RS 13n
+This refers to the up-arrow key.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdown\fR
+.ad
+.RS 13n
+This refers to the down-arrow key.
+.RE
+
+.sp
+.ne 2
+.na
+\fBleft\fR
+.ad
+.RS 13n
+This refers to the left-arrow key.
+.RE
+
+.sp
+.ne 2
+.na
+\fBright\fR
+.ad
+.RS 13n
+This refers to the right-arrow key.
+.RE
+
+.sp
+.ne 2
+.na
+\fBa\fR
+.ad
+.RS 13n
+This is just a normal 'A' key.
+.RE
+
+.SS "The Tecla Configuration File"
+.LP
+By default, tecla looks for a file called \fB\&.teclarc\fR in your home
+directory (ie. \fB~/.teclarc\fR). If it finds this file, it reads it,
+interpreting each line as defining a new key binding or an editing
+configuration option. Since the \fBemacs\fR key-bindings are installed by
+default, if you want to use the non-default \fBvi\fR editing mode, the most
+important item to go in this file is the following line:
+.sp
+.in +2
+.nf
+edit-mode vi
+.fi
+.in -2
+
+.sp
+.LP
+This will re-configure the default bindings for \fBvi\fR-mode. The complete set
+of arguments that this command accepts are:
+.sp
+.ne 2
+.na
+\fBvi\fR
+.ad
+.RS 9n
+Install key bindings like those of the \fBvi\fR editor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBemacs\fR
+.ad
+.RS 9n
+Install key bindings like those of the \fBemacs\fR editor. This is the default.
+.RE
+
+.sp
+.ne 2
+.na
+\fBnone\fR
+.ad
+.RS 9n
+Use just the native line editing facilities provided by the terminal driver.
+.RE
+
+.sp
+.LP
+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:
+.sp
+.in +2
+.nf
+nobeep
+.fi
+.in -2
+
+.sp
+.LP
+An example of a key binding line in the configuration file is the following.
+.sp
+.in +2
+.nf
+bind M-[2~ insert-mode
+.fi
+.in -2
+
+.sp
+.LP
+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
+\fBemacs\fR-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 \fBM-\fR 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.
+.RS +4
+.TP
+1.
+Hit the ESCAPE key momentarily, then press '[', then '2', then finally '~'.
+.RE
+.RS +4
+.TP
+2.
+Press the META key at the same time as pressing the '[' key, then press '2',
+then '~'.
+.RE
+.sp
+.LP
+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.
+.sp
+.LP
+Starting with versions of \fBlibtecla\fR 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.
+.sp
+.LP
+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:
+.sp
+.in +2
+.nf
+bind up history-search-backwards
+bind down history-search-backwards
+.fi
+.in -2
+
+.sp
+.LP
+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 \fB^A\fR key sequence:
+.sp
+.in +2
+.nf
+bind ^A
+.fi
+.in -2
+
+.sp
+.LP
+If you create a \fB~/.teclarc\fR 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.
+.SS "Filename and Tilde Completion"
+.LP
+With the default key bindings, pressing the TAB key (aka. \fB^I\fR) 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.
+.sp
+.LP
+In addition to literally written file names, tecla can complete files that
+start with \fB~/\fR and \fB~user/\fR expressions and that contain \fB$envvar\fR
+expressions. In particular, if you hit TAB within an incomplete \fB~user\fR,
+expression, tecla will attempt to complete the username, listing any ambiguous
+matches.
+.sp
+.LP
+The completion binding is implemented using the \fBcpl_complete_word()\fR
+function, which is also available separately to users of this library. See the
+\fBcpl_complete_word\fR(3TECLA) man page for more details.
+.SS "Filename Expansion"
+.LP
+With the default key bindings, pressing \fB^X*\fR causes tecla to expand the
+file name that precedes the cursor, replacing \fB~/\fR and \fB~user/\fR
+expressions with the corresponding home directories, and replacing
+\fB$envvar\fR 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.
+.sp
+.LP
+The expansion binding is implemented using the \fBef_expand_file()\fR function.
+See the \fBef_expand_file\fR(3TECLA) man page for more details.
+.SS "Recalling Previously Typed Lines"
+.LP
+Every time that a new line is entered by the user, it is appended to a list of
+historical input lines maintained within the \fBGetLine\fR 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 \fB^P\fR, and \fB^N\fR keys, and in
+\fBvi\fR 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.
+.sp
+.LP
+Note that in \fBvi\fR mode, all of the history recall functions switch the
+library into command mode.
+.sp
+.LP
+In \fBemacs\fR mode the \fBM-p\fR and \fBM-n\fR keys work just like the
+\fB^P\fR and \fB^N\fR keys, except that they skip all but those historical
+lines which share the prefix that precedes the cursor. In \fBvi\fR 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.
+.sp
+.LP
+Thus for example, suppose that you were in \fBemacs\fR mode, and you had just
+entered the following list of commands in the order shown:
+.sp
+.in +2
+.nf
+ls ~/tecla/
+cd ~/tecla
+ls -l getline.c
+\fBemacs\fR ~/tecla/getline.c
+.fi
+.in -2
+
+.sp
+.LP
+If you next typed:
+.sp
+.in +2
+.nf
+ls
+.fi
+.in -2
+
+.sp
+.LP
+and then hit \fBM-p\fR, then rather than returning the previously typed
+\fBemacs\fR line, which doesn't start with "ls", tecla would recall the "ls -l
+getline.c" line. Pressing \fBM-p\fR again would recall the "ls ~/tecla/" line.
+.sp
+.LP
+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:
+.sp
+.in +2
+.nf
+*tecla*
+.fi
+.in -2
+
+.sp
+.LP
+and hit \fBM-p\fR, then the "\fBemacs\fR ~/tecla/getline.c" line would be
+recalled first, since it contains the word tecla somewhere in the line,
+Similarly, hitting \fBM-p\fR 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
+\fBef_expand_file\fR(3TECLA).
+.SS "History Files"
+.LP
+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.
+.SS "International Character Sets"
+.LP
+Since \fBlibtecla\fR 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,
+.sp
+.in +2
+.nf
+setlocale(LC_CTYPE, "");
+.fi
+.in -2
+
+.sp
+.LP
+then the current locale is determined by the first of the environment variables
+\fBLC_CTYPE\fR, \fBLC_ALL\fR, and \fBLANG\fR, that is found to contain a valid
+locale name. If none of these variables are defined, or the program neglects to
+call \fBsetlocale\fR, 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:
+.sp
+.in +2
+.nf
+locale -a
+.fi
+.in -2
+
+.sp
+.LP
+at the shell prompt.
+.SS "Meta Keys and Locales"
+.LP
+Beware that in most locales other than the default C locale, META characters
+become printable, and they are then no longer considered to match \fBM-c\fR
+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 \fBM-c\fR 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.
+.sp
+.LP
+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 \fBEightBitInput\fR X
+resource to False. You can either do this by placing a line like the following
+in your \fB~/.Xdefaults\fR file,
+.sp
+.in +2
+.nf
+XTerm*EightBitInput: False
+.fi
+.in -2
+
+.sp
+.LP
+or by starting an \fBxterm\fR with an \fB-xrm\fR \&'*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 \fBDtterm*KshMode\fR resource to True.
+.SS "Entering International Characters"
+.LP
+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 \fBxev\fR program
+might report that pressing this key generates keycode 115. To turn this key
+into a COMPOSE key, do the following:
+.sp
+.in +2
+.nf
+xmodmap -e 'keycode 115 = Multi_key'
+.fi
+.in -2
+
+.sp
+.LP
+Type this key followed by a " character to enter an 'I' with a umlaut over it.
+.SS "The Available Key Binding Functions"
+.LP
+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
+\fBemacs\fR and \fBvi\fR modes.
+.sp
+.ne 2
+.na
+\fBuser-interrupt\fR
+.ad
+.RS 30n
+Send a SIGINT signal to the parent process.
+.RE
+
+.sp
+.ne 2
+.na
+\fBsuspend\fR
+.ad
+.RS 30n
+Suspend the parent process.
+.RE
+
+.sp
+.ne 2
+.na
+\fBstop-output\fR
+.ad
+.RS 30n
+Pause terminal output.
+.RE
+
+.sp
+.ne 2
+.na
+\fBstart-output\fR
+.ad
+.RS 30n
+Resume paused terminal output.
+.RE
+
+.sp
+.ne 2
+.na
+\fBliteral-next\fR
+.ad
+.RS 30n
+Arrange for the next character to be treated as a normal character. This allows
+control characters to be entered.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcursor-right\fR
+.ad
+.RS 30n
+Move the cursor one character right.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcursor-left\fR
+.ad
+.RS 30n
+Move the cursor one character left.
+.RE
+
+.sp
+.ne 2
+.na
+\fBinsert-mode\fR
+.ad
+.RS 30n
+Toggle between insert mode and overwrite mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbeginning-of-line\fR
+.ad
+.RS 30n
+Move the cursor to the beginning of the line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBend-of-line\fR
+.ad
+.RS 30n
+Move the cursor to the end of the line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdelete-line\fR
+.ad
+.RS 30n
+Delete the contents of the current line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBkill-line\fR
+.ad
+.RS 30n
+Delete everything that follows the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-kill-line\fR
+.ad
+.RS 30n
+Delete all characters between the cursor and the start of the line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-word\fR
+.ad
+.RS 30n
+Move to the end of the word which follows the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-to-word\fR
+.ad
+.RS 30n
+Move the cursor to the start of the word that follows the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-word\fR
+.ad
+.RS 30n
+Move to the start of the word which precedes the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBgoto-column\fR
+.ad
+.RS 30n
+Move the cursor to the 1-relative column in the line specified by any preceding
+digit-argument sequences (see Entering Repeat Counts below).
+.RE
+
+.sp
+.ne 2
+.na
+\fBfind-parenthesis\fR
+.ad
+.RS 30n
+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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-delete-char\fR
+.ad
+.RS 30n
+Delete the character under the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-delete-char\fR
+.ad
+.RS 30n
+Delete the character which precedes the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBlist-or-eof\fR
+.ad
+.RS 30n
+This is intended for binding to \fB^D\fR. 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 \fBgl_get_line()\fR.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdel-char-or-list-or-eof\fR
+.ad
+.RS 30n
+This is intended for binding to \fB^D\fR. 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
+\fBgl_get_line()\fR.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-delete-word\fR
+.ad
+.RS 30n
+Delete the word which follows the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-delete-word\fR
+.ad
+.RS 30n
+Delete the word which precedes the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBupcase-word\fR
+.ad
+.RS 30n
+Convert all of the characters of the word which follows the cursor, to upper
+case.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdowncase-word\fR
+.ad
+.RS 30n
+Convert all of the characters of the word which follows the cursor, to lower
+case.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcapitalize-word\fR
+.ad
+.RS 30n
+Capitalize the word which follows the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBchange-case\fR
+.ad
+.RS 30n
+If the next character is upper case, toggle it to lower case and vice versa.
+.RE
+
+.sp
+.ne 2
+.na
+\fBredisplay\fR
+.ad
+.RS 30n
+Redisplay the line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBclear-screen\fR
+.ad
+.RS 30n
+Clear the terminal, then redisplay the current line.
+.RE
+
+.sp
+.ne 2
+.na
+\fBtranspose-chars\fR
+.ad
+.RS 30n
+Swap the character under the cursor with the character just before the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBset-mark\fR
+.ad
+.RS 30n
+Set a mark at the position of the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBexchange-point-and-mark\fR
+.ad
+.RS 30n
+Move the cursor to the last mark that was set, and move the mark to where the
+cursor used to be.
+.RE
+
+.sp
+.ne 2
+.na
+\fBkill-region\fR
+.ad
+.RS 30n
+Delete the characters that lie between the last mark that was set, and the
+cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcopy-region-as-kill\fR
+.ad
+.RS 30n
+Copy the text between the mark and the cursor to the cut buffer, without
+deleting the original text.
+.RE
+
+.sp
+.ne 2
+.na
+\fByank\fR
+.ad
+.RS 30n
+Insert the text that was last deleted, just before the current position of the
+cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBappend-yank\fR
+.ad
+.RS 30n
+Paste the current contents of the cut buffer, after the cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBup-history\fR
+.ad
+.RS 30n
+Recall the next oldest line that was entered. Note that in \fBvi\fR mode you
+are left in command mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdown-history\fR
+.ad
+.RS 30n
+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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBhistory-search-backward\fR
+.ad
+.RS 30n
+Recall the next oldest line who's prefix matches the string which currently
+precedes the cursor (in \fBvi\fR command-mode the character under the cursor is
+also included in the search string). Note that in \fBvi\fR mode you are left in
+command mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBhistory-search-forward\fR
+.ad
+.RS 30n
+Recall the next newest line who's prefix matches the string which currently
+precedes the cursor (in \fBvi\fR command-mode the character under the cursor is
+also included in the search string). Note that in \fBvi\fR mode you are left in
+command mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBhistory-re-search-backward\fR
+.ad
+.RS 30n
+Recall the next oldest line who's prefix matches that established by the last
+invocation of either history-search-forward or history-search-backward.
+.RE
+
+.sp
+.ne 2
+.na
+\fBhistory-re-search-forward\fR
+.ad
+.RS 30n
+Recall the next newest line who's prefix matches that established by the last
+invocation of either history-search-forward or history-search-backward.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcomplete-word\fR
+.ad
+.RS 30n
+Attempt to complete the incomplete word which precedes the cursor. Unless the
+host program has customized word completion, file name completion is attempted.
+In \fBvi\fR command mode the character under the cursor is also included in
+the word being completed, and you are left in \fBvi\fR insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBexpand-filename\fR
+.ad
+.RS 30n
+Within the command line, expand wild cards, tilde expressions and dollar
+expressions in the file name which immediately precedes the cursor. In \fBvi\fR
+command mode the character under the cursor is also included in the file name
+being expanded, and you are left in \fBvi\fR insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBlist-glob\fR
+.ad
+.RS 30n
+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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBlist-history\fR
+.ad
+.RS 30n
+Display the contents of the history list for the current history group. If a
+repeat count of \fB> 1\fR is specified, only that many of the most recent lines
+are displayed. See the Entering Repeat Counts section.
+.RE
+
+.sp
+.ne 2
+.na
+\fBread-from-file\fR
+.ad
+.RS 30n
+Temporarily switch to reading input from the file who's name precedes the
+cursor.
+.RE
+
+.sp
+.ne 2
+.na
+\fBread-init-files\fR
+.ad
+.RS 30n
+Re-read \fBteclarc\fR configuration files.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbeginning-of-history\fR
+.ad
+.RS 30n
+Move to the oldest line in the history list. Note that in \fBvi\fR mode you are
+left in command mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBend-of-history\fR
+.ad
+.RS 30n
+Move to the newest line in the history list (ie. the current line). Note that
+in \fBvi\fR mode this leaves you in command mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdigit-argument\fR
+.ad
+.RS 30n
+Enter a repeat count for the next key binding function. For details, see the
+Entering Repeat Counts section.
+.RE
+
+.sp
+.ne 2
+.na
+\fBnewline\fR
+.ad
+.RS 30n
+Terminate and return the current contents of the line, after appending a
+newline character. The newline character is normally '\en', 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 '\en'
+newline character or the '\er' carriage return character, the line is appended
+to the history buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBrepeat-history\fR
+.ad
+.RS 30n
+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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBring-bell\fR
+.ad
+.RS 30n
+Ring the terminal bell, unless the bell has been silenced via the nobeep
+configuration option (see The Tecla Configuration File section).
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-copy-char\fR
+.ad
+.RS 30n
+Copy the next character into the cut buffer (NB. use repeat counts to copy more
+than one).
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-copy-char\fR
+.ad
+.RS 30n
+Copy the previous character into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-copy-word\fR
+.ad
+.RS 30n
+Copy the next word into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-copy-word\fR
+.ad
+.RS 30n
+Copy the previous word into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-find-char\fR
+.ad
+.RS 30n
+Move the cursor to the next occurrence of the next character that you type.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-find-char\fR
+.ad
+.RS 30n
+Move the cursor to the last occurrence of the next character that you type.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-to-char\fR
+.ad
+.RS 30n
+Move the cursor to the character just before the next occurrence of the next
+character that the user types.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-to-char\fR
+.ad
+.RS 30n
+Move the cursor to the character just after the last occurrence before the
+cursor of the next character that the user types.
+.RE
+
+.sp
+.ne 2
+.na
+\fBrepeat-find-char\fR
+.ad
+.RS 30n
+Repeat the last backward-find-char, forward-find-char, backward-to-char or
+forward-to-char.
+.RE
+
+.sp
+.ne 2
+.na
+\fBinvert-refind-char\fR
+.ad
+.RS 30n
+Repeat the last backward-find-char, forward-find-char, backward-to-char, or
+forward-to-char in the opposite direction.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdelete-to-column\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to the column that is specified by the
+repeat count.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdelete-to-parenthesis\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to and including the matching
+parenthesis, or next close parenthesis.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-delete-find\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to and including the following
+occurrence of the next character typed.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-delete-find\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to and including the preceding
+occurrence of the next character typed.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-delete-to\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to, but not including, the following
+occurrence of the next character typed.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-delete-to\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to, but not including, the preceding
+occurrence of the next character typed.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdelete-refind\fR
+.ad
+.RS 30n
+Repeat the last *-delete-find or *-delete-to action.
+.RE
+
+.sp
+.ne 2
+.na
+\fBdelete-invert-refind\fR
+.ad
+.RS 30n
+Repeat the last *-delete-find or *-delete-to action, in the opposite direction.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcopy-to-column\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to the column that is specified by the
+repeat count, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcopy-to-parenthesis\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to and including the matching
+parenthesis, or next close parenthesis, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-copy-find\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to and including the following occurrence
+of the next character typed, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-copy-find\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to and including the preceding occurrence
+of the next character typed, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBforward-copy-to\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to, but not including, the following
+occurrence of the next character typed, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBbackward-copy-to\fR
+.ad
+.RS 30n
+Copy the characters from the cursor up to, but not including, the preceding
+occurrence of the next character typed, into the cut buffer.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcopy-refind\fR
+.ad
+.RS 30n
+Repeat the last *-copy-find or *-copy-to action.
+.RE
+
+.sp
+.ne 2
+.na
+\fBcopy-invert-refind\fR
+.ad
+.RS 30n
+Repeat the last *-copy-find or *-copy-to action, in the opposite direction.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-mode\fR
+.ad
+.RS 30n
+Switch to \fBvi\fR mode from emacs mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBemacs-mode\fR
+.ad
+.RS 30n
+Switch to \fBemacs\fR mode from \fBvi\fR mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-insert\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, switch to insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-overwrite\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, switch to overwrite mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-insert-at-bol\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, move the cursor to the start of the line and switch
+to insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-append-at-eol\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, move the cursor to the end of the line and switch
+to append mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-append\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, move the cursor one position right, and switch to
+insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-replace-char\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, replace the character under the cursor with the
+next character entered.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-forward-change-char\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete the next character then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-backward-change-char\fR
+.ad
+.RS 30n
+From vi command mode, delete the preceding character then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-forward-change-word\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete the next word then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-backward-change-word\fR
+.ad
+.RS 30n
+From vi command mode, delete the preceding word then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-rest-of-line\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete from the cursor to the end of the line, then
+enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-line\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete the current line, then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-to-bol\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete all characters between the cursor and the
+beginning of the line, then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-to-column\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete the characters from the cursor up to the
+column that is specified by the repeat count, then enter insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-to-parenthesis\fR
+.ad
+.RS 30n
+Delete the characters from the cursor up to and including the matching
+parenthesis, or next close parenthesis, then enter \fBvi\fR insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-forward-change-find\fR
+.ad
+.RS 30n
+From \fBvi\fR command mode, delete the characters from the cursor up to and
+including the following occurrence of the next character typed, then enter
+insert mode.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-backward-change-find\fR
+.ad
+.RS 30n
+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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-forward-change-to\fR
+.ad
+.RS 30n
+From \fBvi\fR 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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-backward-change-to\fR
+.ad
+.RS 30n
+From \fBvi\fR 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.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-refind\fR
+.ad
+.RS 30n
+Repeat the last vi-*-change-find or vi-*-change-to action.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-change-invert-refind\fR
+.ad
+.RS 30n
+Repeat the last vi-*-change-find or vi-*-change-to action, in the opposite
+direction.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-undo\fR
+.ad
+.RS 30n
+In \fBvi\fR mode, undo the last editing operation.
+.RE
+
+.sp
+.ne 2
+.na
+\fBvi-repeat-change\fR
+.ad
+.RS 30n
+In \fBvi\fR command mode, repeat the last command that modified the line.
+.RE
+
+.SS "Default Key Bindings In \fBemacs\fR Mode"
+.LP
+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
+\fBtcsh\fR shell, when it is in \fBemacs\fR editing mode.
+.sp
+.LP
+This is the default editing mode of the tecla library.
+.sp
+.LP
+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.
+.sp
+.ne 2
+.na
+\fB\fB^C\fR\fR
+.ad
+.RS 6n
+user-interrupt
+.RE
+
+.sp
+.ne 2
+.na
+\fB^\e\fR
+.ad
+.RS 6n
+abort
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Z\fR\fR
+.ad
+.RS 6n
+suspend
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Q\fR\fR
+.ad
+.RS 6n
+start-output
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^S\fR\fR
+.ad
+.RS 6n
+stop-output
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^V\fR\fR
+.ad
+.RS 6n
+literal-next
+.RE
+
+.sp
+.LP
+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.
+.sp
+.ne 2
+.na
+\fBright\fR
+.ad
+.RS 9n
+cursor-right
+.RE
+
+.sp
+.ne 2
+.na
+\fBleft\fR
+.ad
+.RS 9n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fBup\fR
+.ad
+.RS 9n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fBdown\fR
+.ad
+.RS 9n
+down-history
+.RE
+
+.sp
+.LP
+The remaining bindings don't depend on the terminal settings.
+.sp
+.ne 2
+.na
+\fB\fB^F\fR\fR
+.ad
+.RS 21n
+cursor-right
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^B\fR\fR
+.ad
+.RS 21n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-i\fR\fR
+.ad
+.RS 21n
+insert-mode
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^A\fR\fR
+.ad
+.RS 21n
+beginning-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^E\fR\fR
+.ad
+.RS 21n
+end-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^U\fR\fR
+.ad
+.RS 21n
+delete-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^K\fR\fR
+.ad
+.RS 21n
+kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-f\fR\fR
+.ad
+.RS 21n
+forward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-b\fR\fR
+.ad
+.RS 21n
+backward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^D\fR\fR
+.ad
+.RS 21n
+del-char-or-list-or-eof
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^H\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^?\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d\fR\fR
+.ad
+.RS 21n
+forward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^H\fR\fR
+.ad
+.RS 21n
+backward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^?\fR\fR
+.ad
+.RS 21n
+backward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-u\fR\fR
+.ad
+.RS 21n
+upcase-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-l\fR\fR
+.ad
+.RS 21n
+downcase-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c\fR\fR
+.ad
+.RS 21n
+capitalize-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^R\fR\fR
+.ad
+.RS 21n
+redisplay
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^L\fR\fR
+.ad
+.RS 21n
+clear-screen
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^T\fR\fR
+.ad
+.RS 21n
+transpose-chars
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^@\fR\fR
+.ad
+.RS 21n
+set-mark
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X^X\fR\fR
+.ad
+.RS 21n
+exchange-point-and-mark
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^W\fR\fR
+.ad
+.RS 21n
+kill-region
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-w\fR\fR
+.ad
+.RS 21n
+copy-region-as-kill
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Y\fR\fR
+.ad
+.RS 21n
+yank
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^P\fR\fR
+.ad
+.RS 21n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^N\fR\fR
+.ad
+.RS 21n
+down-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-p\fR\fR
+.ad
+.RS 21n
+history-search-backward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-n\fR\fR
+.ad
+.RS 21n
+history-search-forward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^I\fR\fR
+.ad
+.RS 21n
+complete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X*\fR\fR
+.ad
+.RS 21n
+expand-filename
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X^F\fR\fR
+.ad
+.RS 21n
+read-from-file
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X^R\fR\fR
+.ad
+.RS 21n
+read-init-files
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Xg\fR\fR
+.ad
+.RS 21n
+list-glob
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Xh\fR\fR
+.ad
+.RS 21n
+list-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-<\fR\fR
+.ad
+.RS 21n
+beginning-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM->\fR\fR
+.ad
+.RS 21n
+end-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB\en\fR\fR
+.ad
+.RS 21n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB\er\fR\fR
+.ad
+.RS 21n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-o\fR\fR
+.ad
+.RS 21n
+repeat-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^V\fR\fR
+.ad
+.RS 21n
+\fBvi\fR-mode
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-0, M-1, ... M-9\fR\fR
+.ad
+.RS 21n
+digit-argument (see below)
+.RE
+
+.sp
+.LP
+Note that \fB^I\fR is what the TAB key generates, and that \fB^@\fR 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.
+.SS "Default Key Bindings in \fBvi\fR Mode"
+.LP
+The following default key bindings are designed to mimic the \fBvi\fR 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 \fBvi\fR command mode. The \fBvi\fR 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 \fBvi\fR,
+\fBlibtecla\fR provides bindings for tab completion, wild-card expansion of
+file names, and historical line recall.
+.sp
+.LP
+To learn how to tell the tecla library to use \fBvi\fR mode instead of the
+default \fBemacs\fR editing mode, see the earlier section entitled The Tecla
+Configuration File.
+.sp
+.LP
+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 \fBstty\fR command to change
+these keys, then the default bindings should match.
+.sp
+.ne 2
+.na
+\fB\fB^C\fR\fR
+.ad
+.RS 8n
+user-interrupt
+.RE
+
+.sp
+.ne 2
+.na
+\fB^\e\fR
+.ad
+.RS 8n
+abort
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Z\fR\fR
+.ad
+.RS 8n
+suspend
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^Q\fR\fR
+.ad
+.RS 8n
+start-output
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^S\fR\fR
+.ad
+.RS 8n
+stop-output
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^V\fR\fR
+.ad
+.RS 8n
+literal-next
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^C\fR\fR
+.ad
+.RS 8n
+user-interrupt
+.RE
+
+.sp
+.ne 2
+.na
+\fBM-^\e\fR
+.ad
+.RS 8n
+abort
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^Z\fR\fR
+.ad
+.RS 8n
+suspend
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^Q\fR\fR
+.ad
+.RS 8n
+start-output
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^S\fR\fR
+.ad
+.RS 8n
+stop-output
+.RE
+
+.sp
+.LP
+Note that above, most of the bindings are defined twice, once as a raw control
+code like \fB^C\fR and then a second time as a META character like \fBM-^C\fR.
+The former is the binding for \fBvi\fR input mode, whereas the latter is the
+binding for \fBvi\fR 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 \fBM-i\fR.
+.sp
+.LP
+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.
+.sp
+.ne 2
+.na
+\fB\fBright\fR\fR
+.ad
+.RS 9n
+cursor-right
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBleft\fR\fR
+.ad
+.RS 9n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBup\fR\fR
+.ad
+.RS 9n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBdown\fR\fR
+.ad
+.RS 9n
+down-history
+.RE
+
+.sp
+.LP
+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).
+.sp
+.LP
+The following are the terminal-independent key bindings for \fBvi\fR input
+mode.
+.sp
+.ne 2
+.na
+\fB\fB^D\fR\fR
+.ad
+.RS 8n
+list-or-eof
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^G\fR\fR
+.ad
+.RS 8n
+list-glob
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^H\fR\fR
+.ad
+.RS 8n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^I\fR\fR
+.ad
+.RS 8n
+complete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB\er\fR\fR
+.ad
+.RS 8n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB\en\fR\fR
+.ad
+.RS 8n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^L\fR\fR
+.ad
+.RS 8n
+clear-screen
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^N\fR\fR
+.ad
+.RS 8n
+down-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^P\fR\fR
+.ad
+.RS 8n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^R\fR\fR
+.ad
+.RS 8n
+redisplay
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^U\fR\fR
+.ad
+.RS 8n
+backward-kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^W\fR\fR
+.ad
+.RS 8n
+backward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X*\fR\fR
+.ad
+.RS 8n
+expand-filename
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X^F\fR\fR
+.ad
+.RS 8n
+read-from-file
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^X^R\fR\fR
+.ad
+.RS 8n
+read-init-files
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB^?\fR\fR
+.ad
+.RS 8n
+backward-delete-char
+.RE
+
+.sp
+.LP
+The following are the key bindings that are defined in \fBvi\fR 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 \fBM-h\fR 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.
+.sp
+.ne 2
+.na
+\fBM-<space>\fR
+.ad
+.RS 21n
+cursor-right (META-space)
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-$\fR\fR
+.ad
+.RS 21n
+end-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-*\fR\fR
+.ad
+.RS 21n
+expand-filename
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-+\fR\fR
+.ad
+.RS 21n
+down-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM--\fR\fR
+.ad
+.RS 21n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-<\fR\fR
+.ad
+.RS 21n
+beginning-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM->\fR\fR
+.ad
+.RS 21n
+end-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^\fR\fR
+.ad
+.RS 21n
+beginning-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-\fR\fR
+.ad
+.RS 21n
+repeat-find-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-,\fR\fR
+.ad
+.RS 21n
+invert-refind-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-|\fR\fR
+.ad
+.RS 21n
+goto-column
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-~\fR\fR
+.ad
+.RS 21n
+change-case
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-.\fR\fR
+.ad
+.RS 21n
+vi-repeat-change
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-%\fR\fR
+.ad
+.RS 21n
+find-parenthesis
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-a\fR\fR
+.ad
+.RS 21n
+vi-append
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-A\fR\fR
+.ad
+.RS 21n
+vi-append-at-eol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-b\fR\fR
+.ad
+.RS 21n
+backward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-B\fR\fR
+.ad
+.RS 21n
+backward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-C\fR\fR
+.ad
+.RS 21n
+vi-change-rest-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cb\fR\fR
+.ad
+.RS 21n
+vi-backward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cB\fR\fR
+.ad
+.RS 21n
+vi-backward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cc\fR\fR
+.ad
+.RS 21n
+vi-change-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-ce\fR\fR
+.ad
+.RS 21n
+vi-forward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cE\fR\fR
+.ad
+.RS 21n
+vi-forward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cw\fR\fR
+.ad
+.RS 21n
+vi-forward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cW\fR\fR
+.ad
+.RS 21n
+vi-forward-change-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cF\fR\fR
+.ad
+.RS 21n
+vi-backward-change-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cf\fR\fR
+.ad
+.RS 21n
+vi-forward-change-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cT\fR\fR
+.ad
+.RS 21n
+vi-backward-change-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-ct\fR\fR
+.ad
+.RS 21n
+vi-forward-change-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c;\fR\fR
+.ad
+.RS 21n
+vi-change-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c,\fR\fR
+.ad
+.RS 21n
+vi-change-invert-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-ch\fR\fR
+.ad
+.RS 21n
+vi-backward-change-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c^H\fR\fR
+.ad
+.RS 21n
+vi-backward-change-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c^?\fR\fR
+.ad
+.RS 21n
+vi-backward-change-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-cl\fR\fR
+.ad
+.RS 21n
+vi-forward-change-char
+.RE
+
+.sp
+.ne 2
+.na
+\fBM-c<space>\fR
+.ad
+.RS 21n
+vi-forward-change-char (META-c-space)
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c^\fR\fR
+.ad
+.RS 21n
+vi-change-to-bol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c0\fR\fR
+.ad
+.RS 21n
+vi-change-to-bol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c$\fR\fR
+.ad
+.RS 21n
+vi-change-rest-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c|\fR\fR
+.ad
+.RS 21n
+vi-change-to-column
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-c%\fR\fR
+.ad
+.RS 21n
+vi-change-to-parenthesis
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dh\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d^H\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d^?\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dl\fR\fR
+.ad
+.RS 21n
+forward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fBM-d<space>\fR
+.ad
+.RS 21n
+forward-delete-char (META-d-space)
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dd\fR\fR
+.ad
+.RS 21n
+delete-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-db\fR\fR
+.ad
+.RS 21n
+backward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dB\fR\fR
+.ad
+.RS 21n
+backward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-de\fR\fR
+.ad
+.RS 21n
+forward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dE\fR\fR
+.ad
+.RS 21n
+forward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dw\fR\fR
+.ad
+.RS 21n
+forward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dW\fR\fR
+.ad
+.RS 21n
+forward-delete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dF\fR\fR
+.ad
+.RS 21n
+backward-delete-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-df\fR\fR
+.ad
+.RS 21n
+forward-delete-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dT\fR\fR
+.ad
+.RS 21n
+backward-delete-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-dt\fR\fR
+.ad
+.RS 21n
+forward-delete-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d;\fR\fR
+.ad
+.RS 21n
+delete-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d,\fR\fR
+.ad
+.RS 21n
+delete-invert-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d^\fR\fR
+.ad
+.RS 21n
+backward-kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d0\fR\fR
+.ad
+.RS 21n
+backward-kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d$\fR\fR
+.ad
+.RS 21n
+kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-D\fR\fR
+.ad
+.RS 21n
+kill-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d|\fR\fR
+.ad
+.RS 21n
+delete-to-column
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-d%\fR\fR
+.ad
+.RS 21n
+delete-to-parenthesis
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-e\fR\fR
+.ad
+.RS 21n
+forward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-E\fR\fR
+.ad
+.RS 21n
+forward-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-f\fR\fR
+.ad
+.RS 21n
+forward-find-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-F\fR\fR
+.ad
+.RS 21n
+backward-find-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM--\fR\fR
+.ad
+.RS 21n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-h\fR\fR
+.ad
+.RS 21n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-H\fR\fR
+.ad
+.RS 21n
+beginning-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-i\fR\fR
+.ad
+.RS 21n
+vi-insert
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-I\fR\fR
+.ad
+.RS 21n
+vi-insert-at-bol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-j\fR\fR
+.ad
+.RS 21n
+down-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-J\fR\fR
+.ad
+.RS 21n
+history-search-forward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-k\fR\fR
+.ad
+.RS 21n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-K\fR\fR
+.ad
+.RS 21n
+history-search-backward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-l\fR\fR
+.ad
+.RS 21n
+cursor-right
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-L\fR\fR
+.ad
+.RS 21n
+end-of-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-n\fR\fR
+.ad
+.RS 21n
+history-re-search-forward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-N\fR\fR
+.ad
+.RS 21n
+history-re-search-backward
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-p\fR\fR
+.ad
+.RS 21n
+append-yank
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-P\fR\fR
+.ad
+.RS 21n
+yank
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-r\fR\fR
+.ad
+.RS 21n
+vi-replace-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-R\fR\fR
+.ad
+.RS 21n
+vi-overwrite
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-s\fR\fR
+.ad
+.RS 21n
+vi-forward-change-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-S\fR\fR
+.ad
+.RS 21n
+vi-change-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-t\fR\fR
+.ad
+.RS 21n
+forward-to-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-T\fR\fR
+.ad
+.RS 21n
+backward-to-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-u\fR\fR
+.ad
+.RS 21n
+vi-undo
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-w\fR\fR
+.ad
+.RS 21n
+forward-to-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-W\fR\fR
+.ad
+.RS 21n
+forward-to-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-x\fR\fR
+.ad
+.RS 21n
+forward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-X\fR\fR
+.ad
+.RS 21n
+backward-delete-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yh\fR\fR
+.ad
+.RS 21n
+backward-copy-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y^H\fR\fR
+.ad
+.RS 21n
+backward-copy-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y^?\fR\fR
+.ad
+.RS 21n
+backward-copy-char
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yl\fR\fR
+.ad
+.RS 21n
+forward-copy-char
+.RE
+
+.sp
+.ne 2
+.na
+\fBM-y<space>\fR
+.ad
+.RS 21n
+forward-copy-char (META-y-space)
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-ye\fR\fR
+.ad
+.RS 21n
+forward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yE\fR\fR
+.ad
+.RS 21n
+forward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yw\fR\fR
+.ad
+.RS 21n
+forward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yW\fR\fR
+.ad
+.RS 21n
+forward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yb\fR\fR
+.ad
+.RS 21n
+backward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yB\fR\fR
+.ad
+.RS 21n
+backward-copy-word
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yf\fR\fR
+.ad
+.RS 21n
+forward-copy-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yF\fR\fR
+.ad
+.RS 21n
+backward-copy-find
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yt\fR\fR
+.ad
+.RS 21n
+forward-copy-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yT\fR\fR
+.ad
+.RS 21n
+backward-copy-to
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y;\fR\fR
+.ad
+.RS 21n
+copy-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y,\fR\fR
+.ad
+.RS 21n
+copy-invert-refind
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y^\fR\fR
+.ad
+.RS 21n
+copy-to-bol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y0\fR\fR
+.ad
+.RS 21n
+copy-to-bol
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y$\fR\fR
+.ad
+.RS 21n
+copy-rest-of-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-yy\fR\fR
+.ad
+.RS 21n
+copy-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-Y\fR\fR
+.ad
+.RS 21n
+copy-line
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y|\fR\fR
+.ad
+.RS 21n
+copy-to-column
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-y%\fR\fR
+.ad
+.RS 21n
+copy-to-parenthesis
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^E\fR\fR
+.ad
+.RS 21n
+emacs-mode
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^H\fR\fR
+.ad
+.RS 21n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^?\fR\fR
+.ad
+.RS 21n
+cursor-left
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^L\fR\fR
+.ad
+.RS 21n
+clear-screen
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^N\fR\fR
+.ad
+.RS 21n
+down-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^P\fR\fR
+.ad
+.RS 21n
+up-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^R\fR\fR
+.ad
+.RS 21n
+redisplay
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^D\fR\fR
+.ad
+.RS 21n
+list-or-eof
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^I\fR\fR
+.ad
+.RS 21n
+complete-word
+.RE
+
+.sp
+.ne 2
+.na
+\fBM-\er\fR
+.ad
+.RS 21n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-\en\fR\fR
+.ad
+.RS 21n
+newline
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^X^R\fR\fR
+.ad
+.RS 21n
+read-init-files
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-^Xh\fR\fR
+.ad
+.RS 21n
+list-history
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fBM-0, M-1, ... M-9\fR\fR
+.ad
+.RS 21n
+digit-argument (see below)
+.RE
+
+.sp
+.LP
+Note that \fB^I\fR is what the TAB key generates.
+.SS "Entering Repeat Counts"
+.LP
+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.
+.sp
+.LP
+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.
+.sp
+.LP
+For example, in \fBemacs\fR mode, typing:
+.sp
+.in +2
+.nf
+M-12a
+.fi
+.in -2
+
+.sp
+.LP
+causes the letter 'a' to be added to the line 12 times, whereas
+.sp
+.in +2
+.nf
+M-4M-c
+.fi
+.in -2
+
+.sp
+.LP
+Capitalizes the next 4 words.
+.sp
+.LP
+In \fBvi\fR command mode the meta modifier is automatically added to all
+characters typed in, so to enter a count in \fBvi\fR command-mode, just
+involves typing in the number, just as it does in the \fBvi\fR editor itself.
+So for example, in vi command mode, typing:
+.sp
+.in +2
+.nf
+4w2x
+.fi
+.in -2
+
+.sp
+.LP
+moves the cursor four words to the right, then deletes two characters.
+.sp
+.LP
+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.
+.SH FILES
+.ne 2
+.na
+\fB\fB/usr/lib/libtecla.so\fR\fR
+.ad
+.RS 27n
+The tecla library
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB/usr/include/libtecla.h\fR\fR
+.ad
+.RS 27n
+The tecla header file
+.RE
+
+.sp
+.ne 2
+.na
+\fB\fB~/.teclarc\fR\fR
+.ad
+.RS 27n
+The personal tecla customization file
+.RE
+
+.SH ATTRIBUTES
+.LP
+See \fBattributes\fR(7) for descriptions of the following attributes:
+.sp
+
+.sp
+.TS
+box;
+c | c
+l | l .
+ATTRIBUTE TYPE ATTRIBUTE VALUE
+_
+Interface Stability Evolving
+.TE
+
+.SH SEE ALSO
+.LP
+.BR vi (1),
+.BR libtecla (3LIB),
+.BR cpl_complete_word (3TECLA),
+.BR ef_expand_file (3TECLA),
+.BR gl_get_line (3TECLA),
+.BR gl_io_mode (3TECLA),
+.BR pca_lookup_file (3TECLA),
+.BR attributes (7)