Annotation of embedaddon/readline/doc/readline.info, revision 1.1

1.1     ! misho       1: This is readline.info, produced by makeinfo version 4.13 from
        !             2: /usr/homes/chet/src/bash/readline-src/doc/rlman.texi.
        !             3: 
        !             4: This manual describes the GNU Readline Library (version 6.3, 6 January
        !             5: 2014), a library which aids in the consistency of user interface across
        !             6: discrete programs which provide a command line interface.
        !             7: 
        !             8:    Copyright (C) 1988-2014 Free Software Foundation, Inc.
        !             9: 
        !            10:      Permission is granted to copy, distribute and/or modify this
        !            11:      document under the terms of the GNU Free Documentation License,
        !            12:      Version 1.3 or any later version published by the Free Software
        !            13:      Foundation; with no Invariant Sections, no Front-Cover Texts, and
        !            14:      no Back-Cover Texts.  A copy of the license is included in the
        !            15:      section entitled "GNU Free Documentation License".
        !            16: 
        !            17: 
        !            18: INFO-DIR-SECTION Libraries
        !            19: START-INFO-DIR-ENTRY
        !            20: * Readline: (readline).       The GNU readline library API.
        !            21: END-INFO-DIR-ENTRY
        !            22: 
        !            23: 
        !            24: File: readline.info,  Node: Top,  Next: Command Line Editing,  Up: (dir)
        !            25: 
        !            26: GNU Readline Library
        !            27: ********************
        !            28: 
        !            29: This document describes the GNU Readline Library, a utility which aids
        !            30: in the consistency of user interface across discrete programs which
        !            31: provide a command line interface.  The Readline home page is
        !            32: `http://www.gnu.org/software/readline/'.
        !            33: 
        !            34: * Menu:
        !            35: 
        !            36: * Command Line Editing::          GNU Readline User's Manual.
        !            37: * Programming with GNU Readline::  GNU Readline Programmer's Manual.
        !            38: * GNU Free Documentation License::     License for copying this manual.
        !            39: * Concept Index::                 Index of concepts described in this manual.
        !            40: * Function and Variable Index::           Index of externally visible functions
        !            41:                                   and variables.
        !            42: 
        !            43: 
        !            44: File: readline.info,  Node: Command Line Editing,  Next: Programming with GNU Readline,  Prev: Top,  Up: Top
        !            45: 
        !            46: 1 Command Line Editing
        !            47: **********************
        !            48: 
        !            49: This chapter describes the basic features of the GNU command line
        !            50: editing interface.
        !            51: 
        !            52: * Menu:
        !            53: 
        !            54: * Introduction and Notation::  Notation used in this text.
        !            55: * Readline Interaction::       The minimum set of commands for editing a line.
        !            56: * Readline Init File::         Customizing Readline from a user's view.
        !            57: * Bindable Readline Commands:: A description of most of the Readline commands
        !            58:                                available for binding
        !            59: * Readline vi Mode::           A short description of how to make Readline
        !            60:                                behave like the vi editor.
        !            61: 
        !            62: 
        !            63: File: readline.info,  Node: Introduction and Notation,  Next: Readline Interaction,  Up: Command Line Editing
        !            64: 
        !            65: 1.1 Introduction to Line Editing
        !            66: ================================
        !            67: 
        !            68: The following paragraphs describe the notation used to represent
        !            69: keystrokes.
        !            70: 
        !            71:    The text `C-k' is read as `Control-K' and describes the character
        !            72: produced when the <k> key is pressed while the Control key is depressed.
        !            73: 
        !            74:    The text `M-k' is read as `Meta-K' and describes the character
        !            75: produced when the Meta key (if you have one) is depressed, and the <k>
        !            76: key is pressed.  The Meta key is labeled <ALT> on many keyboards.  On
        !            77: keyboards with two keys labeled <ALT> (usually to either side of the
        !            78: space bar), the <ALT> on the left side is generally set to work as a
        !            79: Meta key.  The <ALT> key on the right may also be configured to work as
        !            80: a Meta key or may be configured as some other modifier, such as a
        !            81: Compose key for typing accented characters.
        !            82: 
        !            83:    If you do not have a Meta or <ALT> key, or another key working as a
        !            84: Meta key, the identical keystroke can be generated by typing <ESC>
        !            85: _first_, and then typing <k>.  Either process is known as "metafying"
        !            86: the <k> key.
        !            87: 
        !            88:    The text `M-C-k' is read as `Meta-Control-k' and describes the
        !            89: character produced by "metafying" `C-k'.
        !            90: 
        !            91:    In addition, several keys have their own names.  Specifically,
        !            92: <DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves
        !            93: when seen in this text, or in an init file (*note Readline Init File::).
        !            94: If your keyboard lacks a <LFD> key, typing <C-j> will produce the
        !            95: desired character.  The <RET> key may be labeled <Return> or <Enter> on
        !            96: some keyboards.
        !            97: 
        !            98: 
        !            99: File: readline.info,  Node: Readline Interaction,  Next: Readline Init File,  Prev: Introduction and Notation,  Up: Command Line Editing
        !           100: 
        !           101: 1.2 Readline Interaction
        !           102: ========================
        !           103: 
        !           104: Often during an interactive session you type in a long line of text,
        !           105: only to notice that the first word on the line is misspelled.  The
        !           106: Readline library gives you a set of commands for manipulating the text
        !           107: as you type it in, allowing you to just fix your typo, and not forcing
        !           108: you to retype the majority of the line.  Using these editing commands,
        !           109: you move the cursor to the place that needs correction, and delete or
        !           110: insert the text of the corrections.  Then, when you are satisfied with
        !           111: the line, you simply press <RET>.  You do not have to be at the end of
        !           112: the line to press <RET>; the entire line is accepted regardless of the
        !           113: location of the cursor within the line.
        !           114: 
        !           115: * Menu:
        !           116: 
        !           117: * Readline Bare Essentials::   The least you need to know about Readline.
        !           118: * Readline Movement Commands:: Moving about the input line.
        !           119: * Readline Killing Commands::  How to delete text, and how to get it back!
        !           120: * Readline Arguments::         Giving numeric arguments to commands.
        !           121: * Searching::                  Searching through previous lines.
        !           122: 
        !           123: 
        !           124: File: readline.info,  Node: Readline Bare Essentials,  Next: Readline Movement Commands,  Up: Readline Interaction
        !           125: 
        !           126: 1.2.1 Readline Bare Essentials
        !           127: ------------------------------
        !           128: 
        !           129: In order to enter characters into the line, simply type them.  The typed
        !           130: character appears where the cursor was, and then the cursor moves one
        !           131: space to the right.  If you mistype a character, you can use your erase
        !           132: character to back up and delete the mistyped character.
        !           133: 
        !           134:    Sometimes you may mistype a character, and not notice the error
        !           135: until you have typed several other characters.  In that case, you can
        !           136: type `C-b' to move the cursor to the left, and then correct your
        !           137: mistake.  Afterwards, you can move the cursor to the right with `C-f'.
        !           138: 
        !           139:    When you add text in the middle of a line, you will notice that
        !           140: characters to the right of the cursor are `pushed over' to make room
        !           141: for the text that you have inserted.  Likewise, when you delete text
        !           142: behind the cursor, characters to the right of the cursor are `pulled
        !           143: back' to fill in the blank space created by the removal of the text.  A
        !           144: list of the bare essentials for editing the text of an input line
        !           145: follows.
        !           146: 
        !           147: `C-b'
        !           148:      Move back one character.
        !           149: 
        !           150: `C-f'
        !           151:      Move forward one character.
        !           152: 
        !           153: <DEL> or <Backspace>
        !           154:      Delete the character to the left of the cursor.
        !           155: 
        !           156: `C-d'
        !           157:      Delete the character underneath the cursor.
        !           158: 
        !           159: Printing characters
        !           160:      Insert the character into the line at the cursor.
        !           161: 
        !           162: `C-_' or `C-x C-u'
        !           163:      Undo the last editing command.  You can undo all the way back to an
        !           164:      empty line.
        !           165: 
        !           166: (Depending on your configuration, the <Backspace> key be set to delete
        !           167: the character to the left of the cursor and the <DEL> key set to delete
        !           168: the character underneath the cursor, like `C-d', rather than the
        !           169: character to the left of the cursor.)
        !           170: 
        !           171: 
        !           172: File: readline.info,  Node: Readline Movement Commands,  Next: Readline Killing Commands,  Prev: Readline Bare Essentials,  Up: Readline Interaction
        !           173: 
        !           174: 1.2.2 Readline Movement Commands
        !           175: --------------------------------
        !           176: 
        !           177: The above table describes the most basic keystrokes that you need in
        !           178: order to do editing of the input line.  For your convenience, many
        !           179: other commands have been added in addition to `C-b', `C-f', `C-d', and
        !           180: <DEL>.  Here are some commands for moving more rapidly about the line.
        !           181: 
        !           182: `C-a'
        !           183:      Move to the start of the line.
        !           184: 
        !           185: `C-e'
        !           186:      Move to the end of the line.
        !           187: 
        !           188: `M-f'
        !           189:      Move forward a word, where a word is composed of letters and
        !           190:      digits.
        !           191: 
        !           192: `M-b'
        !           193:      Move backward a word.
        !           194: 
        !           195: `C-l'
        !           196:      Clear the screen, reprinting the current line at the top.
        !           197: 
        !           198:    Notice how `C-f' moves forward a character, while `M-f' moves
        !           199: forward a word.  It is a loose convention that control keystrokes
        !           200: operate on characters while meta keystrokes operate on words.
        !           201: 
        !           202: 
        !           203: File: readline.info,  Node: Readline Killing Commands,  Next: Readline Arguments,  Prev: Readline Movement Commands,  Up: Readline Interaction
        !           204: 
        !           205: 1.2.3 Readline Killing Commands
        !           206: -------------------------------
        !           207: 
        !           208: "Killing" text means to delete the text from the line, but to save it
        !           209: away for later use, usually by "yanking" (re-inserting) it back into
        !           210: the line.  (`Cut' and `paste' are more recent jargon for `kill' and
        !           211: `yank'.)
        !           212: 
        !           213:    If the description for a command says that it `kills' text, then you
        !           214: can be sure that you can get the text back in a different (or the same)
        !           215: place later.
        !           216: 
        !           217:    When you use a kill command, the text is saved in a "kill-ring".
        !           218: Any number of consecutive kills save all of the killed text together, so
        !           219: that when you yank it back, you get it all.  The kill ring is not line
        !           220: specific; the text that you killed on a previously typed line is
        !           221: available to be yanked back later, when you are typing another line.  
        !           222: 
        !           223:    Here is the list of commands for killing text.
        !           224: 
        !           225: `C-k'
        !           226:      Kill the text from the current cursor position to the end of the
        !           227:      line.
        !           228: 
        !           229: `M-d'
        !           230:      Kill from the cursor to the end of the current word, or, if between
        !           231:      words, to the end of the next word.  Word boundaries are the same
        !           232:      as those used by `M-f'.
        !           233: 
        !           234: `M-<DEL>'
        !           235:      Kill from the cursor the start of the current word, or, if between
        !           236:      words, to the start of the previous word.  Word boundaries are the
        !           237:      same as those used by `M-b'.
        !           238: 
        !           239: `C-w'
        !           240:      Kill from the cursor to the previous whitespace.  This is
        !           241:      different than `M-<DEL>' because the word boundaries differ.
        !           242: 
        !           243: 
        !           244:    Here is how to "yank" the text back into the line.  Yanking means to
        !           245: copy the most-recently-killed text from the kill buffer.
        !           246: 
        !           247: `C-y'
        !           248:      Yank the most recently killed text back into the buffer at the
        !           249:      cursor.
        !           250: 
        !           251: `M-y'
        !           252:      Rotate the kill-ring, and yank the new top.  You can only do this
        !           253:      if the prior command is `C-y' or `M-y'.
        !           254: 
        !           255: 
        !           256: File: readline.info,  Node: Readline Arguments,  Next: Searching,  Prev: Readline Killing Commands,  Up: Readline Interaction
        !           257: 
        !           258: 1.2.4 Readline Arguments
        !           259: ------------------------
        !           260: 
        !           261: You can pass numeric arguments to Readline commands.  Sometimes the
        !           262: argument acts as a repeat count, other times it is the sign of the
        !           263: argument that is significant.  If you pass a negative argument to a
        !           264: command which normally acts in a forward direction, that command will
        !           265: act in a backward direction.  For example, to kill text back to the
        !           266: start of the line, you might type `M-- C-k'.
        !           267: 
        !           268:    The general way to pass numeric arguments to a command is to type
        !           269: meta digits before the command.  If the first `digit' typed is a minus
        !           270: sign (`-'), then the sign of the argument will be negative.  Once you
        !           271: have typed one meta digit to get the argument started, you can type the
        !           272: remainder of the digits, and then the command.  For example, to give
        !           273: the `C-d' command an argument of 10, you could type `M-1 0 C-d', which
        !           274: will delete the next ten characters on the input line.
        !           275: 
        !           276: 
        !           277: File: readline.info,  Node: Searching,  Prev: Readline Arguments,  Up: Readline Interaction
        !           278: 
        !           279: 1.2.5 Searching for Commands in the History
        !           280: -------------------------------------------
        !           281: 
        !           282: Readline provides commands for searching through the command history
        !           283: for lines containing a specified string.  There are two search modes:
        !           284: "incremental" and "non-incremental".
        !           285: 
        !           286:    Incremental searches begin before the user has finished typing the
        !           287: search string.  As each character of the search string is typed,
        !           288: Readline displays the next entry from the history matching the string
        !           289: typed so far.  An incremental search requires only as many characters
        !           290: as needed to find the desired history entry.  To search backward in the
        !           291: history for a particular string, type `C-r'.  Typing `C-s' searches
        !           292: forward through the history.  The characters present in the value of
        !           293: the `isearch-terminators' variable are used to terminate an incremental
        !           294: search.  If that variable has not been assigned a value, the <ESC> and
        !           295: `C-J' characters will terminate an incremental search.  `C-g' will
        !           296: abort an incremental search and restore the original line.  When the
        !           297: search is terminated, the history entry containing the search string
        !           298: becomes the current line.
        !           299: 
        !           300:    To find other matching entries in the history list, type `C-r' or
        !           301: `C-s' as appropriate.  This will search backward or forward in the
        !           302: history for the next entry matching the search string typed so far.
        !           303: Any other key sequence bound to a Readline command will terminate the
        !           304: search and execute that command.  For instance, a <RET> will terminate
        !           305: the search and accept the line, thereby executing the command from the
        !           306: history list.  A movement command will terminate the search, make the
        !           307: last line found the current line, and begin editing.
        !           308: 
        !           309:    Readline remembers the last incremental search string.  If two
        !           310: `C-r's are typed without any intervening characters defining a new
        !           311: search string, any remembered search string is used.
        !           312: 
        !           313:    Non-incremental searches read the entire search string before
        !           314: starting to search for matching history lines.  The search string may be
        !           315: typed by the user or be part of the contents of the current line.
        !           316: 
        !           317: 
        !           318: File: readline.info,  Node: Readline Init File,  Next: Bindable Readline Commands,  Prev: Readline Interaction,  Up: Command Line Editing
        !           319: 
        !           320: 1.3 Readline Init File
        !           321: ======================
        !           322: 
        !           323: Although the Readline library comes with a set of Emacs-like
        !           324: keybindings installed by default, it is possible to use a different set
        !           325: of keybindings.  Any user can customize programs that use Readline by
        !           326: putting commands in an "inputrc" file, conventionally in his home
        !           327: directory.  The name of this file is taken from the value of the
        !           328: environment variable `INPUTRC'.  If that variable is unset, the default
        !           329: is `~/.inputrc'.  If that file does not exist or cannot be read, the
        !           330: ultimate default is `/etc/inputrc'.
        !           331: 
        !           332:    When a program which uses the Readline library starts up, the init
        !           333: file is read, and the key bindings are set.
        !           334: 
        !           335:    In addition, the `C-x C-r' command re-reads this init file, thus
        !           336: incorporating any changes that you might have made to it.
        !           337: 
        !           338: * Menu:
        !           339: 
        !           340: * Readline Init File Syntax::  Syntax for the commands in the inputrc file.
        !           341: 
        !           342: * Conditional Init Constructs::        Conditional key bindings in the inputrc file.
        !           343: 
        !           344: * Sample Init File::           An example inputrc file.
        !           345: 
        !           346: 
        !           347: File: readline.info,  Node: Readline Init File Syntax,  Next: Conditional Init Constructs,  Up: Readline Init File
        !           348: 
        !           349: 1.3.1 Readline Init File Syntax
        !           350: -------------------------------
        !           351: 
        !           352: There are only a few basic constructs allowed in the Readline init
        !           353: file.  Blank lines are ignored.  Lines beginning with a `#' are
        !           354: comments.  Lines beginning with a `$' indicate conditional constructs
        !           355: (*note Conditional Init Constructs::).  Other lines denote variable
        !           356: settings and key bindings.
        !           357: 
        !           358: Variable Settings
        !           359:      You can modify the run-time behavior of Readline by altering the
        !           360:      values of variables in Readline using the `set' command within the
        !           361:      init file.  The syntax is simple:
        !           362: 
        !           363:           set VARIABLE VALUE
        !           364: 
        !           365:      Here, for example, is how to change from the default Emacs-like
        !           366:      key binding to use `vi' line editing commands:
        !           367: 
        !           368:           set editing-mode vi
        !           369: 
        !           370:      Variable names and values, where appropriate, are recognized
        !           371:      without regard to case.  Unrecognized variable names are ignored.
        !           372: 
        !           373:      Boolean variables (those that can be set to on or off) are set to
        !           374:      on if the value is null or empty, ON (case-insensitive), or 1.
        !           375:      Any other value results in the variable being set to off.
        !           376: 
        !           377:      A great deal of run-time behavior is changeable with the following
        !           378:      variables.
        !           379: 
        !           380:     `bell-style'
        !           381:           Controls what happens when Readline wants to ring the
        !           382:           terminal bell.  If set to `none', Readline never rings the
        !           383:           bell.  If set to `visible', Readline uses a visible bell if
        !           384:           one is available.  If set to `audible' (the default),
        !           385:           Readline attempts to ring the terminal's bell.
        !           386: 
        !           387:     `bind-tty-special-chars'
        !           388:           If set to `on', Readline attempts to bind the control
        !           389:           characters treated specially by the kernel's terminal driver
        !           390:           to their Readline equivalents.
        !           391: 
        !           392:     `colored-stats'
        !           393:           If set to `on', Readline displays possible completions using
        !           394:           different colors to indicate their file type.  The color
        !           395:           definitions are taken from the value of the `LS_COLORS'
        !           396:           environment variable.  The default is `off'.
        !           397: 
        !           398:     `comment-begin'
        !           399:           The string to insert at the beginning of the line when the
        !           400:           `insert-comment' command is executed.  The default value is
        !           401:           `"#"'.
        !           402: 
        !           403:     `completion-display-width'
        !           404:           The number of screen columns used to display possible matches
        !           405:           when performing completion.  The value is ignored if it is
        !           406:           less than 0 or greater than the terminal screen width.  A
        !           407:           value of 0 will cause matches to be displayed one per line.
        !           408:           The default value is -1.
        !           409: 
        !           410:     `completion-ignore-case'
        !           411:           If set to `on', Readline performs filename matching and
        !           412:           completion in a case-insensitive fashion.  The default value
        !           413:           is `off'.
        !           414: 
        !           415:     `completion-map-case'
        !           416:           If set to `on', and COMPLETION-IGNORE-CASE is enabled,
        !           417:           Readline treats hyphens (`-') and underscores (`_') as
        !           418:           equivalent when performing case-insensitive filename matching
        !           419:           and completion.
        !           420: 
        !           421:     `completion-prefix-display-length'
        !           422:           The length in characters of the common prefix of a list of
        !           423:           possible completions that is displayed without modification.
        !           424:           When set to a value greater than zero, common prefixes longer
        !           425:           than this value are replaced with an ellipsis when displaying
        !           426:           possible completions.
        !           427: 
        !           428:     `completion-query-items'
        !           429:           The number of possible completions that determines when the
        !           430:           user is asked whether the list of possibilities should be
        !           431:           displayed.  If the number of possible completions is greater
        !           432:           than this value, Readline will ask the user whether or not he
        !           433:           wishes to view them; otherwise, they are simply listed.  This
        !           434:           variable must be set to an integer value greater than or
        !           435:           equal to 0.  A negative value means Readline should never ask.
        !           436:           The default limit is `100'.
        !           437: 
        !           438:     `convert-meta'
        !           439:           If set to `on', Readline will convert characters with the
        !           440:           eighth bit set to an ASCII key sequence by stripping the
        !           441:           eighth bit and prefixing an <ESC> character, converting them
        !           442:           to a meta-prefixed key sequence.  The default value is `on'.
        !           443: 
        !           444:     `disable-completion'
        !           445:           If set to `On', Readline will inhibit word completion.
        !           446:           Completion  characters will be inserted into the line as if
        !           447:           they had been mapped to `self-insert'.  The default is `off'.
        !           448: 
        !           449:     `editing-mode'
        !           450:           The `editing-mode' variable controls which default set of key
        !           451:           bindings is used.  By default, Readline starts up in Emacs
        !           452:           editing mode, where the keystrokes are most similar to Emacs.
        !           453:           This variable can be set to either `emacs' or `vi'.
        !           454: 
        !           455:     `echo-control-characters'
        !           456:           When set to `on', on operating systems that indicate they
        !           457:           support it, readline echoes a character corresponding to a
        !           458:           signal generated from the keyboard.  The default is `on'.
        !           459: 
        !           460:     `enable-keypad'
        !           461:           When set to `on', Readline will try to enable the application
        !           462:           keypad when it is called.  Some systems need this to enable
        !           463:           the arrow keys.  The default is `off'.
        !           464: 
        !           465:     `enable-meta-key'
        !           466:           When set to `on', Readline will try to enable any meta
        !           467:           modifier key the terminal claims to support when it is
        !           468:           called.  On many terminals, the meta key is used to send
        !           469:           eight-bit characters.  The default is `on'.
        !           470: 
        !           471:     `expand-tilde'
        !           472:           If set to `on', tilde expansion is performed when Readline
        !           473:           attempts word completion.  The default is `off'.
        !           474: 
        !           475:     `history-preserve-point'
        !           476:           If set to `on', the history code attempts to place the point
        !           477:           (the current cursor position) at the same location on each
        !           478:           history line retrieved with `previous-history' or
        !           479:           `next-history'.  The default is `off'.
        !           480: 
        !           481:     `history-size'
        !           482:           Set the maximum number of history entries saved in the
        !           483:           history list.  If set to zero, any existing history entries
        !           484:           are deleted and no new entries are saved.  If set to a value
        !           485:           less than zero, the number of history entries is not limited.
        !           486:           By default, the number of history entries is not limited.
        !           487: 
        !           488:     `horizontal-scroll-mode'
        !           489:           This variable can be set to either `on' or `off'.  Setting it
        !           490:           to `on' means that the text of the lines being edited will
        !           491:           scroll horizontally on a single screen line when they are
        !           492:           longer than the width of the screen, instead of wrapping onto
        !           493:           a new screen line.  By default, this variable is set to `off'.
        !           494: 
        !           495:     `input-meta'
        !           496:           If set to `on', Readline will enable eight-bit input (it will
        !           497:           not clear the eighth bit in the characters it reads),
        !           498:           regardless of what the terminal claims it can support.  The
        !           499:           default value is `off'.  The name `meta-flag' is a synonym
        !           500:           for this variable.
        !           501: 
        !           502:     `isearch-terminators'
        !           503:           The string of characters that should terminate an incremental
        !           504:           search without subsequently executing the character as a
        !           505:           command (*note Searching::).  If this variable has not been
        !           506:           given a value, the characters <ESC> and `C-J' will terminate
        !           507:           an incremental search.
        !           508: 
        !           509:     `keymap'
        !           510:           Sets Readline's idea of the current keymap for key binding
        !           511:           commands.  Acceptable `keymap' names are `emacs',
        !           512:           `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move',
        !           513:           `vi-command', and `vi-insert'.  `vi' is equivalent to
        !           514:           `vi-command'; `emacs' is equivalent to `emacs-standard'.  The
        !           515:           default value is `emacs'.  The value of the `editing-mode'
        !           516:           variable also affects the default keymap.
        !           517: 
        !           518:     `keyseq-timeout'
        !           519:           Specifies the duration Readline will wait for a character
        !           520:           when reading an ambiguous key sequence (one that can form a
        !           521:           complete key sequence using the input read so far, or can
        !           522:           take additional input to complete a longer key sequence).  If
        !           523:           no input is received within the timeout, Readline will use
        !           524:           the shorter but complete key sequence.  Readline uses this
        !           525:           value to determine whether or not input is available on the
        !           526:           current input source (`rl_instream' by default).  The value
        !           527:           is specified in milliseconds, so a value of 1000 means that
        !           528:           Readline will wait one second for additional input.  If this
        !           529:           variable is set to a value less than or equal to zero, or to a
        !           530:           non-numeric value, Readline will wait until another key is
        !           531:           pressed to decide which key sequence to complete.  The
        !           532:           default value is `500'.
        !           533: 
        !           534:     `mark-directories'
        !           535:           If set to `on', completed directory names have a slash
        !           536:           appended.  The default is `on'.
        !           537: 
        !           538:     `mark-modified-lines'
        !           539:           This variable, when set to `on', causes Readline to display an
        !           540:           asterisk (`*') at the start of history lines which have been
        !           541:           modified.  This variable is `off' by default.
        !           542: 
        !           543:     `mark-symlinked-directories'
        !           544:           If set to `on', completed names which are symbolic links to
        !           545:           directories have a slash appended (subject to the value of
        !           546:           `mark-directories').  The default is `off'.
        !           547: 
        !           548:     `match-hidden-files'
        !           549:           This variable, when set to `on', causes Readline to match
        !           550:           files whose names begin with a `.' (hidden files) when
        !           551:           performing filename completion.  If set to `off', the leading
        !           552:           `.' must be supplied by the user in the filename to be
        !           553:           completed.  This variable is `on' by default.
        !           554: 
        !           555:     `menu-complete-display-prefix'
        !           556:           If set to `on', menu completion displays the common prefix of
        !           557:           the list of possible completions (which may be empty) before
        !           558:           cycling through the list.  The default is `off'.
        !           559: 
        !           560:     `output-meta'
        !           561:           If set to `on', Readline will display characters with the
        !           562:           eighth bit set directly rather than as a meta-prefixed escape
        !           563:           sequence.  The default is `off'.
        !           564: 
        !           565:     `page-completions'
        !           566:           If set to `on', Readline uses an internal `more'-like pager
        !           567:           to display a screenful of possible completions at a time.
        !           568:           This variable is `on' by default.
        !           569: 
        !           570:     `print-completions-horizontally'
        !           571:           If set to `on', Readline will display completions with matches
        !           572:           sorted horizontally in alphabetical order, rather than down
        !           573:           the screen.  The default is `off'.
        !           574: 
        !           575:     `revert-all-at-newline'
        !           576:           If set to `on', Readline will undo all changes to history
        !           577:           lines before returning when `accept-line' is executed.  By
        !           578:           default, history lines may be modified and retain individual
        !           579:           undo lists across calls to `readline'.  The default is `off'.
        !           580: 
        !           581:     `show-all-if-ambiguous'
        !           582:           This alters the default behavior of the completion functions.
        !           583:           If set to `on', words which have more than one possible
        !           584:           completion cause the matches to be listed immediately instead
        !           585:           of ringing the bell.  The default value is `off'.
        !           586: 
        !           587:     `show-all-if-unmodified'
        !           588:           This alters the default behavior of the completion functions
        !           589:           in a fashion similar to SHOW-ALL-IF-AMBIGUOUS.  If set to
        !           590:           `on', words which have more than one possible completion
        !           591:           without any possible partial completion (the possible
        !           592:           completions don't share a common prefix) cause the matches to
        !           593:           be listed immediately instead of ringing the bell.  The
        !           594:           default value is `off'.
        !           595: 
        !           596:     `show-mode-in-prompt'
        !           597:           If set to `on', add a character to the beginning of the prompt
        !           598:           indicating the editing mode: emacs (`@'), vi command (`:'),
        !           599:           or vi insertion (`+').  The default value is `off'.
        !           600: 
        !           601:     `skip-completed-text'
        !           602:           If set to `on', this alters the default completion behavior
        !           603:           when inserting a single match into the line.  It's only
        !           604:           active when performing completion in the middle of a word.
        !           605:           If enabled, readline does not insert characters from the
        !           606:           completion that match characters after point in the word
        !           607:           being completed, so portions of the word following the cursor
        !           608:           are not duplicated.  For instance, if this is enabled,
        !           609:           attempting completion when the cursor is after the `e' in
        !           610:           `Makefile' will result in `Makefile' rather than
        !           611:           `Makefilefile', assuming there is a single possible
        !           612:           completion.  The default value is `off'.
        !           613: 
        !           614:     `visible-stats'
        !           615:           If set to `on', a character denoting a file's type is
        !           616:           appended to the filename when listing possible completions.
        !           617:           The default is `off'.
        !           618: 
        !           619: 
        !           620: Key Bindings
        !           621:      The syntax for controlling key bindings in the init file is
        !           622:      simple.  First you need to find the name of the command that you
        !           623:      want to change.  The following sections contain tables of the
        !           624:      command name, the default keybinding, if any, and a short
        !           625:      description of what the command does.
        !           626: 
        !           627:      Once you know the name of the command, simply place on a line in
        !           628:      the init file the name of the key you wish to bind the command to,
        !           629:      a colon, and then the name of the command.  There can be no space
        !           630:      between the key name and the colon - that will be interpreted as
        !           631:      part of the key name.  The name of the key can be expressed in
        !           632:      different ways, depending on what you find most comfortable.
        !           633: 
        !           634:      In addition to command names, readline allows keys to be bound to
        !           635:      a string that is inserted when the key is pressed (a MACRO).
        !           636: 
        !           637:     KEYNAME: FUNCTION-NAME or MACRO
        !           638:           KEYNAME is the name of a key spelled out in English.  For
        !           639:           example:
        !           640:                Control-u: universal-argument
        !           641:                Meta-Rubout: backward-kill-word
        !           642:                Control-o: "> output"
        !           643: 
        !           644:           In the above example, `C-u' is bound to the function
        !           645:           `universal-argument', `M-DEL' is bound to the function
        !           646:           `backward-kill-word', and `C-o' is bound to run the macro
        !           647:           expressed on the right hand side (that is, to insert the text
        !           648:           `> output' into the line).
        !           649: 
        !           650:           A number of symbolic character names are recognized while
        !           651:           processing this key binding syntax: DEL, ESC, ESCAPE, LFD,
        !           652:           NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.
        !           653: 
        !           654:     "KEYSEQ": FUNCTION-NAME or MACRO
        !           655:           KEYSEQ differs from KEYNAME above in that strings denoting an
        !           656:           entire key sequence can be specified, by placing the key
        !           657:           sequence in double quotes.  Some GNU Emacs style key escapes
        !           658:           can be used, as in the following example, but the special
        !           659:           character names are not recognized.
        !           660: 
        !           661:                "\C-u": universal-argument
        !           662:                "\C-x\C-r": re-read-init-file
        !           663:                "\e[11~": "Function Key 1"
        !           664: 
        !           665:           In the above example, `C-u' is again bound to the function
        !           666:           `universal-argument' (just as it was in the first example),
        !           667:           `C-x C-r' is bound to the function `re-read-init-file', and
        !           668:           `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function
        !           669:           Key 1'.
        !           670: 
        !           671: 
        !           672:      The following GNU Emacs style escape sequences are available when
        !           673:      specifying key sequences:
        !           674: 
        !           675:     `\C-'
        !           676:           control prefix
        !           677: 
        !           678:     `\M-'
        !           679:           meta prefix
        !           680: 
        !           681:     `\e'
        !           682:           an escape character
        !           683: 
        !           684:     `\\'
        !           685:           backslash
        !           686: 
        !           687:     `\"'
        !           688:           <">, a double quotation mark
        !           689: 
        !           690:     `\''
        !           691:           <'>, a single quote or apostrophe
        !           692: 
        !           693:      In addition to the GNU Emacs style escape sequences, a second set
        !           694:      of backslash escapes is available:
        !           695: 
        !           696:     `\a'
        !           697:           alert (bell)
        !           698: 
        !           699:     `\b'
        !           700:           backspace
        !           701: 
        !           702:     `\d'
        !           703:           delete
        !           704: 
        !           705:     `\f'
        !           706:           form feed
        !           707: 
        !           708:     `\n'
        !           709:           newline
        !           710: 
        !           711:     `\r'
        !           712:           carriage return
        !           713: 
        !           714:     `\t'
        !           715:           horizontal tab
        !           716: 
        !           717:     `\v'
        !           718:           vertical tab
        !           719: 
        !           720:     `\NNN'
        !           721:           the eight-bit character whose value is the octal value NNN
        !           722:           (one to three digits)
        !           723: 
        !           724:     `\xHH'
        !           725:           the eight-bit character whose value is the hexadecimal value
        !           726:           HH (one or two hex digits)
        !           727: 
        !           728:      When entering the text of a macro, single or double quotes must be
        !           729:      used to indicate a macro definition.  Unquoted text is assumed to
        !           730:      be a function name.  In the macro body, the backslash escapes
        !           731:      described above are expanded.  Backslash will quote any other
        !           732:      character in the macro text, including `"' and `''.  For example,
        !           733:      the following binding will make `C-x \' insert a single `\' into
        !           734:      the line:
        !           735:           "\C-x\\": "\\"
        !           736: 
        !           737: 
        !           738: 
        !           739: File: readline.info,  Node: Conditional Init Constructs,  Next: Sample Init File,  Prev: Readline Init File Syntax,  Up: Readline Init File
        !           740: 
        !           741: 1.3.2 Conditional Init Constructs
        !           742: ---------------------------------
        !           743: 
        !           744: Readline implements a facility similar in spirit to the conditional
        !           745: compilation features of the C preprocessor which allows key bindings
        !           746: and variable settings to be performed as the result of tests.  There
        !           747: are four parser directives used.
        !           748: 
        !           749: `$if'
        !           750:      The `$if' construct allows bindings to be made based on the
        !           751:      editing mode, the terminal being used, or the application using
        !           752:      Readline.  The text of the test extends to the end of the line; no
        !           753:      characters are required to isolate it.
        !           754: 
        !           755:     `mode'
        !           756:           The `mode=' form of the `$if' directive is used to test
        !           757:           whether Readline is in `emacs' or `vi' mode.  This may be
        !           758:           used in conjunction with the `set keymap' command, for
        !           759:           instance, to set bindings in the `emacs-standard' and
        !           760:           `emacs-ctlx' keymaps only if Readline is starting out in
        !           761:           `emacs' mode.
        !           762: 
        !           763:     `term'
        !           764:           The `term=' form may be used to include terminal-specific key
        !           765:           bindings, perhaps to bind the key sequences output by the
        !           766:           terminal's function keys.  The word on the right side of the
        !           767:           `=' is tested against both the full name of the terminal and
        !           768:           the portion of the terminal name before the first `-'.  This
        !           769:           allows `sun' to match both `sun' and `sun-cmd', for instance.
        !           770: 
        !           771:     `application'
        !           772:           The APPLICATION construct is used to include
        !           773:           application-specific settings.  Each program using the
        !           774:           Readline library sets the APPLICATION NAME, and you can test
        !           775:           for a particular value.  This could be used to bind key
        !           776:           sequences to functions useful for a specific program.  For
        !           777:           instance, the following command adds a key sequence that
        !           778:           quotes the current or previous word in Bash:
        !           779:                $if Bash
        !           780:                # Quote the current or previous word
        !           781:                "\C-xq": "\eb\"\ef\""
        !           782:                $endif
        !           783: 
        !           784: `$endif'
        !           785:      This command, as seen in the previous example, terminates an `$if'
        !           786:      command.
        !           787: 
        !           788: `$else'
        !           789:      Commands in this branch of the `$if' directive are executed if the
        !           790:      test fails.
        !           791: 
        !           792: `$include'
        !           793:      This directive takes a single filename as an argument and reads
        !           794:      commands and bindings from that file.  For example, the following
        !           795:      directive reads from `/etc/inputrc':
        !           796:           $include /etc/inputrc
        !           797: 
        !           798: 
        !           799: File: readline.info,  Node: Sample Init File,  Prev: Conditional Init Constructs,  Up: Readline Init File
        !           800: 
        !           801: 1.3.3 Sample Init File
        !           802: ----------------------
        !           803: 
        !           804: Here is an example of an INPUTRC file.  This illustrates key binding,
        !           805: variable assignment, and conditional syntax.
        !           806: 
        !           807: 
        !           808:      # This file controls the behaviour of line input editing for
        !           809:      # programs that use the GNU Readline library.  Existing
        !           810:      # programs include FTP, Bash, and GDB.
        !           811:      #
        !           812:      # You can re-read the inputrc file with C-x C-r.
        !           813:      # Lines beginning with '#' are comments.
        !           814:      #
        !           815:      # First, include any system-wide bindings and variable
        !           816:      # assignments from /etc/Inputrc
        !           817:      $include /etc/Inputrc
        !           818: 
        !           819:      #
        !           820:      # Set various bindings for emacs mode.
        !           821: 
        !           822:      set editing-mode emacs
        !           823: 
        !           824:      $if mode=emacs
        !           825: 
        !           826:      Meta-Control-h:   backward-kill-word      Text after the function name is ignored
        !           827: 
        !           828:      #
        !           829:      # Arrow keys in keypad mode
        !           830:      #
        !           831:      #"\M-OD":        backward-char
        !           832:      #"\M-OC":        forward-char
        !           833:      #"\M-OA":        previous-history
        !           834:      #"\M-OB":        next-history
        !           835:      #
        !           836:      # Arrow keys in ANSI mode
        !           837:      #
        !           838:      "\M-[D":        backward-char
        !           839:      "\M-[C":        forward-char
        !           840:      "\M-[A":        previous-history
        !           841:      "\M-[B":        next-history
        !           842:      #
        !           843:      # Arrow keys in 8 bit keypad mode
        !           844:      #
        !           845:      #"\M-\C-OD":       backward-char
        !           846:      #"\M-\C-OC":       forward-char
        !           847:      #"\M-\C-OA":       previous-history
        !           848:      #"\M-\C-OB":       next-history
        !           849:      #
        !           850:      # Arrow keys in 8 bit ANSI mode
        !           851:      #
        !           852:      #"\M-\C-[D":       backward-char
        !           853:      #"\M-\C-[C":       forward-char
        !           854:      #"\M-\C-[A":       previous-history
        !           855:      #"\M-\C-[B":       next-history
        !           856: 
        !           857:      C-q: quoted-insert
        !           858: 
        !           859:      $endif
        !           860: 
        !           861:      # An old-style binding.  This happens to be the default.
        !           862:      TAB: complete
        !           863: 
        !           864:      # Macros that are convenient for shell interaction
        !           865:      $if Bash
        !           866:      # edit the path
        !           867:      "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
        !           868:      # prepare to type a quoted word --
        !           869:      # insert open and close double quotes
        !           870:      # and move to just after the open quote
        !           871:      "\C-x\"": "\"\"\C-b"
        !           872:      # insert a backslash (testing backslash escapes
        !           873:      # in sequences and macros)
        !           874:      "\C-x\\": "\\"
        !           875:      # Quote the current or previous word
        !           876:      "\C-xq": "\eb\"\ef\""
        !           877:      # Add a binding to refresh the line, which is unbound
        !           878:      "\C-xr": redraw-current-line
        !           879:      # Edit variable on current line.
        !           880:      "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
        !           881:      $endif
        !           882: 
        !           883:      # use a visible bell if one is available
        !           884:      set bell-style visible
        !           885: 
        !           886:      # don't strip characters to 7 bits when reading
        !           887:      set input-meta on
        !           888: 
        !           889:      # allow iso-latin1 characters to be inserted rather
        !           890:      # than converted to prefix-meta sequences
        !           891:      set convert-meta off
        !           892: 
        !           893:      # display characters with the eighth bit set directly
        !           894:      # rather than as meta-prefixed characters
        !           895:      set output-meta on
        !           896: 
        !           897:      # if there are more than 150 possible completions for
        !           898:      # a word, ask the user if he wants to see all of them
        !           899:      set completion-query-items 150
        !           900: 
        !           901:      # For FTP
        !           902:      $if Ftp
        !           903:      "\C-xg": "get \M-?"
        !           904:      "\C-xt": "put \M-?"
        !           905:      "\M-.": yank-last-arg
        !           906:      $endif
        !           907: 
        !           908: 
        !           909: File: readline.info,  Node: Bindable Readline Commands,  Next: Readline vi Mode,  Prev: Readline Init File,  Up: Command Line Editing
        !           910: 
        !           911: 1.4 Bindable Readline Commands
        !           912: ==============================
        !           913: 
        !           914: * Menu:
        !           915: 
        !           916: * Commands For Moving::                Moving about the line.
        !           917: * Commands For History::       Getting at previous lines.
        !           918: * Commands For Text::          Commands for changing text.
        !           919: * Commands For Killing::       Commands for killing and yanking.
        !           920: * Numeric Arguments::          Specifying numeric arguments, repeat counts.
        !           921: * Commands For Completion::    Getting Readline to do the typing for you.
        !           922: * Keyboard Macros::            Saving and re-executing typed characters
        !           923: * Miscellaneous Commands::     Other miscellaneous commands.
        !           924: 
        !           925:    This section describes Readline commands that may be bound to key
        !           926: sequences.  Command names without an accompanying key sequence are
        !           927: unbound by default.
        !           928: 
        !           929:    In the following descriptions, "point" refers to the current cursor
        !           930: position, and "mark" refers to a cursor position saved by the
        !           931: `set-mark' command.  The text between the point and mark is referred to
        !           932: as the "region".
        !           933: 
        !           934: 
        !           935: File: readline.info,  Node: Commands For Moving,  Next: Commands For History,  Up: Bindable Readline Commands
        !           936: 
        !           937: 1.4.1 Commands For Moving
        !           938: -------------------------
        !           939: 
        !           940: `beginning-of-line (C-a)'
        !           941:      Move to the start of the current line.
        !           942: 
        !           943: `end-of-line (C-e)'
        !           944:      Move to the end of the line.
        !           945: 
        !           946: `forward-char (C-f)'
        !           947:      Move forward a character.
        !           948: 
        !           949: `backward-char (C-b)'
        !           950:      Move back a character.
        !           951: 
        !           952: `forward-word (M-f)'
        !           953:      Move forward to the end of the next word.  Words are composed of
        !           954:      letters and digits.
        !           955: 
        !           956: `backward-word (M-b)'
        !           957:      Move back to the start of the current or previous word.  Words are
        !           958:      composed of letters and digits.
        !           959: 
        !           960: `clear-screen (C-l)'
        !           961:      Clear the screen and redraw the current line, leaving the current
        !           962:      line at the top of the screen.
        !           963: 
        !           964: `redraw-current-line ()'
        !           965:      Refresh the current line.  By default, this is unbound.
        !           966: 
        !           967: 
        !           968: 
        !           969: File: readline.info,  Node: Commands For History,  Next: Commands For Text,  Prev: Commands For Moving,  Up: Bindable Readline Commands
        !           970: 
        !           971: 1.4.2 Commands For Manipulating The History
        !           972: -------------------------------------------
        !           973: 
        !           974: `accept-line (Newline or Return)'
        !           975:      Accept the line regardless of where the cursor is.  If this line is
        !           976:      non-empty, it may be added to the history list for future recall
        !           977:      with `add_history()'.  If this line is a modified history line,
        !           978:      the history line is restored to its original state.
        !           979: 
        !           980: `previous-history (C-p)'
        !           981:      Move `back' through the history list, fetching the previous
        !           982:      command.
        !           983: 
        !           984: `next-history (C-n)'
        !           985:      Move `forward' through the history list, fetching the next command.
        !           986: 
        !           987: `beginning-of-history (M-<)'
        !           988:      Move to the first line in the history.
        !           989: 
        !           990: `end-of-history (M->)'
        !           991:      Move to the end of the input history, i.e., the line currently
        !           992:      being entered.
        !           993: 
        !           994: `reverse-search-history (C-r)'
        !           995:      Search backward starting at the current line and moving `up'
        !           996:      through the history as necessary.  This is an incremental search.
        !           997: 
        !           998: `forward-search-history (C-s)'
        !           999:      Search forward starting at the current line and moving `down'
        !          1000:      through the the history as necessary.  This is an incremental
        !          1001:      search.
        !          1002: 
        !          1003: `non-incremental-reverse-search-history (M-p)'
        !          1004:      Search backward starting at the current line and moving `up'
        !          1005:      through the history as necessary using a non-incremental search
        !          1006:      for a string supplied by the user.
        !          1007: 
        !          1008: `non-incremental-forward-search-history (M-n)'
        !          1009:      Search forward starting at the current line and moving `down'
        !          1010:      through the the history as necessary using a non-incremental search
        !          1011:      for a string supplied by the user.
        !          1012: 
        !          1013: `history-search-forward ()'
        !          1014:      Search forward through the history for the string of characters
        !          1015:      between the start of the current line and the point.  The search
        !          1016:      string must match at the beginning of a history line.  This is a
        !          1017:      non-incremental search.  By default, this command is unbound.
        !          1018: 
        !          1019: `history-search-backward ()'
        !          1020:      Search backward through the history for the string of characters
        !          1021:      between the start of the current line and the point.  The search
        !          1022:      string must match at the beginning of a history line.  This is a
        !          1023:      non-incremental search.  By default, this command is unbound.
        !          1024: 
        !          1025: `history-substr-search-forward ()'
        !          1026:      Search forward through the history for the string of characters
        !          1027:      between the start of the current line and the point.  The search
        !          1028:      string may match anywhere in a history line.  This is a
        !          1029:      non-incremental search.  By default, this command is unbound.
        !          1030: 
        !          1031: `history-substr-search-backward ()'
        !          1032:      Search backward through the history for the string of characters
        !          1033:      between the start of the current line and the point.  The search
        !          1034:      string may match anywhere in a history line.  This is a
        !          1035:      non-incremental search.  By default, this command is unbound.
        !          1036: 
        !          1037: `yank-nth-arg (M-C-y)'
        !          1038:      Insert the first argument to the previous command (usually the
        !          1039:      second word on the previous line) at point.  With an argument N,
        !          1040:      insert the Nth word from the previous command (the words in the
        !          1041:      previous command begin with word 0).  A negative argument inserts
        !          1042:      the Nth word from the end of the previous command.  Once the
        !          1043:      argument N is computed, the argument is extracted as if the `!N'
        !          1044:      history expansion had been specified.
        !          1045: 
        !          1046: `yank-last-arg (M-. or M-_)'
        !          1047:      Insert last argument to the previous command (the last word of the
        !          1048:      previous history entry).  With a numeric argument, behave exactly
        !          1049:      like `yank-nth-arg'.  Successive calls to `yank-last-arg' move
        !          1050:      back through the history list, inserting the last word (or the
        !          1051:      word specified by the argument to the first call) of each line in
        !          1052:      turn.  Any numeric argument supplied to these successive calls
        !          1053:      determines the direction to move through the history.  A negative
        !          1054:      argument switches the direction through the history (back or
        !          1055:      forward).  The history expansion facilities are used to extract
        !          1056:      the last argument, as if the `!$' history expansion had been
        !          1057:      specified.
        !          1058: 
        !          1059: 
        !          1060: 
        !          1061: File: readline.info,  Node: Commands For Text,  Next: Commands For Killing,  Prev: Commands For History,  Up: Bindable Readline Commands
        !          1062: 
        !          1063: 1.4.3 Commands For Changing Text
        !          1064: --------------------------------
        !          1065: 
        !          1066: `end-of-file (usually C-d)'
        !          1067:      The character indicating end-of-file as set, for example, by
        !          1068:      `stty'.  If this character is read when there are no characters on
        !          1069:      the line, and point is at the beginning of the line, Readline
        !          1070:      interprets it as the end of input and returns EOF.
        !          1071: 
        !          1072: `delete-char (C-d)'
        !          1073:      Delete the character at point.  If this function is bound to the
        !          1074:      same character as the tty EOF character, as `C-d' commonly is, see
        !          1075:      above for the effects.
        !          1076: 
        !          1077: `backward-delete-char (Rubout)'
        !          1078:      Delete the character behind the cursor.  A numeric argument means
        !          1079:      to kill the characters instead of deleting them.
        !          1080: 
        !          1081: `forward-backward-delete-char ()'
        !          1082:      Delete the character under the cursor, unless the cursor is at the
        !          1083:      end of the line, in which case the character behind the cursor is
        !          1084:      deleted.  By default, this is not bound to a key.
        !          1085: 
        !          1086: `quoted-insert (C-q or C-v)'
        !          1087:      Add the next character typed to the line verbatim.  This is how to
        !          1088:      insert key sequences like `C-q', for example.
        !          1089: 
        !          1090: `tab-insert (M-<TAB>)'
        !          1091:      Insert a tab character.
        !          1092: 
        !          1093: `self-insert (a, b, A, 1, !, ...)'
        !          1094:      Insert yourself.
        !          1095: 
        !          1096: `transpose-chars (C-t)'
        !          1097:      Drag the character before the cursor forward over the character at
        !          1098:      the cursor, moving the cursor forward as well.  If the insertion
        !          1099:      point is at the end of the line, then this transposes the last two
        !          1100:      characters of the line.  Negative arguments have no effect.
        !          1101: 
        !          1102: `transpose-words (M-t)'
        !          1103:      Drag the word before point past the word after point, moving point
        !          1104:      past that word as well.  If the insertion point is at the end of
        !          1105:      the line, this transposes the last two words on the line.
        !          1106: 
        !          1107: `upcase-word (M-u)'
        !          1108:      Uppercase the current (or following) word.  With a negative
        !          1109:      argument, uppercase the previous word, but do not move the cursor.
        !          1110: 
        !          1111: `downcase-word (M-l)'
        !          1112:      Lowercase the current (or following) word.  With a negative
        !          1113:      argument, lowercase the previous word, but do not move the cursor.
        !          1114: 
        !          1115: `capitalize-word (M-c)'
        !          1116:      Capitalize the current (or following) word.  With a negative
        !          1117:      argument, capitalize the previous word, but do not move the cursor.
        !          1118: 
        !          1119: `overwrite-mode ()'
        !          1120:      Toggle overwrite mode.  With an explicit positive numeric argument,
        !          1121:      switches to overwrite mode.  With an explicit non-positive numeric
        !          1122:      argument, switches to insert mode.  This command affects only
        !          1123:      `emacs' mode; `vi' mode does overwrite differently.  Each call to
        !          1124:      `readline()' starts in insert mode.
        !          1125: 
        !          1126:      In overwrite mode, characters bound to `self-insert' replace the
        !          1127:      text at point rather than pushing the text to the right.
        !          1128:      Characters bound to `backward-delete-char' replace the character
        !          1129:      before point with a space.
        !          1130: 
        !          1131:      By default, this command is unbound.
        !          1132: 
        !          1133: 
        !          1134: 
        !          1135: File: readline.info,  Node: Commands For Killing,  Next: Numeric Arguments,  Prev: Commands For Text,  Up: Bindable Readline Commands
        !          1136: 
        !          1137: 1.4.4 Killing And Yanking
        !          1138: -------------------------
        !          1139: 
        !          1140: `kill-line (C-k)'
        !          1141:      Kill the text from point to the end of the line.
        !          1142: 
        !          1143: `backward-kill-line (C-x Rubout)'
        !          1144:      Kill backward to the beginning of the line.
        !          1145: 
        !          1146: `unix-line-discard (C-u)'
        !          1147:      Kill backward from the cursor to the beginning of the current line.
        !          1148: 
        !          1149: `kill-whole-line ()'
        !          1150:      Kill all characters on the current line, no matter where point is.
        !          1151:      By default, this is unbound.
        !          1152: 
        !          1153: `kill-word (M-d)'
        !          1154:      Kill from point to the end of the current word, or if between
        !          1155:      words, to the end of the next word.  Word boundaries are the same
        !          1156:      as `forward-word'.
        !          1157: 
        !          1158: `backward-kill-word (M-<DEL>)'
        !          1159:      Kill the word behind point.  Word boundaries are the same as
        !          1160:      `backward-word'.
        !          1161: 
        !          1162: `unix-word-rubout (C-w)'
        !          1163:      Kill the word behind point, using white space as a word boundary.
        !          1164:      The killed text is saved on the kill-ring.
        !          1165: 
        !          1166: `unix-filename-rubout ()'
        !          1167:      Kill the word behind point, using white space and the slash
        !          1168:      character as the word boundaries.  The killed text is saved on the
        !          1169:      kill-ring.
        !          1170: 
        !          1171: `delete-horizontal-space ()'
        !          1172:      Delete all spaces and tabs around point.  By default, this is
        !          1173:      unbound.
        !          1174: 
        !          1175: `kill-region ()'
        !          1176:      Kill the text in the current region.  By default, this command is
        !          1177:      unbound.
        !          1178: 
        !          1179: `copy-region-as-kill ()'
        !          1180:      Copy the text in the region to the kill buffer, so it can be yanked
        !          1181:      right away.  By default, this command is unbound.
        !          1182: 
        !          1183: `copy-backward-word ()'
        !          1184:      Copy the word before point to the kill buffer.  The word
        !          1185:      boundaries are the same as `backward-word'.  By default, this
        !          1186:      command is unbound.
        !          1187: 
        !          1188: `copy-forward-word ()'
        !          1189:      Copy the word following point to the kill buffer.  The word
        !          1190:      boundaries are the same as `forward-word'.  By default, this
        !          1191:      command is unbound.
        !          1192: 
        !          1193: `yank (C-y)'
        !          1194:      Yank the top of the kill ring into the buffer at point.
        !          1195: 
        !          1196: `yank-pop (M-y)'
        !          1197:      Rotate the kill-ring, and yank the new top.  You can only do this
        !          1198:      if the prior command is `yank' or `yank-pop'.
        !          1199: 
        !          1200: 
        !          1201: File: readline.info,  Node: Numeric Arguments,  Next: Commands For Completion,  Prev: Commands For Killing,  Up: Bindable Readline Commands
        !          1202: 
        !          1203: 1.4.5 Specifying Numeric Arguments
        !          1204: ----------------------------------
        !          1205: 
        !          1206: `digit-argument (M-0, M-1, ... M--)'
        !          1207:      Add this digit to the argument already accumulating, or start a new
        !          1208:      argument.  `M--' starts a negative argument.
        !          1209: 
        !          1210: `universal-argument ()'
        !          1211:      This is another way to specify an argument.  If this command is
        !          1212:      followed by one or more digits, optionally with a leading minus
        !          1213:      sign, those digits define the argument.  If the command is
        !          1214:      followed by digits, executing `universal-argument' again ends the
        !          1215:      numeric argument, but is otherwise ignored.  As a special case, if
        !          1216:      this command is immediately followed by a character that is
        !          1217:      neither a digit or minus sign, the argument count for the next
        !          1218:      command is multiplied by four.  The argument count is initially
        !          1219:      one, so executing this function the first time makes the argument
        !          1220:      count four, a second time makes the argument count sixteen, and so
        !          1221:      on.  By default, this is not bound to a key.
        !          1222: 
        !          1223: 
        !          1224: File: readline.info,  Node: Commands For Completion,  Next: Keyboard Macros,  Prev: Numeric Arguments,  Up: Bindable Readline Commands
        !          1225: 
        !          1226: 1.4.6 Letting Readline Type For You
        !          1227: -----------------------------------
        !          1228: 
        !          1229: `complete (<TAB>)'
        !          1230:      Attempt to perform completion on the text before point.  The
        !          1231:      actual completion performed is application-specific.  The default
        !          1232:      is filename completion.
        !          1233: 
        !          1234: `possible-completions (M-?)'
        !          1235:      List the possible completions of the text before point.  When
        !          1236:      displaying completions, Readline sets the number of columns used
        !          1237:      for display to the value of `completion-display-width', the value
        !          1238:      of the environment variable `COLUMNS', or the screen width, in
        !          1239:      that order.
        !          1240: 
        !          1241: `insert-completions (M-*)'
        !          1242:      Insert all completions of the text before point that would have
        !          1243:      been generated by `possible-completions'.
        !          1244: 
        !          1245: `menu-complete ()'
        !          1246:      Similar to `complete', but replaces the word to be completed with
        !          1247:      a single match from the list of possible completions.  Repeated
        !          1248:      execution of `menu-complete' steps through the list of possible
        !          1249:      completions, inserting each match in turn.  At the end of the list
        !          1250:      of completions, the bell is rung (subject to the setting of
        !          1251:      `bell-style') and the original text is restored.  An argument of N
        !          1252:      moves N positions forward in the list of matches; a negative
        !          1253:      argument may be used to move backward through the list.  This
        !          1254:      command is intended to be bound to <TAB>, but is unbound by
        !          1255:      default.
        !          1256: 
        !          1257: `menu-complete-backward ()'
        !          1258:      Identical to `menu-complete', but moves backward through the list
        !          1259:      of possible completions, as if `menu-complete' had been given a
        !          1260:      negative argument.
        !          1261: 
        !          1262: `delete-char-or-list ()'
        !          1263:      Deletes the character under the cursor if not at the beginning or
        !          1264:      end of the line (like `delete-char').  If at the end of the line,
        !          1265:      behaves identically to `possible-completions'.  This command is
        !          1266:      unbound by default.
        !          1267: 
        !          1268: 
        !          1269: 
        !          1270: File: readline.info,  Node: Keyboard Macros,  Next: Miscellaneous Commands,  Prev: Commands For Completion,  Up: Bindable Readline Commands
        !          1271: 
        !          1272: 1.4.7 Keyboard Macros
        !          1273: ---------------------
        !          1274: 
        !          1275: `start-kbd-macro (C-x ()'
        !          1276:      Begin saving the characters typed into the current keyboard macro.
        !          1277: 
        !          1278: `end-kbd-macro (C-x ))'
        !          1279:      Stop saving the characters typed into the current keyboard macro
        !          1280:      and save the definition.
        !          1281: 
        !          1282: `call-last-kbd-macro (C-x e)'
        !          1283:      Re-execute the last keyboard macro defined, by making the
        !          1284:      characters in the macro appear as if typed at the keyboard.
        !          1285: 
        !          1286: `print-last-kbd-macro ()'
        !          1287:      Print the last keboard macro defined in a format suitable for the
        !          1288:      INPUTRC file.
        !          1289: 
        !          1290: 
        !          1291: 
        !          1292: File: readline.info,  Node: Miscellaneous Commands,  Prev: Keyboard Macros,  Up: Bindable Readline Commands
        !          1293: 
        !          1294: 1.4.8 Some Miscellaneous Commands
        !          1295: ---------------------------------
        !          1296: 
        !          1297: `re-read-init-file (C-x C-r)'
        !          1298:      Read in the contents of the INPUTRC file, and incorporate any
        !          1299:      bindings or variable assignments found there.
        !          1300: 
        !          1301: `abort (C-g)'
        !          1302:      Abort the current editing command and ring the terminal's bell
        !          1303:      (subject to the setting of `bell-style').
        !          1304: 
        !          1305: `do-uppercase-version (M-a, M-b, M-X, ...)'
        !          1306:      If the metafied character X is lowercase, run the command that is
        !          1307:      bound to the corresponding uppercase character.
        !          1308: 
        !          1309: `prefix-meta (<ESC>)'
        !          1310:      Metafy the next character typed.  This is for keyboards without a
        !          1311:      meta key.  Typing `<ESC> f' is equivalent to typing `M-f'.
        !          1312: 
        !          1313: `undo (C-_ or C-x C-u)'
        !          1314:      Incremental undo, separately remembered for each line.
        !          1315: 
        !          1316: `revert-line (M-r)'
        !          1317:      Undo all changes made to this line.  This is like executing the
        !          1318:      `undo' command enough times to get back to the beginning.
        !          1319: 
        !          1320: `tilde-expand (M-~)'
        !          1321:      Perform tilde expansion on the current word.
        !          1322: 
        !          1323: `set-mark (C-@)'
        !          1324:      Set the mark to the point.  If a numeric argument is supplied, the
        !          1325:      mark is set to that position.
        !          1326: 
        !          1327: `exchange-point-and-mark (C-x C-x)'
        !          1328:      Swap the point with the mark.  The current cursor position is set
        !          1329:      to the saved position, and the old cursor position is saved as the
        !          1330:      mark.
        !          1331: 
        !          1332: `character-search (C-])'
        !          1333:      A character is read and point is moved to the next occurrence of
        !          1334:      that character.  A negative count searches for previous
        !          1335:      occurrences.
        !          1336: 
        !          1337: `character-search-backward (M-C-])'
        !          1338:      A character is read and point is moved to the previous occurrence
        !          1339:      of that character.  A negative count searches for subsequent
        !          1340:      occurrences.
        !          1341: 
        !          1342: `skip-csi-sequence ()'
        !          1343:      Read enough characters to consume a multi-key sequence such as
        !          1344:      those defined for keys like Home and End.  Such sequences begin
        !          1345:      with a Control Sequence Indicator (CSI), usually ESC-[.  If this
        !          1346:      sequence is bound to "\e[", keys producing such sequences will
        !          1347:      have no effect unless explicitly bound to a readline command,
        !          1348:      instead of inserting stray characters into the editing buffer.
        !          1349:      This is unbound by default, but usually bound to ESC-[.
        !          1350: 
        !          1351: `insert-comment (M-#)'
        !          1352:      Without a numeric argument, the value of the `comment-begin'
        !          1353:      variable is inserted at the beginning of the current line.  If a
        !          1354:      numeric argument is supplied, this command acts as a toggle:  if
        !          1355:      the characters at the beginning of the line do not match the value
        !          1356:      of `comment-begin', the value is inserted, otherwise the
        !          1357:      characters in `comment-begin' are deleted from the beginning of
        !          1358:      the line.  In either case, the line is accepted as if a newline
        !          1359:      had been typed.
        !          1360: 
        !          1361: `dump-functions ()'
        !          1362:      Print all of the functions and their key bindings to the Readline
        !          1363:      output stream.  If a numeric argument is supplied, the output is
        !          1364:      formatted in such a way that it can be made part of an INPUTRC
        !          1365:      file.  This command is unbound by default.
        !          1366: 
        !          1367: `dump-variables ()'
        !          1368:      Print all of the settable variables and their values to the
        !          1369:      Readline output stream.  If a numeric argument is supplied, the
        !          1370:      output is formatted in such a way that it can be made part of an
        !          1371:      INPUTRC file.  This command is unbound by default.
        !          1372: 
        !          1373: `dump-macros ()'
        !          1374:      Print all of the Readline key sequences bound to macros and the
        !          1375:      strings they output.  If a numeric argument is supplied, the
        !          1376:      output is formatted in such a way that it can be made part of an
        !          1377:      INPUTRC file.  This command is unbound by default.
        !          1378: 
        !          1379: `emacs-editing-mode (C-e)'
        !          1380:      When in `vi' command mode, this causes a switch to `emacs' editing
        !          1381:      mode.
        !          1382: 
        !          1383: `vi-editing-mode (M-C-j)'
        !          1384:      When in `emacs' editing mode, this causes a switch to `vi' editing
        !          1385:      mode.
        !          1386: 
        !          1387: 
        !          1388: 
        !          1389: File: readline.info,  Node: Readline vi Mode,  Prev: Bindable Readline Commands,  Up: Command Line Editing
        !          1390: 
        !          1391: 1.5 Readline vi Mode
        !          1392: ====================
        !          1393: 
        !          1394: While the Readline library does not have a full set of `vi' editing
        !          1395: functions, it does contain enough to allow simple editing of the line.
        !          1396: The Readline `vi' mode behaves as specified in the POSIX standard.
        !          1397: 
        !          1398:    In order to switch interactively between `emacs' and `vi' editing
        !          1399: modes, use the command `M-C-j' (bound to emacs-editing-mode when in
        !          1400: `vi' mode and to vi-editing-mode in `emacs' mode).  The Readline
        !          1401: default is `emacs' mode.
        !          1402: 
        !          1403:    When you enter a line in `vi' mode, you are already placed in
        !          1404: `insertion' mode, as if you had typed an `i'.  Pressing <ESC> switches
        !          1405: you into `command' mode, where you can edit the text of the line with
        !          1406: the standard `vi' movement keys, move to previous history lines with
        !          1407: `k' and subsequent lines with `j', and so forth.
        !          1408: 
        !          1409:    This document describes the GNU Readline Library, a utility for
        !          1410: aiding in the consistency of user interface across discrete programs
        !          1411: that need to provide a command line interface.
        !          1412: 
        !          1413:    Copyright (C) 1988-2014 Free Software Foundation, Inc.
        !          1414: 
        !          1415:    Permission is granted to make and distribute verbatim copies of this
        !          1416: manual provided the copyright notice and this permission notice pare
        !          1417: preserved on all copies.
        !          1418: 
        !          1419:    Permission is granted to copy and distribute modified versions of
        !          1420: this manual under the conditions for verbatim copying, provided that
        !          1421: the entire resulting derived work is distributed under the terms of a
        !          1422: permission notice identical to this one.
        !          1423: 
        !          1424:    Permission is granted to copy and distribute translations of this
        !          1425: manual into another language, under the above conditions for modified
        !          1426: versions, except that this permission notice may be stated in a
        !          1427: translation approved by the Foundation.
        !          1428: 
        !          1429: 
        !          1430: File: readline.info,  Node: Programming with GNU Readline,  Next: GNU Free Documentation License,  Prev: Command Line Editing,  Up: Top
        !          1431: 
        !          1432: 2 Programming with GNU Readline
        !          1433: *******************************
        !          1434: 
        !          1435: This chapter describes the interface between the GNU Readline Library
        !          1436: and other programs.  If you are a programmer, and you wish to include
        !          1437: the features found in GNU Readline such as completion, line editing,
        !          1438: and interactive history manipulation in your own programs, this section
        !          1439: is for you.
        !          1440: 
        !          1441: * Menu:
        !          1442: 
        !          1443: * Basic Behavior::     Using the default behavior of Readline.
        !          1444: * Custom Functions::   Adding your own functions to Readline.
        !          1445: * Readline Variables::                 Variables accessible to custom
        !          1446:                                        functions.
        !          1447: * Readline Convenience Functions::     Functions which Readline supplies to
        !          1448:                                        aid in writing your own custom
        !          1449:                                        functions.
        !          1450: * Readline Signal Handling::   How Readline behaves when it receives signals.
        !          1451: * Custom Completers::  Supplanting or supplementing Readline's
        !          1452:                        completion functions.
        !          1453: 
        !          1454: 
        !          1455: File: readline.info,  Node: Basic Behavior,  Next: Custom Functions,  Up: Programming with GNU Readline
        !          1456: 
        !          1457: 2.1 Basic Behavior
        !          1458: ==================
        !          1459: 
        !          1460: Many programs provide a command line interface, such as `mail', `ftp',
        !          1461: and `sh'.  For such programs, the default behaviour of Readline is
        !          1462: sufficient.  This section describes how to use Readline in the simplest
        !          1463: way possible, perhaps to replace calls in your code to `gets()' or
        !          1464: `fgets()'.
        !          1465: 
        !          1466:    The function `readline()' prints a prompt PROMPT and then reads and
        !          1467: returns a single line of text from the user.  If PROMPT is `NULL' or
        !          1468: the empty string, no prompt is displayed.  The line `readline' returns
        !          1469: is allocated with `malloc()'; the caller should `free()' the line when
        !          1470: it has finished with it.  The declaration for `readline' in ANSI C is
        !          1471: 
        !          1472:      `char *readline (const char *PROMPT);'
        !          1473: 
        !          1474: So, one might say
        !          1475:      `char *line = readline ("Enter a line: ");'
        !          1476:    in order to read a line of text from the user.  The line returned
        !          1477: has the final newline removed, so only the text remains.
        !          1478: 
        !          1479:    If `readline' encounters an `EOF' while reading the line, and the
        !          1480: line is empty at that point, then `(char *)NULL' is returned.
        !          1481: Otherwise, the line is ended just as if a newline had been typed.
        !          1482: 
        !          1483:    If you want the user to be able to get at the line later, (with
        !          1484: <C-p> for example), you must call `add_history()' to save the line away
        !          1485: in a "history" list of such lines.
        !          1486: 
        !          1487:      `add_history (line)';
        !          1488: 
        !          1489: For full details on the GNU History Library, see the associated manual.
        !          1490: 
        !          1491:    It is preferable to avoid saving empty lines on the history list,
        !          1492: since users rarely have a burning need to reuse a blank line.  Here is
        !          1493: a function which usefully replaces the standard `gets()' library
        !          1494: function, and has the advantage of no static buffer to overflow:
        !          1495: 
        !          1496:      /* A static variable for holding the line. */
        !          1497:      static char *line_read = (char *)NULL;
        !          1498: 
        !          1499:      /* Read a string, and return a pointer to it.
        !          1500:         Returns NULL on EOF. */
        !          1501:      char *
        !          1502:      rl_gets ()
        !          1503:      {
        !          1504:        /* If the buffer has already been allocated,
        !          1505:           return the memory to the free pool. */
        !          1506:        if (line_read)
        !          1507:          {
        !          1508:            free (line_read);
        !          1509:            line_read = (char *)NULL;
        !          1510:          }
        !          1511: 
        !          1512:        /* Get a line from the user. */
        !          1513:        line_read = readline ("");
        !          1514: 
        !          1515:        /* If the line has any text in it,
        !          1516:           save it on the history. */
        !          1517:        if (line_read && *line_read)
        !          1518:          add_history (line_read);
        !          1519: 
        !          1520:        return (line_read);
        !          1521:      }
        !          1522: 
        !          1523:    This function gives the user the default behaviour of <TAB>
        !          1524: completion: completion on file names.  If you do not want Readline to
        !          1525: complete on filenames, you can change the binding of the <TAB> key with
        !          1526: `rl_bind_key()'.
        !          1527: 
        !          1528:      `int rl_bind_key (int KEY, rl_command_func_t *FUNCTION);'
        !          1529: 
        !          1530:    `rl_bind_key()' takes two arguments: KEY is the character that you
        !          1531: want to bind, and FUNCTION is the address of the function to call when
        !          1532: KEY is pressed.  Binding <TAB> to `rl_insert()' makes <TAB> insert
        !          1533: itself.  `rl_bind_key()' returns non-zero if KEY is not a valid ASCII
        !          1534: character code (between 0 and 255).
        !          1535: 
        !          1536:    Thus, to disable the default <TAB> behavior, the following suffices:
        !          1537:      `rl_bind_key ('\t', rl_insert);'
        !          1538: 
        !          1539:    This code should be executed once at the start of your program; you
        !          1540: might write a function called `initialize_readline()' which performs
        !          1541: this and other desired initializations, such as installing custom
        !          1542: completers (*note Custom Completers::).
        !          1543: 
        !          1544: 
        !          1545: File: readline.info,  Node: Custom Functions,  Next: Readline Variables,  Prev: Basic Behavior,  Up: Programming with GNU Readline
        !          1546: 
        !          1547: 2.2 Custom Functions
        !          1548: ====================
        !          1549: 
        !          1550: Readline provides many functions for manipulating the text of the line,
        !          1551: but it isn't possible to anticipate the needs of all programs.  This
        !          1552: section describes the various functions and variables defined within
        !          1553: the Readline library which allow a user program to add customized
        !          1554: functionality to Readline.
        !          1555: 
        !          1556:    Before declaring any functions that customize Readline's behavior, or
        !          1557: using any functionality Readline provides in other code, an application
        !          1558: writer should include the file `<readline/readline.h>' in any file that
        !          1559: uses Readline's features.  Since some of the definitions in
        !          1560: `readline.h' use the `stdio' library, the file `<stdio.h>' should be
        !          1561: included before `readline.h'.
        !          1562: 
        !          1563:    `readline.h' defines a C preprocessor variable that should be
        !          1564: treated as an integer, `RL_READLINE_VERSION', which may be used to
        !          1565: conditionally compile application code depending on the installed
        !          1566: Readline version.  The value is a hexadecimal encoding of the major and
        !          1567: minor version numbers of the library, of the form 0xMMMM.  MM is the
        !          1568: two-digit major version number; MM is the two-digit minor version
        !          1569: number.  For Readline 4.2, for example, the value of
        !          1570: `RL_READLINE_VERSION' would be `0x0402'.
        !          1571: 
        !          1572: * Menu:
        !          1573: 
        !          1574: * Readline Typedefs::  C declarations to make code readable.
        !          1575: * Function Writing::   Variables and calling conventions.
        !          1576: 
        !          1577: 
        !          1578: File: readline.info,  Node: Readline Typedefs,  Next: Function Writing,  Up: Custom Functions
        !          1579: 
        !          1580: 2.2.1 Readline Typedefs
        !          1581: -----------------------
        !          1582: 
        !          1583: For readability, we declare a number of new object types, all pointers
        !          1584: to functions.
        !          1585: 
        !          1586:    The reason for declaring these new types is to make it easier to
        !          1587: write code describing pointers to C functions with appropriately
        !          1588: prototyped arguments and return values.
        !          1589: 
        !          1590:    For instance, say we want to declare a variable FUNC as a pointer to
        !          1591: a function which takes two `int' arguments and returns an `int' (this
        !          1592: is the type of all of the Readline bindable functions).  Instead of the
        !          1593: classic C declaration
        !          1594: 
        !          1595:    `int (*func)();'
        !          1596: 
        !          1597: or the ANSI-C style declaration
        !          1598: 
        !          1599:    `int (*func)(int, int);'
        !          1600: 
        !          1601: we may write
        !          1602: 
        !          1603:    `rl_command_func_t *func;'
        !          1604: 
        !          1605:    The full list of function pointer types available is
        !          1606: 
        !          1607: `typedef int rl_command_func_t (int, int);'
        !          1608: 
        !          1609: `typedef char *rl_compentry_func_t (const char *, int);'
        !          1610: 
        !          1611: `typedef char **rl_completion_func_t (const char *, int, int);'
        !          1612: 
        !          1613: `typedef char *rl_quote_func_t (char *, int, char *);'
        !          1614: 
        !          1615: `typedef char *rl_dequote_func_t (char *, int);'
        !          1616: 
        !          1617: `typedef int rl_compignore_func_t (char **);'
        !          1618: 
        !          1619: `typedef void rl_compdisp_func_t (char **, int, int);'
        !          1620: 
        !          1621: `typedef int rl_hook_func_t (void);'
        !          1622: 
        !          1623: `typedef int rl_getc_func_t (FILE *);'
        !          1624: 
        !          1625: `typedef int rl_linebuf_func_t (char *, int);'
        !          1626: 
        !          1627: `typedef int rl_intfunc_t (int);'
        !          1628: 
        !          1629: `#define rl_ivoidfunc_t rl_hook_func_t'
        !          1630: 
        !          1631: `typedef int rl_icpfunc_t (char *);'
        !          1632: 
        !          1633: `typedef int rl_icppfunc_t (char **);'
        !          1634: 
        !          1635: `typedef void rl_voidfunc_t (void);'
        !          1636: 
        !          1637: `typedef void rl_vintfunc_t (int);'
        !          1638: 
        !          1639: `typedef void rl_vcpfunc_t (char *);'
        !          1640: 
        !          1641: `typedef void rl_vcppfunc_t (char **);'
        !          1642: 
        !          1643: 
        !          1644: File: readline.info,  Node: Function Writing,  Prev: Readline Typedefs,  Up: Custom Functions
        !          1645: 
        !          1646: 2.2.2 Writing a New Function
        !          1647: ----------------------------
        !          1648: 
        !          1649: In order to write new functions for Readline, you need to know the
        !          1650: calling conventions for keyboard-invoked functions, and the names of the
        !          1651: variables that describe the current state of the line read so far.
        !          1652: 
        !          1653:    The calling sequence for a command `foo' looks like
        !          1654: 
        !          1655:      `int foo (int count, int key)'
        !          1656: 
        !          1657: where COUNT is the numeric argument (or 1 if defaulted) and KEY is the
        !          1658: key that invoked this function.
        !          1659: 
        !          1660:    It is completely up to the function as to what should be done with
        !          1661: the numeric argument.  Some functions use it as a repeat count, some as
        !          1662: a flag, and others to choose alternate behavior (refreshing the current
        !          1663: line as opposed to refreshing the screen, for example).  Some choose to
        !          1664: ignore it.  In general, if a function uses the numeric argument as a
        !          1665: repeat count, it should be able to do something useful with both
        !          1666: negative and positive arguments.  At the very least, it should be aware
        !          1667: that it can be passed a negative argument.
        !          1668: 
        !          1669:    A command function should return 0 if its action completes
        !          1670: successfully, and a non-zero value if some error occurs.  This is the
        !          1671: convention obeyed by all of the builtin Readline bindable command
        !          1672: functions.
        !          1673: 
        !          1674: 
        !          1675: File: readline.info,  Node: Readline Variables,  Next: Readline Convenience Functions,  Prev: Custom Functions,  Up: Programming with GNU Readline
        !          1676: 
        !          1677: 2.3 Readline Variables
        !          1678: ======================
        !          1679: 
        !          1680: These variables are available to function writers.
        !          1681: 
        !          1682:  -- Variable: char * rl_line_buffer
        !          1683:      This is the line gathered so far.  You are welcome to modify the
        !          1684:      contents of the line, but see *note Allowing Undoing::.  The
        !          1685:      function `rl_extend_line_buffer' is available to increase the
        !          1686:      memory allocated to `rl_line_buffer'.
        !          1687: 
        !          1688:  -- Variable: int rl_point
        !          1689:      The offset of the current cursor position in `rl_line_buffer' (the
        !          1690:      _point_).
        !          1691: 
        !          1692:  -- Variable: int rl_end
        !          1693:      The number of characters present in `rl_line_buffer'.  When
        !          1694:      `rl_point' is at the end of the line, `rl_point' and `rl_end' are
        !          1695:      equal.
        !          1696: 
        !          1697:  -- Variable: int rl_mark
        !          1698:      The MARK (saved position) in the current line.  If set, the mark
        !          1699:      and point define a _region_.
        !          1700: 
        !          1701:  -- Variable: int rl_done
        !          1702:      Setting this to a non-zero value causes Readline to return the
        !          1703:      current line immediately.
        !          1704: 
        !          1705:  -- Variable: int rl_num_chars_to_read
        !          1706:      Setting this to a positive value before calling `readline()' causes
        !          1707:      Readline to return after accepting that many characters, rather
        !          1708:      than reading up to a character bound to `accept-line'.
        !          1709: 
        !          1710:  -- Variable: int rl_pending_input
        !          1711:      Setting this to a value makes it the next keystroke read.  This is
        !          1712:      a way to stuff a single character into the input stream.
        !          1713: 
        !          1714:  -- Variable: int rl_dispatching
        !          1715:      Set to a non-zero value if a function is being called from a key
        !          1716:      binding; zero otherwise.  Application functions can test this to
        !          1717:      discover whether they were called directly or by Readline's
        !          1718:      dispatching mechanism.
        !          1719: 
        !          1720:  -- Variable: int rl_erase_empty_line
        !          1721:      Setting this to a non-zero value causes Readline to completely
        !          1722:      erase the current line, including any prompt, any time a newline
        !          1723:      is typed as the only character on an otherwise-empty line.  The
        !          1724:      cursor is moved to the beginning of the newly-blank line.
        !          1725: 
        !          1726:  -- Variable: char * rl_prompt
        !          1727:      The prompt Readline uses.  This is set from the argument to
        !          1728:      `readline()', and should not be assigned to directly.  The
        !          1729:      `rl_set_prompt()' function (*note Redisplay::) may be used to
        !          1730:      modify the prompt string after calling `readline()'.
        !          1731: 
        !          1732:  -- Variable: char * rl_display_prompt
        !          1733:      The string displayed as the prompt.  This is usually identical to
        !          1734:      RL_PROMPT, but may be changed temporarily by functions that use
        !          1735:      the prompt string as a message area, such as incremental search.
        !          1736: 
        !          1737:  -- Variable: int rl_already_prompted
        !          1738:      If an application wishes to display the prompt itself, rather than
        !          1739:      have Readline do it the first time `readline()' is called, it
        !          1740:      should set this variable to a non-zero value after displaying the
        !          1741:      prompt.  The prompt must also be passed as the argument to
        !          1742:      `readline()' so the redisplay functions can update the display
        !          1743:      properly.  The calling application is responsible for managing the
        !          1744:      value; Readline never sets it.
        !          1745: 
        !          1746:  -- Variable: const char * rl_library_version
        !          1747:      The version number of this revision of the library.
        !          1748: 
        !          1749:  -- Variable: int rl_readline_version
        !          1750:      An integer encoding the current version of the library.  The
        !          1751:      encoding is of the form 0xMMMM, where MM is the two-digit major
        !          1752:      version number, and MM is the two-digit minor version number.  For
        !          1753:      example, for Readline-4.2, `rl_readline_version' would have the
        !          1754:      value 0x0402.
        !          1755: 
        !          1756:  -- Variable: int rl_gnu_readline_p
        !          1757:      Always set to 1, denoting that this is GNU readline rather than
        !          1758:      some emulation.
        !          1759: 
        !          1760:  -- Variable: const char * rl_terminal_name
        !          1761:      The terminal type, used for initialization.  If not set by the
        !          1762:      application, Readline sets this to the value of the `TERM'
        !          1763:      environment variable the first time it is called.
        !          1764: 
        !          1765:  -- Variable: const char * rl_readline_name
        !          1766:      This variable is set to a unique name by each application using
        !          1767:      Readline.  The value allows conditional parsing of the inputrc file
        !          1768:      (*note Conditional Init Constructs::).
        !          1769: 
        !          1770:  -- Variable: FILE * rl_instream
        !          1771:      The stdio stream from which Readline reads input.  If `NULL',
        !          1772:      Readline defaults to STDIN.
        !          1773: 
        !          1774:  -- Variable: FILE * rl_outstream
        !          1775:      The stdio stream to which Readline performs output.  If `NULL',
        !          1776:      Readline defaults to STDOUT.
        !          1777: 
        !          1778:  -- Variable: int rl_prefer_env_winsize
        !          1779:      If non-zero, Readline gives values found in the `LINES' and
        !          1780:      `COLUMNS' environment variables greater precedence than values
        !          1781:      fetched from the kernel when computing the screen dimensions.
        !          1782: 
        !          1783:  -- Variable: rl_command_func_t * rl_last_func
        !          1784:      The address of the last command function Readline executed.  May
        !          1785:      be used to test whether or not a function is being executed twice
        !          1786:      in succession, for example.
        !          1787: 
        !          1788:  -- Variable: rl_hook_func_t * rl_startup_hook
        !          1789:      If non-zero, this is the address of a function to call just before
        !          1790:      `readline' prints the first prompt.
        !          1791: 
        !          1792:  -- Variable: rl_hook_func_t * rl_pre_input_hook
        !          1793:      If non-zero, this is the address of a function to call after the
        !          1794:      first prompt has been printed and just before `readline' starts
        !          1795:      reading input characters.
        !          1796: 
        !          1797:  -- Variable: rl_hook_func_t * rl_event_hook
        !          1798:      If non-zero, this is the address of a function to call periodically
        !          1799:      when Readline is waiting for terminal input.  By default, this
        !          1800:      will be called at most ten times a second if there is no keyboard
        !          1801:      input.
        !          1802: 
        !          1803:  -- Variable: rl_getc_func_t * rl_getc_function
        !          1804:      If non-zero, Readline will call indirectly through this pointer to
        !          1805:      get a character from the input stream.  By default, it is set to
        !          1806:      `rl_getc', the default Readline character input function (*note
        !          1807:      Character Input::).  In general, an application that sets
        !          1808:      RL_GETC_FUNCTION should consider setting RL_INPUT_AVAILABLE_HOOK
        !          1809:      as well.
        !          1810: 
        !          1811:  -- Variable: rl_hook_func_t * rl_signal_event_hook
        !          1812:      If non-zero, this is the address of a function to call if a read
        !          1813:      system call is interrupted when Readline is reading terminal input.
        !          1814: 
        !          1815:  -- Variable: rl_hook_func_t * rl_input_available_hook
        !          1816:      If non-zero, Readline will use this function's return value when
        !          1817:      it needs to determine whether or not there is available input on
        !          1818:      the current input source.  The default hook checks `rl_instream';
        !          1819:      if an application is using a different input source, it should set
        !          1820:      the hook appropriately.  Readline queries for available input when
        !          1821:      implementing intra-key-sequence timeouts during input and
        !          1822:      incremental searches.  This may use an application-specific
        !          1823:      timeout before returning a value; Readline uses the value passed
        !          1824:      to `rl_set_keyboard_input_timeout()' or the value of the
        !          1825:      user-settable KEYSEQ-TIMEOUT variable.  This is designed for use
        !          1826:      by applications using Readline's callback interface (*note
        !          1827:      Alternate Interface::), which may not use the traditional
        !          1828:      `read(2)' and file descriptor interface, or other applications
        !          1829:      using a different input mechanism.  If an application uses an
        !          1830:      input mechanism or hook that can potentially exceed the value of
        !          1831:      KEYSEQ-TIMEOUT, it should increase the timeout or set this hook
        !          1832:      appropriately even when not using the callback interface.  In
        !          1833:      general, an application that sets RL_GETC_FUNCTION should consider
        !          1834:      setting RL_INPUT_AVAILABLE_HOOK as well.
        !          1835: 
        !          1836:  -- Variable: rl_voidfunc_t * rl_redisplay_function
        !          1837:      If non-zero, Readline will call indirectly through this pointer to
        !          1838:      update the display with the current contents of the editing buffer.
        !          1839:      By default, it is set to `rl_redisplay', the default Readline
        !          1840:      redisplay function (*note Redisplay::).
        !          1841: 
        !          1842:  -- Variable: rl_vintfunc_t * rl_prep_term_function
        !          1843:      If non-zero, Readline will call indirectly through this pointer to
        !          1844:      initialize the terminal.  The function takes a single argument, an
        !          1845:      `int' flag that says whether or not to use eight-bit characters.
        !          1846:      By default, this is set to `rl_prep_terminal' (*note Terminal
        !          1847:      Management::).
        !          1848: 
        !          1849:  -- Variable: rl_voidfunc_t * rl_deprep_term_function
        !          1850:      If non-zero, Readline will call indirectly through this pointer to
        !          1851:      reset the terminal.  This function should undo the effects of
        !          1852:      `rl_prep_term_function'.  By default, this is set to
        !          1853:      `rl_deprep_terminal' (*note Terminal Management::).
        !          1854: 
        !          1855:  -- Variable: Keymap rl_executing_keymap
        !          1856:      This variable is set to the keymap (*note Keymaps::) in which the
        !          1857:      currently executing readline function was found.
        !          1858: 
        !          1859:  -- Variable: Keymap rl_binding_keymap
        !          1860:      This variable is set to the keymap (*note Keymaps::) in which the
        !          1861:      last key binding occurred.
        !          1862: 
        !          1863:  -- Variable: char * rl_executing_macro
        !          1864:      This variable is set to the text of any currently-executing macro.
        !          1865: 
        !          1866:  -- Variable: int rl_executing_key
        !          1867:      The key that caused the dispatch to the currently-executing
        !          1868:      Readline function.
        !          1869: 
        !          1870:  -- Variable: char * rl_executing_keyseq
        !          1871:      The full key sequence that caused the dispatch to the
        !          1872:      currently-executing Readline function.
        !          1873: 
        !          1874:  -- Variable: int rl_key_sequence_length
        !          1875:      The number of characters in RL_EXECUTING_KEYSEQ.
        !          1876: 
        !          1877:  -- Variable: int rl_readline_state
        !          1878:      A variable with bit values that encapsulate the current Readline
        !          1879:      state.  A bit is set with the `RL_SETSTATE' macro, and unset with
        !          1880:      the `RL_UNSETSTATE' macro.  Use the `RL_ISSTATE' macro to test
        !          1881:      whether a particular state bit is set.  Current state bits include:
        !          1882: 
        !          1883:     `RL_STATE_NONE'
        !          1884:           Readline has not yet been called, nor has it begun to
        !          1885:           initialize.
        !          1886: 
        !          1887:     `RL_STATE_INITIALIZING'
        !          1888:           Readline is initializing its internal data structures.
        !          1889: 
        !          1890:     `RL_STATE_INITIALIZED'
        !          1891:           Readline has completed its initialization.
        !          1892: 
        !          1893:     `RL_STATE_TERMPREPPED'
        !          1894:           Readline has modified the terminal modes to do its own input
        !          1895:           and redisplay.
        !          1896: 
        !          1897:     `RL_STATE_READCMD'
        !          1898:           Readline is reading a command from the keyboard.
        !          1899: 
        !          1900:     `RL_STATE_METANEXT'
        !          1901:           Readline is reading more input after reading the meta-prefix
        !          1902:           character.
        !          1903: 
        !          1904:     `RL_STATE_DISPATCHING'
        !          1905:           Readline is dispatching to a command.
        !          1906: 
        !          1907:     `RL_STATE_MOREINPUT'
        !          1908:           Readline is reading more input while executing an editing
        !          1909:           command.
        !          1910: 
        !          1911:     `RL_STATE_ISEARCH'
        !          1912:           Readline is performing an incremental history search.
        !          1913: 
        !          1914:     `RL_STATE_NSEARCH'
        !          1915:           Readline is performing a non-incremental history search.
        !          1916: 
        !          1917:     `RL_STATE_SEARCH'
        !          1918:           Readline is searching backward or forward through the history
        !          1919:           for a string.
        !          1920: 
        !          1921:     `RL_STATE_NUMERICARG'
        !          1922:           Readline is reading a numeric argument.
        !          1923: 
        !          1924:     `RL_STATE_MACROINPUT'
        !          1925:           Readline is currently getting its input from a
        !          1926:           previously-defined keyboard macro.
        !          1927: 
        !          1928:     `RL_STATE_MACRODEF'
        !          1929:           Readline is currently reading characters defining a keyboard
        !          1930:           macro.
        !          1931: 
        !          1932:     `RL_STATE_OVERWRITE'
        !          1933:           Readline is in overwrite mode.
        !          1934: 
        !          1935:     `RL_STATE_COMPLETING'
        !          1936:           Readline is performing word completion.
        !          1937: 
        !          1938:     `RL_STATE_SIGHANDLER'
        !          1939:           Readline is currently executing the readline signal handler.
        !          1940: 
        !          1941:     `RL_STATE_UNDOING'
        !          1942:           Readline is performing an undo.
        !          1943: 
        !          1944:     `RL_STATE_INPUTPENDING'
        !          1945:           Readline has input pending due to a call to
        !          1946:           `rl_execute_next()'.
        !          1947: 
        !          1948:     `RL_STATE_TTYCSAVED'
        !          1949:           Readline has saved the values of the terminal's special
        !          1950:           characters.
        !          1951: 
        !          1952:     `RL_STATE_CALLBACK'
        !          1953:           Readline is currently using the alternate (callback) interface
        !          1954:           (*note Alternate Interface::).
        !          1955: 
        !          1956:     `RL_STATE_VIMOTION'
        !          1957:           Readline is reading the argument to a vi-mode "motion"
        !          1958:           command.
        !          1959: 
        !          1960:     `RL_STATE_MULTIKEY'
        !          1961:           Readline is reading a multiple-keystroke command.
        !          1962: 
        !          1963:     `RL_STATE_VICMDONCE'
        !          1964:           Readline has entered vi command (movement) mode at least one
        !          1965:           time during the current call to `readline()'.
        !          1966: 
        !          1967:     `RL_STATE_DONE'
        !          1968:           Readline has read a key sequence bound to `accept-line' and
        !          1969:           is about to return the line to the caller.
        !          1970: 
        !          1971: 
        !          1972:  -- Variable: int rl_explicit_arg
        !          1973:      Set to a non-zero value if an explicit numeric argument was
        !          1974:      specified by the user.  Only valid in a bindable command function.
        !          1975: 
        !          1976:  -- Variable: int rl_numeric_arg
        !          1977:      Set to the value of any numeric argument explicitly specified by
        !          1978:      the user before executing the current Readline function.  Only
        !          1979:      valid in a bindable command function.
        !          1980: 
        !          1981:  -- Variable: int rl_editing_mode
        !          1982:      Set to a value denoting Readline's current editing mode.  A value
        !          1983:      of 1 means Readline is currently in emacs mode; 0 means that vi
        !          1984:      mode is active.
        !          1985: 
        !          1986: 
        !          1987: File: readline.info,  Node: Readline Convenience Functions,  Next: Readline Signal Handling,  Prev: Readline Variables,  Up: Programming with GNU Readline
        !          1988: 
        !          1989: 2.4 Readline Convenience Functions
        !          1990: ==================================
        !          1991: 
        !          1992: * Menu:
        !          1993: 
        !          1994: * Function Naming::    How to give a function you write a name.
        !          1995: * Keymaps::            Making keymaps.
        !          1996: * Binding Keys::       Changing Keymaps.
        !          1997: * Associating Function Names and Bindings::    Translate function names to
        !          1998:                                                key sequences.
        !          1999: * Allowing Undoing::   How to make your functions undoable.
        !          2000: * Redisplay::          Functions to control line display.
        !          2001: * Modifying Text::     Functions to modify `rl_line_buffer'.
        !          2002: * Character Input::    Functions to read keyboard input.
        !          2003: * Terminal Management::        Functions to manage terminal settings.
        !          2004: * Utility Functions::  Generally useful functions and hooks.
        !          2005: * Miscellaneous Functions::    Functions that don't fall into any category.
        !          2006: * Alternate Interface::        Using Readline in a `callback' fashion.
        !          2007: * A Readline Example::         An example Readline function.
        !          2008: * Alternate Interface Example::        An example program using the alternate interface.
        !          2009: 
        !          2010: 
        !          2011: File: readline.info,  Node: Function Naming,  Next: Keymaps,  Up: Readline Convenience Functions
        !          2012: 
        !          2013: 2.4.1 Naming a Function
        !          2014: -----------------------
        !          2015: 
        !          2016: The user can dynamically change the bindings of keys while using
        !          2017: Readline.  This is done by representing the function with a descriptive
        !          2018: name.  The user is able to type the descriptive name when referring to
        !          2019: the function.  Thus, in an init file, one might find
        !          2020: 
        !          2021:      Meta-Rubout:      backward-kill-word
        !          2022: 
        !          2023:    This binds the keystroke <Meta-Rubout> to the function
        !          2024: _descriptively_ named `backward-kill-word'.  You, as the programmer,
        !          2025: should bind the functions you write to descriptive names as well.
        !          2026: Readline provides a function for doing that:
        !          2027: 
        !          2028:  -- Function: int rl_add_defun (const char *name, rl_command_func_t
        !          2029:           *function, int key)
        !          2030:      Add NAME to the list of named functions.  Make FUNCTION be the
        !          2031:      function that gets called.  If KEY is not -1, then bind it to
        !          2032:      FUNCTION using `rl_bind_key()'.
        !          2033: 
        !          2034:    Using this function alone is sufficient for most applications.  It
        !          2035: is the recommended way to add a few functions to the default functions
        !          2036: that Readline has built in.  If you need to do something other than
        !          2037: adding a function to Readline, you may need to use the underlying
        !          2038: functions described below.
        !          2039: 
        !          2040: 
        !          2041: File: readline.info,  Node: Keymaps,  Next: Binding Keys,  Prev: Function Naming,  Up: Readline Convenience Functions
        !          2042: 
        !          2043: 2.4.2 Selecting a Keymap
        !          2044: ------------------------
        !          2045: 
        !          2046: Key bindings take place on a "keymap".  The keymap is the association
        !          2047: between the keys that the user types and the functions that get run.
        !          2048: You can make your own keymaps, copy existing keymaps, and tell Readline
        !          2049: which keymap to use.
        !          2050: 
        !          2051:  -- Function: Keymap rl_make_bare_keymap (void)
        !          2052:      Returns a new, empty keymap.  The space for the keymap is
        !          2053:      allocated with `malloc()'; the caller should free it by calling
        !          2054:      `rl_free_keymap()' when done.
        !          2055: 
        !          2056:  -- Function: Keymap rl_copy_keymap (Keymap map)
        !          2057:      Return a new keymap which is a copy of MAP.
        !          2058: 
        !          2059:  -- Function: Keymap rl_make_keymap (void)
        !          2060:      Return a new keymap with the printing characters bound to
        !          2061:      rl_insert, the lowercase Meta characters bound to run their
        !          2062:      equivalents, and the Meta digits bound to produce numeric
        !          2063:      arguments.
        !          2064: 
        !          2065:  -- Function: void rl_discard_keymap (Keymap keymap)
        !          2066:      Free the storage associated with the data in KEYMAP.  The caller
        !          2067:      should free KEYMAP.
        !          2068: 
        !          2069:  -- Function: void rl_free_keymap (Keymap keymap)
        !          2070:      Free all storage associated with KEYMAP.  This calls
        !          2071:      `rl_discard_keymap' to free subordindate keymaps and macros.
        !          2072: 
        !          2073:    Readline has several internal keymaps.  These functions allow you to
        !          2074: change which keymap is active.
        !          2075: 
        !          2076:  -- Function: Keymap rl_get_keymap (void)
        !          2077:      Returns the currently active keymap.
        !          2078: 
        !          2079:  -- Function: void rl_set_keymap (Keymap keymap)
        !          2080:      Makes KEYMAP the currently active keymap.
        !          2081: 
        !          2082:  -- Function: Keymap rl_get_keymap_by_name (const char *name)
        !          2083:      Return the keymap matching NAME.  NAME is one which would be
        !          2084:      supplied in a `set keymap' inputrc line (*note Readline Init
        !          2085:      File::).
        !          2086: 
        !          2087:  -- Function: char * rl_get_keymap_name (Keymap keymap)
        !          2088:      Return the name matching KEYMAP.  NAME is one which would be
        !          2089:      supplied in a `set keymap' inputrc line (*note Readline Init
        !          2090:      File::).
        !          2091: 
        !          2092: 
        !          2093: File: readline.info,  Node: Binding Keys,  Next: Associating Function Names and Bindings,  Prev: Keymaps,  Up: Readline Convenience Functions
        !          2094: 
        !          2095: 2.4.3 Binding Keys
        !          2096: ------------------
        !          2097: 
        !          2098: Key sequences are associate with functions through the keymap.
        !          2099: Readline has several internal keymaps: `emacs_standard_keymap',
        !          2100: `emacs_meta_keymap', `emacs_ctlx_keymap', `vi_movement_keymap', and
        !          2101: `vi_insertion_keymap'.  `emacs_standard_keymap' is the default, and the
        !          2102: examples in this manual assume that.
        !          2103: 
        !          2104:    Since `readline()' installs a set of default key bindings the first
        !          2105: time it is called, there is always the danger that a custom binding
        !          2106: installed before the first call to `readline()' will be overridden.  An
        !          2107: alternate mechanism is to install custom key bindings in an
        !          2108: initialization function assigned to the `rl_startup_hook' variable
        !          2109: (*note Readline Variables::).
        !          2110: 
        !          2111:    These functions manage key bindings.
        !          2112: 
        !          2113:  -- Function: int rl_bind_key (int key, rl_command_func_t *function)
        !          2114:      Binds KEY to FUNCTION in the currently active keymap.  Returns
        !          2115:      non-zero in the case of an invalid KEY.
        !          2116: 
        !          2117:  -- Function: int rl_bind_key_in_map (int key, rl_command_func_t
        !          2118:           *function, Keymap map)
        !          2119:      Bind KEY to FUNCTION in MAP.  Returns non-zero in the case of an
        !          2120:      invalid KEY.
        !          2121: 
        !          2122:  -- Function: int rl_bind_key_if_unbound (int key, rl_command_func_t
        !          2123:           *function)
        !          2124:      Binds KEY to FUNCTION if it is not already bound in the currently
        !          2125:      active keymap.  Returns non-zero in the case of an invalid KEY or
        !          2126:      if KEY is already bound.
        !          2127: 
        !          2128:  -- Function: int rl_bind_key_if_unbound_in_map (int key,
        !          2129:           rl_command_func_t *function, Keymap map)
        !          2130:      Binds KEY to FUNCTION if it is not already bound in MAP.  Returns
        !          2131:      non-zero in the case of an invalid KEY or if KEY is already bound.
        !          2132: 
        !          2133:  -- Function: int rl_unbind_key (int key)
        !          2134:      Bind KEY to the null function in the currently active keymap.
        !          2135:      Returns non-zero in case of error.
        !          2136: 
        !          2137:  -- Function: int rl_unbind_key_in_map (int key, Keymap map)
        !          2138:      Bind KEY to the null function in MAP.  Returns non-zero in case of
        !          2139:      error.
        !          2140: 
        !          2141:  -- Function: int rl_unbind_function_in_map (rl_command_func_t
        !          2142:           *function, Keymap map)
        !          2143:      Unbind all keys that execute FUNCTION in MAP.
        !          2144: 
        !          2145:  -- Function: int rl_unbind_command_in_map (const char *command, Keymap
        !          2146:           map)
        !          2147:      Unbind all keys that are bound to COMMAND in MAP.
        !          2148: 
        !          2149:  -- Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t
        !          2150:           *function)
        !          2151:      Bind the key sequence represented by the string KEYSEQ to the
        !          2152:      function FUNCTION, beginning in the current keymap.  This makes
        !          2153:      new keymaps as necessary.  The return value is non-zero if KEYSEQ
        !          2154:      is invalid.
        !          2155: 
        !          2156:  -- Function: int rl_bind_keyseq_in_map (const char *keyseq,
        !          2157:           rl_command_func_t *function, Keymap map)
        !          2158:      Bind the key sequence represented by the string KEYSEQ to the
        !          2159:      function FUNCTION.  This makes new keymaps as necessary.  Initial
        !          2160:      bindings are performed in MAP.  The return value is non-zero if
        !          2161:      KEYSEQ is invalid.
        !          2162: 
        !          2163:  -- Function: int rl_set_key (const char *keyseq, rl_command_func_t
        !          2164:           *function, Keymap map)
        !          2165:      Equivalent to `rl_bind_keyseq_in_map'.
        !          2166: 
        !          2167:  -- Function: int rl_bind_keyseq_if_unbound (const char *keyseq,
        !          2168:           rl_command_func_t *function)
        !          2169:      Binds KEYSEQ to FUNCTION if it is not already bound in the
        !          2170:      currently active keymap.  Returns non-zero in the case of an
        !          2171:      invalid KEYSEQ or if KEYSEQ is already bound.
        !          2172: 
        !          2173:  -- Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq,
        !          2174:           rl_command_func_t *function, Keymap map)
        !          2175:      Binds KEYSEQ to FUNCTION if it is not already bound in MAP.
        !          2176:      Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is
        !          2177:      already bound.
        !          2178: 
        !          2179:  -- Function: int rl_generic_bind (int type, const char *keyseq, char
        !          2180:           *data, Keymap map)
        !          2181:      Bind the key sequence represented by the string KEYSEQ to the
        !          2182:      arbitrary pointer DATA.  TYPE says what kind of data is pointed to
        !          2183:      by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or
        !          2184:      a keymap (`ISKMAP').  This makes new keymaps as necessary.  The
        !          2185:      initial keymap in which to do bindings is MAP.
        !          2186: 
        !          2187:  -- Function: int rl_parse_and_bind (char *line)
        !          2188:      Parse LINE as if it had been read from the `inputrc' file and
        !          2189:      perform any key bindings and variable assignments found (*note
        !          2190:      Readline Init File::).
        !          2191: 
        !          2192:  -- Function: int rl_read_init_file (const char *filename)
        !          2193:      Read keybindings and variable assignments from FILENAME (*note
        !          2194:      Readline Init File::).
        !          2195: 
        !          2196: 
        !          2197: File: readline.info,  Node: Associating Function Names and Bindings,  Next: Allowing Undoing,  Prev: Binding Keys,  Up: Readline Convenience Functions
        !          2198: 
        !          2199: 2.4.4 Associating Function Names and Bindings
        !          2200: ---------------------------------------------
        !          2201: 
        !          2202: These functions allow you to find out what keys invoke named functions
        !          2203: and the functions invoked by a particular key sequence.  You may also
        !          2204: associate a new function name with an arbitrary function.
        !          2205: 
        !          2206:  -- Function: rl_command_func_t * rl_named_function (const char *name)
        !          2207:      Return the function with name NAME.
        !          2208: 
        !          2209:  -- Function: rl_command_func_t * rl_function_of_keyseq (const char
        !          2210:           *keyseq, Keymap map, int *type)
        !          2211:      Return the function invoked by KEYSEQ in keymap MAP.  If MAP is
        !          2212:      `NULL', the current keymap is used.  If TYPE is not `NULL', the
        !          2213:      type of the object is returned in the `int' variable it points to
        !          2214:      (one of `ISFUNC', `ISKMAP', or `ISMACR').
        !          2215: 
        !          2216:  -- Function: char ** rl_invoking_keyseqs (rl_command_func_t *function)
        !          2217:      Return an array of strings representing the key sequences used to
        !          2218:      invoke FUNCTION in the current keymap.
        !          2219: 
        !          2220:  -- Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t
        !          2221:           *function, Keymap map)
        !          2222:      Return an array of strings representing the key sequences used to
        !          2223:      invoke FUNCTION in the keymap MAP.
        !          2224: 
        !          2225:  -- Function: void rl_function_dumper (int readable)
        !          2226:      Print the readline function names and the key sequences currently
        !          2227:      bound to them to `rl_outstream'.  If READABLE is non-zero, the
        !          2228:      list is formatted in such a way that it can be made part of an
        !          2229:      `inputrc' file and re-read.
        !          2230: 
        !          2231:  -- Function: void rl_list_funmap_names (void)
        !          2232:      Print the names of all bindable Readline functions to
        !          2233:      `rl_outstream'.
        !          2234: 
        !          2235:  -- Function: const char ** rl_funmap_names (void)
        !          2236:      Return a NULL terminated array of known function names.  The array
        !          2237:      is sorted.  The array itself is allocated, but not the strings
        !          2238:      inside.  You should free the array, but not the pointers, using
        !          2239:      `free' or `rl_free' when you are done.
        !          2240: 
        !          2241:  -- Function: int rl_add_funmap_entry (const char *name,
        !          2242:           rl_command_func_t *function)
        !          2243:      Add NAME to the list of bindable Readline command names, and make
        !          2244:      FUNCTION the function to be called when NAME is invoked.
        !          2245: 
        !          2246: 
        !          2247: File: readline.info,  Node: Allowing Undoing,  Next: Redisplay,  Prev: Associating Function Names and Bindings,  Up: Readline Convenience Functions
        !          2248: 
        !          2249: 2.4.5 Allowing Undoing
        !          2250: ----------------------
        !          2251: 
        !          2252: Supporting the undo command is a painless thing, and makes your
        !          2253: functions much more useful.  It is certainly easy to try something if
        !          2254: you know you can undo it.
        !          2255: 
        !          2256:    If your function simply inserts text once, or deletes text once, and
        !          2257: uses `rl_insert_text()' or `rl_delete_text()' to do it, then undoing is
        !          2258: already done for you automatically.
        !          2259: 
        !          2260:    If you do multiple insertions or multiple deletions, or any
        !          2261: combination of these operations, you should group them together into
        !          2262: one operation.  This is done with `rl_begin_undo_group()' and
        !          2263: `rl_end_undo_group()'.
        !          2264: 
        !          2265:    The types of events that can be undone are:
        !          2266: 
        !          2267:      enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END };
        !          2268: 
        !          2269:    Notice that `UNDO_DELETE' means to insert some text, and
        !          2270: `UNDO_INSERT' means to delete some text.  That is, the undo code tells
        !          2271: what to undo, not how to undo it.  `UNDO_BEGIN' and `UNDO_END' are tags
        !          2272: added by `rl_begin_undo_group()' and `rl_end_undo_group()'.
        !          2273: 
        !          2274:  -- Function: int rl_begin_undo_group (void)
        !          2275:      Begins saving undo information in a group construct.  The undo
        !          2276:      information usually comes from calls to `rl_insert_text()' and
        !          2277:      `rl_delete_text()', but could be the result of calls to
        !          2278:      `rl_add_undo()'.
        !          2279: 
        !          2280:  -- Function: int rl_end_undo_group (void)
        !          2281:      Closes the current undo group started with `rl_begin_undo_group
        !          2282:      ()'.  There should be one call to `rl_end_undo_group()' for each
        !          2283:      call to `rl_begin_undo_group()'.
        !          2284: 
        !          2285:  -- Function: void rl_add_undo (enum undo_code what, int start, int
        !          2286:           end, char *text)
        !          2287:      Remember how to undo an event (according to WHAT).  The affected
        !          2288:      text runs from START to END, and encompasses TEXT.
        !          2289: 
        !          2290:  -- Function: void rl_free_undo_list (void)
        !          2291:      Free the existing undo list.
        !          2292: 
        !          2293:  -- Function: int rl_do_undo (void)
        !          2294:      Undo the first thing on the undo list.  Returns `0' if there was
        !          2295:      nothing to undo, non-zero if something was undone.
        !          2296: 
        !          2297:    Finally, if you neither insert nor delete text, but directly modify
        !          2298: the existing text (e.g., change its case), call `rl_modifying()' once,
        !          2299: just before you modify the text.  You must supply the indices of the
        !          2300: text range that you are going to modify.
        !          2301: 
        !          2302:  -- Function: int rl_modifying (int start, int end)
        !          2303:      Tell Readline to save the text between START and END as a single
        !          2304:      undo unit.  It is assumed that you will subsequently modify that
        !          2305:      text.
        !          2306: 
        !          2307: 
        !          2308: File: readline.info,  Node: Redisplay,  Next: Modifying Text,  Prev: Allowing Undoing,  Up: Readline Convenience Functions
        !          2309: 
        !          2310: 2.4.6 Redisplay
        !          2311: ---------------
        !          2312: 
        !          2313:  -- Function: void rl_redisplay (void)
        !          2314:      Change what's displayed on the screen to reflect the current
        !          2315:      contents of `rl_line_buffer'.
        !          2316: 
        !          2317:  -- Function: int rl_forced_update_display (void)
        !          2318:      Force the line to be updated and redisplayed, whether or not
        !          2319:      Readline thinks the screen display is correct.
        !          2320: 
        !          2321:  -- Function: int rl_on_new_line (void)
        !          2322:      Tell the update functions that we have moved onto a new (empty)
        !          2323:      line, usually after outputting a newline.
        !          2324: 
        !          2325:  -- Function: int rl_on_new_line_with_prompt (void)
        !          2326:      Tell the update functions that we have moved onto a new line, with
        !          2327:      RL_PROMPT already displayed.  This could be used by applications
        !          2328:      that want to output the prompt string themselves, but still need
        !          2329:      Readline to know the prompt string length for redisplay.  It
        !          2330:      should be used after setting RL_ALREADY_PROMPTED.
        !          2331: 
        !          2332:  -- Function: int rl_reset_line_state (void)
        !          2333:      Reset the display state to a clean state and redisplay the current
        !          2334:      line starting on a new line.
        !          2335: 
        !          2336:  -- Function: int rl_crlf (void)
        !          2337:      Move the cursor to the start of the next screen line.
        !          2338: 
        !          2339:  -- Function: int rl_show_char (int c)
        !          2340:      Display character C on `rl_outstream'.  If Readline has not been
        !          2341:      set to display meta characters directly, this will convert meta
        !          2342:      characters to a meta-prefixed key sequence.  This is intended for
        !          2343:      use by applications which wish to do their own redisplay.
        !          2344: 
        !          2345:  -- Function: int rl_message (const char *, ...)
        !          2346:      The arguments are a format string as would be supplied to `printf',
        !          2347:      possibly containing conversion specifications such as `%d', and
        !          2348:      any additional arguments necessary to satisfy the conversion
        !          2349:      specifications.  The resulting string is displayed in the "echo
        !          2350:      area".  The echo area is also used to display numeric arguments
        !          2351:      and search strings.  You should call `rl_save_prompt' to save the
        !          2352:      prompt information before calling this function.
        !          2353: 
        !          2354:  -- Function: int rl_clear_message (void)
        !          2355:      Clear the message in the echo area.  If the prompt was saved with
        !          2356:      a call to `rl_save_prompt' before the last call to `rl_message',
        !          2357:      call `rl_restore_prompt' before calling this function.
        !          2358: 
        !          2359:  -- Function: void rl_save_prompt (void)
        !          2360:      Save the local Readline prompt display state in preparation for
        !          2361:      displaying a new message in the message area with `rl_message()'.
        !          2362: 
        !          2363:  -- Function: void rl_restore_prompt (void)
        !          2364:      Restore the local Readline prompt display state saved by the most
        !          2365:      recent call to `rl_save_prompt'.  if `rl_save_prompt' was called
        !          2366:      to save the prompt before a call to `rl_message', this function
        !          2367:      should be called before the corresponding call to
        !          2368:      `rl_clear_message'.
        !          2369: 
        !          2370:  -- Function: int rl_expand_prompt (char *prompt)
        !          2371:      Expand any special character sequences in PROMPT and set up the
        !          2372:      local Readline prompt redisplay variables.  This function is
        !          2373:      called by `readline()'.  It may also be called to expand the
        !          2374:      primary prompt if the `rl_on_new_line_with_prompt()' function or
        !          2375:      `rl_already_prompted' variable is used.  It returns the number of
        !          2376:      visible characters on the last line of the (possibly multi-line)
        !          2377:      prompt.  Applications may indicate that the prompt contains
        !          2378:      characters that take up no physical screen space when displayed by
        !          2379:      bracketing a sequence of such characters with the special markers
        !          2380:      `RL_PROMPT_START_IGNORE' and `RL_PROMPT_END_IGNORE' (declared in
        !          2381:      `readline.h'.  This may be used to embed terminal-specific escape
        !          2382:      sequences in prompts.
        !          2383: 
        !          2384:  -- Function: int rl_set_prompt (const char *prompt)
        !          2385:      Make Readline use PROMPT for subsequent redisplay.  This calls
        !          2386:      `rl_expand_prompt()' to expand the prompt and sets `rl_prompt' to
        !          2387:      the result.
        !          2388: 
        !          2389: 
        !          2390: File: readline.info,  Node: Modifying Text,  Next: Character Input,  Prev: Redisplay,  Up: Readline Convenience Functions
        !          2391: 
        !          2392: 2.4.7 Modifying Text
        !          2393: --------------------
        !          2394: 
        !          2395:  -- Function: int rl_insert_text (const char *text)
        !          2396:      Insert TEXT into the line at the current cursor position.  Returns
        !          2397:      the number of characters inserted.
        !          2398: 
        !          2399:  -- Function: int rl_delete_text (int start, int end)
        !          2400:      Delete the text between START and END in the current line.
        !          2401:      Returns the number of characters deleted.
        !          2402: 
        !          2403:  -- Function: char * rl_copy_text (int start, int end)
        !          2404:      Return a copy of the text between START and END in the current
        !          2405:      line.
        !          2406: 
        !          2407:  -- Function: int rl_kill_text (int start, int end)
        !          2408:      Copy the text between START and END in the current line to the
        !          2409:      kill ring, appending or prepending to the last kill if the last
        !          2410:      command was a kill command.  The text is deleted.  If START is
        !          2411:      less than END, the text is appended, otherwise prepended.  If the
        !          2412:      last command was not a kill, a new kill ring slot is used.
        !          2413: 
        !          2414:  -- Function: int rl_push_macro_input (char *macro)
        !          2415:      Cause MACRO to be inserted into the line, as if it had been invoked
        !          2416:      by a key bound to a macro.  Not especially useful; use
        !          2417:      `rl_insert_text()' instead.
        !          2418: 
        !          2419: 
        !          2420: File: readline.info,  Node: Character Input,  Next: Terminal Management,  Prev: Modifying Text,  Up: Readline Convenience Functions
        !          2421: 
        !          2422: 2.4.8 Character Input
        !          2423: ---------------------
        !          2424: 
        !          2425:  -- Function: int rl_read_key (void)
        !          2426:      Return the next character available from Readline's current input
        !          2427:      stream.  This handles input inserted into the input stream via
        !          2428:      RL_PENDING_INPUT (*note Readline Variables::) and
        !          2429:      `rl_stuff_char()', macros, and characters read from the keyboard.
        !          2430:      While waiting for input, this function will call any function
        !          2431:      assigned to the `rl_event_hook' variable.
        !          2432: 
        !          2433:  -- Function: int rl_getc (FILE *stream)
        !          2434:      Return the next character available from STREAM, which is assumed
        !          2435:      to be the keyboard.
        !          2436: 
        !          2437:  -- Function: int rl_stuff_char (int c)
        !          2438:      Insert C into the Readline input stream.  It will be "read" before
        !          2439:      Readline attempts to read characters from the terminal with
        !          2440:      `rl_read_key()'.  Up to 512 characters may be pushed back.
        !          2441:      `rl_stuff_char' returns 1 if the character was successfully
        !          2442:      inserted; 0 otherwise.
        !          2443: 
        !          2444:  -- Function: int rl_execute_next (int c)
        !          2445:      Make C be the next command to be executed when `rl_read_key()' is
        !          2446:      called.  This sets RL_PENDING_INPUT.
        !          2447: 
        !          2448:  -- Function: int rl_clear_pending_input (void)
        !          2449:      Unset RL_PENDING_INPUT, effectively negating the effect of any
        !          2450:      previous call to `rl_execute_next()'.  This works only if the
        !          2451:      pending input has not already been read with `rl_read_key()'.
        !          2452: 
        !          2453:  -- Function: int rl_set_keyboard_input_timeout (int u)
        !          2454:      While waiting for keyboard input in `rl_read_key()', Readline will
        !          2455:      wait for U microseconds for input before calling any function
        !          2456:      assigned to `rl_event_hook'.  U must be greater than or equal to
        !          2457:      zero (a zero-length timeout is equivalent to a poll).  The default
        !          2458:      waiting period is one-tenth of a second.  Returns the old timeout
        !          2459:      value.
        !          2460: 
        !          2461: 
        !          2462: File: readline.info,  Node: Terminal Management,  Next: Utility Functions,  Prev: Character Input,  Up: Readline Convenience Functions
        !          2463: 
        !          2464: 2.4.9 Terminal Management
        !          2465: -------------------------
        !          2466: 
        !          2467:  -- Function: void rl_prep_terminal (int meta_flag)
        !          2468:      Modify the terminal settings for Readline's use, so `readline()'
        !          2469:      can read a single character at a time from the keyboard.  The
        !          2470:      META_FLAG argument should be non-zero if Readline should read
        !          2471:      eight-bit input.
        !          2472: 
        !          2473:  -- Function: void rl_deprep_terminal (void)
        !          2474:      Undo the effects of `rl_prep_terminal()', leaving the terminal in
        !          2475:      the state in which it was before the most recent call to
        !          2476:      `rl_prep_terminal()'.
        !          2477: 
        !          2478:  -- Function: void rl_tty_set_default_bindings (Keymap kmap)
        !          2479:      Read the operating system's terminal editing characters (as would
        !          2480:      be displayed by `stty') to their Readline equivalents.  The
        !          2481:      bindings are performed in KMAP.
        !          2482: 
        !          2483:  -- Function: void rl_tty_unset_default_bindings (Keymap kmap)
        !          2484:      Reset the bindings manipulated by `rl_tty_set_default_bindings' so
        !          2485:      that the terminal editing characters are bound to `rl_insert'.
        !          2486:      The bindings are performed in KMAP.
        !          2487: 
        !          2488:  -- Function: int rl_reset_terminal (const char *terminal_name)
        !          2489:      Reinitialize Readline's idea of the terminal settings using
        !          2490:      TERMINAL_NAME as the terminal type (e.g., `vt100').  If
        !          2491:      TERMINAL_NAME is `NULL', the value of the `TERM' environment
        !          2492:      variable is used.
        !          2493: 
        !          2494: 
        !          2495: File: readline.info,  Node: Utility Functions,  Next: Miscellaneous Functions,  Prev: Terminal Management,  Up: Readline Convenience Functions
        !          2496: 
        !          2497: 2.4.10 Utility Functions
        !          2498: ------------------------
        !          2499: 
        !          2500:  -- Function: int rl_save_state (struct readline_state *sp)
        !          2501:      Save a snapshot of Readline's internal state to SP.  The contents
        !          2502:      of the READLINE_STATE structure are documented in `readline.h'.
        !          2503:      The caller is responsible for allocating the structure.
        !          2504: 
        !          2505:  -- Function: int rl_restore_state (struct readline_state *sp)
        !          2506:      Restore Readline's internal state to that stored in SP, which must
        !          2507:      have been saved by a call to `rl_save_state'.  The contents of the
        !          2508:      READLINE_STATE structure are documented in `readline.h'.  The
        !          2509:      caller is responsible for freeing the structure.
        !          2510: 
        !          2511:  -- Function: void rl_free (void *mem)
        !          2512:      Deallocate the memory pointed to by MEM.  MEM must have been
        !          2513:      allocated by `malloc'.
        !          2514: 
        !          2515:  -- Function: void rl_replace_line (const char *text, int clear_undo)
        !          2516:      Replace the contents of `rl_line_buffer' with TEXT.  The point and
        !          2517:      mark are preserved, if possible.  If CLEAR_UNDO is non-zero, the
        !          2518:      undo list associated with the current line is cleared.
        !          2519: 
        !          2520:  -- Function: void rl_extend_line_buffer (int len)
        !          2521:      Ensure that `rl_line_buffer' has enough space to hold LEN
        !          2522:      characters, possibly reallocating it if necessary.
        !          2523: 
        !          2524:  -- Function: int rl_initialize (void)
        !          2525:      Initialize or re-initialize Readline's internal state.  It's not
        !          2526:      strictly necessary to call this; `readline()' calls it before
        !          2527:      reading any input.
        !          2528: 
        !          2529:  -- Function: int rl_ding (void)
        !          2530:      Ring the terminal bell, obeying the setting of `bell-style'.
        !          2531: 
        !          2532:  -- Function: int rl_alphabetic (int c)
        !          2533:      Return 1 if C is an alphabetic character.
        !          2534: 
        !          2535:  -- Function: void rl_display_match_list (char **matches, int len, int
        !          2536:           max)
        !          2537:      A convenience function for displaying a list of strings in
        !          2538:      columnar format on Readline's output stream.  `matches' is the list
        !          2539:      of strings, in argv format, such as a list of completion matches.
        !          2540:      `len' is the number of strings in `matches', and `max' is the
        !          2541:      length of the longest string in `matches'.  This function uses the
        !          2542:      setting of `print-completions-horizontally' to select how the
        !          2543:      matches are displayed (*note Readline Init File Syntax::).  When
        !          2544:      displaying completions, this function sets the number of columns
        !          2545:      used for display to the value of `completion-display-width', the
        !          2546:      value of the environment variable `COLUMNS', or the screen width,
        !          2547:      in that order.
        !          2548: 
        !          2549:    The following are implemented as macros, defined in `chardefs.h'.
        !          2550: Applications should refrain from using them.
        !          2551: 
        !          2552:  -- Function: int _rl_uppercase_p (int c)
        !          2553:      Return 1 if C is an uppercase alphabetic character.
        !          2554: 
        !          2555:  -- Function: int _rl_lowercase_p (int c)
        !          2556:      Return 1 if C is a lowercase alphabetic character.
        !          2557: 
        !          2558:  -- Function: int _rl_digit_p (int c)
        !          2559:      Return 1 if C is a numeric character.
        !          2560: 
        !          2561:  -- Function: int _rl_to_upper (int c)
        !          2562:      If C is a lowercase alphabetic character, return the corresponding
        !          2563:      uppercase character.
        !          2564: 
        !          2565:  -- Function: int _rl_to_lower (int c)
        !          2566:      If C is an uppercase alphabetic character, return the corresponding
        !          2567:      lowercase character.
        !          2568: 
        !          2569:  -- Function: int _rl_digit_value (int c)
        !          2570:      If C is a number, return the value it represents.
        !          2571: 
        !          2572: 
        !          2573: File: readline.info,  Node: Miscellaneous Functions,  Next: Alternate Interface,  Prev: Utility Functions,  Up: Readline Convenience Functions
        !          2574: 
        !          2575: 2.4.11 Miscellaneous Functions
        !          2576: ------------------------------
        !          2577: 
        !          2578:  -- Function: int rl_macro_bind (const char *keyseq, const char *macro,
        !          2579:           Keymap map)
        !          2580:      Bind the key sequence KEYSEQ to invoke the macro MACRO.  The
        !          2581:      binding is performed in MAP.  When KEYSEQ is invoked, the MACRO
        !          2582:      will be inserted into the line.  This function is deprecated; use
        !          2583:      `rl_generic_bind()' instead.
        !          2584: 
        !          2585:  -- Function: void rl_macro_dumper (int readable)
        !          2586:      Print the key sequences bound to macros and their values, using
        !          2587:      the current keymap, to `rl_outstream'.  If READABLE is non-zero,
        !          2588:      the list is formatted in such a way that it can be made part of an
        !          2589:      `inputrc' file and re-read.
        !          2590: 
        !          2591:  -- Function: int rl_variable_bind (const char *variable, const char
        !          2592:           *value)
        !          2593:      Make the Readline variable VARIABLE have VALUE.  This behaves as
        !          2594:      if the readline command `set VARIABLE VALUE' had been executed in
        !          2595:      an `inputrc' file (*note Readline Init File Syntax::).
        !          2596: 
        !          2597:  -- Function: char * rl_variable_value (const char *variable)
        !          2598:      Return a string representing the value of the Readline variable
        !          2599:      VARIABLE.  For boolean variables, this string is either `on' or
        !          2600:      `off'.
        !          2601: 
        !          2602:  -- Function: void rl_variable_dumper (int readable)
        !          2603:      Print the readline variable names and their current values to
        !          2604:      `rl_outstream'.  If READABLE is non-zero, the list is formatted in
        !          2605:      such a way that it can be made part of an `inputrc' file and
        !          2606:      re-read.
        !          2607: 
        !          2608:  -- Function: int rl_set_paren_blink_timeout (int u)
        !          2609:      Set the time interval (in microseconds) that Readline waits when
        !          2610:      showing a balancing character when `blink-matching-paren' has been
        !          2611:      enabled.
        !          2612: 
        !          2613:  -- Function: char * rl_get_termcap (const char *cap)
        !          2614:      Retrieve the string value of the termcap capability CAP.  Readline
        !          2615:      fetches the termcap entry for the current terminal name and uses
        !          2616:      those capabilities to move around the screen line and perform other
        !          2617:      terminal-specific operations, like erasing a line.  Readline does
        !          2618:      not use all of a terminal's capabilities, and this function will
        !          2619:      return values for only those capabilities Readline uses.
        !          2620: 
        !          2621:  -- Function: void rl_clear_history (void)
        !          2622:      Clear the history list by deleting all of the entries, in the same
        !          2623:      manner as the History library's `clear_history()' function.  This
        !          2624:      differs from `clear_history' because it frees private data
        !          2625:      Readline saves in the history list.
        !          2626: 
        !          2627: 
        !          2628: File: readline.info,  Node: Alternate Interface,  Next: A Readline Example,  Prev: Miscellaneous Functions,  Up: Readline Convenience Functions
        !          2629: 
        !          2630: 2.4.12 Alternate Interface
        !          2631: --------------------------
        !          2632: 
        !          2633: An alternate interface is available to plain `readline()'.  Some
        !          2634: applications need to interleave keyboard I/O with file, device, or
        !          2635: window system I/O, typically by using a main loop to `select()' on
        !          2636: various file descriptors.  To accommodate this need, readline can also
        !          2637: be invoked as a `callback' function from an event loop.  There are
        !          2638: functions available to make this easy.
        !          2639: 
        !          2640:  -- Function: void rl_callback_handler_install (const char *prompt,
        !          2641:           rl_vcpfunc_t *lhandler)
        !          2642:      Set up the terminal for readline I/O and display the initial
        !          2643:      expanded value of PROMPT.  Save the value of LHANDLER to use as a
        !          2644:      handler function to call when a complete line of input has been
        !          2645:      entered.  The handler function receives the text of the line as an
        !          2646:      argument.
        !          2647: 
        !          2648:  -- Function: void rl_callback_read_char (void)
        !          2649:      Whenever an application determines that keyboard input is
        !          2650:      available, it should call `rl_callback_read_char()', which will
        !          2651:      read the next character from the current input source.  If that
        !          2652:      character completes the line, `rl_callback_read_char' will invoke
        !          2653:      the LHANDLER function installed by `rl_callback_handler_install'
        !          2654:      to process the line.  Before calling the LHANDLER function, the
        !          2655:      terminal settings are reset to the values they had before calling
        !          2656:      `rl_callback_handler_install'.  If the LHANDLER function returns,
        !          2657:      and the line handler remains installed, the terminal settings are
        !          2658:      modified for Readline's use again.  `EOF' is indicated by calling
        !          2659:      LHANDLER with a `NULL' line.
        !          2660: 
        !          2661:  -- Function: void rl_callback_handler_remove (void)
        !          2662:      Restore the terminal to its initial state and remove the line
        !          2663:      handler.  This may be called from within a callback as well as
        !          2664:      independently.  If the LHANDLER installed by
        !          2665:      `rl_callback_handler_install' does not exit the program, either
        !          2666:      this function or the function referred to by the value of
        !          2667:      `rl_deprep_term_function' should be called before the program
        !          2668:      exits to reset the terminal settings.
        !          2669: 
        !          2670: 
        !          2671: File: readline.info,  Node: A Readline Example,  Next: Alternate Interface Example,  Prev: Alternate Interface,  Up: Readline Convenience Functions
        !          2672: 
        !          2673: 2.4.13 A Readline Example
        !          2674: -------------------------
        !          2675: 
        !          2676: Here is a function which changes lowercase characters to their uppercase
        !          2677: equivalents, and uppercase characters to lowercase.  If this function
        !          2678: was bound to `M-c', then typing `M-c' would change the case of the
        !          2679: character under point.  Typing `M-1 0 M-c' would change the case of the
        !          2680: following 10 characters, leaving the cursor on the last character
        !          2681: changed.
        !          2682: 
        !          2683:      /* Invert the case of the COUNT following characters. */
        !          2684:      int
        !          2685:      invert_case_line (count, key)
        !          2686:           int count, key;
        !          2687:      {
        !          2688:        register int start, end, i;
        !          2689: 
        !          2690:        start = rl_point;
        !          2691: 
        !          2692:        if (rl_point >= rl_end)
        !          2693:          return (0);
        !          2694: 
        !          2695:        if (count < 0)
        !          2696:          {
        !          2697:            direction = -1;
        !          2698:            count = -count;
        !          2699:          }
        !          2700:        else
        !          2701:          direction = 1;
        !          2702: 
        !          2703:        /* Find the end of the range to modify. */
        !          2704:        end = start + (count * direction);
        !          2705: 
        !          2706:        /* Force it to be within range. */
        !          2707:        if (end > rl_end)
        !          2708:          end = rl_end;
        !          2709:        else if (end < 0)
        !          2710:          end = 0;
        !          2711: 
        !          2712:        if (start == end)
        !          2713:          return (0);
        !          2714: 
        !          2715:        if (start > end)
        !          2716:          {
        !          2717:            int temp = start;
        !          2718:            start = end;
        !          2719:            end = temp;
        !          2720:          }
        !          2721: 
        !          2722:        /* Tell readline that we are modifying the line,
        !          2723:           so it will save the undo information. */
        !          2724:        rl_modifying (start, end);
        !          2725: 
        !          2726:        for (i = start; i != end; i++)
        !          2727:          {
        !          2728:            if (_rl_uppercase_p (rl_line_buffer[i]))
        !          2729:              rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
        !          2730:            else if (_rl_lowercase_p (rl_line_buffer[i]))
        !          2731:              rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
        !          2732:          }
        !          2733:        /* Move point to on top of the last character changed. */
        !          2734:        rl_point = (direction == 1) ? end - 1 : start;
        !          2735:        return (0);
        !          2736:      }
        !          2737: 
        !          2738: 
        !          2739: File: readline.info,  Node: Alternate Interface Example,  Prev: A Readline Example,  Up: Readline Convenience Functions
        !          2740: 
        !          2741: 2.4.14 Alternate Interface Example
        !          2742: ----------------------------------
        !          2743: 
        !          2744: Here is a complete program that illustrates Readline's alternate
        !          2745: interface.  It reads lines from the terminal and displays them,
        !          2746: providing the standard history and TAB completion functions.  It
        !          2747: understands the EOF character or "exit" to exit the program.
        !          2748: 
        !          2749:      /* Standard include files. stdio.h is required. */
        !          2750:      #include <stdlib.h>
        !          2751:      #include <unistd.h>
        !          2752: 
        !          2753:      /* Used for select(2) */
        !          2754:      #include <sys/types.h>
        !          2755:      #include <sys/select.h>
        !          2756: 
        !          2757:      #include <stdio.h>
        !          2758: 
        !          2759:      /* Standard readline include files. */
        !          2760:      #include <readline/readline.h>
        !          2761:      #include <readline/history.h>
        !          2762: 
        !          2763:      static void cb_linehandler (char *);
        !          2764: 
        !          2765:      int running;
        !          2766:      const char *prompt = "rltest$ ";
        !          2767: 
        !          2768:      /* Callback function called for each line when accept-line executed, EOF
        !          2769:         seen, or EOF character read.  This sets a flag and returns; it could
        !          2770:         also call exit(3). */
        !          2771:      static void
        !          2772:      cb_linehandler (char *line)
        !          2773:      {
        !          2774:        /* Can use ^D (stty eof) or `exit' to exit. */
        !          2775:        if (line == NULL || strcmp (line, "exit") == 0)
        !          2776:          {
        !          2777:            if (line == 0)
        !          2778:              printf ("\n");
        !          2779:            printf ("exit\n");
        !          2780:            /* This function needs to be called to reset the terminal settings,
        !          2781:               and calling it from the line handler keeps one extra prompt from
        !          2782:               being displayed. */
        !          2783:            rl_callback_handler_remove ();
        !          2784: 
        !          2785:            running = 0;
        !          2786:          }
        !          2787:        else
        !          2788:          {
        !          2789:            if (*line)
        !          2790:              add_history (line);
        !          2791:            printf ("input line: %s\n", line);
        !          2792:            free (line);
        !          2793:          }
        !          2794:      }
        !          2795: 
        !          2796:      int
        !          2797:      main (int c, char **v)
        !          2798:      {
        !          2799:        fd_set fds;
        !          2800:        int r;
        !          2801: 
        !          2802:        /* Install the line handler. */
        !          2803:        rl_callback_handler_install (prompt, cb_linehandler);
        !          2804: 
        !          2805:        /* Enter a simple event loop.  This waits until something is available
        !          2806:           to read on readline's input stream (defaults to standard input) and
        !          2807:           calls the builtin character read callback to read it.  It does not
        !          2808:           have to modify the user's terminal settings. */
        !          2809:        running = 1;
        !          2810:        while (running)
        !          2811:          {
        !          2812:            FD_ZERO (&fds);
        !          2813:            FD_SET (fileno (rl_instream), &fds);
        !          2814: 
        !          2815:            r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
        !          2816:            if (r < 0)
        !          2817:              {
        !          2818:                perror ("rltest: select");
        !          2819:                rl_callback_handler_remove ();
        !          2820:                break;
        !          2821:              }
        !          2822: 
        !          2823:            if (FD_ISSET (fileno (rl_instream), &fds))
        !          2824:              rl_callback_read_char ();
        !          2825:          }
        !          2826: 
        !          2827:        printf ("rltest: Event loop has exited\n");
        !          2828:        return 0;
        !          2829:      }
        !          2830: 
        !          2831: 
        !          2832: File: readline.info,  Node: Readline Signal Handling,  Next: Custom Completers,  Prev: Readline Convenience Functions,  Up: Programming with GNU Readline
        !          2833: 
        !          2834: 2.5 Readline Signal Handling
        !          2835: ============================
        !          2836: 
        !          2837: Signals are asynchronous events sent to a process by the Unix kernel,
        !          2838: sometimes on behalf of another process.  They are intended to indicate
        !          2839: exceptional events, like a user pressing the interrupt key on his
        !          2840: terminal, or a network connection being broken.  There is a class of
        !          2841: signals that can be sent to the process currently reading input from
        !          2842: the keyboard.  Since Readline changes the terminal attributes when it
        !          2843: is called, it needs to perform special processing when such a signal is
        !          2844: received in order to restore the terminal to a sane state, or provide
        !          2845: application writers with functions to do so manually.
        !          2846: 
        !          2847:    Readline contains an internal signal handler that is installed for a
        !          2848: number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGHUP', `SIGALRM',
        !          2849: `SIGTSTP', `SIGTTIN', and `SIGTTOU').  When one of these signals is
        !          2850: received, the signal handler will reset the terminal attributes to
        !          2851: those that were in effect before `readline()' was called, reset the
        !          2852: signal handling to what it was before `readline()' was called, and
        !          2853: resend the signal to the calling application.  If and when the calling
        !          2854: application's signal handler returns, Readline will reinitialize the
        !          2855: terminal and continue to accept input.  When a `SIGINT' is received,
        !          2856: the Readline signal handler performs some additional work, which will
        !          2857: cause any partially-entered line to be aborted (see the description of
        !          2858: `rl_free_line_state()' below).
        !          2859: 
        !          2860:    There is an additional Readline signal handler, for `SIGWINCH', which
        !          2861: the kernel sends to a process whenever the terminal's size changes (for
        !          2862: example, if a user resizes an `xterm').  The Readline `SIGWINCH'
        !          2863: handler updates Readline's internal screen size information, and then
        !          2864: calls any `SIGWINCH' signal handler the calling application has
        !          2865: installed.  Readline calls the application's `SIGWINCH' signal handler
        !          2866: without resetting the terminal to its original state.  If the
        !          2867: application's signal handler does more than update its idea of the
        !          2868: terminal size and return (for example, a `longjmp' back to a main
        !          2869: processing loop), it _must_ call `rl_cleanup_after_signal()' (described
        !          2870: below), to restore the terminal state.
        !          2871: 
        !          2872:    Readline provides two variables that allow application writers to
        !          2873: control whether or not it will catch certain signals and act on them
        !          2874: when they are received.  It is important that applications change the
        !          2875: values of these variables only when calling `readline()', not in a
        !          2876: signal handler, so Readline's internal signal state is not corrupted.
        !          2877: 
        !          2878:  -- Variable: int rl_catch_signals
        !          2879:      If this variable is non-zero, Readline will install signal
        !          2880:      handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGHUP', `SIGALRM',
        !          2881:      `SIGTSTP', `SIGTTIN', and `SIGTTOU'.
        !          2882: 
        !          2883:      The default value of `rl_catch_signals' is 1.
        !          2884: 
        !          2885:  -- Variable: int rl_catch_sigwinch
        !          2886:      If this variable is set to a non-zero value, Readline will install
        !          2887:      a signal handler for `SIGWINCH'.
        !          2888: 
        !          2889:      The default value of `rl_catch_sigwinch' is 1.
        !          2890: 
        !          2891:  -- Variable: int rl_change_environment
        !          2892:      If this variable is set to a non-zero value, and Readline is
        !          2893:      handling `SIGWINCH', Readline will modify the LINES and COLUMNS
        !          2894:      environment variables upon receipt of a `SIGWINCH'
        !          2895: 
        !          2896:      The default value of `rl_change_environment' is 1.
        !          2897: 
        !          2898:    If an application does not wish to have Readline catch any signals,
        !          2899: or to handle signals other than those Readline catches (`SIGHUP', for
        !          2900: example), Readline provides convenience functions to do the necessary
        !          2901: terminal and internal state cleanup upon receipt of a signal.
        !          2902: 
        !          2903:  -- Function: void rl_cleanup_after_signal (void)
        !          2904:      This function will reset the state of the terminal to what it was
        !          2905:      before `readline()' was called, and remove the Readline signal
        !          2906:      handlers for all signals, depending on the values of
        !          2907:      `rl_catch_signals' and `rl_catch_sigwinch'.
        !          2908: 
        !          2909:  -- Function: void rl_free_line_state (void)
        !          2910:      This will free any partial state associated with the current input
        !          2911:      line (undo information, any partial history entry, any
        !          2912:      partially-entered keyboard macro, and any partially-entered
        !          2913:      numeric argument).  This should be called before
        !          2914:      `rl_cleanup_after_signal()'.  The Readline signal handler for
        !          2915:      `SIGINT' calls this to abort the current input line.
        !          2916: 
        !          2917:  -- Function: void rl_reset_after_signal (void)
        !          2918:      This will reinitialize the terminal and reinstall any Readline
        !          2919:      signal handlers, depending on the values of `rl_catch_signals' and
        !          2920:      `rl_catch_sigwinch'.
        !          2921: 
        !          2922:    If an application does not wish Readline to catch `SIGWINCH', it may
        !          2923: call `rl_resize_terminal()' or `rl_set_screen_size()' to force Readline
        !          2924: to update its idea of the terminal size when a `SIGWINCH' is received.
        !          2925: 
        !          2926:  -- Function: void rl_echo_signal_char (int sig)
        !          2927:      If an application wishes to install its own signal handlers, but
        !          2928:      still have readline display characters that generate signals,
        !          2929:      calling this function with SIG set to `SIGINT', `SIGQUIT', or
        !          2930:      `SIGTSTP' will display the character generating that signal.
        !          2931: 
        !          2932:  -- Function: void rl_resize_terminal (void)
        !          2933:      Update Readline's internal screen size by reading values from the
        !          2934:      kernel.
        !          2935: 
        !          2936:  -- Function: void rl_set_screen_size (int rows, int cols)
        !          2937:      Set Readline's idea of the terminal size to ROWS rows and COLS
        !          2938:      columns.  If either ROWS or COLUMNS is less than or equal to 0,
        !          2939:      Readline's idea of that terminal dimension is unchanged.
        !          2940: 
        !          2941:    If an application does not want to install a `SIGWINCH' handler, but
        !          2942: is still interested in the screen dimensions, Readline's idea of the
        !          2943: screen size may be queried.
        !          2944: 
        !          2945:  -- Function: void rl_get_screen_size (int *rows, int *cols)
        !          2946:      Return Readline's idea of the terminal's size in the variables
        !          2947:      pointed to by the arguments.
        !          2948: 
        !          2949:  -- Function: void rl_reset_screen_size (void)
        !          2950:      Cause Readline to reobtain the screen size and recalculate its
        !          2951:      dimensions.
        !          2952: 
        !          2953:    The following functions install and remove Readline's signal
        !          2954: handlers.
        !          2955: 
        !          2956:  -- Function: int rl_set_signals (void)
        !          2957:      Install Readline's signal handler for `SIGINT', `SIGQUIT',
        !          2958:      `SIGTERM', `SIGHUP', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU',
        !          2959:      and `SIGWINCH', depending on the values of `rl_catch_signals' and
        !          2960:      `rl_catch_sigwinch'.
        !          2961: 
        !          2962:  -- Function: int rl_clear_signals (void)
        !          2963:      Remove all of the Readline signal handlers installed by
        !          2964:      `rl_set_signals()'.
        !          2965: 
        !          2966: 
        !          2967: File: readline.info,  Node: Custom Completers,  Prev: Readline Signal Handling,  Up: Programming with GNU Readline
        !          2968: 
        !          2969: 2.6 Custom Completers
        !          2970: =====================
        !          2971: 
        !          2972: Typically, a program that reads commands from the user has a way of
        !          2973: disambiguating commands and data.  If your program is one of these, then
        !          2974: it can provide completion for commands, data, or both.  The following
        !          2975: sections describe how your program and Readline cooperate to provide
        !          2976: this service.
        !          2977: 
        !          2978: * Menu:
        !          2979: 
        !          2980: * How Completing Works::       The logic used to do completion.
        !          2981: * Completion Functions::       Functions provided by Readline.
        !          2982: * Completion Variables::       Variables which control completion.
        !          2983: * A Short Completion Example:: An example of writing completer subroutines.
        !          2984: 
        !          2985: 
        !          2986: File: readline.info,  Node: How Completing Works,  Next: Completion Functions,  Up: Custom Completers
        !          2987: 
        !          2988: 2.6.1 How Completing Works
        !          2989: --------------------------
        !          2990: 
        !          2991: In order to complete some text, the full list of possible completions
        !          2992: must be available.  That is, it is not possible to accurately expand a
        !          2993: partial word without knowing all of the possible words which make sense
        !          2994: in that context.  The Readline library provides the user interface to
        !          2995: completion, and two of the most common completion functions:  filename
        !          2996: and username.  For completing other types of text, you must write your
        !          2997: own completion function.  This section describes exactly what such
        !          2998: functions must do, and provides an example.
        !          2999: 
        !          3000:    There are three major functions used to perform completion:
        !          3001: 
        !          3002:   1. The user-interface function `rl_complete()'.  This function is
        !          3003:      called with the same arguments as other bindable Readline
        !          3004:      functions: COUNT and INVOKING_KEY.  It isolates the word to be
        !          3005:      completed and calls `rl_completion_matches()' to generate a list
        !          3006:      of possible completions.  It then either lists the possible
        !          3007:      completions, inserts the possible completions, or actually
        !          3008:      performs the completion, depending on which behavior is desired.
        !          3009: 
        !          3010:   2. The internal function `rl_completion_matches()' uses an
        !          3011:      application-supplied "generator" function to generate the list of
        !          3012:      possible matches, and then returns the array of these matches.
        !          3013:      The caller should place the address of its generator function in
        !          3014:      `rl_completion_entry_function'.
        !          3015: 
        !          3016:   3. The generator function is called repeatedly from
        !          3017:      `rl_completion_matches()', returning a string each time.  The
        !          3018:      arguments to the generator function are TEXT and STATE.  TEXT is
        !          3019:      the partial word to be completed.  STATE is zero the first time
        !          3020:      the function is called, allowing the generator to perform any
        !          3021:      necessary initialization, and a positive non-zero integer for each
        !          3022:      subsequent call.  The generator function returns `(char *)NULL' to
        !          3023:      inform `rl_completion_matches()' that there are no more
        !          3024:      possibilities left.  Usually the generator function computes the
        !          3025:      list of possible completions when STATE is zero, and returns them
        !          3026:      one at a time on subsequent calls.  Each string the generator
        !          3027:      function returns as a match must be allocated with `malloc()';
        !          3028:      Readline frees the strings when it has finished with them.  Such a
        !          3029:      generator function is referred to as an "application-specific
        !          3030:      completion function".
        !          3031: 
        !          3032: 
        !          3033:  -- Function: int rl_complete (int ignore, int invoking_key)
        !          3034:      Complete the word at or before point.  You have supplied the
        !          3035:      function that does the initial simple matching selection algorithm
        !          3036:      (see `rl_completion_matches()').  The default is to do filename
        !          3037:      completion.
        !          3038: 
        !          3039:  -- Variable: rl_compentry_func_t * rl_completion_entry_function
        !          3040:      This is a pointer to the generator function for
        !          3041:      `rl_completion_matches()'.  If the value of
        !          3042:      `rl_completion_entry_function' is `NULL' then the default filename
        !          3043:      generator function, `rl_filename_completion_function()', is used.
        !          3044:      An "application-specific completion function" is a function whose
        !          3045:      address is assigned to `rl_completion_entry_function' and whose
        !          3046:      return values are used to  generate possible completions.
        !          3047: 
        !          3048: 
        !          3049: File: readline.info,  Node: Completion Functions,  Next: Completion Variables,  Prev: How Completing Works,  Up: Custom Completers
        !          3050: 
        !          3051: 2.6.2 Completion Functions
        !          3052: --------------------------
        !          3053: 
        !          3054: Here is the complete list of callable completion functions present in
        !          3055: Readline.
        !          3056: 
        !          3057:  -- Function: int rl_complete_internal (int what_to_do)
        !          3058:      Complete the word at or before point.  WHAT_TO_DO says what to do
        !          3059:      with the completion.  A value of `?' means list the possible
        !          3060:      completions.  `TAB' means do standard completion.  `*' means
        !          3061:      insert all of the possible completions.  `!' means to display all
        !          3062:      of the possible completions, if there is more than one, as well as
        !          3063:      performing partial completion.  `@' is similar to `!', but
        !          3064:      possible completions are not listed if the possible completions
        !          3065:      share a common prefix.
        !          3066: 
        !          3067:  -- Function: int rl_complete (int ignore, int invoking_key)
        !          3068:      Complete the word at or before point.  You have supplied the
        !          3069:      function that does the initial simple matching selection algorithm
        !          3070:      (see `rl_completion_matches()' and `rl_completion_entry_function').
        !          3071:      The default is to do filename completion.  This calls
        !          3072:      `rl_complete_internal()' with an argument depending on
        !          3073:      INVOKING_KEY.
        !          3074: 
        !          3075:  -- Function: int rl_possible_completions (int count, int invoking_key)
        !          3076:      List the possible completions.  See description of `rl_complete
        !          3077:      ()'.  This calls `rl_complete_internal()' with an argument of `?'.
        !          3078: 
        !          3079:  -- Function: int rl_insert_completions (int count, int invoking_key)
        !          3080:      Insert the list of possible completions into the line, deleting the
        !          3081:      partially-completed word.  See description of `rl_complete()'.
        !          3082:      This calls `rl_complete_internal()' with an argument of `*'.
        !          3083: 
        !          3084:  -- Function: int rl_completion_mode (rl_command_func_t *cfunc)
        !          3085:      Returns the appropriate value to pass to `rl_complete_internal()'
        !          3086:      depending on whether CFUNC was called twice in succession and the
        !          3087:      values of the `show-all-if-ambiguous' and `show-all-if-unmodified'
        !          3088:      variables.  Application-specific completion functions may use this
        !          3089:      function to present the same interface as `rl_complete()'.
        !          3090: 
        !          3091:  -- Function: char ** rl_completion_matches (const char *text,
        !          3092:           rl_compentry_func_t *entry_func)
        !          3093:      Returns an array of strings which is a list of completions for
        !          3094:      TEXT.  If there are no completions, returns `NULL'.  The first
        !          3095:      entry in the returned array is the substitution for TEXT.  The
        !          3096:      remaining entries are the possible completions.  The array is
        !          3097:      terminated with a `NULL' pointer.
        !          3098: 
        !          3099:      ENTRY_FUNC is a function of two args, and returns a `char *'.  The
        !          3100:      first argument is TEXT.  The second is a state argument; it is
        !          3101:      zero on the first call, and non-zero on subsequent calls.
        !          3102:      ENTRY_FUNC returns a `NULL'  pointer to the caller when there are
        !          3103:      no more matches.
        !          3104: 
        !          3105:  -- Function: char * rl_filename_completion_function (const char *text,
        !          3106:           int state)
        !          3107:      A generator function for filename completion in the general case.
        !          3108:      TEXT is a partial filename.  The Bash source is a useful reference
        !          3109:      for writing application-specific completion functions (the Bash
        !          3110:      completion functions call this and other Readline functions).
        !          3111: 
        !          3112:  -- Function: char * rl_username_completion_function (const char *text,
        !          3113:           int state)
        !          3114:      A completion generator for usernames.  TEXT contains a partial
        !          3115:      username preceded by a random character (usually `~').  As with all
        !          3116:      completion generators, STATE is zero on the first call and non-zero
        !          3117:      for subsequent calls.
        !          3118: 
        !          3119: 
        !          3120: File: readline.info,  Node: Completion Variables,  Next: A Short Completion Example,  Prev: Completion Functions,  Up: Custom Completers
        !          3121: 
        !          3122: 2.6.3 Completion Variables
        !          3123: --------------------------
        !          3124: 
        !          3125:  -- Variable: rl_compentry_func_t * rl_completion_entry_function
        !          3126:      A pointer to the generator function for `rl_completion_matches()'.
        !          3127:      `NULL' means to use `rl_filename_completion_function()', the
        !          3128:      default filename completer.
        !          3129: 
        !          3130:  -- Variable: rl_completion_func_t * rl_attempted_completion_function
        !          3131:      A pointer to an alternative function to create matches.  The
        !          3132:      function is called with TEXT, START, and END.  START and END are
        !          3133:      indices in `rl_line_buffer' defining the boundaries of TEXT, which
        !          3134:      is a character string.  If this function exists and returns
        !          3135:      `NULL', or if this variable is set to `NULL', then `rl_complete()'
        !          3136:      will call the value of `rl_completion_entry_function' to generate
        !          3137:      matches, otherwise the array of strings returned will be used.  If
        !          3138:      this function sets the `rl_attempted_completion_over' variable to
        !          3139:      a non-zero value, Readline will not perform its default completion
        !          3140:      even if this function returns no matches.
        !          3141: 
        !          3142:  -- Variable: rl_quote_func_t * rl_filename_quoting_function
        !          3143:      A pointer to a function that will quote a filename in an
        !          3144:      application-specific fashion.  This is called if filename
        !          3145:      completion is being attempted and one of the characters in
        !          3146:      `rl_filename_quote_characters' appears in a completed filename.
        !          3147:      The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER.
        !          3148:      The TEXT is the filename to be quoted.  The MATCH_TYPE is either
        !          3149:      `SINGLE_MATCH', if there is only one completion match, or
        !          3150:      `MULT_MATCH'.  Some functions use this to decide whether or not to
        !          3151:      insert a closing quote character.  The QUOTE_POINTER is a pointer
        !          3152:      to any opening quote character the user typed.  Some functions
        !          3153:      choose to reset this character.
        !          3154: 
        !          3155:  -- Variable: rl_dequote_func_t * rl_filename_dequoting_function
        !          3156:      A pointer to a function that will remove application-specific
        !          3157:      quoting characters from a filename before completion is attempted,
        !          3158:      so those characters do not interfere with matching the text
        !          3159:      against names in the filesystem.  It is called with TEXT, the text
        !          3160:      of the word to be dequoted, and QUOTE_CHAR, which is the quoting
        !          3161:      character that delimits the filename (usually `'' or `"').  If
        !          3162:      QUOTE_CHAR is zero, the filename was not in an embedded string.
        !          3163: 
        !          3164:  -- Variable: rl_linebuf_func_t * rl_char_is_quoted_p
        !          3165:      A pointer to a function to call that determines whether or not a
        !          3166:      specific character in the line buffer is quoted, according to
        !          3167:      whatever quoting mechanism the program calling Readline uses.  The
        !          3168:      function is called with two arguments: TEXT, the text of the line,
        !          3169:      and INDEX, the index of the character in the line.  It is used to
        !          3170:      decide whether a character found in
        !          3171:      `rl_completer_word_break_characters' should be used to break words
        !          3172:      for the completer.
        !          3173: 
        !          3174:  -- Variable: rl_compignore_func_t * rl_ignore_some_completions_function
        !          3175:      This function, if defined, is called by the completer when real
        !          3176:      filename completion is done, after all the matching names have
        !          3177:      been generated.  It is passed a `NULL' terminated array of matches.
        !          3178:      The first element (`matches[0]') is the maximal substring common
        !          3179:      to all matches. This function can re-arrange the list of matches
        !          3180:      as required, but each element deleted from the array must be freed.
        !          3181: 
        !          3182:  -- Variable: rl_icppfunc_t * rl_directory_completion_hook
        !          3183:      This function, if defined, is allowed to modify the directory
        !          3184:      portion of filenames Readline completes.  It could be used to
        !          3185:      expand symbolic links or shell variables in pathnames.  It is
        !          3186:      called with the address of a string (the current directory name)
        !          3187:      as an argument, and may modify that string.  If the string is
        !          3188:      replaced with a new string, the old value should be freed.  Any
        !          3189:      modified directory name should have a trailing slash.  The
        !          3190:      modified value will be used as part of the completion, replacing
        !          3191:      the directory portion of the pathname the user typed.  At the
        !          3192:      least, even if no other expansion is performed, this function
        !          3193:      should remove any quote characters from the directory name,
        !          3194:      because its result will be passed directly to `opendir()'.
        !          3195: 
        !          3196:      The directory completion hook returns an integer that should be
        !          3197:      non-zero if the function modifies its directory argument.  The
        !          3198:      function should not modify the directory argument if it returns 0.
        !          3199: 
        !          3200:  -- Variable: rl_icppfunc_t * rl_directory_rewrite_hook;
        !          3201:      If non-zero, this is the address of a function to call when
        !          3202:      completing a directory name.  This function takes the address of
        !          3203:      the directory name to be modified as an argument.  Unlike
        !          3204:      `rl_directory_completion_hook', it only modifies the directory
        !          3205:      name used in `opendir', not what is displayed when the possible
        !          3206:      completions are printed or inserted.  It is called before
        !          3207:      rl_directory_completion_hook.  At the least, even if no other
        !          3208:      expansion is performed, this function should remove any quote
        !          3209:      characters from the directory name, because its result will be
        !          3210:      passed directly to `opendir()'.
        !          3211: 
        !          3212:      The directory rewrite hook returns an integer that should be
        !          3213:      non-zero if the function modfies its directory argument.  The
        !          3214:      function should not modify the directory argument if it returns 0.
        !          3215: 
        !          3216:  -- Variable: rl_icppfunc_t * rl_filename_stat_hook
        !          3217:      If non-zero, this is the address of a function for the completer to
        !          3218:      call before deciding which character to append to a completed name.
        !          3219:      This function modifies its filename name argument, and the
        !          3220:      modified value is passed to `stat()' to determine the file's type
        !          3221:      and characteristics.  This function does not need to remove quote
        !          3222:      characters from the filename.
        !          3223: 
        !          3224:      The stat hook returns an integer that should be non-zero if the
        !          3225:      function modfies its directory argument.  The function should not
        !          3226:      modify the directory argument if it returns 0.
        !          3227: 
        !          3228:  -- Variable: rl_dequote_func_t * rl_filename_rewrite_hook
        !          3229:      If non-zero, this is the address of a function called when reading
        !          3230:      directory entries from the filesystem for completion and comparing
        !          3231:      them to the partial word to be completed.  The function should
        !          3232:      perform any necessary application or system-specific conversion on
        !          3233:      the filename, such as converting between character sets or
        !          3234:      converting from a filesystem format to a character input format.
        !          3235:      The function takes two arguments: FNAME, the filename to be
        !          3236:      converted, and FNLEN, its length in bytes.  It must either return
        !          3237:      its first argument (if no conversion takes place) or the converted
        !          3238:      filename in newly-allocated memory.  The converted form is used to
        !          3239:      compare against the word to be completed, and, if it matches, is
        !          3240:      added to the list of matches.  Readline will free the allocated
        !          3241:      string.
        !          3242: 
        !          3243:  -- Variable: rl_compdisp_func_t * rl_completion_display_matches_hook
        !          3244:      If non-zero, then this is the address of a function to call when
        !          3245:      completing a word would normally display the list of possible
        !          3246:      matches.  This function is called in lieu of Readline displaying
        !          3247:      the list.  It takes three arguments: (`char **'MATCHES, `int'
        !          3248:      NUM_MATCHES, `int' MAX_LENGTH) where MATCHES is the array of
        !          3249:      matching strings, NUM_MATCHES is the number of strings in that
        !          3250:      array, and MAX_LENGTH is the length of the longest string in that
        !          3251:      array.  Readline provides a convenience function,
        !          3252:      `rl_display_match_list', that takes care of doing the display to
        !          3253:      Readline's output stream.  That function may be called from this
        !          3254:      hook.
        !          3255: 
        !          3256:  -- Variable: const char * rl_basic_word_break_characters
        !          3257:      The basic list of characters that signal a break between words for
        !          3258:      the completer routine.  The default value of this variable is the
        !          3259:      characters which break words for completion in Bash: `"
        !          3260:      \t\n\"\\'`@$><=;|&{("'.
        !          3261: 
        !          3262:  -- Variable: const char * rl_basic_quote_characters
        !          3263:      A list of quote characters which can cause a word break.
        !          3264: 
        !          3265:  -- Variable: const char * rl_completer_word_break_characters
        !          3266:      The list of characters that signal a break between words for
        !          3267:      `rl_complete_internal()'.  The default list is the value of
        !          3268:      `rl_basic_word_break_characters'.
        !          3269: 
        !          3270:  -- Variable: rl_cpvfunc_t * rl_completion_word_break_hook
        !          3271:      If non-zero, this is the address of a function to call when
        !          3272:      Readline is deciding where to separate words for word completion.
        !          3273:      It should return a character string like
        !          3274:      `rl_completer_word_break_characters' to be used to perform the
        !          3275:      current completion.  The function may choose to set
        !          3276:      `rl_completer_word_break_characters' itself.  If the function
        !          3277:      returns `NULL', `rl_completer_word_break_characters' is used.
        !          3278: 
        !          3279:  -- Variable: const char * rl_completer_quote_characters
        !          3280:      A list of characters which can be used to quote a substring of the
        !          3281:      line.  Completion occurs on the entire substring, and within the
        !          3282:      substring `rl_completer_word_break_characters' are treated as any
        !          3283:      other character, unless they also appear within this list.
        !          3284: 
        !          3285:  -- Variable: const char * rl_filename_quote_characters
        !          3286:      A list of characters that cause a filename to be quoted by the
        !          3287:      completer when they appear in a completed filename.  The default
        !          3288:      is the null string.
        !          3289: 
        !          3290:  -- Variable: const char * rl_special_prefixes
        !          3291:      The list of characters that are word break characters, but should
        !          3292:      be left in TEXT when it is passed to the completion function.
        !          3293:      Programs can use this to help determine what kind of completing to
        !          3294:      do.  For instance, Bash sets this variable to "$@" so that it can
        !          3295:      complete shell variables and hostnames.
        !          3296: 
        !          3297:  -- Variable: int rl_completion_query_items
        !          3298:      Up to this many items will be displayed in response to a
        !          3299:      possible-completions call.  After that, readline asks the user if
        !          3300:      she is sure she wants to see them all.  The default value is 100.
        !          3301:      A negative value indicates that Readline should never ask the user.
        !          3302: 
        !          3303:  -- Variable: int rl_completion_append_character
        !          3304:      When a single completion alternative matches at the end of the
        !          3305:      command line, this character is appended to the inserted
        !          3306:      completion text.  The default is a space character (` ').  Setting
        !          3307:      this to the null character (`\0') prevents anything being appended
        !          3308:      automatically.  This can be changed in application-specific
        !          3309:      completion functions to provide the "most sensible word separator
        !          3310:      character" according to an application-specific command line
        !          3311:      syntax specification.
        !          3312: 
        !          3313:  -- Variable: int rl_completion_suppress_append
        !          3314:      If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to
        !          3315:      matches at the end of the command line, as described above.  It is
        !          3316:      set to 0 before any application-specific completion function is
        !          3317:      called, and may only be changed within such a function.
        !          3318: 
        !          3319:  -- Variable: int rl_completion_quote_character
        !          3320:      When Readline is completing quoted text, as delimited by one of the
        !          3321:      characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable
        !          3322:      to the quoting character found.  This is set before any
        !          3323:      application-specific completion function is called.
        !          3324: 
        !          3325:  -- Variable: int rl_completion_suppress_quote
        !          3326:      If non-zero, Readline does not append a matching quote character
        !          3327:      when performing completion on a quoted string.  It is set to 0
        !          3328:      before any application-specific completion function is called, and
        !          3329:      may only be changed within such a function.
        !          3330: 
        !          3331:  -- Variable: int rl_completion_found_quote
        !          3332:      When Readline is completing quoted text, it sets this variable to
        !          3333:      a non-zero value if the word being completed contains or is
        !          3334:      delimited by any quoting characters, including backslashes.  This
        !          3335:      is set before any application-specific completion function is
        !          3336:      called.
        !          3337: 
        !          3338:  -- Variable: int rl_completion_mark_symlink_dirs
        !          3339:      If non-zero, a slash will be appended to completed filenames that
        !          3340:      are symbolic links to directory names, subject to the value of the
        !          3341:      user-settable MARK-DIRECTORIES variable.  This variable exists so
        !          3342:      that application-specific completion functions can override the
        !          3343:      user's global preference (set via the MARK-SYMLINKED-DIRECTORIES
        !          3344:      Readline variable) if appropriate.  This variable is set to the
        !          3345:      user's preference before any application-specific completion
        !          3346:      function is called, so unless that function modifies the value,
        !          3347:      the user's preferences are honored.
        !          3348: 
        !          3349:  -- Variable: int rl_ignore_completion_duplicates
        !          3350:      If non-zero, then duplicates in the matches are removed.  The
        !          3351:      default is 1.
        !          3352: 
        !          3353:  -- Variable: int rl_filename_completion_desired
        !          3354:      Non-zero means that the results of the matches are to be treated as
        !          3355:      filenames.  This is _always_ zero when completion is attempted,
        !          3356:      and can only be changed within an application-specific completion
        !          3357:      function.  If it is set to a non-zero value by such a function,
        !          3358:      directory names have a slash appended and Readline attempts to
        !          3359:      quote completed filenames if they contain any characters in
        !          3360:      `rl_filename_quote_characters' and `rl_filename_quoting_desired'
        !          3361:      is set to a non-zero value.
        !          3362: 
        !          3363:  -- Variable: int rl_filename_quoting_desired
        !          3364:      Non-zero means that the results of the matches are to be quoted
        !          3365:      using double quotes (or an application-specific quoting mechanism)
        !          3366:      if the completed filename contains any characters in
        !          3367:      `rl_filename_quote_chars'.  This is _always_ non-zero when
        !          3368:      completion is attempted, and can only be changed within an
        !          3369:      application-specific completion function.  The quoting is effected
        !          3370:      via a call to the function pointed to by
        !          3371:      `rl_filename_quoting_function'.
        !          3372: 
        !          3373:  -- Variable: int rl_attempted_completion_over
        !          3374:      If an application-specific completion function assigned to
        !          3375:      `rl_attempted_completion_function' sets this variable to a non-zero
        !          3376:      value, Readline will not perform its default filename completion
        !          3377:      even if the application's completion function returns no matches.
        !          3378:      It should be set only by an application's completion function.
        !          3379: 
        !          3380:  -- Variable: int rl_sort_completion_matches
        !          3381:      If an application sets this variable to 0, Readline will not sort
        !          3382:      the list of completions (which implies that it cannot remove any
        !          3383:      duplicate completions).  The default value is 1, which means that
        !          3384:      Readline will sort the completions and, depending on the value of
        !          3385:      `rl_ignore_completion_duplicates', will attempt to remove duplicate
        !          3386:      matches.
        !          3387: 
        !          3388:  -- Variable: int rl_completion_type
        !          3389:      Set to a character describing the type of completion Readline is
        !          3390:      currently attempting; see the description of
        !          3391:      `rl_complete_internal()' (*note Completion Functions::) for the
        !          3392:      list of characters.  This is set to the appropriate value before
        !          3393:      any application-specific completion function is called, allowing
        !          3394:      such functions to present the same interface as `rl_complete()'.
        !          3395: 
        !          3396:  -- Variable: int rl_completion_invoking_key
        !          3397:      Set to the final character in the key sequence that invoked one of
        !          3398:      the completion functions that call `rl_complete_internal()'.  This
        !          3399:      is set to the appropriate value before any application-specific
        !          3400:      completion function is called.
        !          3401: 
        !          3402:  -- Variable: int rl_inhibit_completion
        !          3403:      If this variable is non-zero, completion is inhibited.  The
        !          3404:      completion character will be inserted as any other bound to
        !          3405:      `self-insert'.
        !          3406: 
        !          3407: 
        !          3408: File: readline.info,  Node: A Short Completion Example,  Prev: Completion Variables,  Up: Custom Completers
        !          3409: 
        !          3410: 2.6.4 A Short Completion Example
        !          3411: --------------------------------
        !          3412: 
        !          3413: Here is a small application demonstrating the use of the GNU Readline
        !          3414: library.  It is called `fileman', and the source code resides in
        !          3415: `examples/fileman.c'.  This sample application provides completion of
        !          3416: command names, line editing features, and access to the history list.
        !          3417: 
        !          3418:      /* fileman.c -- A tiny application which demonstrates how to use the
        !          3419:         GNU Readline library.  This application interactively allows users
        !          3420:         to manipulate files and their modes. */
        !          3421: 
        !          3422:      #ifdef HAVE_CONFIG_H
        !          3423:      #  include <config.h>
        !          3424:      #endif
        !          3425: 
        !          3426:      #include <sys/types.h>
        !          3427:      #ifdef HAVE_SYS_FILE_H
        !          3428:      #  include <sys/file.h>
        !          3429:      #endif
        !          3430:      #include <sys/stat.h>
        !          3431: 
        !          3432:      #ifdef HAVE_UNISTD_H
        !          3433:      #  include <unistd.h>
        !          3434:      #endif
        !          3435: 
        !          3436:      #include <fcntl.h>
        !          3437:      #include <stdio.h>
        !          3438:      #include <errno.h>
        !          3439: 
        !          3440:      #if defined (HAVE_STRING_H)
        !          3441:      #  include <string.h>
        !          3442:      #else /* !HAVE_STRING_H */
        !          3443:      #  include <strings.h>
        !          3444:      #endif /* !HAVE_STRING_H */
        !          3445: 
        !          3446:      #ifdef HAVE_STDLIB_H
        !          3447:      #  include <stdlib.h>
        !          3448:      #endif
        !          3449: 
        !          3450:      #include <time.h>
        !          3451: 
        !          3452:      #include <readline/readline.h>
        !          3453:      #include <readline/history.h>
        !          3454: 
        !          3455:      extern char *xmalloc PARAMS((size_t));
        !          3456: 
        !          3457:      /* The names of functions that actually do the manipulation. */
        !          3458:      int com_list PARAMS((char *));
        !          3459:      int com_view PARAMS((char *));
        !          3460:      int com_rename PARAMS((char *));
        !          3461:      int com_stat PARAMS((char *));
        !          3462:      int com_pwd PARAMS((char *));
        !          3463:      int com_delete PARAMS((char *));
        !          3464:      int com_help PARAMS((char *));
        !          3465:      int com_cd PARAMS((char *));
        !          3466:      int com_quit PARAMS((char *));
        !          3467: 
        !          3468:      /* A structure which contains information on the commands this program
        !          3469:         can understand. */
        !          3470: 
        !          3471:      typedef struct {
        !          3472:        char *name;                     /* User printable name of the function. */
        !          3473:        rl_icpfunc_t *func;             /* Function to call to do the job. */
        !          3474:        char *doc;                      /* Documentation for this function.  */
        !          3475:      } COMMAND;
        !          3476: 
        !          3477:      COMMAND commands[] = {
        !          3478:        { "cd", com_cd, "Change to directory DIR" },
        !          3479:        { "delete", com_delete, "Delete FILE" },
        !          3480:        { "help", com_help, "Display this text" },
        !          3481:        { "?", com_help, "Synonym for `help'" },
        !          3482:        { "list", com_list, "List files in DIR" },
        !          3483:        { "ls", com_list, "Synonym for `list'" },
        !          3484:        { "pwd", com_pwd, "Print the current working directory" },
        !          3485:        { "quit", com_quit, "Quit using Fileman" },
        !          3486:        { "rename", com_rename, "Rename FILE to NEWNAME" },
        !          3487:        { "stat", com_stat, "Print out statistics on FILE" },
        !          3488:        { "view", com_view, "View the contents of FILE" },
        !          3489:        { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
        !          3490:      };
        !          3491: 
        !          3492:      /* Forward declarations. */
        !          3493:      char *stripwhite ();
        !          3494:      COMMAND *find_command ();
        !          3495: 
        !          3496:      /* The name of this program, as taken from argv[0]. */
        !          3497:      char *progname;
        !          3498: 
        !          3499:      /* When non-zero, this global means the user is done using this program. */
        !          3500:      int done;
        !          3501: 
        !          3502:      char *
        !          3503:      dupstr (s)
        !          3504:           char *s;
        !          3505:      {
        !          3506:        char *r;
        !          3507: 
        !          3508:        r = xmalloc (strlen (s) + 1);
        !          3509:        strcpy (r, s);
        !          3510:        return (r);
        !          3511:      }
        !          3512: 
        !          3513:      main (argc, argv)
        !          3514:           int argc;
        !          3515:           char **argv;
        !          3516:      {
        !          3517:        char *line, *s;
        !          3518: 
        !          3519:        progname = argv[0];
        !          3520: 
        !          3521:        initialize_readline (); /* Bind our completer. */
        !          3522: 
        !          3523:        /* Loop reading and executing lines until the user quits. */
        !          3524:        for ( ; done == 0; )
        !          3525:          {
        !          3526:            line = readline ("FileMan: ");
        !          3527: 
        !          3528:            if (!line)
        !          3529:              break;
        !          3530: 
        !          3531:            /* Remove leading and trailing whitespace from the line.
        !          3532:               Then, if there is anything left, add it to the history list
        !          3533:               and execute it. */
        !          3534:            s = stripwhite (line);
        !          3535: 
        !          3536:            if (*s)
        !          3537:              {
        !          3538:                add_history (s);
        !          3539:                execute_line (s);
        !          3540:              }
        !          3541: 
        !          3542:            free (line);
        !          3543:          }
        !          3544:        exit (0);
        !          3545:      }
        !          3546: 
        !          3547:      /* Execute a command line. */
        !          3548:      int
        !          3549:      execute_line (line)
        !          3550:           char *line;
        !          3551:      {
        !          3552:        register int i;
        !          3553:        COMMAND *command;
        !          3554:        char *word;
        !          3555: 
        !          3556:        /* Isolate the command word. */
        !          3557:        i = 0;
        !          3558:        while (line[i] && whitespace (line[i]))
        !          3559:          i++;
        !          3560:        word = line + i;
        !          3561: 
        !          3562:        while (line[i] && !whitespace (line[i]))
        !          3563:          i++;
        !          3564: 
        !          3565:        if (line[i])
        !          3566:          line[i++] = '\0';
        !          3567: 
        !          3568:        command = find_command (word);
        !          3569: 
        !          3570:        if (!command)
        !          3571:          {
        !          3572:            fprintf (stderr, "%s: No such command for FileMan.\n", word);
        !          3573:            return (-1);
        !          3574:          }
        !          3575: 
        !          3576:        /* Get argument to command, if any. */
        !          3577:        while (whitespace (line[i]))
        !          3578:          i++;
        !          3579: 
        !          3580:        word = line + i;
        !          3581: 
        !          3582:        /* Call the function. */
        !          3583:        return ((*(command->func)) (word));
        !          3584:      }
        !          3585: 
        !          3586:      /* Look up NAME as the name of a command, and return a pointer to that
        !          3587:         command.  Return a NULL pointer if NAME isn't a command name. */
        !          3588:      COMMAND *
        !          3589:      find_command (name)
        !          3590:           char *name;
        !          3591:      {
        !          3592:        register int i;
        !          3593: 
        !          3594:        for (i = 0; commands[i].name; i++)
        !          3595:          if (strcmp (name, commands[i].name) == 0)
        !          3596:            return (&commands[i]);
        !          3597: 
        !          3598:        return ((COMMAND *)NULL);
        !          3599:      }
        !          3600: 
        !          3601:      /* Strip whitespace from the start and end of STRING.  Return a pointer
        !          3602:         into STRING. */
        !          3603:      char *
        !          3604:      stripwhite (string)
        !          3605:           char *string;
        !          3606:      {
        !          3607:        register char *s, *t;
        !          3608: 
        !          3609:        for (s = string; whitespace (*s); s++)
        !          3610:          ;
        !          3611: 
        !          3612:        if (*s == 0)
        !          3613:          return (s);
        !          3614: 
        !          3615:        t = s + strlen (s) - 1;
        !          3616:        while (t > s && whitespace (*t))
        !          3617:          t--;
        !          3618:        *++t = '\0';
        !          3619: 
        !          3620:        return s;
        !          3621:      }
        !          3622: 
        !          3623:      /* **************************************************************** */
        !          3624:      /*                                                                  */
        !          3625:      /*                  Interface to Readline Completion                */
        !          3626:      /*                                                                  */
        !          3627:      /* **************************************************************** */
        !          3628: 
        !          3629:      char *command_generator PARAMS((const char *, int));
        !          3630:      char **fileman_completion PARAMS((const char *, int, int));
        !          3631: 
        !          3632:      /* Tell the GNU Readline library how to complete.  We want to try to complete
        !          3633:         on command names if this is the first word in the line, or on filenames
        !          3634:         if not. */
        !          3635:      initialize_readline ()
        !          3636:      {
        !          3637:        /* Allow conditional parsing of the ~/.inputrc file. */
        !          3638:        rl_readline_name = "FileMan";
        !          3639: 
        !          3640:        /* Tell the completer that we want a crack first. */
        !          3641:        rl_attempted_completion_function = fileman_completion;
        !          3642:      }
        !          3643: 
        !          3644:      /* Attempt to complete on the contents of TEXT.  START and END bound the
        !          3645:         region of rl_line_buffer that contains the word to complete.  TEXT is
        !          3646:         the word to complete.  We can use the entire contents of rl_line_buffer
        !          3647:         in case we want to do some simple parsing.  Return the array of matches,
        !          3648:         or NULL if there aren't any. */
        !          3649:      char **
        !          3650:      fileman_completion (text, start, end)
        !          3651:           const char *text;
        !          3652:           int start, end;
        !          3653:      {
        !          3654:        char **matches;
        !          3655: 
        !          3656:        matches = (char **)NULL;
        !          3657: 
        !          3658:        /* If this word is at the start of the line, then it is a command
        !          3659:           to complete.  Otherwise it is the name of a file in the current
        !          3660:           directory. */
        !          3661:        if (start == 0)
        !          3662:          matches = rl_completion_matches (text, command_generator);
        !          3663: 
        !          3664:        return (matches);
        !          3665:      }
        !          3666: 
        !          3667:      /* Generator function for command completion.  STATE lets us know whether
        !          3668:         to start from scratch; without any state (i.e. STATE == 0), then we
        !          3669:         start at the top of the list. */
        !          3670:      char *
        !          3671:      command_generator (text, state)
        !          3672:           const char *text;
        !          3673:           int state;
        !          3674:      {
        !          3675:        static int list_index, len;
        !          3676:        char *name;
        !          3677: 
        !          3678:        /* If this is a new word to complete, initialize now.  This includes
        !          3679:           saving the length of TEXT for efficiency, and initializing the index
        !          3680:           variable to 0. */
        !          3681:        if (!state)
        !          3682:          {
        !          3683:            list_index = 0;
        !          3684:            len = strlen (text);
        !          3685:          }
        !          3686: 
        !          3687:        /* Return the next name which partially matches from the command list. */
        !          3688:        while (name = commands[list_index].name)
        !          3689:          {
        !          3690:            list_index++;
        !          3691: 
        !          3692:            if (strncmp (name, text, len) == 0)
        !          3693:              return (dupstr(name));
        !          3694:          }
        !          3695: 
        !          3696:        /* If no names matched, then return NULL. */
        !          3697:        return ((char *)NULL);
        !          3698:      }
        !          3699: 
        !          3700:      /* **************************************************************** */
        !          3701:      /*                                                                  */
        !          3702:      /*                       FileMan Commands                           */
        !          3703:      /*                                                                  */
        !          3704:      /* **************************************************************** */
        !          3705: 
        !          3706:      /* String to pass to system ().  This is for the LIST, VIEW and RENAME
        !          3707:         commands. */
        !          3708:      static char syscom[1024];
        !          3709: 
        !          3710:      /* List the file(s) named in arg. */
        !          3711:      com_list (arg)
        !          3712:           char *arg;
        !          3713:      {
        !          3714:        if (!arg)
        !          3715:          arg = "";
        !          3716: 
        !          3717:        sprintf (syscom, "ls -FClg %s", arg);
        !          3718:        return (system (syscom));
        !          3719:      }
        !          3720: 
        !          3721:      com_view (arg)
        !          3722:           char *arg;
        !          3723:      {
        !          3724:        if (!valid_argument ("view", arg))
        !          3725:          return 1;
        !          3726: 
        !          3727:      #if defined (__MSDOS__)
        !          3728:        /* more.com doesn't grok slashes in pathnames */
        !          3729:        sprintf (syscom, "less %s", arg);
        !          3730:      #else
        !          3731:        sprintf (syscom, "more %s", arg);
        !          3732:      #endif
        !          3733:        return (system (syscom));
        !          3734:      }
        !          3735: 
        !          3736:      com_rename (arg)
        !          3737:           char *arg;
        !          3738:      {
        !          3739:        too_dangerous ("rename");
        !          3740:        return (1);
        !          3741:      }
        !          3742: 
        !          3743:      com_stat (arg)
        !          3744:           char *arg;
        !          3745:      {
        !          3746:        struct stat finfo;
        !          3747: 
        !          3748:        if (!valid_argument ("stat", arg))
        !          3749:          return (1);
        !          3750: 
        !          3751:        if (stat (arg, &finfo) == -1)
        !          3752:          {
        !          3753:            perror (arg);
        !          3754:            return (1);
        !          3755:          }
        !          3756: 
        !          3757:        printf ("Statistics for `%s':\n", arg);
        !          3758: 
        !          3759:        printf ("%s has %d link%s, and is %d byte%s in length.\n",
        !          3760:          arg,
        !          3761:                finfo.st_nlink,
        !          3762:                (finfo.st_nlink == 1) ? "" : "s",
        !          3763:                finfo.st_size,
        !          3764:                (finfo.st_size == 1) ? "" : "s");
        !          3765:        printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
        !          3766:        printf ("      Last access at: %s", ctime (&finfo.st_atime));
        !          3767:        printf ("    Last modified at: %s", ctime (&finfo.st_mtime));
        !          3768:        return (0);
        !          3769:      }
        !          3770: 
        !          3771:      com_delete (arg)
        !          3772:           char *arg;
        !          3773:      {
        !          3774:        too_dangerous ("delete");
        !          3775:        return (1);
        !          3776:      }
        !          3777: 
        !          3778:      /* Print out help for ARG, or for all of the commands if ARG is
        !          3779:         not present. */
        !          3780:      com_help (arg)
        !          3781:           char *arg;
        !          3782:      {
        !          3783:        register int i;
        !          3784:        int printed = 0;
        !          3785: 
        !          3786:        for (i = 0; commands[i].name; i++)
        !          3787:          {
        !          3788:            if (!*arg || (strcmp (arg, commands[i].name) == 0))
        !          3789:              {
        !          3790:                printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
        !          3791:                printed++;
        !          3792:              }
        !          3793:          }
        !          3794: 
        !          3795:        if (!printed)
        !          3796:          {
        !          3797:            printf ("No commands match `%s'.  Possibilties are:\n", arg);
        !          3798: 
        !          3799:            for (i = 0; commands[i].name; i++)
        !          3800:              {
        !          3801:                /* Print in six columns. */
        !          3802:                if (printed == 6)
        !          3803:                  {
        !          3804:                    printed = 0;
        !          3805:                    printf ("\n");
        !          3806:                  }
        !          3807: 
        !          3808:                printf ("%s\t", commands[i].name);
        !          3809:                printed++;
        !          3810:              }
        !          3811: 
        !          3812:            if (printed)
        !          3813:              printf ("\n");
        !          3814:          }
        !          3815:        return (0);
        !          3816:      }
        !          3817: 
        !          3818:      /* Change to the directory ARG. */
        !          3819:      com_cd (arg)
        !          3820:           char *arg;
        !          3821:      {
        !          3822:        if (chdir (arg) == -1)
        !          3823:          {
        !          3824:            perror (arg);
        !          3825:            return 1;
        !          3826:          }
        !          3827: 
        !          3828:        com_pwd ("");
        !          3829:        return (0);
        !          3830:      }
        !          3831: 
        !          3832:      /* Print out the current working directory. */
        !          3833:      com_pwd (ignore)
        !          3834:           char *ignore;
        !          3835:      {
        !          3836:        char dir[1024], *s;
        !          3837: 
        !          3838:        s = getcwd (dir, sizeof(dir) - 1);
        !          3839:        if (s == 0)
        !          3840:          {
        !          3841:            printf ("Error getting pwd: %s\n", dir);
        !          3842:            return 1;
        !          3843:          }
        !          3844: 
        !          3845:        printf ("Current directory is %s\n", dir);
        !          3846:        return 0;
        !          3847:      }
        !          3848: 
        !          3849:      /* The user wishes to quit using this program.  Just set DONE non-zero. */
        !          3850:      com_quit (arg)
        !          3851:           char *arg;
        !          3852:      {
        !          3853:        done = 1;
        !          3854:        return (0);
        !          3855:      }
        !          3856: 
        !          3857:      /* Function which tells you that you can't do this. */
        !          3858:      too_dangerous (caller)
        !          3859:           char *caller;
        !          3860:      {
        !          3861:        fprintf (stderr,
        !          3862:                 "%s: Too dangerous for me to distribute.  Write it yourself.\n",
        !          3863:                 caller);
        !          3864:      }
        !          3865: 
        !          3866:      /* Return non-zero if ARG is a valid argument for CALLER, else print
        !          3867:         an error message and return zero. */
        !          3868:      int
        !          3869:      valid_argument (caller, arg)
        !          3870:           char *caller, *arg;
        !          3871:      {
        !          3872:        if (!arg || !*arg)
        !          3873:          {
        !          3874:            fprintf (stderr, "%s: Argument required.\n", caller);
        !          3875:            return (0);
        !          3876:          }
        !          3877: 
        !          3878:        return (1);
        !          3879:      }
        !          3880: 
        !          3881: 
        !          3882: File: readline.info,  Node: GNU Free Documentation License,  Next: Concept Index,  Prev: Programming with GNU Readline,  Up: Top
        !          3883: 
        !          3884: Appendix A GNU Free Documentation License
        !          3885: *****************************************
        !          3886: 
        !          3887:                      Version 1.3, 3 November 2008
        !          3888: 
        !          3889:      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
        !          3890:      `http://fsf.org/'
        !          3891: 
        !          3892:      Everyone is permitted to copy and distribute verbatim copies
        !          3893:      of this license document, but changing it is not allowed.
        !          3894: 
        !          3895:   0. PREAMBLE
        !          3896: 
        !          3897:      The purpose of this License is to make a manual, textbook, or other
        !          3898:      functional and useful document "free" in the sense of freedom: to
        !          3899:      assure everyone the effective freedom to copy and redistribute it,
        !          3900:      with or without modifying it, either commercially or
        !          3901:      noncommercially.  Secondarily, this License preserves for the
        !          3902:      author and publisher a way to get credit for their work, while not
        !          3903:      being considered responsible for modifications made by others.
        !          3904: 
        !          3905:      This License is a kind of "copyleft", which means that derivative
        !          3906:      works of the document must themselves be free in the same sense.
        !          3907:      It complements the GNU General Public License, which is a copyleft
        !          3908:      license designed for free software.
        !          3909: 
        !          3910:      We have designed this License in order to use it for manuals for
        !          3911:      free software, because free software needs free documentation: a
        !          3912:      free program should come with manuals providing the same freedoms
        !          3913:      that the software does.  But this License is not limited to
        !          3914:      software manuals; it can be used for any textual work, regardless
        !          3915:      of subject matter or whether it is published as a printed book.
        !          3916:      We recommend this License principally for works whose purpose is
        !          3917:      instruction or reference.
        !          3918: 
        !          3919:   1. APPLICABILITY AND DEFINITIONS
        !          3920: 
        !          3921:      This License applies to any manual or other work, in any medium,
        !          3922:      that contains a notice placed by the copyright holder saying it
        !          3923:      can be distributed under the terms of this License.  Such a notice
        !          3924:      grants a world-wide, royalty-free license, unlimited in duration,
        !          3925:      to use that work under the conditions stated herein.  The
        !          3926:      "Document", below, refers to any such manual or work.  Any member
        !          3927:      of the public is a licensee, and is addressed as "you".  You
        !          3928:      accept the license if you copy, modify or distribute the work in a
        !          3929:      way requiring permission under copyright law.
        !          3930: 
        !          3931:      A "Modified Version" of the Document means any work containing the
        !          3932:      Document or a portion of it, either copied verbatim, or with
        !          3933:      modifications and/or translated into another language.
        !          3934: 
        !          3935:      A "Secondary Section" is a named appendix or a front-matter section
        !          3936:      of the Document that deals exclusively with the relationship of the
        !          3937:      publishers or authors of the Document to the Document's overall
        !          3938:      subject (or to related matters) and contains nothing that could
        !          3939:      fall directly within that overall subject.  (Thus, if the Document
        !          3940:      is in part a textbook of mathematics, a Secondary Section may not
        !          3941:      explain any mathematics.)  The relationship could be a matter of
        !          3942:      historical connection with the subject or with related matters, or
        !          3943:      of legal, commercial, philosophical, ethical or political position
        !          3944:      regarding them.
        !          3945: 
        !          3946:      The "Invariant Sections" are certain Secondary Sections whose
        !          3947:      titles are designated, as being those of Invariant Sections, in
        !          3948:      the notice that says that the Document is released under this
        !          3949:      License.  If a section does not fit the above definition of
        !          3950:      Secondary then it is not allowed to be designated as Invariant.
        !          3951:      The Document may contain zero Invariant Sections.  If the Document
        !          3952:      does not identify any Invariant Sections then there are none.
        !          3953: 
        !          3954:      The "Cover Texts" are certain short passages of text that are
        !          3955:      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
        !          3956:      that says that the Document is released under this License.  A
        !          3957:      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
        !          3958:      be at most 25 words.
        !          3959: 
        !          3960:      A "Transparent" copy of the Document means a machine-readable copy,
        !          3961:      represented in a format whose specification is available to the
        !          3962:      general public, that is suitable for revising the document
        !          3963:      straightforwardly with generic text editors or (for images
        !          3964:      composed of pixels) generic paint programs or (for drawings) some
        !          3965:      widely available drawing editor, and that is suitable for input to
        !          3966:      text formatters or for automatic translation to a variety of
        !          3967:      formats suitable for input to text formatters.  A copy made in an
        !          3968:      otherwise Transparent file format whose markup, or absence of
        !          3969:      markup, has been arranged to thwart or discourage subsequent
        !          3970:      modification by readers is not Transparent.  An image format is
        !          3971:      not Transparent if used for any substantial amount of text.  A
        !          3972:      copy that is not "Transparent" is called "Opaque".
        !          3973: 
        !          3974:      Examples of suitable formats for Transparent copies include plain
        !          3975:      ASCII without markup, Texinfo input format, LaTeX input format,
        !          3976:      SGML or XML using a publicly available DTD, and
        !          3977:      standard-conforming simple HTML, PostScript or PDF designed for
        !          3978:      human modification.  Examples of transparent image formats include
        !          3979:      PNG, XCF and JPG.  Opaque formats include proprietary formats that
        !          3980:      can be read and edited only by proprietary word processors, SGML or
        !          3981:      XML for which the DTD and/or processing tools are not generally
        !          3982:      available, and the machine-generated HTML, PostScript or PDF
        !          3983:      produced by some word processors for output purposes only.
        !          3984: 
        !          3985:      The "Title Page" means, for a printed book, the title page itself,
        !          3986:      plus such following pages as are needed to hold, legibly, the
        !          3987:      material this License requires to appear in the title page.  For
        !          3988:      works in formats which do not have any title page as such, "Title
        !          3989:      Page" means the text near the most prominent appearance of the
        !          3990:      work's title, preceding the beginning of the body of the text.
        !          3991: 
        !          3992:      The "publisher" means any person or entity that distributes copies
        !          3993:      of the Document to the public.
        !          3994: 
        !          3995:      A section "Entitled XYZ" means a named subunit of the Document
        !          3996:      whose title either is precisely XYZ or contains XYZ in parentheses
        !          3997:      following text that translates XYZ in another language.  (Here XYZ
        !          3998:      stands for a specific section name mentioned below, such as
        !          3999:      "Acknowledgements", "Dedications", "Endorsements", or "History".)
        !          4000:      To "Preserve the Title" of such a section when you modify the
        !          4001:      Document means that it remains a section "Entitled XYZ" according
        !          4002:      to this definition.
        !          4003: 
        !          4004:      The Document may include Warranty Disclaimers next to the notice
        !          4005:      which states that this License applies to the Document.  These
        !          4006:      Warranty Disclaimers are considered to be included by reference in
        !          4007:      this License, but only as regards disclaiming warranties: any other
        !          4008:      implication that these Warranty Disclaimers may have is void and
        !          4009:      has no effect on the meaning of this License.
        !          4010: 
        !          4011:   2. VERBATIM COPYING
        !          4012: 
        !          4013:      You may copy and distribute the Document in any medium, either
        !          4014:      commercially or noncommercially, provided that this License, the
        !          4015:      copyright notices, and the license notice saying this License
        !          4016:      applies to the Document are reproduced in all copies, and that you
        !          4017:      add no other conditions whatsoever to those of this License.  You
        !          4018:      may not use technical measures to obstruct or control the reading
        !          4019:      or further copying of the copies you make or distribute.  However,
        !          4020:      you may accept compensation in exchange for copies.  If you
        !          4021:      distribute a large enough number of copies you must also follow
        !          4022:      the conditions in section 3.
        !          4023: 
        !          4024:      You may also lend copies, under the same conditions stated above,
        !          4025:      and you may publicly display copies.
        !          4026: 
        !          4027:   3. COPYING IN QUANTITY
        !          4028: 
        !          4029:      If you publish printed copies (or copies in media that commonly
        !          4030:      have printed covers) of the Document, numbering more than 100, and
        !          4031:      the Document's license notice requires Cover Texts, you must
        !          4032:      enclose the copies in covers that carry, clearly and legibly, all
        !          4033:      these Cover Texts: Front-Cover Texts on the front cover, and
        !          4034:      Back-Cover Texts on the back cover.  Both covers must also clearly
        !          4035:      and legibly identify you as the publisher of these copies.  The
        !          4036:      front cover must present the full title with all words of the
        !          4037:      title equally prominent and visible.  You may add other material
        !          4038:      on the covers in addition.  Copying with changes limited to the
        !          4039:      covers, as long as they preserve the title of the Document and
        !          4040:      satisfy these conditions, can be treated as verbatim copying in
        !          4041:      other respects.
        !          4042: 
        !          4043:      If the required texts for either cover are too voluminous to fit
        !          4044:      legibly, you should put the first ones listed (as many as fit
        !          4045:      reasonably) on the actual cover, and continue the rest onto
        !          4046:      adjacent pages.
        !          4047: 
        !          4048:      If you publish or distribute Opaque copies of the Document
        !          4049:      numbering more than 100, you must either include a
        !          4050:      machine-readable Transparent copy along with each Opaque copy, or
        !          4051:      state in or with each Opaque copy a computer-network location from
        !          4052:      which the general network-using public has access to download
        !          4053:      using public-standard network protocols a complete Transparent
        !          4054:      copy of the Document, free of added material.  If you use the
        !          4055:      latter option, you must take reasonably prudent steps, when you
        !          4056:      begin distribution of Opaque copies in quantity, to ensure that
        !          4057:      this Transparent copy will remain thus accessible at the stated
        !          4058:      location until at least one year after the last time you
        !          4059:      distribute an Opaque copy (directly or through your agents or
        !          4060:      retailers) of that edition to the public.
        !          4061: 
        !          4062:      It is requested, but not required, that you contact the authors of
        !          4063:      the Document well before redistributing any large number of
        !          4064:      copies, to give them a chance to provide you with an updated
        !          4065:      version of the Document.
        !          4066: 
        !          4067:   4. MODIFICATIONS
        !          4068: 
        !          4069:      You may copy and distribute a Modified Version of the Document
        !          4070:      under the conditions of sections 2 and 3 above, provided that you
        !          4071:      release the Modified Version under precisely this License, with
        !          4072:      the Modified Version filling the role of the Document, thus
        !          4073:      licensing distribution and modification of the Modified Version to
        !          4074:      whoever possesses a copy of it.  In addition, you must do these
        !          4075:      things in the Modified Version:
        !          4076: 
        !          4077:        A. Use in the Title Page (and on the covers, if any) a title
        !          4078:           distinct from that of the Document, and from those of
        !          4079:           previous versions (which should, if there were any, be listed
        !          4080:           in the History section of the Document).  You may use the
        !          4081:           same title as a previous version if the original publisher of
        !          4082:           that version gives permission.
        !          4083: 
        !          4084:        B. List on the Title Page, as authors, one or more persons or
        !          4085:           entities responsible for authorship of the modifications in
        !          4086:           the Modified Version, together with at least five of the
        !          4087:           principal authors of the Document (all of its principal
        !          4088:           authors, if it has fewer than five), unless they release you
        !          4089:           from this requirement.
        !          4090: 
        !          4091:        C. State on the Title page the name of the publisher of the
        !          4092:           Modified Version, as the publisher.
        !          4093: 
        !          4094:        D. Preserve all the copyright notices of the Document.
        !          4095: 
        !          4096:        E. Add an appropriate copyright notice for your modifications
        !          4097:           adjacent to the other copyright notices.
        !          4098: 
        !          4099:        F. Include, immediately after the copyright notices, a license
        !          4100:           notice giving the public permission to use the Modified
        !          4101:           Version under the terms of this License, in the form shown in
        !          4102:           the Addendum below.
        !          4103: 
        !          4104:        G. Preserve in that license notice the full lists of Invariant
        !          4105:           Sections and required Cover Texts given in the Document's
        !          4106:           license notice.
        !          4107: 
        !          4108:        H. Include an unaltered copy of this License.
        !          4109: 
        !          4110:        I. Preserve the section Entitled "History", Preserve its Title,
        !          4111:           and add to it an item stating at least the title, year, new
        !          4112:           authors, and publisher of the Modified Version as given on
        !          4113:           the Title Page.  If there is no section Entitled "History" in
        !          4114:           the Document, create one stating the title, year, authors,
        !          4115:           and publisher of the Document as given on its Title Page,
        !          4116:           then add an item describing the Modified Version as stated in
        !          4117:           the previous sentence.
        !          4118: 
        !          4119:        J. Preserve the network location, if any, given in the Document
        !          4120:           for public access to a Transparent copy of the Document, and
        !          4121:           likewise the network locations given in the Document for
        !          4122:           previous versions it was based on.  These may be placed in
        !          4123:           the "History" section.  You may omit a network location for a
        !          4124:           work that was published at least four years before the
        !          4125:           Document itself, or if the original publisher of the version
        !          4126:           it refers to gives permission.
        !          4127: 
        !          4128:        K. For any section Entitled "Acknowledgements" or "Dedications",
        !          4129:           Preserve the Title of the section, and preserve in the
        !          4130:           section all the substance and tone of each of the contributor
        !          4131:           acknowledgements and/or dedications given therein.
        !          4132: 
        !          4133:        L. Preserve all the Invariant Sections of the Document,
        !          4134:           unaltered in their text and in their titles.  Section numbers
        !          4135:           or the equivalent are not considered part of the section
        !          4136:           titles.
        !          4137: 
        !          4138:        M. Delete any section Entitled "Endorsements".  Such a section
        !          4139:           may not be included in the Modified Version.
        !          4140: 
        !          4141:        N. Do not retitle any existing section to be Entitled
        !          4142:           "Endorsements" or to conflict in title with any Invariant
        !          4143:           Section.
        !          4144: 
        !          4145:        O. Preserve any Warranty Disclaimers.
        !          4146: 
        !          4147:      If the Modified Version includes new front-matter sections or
        !          4148:      appendices that qualify as Secondary Sections and contain no
        !          4149:      material copied from the Document, you may at your option
        !          4150:      designate some or all of these sections as invariant.  To do this,
        !          4151:      add their titles to the list of Invariant Sections in the Modified
        !          4152:      Version's license notice.  These titles must be distinct from any
        !          4153:      other section titles.
        !          4154: 
        !          4155:      You may add a section Entitled "Endorsements", provided it contains
        !          4156:      nothing but endorsements of your Modified Version by various
        !          4157:      parties--for example, statements of peer review or that the text
        !          4158:      has been approved by an organization as the authoritative
        !          4159:      definition of a standard.
        !          4160: 
        !          4161:      You may add a passage of up to five words as a Front-Cover Text,
        !          4162:      and a passage of up to 25 words as a Back-Cover Text, to the end
        !          4163:      of the list of Cover Texts in the Modified Version.  Only one
        !          4164:      passage of Front-Cover Text and one of Back-Cover Text may be
        !          4165:      added by (or through arrangements made by) any one entity.  If the
        !          4166:      Document already includes a cover text for the same cover,
        !          4167:      previously added by you or by arrangement made by the same entity
        !          4168:      you are acting on behalf of, you may not add another; but you may
        !          4169:      replace the old one, on explicit permission from the previous
        !          4170:      publisher that added the old one.
        !          4171: 
        !          4172:      The author(s) and publisher(s) of the Document do not by this
        !          4173:      License give permission to use their names for publicity for or to
        !          4174:      assert or imply endorsement of any Modified Version.
        !          4175: 
        !          4176:   5. COMBINING DOCUMENTS
        !          4177: 
        !          4178:      You may combine the Document with other documents released under
        !          4179:      this License, under the terms defined in section 4 above for
        !          4180:      modified versions, provided that you include in the combination
        !          4181:      all of the Invariant Sections of all of the original documents,
        !          4182:      unmodified, and list them all as Invariant Sections of your
        !          4183:      combined work in its license notice, and that you preserve all
        !          4184:      their Warranty Disclaimers.
        !          4185: 
        !          4186:      The combined work need only contain one copy of this License, and
        !          4187:      multiple identical Invariant Sections may be replaced with a single
        !          4188:      copy.  If there are multiple Invariant Sections with the same name
        !          4189:      but different contents, make the title of each such section unique
        !          4190:      by adding at the end of it, in parentheses, the name of the
        !          4191:      original author or publisher of that section if known, or else a
        !          4192:      unique number.  Make the same adjustment to the section titles in
        !          4193:      the list of Invariant Sections in the license notice of the
        !          4194:      combined work.
        !          4195: 
        !          4196:      In the combination, you must combine any sections Entitled
        !          4197:      "History" in the various original documents, forming one section
        !          4198:      Entitled "History"; likewise combine any sections Entitled
        !          4199:      "Acknowledgements", and any sections Entitled "Dedications".  You
        !          4200:      must delete all sections Entitled "Endorsements."
        !          4201: 
        !          4202:   6. COLLECTIONS OF DOCUMENTS
        !          4203: 
        !          4204:      You may make a collection consisting of the Document and other
        !          4205:      documents released under this License, and replace the individual
        !          4206:      copies of this License in the various documents with a single copy
        !          4207:      that is included in the collection, provided that you follow the
        !          4208:      rules of this License for verbatim copying of each of the
        !          4209:      documents in all other respects.
        !          4210: 
        !          4211:      You may extract a single document from such a collection, and
        !          4212:      distribute it individually under this License, provided you insert
        !          4213:      a copy of this License into the extracted document, and follow
        !          4214:      this License in all other respects regarding verbatim copying of
        !          4215:      that document.
        !          4216: 
        !          4217:   7. AGGREGATION WITH INDEPENDENT WORKS
        !          4218: 
        !          4219:      A compilation of the Document or its derivatives with other
        !          4220:      separate and independent documents or works, in or on a volume of
        !          4221:      a storage or distribution medium, is called an "aggregate" if the
        !          4222:      copyright resulting from the compilation is not used to limit the
        !          4223:      legal rights of the compilation's users beyond what the individual
        !          4224:      works permit.  When the Document is included in an aggregate, this
        !          4225:      License does not apply to the other works in the aggregate which
        !          4226:      are not themselves derivative works of the Document.
        !          4227: 
        !          4228:      If the Cover Text requirement of section 3 is applicable to these
        !          4229:      copies of the Document, then if the Document is less than one half
        !          4230:      of the entire aggregate, the Document's Cover Texts may be placed
        !          4231:      on covers that bracket the Document within the aggregate, or the
        !          4232:      electronic equivalent of covers if the Document is in electronic
        !          4233:      form.  Otherwise they must appear on printed covers that bracket
        !          4234:      the whole aggregate.
        !          4235: 
        !          4236:   8. TRANSLATION
        !          4237: 
        !          4238:      Translation is considered a kind of modification, so you may
        !          4239:      distribute translations of the Document under the terms of section
        !          4240:      4.  Replacing Invariant Sections with translations requires special
        !          4241:      permission from their copyright holders, but you may include
        !          4242:      translations of some or all Invariant Sections in addition to the
        !          4243:      original versions of these Invariant Sections.  You may include a
        !          4244:      translation of this License, and all the license notices in the
        !          4245:      Document, and any Warranty Disclaimers, provided that you also
        !          4246:      include the original English version of this License and the
        !          4247:      original versions of those notices and disclaimers.  In case of a
        !          4248:      disagreement between the translation and the original version of
        !          4249:      this License or a notice or disclaimer, the original version will
        !          4250:      prevail.
        !          4251: 
        !          4252:      If a section in the Document is Entitled "Acknowledgements",
        !          4253:      "Dedications", or "History", the requirement (section 4) to
        !          4254:      Preserve its Title (section 1) will typically require changing the
        !          4255:      actual title.
        !          4256: 
        !          4257:   9. TERMINATION
        !          4258: 
        !          4259:      You may not copy, modify, sublicense, or distribute the Document
        !          4260:      except as expressly provided under this License.  Any attempt
        !          4261:      otherwise to copy, modify, sublicense, or distribute it is void,
        !          4262:      and will automatically terminate your rights under this License.
        !          4263: 
        !          4264:      However, if you cease all violation of this License, then your
        !          4265:      license from a particular copyright holder is reinstated (a)
        !          4266:      provisionally, unless and until the copyright holder explicitly
        !          4267:      and finally terminates your license, and (b) permanently, if the
        !          4268:      copyright holder fails to notify you of the violation by some
        !          4269:      reasonable means prior to 60 days after the cessation.
        !          4270: 
        !          4271:      Moreover, your license from a particular copyright holder is
        !          4272:      reinstated permanently if the copyright holder notifies you of the
        !          4273:      violation by some reasonable means, this is the first time you have
        !          4274:      received notice of violation of this License (for any work) from
        !          4275:      that copyright holder, and you cure the violation prior to 30 days
        !          4276:      after your receipt of the notice.
        !          4277: 
        !          4278:      Termination of your rights under this section does not terminate
        !          4279:      the licenses of parties who have received copies or rights from
        !          4280:      you under this License.  If your rights have been terminated and
        !          4281:      not permanently reinstated, receipt of a copy of some or all of
        !          4282:      the same material does not give you any rights to use it.
        !          4283: 
        !          4284:  10. FUTURE REVISIONS OF THIS LICENSE
        !          4285: 
        !          4286:      The Free Software Foundation may publish new, revised versions of
        !          4287:      the GNU Free Documentation License from time to time.  Such new
        !          4288:      versions will be similar in spirit to the present version, but may
        !          4289:      differ in detail to address new problems or concerns.  See
        !          4290:      `http://www.gnu.org/copyleft/'.
        !          4291: 
        !          4292:      Each version of the License is given a distinguishing version
        !          4293:      number.  If the Document specifies that a particular numbered
        !          4294:      version of this License "or any later version" applies to it, you
        !          4295:      have the option of following the terms and conditions either of
        !          4296:      that specified version or of any later version that has been
        !          4297:      published (not as a draft) by the Free Software Foundation.  If
        !          4298:      the Document does not specify a version number of this License,
        !          4299:      you may choose any version ever published (not as a draft) by the
        !          4300:      Free Software Foundation.  If the Document specifies that a proxy
        !          4301:      can decide which future versions of this License can be used, that
        !          4302:      proxy's public statement of acceptance of a version permanently
        !          4303:      authorizes you to choose that version for the Document.
        !          4304: 
        !          4305:  11. RELICENSING
        !          4306: 
        !          4307:      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
        !          4308:      World Wide Web server that publishes copyrightable works and also
        !          4309:      provides prominent facilities for anybody to edit those works.  A
        !          4310:      public wiki that anybody can edit is an example of such a server.
        !          4311:      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
        !          4312:      site means any set of copyrightable works thus published on the MMC
        !          4313:      site.
        !          4314: 
        !          4315:      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
        !          4316:      license published by Creative Commons Corporation, a not-for-profit
        !          4317:      corporation with a principal place of business in San Francisco,
        !          4318:      California, as well as future copyleft versions of that license
        !          4319:      published by that same organization.
        !          4320: 
        !          4321:      "Incorporate" means to publish or republish a Document, in whole or
        !          4322:      in part, as part of another Document.
        !          4323: 
        !          4324:      An MMC is "eligible for relicensing" if it is licensed under this
        !          4325:      License, and if all works that were first published under this
        !          4326:      License somewhere other than this MMC, and subsequently
        !          4327:      incorporated in whole or in part into the MMC, (1) had no cover
        !          4328:      texts or invariant sections, and (2) were thus incorporated prior
        !          4329:      to November 1, 2008.
        !          4330: 
        !          4331:      The operator of an MMC Site may republish an MMC contained in the
        !          4332:      site under CC-BY-SA on the same site at any time before August 1,
        !          4333:      2009, provided the MMC is eligible for relicensing.
        !          4334: 
        !          4335: 
        !          4336: ADDENDUM: How to use this License for your documents
        !          4337: ====================================================
        !          4338: 
        !          4339: To use this License in a document you have written, include a copy of
        !          4340: the License in the document and put the following copyright and license
        !          4341: notices just after the title page:
        !          4342: 
        !          4343:        Copyright (C)  YEAR  YOUR NAME.
        !          4344:        Permission is granted to copy, distribute and/or modify this document
        !          4345:        under the terms of the GNU Free Documentation License, Version 1.3
        !          4346:        or any later version published by the Free Software Foundation;
        !          4347:        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
        !          4348:        Texts.  A copy of the license is included in the section entitled ``GNU
        !          4349:        Free Documentation License''.
        !          4350: 
        !          4351:    If you have Invariant Sections, Front-Cover Texts and Back-Cover
        !          4352: Texts, replace the "with...Texts." line with this:
        !          4353: 
        !          4354:          with the Invariant Sections being LIST THEIR TITLES, with
        !          4355:          the Front-Cover Texts being LIST, and with the Back-Cover Texts
        !          4356:          being LIST.
        !          4357: 
        !          4358:    If you have Invariant Sections without Cover Texts, or some other
        !          4359: combination of the three, merge those two alternatives to suit the
        !          4360: situation.
        !          4361: 
        !          4362:    If your document contains nontrivial examples of program code, we
        !          4363: recommend releasing these examples in parallel under your choice of
        !          4364: free software license, such as the GNU General Public License, to
        !          4365: permit their use in free software.
        !          4366: 
        !          4367: 
        !          4368: File: readline.info,  Node: Concept Index,  Next: Function and Variable Index,  Prev: GNU Free Documentation License,  Up: Top
        !          4369: 
        !          4370: Concept Index
        !          4371: *************
        !          4372: 
        !          4373: [index]
        !          4374: * Menu:
        !          4375: 
        !          4376: * application-specific completion functions: Custom Completers.
        !          4377:                                                                (line  6)
        !          4378: * command editing:                       Readline Bare Essentials.
        !          4379:                                                                (line  6)
        !          4380: * editing command lines:                 Readline Bare Essentials.
        !          4381:                                                                (line  6)
        !          4382: * initialization file, readline:         Readline Init File.   (line  6)
        !          4383: * interaction, readline:                 Readline Interaction. (line  6)
        !          4384: * kill ring:                             Readline Killing Commands.
        !          4385:                                                                (line 19)
        !          4386: * killing text:                          Readline Killing Commands.
        !          4387:                                                                (line  6)
        !          4388: * notation, readline:                    Readline Bare Essentials.
        !          4389:                                                                (line  6)
        !          4390: * readline, function:                    Basic Behavior.       (line 12)
        !          4391: * variables, readline:                   Readline Init File Syntax.
        !          4392:                                                                (line 34)
        !          4393: * yanking text:                          Readline Killing Commands.
        !          4394:                                                                (line  6)
        !          4395: 
        !          4396: 
        !          4397: File: readline.info,  Node: Function and Variable Index,  Prev: Concept Index,  Up: Top
        !          4398: 
        !          4399: Function and Variable Index
        !          4400: ***************************
        !          4401: 
        !          4402: [index]
        !          4403: * Menu:
        !          4404: 
        !          4405: * _rl_digit_p:                           Utility Functions.   (line  65)
        !          4406: * _rl_digit_value:                       Utility Functions.   (line  76)
        !          4407: * _rl_lowercase_p:                       Utility Functions.   (line  62)
        !          4408: * _rl_to_lower:                          Utility Functions.   (line  72)
        !          4409: * _rl_to_upper:                          Utility Functions.   (line  68)
        !          4410: * _rl_uppercase_p:                       Utility Functions.   (line  59)
        !          4411: * abort (C-g):                           Miscellaneous Commands.
        !          4412:                                                               (line  10)
        !          4413: * accept-line (Newline or Return):       Commands For History.
        !          4414:                                                               (line   6)
        !          4415: * backward-char (C-b):                   Commands For Moving. (line  15)
        !          4416: * backward-delete-char (Rubout):         Commands For Text.   (line  17)
        !          4417: * backward-kill-line (C-x Rubout):       Commands For Killing.
        !          4418:                                                               (line   9)
        !          4419: * backward-kill-word (M-<DEL>):          Commands For Killing.
        !          4420:                                                               (line  24)
        !          4421: * backward-word (M-b):                   Commands For Moving. (line  22)
        !          4422: * beginning-of-history (M-<):            Commands For History.
        !          4423:                                                               (line  19)
        !          4424: * beginning-of-line (C-a):               Commands For Moving. (line   6)
        !          4425: * bell-style:                            Readline Init File Syntax.
        !          4426:                                                               (line  35)
        !          4427: * bind-tty-special-chars:                Readline Init File Syntax.
        !          4428:                                                               (line  42)
        !          4429: * call-last-kbd-macro (C-x e):           Keyboard Macros.     (line  13)
        !          4430: * capitalize-word (M-c):                 Commands For Text.   (line  55)
        !          4431: * character-search (C-]):                Miscellaneous Commands.
        !          4432:                                                               (line  41)
        !          4433: * character-search-backward (M-C-]):     Miscellaneous Commands.
        !          4434:                                                               (line  46)
        !          4435: * clear-screen (C-l):                    Commands For Moving. (line  26)
        !          4436: * colored-stats:                         Readline Init File Syntax.
        !          4437:                                                               (line  47)
        !          4438: * comment-begin:                         Readline Init File Syntax.
        !          4439:                                                               (line  53)
        !          4440: * complete (<TAB>):                      Commands For Completion.
        !          4441:                                                               (line   6)
        !          4442: * completion-display-width:              Readline Init File Syntax.
        !          4443:                                                               (line  58)
        !          4444: * completion-ignore-case:                Readline Init File Syntax.
        !          4445:                                                               (line  65)
        !          4446: * completion-map-case:                   Readline Init File Syntax.
        !          4447:                                                               (line  70)
        !          4448: * completion-prefix-display-length:      Readline Init File Syntax.
        !          4449:                                                               (line  76)
        !          4450: * completion-query-items:                Readline Init File Syntax.
        !          4451:                                                               (line  83)
        !          4452: * convert-meta:                          Readline Init File Syntax.
        !          4453:                                                               (line  93)
        !          4454: * copy-backward-word ():                 Commands For Killing.
        !          4455:                                                               (line  49)
        !          4456: * copy-forward-word ():                  Commands For Killing.
        !          4457:                                                               (line  54)
        !          4458: * copy-region-as-kill ():                Commands For Killing.
        !          4459:                                                               (line  45)
        !          4460: * delete-char (C-d):                     Commands For Text.   (line  12)
        !          4461: * delete-char-or-list ():                Commands For Completion.
        !          4462:                                                               (line  39)
        !          4463: * delete-horizontal-space ():            Commands For Killing.
        !          4464:                                                               (line  37)
        !          4465: * digit-argument (M-0, M-1, ... M--):    Numeric Arguments.   (line   6)
        !          4466: * disable-completion:                    Readline Init File Syntax.
        !          4467:                                                               (line  99)
        !          4468: * do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands.
        !          4469:                                                               (line  14)
        !          4470: * downcase-word (M-l):                   Commands For Text.   (line  51)
        !          4471: * dump-functions ():                     Miscellaneous Commands.
        !          4472:                                                               (line  70)
        !          4473: * dump-macros ():                        Miscellaneous Commands.
        !          4474:                                                               (line  82)
        !          4475: * dump-variables ():                     Miscellaneous Commands.
        !          4476:                                                               (line  76)
        !          4477: * editing-mode:                          Readline Init File Syntax.
        !          4478:                                                               (line 104)
        !          4479: * enable-keypad:                         Readline Init File Syntax.
        !          4480:                                                               (line 115)
        !          4481: * end-kbd-macro (C-x )):                 Keyboard Macros.     (line   9)
        !          4482: * end-of-file (usually C-d):             Commands For Text.   (line   6)
        !          4483: * end-of-history (M->):                  Commands For History.
        !          4484:                                                               (line  22)
        !          4485: * end-of-line (C-e):                     Commands For Moving. (line   9)
        !          4486: * exchange-point-and-mark (C-x C-x):     Miscellaneous Commands.
        !          4487:                                                               (line  36)
        !          4488: * expand-tilde:                          Readline Init File Syntax.
        !          4489:                                                               (line 126)
        !          4490: * forward-backward-delete-char ():       Commands For Text.   (line  21)
        !          4491: * forward-char (C-f):                    Commands For Moving. (line  12)
        !          4492: * forward-search-history (C-s):          Commands For History.
        !          4493:                                                               (line  30)
        !          4494: * forward-word (M-f):                    Commands For Moving. (line  18)
        !          4495: * history-preserve-point:                Readline Init File Syntax.
        !          4496:                                                               (line 130)
        !          4497: * history-search-backward ():            Commands For History.
        !          4498:                                                               (line  51)
        !          4499: * history-search-forward ():             Commands For History.
        !          4500:                                                               (line  45)
        !          4501: * history-size:                          Readline Init File Syntax.
        !          4502:                                                               (line 136)
        !          4503: * history-substr-search-backward ():     Commands For History.
        !          4504:                                                               (line  63)
        !          4505: * history-substr-search-forward ():      Commands For History.
        !          4506:                                                               (line  57)
        !          4507: * horizontal-scroll-mode:                Readline Init File Syntax.
        !          4508:                                                               (line 143)
        !          4509: * input-meta:                            Readline Init File Syntax.
        !          4510:                                                               (line 150)
        !          4511: * insert-comment (M-#):                  Miscellaneous Commands.
        !          4512:                                                               (line  60)
        !          4513: * insert-completions (M-*):              Commands For Completion.
        !          4514:                                                               (line  18)
        !          4515: * isearch-terminators:                   Readline Init File Syntax.
        !          4516:                                                               (line 157)
        !          4517: * keymap:                                Readline Init File Syntax.
        !          4518:                                                               (line 164)
        !          4519: * kill-line (C-k):                       Commands For Killing.
        !          4520:                                                               (line   6)
        !          4521: * kill-region ():                        Commands For Killing.
        !          4522:                                                               (line  41)
        !          4523: * kill-whole-line ():                    Commands For Killing.
        !          4524:                                                               (line  15)
        !          4525: * kill-word (M-d):                       Commands For Killing.
        !          4526:                                                               (line  19)
        !          4527: * mark-modified-lines:                   Readline Init File Syntax.
        !          4528:                                                               (line 193)
        !          4529: * mark-symlinked-directories:            Readline Init File Syntax.
        !          4530:                                                               (line 198)
        !          4531: * match-hidden-files:                    Readline Init File Syntax.
        !          4532:                                                               (line 203)
        !          4533: * menu-complete ():                      Commands For Completion.
        !          4534:                                                               (line  22)
        !          4535: * menu-complete-backward ():             Commands For Completion.
        !          4536:                                                               (line  34)
        !          4537: * menu-complete-display-prefix:          Readline Init File Syntax.
        !          4538:                                                               (line 210)
        !          4539: * meta-flag:                             Readline Init File Syntax.
        !          4540:                                                               (line 150)
        !          4541: * next-history (C-n):                    Commands For History.
        !          4542:                                                               (line  16)
        !          4543: * non-incremental-forward-search-history (M-n): Commands For History.
        !          4544:                                                               (line  40)
        !          4545: * non-incremental-reverse-search-history (M-p): Commands For History.
        !          4546:                                                               (line  35)
        !          4547: * output-meta:                           Readline Init File Syntax.
        !          4548:                                                               (line 215)
        !          4549: * overwrite-mode ():                     Commands For Text.   (line  59)
        !          4550: * page-completions:                      Readline Init File Syntax.
        !          4551:                                                               (line 220)
        !          4552: * possible-completions (M-?):            Commands For Completion.
        !          4553:                                                               (line  11)
        !          4554: * prefix-meta (<ESC>):                   Miscellaneous Commands.
        !          4555:                                                               (line  18)
        !          4556: * previous-history (C-p):                Commands For History.
        !          4557:                                                               (line  12)
        !          4558: * print-last-kbd-macro ():               Keyboard Macros.     (line  17)
        !          4559: * quoted-insert (C-q or C-v):            Commands For Text.   (line  26)
        !          4560: * re-read-init-file (C-x C-r):           Miscellaneous Commands.
        !          4561:                                                               (line   6)
        !          4562: * readline:                              Basic Behavior.      (line  12)
        !          4563: * redraw-current-line ():                Commands For Moving. (line  30)
        !          4564: * reverse-search-history (C-r):          Commands For History.
        !          4565:                                                               (line  26)
        !          4566: * revert-all-at-newline:                 Readline Init File Syntax.
        !          4567:                                                               (line 230)
        !          4568: * revert-line (M-r):                     Miscellaneous Commands.
        !          4569:                                                               (line  25)
        !          4570: * rl_add_defun:                          Function Naming.     (line  20)
        !          4571: * rl_add_funmap_entry:                   Associating Function Names and Bindings.
        !          4572:                                                               (line  47)
        !          4573: * rl_add_undo:                           Allowing Undoing.    (line  41)
        !          4574: * rl_alphabetic:                         Utility Functions.   (line  39)
        !          4575: * rl_already_prompted:                   Readline Variables.  (line  64)
        !          4576: * rl_attempted_completion_function:      Completion Variables.
        !          4577:                                                               (line  12)
        !          4578: * rl_attempted_completion_over:          Completion Variables.
        !          4579:                                                               (line 255)
        !          4580: * rl_basic_quote_characters:             Completion Variables.
        !          4581:                                                               (line 144)
        !          4582: * rl_basic_word_break_characters:        Completion Variables.
        !          4583:                                                               (line 138)
        !          4584: * rl_begin_undo_group:                   Allowing Undoing.    (line  29)
        !          4585: * rl_bind_key:                           Binding Keys.        (line  22)
        !          4586: * rl_bind_key_if_unbound:                Binding Keys.        (line  32)
        !          4587: * rl_bind_key_if_unbound_in_map:         Binding Keys.        (line  38)
        !          4588: * rl_bind_key_in_map:                    Binding Keys.        (line  27)
        !          4589: * rl_bind_keyseq:                        Binding Keys.        (line  59)
        !          4590: * rl_bind_keyseq_if_unbound:             Binding Keys.        (line  77)
        !          4591: * rl_bind_keyseq_if_unbound_in_map:      Binding Keys.        (line  83)
        !          4592: * rl_bind_keyseq_in_map:                 Binding Keys.        (line  66)
        !          4593: * rl_binding_keymap:                     Readline Variables.  (line 186)
        !          4594: * rl_callback_handler_install:           Alternate Interface. (line  15)
        !          4595: * rl_callback_handler_remove:            Alternate Interface. (line  35)
        !          4596: * rl_callback_read_char:                 Alternate Interface. (line  22)
        !          4597: * rl_catch_signals:                      Readline Signal Handling.
        !          4598:                                                               (line  48)
        !          4599: * rl_catch_sigwinch:                     Readline Signal Handling.
        !          4600:                                                               (line  55)
        !          4601: * rl_change_environment:                 Readline Signal Handling.
        !          4602:                                                               (line  61)
        !          4603: * rl_char_is_quoted_p:                   Completion Variables.
        !          4604:                                                               (line  46)
        !          4605: * rl_cleanup_after_signal:               Readline Signal Handling.
        !          4606:                                                               (line  73)
        !          4607: * rl_clear_history:                      Miscellaneous Functions.
        !          4608:                                                               (line  50)
        !          4609: * rl_clear_message:                      Redisplay.           (line  48)
        !          4610: * rl_clear_pending_input:                Character Input.     (line  30)
        !          4611: * rl_clear_signals:                      Readline Signal Handling.
        !          4612:                                                               (line 132)
        !          4613: * rl_complete <1>:                       How Completing Works.
        !          4614:                                                               (line  49)
        !          4615: * rl_complete:                           Completion Functions.
        !          4616:                                                               (line  20)
        !          4617: * rl_complete_internal:                  Completion Functions.
        !          4618:                                                               (line  10)
        !          4619: * rl_completer_quote_characters:         Completion Variables.
        !          4620:                                                               (line 161)
        !          4621: * rl_completer_word_break_characters:    Completion Variables.
        !          4622:                                                               (line 147)
        !          4623: * rl_completion_append_character:        Completion Variables.
        !          4624:                                                               (line 185)
        !          4625: * rl_completion_display_matches_hook:    Completion Variables.
        !          4626:                                                               (line 125)
        !          4627: * rl_completion_entry_function <1>:      How Completing Works.
        !          4628:                                                               (line  55)
        !          4629: * rl_completion_entry_function:          Completion Variables.
        !          4630:                                                               (line   7)
        !          4631: * rl_completion_found_quote:             Completion Variables.
        !          4632:                                                               (line 213)
        !          4633: * rl_completion_invoking_key:            Completion Variables.
        !          4634:                                                               (line 278)
        !          4635: * rl_completion_mark_symlink_dirs:       Completion Variables.
        !          4636:                                                               (line 220)
        !          4637: * rl_completion_matches:                 Completion Functions.
        !          4638:                                                               (line  45)
        !          4639: * rl_completion_mode:                    Completion Functions.
        !          4640:                                                               (line  37)
        !          4641: * rl_completion_query_items:             Completion Variables.
        !          4642:                                                               (line 179)
        !          4643: * rl_completion_quote_character:         Completion Variables.
        !          4644:                                                               (line 201)
        !          4645: * rl_completion_suppress_append:         Completion Variables.
        !          4646:                                                               (line 195)
        !          4647: * rl_completion_suppress_quote:          Completion Variables.
        !          4648:                                                               (line 207)
        !          4649: * rl_completion_type:                    Completion Variables.
        !          4650:                                                               (line 270)
        !          4651: * rl_completion_word_break_hook:         Completion Variables.
        !          4652:                                                               (line 152)
        !          4653: * rl_copy_keymap:                        Keymaps.             (line  17)
        !          4654: * rl_copy_text:                          Modifying Text.      (line  15)
        !          4655: * rl_crlf:                               Redisplay.           (line  30)
        !          4656: * rl_delete_text:                        Modifying Text.      (line  11)
        !          4657: * rl_deprep_term_function:               Readline Variables.  (line 176)
        !          4658: * rl_deprep_terminal:                    Terminal Management. (line  13)
        !          4659: * rl_ding:                               Utility Functions.   (line  36)
        !          4660: * rl_directory_completion_hook:          Completion Variables.
        !          4661:                                                               (line  64)
        !          4662: * rl_directory_rewrite_hook;:            Completion Variables.
        !          4663:                                                               (line  82)
        !          4664: * rl_discard_keymap:                     Keymaps.             (line  26)
        !          4665: * rl_dispatching:                        Readline Variables.  (line  41)
        !          4666: * rl_display_match_list:                 Utility Functions.   (line  43)
        !          4667: * rl_display_prompt:                     Readline Variables.  (line  59)
        !          4668: * rl_do_undo:                            Allowing Undoing.    (line  48)
        !          4669: * rl_done:                               Readline Variables.  (line  28)
        !          4670: * rl_echo_signal_char:                   Readline Signal Handling.
        !          4671:                                                               (line  96)
        !          4672: * rl_editing_mode:                       Readline Variables.  (line 308)
        !          4673: * rl_end:                                Readline Variables.  (line  19)
        !          4674: * rl_end_undo_group:                     Allowing Undoing.    (line  35)
        !          4675: * rl_erase_empty_line:                   Readline Variables.  (line  47)
        !          4676: * rl_event_hook:                         Readline Variables.  (line 124)
        !          4677: * rl_execute_next:                       Character Input.     (line  26)
        !          4678: * rl_executing_key:                      Readline Variables.  (line 193)
        !          4679: * rl_executing_keymap:                   Readline Variables.  (line 182)
        !          4680: * rl_executing_keyseq:                   Readline Variables.  (line 197)
        !          4681: * rl_executing_macro:                    Readline Variables.  (line 190)
        !          4682: * rl_expand_prompt:                      Redisplay.           (line  64)
        !          4683: * rl_explicit_arg:                       Readline Variables.  (line 299)
        !          4684: * rl_extend_line_buffer:                 Utility Functions.   (line  27)
        !          4685: * rl_filename_completion_desired:        Completion Variables.
        !          4686:                                                               (line 235)
        !          4687: * rl_filename_completion_function:       Completion Functions.
        !          4688:                                                               (line  59)
        !          4689: * rl_filename_dequoting_function:        Completion Variables.
        !          4690:                                                               (line  37)
        !          4691: * rl_filename_quote_characters:          Completion Variables.
        !          4692:                                                               (line 167)
        !          4693: * rl_filename_quoting_desired:           Completion Variables.
        !          4694:                                                               (line 245)
        !          4695: * rl_filename_quoting_function:          Completion Variables.
        !          4696:                                                               (line  24)
        !          4697: * rl_filename_rewrite_hook:              Completion Variables.
        !          4698:                                                               (line 110)
        !          4699: * rl_filename_stat_hook:                 Completion Variables.
        !          4700:                                                               (line  98)
        !          4701: * rl_forced_update_display:              Redisplay.           (line  11)
        !          4702: * rl_free:                               Utility Functions.   (line  18)
        !          4703: * rl_free_keymap:                        Keymaps.             (line  30)
        !          4704: * rl_free_line_state:                    Readline Signal Handling.
        !          4705:                                                               (line  79)
        !          4706: * rl_free_undo_list:                     Allowing Undoing.    (line  45)
        !          4707: * rl_function_dumper:                    Associating Function Names and Bindings.
        !          4708:                                                               (line  30)
        !          4709: * rl_function_of_keyseq:                 Associating Function Names and Bindings.
        !          4710:                                                               (line  15)
        !          4711: * rl_funmap_names:                       Associating Function Names and Bindings.
        !          4712:                                                               (line  40)
        !          4713: * rl_generic_bind:                       Binding Keys.        (line  89)
        !          4714: * rl_get_keymap:                         Keymaps.             (line  37)
        !          4715: * rl_get_keymap_by_name:                 Keymaps.             (line  43)
        !          4716: * rl_get_keymap_name:                    Keymaps.             (line  48)
        !          4717: * rl_get_screen_size:                    Readline Signal Handling.
        !          4718:                                                               (line 115)
        !          4719: * rl_get_termcap:                        Miscellaneous Functions.
        !          4720:                                                               (line  42)
        !          4721: * rl_getc:                               Character Input.     (line  15)
        !          4722: * rl_getc_function:                      Readline Variables.  (line 130)
        !          4723: * rl_gnu_readline_p:                     Readline Variables.  (line  83)
        !          4724: * rl_ignore_completion_duplicates:       Completion Variables.
        !          4725:                                                               (line 231)
        !          4726: * rl_ignore_some_completions_function:   Completion Variables.
        !          4727:                                                               (line  56)
        !          4728: * rl_inhibit_completion:                 Completion Variables.
        !          4729:                                                               (line 284)
        !          4730: * rl_initialize:                         Utility Functions.   (line  31)
        !          4731: * rl_input_available_hook:               Readline Variables.  (line 142)
        !          4732: * rl_insert_completions:                 Completion Functions.
        !          4733:                                                               (line  32)
        !          4734: * rl_insert_text:                        Modifying Text.      (line   7)
        !          4735: * rl_instream:                           Readline Variables.  (line  97)
        !          4736: * rl_invoking_keyseqs:                   Associating Function Names and Bindings.
        !          4737:                                                               (line  21)
        !          4738: * rl_invoking_keyseqs_in_map:            Associating Function Names and Bindings.
        !          4739:                                                               (line  26)
        !          4740: * rl_key_sequence_length:                Readline Variables.  (line 201)
        !          4741: * rl_kill_text:                          Modifying Text.      (line  19)
        !          4742: * rl_last_func:                          Readline Variables.  (line 110)
        !          4743: * rl_library_version:                    Readline Variables.  (line  73)
        !          4744: * rl_line_buffer:                        Readline Variables.  (line   9)
        !          4745: * rl_list_funmap_names:                  Associating Function Names and Bindings.
        !          4746:                                                               (line  36)
        !          4747: * rl_macro_bind:                         Miscellaneous Functions.
        !          4748:                                                               (line   8)
        !          4749: * rl_macro_dumper:                       Miscellaneous Functions.
        !          4750:                                                               (line  14)
        !          4751: * rl_make_bare_keymap:                   Keymaps.             (line  12)
        !          4752: * rl_make_keymap:                        Keymaps.             (line  20)
        !          4753: * rl_mark:                               Readline Variables.  (line  24)
        !          4754: * rl_message:                            Redisplay.           (line  39)
        !          4755: * rl_modifying:                          Allowing Undoing.    (line  57)
        !          4756: * rl_named_function:                     Associating Function Names and Bindings.
        !          4757:                                                               (line  11)
        !          4758: * rl_num_chars_to_read:                  Readline Variables.  (line  32)
        !          4759: * rl_numeric_arg:                        Readline Variables.  (line 303)
        !          4760: * rl_on_new_line:                        Redisplay.           (line  15)
        !          4761: * rl_on_new_line_with_prompt:            Redisplay.           (line  19)
        !          4762: * rl_outstream:                          Readline Variables.  (line 101)
        !          4763: * rl_parse_and_bind:                     Binding Keys.        (line  96)
        !          4764: * rl_pending_input:                      Readline Variables.  (line  37)
        !          4765: * rl_point:                              Readline Variables.  (line  15)
        !          4766: * rl_possible_completions:               Completion Functions.
        !          4767:                                                               (line  28)
        !          4768: * rl_pre_input_hook:                     Readline Variables.  (line 119)
        !          4769: * rl_prefer_env_winsize:                 Readline Variables.  (line 105)
        !          4770: * rl_prep_term_function:                 Readline Variables.  (line 169)
        !          4771: * rl_prep_terminal:                      Terminal Management. (line   7)
        !          4772: * rl_prompt:                             Readline Variables.  (line  53)
        !          4773: * rl_push_macro_input:                   Modifying Text.      (line  26)
        !          4774: * rl_read_init_file:                     Binding Keys.        (line 101)
        !          4775: * rl_read_key:                           Character Input.     (line   7)
        !          4776: * rl_readline_name:                      Readline Variables.  (line  92)
        !          4777: * rl_readline_state:                     Readline Variables.  (line 204)
        !          4778: * rl_readline_version:                   Readline Variables.  (line  76)
        !          4779: * rl_redisplay:                          Redisplay.           (line   7)
        !          4780: * rl_redisplay_function:                 Readline Variables.  (line 163)
        !          4781: * rl_replace_line:                       Utility Functions.   (line  22)
        !          4782: * rl_reset_after_signal:                 Readline Signal Handling.
        !          4783:                                                               (line  87)
        !          4784: * rl_reset_line_state:                   Redisplay.           (line  26)
        !          4785: * rl_reset_screen_size:                  Readline Signal Handling.
        !          4786:                                                               (line 119)
        !          4787: * rl_reset_terminal:                     Terminal Management. (line  28)
        !          4788: * rl_resize_terminal:                    Readline Signal Handling.
        !          4789:                                                               (line 102)
        !          4790: * rl_restore_prompt:                     Redisplay.           (line  57)
        !          4791: * rl_restore_state:                      Utility Functions.   (line  12)
        !          4792: * rl_save_prompt:                        Redisplay.           (line  53)
        !          4793: * rl_save_state:                         Utility Functions.   (line   7)
        !          4794: * rl_set_key:                            Binding Keys.        (line  73)
        !          4795: * rl_set_keyboard_input_timeout:         Character Input.     (line  35)
        !          4796: * rl_set_keymap:                         Keymaps.             (line  40)
        !          4797: * rl_set_paren_blink_timeout:            Miscellaneous Functions.
        !          4798:                                                               (line  37)
        !          4799: * rl_set_prompt:                         Redisplay.           (line  78)
        !          4800: * rl_set_screen_size:                    Readline Signal Handling.
        !          4801:                                                               (line 106)
        !          4802: * rl_set_signals:                        Readline Signal Handling.
        !          4803:                                                               (line 126)
        !          4804: * rl_show_char:                          Redisplay.           (line  33)
        !          4805: * rl_signal_event_hook:                  Readline Variables.  (line 138)
        !          4806: * rl_sort_completion_matches:            Completion Variables.
        !          4807:                                                               (line 262)
        !          4808: * rl_special_prefixes:                   Completion Variables.
        !          4809:                                                               (line 172)
        !          4810: * rl_startup_hook:                       Readline Variables.  (line 115)
        !          4811: * rl_stuff_char:                         Character Input.     (line  19)
        !          4812: * rl_terminal_name:                      Readline Variables.  (line  87)
        !          4813: * rl_tty_set_default_bindings:           Terminal Management. (line  18)
        !          4814: * rl_tty_unset_default_bindings:         Terminal Management. (line  23)
        !          4815: * rl_unbind_command_in_map:              Binding Keys.        (line  55)
        !          4816: * rl_unbind_function_in_map:             Binding Keys.        (line  51)
        !          4817: * rl_unbind_key:                         Binding Keys.        (line  42)
        !          4818: * rl_unbind_key_in_map:                  Binding Keys.        (line  46)
        !          4819: * rl_username_completion_function:       Completion Functions.
        !          4820:                                                               (line  66)
        !          4821: * rl_variable_bind:                      Miscellaneous Functions.
        !          4822:                                                               (line  21)
        !          4823: * rl_variable_dumper:                    Miscellaneous Functions.
        !          4824:                                                               (line  31)
        !          4825: * rl_variable_value:                     Miscellaneous Functions.
        !          4826:                                                               (line  26)
        !          4827: * self-insert (a, b, A, 1, !, ...):      Commands For Text.   (line  33)
        !          4828: * set-mark (C-@):                        Miscellaneous Commands.
        !          4829:                                                               (line  32)
        !          4830: * show-all-if-ambiguous:                 Readline Init File Syntax.
        !          4831:                                                               (line 236)
        !          4832: * show-all-if-unmodified:                Readline Init File Syntax.
        !          4833:                                                               (line 242)
        !          4834: * show-mode-in-prompt:                   Readline Init File Syntax.
        !          4835:                                                               (line 251)
        !          4836: * skip-completed-text:                   Readline Init File Syntax.
        !          4837:                                                               (line 256)
        !          4838: * skip-csi-sequence ():                  Miscellaneous Commands.
        !          4839:                                                               (line  51)
        !          4840: * start-kbd-macro (C-x ():               Keyboard Macros.     (line   6)
        !          4841: * transpose-chars (C-t):                 Commands For Text.   (line  36)
        !          4842: * transpose-words (M-t):                 Commands For Text.   (line  42)
        !          4843: * undo (C-_ or C-x C-u):                 Miscellaneous Commands.
        !          4844:                                                               (line  22)
        !          4845: * universal-argument ():                 Numeric Arguments.   (line  10)
        !          4846: * unix-filename-rubout ():               Commands For Killing.
        !          4847:                                                               (line  32)
        !          4848: * unix-line-discard (C-u):               Commands For Killing.
        !          4849:                                                               (line  12)
        !          4850: * unix-word-rubout (C-w):                Commands For Killing.
        !          4851:                                                               (line  28)
        !          4852: * upcase-word (M-u):                     Commands For Text.   (line  47)
        !          4853: * visible-stats:                         Readline Init File Syntax.
        !          4854:                                                               (line 269)
        !          4855: * yank (C-y):                            Commands For Killing.
        !          4856:                                                               (line  59)
        !          4857: * yank-last-arg (M-. or M-_):            Commands For History.
        !          4858:                                                               (line  78)
        !          4859: * yank-nth-arg (M-C-y):                  Commands For History.
        !          4860:                                                               (line  69)
        !          4861: * yank-pop (M-y):                        Commands For Killing.
        !          4862:                                                               (line  62)
        !          4863: 
        !          4864: 
        !          4865: 
        !          4866: Tag Table:
        !          4867: Node: Top907
        !          4868: Node: Command Line Editing1632
        !          4869: Node: Introduction and Notation2284
        !          4870: Node: Readline Interaction3907
        !          4871: Node: Readline Bare Essentials5099
        !          4872: Node: Readline Movement Commands6889
        !          4873: Node: Readline Killing Commands7855
        !          4874: Node: Readline Arguments9776
        !          4875: Node: Searching10821
        !          4876: Node: Readline Init File12973
        !          4877: Node: Readline Init File Syntax14127
        !          4878: Node: Conditional Init Constructs30832
        !          4879: Node: Sample Init File33366
        !          4880: Node: Bindable Readline Commands36485
        !          4881: Node: Commands For Moving37543
        !          4882: Node: Commands For History38405
        !          4883: Node: Commands For Text42560
        !          4884: Node: Commands For Killing45543
        !          4885: Node: Numeric Arguments47686
        !          4886: Node: Commands For Completion48826
        !          4887: Node: Keyboard Macros50796
        !          4888: Node: Miscellaneous Commands51485
        !          4889: Node: Readline vi Mode55342
        !          4890: Node: Programming with GNU Readline57159
        !          4891: Node: Basic Behavior58145
        !          4892: Node: Custom Functions61562
        !          4893: Node: Readline Typedefs63046
        !          4894: Node: Function Writing64686
        !          4895: Node: Readline Variables65993
        !          4896: Node: Readline Convenience Functions78671
        !          4897: Node: Function Naming79743
        !          4898: Node: Keymaps81005
        !          4899: Node: Binding Keys82998
        !          4900: Node: Associating Function Names and Bindings87545
        !          4901: Node: Allowing Undoing89830
        !          4902: Node: Redisplay92380
        !          4903: Node: Modifying Text96281
        !          4904: Node: Character Input97527
        !          4905: Node: Terminal Management99425
        !          4906: Node: Utility Functions100861
        !          4907: Node: Miscellaneous Functions104189
        !          4908: Node: Alternate Interface106778
        !          4909: Node: A Readline Example109012
        !          4910: Node: Alternate Interface Example110951
        !          4911: Node: Readline Signal Handling113724
        !          4912: Node: Custom Completers120246
        !          4913: Node: How Completing Works120966
        !          4914: Node: Completion Functions124280
        !          4915: Node: Completion Variables127854
        !          4916: Node: A Short Completion Example143502
        !          4917: Node: GNU Free Documentation License156281
        !          4918: Node: Concept Index181474
        !          4919: Node: Function and Variable Index182995
        !          4920: 
        !          4921: End Tag Table

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>