home | help
tecla(7)		Miscellaneous Information Manual		tecla(7)

NAME
     tecla, teclarc - The user interface provided by the Tecla library.

DESCRIPTION
     This  man	page describes the command-line editing features that are avail-
     able 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  mode  can	alterna-
     tively 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 prefer-
     ences. 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 keybindings 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  follow-
     ing.

       bind M-[2~ insert-mode

     On many keyboards, the above key sequence is generated when one presses the
     insert  key, so with this keybinding, one can toggle between the emacs-mode
     insert and overwrite modes by hitting one key. One could also do it by typ-
     ing 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  in-
     sert 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 keybinding for a key-sequence that is already bound to a func-
     tion, 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 keysequences that begin with a printable character. Previously key-se-
     quences 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 keysequences. 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  de-
     fault 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 filename that precedes the cur-
     sor. Tecla searches backwards from the cursor, looking for the start of the
     filename, 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 filenames, 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_word_completions()
     function,	which is also available separately to users of this library. See
     the cpl_complete_word(3) man page for more details.

FILENAME EXPANSION
     With the default key bindings, pressing ^X*  causes  Tecla  to  expand  the
     filename 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 filename 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(3) 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 com-
     mand  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 li-
     brary into command mode.

     In emacs mode the M-p and M-n keys work just like the ^P and ^N  keys,  ex-
     cept  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 charac-
     ters do the same thing, except that the string that  they	search	for  in-
     cludes 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 en-
     tered 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  get-
     line.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 interpretted as a  pattern  to
     be  matched.  Thus,  cotinuing  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 filename expansion, in the ef_expand_file(3 man page.

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 vari-
     ables  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  charac-
     ters  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 lo-
     cale. Moreover, many modern terminal emulators, such as gnome's  gnome-ter-
     minal'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 char-
     acters 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 win-
     dows 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  com-
     mand.  For  example, on many PC keyboards there is a microsoft-windows key,
     which is otherwise useless under Linux. On my laptop the  xev  program  re-
     ports  that  pressing  this  key generates keycode 115, so to turn this key
     into a compose key, I do the following:

       xmodmap -e 'keycode 115 = Multi_key'

     I can then enter an i with a umlaut over it by typing this key, followed by
     ", followed by i.

THE AVAILABLE KEY BINDING FUNCTIONS
     The following is a list of the editing functions provided by the Tecla  li-
     brary. The names in the leftmost column of the list can be used in configu-
     ration  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  de-
     fault key-bindings in emacs and vi modes.

       user-interrupt		-  Send a SIGINT signal to the
				   parent process.
       abort			-  Send a SIGABRT 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, filename
				   completion is attempted. In vi
				   commmand 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
				   filename which immediately
				   precedes the cursor. In vi
				   commmand mode the character
				   under the cursor is also
				   included in the filename being
				   expanded, and you are left in
				   vi insert mode.
       list-glob		-  List any filenames which match
				   the wild-card, tilde and dollar
				   expressions in the filename
				   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 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 occurence of the
				   next character typed.
       backward-delete-find	-  Delete the characters from the
				   cursor up to and including the
				   preceding occurence of the
				   next character typed.
       forward-delete-to	-  Delete the characters from the
				   cursor up to, but not
				   including, the following
				   occurence of the next
				   character typed.
       backward-delete-to	-  Delete the characters from the
				   cursor up to, but not
				   including, the preceding
				   occurence 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 occurence of the
				   next character typed, into the
				   cut buffer.
       backward-copy-find	-  Copy the characters from the
				   cursor up to and including the
				   preceding occurence 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
				   occurence 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
				   occurence 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 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 occurence 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 occurence 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
				   occurence 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
				   occurence 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 overriden 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 keybindings to  main-
     tain  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 refered to by name, as follows. This is  necessary  be-
     cause  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 setttings.

       ^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. 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 pro-
     vides  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  de-
     fault  emacs  editing mode, see the earlier section entitled THE TECLA CON-
     FIGURATION FILE.

     Under UNIX the terminal driver sets a number of special  keys  for  certain
     functions.  The Tecla library attempts to use the same keybindings to main-
     tain 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 con-
     trol 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  se-
     quence  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 refered to by name, as follows. This is necessary be-
     cause 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 keysequence 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  men-
     tioned  above, once in command mode the initial meta character is optional.
     For example, you might enter command mode by typing Esc, 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 al-
     ready active.

       M-\     ->   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\    ->   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     ->   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\    ->   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 keysequence.	This is interpreted as a
     repeat count by most bindings. A notable exception is the goto-column bind-
     ing, 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 charac-
     ters 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
     libtecla.a      -	  The Tecla library
     libtecla.h      -	  The Tecla header file.
     ~/.teclarc      -	  The personal Tecla customization file.

SEE ALSO
     libtecla(3), gl_get_line(3), gl_io_mode(3), ef_expand_file(3),
     cpl_complete_word(3), pca_lookup_file(3)

AUTHOR
     Martin Shepherd  (mcs@astro.caltech.edu)

									tecla(7)

home | help