READLINE(3)                                           READLINE(3)



NNAAMMEE
       readline - get a line from a user with editing

SSYYNNOOPPSSIISS
       ##iinncclluuddee <<ssttddiioo..hh>>
       ##iinncclluuddee <<rreeaaddlliinnee//rreeaaddlliinnee..hh>>
       ##iinncclluuddee <<rreeaaddlliinnee//hhiissttoorryy..hh>>

       _c_h_a_r _*
       rreeaaddlliinnee (_c_o_n_s_t _c_h_a_r _*_p_r_o_m_p_t);

CCOOPPYYRRIIGGHHTT
       Readline  is  Copyright (C) 1989-2002 by the Free Software
       Foundation, Inc.

DDEESSCCRRIIPPTTIIOONN
       rreeaaddlliinnee will read a line from the terminal and return it,
       using  pprroommpptt as a prompt.  If pprroommpptt is NNUULLLL or the empty
       string, no prompt is issued.  The line returned  is  allo-
       cated  with  _m_a_l_l_o_c(3);  the caller must free it when fin-
       ished.  The line returned has the final  newline  removed,
       so only the text of the line remains.

       rreeaaddlliinnee  offers  editing  capabilities  while the user is
       entering the line.  By default, the line editing  commands
       are  similar  to  those of emacs.  A vi-style line editing
       interface is also available.

       This manual page describes only  the  most  basic  use  of
       rreeaaddlliinnee.   Much  more functionality is available; see _T_h_e
       _G_N_U _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y and _T_h_e _G_N_U _H_i_s_t_o_r_y _L_i_b_r_a_r_y for addi-
       tional information.

RREETTUURRNN VVAALLUUEE
       rreeaaddlliinnee  returns the text of the line read.  A blank line
       returns the empty string.  If  EEOOFF  is  encountered  while
       reading  a  line, and the line is empty, NNUULLLL is returned.
       If an EEOOFF is read with a non-empty line, it is treated  as
       a newline.

NNOOTTAATTIIOONN
       An  emacs-style  notation  is  used  to denote keystrokes.
       Control keys are denoted by C-_k_e_y, e.g.,  C-n  means  Con-
       trol-N.  Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x
       means Meta-X.  (On keyboards without a _m_e_t_a key, M-_x means
       ESC  _x,  i.e.,  press the Escape key then the _x key.  This
       makes ESC the _m_e_t_a _p_r_e_f_i_x.  The  combination  M-C-_x  means
       ESC-Control-_x,  or press the Escape key then hold the Con-
       trol key while pressing the _x key.)

       Readline commands may be given  numeric  _a_r_g_u_m_e_n_t_s,  which
       normally act as a repeat count.  Sometimes, however, it is
       the sign of the argument that is significant.   Passing  a
       negative  argument  to  a command that acts in the forward
       direction (e.g., kkiillll--lliinnee) causes that command to act  in
       a  backward direction.  Commands whose behavior with argu-
       ments deviates from this are noted.

       When a command is described  as  _k_i_l_l_i_n_g  text,  the  text
       deleted  is saved for possible future retrieval (_y_a_n_k_i_n_g).
       The killed text is saved  in  a  _k_i_l_l  _r_i_n_g.   Consecutive
       kills  cause  the  text  to  be accumulated into one unit,
       which can be yanked all at once.  Commands  which  do  not
       kill text separate the chunks of text on the kill ring.

IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE
       Readline  is customized by putting commands in an initial-
       ization file (the _i_n_p_u_t_r_c file).  The name of this file is
       taken  from the value of the IINNPPUUTTRRCC environment variable.
       If that variable is  unset,  the  default  is  _~_/_._i_n_p_u_t_r_c.
       When  a program which uses the readline library starts up,
       the init file is read, and the key bindings and  variables
       are set.  There are only a few basic constructs allowed in
       the readline init file.  Blank lines are  ignored.   Lines
       beginning with a ## are comments.  Lines beginning with a $$
       indicate conditional constructs.  Other lines  denote  key
       bindings  and  variable settings.  Each program using this
       library may add its own commands and bindings.

       For example, placing

              M-Control-u: universal-argument
       or
              C-Meta-u: universal-argument

       into the _i_n_p_u_t_r_c would make  M-C-u  execute  the  readline
       command _u_n_i_v_e_r_s_a_l_-_a_r_g_u_m_e_n_t.

       The  following  symbolic  character  names  are recognized
       while processing key bindings: _D_E_L, _E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_-
       _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T, _S_P_A_C_E, _S_P_C, and _T_A_B.

       In  addition  to command names, readline allows keys to be
       bound to a string that is inserted when the key is pressed
       (a _m_a_c_r_o).


   KKeeyy BBiinnddiinnggss
       The  syntax  for  controlling  key bindings in the _i_n_p_u_t_r_c
       file is simple.  All that is required is the name  of  the
       command or the text of a macro and a key sequence to which
       it should be bound. The name may be specified  in  one  of
       two  ways:  as a symbolic key name, possibly with _M_e_t_a_- or
       _C_o_n_t_r_o_l_- prefixes, or as a key sequence.

       When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or  _m_a_c_r_o,  _k_e_y_-
       _n_a_m_e  is  the  name  of a key spelled out in English.  For
       example:

              Control-u: universal-argument
              Meta-Rubout: backward-kill-word
              Control-o: "> output"

       In the above example, _C_-_u is bound to the function uunniivveerr--
       ssaall--aarrgguummeenntt,   _M_-_D_E_L  is  bound  to  the  function  bbaacckk--
       wwaarrdd--kkiillll--wwoorrdd,  and  _C_-_o  is  bound  to  run  the   macro
       expressed  on  the right hand side (that is, to insert the
       text ``> output'' into the line).

       In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o,  kkeeyy--
       sseeqq differs from kkeeyynnaammee above in that strings denoting an
       entire key  sequence  may  be  specified  by  placing  the
       sequence  within  double quotes.  Some GNU Emacs style key
       escapes can be used, as in the following example, but  the
       symbolic character names are not recognized.

              "\C-u": universal-argument
              "\C-x\C-r": re-read-init-file
              "\e[11~": "Function Key 1"

       In  this  example, _C_-_u is again bound to the function uunnii--
       vveerrssaall--aarrgguummeenntt.   _C_-_x  _C_-_r  is  bound  to  the   function
       rree--rreeaadd--iinniitt--ffiillee,  and _E_S_C _[ _1 _1 _~ is bound to insert the
       text ``Function Key 1''.

       The full set of GNU Emacs style escape sequences available
       when specifying key sequences is
              \\CC--    control prefix
              \\MM--    meta prefix
              \\ee     an escape character
              \\\\     backslash
              \\""     literal ", a double quote
              \\''     literal ', a single quote

       In  addition  to  the  GNU Emacs style escape sequences, a
       second set of backslash escapes is available:
              \\aa     alert (bell)
              \\bb     backspace
              \\dd     delete
              \\ff     form feed
              \\nn     newline
              \\rr     carriage return
              \\tt     horizontal tab
              \\vv     vertical tab
              \\_n_n_n   the eight-bit character whose value  is  the
                     octal value _n_n_n (one to three digits)
              \\xx_H_H   the  eight-bit  character whose value is the
                     hexadecimal value _H_H (one or two hex digits)

       When entering the text of a macro, single or double quotes
       should be used to indicate a macro  definition.   Unquoted
       text is assumed to be a function name.  In the macro body,
       the backslash escapes described above are expanded.  Back-
       slash  will  quote  any other character in the macro text,
       including " and '.

       BBaasshh allows the current readline key bindings to  be  dis-
       played  or  modified  with  the bbiinndd builtin command.  The
       editing mode may be switched  during  interactive  use  by
       using  the  --oo  option  to the sseett builtin command.  Other
       programs using this library  provide  similar  mechanisms.
       The  _i_n_p_u_t_r_c  file  may be edited and re-read if a program
       does not provide any other means to incorporate new  bind-
       ings.

   VVaarriiaabblleess
       Readline  has  variables  that can be used to further cus-
       tomize its behavior.  A variable may be set in the _i_n_p_u_t_r_c
       file with a statement of the form

              sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e

       Except where noted, readline variables can take the values
       OOnn or OOffff (without regard to  case).   The  variables  and
       their default values are:

       bbeellll--ssttyyllee ((aauuddiibbllee))
              Controls  what  happens when readline wants to ring
              the terminal bell.  If set to nnoonnee, readline  never
              rings the bell.  If set to vviissiibbllee, readline uses a
              visible bell if one is available.  If set to  aauuddii--
              bbllee, readline attempts to ring the terminal's bell.
       ccoommmmeenntt--bbeeggiinn ((````##''''))
              The string that is inserted in  vvii  mode  when  the
              iinnsseerrtt--ccoommmmeenntt  command  is executed.  This command
              is bound to MM--## in emacs mode and to ## in  vi  com-
              mand mode.
       ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff))
              If  set  to OOnn, readline performs filename matching
              and completion in a case-insensitive fashion.
       ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000))
              This determines when  the  user  is  queried  about
              viewing  the  number of possible completions gener-
              ated by the ppoossssiibbllee--ccoommpplleettiioonnss command.   It  may
              be  set  to any integer value greater than or equal
              to zero.  If the number of possible completions  is
              greater  than  or  equal to the value of this vari-
              able, the user is asked whether or not he wishes to
              view  them; otherwise they are simply listed on the
              terminal.
       ccoonnvveerrtt--mmeettaa ((OOnn))
              If set to OOnn, readline will convert characters with
              the  eighth  bit  set  to  an ASCII key sequence by
              stripping the eighth bit and prefixing it  with  an
              escape  character  (in  effect, using escape as the
              _m_e_t_a _p_r_e_f_i_x).
       ddiissaabbllee--ccoommpplleettiioonn ((OOffff))
              If set to OOnn, readline will  inhibit  word  comple-
              tion.   Completion characters will be inserted into
              the line as if they had been mapped to sseellff--iinnsseerrtt.
       eeddiittiinngg--mmooddee ((eemmaaccss))
              Controls  whether readline begins with a set of key
              bindings similar to emacs or vi.  eeddiittiinngg--mmooddee  can
              be set to either eemmaaccss or vvii.
       eennaabbllee--kkeeyyppaadd ((OOffff))
              When  set  to  OOnn,  readline will try to enable the
              application keypad when it is called.  Some systems
              need this to enable the arrow keys.
       eexxppaanndd--ttiillddee ((OOffff))
              If  set  to  oonn,  tilde expansion is performed when
              readline attempts word completion.
       hhiissttoorryy--pprreesseerrvvee--ppooiinntt
              If set to oonn, the history code  attempts  to  place
              point  at  the  same  location on each history line
              retrived with pprreevviioouuss--hhiissttoorryy or nneexxtt--hhiissttoorryy.
       hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff))
              When set to OOnn, makes readline use  a  single  line
              for  display, scrolling the input horizontally on a
              single screen line when it becomes longer than  the
              screen width rather than wrapping to a new line.
       iinnppuutt--mmeettaa ((OOffff))
              If  set to OOnn, readline will enable eight-bit input
              (that is, it will not clear the eighth bit  in  the
              characters it reads), regardless of what the termi-
              nal claims it can support.  The name mmeettaa--ffllaagg is a
              synonym for this variable.
       iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ''''))
              The  string  of characters that should terminate an
              incremental search without  subsequently  executing
              the  character  as a command.  If this variable has
              not been given a value, the characters _E_S_C and  _C_-_J
              will terminate an incremental search.
       kkeeyymmaapp ((eemmaaccss))
              Set  the current readline keymap.  The set of legal
              keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_,  _e_m_a_c_s_-_m_e_t_a_,
              _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t.
              _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent
              to  _e_m_a_c_s_-_s_t_a_n_d_a_r_d.   The  default  value is _e_m_a_c_s.
              The value of eeddiittiinngg--mmooddee also affects the  default
              keymap.
       mmaarrkk--ddiirreeccttoorriieess ((OOnn))
              If  set  to  OOnn,  completed  directory names have a
              slash appended.
       mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff))
              If set to OOnn, history lines that have been modified
              are displayed with a preceding asterisk (**).
       mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff))
              If  set  to  OOnn, completed names which are symbolic
              links to directories have a slash appended (subject
              to the value of mmaarrkk--ddiirreeccttoorriieess).
       mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn))
              This  variable,  when set to OOnn, causes readline to
              match files whose names begin with  a  `.'  (hidden
              files)  when performing filename completion, unless
              the leading `.' is supplied  by  the  user  in  the
              filename to be completed.
       oouuttppuutt--mmeettaa ((OOffff))
              If set to OOnn, readline will display characters with
              the eighth bit set directly rather than as a  meta-
              prefixed escape sequence.
       ppaaggee--ccoommpplleettiioonnss ((OOnn))
              If  set  to OOnn, readline uses an internal _m_o_r_e-like
              pager to display a screenful  of  possible  comple-
              tions at a time.
       pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff))
              If  set  to  OOnn,  readline will display completions
              with matches sorted  horizontally  in  alphabetical
              order, rather than down the screen.
       sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff))
              This  alters the default behavior of the completion
              functions.  If set to oonn,  words  which  have  more
              than  one  possible completion cause the matches to
              be listed immediately instead of ringing the  bell.
       vviissiibbllee--ssttaattss ((OOffff))
              If set to OOnn, a character denoting a file's type as
              reported by _s_t_a_t(2) is  appended  to  the  filename
              when listing possible completions.

   CCoonnddiittiioonnaall CCoonnssttrruuccttss
       Readline  implements  a  facility similar in spirit to the
       conditional compilation features  of  the  C  preprocessor
       which allows key bindings and variable settings to be per-
       formed as the result of  tests.   There  are  four  parser
       directives used.

       $$iiff    The  $$iiff construct allows bindings to be made based
              on the editing mode, the terminal  being  used,  or
              the  application  using  readline.  The text of the
              test extends to the end of the line; no  characters
              are required to isolate it.

              mmooddee   The  mmooddee== form of the $$iiff directive is used
                     to test whether readline is in emacs  or  vi
                     mode.   This may be used in conjunction with
                     the sseett kkeeyymmaapp command, for instance, to set
                     bindings  in  the  _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_-
                     _c_t_l_x keymaps only if  readline  is  starting
                     out in emacs mode.

              tteerrmm   The tteerrmm== form may be used to include termi-
                     nal-specific key bindings, perhaps  to  bind
                     the  key  sequences output by the terminal's
                     function keys.  The word on the  right  side
                     of  the == is tested against the full name of
                     the terminal and the portion of the terminal
                     name before the first --.  This allows _s_u_n to
                     match both _s_u_n and _s_u_n_-_c_m_d, for instance.

              aapppplliiccaattiioonn
                     The aapppplliiccaattiioonn construct is used to include
                     application-specific settings.  Each program
                     using the readline library sets the _a_p_p_l_i_c_a_-
                     _t_i_o_n  _n_a_m_e,  and  an initialization file can
                     test for a particular value.  This could  be
                     used to bind key sequences to functions use-
                     ful for a specific program.   For  instance,
                     the  following  command  adds a key sequence
                     that quotes the current or previous word  in
                     Bash:

                     $$iiff Bash
                     # Quote the current or previous word
                     "\C-xq": "\eb\"\ef\""
                     $$eennddiiff

       $$eennddiiff This command, as seen in the previous example, ter-
              minates an $$iiff command.

       $$eellssee  Commands in this branch of the  $$iiff  directive  are
              executed if the test fails.

       $$iinncclluuddee
              This  directive takes a single filename as an argu-
              ment and reads  commands  and  bindings  from  that
              file.   For  example, the following directive would
              read _/_e_t_c_/_i_n_p_u_t_r_c:

              $$iinncclluuddee  _/_e_t_c_/_i_n_p_u_t_r_c

SSEEAARRCCHHIINNGG
       Readline provides commands for searching through the  com-
       mand  history  for  lines  containing  a specified string.
       There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and  _n_o_n_-_i_n_c_r_e_m_e_n_-
       _t_a_l.

       Incremental  searches  begin  before the user has finished
       typing the search string.  As each character of the search
       string is typed, readline displays the next entry from the
       history matching the string typed so far.  An  incremental
       search  requires only as many characters as needed to find
       the desired history entry.  To search backward in the his-
       tory  for  a  particular  string,  type  CC--rr.   Typing CC--ss
       searches forward through the history.  The characters pre-
       sent  in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are
       used to terminate an incremental search.  If that variable
       has  not  been assigned a value the _E_s_c_a_p_e and CC--JJ charac-
       ters will terminate an incremental search.  CC--GG will abort
       an incremental search and restore the original line.  When
       the search is terminated, the history entry containing the
       search string becomes the current line.

       To  find  other matching entries in the history list, type
       CC--ss or CC--rr as appropriate.  This will search  backward  or
       forward  in  the  history  for  the next line matching the
       search string typed so far.  Any other key sequence  bound
       to  a  readline command will terminate the search and exe-
       cute that command.  For instance, a newline will terminate
       the search and accept the line, thereby executing the com-
       mand from the history list.  A movement command will  ter-
       minate  the  search,  make the last line found the current
       line, and begin editing.

       Non-incremental searches read  the  entire  search  string
       before starting to search for matching history lines.  The
       search string may be typed by the user or be part  of  the
       contents of the current line.

EEDDIITTIINNGG CCOOMMMMAANNDDSS
       The  following  is a list of the names of the commands and
       the default key sequences to which they are  bound.   Com-
       mand  names  without  an  accompanying  key  sequence  are
       unbound by default.

       In the following descriptions, _p_o_i_n_t refers to the current
       cursor  position,  and  _m_a_r_k  refers  to a cursor position
       saved by the sseett--mmaarrkk command.  The text between the point
       and mark is referred to as the _r_e_g_i_o_n.

   CCoommmmaannddss ffoorr MMoovviinngg
       bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa))
              Move to the start of the current line.
       eenndd--ooff--lliinnee ((CC--ee))
              Move to the end of the line.
       ffoorrwwaarrdd--cchhaarr ((CC--ff))
              Move forward a character.
       bbaacckkwwaarrdd--cchhaarr ((CC--bb))
              Move back a character.
       ffoorrwwaarrdd--wwoorrdd ((MM--ff))
              Move  forward  to  the end of the next word.  Words
              are composed of  alphanumeric  characters  (letters
              and digits).
       bbaacckkwwaarrdd--wwoorrdd ((MM--bb))
              Move  back  to the start of the current or previous
              word.  Words are composed of  alphanumeric  charac-
              ters (letters and digits).
       cclleeaarr--ssccrreeeenn ((CC--ll))
              Clear  the  screen  leaving the current line at the
              top of the screen.  With an argument,  refresh  the
              current line without clearing the screen.
       rreeddrraaww--ccuurrrreenntt--lliinnee
              Refresh the current line.

   CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy
       aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn))
              Accept  the line regardless of where the cursor is.
              If this line is non-empty, it may be added  to  the
              history  list for future recall with aadddd__hhiissttoorryy(()).
              If the line is a modified history line, the history
              line is restored to its original state.
       pprreevviioouuss--hhiissttoorryy ((CC--pp))
              Fetch  the  previous command from the history list,
              moving back in the list.
       nneexxtt--hhiissttoorryy ((CC--nn))
              Fetch the next command from the history list,  mov-
              ing forward in the list.
       bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<))
              Move to the first line in the history.
       eenndd--ooff--hhiissttoorryy ((MM-->>))
              Move  to  the  end  of the input history, i.e., the
              line currently being entered.
       rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr))
              Search backward starting at the  current  line  and
              moving `up' through the history as necessary.  This
              is an incremental search.
       ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss))
              Search forward starting at  the  current  line  and
              moving  `down'  through  the  history as necessary.
              This is an incremental search.
       nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp))
              Search backward through the history starting at the
              current  line  using a non-incremental search for a
              string supplied by the user.
       nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn))
              Search forward through the  history  using  a  non-
              incremental  search  for  a  string supplied by the
              user.
       hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd
              Search forward through the history for  the  string
              of characters between the start of the current line
              and the current cursor position (the _p_o_i_n_t).   This
              is a non-incremental search.
       hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd
              Search  backward through the history for the string
              of characters between the start of the current line
              and the point.  This is a non-incremental search.
       yyaannkk--nntthh--aarrgg ((MM--CC--yy))
              Insert  the  first argument to the previous command
              (usually the second word on the previous  line)  at
              point.   With  an  argument  _n, insert the _nth word
              from the previous command (the words in the  previ-
              ous  command  begin with word 0).  A negative argu-
              ment inserts the _nth word from the end of the  pre-
              vious command.
       yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__))
              Insert  the  last  argument to the previous command
              (the last word  of  the  previous  history  entry).
              With an argument, behave exactly like yyaannkk--nntthh--aarrgg.
              Successive calls to yyaannkk--llaasstt--aarrgg move back through
              the  history  list,  inserting the last argument of
              each line in turn.

   CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt
       ddeelleettee--cchhaarr ((CC--dd))
              Delete the character at point.  If point is at  the
              beginning  of  the line, there are no characters in
              the line, and the  last  character  typed  was  not
              bound to ddeelleettee--cchhaarr, then return EEOOFF.
       bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt))
              Delete the character behind the cursor.  When given
              a numeric argument, save the deleted  text  on  the
              kill ring.
       ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr
              Delete  the  character under the cursor, unless the
              cursor is at the end of the line, in which case the
              character behind the cursor is deleted.
       qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv))
              Add  the  next  character that you type to the line
              verbatim.  This is how to  insert  characters  like
              CC--qq, for example.
       ttaabb--iinnsseerrtt ((MM--TTAABB))
              Insert a tab character.
       sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......))
              Insert the character typed.
       ttrraannssppoossee--cchhaarrss ((CC--tt))
              Drag  the  character  before point forward over the
              character at point, moving point forward  as  well.
              If  point  is  at  the  end  of the line, then this
              transposes the two characters before point.   Nega-
              tive arguments have no effect.
       ttrraannssppoossee--wwoorrddss ((MM--tt))
              Drag  the  word  before  point  past the word after
              point, moving point over that  word  as  well.   If
              point  is  at  the end of the line, this transposes
              the last two words on the line.
       uuppccaassee--wwoorrdd ((MM--uu))
              Uppercase the current (or following) word.  With  a
              negative argument, uppercase the previous word, but
              do not move point.
       ddoowwnnccaassee--wwoorrdd ((MM--ll))
              Lowercase the current (or following) word.  With  a
              negative argument, lowercase the previous word, but
              do not move point.
       ccaappiittaalliizzee--wwoorrdd ((MM--cc))
              Capitalize the current (or following) word.  With a
              negative  argument,  capitalize  the previous word,
              but do not move point.
       oovveerrwwrriittee--mmooddee
              Toggle overwrite mode.  With an  explicit  positive
              numeric argument, switches to overwrite mode.  With
              an explicit non-positive numeric argument, switches
              to  insert  mode.   This command affects only eemmaaccss
              mode; vvii mode  does  overwrite  differently.   Each
              call to _r_e_a_d_l_i_n_e_(_) starts in insert mode.  In over-
              write mode, characters bound to sseellff--iinnsseerrtt replace
              the  text  at point rather than pushing the text to
              the   right.     Characters    bound    to    bbaacckk--
              wwaarrdd--ddeelleettee--cchhaarr replace the character before point
              with a space.  By default, this command is unbound.

   KKiilllliinngg aanndd YYaannkkiinngg
       kkiillll--lliinnee ((CC--kk))
              Kill the text from point to the end of the line.
       bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt))
              Kill backward to the beginning of the line.
       uunniixx--lliinnee--ddiissccaarrdd ((CC--uu))
              Kill  backward  from  point to the beginning of the
              line.  The killed text is saved on the kill-ring.
       kkiillll--wwhhoollee--lliinnee
              Kill all characters on the current line, no  matter
              where point is.
       kkiillll--wwoorrdd ((MM--dd))
              Kill  from point the end of the current word, or if
              between words, to the end of the next  word.   Word
              boundaries  are  the  same  as  those  used by ffoorr--
              wwaarrdd--wwoorrdd.
       bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt))
              Kill the word behind point.   Word  boundaries  are
              the same as those used by bbaacckkwwaarrdd--wwoorrdd.
       uunniixx--wwoorrdd--rruubboouutt ((CC--ww))
              Kill  the word behind point, using white space as a
              word boundary.  The killed text  is  saved  on  the
              kill-ring.
       ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\))
              Delete all spaces and tabs around point.
       kkiillll--rreeggiioonn
              Kill  the  text  between  the point and _m_a_r_k (saved
              cursor position).  This text is referred to as  the
              _r_e_g_i_o_n.
       ccooppyy--rreeggiioonn--aass--kkiillll
              Copy the text in the region to the kill buffer.
       ccooppyy--bbaacckkwwaarrdd--wwoorrdd
              Copy the word before point to the kill buffer.  The
              word boundaries are the same as bbaacckkwwaarrdd--wwoorrdd.
       ccooppyy--ffoorrwwaarrdd--wwoorrdd
              Copy the word following point to the  kill  buffer.
              The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd.
       yyaannkk ((CC--yy))
              Yank  the  top  of the kill ring into the buffer at
              point.
       yyaannkk--ppoopp ((MM--yy))
              Rotate the kill ring, and yank the new  top.   Only
              works following yyaannkk or yyaannkk--ppoopp.

   NNuummeerriicc AArrgguummeennttss
       ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----))
              Add  this  digit to the argument already accumulat-
              ing, or start a new argument.  M-- starts  a  nega-
              tive argument.
       uunniivveerrssaall--aarrgguummeenntt
              This  is  another  way  to specify an argument.  If
              this command is followed by  one  or  more  digits,
              optionally  with a leading minus sign, those digits
              define the argument.  If the command is followed by
              digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the
              numeric argument, but is otherwise ignored.   As  a
              special  case,  if this command is immediately fol-
              lowed by a character that is  neither  a  digit  or
              minus sign, the argument count for the next command
              is multiplied by four.  The argument count is  ini-
              tially  one,  so  executing this function the first
              time makes the argument count four, a  second  time
              makes the argument count sixteen, and so on.

   CCoommpplleettiinngg
       ccoommpplleettee ((TTAABB))
              Attempt  to  perform  completion on the text before
              point.  The actual completion performed is applica-
              tion-specific.   BBaasshh,  for instance, attempts com-
              pletion treating the text as  a  variable  (if  the
              text  begins  with $$), username (if the text begins
              with ~~), hostname (if the text begins with  @@),  or
              command  (including aliases and functions) in turn.
              If none of these produces a match, filename comple-
              tion  is attempted.  GGddbb, on the other hand, allows
              completion of program functions and variables,  and
              only  attempts  filename  completion  under certain
              circumstances.
       ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??))
              List the possible completions of  the  text  before
              point.
       iinnsseerrtt--ccoommpplleettiioonnss ((MM--**))
              Insert  all  completions  of  the text before point
              that would have been generated by  ppoossssiibbllee--ccoommppllee--
              ttiioonnss.
       mmeennuu--ccoommpplleettee
              Similar  to  ccoommpplleettee,  but replaces the word to be
              completed with a single match from the list of pos-
              sible completions.  Repeated execution of mmeennuu--ccoomm--
              pplleettee steps through the list  of  possible  comple-
              tions, inserting each match in turn.  At the end of
              the list of completions, the bell is rung  (subject
              to  the  setting  of  00aanndd  tthhee  oorriiggiinnaall  tteexxtt  iiss
              rreessttoorreedd..  AAnn aarrgguummeenntt ooff _n mmoovveess _n ppoossiittiioonnss  ffoorr--
              wwaarrdd  iinn  tthhee  lliisstt ooff mmaattcchheess;; aa nneeggaattiivvee aarrgguummeenntt
              mmaayy bbee uusseedd ttoo  mmoovvee  bbaacckkwwaarrdd  tthhrroouugghh  tthhee  lliisstt..
              TThhiiss ccoommmmaanndd iiss iinntteennddeedd ttoo bbee bboouunndd ttoo TTAABB,, bbuutt iiss
              uunnbboouunndd bbyy ddeeffaauulltt..
       ddeelleettee--cchhaarr--oorr--lliisstt
              Deletes the character under the cursor  if  not  at
              the  beginning  or  end  of  the line (like ddeelleettee--
              cchhaarr).  If at the end of the line, behaves  identi-
              cally to ppoossssiibbllee--ccoommpplleettiioonnss.

   KKeeyybbooaarrdd MMaaccrrooss
       ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (())
              Begin  saving the characters typed into the current
              keyboard macro.
       eenndd--kkbbdd--mmaaccrroo ((CC--xx ))))
              Stop saving the characters typed into  the  current
              keyboard macro and store the definition.
       ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee))
              Re-execute the last keyboard macro defined, by mak-
              ing the characters in the macro appear as if  typed
              at the keyboard.

   MMiisscceellllaanneeoouuss
       rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr))
              Read  in  the  contents  of  the  _i_n_p_u_t_r_c file, and
              incorporate any bindings  or  variable  assignments
              found there.
       aabboorrtt ((CC--gg))
              Abort the current editing command and ring the ter-
              minal's   bell   (subject   to   the   setting   of
              bbeellll--ssttyyllee).
       ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......))
              If  the  metafied character _x is lowercase, run the
              command that is bound to the  corresponding  upper-
              case character.
       pprreeffiixx--mmeettaa ((EESSCC))
              Metafy  the next character typed.  EESSCC ff is equiva-
              lent to MMeettaa--ff.
       uunnddoo ((CC--__,, CC--xx CC--uu))
              Incremental undo, separately  remembered  for  each
              line.
       rreevveerrtt--lliinnee ((MM--rr))
              Undo  all  changes made to this line.  This is like
              executing the uunnddoo command enough times  to  return
              the line to its initial state.
       ttiillddee--eexxppaanndd ((MM--&&))
              Perform tilde expansion on the current word.
       sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>))
              Set  the  mark to the point.  If a numeric argument
              is supplied, the mark is set to that position.
       eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx))
              Swap the point with the mark.  The  current  cursor
              position  is set to the saved position, and the old
              cursor position is saved as the mark.
       cchhaarraacctteerr--sseeaarrcchh ((CC--]]))
              A character is read and point is moved to the  next
              occurrence  of  that  character.   A negative count
              searches for previous occurrences.
       cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]]))
              A character is read and point is moved to the  pre-
              vious  occurrence  of  that  character.  A negative
              count searches for subsequent occurrences.
       iinnsseerrtt--ccoommmmeenntt ((MM--##))
              Without a numeric argument, the value of the  read-
              line  ccoommmmeenntt--bbeeggiinn  variable  is  inserted  at the
              beginning of the current line.  If a numeric  argu-
              ment  is  supplied,  this command acts as a toggle:
              if the characters at the beginning of the  line  do
              not  match the value of ccoommmmeenntt--bbeeggiinn, the value is
              inserted, otherwise the characters in ccoommmmeenntt--bbeeggiinn
              are  deleted  from  the  beginning of the line.  In
              either case, the line is accepted as if  a  newline
              had been typed.  The default value of ccoommmmeenntt--bbeeggiinn
              makes the current  line  a  shell  comment.   If  a
              numeric argument causes the comment character to be
              removed, the line will be executed by the shell.
       dduummpp--ffuunnccttiioonnss
              Print all of the functions and their  key  bindings
              to  the  readline  output  stream.   If  a  numeric
              argument is supplied, the output  is  formatted  in
              such  a  way that it can be made part of an _i_n_p_u_t_r_c
              file.
       dduummpp--vvaarriiaabblleess
              Print all of the settable variables and their  val-
              ues  to  the  readline output stream.  If a numeric
              argument is supplied, the output  is  formatted  in
              such  a  way that it can be made part of an _i_n_p_u_t_r_c
              file.
       dduummpp--mmaaccrrooss
              Print all of the readline key  sequences  bound  to
              macros  and  the  strings they ouput.  If a numeric
              argument is supplied, the output  is  formatted  in
              such  a  way that it can be made part of an _i_n_p_u_t_r_c
              file.
       eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee))
              When in vvii command mode, this causes  a  switch  to
              eemmaaccss editing mode.
       vvii--eeddiittiinngg--mmooddee ((MM--CC--jj))
              When in eemmaaccss editing mode, this causes a switch to
              vvii editing mode.

DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS
       The following is a list of the default emacs and vi  bind-
       ings.   Characters  with the eighth bit set are written as
       M-<character>, and are referred to as _m_e_t_a_f_i_e_d characters.
       The  printable  ASCII characters not mentioned in the list
       of emacs standard bindings are bound  to  the  sseellff--iinnsseerrtt
       function,  which just inserts the given character into the
       input line.  In vi  insertion  mode,  all  characters  not
       specifically  mentioned are bound to sseellff--iinnsseerrtt.  Charac-
       ters assigned to signal generation by _s_t_t_y(1) or the  ter-
       minal  driver,  such  as C-Z or C-C, retain that function.
       Upper and lower case metafied characters are bound to  the
       same  function in the emacs mode meta keymap.  The remain-
       ing characters are unbound, which causes readline to  ring
       the  bell  (subject to the setting of the bbeellll--ssttyyllee vari-
       able).

   EEmmaaccss MMooddee
             Emacs Standard bindings

             "C-@"  set-mark
             "C-A"  beginning-of-line
             "C-B"  backward-char
             "C-D"  delete-char
             "C-E"  end-of-line
             "C-F"  forward-char
             "C-G"  abort
             "C-H"  backward-delete-char
             "C-I"  complete
             "C-J"  accept-line
             "C-K"  kill-line
             "C-L"  clear-screen
             "C-M"  accept-line
             "C-N"  next-history
             "C-P"  previous-history
             "C-Q"  quoted-insert
             "C-R"  reverse-search-history
             "C-S"  forward-search-history
             "C-T"  transpose-chars
             "C-U"  unix-line-discard
             "C-V"  quoted-insert
             "C-W"  unix-word-rubout
             "C-Y"  yank
             "C-]"  character-search
             "C-_"  undo
             " " to "/"  self-insert
             "0"  to "9"  self-insert
             ":"  to "~"  self-insert
             "C-?"  backward-delete-char

             Emacs Meta bindings

             "M-C-G"  abort
             "M-C-H"  backward-kill-word
             "M-C-I"  tab-insert
             "M-C-J"  vi-editing-mode
             "M-C-M"  vi-editing-mode
             "M-C-R"  revert-line
             "M-C-Y"  yank-nth-arg
             "M-C-["  complete
             "M-C-]"  character-search-backward
             "M-space"  set-mark
             "M-#"  insert-comment
             "M-&"  tilde-expand
             "M-*"  insert-completions
             "M--"  digit-argument
             "M-."  yank-last-arg
             "M-0"  digit-argument
             "M-1"  digit-argument
             "M-2"  digit-argument
             "M-3"  digit-argument
             "M-4"  digit-argument
             "M-5"  digit-argument
             "M-6"  digit-argument
             "M-7"  digit-argument
             "M-8"  digit-argument
             "M-9"  digit-argument
             "M-<"  beginning-of-history
             "M-="  possible-completions
             "M->"  end-of-history
             "M-?"  possible-completions
             "M-B"  backward-word
             "M-C"  capitalize-word
             "M-D"  kill-word
             "M-F"  forward-word
             "M-L"  downcase-word
             "M-N"  non-incremental-forward-search-history
             "M-P"  non-incremental-reverse-search-history
             "M-R"  revert-line
             "M-T"  transpose-words
             "M-U"  upcase-word
             "M-Y"  yank-pop
             "M-\"  delete-horizontal-space
             "M-~"  tilde-expand
             "M-C-?"  backward-kill-word
             "M-_"  yank-last-arg

             Emacs Control-X bindings

             "C-XC-G"  abort
             "C-XC-R"  re-read-init-file
             "C-XC-U"  undo
             "C-XC-X"  exchange-point-and-mark
             "C-X("  start-kbd-macro
             "C-X)"  end-kbd-macro
             "C-XE"  call-last-kbd-macro
             "C-XC-?"  backward-kill-line


   VVII MMooddee bbiinnddiinnggss
             VI Insert Mode functions

             "C-D"  vi-eof-maybe
             "C-H"  backward-delete-char
             "C-I"  complete
             "C-J"  accept-line
             "C-M"  accept-line
             "C-R"  reverse-search-history
             "C-S"  forward-search-history
             "C-T"  transpose-chars
             "C-U"  unix-line-discard
             "C-V"  quoted-insert
             "C-W"  unix-word-rubout
             "C-Y"  yank
             "C-["  vi-movement-mode
             "C-_"  undo
             " " to "~"  self-insert
             "C-?"  backward-delete-char

             VI Command Mode functions

             "C-D"  vi-eof-maybe
             "C-E"  emacs-editing-mode
             "C-G"  abort
             "C-H"  backward-char
             "C-J"  accept-line
             "C-K"  kill-line
             "C-L"  clear-screen
             "C-M"  accept-line
             "C-N"  next-history
             "C-P"  previous-history
             "C-Q"  quoted-insert
             "C-R"  reverse-search-history
             "C-S"  forward-search-history
             "C-T"  transpose-chars
             "C-U"  unix-line-discard
             "C-V"  quoted-insert
             "C-W"  unix-word-rubout
             "C-Y"  yank
             "C-_"  vi-undo
             " "  forward-char
             "#"  insert-comment
             "$"  end-of-line
             "%"  vi-match
             "&"  vi-tilde-expand
             "*"  vi-complete
             "+"  next-history
             ","  vi-char-search
             "-"  previous-history
             "."  vi-redo
             "/"  vi-search
             "0"  beginning-of-line
             "1" to "9"  vi-arg-digit
             ";"  vi-char-search
             "="  vi-complete
             "?"  vi-search
             "A"  vi-append-eol
             "B"  vi-prev-word
             "C"  vi-change-to
             "D"  vi-delete-to
             "E"  vi-end-word
             "F"  vi-char-search
             "G"  vi-fetch-history
             "I"  vi-insert-beg
             "N"  vi-search-again
             "P"  vi-put
             "R"  vi-replace
             "S"  vi-subst
             "T"  vi-char-search
             "U"  revert-line
             "W"  vi-next-word
             "X"  backward-delete-char
             "Y"  vi-yank-to
             "\"  vi-complete
             "^"  vi-first-print
             "_"  vi-yank-arg
             "`"  vi-goto-mark
             "a"  vi-append-mode
             "b"  vi-prev-word
             "c"  vi-change-to
             "d"  vi-delete-to
             "e"  vi-end-word
             "f"  vi-char-search
             "h"  backward-char
             "i"  vi-insertion-mode
             "j"  next-history
             "k"  prev-history
             "l"  forward-char
             "m"  vi-set-mark
             "n"  vi-search-again
             "p"  vi-put
             "r"  vi-change-char
             "s"  vi-subst
             "t"  vi-char-search
             "u"  vi-undo
             "w"  vi-next-word
             "x"  vi-delete
             "y"  vi-yank-to
             "|"  vi-column
             "~"  vi-change-case

SSEEEE AALLSSOO
       _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
       _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey
       _b_a_s_h(1)

FFIILLEESS
       _~_/_._i_n_p_u_t_r_c
              Individual rreeaaddlliinnee initialization file

AAUUTTHHOORRSS
       Brian Fox, Free Software Foundation
       bfox@gnu.org

       Chet Ramey, Case Western Reserve University
       chet@ins.CWRU.Edu

BBUUGG RREEPPOORRTTSS
       If you find a bug in rreeaaddlliinnee,, you should report it.   But
       first,  you  should make sure that it really is a bug, and
       that it appears in the  latest  version  of  the  rreeaaddlliinnee
       library that you have.

       Once  you have determined that a bug actually exists, mail
       a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g.  If you have a  fix,
       you  are  welcome  to  mail that as well!  Suggestions and
       `philosophical' bug reports may  be  mailed  to  _b_u_g_-_r_e_a_d_-
       _l_i_n_e@_g_n_u_._o_r_g   or   posted   to   the   Usenet   newsgroup
       ggnnuu..bbaasshh..bbuugg.

       Comments and  bug  reports  concerning  this  manual  page
       should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u.

BBUUGGSS
       It's too big and too slow.



GNU Readline 4.3         2002 January 22              READLINE(3)
