# HG changeset patch # User jwe # Date 865635119 0 # Node ID 639808eda8ebc46874cfb90094f8f1e442823d46 # Parent d2046ca9a380291cccddb66d398252cba1610355 [project @ 1997-06-06 22:11:57 by jwe] diff --git a/readline/doc/history.dvi b/readline/doc/history.dvi deleted file mode 100644 index 4a4673cd2221a39e2375d04dc427408231bd24c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ - - - -GNU History Library - - -

GNU History Library

-

Edition 2.1, for History Library Version 2.1.

-

March 1996

-
Brian Fox, Free Software Foundation
-
Chet Ramey, Case Western Reserve University
-

-


- -

-This document describes the GNU History library, a programming tool that -provides a consistent user interface for recalling lines of previously -typed input. - -

-

-Published by the Free Software Foundation
-675 Massachusetts Avenue,
-Cambridge, MA 02139 USA - -

-

-Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

-

-Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -

-

-Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. - -

-

-Copyright (C) 1989, 1991 Free Software Foundation, Inc. - -

- - - -

Using History Interactively

- -

-This chapter describes how to use the GNU History Library interactively, -from a user's standpoint. It should be considered a user's guide. For -information on using the GNU History Library in your own programs, -see section Programming with GNU History. - -

- - - -

Interactive History Expansion

-

- - -

-

-The History library provides a history expansion feature that is similar -to the history expansion provided by csh. This section -describes the syntax used to manipulate the history information. - -

-

-History expansions introduce words from the history list into -the input stream, making it easy to repeat commands, insert the -arguments to a previous command into the current input line, or -fix errors in previous commands quickly. - -

-

-History expansion takes place in two parts. The first is to determine -which line from the previous history should be used during substitution. -The second is to select portions of that line for inclusion into the -current one. The line selected from the previous history is called the -event, and the portions of that line that are acted upon are -called words. Various modifiers are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several English (or Unix) words -surrounded by quotes are considered as one word. -History expansions are introduced by the appearance of the -history expansion character, which is `!' by default. - -

- - - -

Event Designators

-

- - -

-

-An event designator is a reference to a command line entry in the -history list. - - -

-
- -
! -
-Start a history substitution, except when followed by a space, tab, -the end of the line, = or (. - -
!n -
-Refer to command line n. - -
!-n -
-Refer to the command n lines back. - -
!! -
-Refer to the previous command. This is a synonym for `!-1'. - -
!string -
-Refer to the most recent command starting with string. - -
!?string[?] -
-Refer to the most recent command containing string. The trailing -`?' may be omitted if the string is followed immediately by -a newline. - -
^string1^string2^ -
-Quick Substitution. Repeat the last command, replacing string1 -with string2. Equivalent to -!!:s/string1/string2/. - -
!# -
-The entire command line typed so far. - -
- - - -

Word Designators

- -

-Word designators are used to select desired words from the event. -A `:' separates the event specification from the word designator. It -can be omitted if the word designator begins with a `^', `$', -`*', `-', or `%'. Words are numbered from the beginning -of the line, with the first word being denoted by 0 (zero). Words are -inserted into the current line separated by single spaces. - -

-
- -
0 (zero) -
-The 0th word. For many applications, this is the command word. - -
n -
-The nth word. - -
^ -
-The first argument; that is, word 1. - -
$ -
-The last argument. - -
% -
-The word matched by the most recent `?string?' search. - -
x-y -
-A range of words; `-y' abbreviates `0-y'. - -
* -
-All of the words, except the 0th. This is a synonym for `1-$'. -It is not an error to use `*' if there is just one word in the event; -the empty string is returned in that case. - -
x* -
-Abbreviates `x-$' - -
x- -
-Abbreviates `x-$' like `x*', but omits the last word. - -
- -

-If a word designator is supplied without an event specification, the -previous command is used as the event. - -

- - -

Modifiers

- -

-After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a `:'. - -

-
- -
h -
-Remove a trailing pathname component, leaving only the head. - -
t -
-Remove all leading pathname components, leaving the tail. - -
r -
-Remove a trailing suffix of the form `.suffix', leaving -the basename. - -
e -
-Remove all but the trailing suffix. - -
p -
-Print the new command but do not execute it. - -
s/old/new/ -
-Substitute new for the first occurrence of old in the -event line. Any delimiter may be used in place of `/'. -The delimiter may be quoted in old and new -with a single backslash. If `&' appears in new, -it is replaced by old. A single backslash will quote -the `&'. The final delimiter is optional if it is the last -character on the input line. - -
& -
-Repeat the previous substitution. - -
g -
-Cause changes to be applied over the entire event line. Used in -conjunction with `s', as in gs/old/new/, -or with `&'. - -
- - - -

Programming with GNU History

- -

-This chapter describes how to interface programs that you write -with the GNU History Library. -It should be considered a technical guide. -For information on the interactive use of GNU History, see section Using History Interactively. - -

- - - -

Introduction to History

- -

-Many programs read input from the user a line at a time. The GNU History -library is able to keep track of those lines, associate arbitrary data with -each line, and utilize information from previous lines in composing new -ones. - -

-

-The programmer using the History library has available functions -for remembering lines on a history list, associating arbitrary data -with a line, removing lines from the list, searching through the list -for a line containing an arbitrary text string, and referencing any line -in the list directly. In addition, a history expansion function -is available which provides for a consistent user interface across -different programs. - -

-

-The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by csh. - -

-

-If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - -

- - -

History Storage

- -

-The history list is an array of history entries. A history entry is -declared as follows: - -

- -
-typedef struct _hist_entry {
-  char *line;
-  char *data;
-} HIST_ENTRY;
-
- -

-The history list itself might therefore be declared as - -

- -
-HIST_ENTRY **the_history_list;
-
- -

-The state of the History library is encapsulated into a single structure: - -

- -
-/* A structure used to pass the current state of the history stuff around. */
-typedef struct _hist_state {
-  HIST_ENTRY **entries;         /* Pointer to the entries themselves. */
-  int offset;                   /* The location pointer within this array. */
-  int length;                   /* Number of elements within this array. */
-  int size;                     /* Number of slots allocated to this array. */
-  int flags;
-} HISTORY_STATE;
-
- -

-If the flags member includes HS_STIFLED, the history has been -stifled. - -

- - -

History Functions

- -

-This section describes the calling sequence for the various functions -present in GNU History. - -

- - - -

Initializing History and State Management

- -

-This section describes functions used to initialize and manage -the state of the History library when you want to use the history -functions in your program. - -

-

-

-
Function: void using_history () -
-Begin a session in which the history functions might be used. This -initializes the interactive variables. -
- -

-

-

-
Function: HISTORY_STATE * history_get_history_state () -
-Return a structure describing the current state of the input history. -
- -

-

-

-
Function: void history_set_history_state (HISTORY_STATE *state) -
-Set the state of the history list according to state. -
- -

- - -

History List Management

- -

-These functions manage individual entries on the history list, or set -parameters managing the list itself. - -

-

-

-
Function: void add_history (char *string) -
-Place string at the end of the history list. The associated data -field (if any) is set to NULL. -
- -

-

-

-
Function: HIST_ENTRY * remove_history (int which) -
-Remove history entry at offset which from the history. The -removed element is returned so you can free the line, data, -and containing structure. -
- -

-

-

-
Function: HIST_ENTRY * replace_history_entry (int which, char *line, char *data) -
-Make the history entry at offset which have line and data. -This returns the old entry so you can dispose of the data. In the case -of an invalid which, a NULL pointer is returned. -
- -

-

-

-
Function: void clear_history () -
-Clear the history list by deleting all the entries. -
- -

-

-

-
Function: void stifle_history (int max) -
-Stifle the history list, remembering only the last max entries. -
- -

-

-

-
Function: int unstifle_history () -
-Stop stifling the history. This returns the previous amount the -history was stifled. The value is positive if the history was -stifled, negative if it wasn't. -
- -

-

-

-
Function: int history_is_stifled () -
-Returns non-zero if the history is stifled, zero if it is not. -
- -

- - -

Information About the History List

- -

-These functions return information about the entire history list or -individual list entries. - -

-

-

-
Function: HIST_ENTRY ** history_list () -
-Return a NULL terminated array of HIST_ENTRY which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return NULL. -
- -

-

-

-
Function: int where_history () -
-Returns the offset of the current history element. -
- -

-

-

-
Function: HIST_ENTRY * current_history () -
-Return the history entry at the current position, as determined by -where_history (). If there is no entry there, return a NULL -pointer. -
- -

-

-

-
Function: HIST_ENTRY * history_get (int offset) -
-Return the history entry at position offset, starting from -history_base. If there is no entry there, or if offset -is greater than the history length, return a NULL pointer. -
- -

-

-

-
Function: int history_total_bytes () -
-Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. -
- -

- - -

Moving Around the History List

- -

-These functions allow the current index into the history list to be -set or changed. - -

-

-

-
Function: int history_set_pos (int pos) -
-Set the position in the history list to pos, an absolute index -into the list. -
- -

-

-

-
Function: HIST_ENTRY * previous_history () -
-Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a NULL pointer. -
- -

-

-

-
Function: HIST_ENTRY * next_history () -
-Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a NULL pointer. -
- -

- - -

Searching the History List

-

- - -

-

-These functions allow searching of the history list for entries containing -a specific string. Searching may be performed both forward and backward -from the current history position. The search may be anchored, -meaning that the string must match at the beginning of the history entry. - - -

-

-

-
Function: int history_search (char *string, int direction) -
-Search the history for string, starting at the current history -offset. If direction < 0, then the search is through previous entries, -else through subsequent. If string is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -string was found. Otherwise, nothing is changed, and a -1 is -returned. -
- -

-

-

-
Function: int history_search_prefix (char *string, int direction) -
-Search the history for string, starting at the current history -offset. The search is anchored: matching lines must begin with -string. If direction < 0, then the search is through previous -entries, else through subsequent. If string is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. -
- -

-

-

-
Function: int history_search_pos (char *string, int direction, int pos) -
-Search for string in the history list, starting at pos, an -absolute index into the list. If direction is negative, the search -proceeds backward from pos, otherwise forward. Returns the absolute -index of the history element where string was found, or -1 otherwise. -
- -

- - -

Managing the History File

- -

-The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -

-

-

-
Function: int read_history (char *filename) -
-Add the contents of filename to the history list, a line at a -time. If filename is NULL, then read from -`~/.history'. Returns 0 if successful, or errno if not. -
- -

-

-

-
Function: int read_history_range (char *filename, int from, int to) -
-Read a range of lines from filename, adding them to the history list. -Start reading at line from and end at to. If -from is zero, start at the beginning. If to is less than -from, then read until the end of the file. If filename is -NULL, then read from `~/.history'. Returns 0 if successful, -or errno if not. -
- -

-

-

-
Function: int write_history (char *filename) -
-Write the current history to filename, overwriting filename -if necessary. If filename is -NULL, then write the history list to `~/.history'. Values -returned are as in read_history (). -
- -

-

-

-
Function: int append_history (int nelements, char *filename) -
-Append the last nelements of the history list to filename. -
- -

-

-

-
Function: int history_truncate_file (char *filename, int nlines) -
-Truncate the history file filename, leaving only the last -nlines lines. -
- -

- - -

History Expansion

- -

-These functions implement csh-like history expansion. - -

-

-

-
Function: int history_expand (char *string, char **output) -
-Expand string, placing the result into output, a pointer -to a string (see section Interactive History Expansion). Returns: -
- -
0 -
-If no expansions took place (or, if the only change in -the text was the de-slashifying of the history expansion -character); -
1 -
-if expansions did take place; -
-1 -
-if there was an error in expansion; -
2 -
-if the returned line should only be displayed, but not executed, -as with the :p modifier (see section Modifiers). -
- -

-If an error ocurred in expansion, then output contains a descriptive -error message. -

- -

-

-

-
Function: char * history_arg_extract (int first, int last, char *string) -
-Extract a string segment consisting of the first through last -arguments present in string. Arguments are broken up as in Bash. -
- -

-

-

-
Function: char * get_history_event (char *string, int *cindex, int qchar) -
-Returns the text of the history event beginning at string + -*cindex. *cindex is modified to point to after the event -specifier. At function entry, cindex points to the index into -string where the history event specification begins. qchar -is a character that is allowed to end the event specification in addition -to the "normal" terminating characters. -
- -

-

-

-
Function: char ** history_tokenize (char *string) -
-Return an array of tokens parsed out of string, much as the -shell might. The tokens are split on white space and on the -characters ()<>;&|$, and shell quoting conventions are -obeyed. -
- -

- - -

History Variables

- -

-This section describes the externally visible variables exported by -the GNU History Library. - -

-

-

-
Variable: int history_base -
-The logical offset of the first entry in the history list. -
- -

-

-

-
Variable: int history_length -
-The number of entries currently stored in the history list. -
- -

-

-

-
Variable: int max_input_history -
-The maximum number of history entries. This must be changed using -stifle_history (). -
- -

-

-

-
Variable: char history_expansion_char -
-The character that starts a history event. The default is `!'. -
- -

-

-

-
Variable: char history_subst_char -
-The character that invokes word substitution if found at the start of -a line. The default is `^'. -
- -

-

-

-
Variable: char history_comment_char -
-During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. -
- -

-

-

-
Variable: char * history_no_expand_chars -
-The list of characters which inhibit history expansion if found immediately -following history_expansion_char. The default is whitespace and -`='. -
- -

-

-

-
Variable: char * history_search_delimiter_chars -
-The list of additional characters which can delimit a history search -string, in addition to whitespace, `:' and `?' in the case of -a substring search. The default is empty. -
- -

-

-

-
Variable: int history_quotes_inhibit_expansion -
-If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -
- -

-

-

-
Variable: Function * history_inhibit_expansion_function -
-This should be set to the address of a function that takes two arguments: -a char * (string) and an integer index into that string (i). -It should return a non-zero value if the history expansion starting at -string[i] should not be performed; zero if the expansion should -be done. -It is intended for use by applications like Bash that use the history -expansion character for additional purposes. -By default, this variable is set to NULL. -
- -

- - -

History Programming Example

- -

-The following program demonstrates simple use of the GNU History Library. - -

- -
-main ()
-{
-  char line[1024], *t;
-  int len, done = 0;
-
-  line[0] = 0;
-
-  using_history ();
-  while (!done)
-    {
-      printf ("history$ ");
-      fflush (stdout);
-      t = fgets (line, sizeof (line) - 1, stdin);
-      if (t && *t)
-        {
-          len = strlen (t);
-          if (t[len - 1] == '\n')
-            t[len - 1] = '\0';
-        }
-
-      if (!t)
-        strcpy (line, "quit");
-
-      if (line[0])
-        {
-          char *expansion;
-          int result;
-
-          result = history_expand (line, &expansion);
-          if (result)
-            fprintf (stderr, "%s\n", expansion);
-
-          if (result < 0 || result == 2)
-            {
-              free (expansion);
-              continue;
-            }
-
-          add_history (expansion);
-          strncpy (line, expansion, sizeof (line) - 1);
-          free (expansion);
-        }
-
-      if (strcmp (line, "quit") == 0)
-        done = 1;
-      else if (strcmp (line, "save") == 0)
-        write_history ("history_file");
-      else if (strcmp (line, "read") == 0)
-        read_history ("history_file");
-      else if (strcmp (line, "list") == 0)
-        {
-          register HIST_ENTRY **the_list;
-          register int i;
-
-          the_list = history_list ();
-          if (the_list)
-            for (i = 0; the_list[i]; i++)
-              printf ("%d: %s\n", i + history_base, the_list[i]->line);
-        }
-      else if (strncmp (line, "delete", 6) == 0)
-        {
-          int which;
-          if ((sscanf (line + 6, "%d", &which)) == 1)
-            {
-              HIST_ENTRY *entry = remove_history (which);
-              if (!entry)
-                fprintf (stderr, "No such entry %d\n", which);
-              else
-                {
-                  free (entry->line);
-                  free (entry);
-                }
-            }
-          else
-            {
-              fprintf (stderr, "non-numeric arg given to `delete'\n");
-            }
-        }
-    }
-}
-
- - - -

Concept Index

-

-

a

- -
  • anchored search -
  • -

    e

    - -
  • event designators -
  • -

    h

    - -
  • history events -
  • history expansion -
  • History Searching -
  • - -

    - - -

    Function and Variable Index

    -

    -

    a

    - -
  • add_history -
  • append_history -
  • -

    c

    - -
  • clear_history -
  • current_history -
  • -

    g

    - -
  • get_history_event -
  • -

    h

    - -
  • history_arg_extract -
  • history_base -
  • history_comment_char -
  • history_expand -
  • history_expansion_char -
  • history_get -
  • history_get_history_state -
  • history_inhibit_expansion_function -
  • history_is_stifled -
  • history_length -
  • history_list -
  • history_no_expand_chars -
  • history_quotes_inhibit_expansion -
  • history_search -
  • history_search_delimiter_chars -
  • history_search_pos -
  • history_search_prefix -
  • history_set_history_state -
  • history_set_pos -
  • history_subst_char -
  • history_tokenize -
  • history_total_bytes -
  • history_truncate_file -
  • -

    m

    - -
  • max_input_history -
  • -

    n

    - -
  • next_history -
  • -

    p

    - -
  • previous_history -
  • -

    r

    - -
  • read_history -
  • read_history_range -
  • remove_history -
  • replace_history_entry -
  • -

    s

    - -
  • stifle_history -
  • -

    u

    - -
  • unstifle_history -
  • using_history -
  • -

    w

    - -
  • where_history -
  • write_history -
  • - -

    -


    -This document was generated on 16 April 1997 using the -texi2html -translator version 1.51.

    - - diff --git a/readline/doc/history.info b/readline/doc/history.info deleted file mode 100644 --- a/readline/doc/history.info +++ /dev/null @@ -1,785 +0,0 @@ -This is Info file history.info, produced by Makeinfo-1.55 from the -input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - - Copyright (C) 1988, 1991, 1993, 1995, 1996 Free Software Foundation, -Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: history.info, Node: Top, Next: Using History Interactively, Prev: (DIR), Up: (DIR) - -GNU History Library -******************* - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - -* Menu: - -* Using History Interactively:: GNU History User's Manual. -* Programming with GNU History:: GNU History Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top - -Using History Interactively -*************************** - - This chapter describes how to use the GNU History Library -interactively, from a user's standpoint. It should be considered a -user's guide. For information on using the GNU History Library in your -own programs, *note Programming with GNU History::.. - -* Menu: - -* History Interaction:: What it feels like using History as a user. - - -File: history.info, Node: History Interaction, Up: Using History Interactively - -Interactive History Expansion -============================= - - The History library provides a history expansion feature that is -similar to the history expansion provided by `csh'. This section -describes the syntax used to manipulate the history information. - - History expansions introduce words from the history list into the -input stream, making it easy to repeat commands, insert the arguments -to a previous command into the current input line, or fix errors in -previous commands quickly. - - History expansion takes place in two parts. The first is to -determine which line from the previous history should be used during -substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the previous -history is called the "event", and the portions of that line that are -acted upon are called "words". Various "modifiers" are available to -manipulate the selected words. The line is broken into words in the -same fashion that Bash does, so that several English (or Unix) words -surrounded by quotes are considered as one word. History expansions -are introduced by the appearance of the history expansion character, -which is `!' by default. - -* Menu: - -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of substitution. - - -File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction - -Event Designators ------------------ - - An event designator is a reference to a command line entry in the -history list. - -`!' - Start a history substitution, except when followed by a space, tab, - the end of the line, = or (. - -`!N' - Refer to command line N. - -`!-N' - Refer to the command N lines back. - -`!!' - Refer to the previous command. This is a synonym for `!-1'. - -`!STRING' - Refer to the most recent command starting with STRING. - -`!?STRING[?]' - Refer to the most recent command containing STRING. The trailing - `?' may be omitted if the STRING is followed immediately by a - newline. - -`^STRING1^STRING2^' - Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. - -`!#' - The entire command line typed so far. - - -File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction - -Word Designators ----------------- - - Word designators are used to select desired words from the event. A -`:' separates the event specification from the word designator. It can -be omitted if the word designator begins with a `^', `$', `*', `-', or -`%'. Words are numbered from the beginning of the line, with the first -word being denoted by 0 (zero). Words are inserted into the current -line separated by single spaces. - -`0 (zero)' - The `0'th word. For many applications, this is the command word. - -`N' - The Nth word. - -`^' - The first argument; that is, word 1. - -`$' - The last argument. - -`%' - The word matched by the most recent `?STRING?' search. - -`X-Y' - A range of words; `-Y' abbreviates `0-Y'. - -`*' - All of the words, except the `0'th. This is a synonym for `1-$'. - It is not an error to use `*' if there is just one word in the - event; the empty string is returned in that case. - -`X*' - Abbreviates `X-$' - -`X-' - Abbreviates `X-$' like `X*', but omits the last word. - - If a word designator is supplied without an event specification, the -previous command is used as the event. - - -File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction - -Modifiers ---------- - - After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a `:'. - -`h' - Remove a trailing pathname component, leaving only the head. - -`t' - Remove all leading pathname components, leaving the tail. - -`r' - Remove a trailing suffix of the form `.SUFFIX', leaving the - basename. - -`e' - Remove all but the trailing suffix. - -`p' - Print the new command but do not execute it. - -`s/OLD/NEW/' - Substitute NEW for the first occurrence of OLD in the event line. - Any delimiter may be used in place of `/'. The delimiter may be - quoted in OLD and NEW with a single backslash. If `&' appears in - NEW, it is replaced by OLD. A single backslash will quote the - `&'. The final delimiter is optional if it is the last character - on the input line. - -`&' - Repeat the previous substitution. - -`g' - Cause changes to be applied over the entire event line. Used in - conjunction with `s', as in `gs/OLD/NEW/', or with `&'. - - -File: history.info, Node: Programming with GNU History, Next: Concept Index, Prev: Using History Interactively, Up: Top - -Programming with GNU History -**************************** - - This chapter describes how to interface programs that you write with -the GNU History Library. It should be considered a technical guide. -For information on the interactive use of GNU History, *note Using -History Interactively::.. - -* Menu: - -* Introduction to History:: What is the GNU History library for? -* History Storage:: How information is stored. -* History Functions:: Functions that you can use. -* History Variables:: Variables that control behaviour. -* History Programming Example:: Example of using the GNU History Library. - - -File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History - -Introduction to History -======================= - - Many programs read input from the user a line at a time. The GNU -History library is able to keep track of those lines, associate -arbitrary data with each line, and utilize information from previous -lines in composing new ones. - - The programmer using the History library has available functions for -remembering lines on a history list, associating arbitrary data with a -line, removing lines from the list, searching through the list for a -line containing an arbitrary text string, and referencing any line in -the list directly. In addition, a history "expansion" function is -available which provides for a consistent user interface across -different programs. - - The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by `csh'. - - If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - - -File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History - -History Storage -=============== - - The history list is an array of history entries. A history entry is -declared as follows: - - typedef struct _hist_entry { - char *line; - char *data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - HIST_ENTRY **the_history_list; - - The state of the History library is encapsulated into a single -structure: - - /* A structure used to pass the current state of the history stuff around. */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes `HS_STIFLED', the history has been -stifled. - - -File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History - -History Functions -================= - - This section describes the calling sequence for the various functions -present in GNU History. - -* Menu: - -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. - - -File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions - -Initializing History and State Management ------------------------------------------ - - This section describes functions used to initialize and manage the -state of the History library when you want to use the history functions -in your program. - - - Function: void using_history () - Begin a session in which the history functions might be used. This - initializes the interactive variables. - - - Function: HISTORY_STATE * history_get_history_state () - Return a structure describing the current state of the input - history. - - - Function: void history_set_history_state (HISTORY_STATE *state) - Set the state of the history list according to STATE. - - -File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions - -History List Management ------------------------ - - These functions manage individual entries on the history list, or set -parameters managing the list itself. - - - Function: void add_history (char *string) - Place STRING at the end of the history list. The associated data - field (if any) is set to `NULL'. - - - Function: HIST_ENTRY * remove_history (int which) - Remove history entry at offset WHICH from the history. The - removed element is returned so you can free the line, data, and - containing structure. - - - Function: HIST_ENTRY * replace_history_entry (int which, char *line, - char *data) - Make the history entry at offset WHICH have LINE and DATA. This - returns the old entry so you can dispose of the data. In the case - of an invalid WHICH, a `NULL' pointer is returned. - - - Function: void clear_history () - Clear the history list by deleting all the entries. - - - Function: void stifle_history (int max) - Stifle the history list, remembering only the last MAX entries. - - - Function: int unstifle_history () - Stop stifling the history. This returns the previous amount the - history was stifled. The value is positive if the history was - stifled, negative if it wasn't. - - - Function: int history_is_stifled () - Returns non-zero if the history is stifled, zero if it is not. - - -File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions - -Information About the History List ----------------------------------- - - These functions return information about the entire history list or -individual list entries. - - - Function: HIST_ENTRY ** history_list () - Return a `NULL' terminated array of `HIST_ENTRY' which is the - current input history. Element 0 of this list is the beginning of - time. If there is no history, return `NULL'. - - - Function: int where_history () - Returns the offset of the current history element. - - - Function: HIST_ENTRY * current_history () - Return the history entry at the current position, as determined by - `where_history ()'. If there is no entry there, return a `NULL' - pointer. - - - Function: HIST_ENTRY * history_get (int offset) - Return the history entry at position OFFSET, starting from - `history_base'. If there is no entry there, or if OFFSET is - greater than the history length, return a `NULL' pointer. - - - Function: int history_total_bytes () - Return the number of bytes that the primary history entries are - using. This function returns the sum of the lengths of all the - lines in the history. - - -File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions - -Moving Around the History List ------------------------------- - - These functions allow the current index into the history list to be -set or changed. - - - Function: int history_set_pos (int pos) - Set the position in the history list to POS, an absolute index - into the list. - - - Function: HIST_ENTRY * previous_history () - Back up the current history offset to the previous history entry, - and return a pointer to that entry. If there is no previous - entry, return a `NULL' pointer. - - - Function: HIST_ENTRY * next_history () - Move the current history offset forward to the next history entry, - and return the a pointer to that entry. If there is no next - entry, return a `NULL' pointer. - - -File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions - -Searching the History List --------------------------- - - These functions allow searching of the history list for entries -containing a specific string. Searching may be performed both forward -and backward from the current history position. The search may be -"anchored", meaning that the string must match at the beginning of the -history entry. - - - Function: int history_search (char *string, int direction) - Search the history for STRING, starting at the current history - offset. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that history entry, and the value - returned is the offset in the line of the entry where STRING was - found. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_prefix (char *string, int direction) - Search the history for STRING, starting at the current history - offset. The search is anchored: matching lines must begin with - STRING. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that entry, and the return value - is 0. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_pos (char *string, int direction, int - pos) - Search for STRING in the history list, starting at POS, an - absolute index into the list. If DIRECTION is negative, the search - proceeds backward from POS, otherwise forward. Returns the - absolute index of the history element where STRING was found, or - -1 otherwise. - - -File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions - -Managing the History File -------------------------- - - The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - - - Function: int read_history (char *filename) - Add the contents of FILENAME to the history list, a line at a - time. If FILENAME is `NULL', then read from `~/.history'. - Returns 0 if successful, or errno if not. - - - Function: int read_history_range (char *filename, int from, int to) - Read a range of lines from FILENAME, adding them to the history - list. Start reading at line FROM and end at TO. If FROM is zero, - start at the beginning. If TO is less than FROM, then read until - the end of the file. If FILENAME is `NULL', then read from - `~/.history'. Returns 0 if successful, or `errno' if not. - - - Function: int write_history (char *filename) - Write the current history to FILENAME, overwriting FILENAME if - necessary. If FILENAME is `NULL', then write the history list to - `~/.history'. Values returned are as in `read_history ()'. - - - Function: int append_history (int nelements, char *filename) - Append the last NELEMENTS of the history list to FILENAME. - - - Function: int history_truncate_file (char *filename, int nlines) - Truncate the history file FILENAME, leaving only the last NLINES - lines. - - -File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions - -History Expansion ------------------ - - These functions implement `csh'-like history expansion. - - - Function: int history_expand (char *string, char **output) - Expand STRING, placing the result into OUTPUT, a pointer to a - string (*note History Interaction::.). Returns: - `0' - If no expansions took place (or, if the only change in the - text was the de-slashifying of the history expansion - character); - - `1' - if expansions did take place; - - `-1' - if there was an error in expansion; - - `2' - if the returned line should only be displayed, but not - executed, as with the `:p' modifier (*note Modifiers::.). - - If an error ocurred in expansion, then OUTPUT contains a - descriptive error message. - - - Function: char * history_arg_extract (int first, int last, char - *string) - Extract a string segment consisting of the FIRST through LAST - arguments present in STRING. Arguments are broken up as in Bash. - - - Function: char * get_history_event (char *string, int *cindex, int - qchar) - Returns the text of the history event beginning at STRING + - *CINDEX. *CINDEX is modified to point to after the event - specifier. At function entry, CINDEX points to the index into - STRING where the history event specification begins. QCHAR is a - character that is allowed to end the event specification in - addition to the "normal" terminating characters. - - - Function: char ** history_tokenize (char *string) - Return an array of tokens parsed out of STRING, much as the shell - might. The tokens are split on white space and on the characters - `()<>;&|$', and shell quoting conventions are obeyed. - - -File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History - -History Variables -================= - - This section describes the externally visible variables exported by -the GNU History Library. - - - Variable: int history_base - The logical offset of the first entry in the history list. - - - Variable: int history_length - The number of entries currently stored in the history list. - - - Variable: int max_input_history - The maximum number of history entries. This must be changed using - `stifle_history ()'. - - - Variable: char history_expansion_char - The character that starts a history event. The default is `!'. - - - Variable: char history_subst_char - The character that invokes word substitution if found at the start - of a line. The default is `^'. - - - Variable: char history_comment_char - During tokenization, if this character is seen as the first - character of a word, then it and all subsequent characters up to a - newline are ignored, suppressing history expansion for the - remainder of the line. This is disabled by default. - - - Variable: char * history_no_expand_chars - The list of characters which inhibit history expansion if found - immediately following HISTORY_EXPANSION_CHAR. The default is - whitespace and `='. - - - Variable: char * history_search_delimiter_chars - The list of additional characters which can delimit a history - search string, in addition to whitespace, `:' and `?' in the case - of a substring search. The default is empty. - - - Variable: int history_quotes_inhibit_expansion - If non-zero, single-quoted words are not scanned for the history - expansion character. The default value is 0. - - - Variable: Function * history_inhibit_expansion_function - This should be set to the address of a function that takes two - arguments: a `char *' (STRING) and an integer index into that - string (I). It should return a non-zero value if the history - expansion starting at STRING[I] should not be performed; zero if - the expansion should be done. It is intended for use by - applications like Bash that use the history expansion character - for additional purposes. By default, this variable is set to NULL. - - -File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History - -History Programming Example -=========================== - - The following program demonstrates simple use of the GNU History -Library. - - main () - { - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } - } - - -File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top - -Concept Index -************* - -* Menu: - -* anchored search: Searching the History List. -* event designators: Event Designators. -* history events: Event Designators. -* history expansion: History Interaction. -* History Searching: Searching the History List. - - -File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* add_history: History List Management. -* append_history: Managing the History File. -* clear_history: History List Management. -* current_history: Information About the History List. -* get_history_event: History Expansion. -* history_arg_extract: History Expansion. -* history_base: History Variables. -* history_comment_char: History Variables. -* history_expand: History Expansion. -* history_expansion_char: History Variables. -* history_get: Information About the History List. -* history_get_history_state: Initializing History and State Management. -* history_inhibit_expansion_function: History Variables. -* history_is_stifled: History List Management. -* history_length: History Variables. -* history_list: Information About the History List. -* history_no_expand_chars: History Variables. -* history_quotes_inhibit_expansion: History Variables. -* history_search: Searching the History List. -* history_search_delimiter_chars: History Variables. -* history_search_pos: Searching the History List. -* history_search_prefix: Searching the History List. -* history_set_history_state: Initializing History and State Management. -* history_set_pos: Moving Around the History List. -* history_subst_char: History Variables. -* history_tokenize: History Expansion. -* history_total_bytes: Information About the History List. -* history_truncate_file: Managing the History File. -* max_input_history: History Variables. -* next_history: Moving Around the History List. -* previous_history: Moving Around the History List. -* read_history: Managing the History File. -* read_history_range: Managing the History File. -* remove_history: History List Management. -* replace_history_entry: History List Management. -* stifle_history: History List Management. -* unstifle_history: History List Management. -* using_history: Initializing History and State Management. -* where_history: Information About the History List. -* write_history: Managing the History File. - - - -Tag Table: -Node: Top1035 -Node: Using History Interactively1629 -Node: History Interaction2137 -Node: Event Designators3614 -Node: Word Designators4537 -Node: Modifiers5786 -Node: Programming with GNU History6924 -Node: Introduction to History7650 -Node: History Storage8971 -Node: History Functions10064 -Node: Initializing History and State Management11035 -Node: History List Management11827 -Node: Information About the History List13348 -Node: Moving Around the History List14654 -Node: Searching the History List15539 -Node: Managing the History File17371 -Node: History Expansion18877 -Node: History Variables20721 -Node: History Programming Example23039 -Node: Concept Index25643 -Node: Function and Variable Index26124 - -End Tag Table diff --git a/readline/doc/history.ps b/readline/doc/history.ps deleted file mode 100644 --- a/readline/doc/history.ps +++ /dev/null @@ -1,1558 +0,0 @@ -%!PS (but not EPSF; comments have been disabled) -%DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi -%DVIPSParameters: dpi=300, compressed, comments removed -%DVIPSSource: TeX output 1997.04.16:1522 -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} -forall round exch round exch]setmatrix}N /@landscape{/isls true N}B -/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B -/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ -/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N -string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N -end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ -/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] -N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N -/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N -/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id -gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp -add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add -/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ -dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 -adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 -idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string -putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval -adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} -{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ -adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 -chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] -}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ -cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin -0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul -add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict -/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 -0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} -B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ -4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ -p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p -a}B /bos{/SS save N}B /eos{SS restore}B end -TeXDict begin 40258431 52099146 1000 300 300 (history.dvi) -@start /Fa 1 47 df<127012F8A212F012E005057B840E>46 D -E /Fb 1 47 df<1238127C12FCA212F8127006067A8512>46 D E -/Fc 25 123 df97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E0300 -1C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I -I<137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEF -C0EA07CF12177F9614>II<13FCEA01FEEA038EEA070413 -00A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>II<12FCA2121CA51378EA1DFEEA1F86EA1E -07121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A2 -0D187C9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38 -133C131C7F38FF1F80A21117809614>107 DI< -EAFB8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>IIII< -EA03E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB -3FE0A213187F8F14>III<1206120EA4EA7FFC12FFEA0E00A8130EA3 -131CEA07F8EA01F00F157F9414>II<38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38 -FE3F80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I< -EA7E3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A2 -11107F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25B -A3485A12730077C7FC127E123C11187F8F14>II -E /Fd 1 47 df<1270A212F0126004047D830B>46 D E /Fe 25 -122 df48 D<12035AB4FC1207B3A2EA7FF80D187D9713> -II54 D<1240EA7FFF13FEA2EA4004EA -80081310A2EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>III<39FFE1FFC0390E001C00AB38 -0FFFFC380E001CAC39FFE1FFC01A1A7F991D>72 D83 D97 D99 D<133F1307A9EA03E7EA0C17 -EA180F487E127012E0A6126012706C5AEA1C373807C7E0131A7F9915>II103 -D<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I<1218123CA212 -181200A612FC121CAE12FF081A80990A>I110 DII114 DI<1208A41218A21238 -EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38FF0F80383C0700EA1C06 -1304A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14>118 -D<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181C -EA381E38FC3FC012107F8F14>120 D<38FF0F80383C0700EA1C061304A26C5AA26C5AA3 -EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I -E /Ff 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012 -F0AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E /Fg 27 -123 df12 D<90380FFF80137F3801FC1F3803F0 -3FEA07E0EA0FC0141FA7B6FCA2380FC01FB2397FF8FFF0A21C237FA220>I97 DII<49B4FCA2EB00 -3FAB13FE3807FFBF380FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C5B380F -81FF3907FF3FE0EA01FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E00F012 -7E007C13F8147812FCB512F8A200FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0 -C6130015167E951A>II<9038FE0F803903FF9FC0380F83E3381F01F3 -391E00F000003E7FA5001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C38 -1FFFE014FC6C13FF7E001F1480397C001FC00078130F00F81307A3007CEB0F806CEB1F00 -381F807E6CB45A000113E01A217F951D>II<121E123FEA7F80A4EA3F00121EC7FCA6 -EAFF80A2121FB2EAFFF0A20C247EA30F>I107 DI<3AFF03F803F890 -390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0 -A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B -167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C13 -3E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBF -FC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEB -BFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>II<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8 -A214167E9518>I<3807F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C -7E6C1380120738003FC0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E95 -17>I<487EA41203A21207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FE -EA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B16 -7D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5A -A26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FC -A23A1F807C00E0D80FC014C08001E013010007017F1380A2D803F0EB0300ECCF8301F813 -87D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026 -167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7 -FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B -167F951E>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C -5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305B -EA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E013 -8038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA -7E03B5FCA214167E9519>I E /Fh 24 119 df<13E0A538F0E1E0EAFCE7387EEFC0381F -FF00EA07FCEA01F0EA07FCEA1FFF387EEFC038FCE7E0EAF0E13800E000A513157D991A> -42 D<1338137CA2136C13EEA313C6A2EA01C7A438038380A4380701C0A213FFA24813E0 -EA0E00A4481370387F01FC38FF83FE387F01FC171E7F9D1A>65 D69 -D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012 -FF127F161E7F9D1A>I<38FF83FEA3381C0070AA381FFFF0A3381C0070AB38FF83FEA317 -1E7F9D1A>72 DI<38FE03FE12FFA238 -1D8070A213C0121CA213E0A213601370A213301338A21318131CA2130C130EA21306A213 -071303A238FF81F0A21380171E7F9D1A>78 DI82 -D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12701278123FEA1FF0EA07 -FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF00138FC03C0B5128000EF13 -00EAE3FC141E7D9D1A>I<387FFFFEB5FCA238E0380EA500001300B33803FF80A3171E7F -9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003138013C700011300A2EA -00EEA2137CA21338AA48B4FCA3171E7F9D1A>89 D<387FFFC0B512E0A26C13C013047D7E -1A>95 D97 -D99 DI<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FF -E3FE13E713E3171E7F9D1A>104 DI110 DI<387F81F838FF8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC -7E17157F941A>114 D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF -6C1380EB3F00141C7F9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00 -FC17157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A338 -01C700A3EA00EEA3137CA2133817157F941A>I E /Fi 41 123 df12 D<123C127E12FFA4127E123C08087C8711>46 -D<131C133C13FC12FFA21200B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E -07F0383803F8386001FC387C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14 -F8EB03F0EB07E01480EB0F00131E5B1370EBE003EA01C038038007380700061206380FFF -FE5A5A4813FCB5FCA218237DA21F>I<48B4FC000713E0381E03F0383801F8003C13FC38 -7E00FEA3123EEA1C01000013FCA2EB03F8EB07F0EB0FC03801FF00A2380007E0EB01F014 -F8EB00FC14FE14FFA21210127C12FEA214FEA2387C01FC007013F8383E07F0380FFFC000 -01130018237DA21F>I<14381478A214F81301130313071306130C131C13381330136013 -E0EA01C01380EA03005A120E5A12185A12705AB612C0A2390001F800A790387FFFC0A21A -237EA21F>I<0018130C001F137CEBFFF814F014E014C01480EBFC000018C7FCA513FF00 -1B13E0381F03F0381C00F8000813FCC7127EA3147FA2127812FCA3147E5A006013FC1270 -383801F8381E07E03807FFC03801FE0018237DA21F>II<1230123C003FB512C0A215804814005C5C38600018A200E05B485B5CC6 -485AA249C7FC1306130EA25BA2133CA25BA213F8A41201A66C5A13601A257DA41F>I<14 -1CA2143EA3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F1403 -011C7FEB1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C7 -120FA2486E7ED8FFF090B51280A229257EA42E>65 D68 DII72 -DI76 DI<01FF1380000713E3380F80F7381E001F48130F48 -1307140312F81401A27E91C7FCB4FCEA7FE013FE383FFFE014F86C13FE00077F6C1480C6 -7E010313C0EB003FEC0FE01407A200C01303A315C07E6C13076C14806CEB0F0038FFC03E -38E3FFF838803FE01B257DA422>83 D87 D97 DIII<137F3803FFC03807C1F0380F80F8EA1F0048 -137C127E147E12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803 -FFE038007F8017187E971C>II<3901FF07C00007EBDFE0380F83F1EA1F -01393E00F800007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA2123812 -3C383FFFE06C13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00 -381F807E3807FFF8C613C01B247E971F>II<120FEA1F80EA3FC0A4 -EA1F80EA0F00C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I108 D<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813 -CC903A9007E803F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80 -FE903883FF80390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722> -II<38FFC1FCEBCFFF390F -FC1FC09038F007E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE090 -38DC1F809038CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF838 -0F8C7CEB90FC13B013A01478EBE0005BAEEAFFFEA216187F9719>114 -D<3807F8C0EA1FFFEA3C07EA7001EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0 -120338001FE01303EAC001A212E014C0EAF00338FC078038EFFF00EAC3FC13187E9718> -I<13C0A41201A312031207120F121FB512C0A2380FC000AC1460A63807E0C013E13801FF -8038007E0013237FA218>I<39FFC07FE0A2000F1307B0140FA200071317EBE0673903FF -C7FE38007F071F187E9722>I<39FFF80FF8A2390FC001C015803907E00300A26D5A0003 -1306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D -187F9720>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C6C5A00001360EB7EC0 -6D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F3907003F8048131F39FF -C07FF8A21D187F9720>120 D<39FFF80FF8A2390FC001C015803907E00300A26D5A0003 -1306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA213 -06A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720>I<387FFFF8A2 -387C03F0EA700738600FE000E013C0EB1F80EAC03F1400137EEA00FE5B485A0003130C13 -F0EA07E0120FEBC01C381F8018003F1338387F0078387E01F8B5FCA216187E971B>I -E /Fj 31 122 df<903803F07C90381E0DC69038380F0FEB701E01E0130EEC0C003801C0 -1CA548485A007FB512C03903803800A448485AA6000E5BA648485A001E7F38FF8FFC2020 -7E9F1B>11 DI<903803F03F90 -391E09E0809039380F80C09039701F01E0EBE03E021E13C02601C01CC7FCA548485A007F -B612803903803803A43A0700700700A6000EEBE00EA64848485A001EEBE01E3AFF8FF8FF -C023207E9F26>14 D<13201360A4383061C0383C4380380E4E00EA0778EA01E0A2EA07B8 -EA1C9CEA708FEAE083EA0180A490C7FC12147AA117>42 D45 -D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B -9D17>49 DI<13FFEA01FE1380A5EA0300A61206A65AA65AA65AA65AA6 -B4FCA2102D7EA10D>91 D<13FFEA01FEEA0006A5130CA61318A61330A61360A613C0A6EA -0180A6EAFF00A2102D82A10D>93 D97 -D<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA -07E011147D9314>99 D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121C -EA3C00383801C0127812F0A438E00380A412F0EA700738380F00381C37803807C7E01520 -7D9F19>I<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5A -EA7002EA3004EA1C18EA07E011147D9314>II<140EEB3E -11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA2 -1218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC18 -1F809417>I<13E0120712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713 -E01300A5380E01C0A6381C0380001E13C038FF8FF014207E9F19>I -I<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C ->108 D<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5 -000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0 -EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E -9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C01303 -00F0138038700700EA380E6C5AEA07E014147D9317>IIIII<1380EA -0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12> -I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011 -147B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA -039013A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C03006014 -8015401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A2 -6C485A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0C0EBE1 -80EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE -07FC18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B143014205C1370 -5CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E6 -1278191D809318>I E /Fk 36 122 df49 DI<1578A215FCA34A7EA24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F0278 -7FEC700FA202E07F1507010180ECC003A249486C7EA201078191C7FC498191B6FCA24981 -011CC7123F013C810138141FA24981160F01F081491407A2484881486C1403B549B512FC -A336317DB03D>65 DI<91 -3A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9 -FF807F4848C8127F4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7 -FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C -6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F8020313 -8031317CB03A>I70 -DI -II78 D80 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3 -481603A5C792C7FCB3AA017FB6FCA331307DAF38>84 DII97 -DIIIII<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>III108 D<2703F007F8EB1FE000FFD9 -3FFEEBFFF8913A783F01E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602 -F8148001FC5CA3495CB3B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFE -EC783F02C013803A0FF1801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F -2D>II<3901F83FE000FFEBFF -FC9038FBE07F9039FF003F80D807FEEB1FC049EB0FE04914F0ED07F8A216FC1503A216FE -A816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3F -C091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30F -F0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 -D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0 -6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13 -1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201 -12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB -07F0192E7FAD1F>IIII<3A7FFF807FFCA33A03FC000F006C6C131E6C -6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E -81815B903803DFE09038078FF08190380F07FC90381E03FEEB3C01496C7E4914804848EB -7FC00003EC3FE026FFFC01B5FCA328207F9F2B>II -E /Fl 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C0 -00061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C -1530A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090 -C7FC282B7EA02D>13 D E /Fm 46 122 df<123C127FEAFF80A213C0A3127F123E1200A2 -EA0180A3EA0300A21206120E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00 -A2121C09097B8813>46 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277B -A622>49 DII<140FA25C5C5C5C -5BA2EB03BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12 -F0B612F8A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C -5C14C091C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215 -E0A21218127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C61380 -1B277DA622>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5C -C6485AA2495A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297C -A822>55 D65 -DI<91387FE003903907FF -FC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848147F4848143F4848141F48 -5A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C -6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE009038007FF028297CA831> -I69 DI<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848 -80484880484880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7E -A26C7E6C7E6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297C -A835>III -77 DI80 -D82 D<9038FF80600003EBF0E0000F13F8381F80FD383F -001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE -80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C1307 -6C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I85 DII<3803FF80000F13F0381F01FC383F80 -FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E -13DF393F839FFC381FFE0F3803FC031E1B7E9A21>97 DIIII< -EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A338 -7FFF80A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003E -EB3E10007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC12 -38A2123C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007C -EB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>II<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120F -B3A3EAFFFEA30F2B7EAA12>I108 -D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200 -01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1 -FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25 ->II<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC -140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80 -9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13 -D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78 -00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC -130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0 -A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801 -FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF -3801FFC738007F87201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0 -A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5A -A26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8 -EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F14 -38EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I< -39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A -130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F -39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EB -FC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D -5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23 ->I E /Fn 75 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -DI -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>III<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>II<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>IIII<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC -38FE078038F803C0EAF001EB00E05A7E1270A3383801C0EA3C03381E0780380FFF006C5A -EA01F8131C7E9B18>54 D<1230127812FCA2127812301200A81230127812FCA212781230 -0614779318>58 D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E12 -1C123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07 -F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E013 -03EB00C013187E9918>I<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>I<12 -6012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE -00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>II<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E -03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 D68 DII<387F07F038FF8FF8387F07F0381C01C0A9 -EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>72 -DI76 D<387E07F038FF0FF8387F07F0381D81C0A313 -C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C -7F9B18>78 DII82 D<3803F1C0EA1FFF5AEA7C0FEA70 -03EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A21260 -12E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E0 -7038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F0138 -0783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03381C01C0EA1E -03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC487E6C5A15 -1C7F9B18>89 D91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>III<387FFFC0B512E0A26C13C013047E7F18>I<1206121E123E12381270A212E0A312F8 -12FC127CA21238070E789E18>II<127E -12FE127E120EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80 -E013C1EBFFC0000E138038063E00151C809B18>II< -EB1F80133F131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007 -A2EA380FEA3C1F381FFFF0380FFBF83803E3F0151C7E9B18>III<3801E1F03807FFF85A381E1E30381C0E00 -487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F03870 -0070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE12 -7E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17 -1C809B18>II108 D<38F9C1C038FFF7F013FF383E3E -38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>IIII<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2 -EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38 -FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I< -EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE0 -03A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA23803 -8000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E -07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8 -007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A213701514 -7F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380 -A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039E -EA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F800 -7F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2 -EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC -121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485A -EA03C0485A380F0070121E5A5AB512F0A314147F9318>II<126012 -F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0 -005BABEA03C012FF90C7FC127C13247E9F18>II E /Fo 74 123 df<90381F83E09038F06E303901C07878380380F8 -903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11 -D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F -19>II<9038 -1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A -3FE3FE3FE02320809F26>I34 D<127012F812FCA212741204A31208A21210A2122012 -40060E7C9F0D>39 D<13401380EA01005A12061204120C5AA212381230A212701260A412 -E0AC1260A412701230A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12 -407E12307E1208120C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A -120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240 -050E7C840D>44 DI<127012F8A3127005057C840D>I48 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C -9D17>III<1306A2130EA2131E132EA2134E138EA2EA010E1202A2120412 -08A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17>II<137CEA0182EA0701380E03 -80EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F0 -13C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE0 -14C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A -131F7E9D17>III<127012F8A312701200AA127012F8 -A3127005147C930D>I<127012F8A312701200AA127012F012F8A212781208A31210A312 -20A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03E -EB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F -9F22>65 DI<90380FE01090 -38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814 -00A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C -217E9F21>IIII<9038 -0FE0109038381C309038E002703803C00139078000F048C71270121E15305A1510127C12 -7800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E00230 -9038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39 -FFF07FF81D1F7E9E22>II76 DIIIIII<3803F0 -40380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC00 -071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C01430008014 -10A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46C -EB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F80 -00F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804 -A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF0 -3B1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F0 -1410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D -000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0 -B3B3A512FFA2082D7CA10D>91 DI<12FFA21203B3B3A512FFA2082D80A10D>I<120812 -101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 DI<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478 -A6147014F014E0001E13C0381A018038198700EA107C15207E9F19>IIII< -137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E038 -03E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2 -EA3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC00 -141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E -9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3 -EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E> -I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C3813 -3C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F -9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF80 -21147E9326>IIII<38 -01F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA -0709EA01F1EA0001A8EB0FF8151D7F9318>III<1202A31206A212 -0EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1F -EA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C13 -80A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39 -FF9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A239038861 -001471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E -03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202 -EA060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C -13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EA -F080A200F1C7FC1262123C151D7F9318>II E /Fp 13 122 df71 DI76 -D78 -D85 D97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I105 D<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE0D807F8EB0FF0 -48486D7EA248486D7E003F81A248486D7EA400FF1680A9007F1600A36C6C495AA2001F5D -6D1307000F5D6C6C495AD803FEEB3FE03A00FF80FF806DB5C7FC010F13F8010113C02926 -7DA530>111 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000 -035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I121 D E end -TeXDict begin - -1 0 bop 0 693 a Fp(GNU)33 b(History)f(Library)p 0 743 -1950 17 v 1035 791 a Fo(Edition)16 b(2.1,)e(for)h Fn(History)f(Library) -g Fo(V)l(ersion)i(2.1.)1718 845 y(Marc)o(h)e(1996)0 2467 -y Fm(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F) --6 b(oundation)0 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 -b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 0 2570 -1950 9 v eop -2 1 bop 0 320 a Fo(This)16 b(do)q(cumen)o(t)g(describ)q(es)h(the)f(GNU) -f(History)g(library)l(,)h(a)g(programming)e(to)q(ol)i(that)f(pro)o -(vides)h(a)f(consisten)o(t)0 382 y(user)g(in)o(terface)h(for)e -(recalling)j(lines)g(of)e(previously)h(t)o(yp)q(ed)g(input.)0 -519 y(Published)h(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)0 582 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)0 -644 y(Cam)o(bridge,)h(MA)g(02139)f(USA)0 781 y(P)o(ermission)f(is)g -(gran)o(ted)f(to)f(mak)o(e)h(and)h(distribute)h(v)o(erbatim)e(copies)h -(of)f(this)h(man)o(ual)g(pro)o(vided)g(the)f(cop)o(yrigh)o(t)0 -843 y(notice)k(and)f(this)h(p)q(ermission)h(notice)e(are)g(preserv)o -(ed)h(on)f(all)h(copies.)0 980 y(P)o(ermission)f(is)f(gran)o(ted)f(to)h -(cop)o(y)g(and)g(distribute)h(mo)q(di\014ed)h(v)o(ersions)e(of)f(this)i -(man)o(ual)f(under)h(the)f(conditions)0 1043 y(for)e(v)o(erbatim)g(cop) -o(ying,)h(pro)o(vided)h(that)d(the)i(en)o(tire)g(resulting)h(deriv)o -(ed)f(w)o(ork)f(is)h(distributed)h(under)f(the)g(terms)0 -1105 y(of)i(a)g(p)q(ermission)h(notice)g(iden)o(tical)h(to)e(this)g -(one.)0 1242 y(P)o(ermission)20 b(is)g(gran)o(ted)f(to)g(cop)o(y)h(and) -f(distribute)i(translations)f(of)f(this)h(man)o(ual)f(in)o(to)h -(another)f(language,)0 1304 y(under)c(the)f(ab)q(o)o(v)o(e)g -(conditions)h(for)e(mo)q(di\014ed)j(v)o(ersions,)e(except)g(that)g -(this)g(p)q(ermission)i(notice)e(ma)o(y)g(b)q(e)h(stated)0 -1366 y(in)h(a)f(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l -(oundation.)0 2661 y(Cop)o(yrigh)o(t)226 2660 y(c)214 -2661 y Fl(\015)g Fo(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -1 2 bop 0 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1157 b(1)0 183 y Fk(1)41 b(Using)14 b(History)h(In)n(teractiv)n -(ely)62 380 y Fo(This)i(c)o(hapter)e(describ)q(es)j(ho)o(w)d(to)h(use)g -(the)g(GNU)g(History)f(Library)i(in)o(teractiv)o(ely)l(,)g(from)e(a)g -(user's)h(stand-)0 442 y(p)q(oin)o(t.)23 b(It)16 b(should)h(b)q(e)f -(considered)i(a)d(user's)h(guide.)23 b(F)l(or)15 b(information)h(on)g -(using)h(the)f(GNU)g(History)f(Library)0 505 y(in)h(y)o(our)f(o)o(wn)f -(programs,)g(see)i(Chapter)e(2)h([Programming)f(with)i(GNU)f(History],) -f(page)h(5.)0 747 y Fm(1.1)33 b(In)n(teractiv)n(e)16 -b(History)g(Expansion)62 886 y Fo(The)e(History)f(library)h(pro)o -(vides)g(a)f(history)g(expansion)h(feature)f(that)g(is)g(similar)i(to)d -(the)i(history)f(expansion)0 948 y(pro)o(vided)j(b)o(y)f -Fn(csh)p Fo(.)20 b(This)15 b(section)h(describ)q(es)h(the)e(syn)o(tax)g -(used)g(to)g(manipulate)h(the)g(history)f(information.)62 -1087 y(History)h(expansions)g(in)o(tro)q(duce)g(w)o(ords)f(from)g(the)h -(history)f(list)i(in)o(to)e(the)h(input)g(stream,)f(making)g(it)h(easy) -0 1150 y(to)g(rep)q(eat)g(commands,)h(insert)g(the)f(argumen)o(ts)g(to) -g(a)g(previous)h(command)f(in)o(to)h(the)f(curren)o(t)h(input)g(line,)h -(or)0 1212 y(\014x)d(errors)g(in)h(previous)g(commands)f(quic)o(kly)l -(.)62 1351 y(History)c(expansion)i(tak)o(es)d(place)i(in)h(t)o(w)o(o)d -(parts.)18 b(The)11 b(\014rst)g(is)h(to)f(determine)h(whic)o(h)g(line)h -(from)e(the)g(previous)0 1413 y(history)h(should)h(b)q(e)f(used)h -(during)f(substitution.)20 b(The)12 b(second)g(is)h(to)e(select)h(p)q -(ortions)g(of)g(that)f(line)i(for)f(inclusion)0 1475 -y(in)o(to)f(the)h(curren)o(t)f(one.)18 b(The)12 b(line)h(selected)f -(from)f(the)g(previous)h(history)g(is)f(called)i(the)e -Fj(ev)o(en)o(t)p Fo(,)h(and)f(the)h(p)q(ortions)0 1538 -y(of)h(that)f(line)j(that)e(are)f(acted)i(up)q(on)g(are)e(called)j -Fj(w)o(ords)p Fo(.)k(V)l(arious)13 b Fj(mo)q(di\014ers)j -Fo(are)d(a)o(v)m(ailable)i(to)d(manipulate)j(the)0 1600 -y(selected)i(w)o(ords.)23 b(The)16 b(line)i(is)f(brok)o(en)f(in)o(to)g -(w)o(ords)f(in)i(the)g(same)f(fashion)g(that)g(Bash)g(do)q(es,)g(so)g -(that)g(sev)o(eral)0 1662 y(English)g(\(or)e(Unix\))h(w)o(ords)e -(surrounded)j(b)o(y)e(quotes)h(are)f(considered)i(as)e(one)h(w)o(ord.)k -(History)14 b(expansions)h(are)0 1725 y(in)o(tro)q(duced)h(b)o(y)g(the) -f(app)q(earance)h(of)e(the)i(history)f(expansion)h(c)o(haracter,)e -(whic)o(h)i(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)0 -1950 y Fi(1.1.1)30 b(Ev)n(en)n(t)16 b(Designators)62 -2089 y Fo(An)g(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f(a)g -(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)0 -2243 y Fn(!)216 b Fo(Start)14 b(a)g(history)h(substitution,)g(except)h -(when)f(follo)o(w)o(ed)g(b)o(y)g(a)f(space,)h(tab,)f(the)h(end)g(of)g -(the)g(line,)240 2305 y Fn(=)g Fo(or)g Fn(\()p Fo(.)0 -2396 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i -Fj(n)p Fo(.)0 2488 y Fn(!-)p Fj(n)167 b Fo(Refer)16 b(to)e(the)i -(command)f Fj(n)g Fo(lines)i(bac)o(k.)0 2579 y Fn(!!)192 -b Fo(Refer)16 b(to)e(the)i(previous)f(command.)20 b(This)c(is)g(a)f -(synon)o(ym)g(for)f(`)p Fn(!-1)p Fo('.)0 2670 y Fn(!)p -Fj(string)102 b Fo(Refer)16 b(to)e(the)i(most)e(recen)o(t)h(command)g -(starting)g(with)g Fj(string)p Fo(.)p eop -2 3 bop 0 -58 a Fo(2)1497 b(GNU)15 b(History)g(Library)0 -183 y Fn(!?)p Fj(string)t Fn([?])240 246 y Fo(Refer)h(to)f(the)g(most)g -(recen)o(t)g(command)g(con)o(taining)h Fj(string)p Fo(.)21 -b(The)15 b(trailing)i(`)p Fn(?)p Fo(')d(ma)o(y)h(b)q(e)h(omitted)240 -308 y(if)g(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f(immediately)i(b)o -(y)e(a)g(newline.)0 395 y Fn(^)p Fj(string1)t Fn(^)p -Fj(string2)t Fn(^)240 457 y Fo(Quic)o(k)i(Substitution.)22 -b(Rep)q(eat)16 b(the)g(last)f(command,)h(replacing)h -Fj(string1)h Fo(with)e Fj(string2)p Fo(.)21 b(Equiv-)240 -520 y(alen)o(t)15 b(to)g Fn(!!:s/)p Fj(string1)t Fn(/)p -Fj(string2)t Fn(/)p Fo(.)0 607 y Fn(!#)192 b Fo(The)15 -b(en)o(tire)h(command)f(line)i(t)o(yp)q(ed)f(so)e(far.)0 -816 y Fi(1.1.2)30 b(W)-5 b(ord)15 b(Designators)62 953 -y Fo(W)l(ord)k(designators)g(are)f(used)i(to)e(select)i(desired)g(w)o -(ords)e(from)h(the)g(ev)o(en)o(t.)31 b(A)19 b(`)p Fn(:)p -Fo(')f(separates)g(the)h(ev)o(en)o(t)0 1015 y(sp)q(eci\014cation)e -(from)d(the)h(w)o(ord)f(designator.)20 b(It)15 b(can)g(b)q(e)g(omitted) -g(if)g(the)g(w)o(ord)g(designator)f(b)q(egins)i(with)g(a)e(`)p -Fn(^)p Fo(',)0 1077 y(`)p Fn($)p Fo(',)i(`)p Fn(*)p Fo(',)g(`)p -Fn(-)p Fo(',)g(or)g(`)p Fn(\045)p Fo('.)24 b(W)l(ords)17 -b(are)f(n)o(um)o(b)q(ered)i(from)e(the)h(b)q(eginning)i(of)d(the)h -(line,)i(with)e(the)g(\014rst)g(w)o(ord)f(b)q(eing)0 -1139 y(denoted)g(b)o(y)f(0)g(\(zero\).)k(W)l(ords)c(are)g(inserted)h -(in)o(to)f(the)g(curren)o(t)g(line)i(separated)e(b)o(y)g(single)i -(spaces.)0 1289 y Fn(0)e(\(zero\))57 b Fo(The)15 b Fn(0)p -Fo(th)g(w)o(ord.)20 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g -(the)f(command)g(w)o(ord.)0 1376 y Fj(n)215 b Fo(The)15 -b Fj(n)p Fo(th)h(w)o(ord.)0 1464 y Fn(^)216 b Fo(The)15 -b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)0 -1551 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)0 1639 -y Fn(\045)216 b Fo(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g(most)g -(recen)o(t)g(`)p Fn(?)p Fj(string)t Fn(?)p Fo(')f(searc)o(h.)0 -1726 y Fj(x)p Fn(-)p Fj(y)168 b Fo(A)15 b(range)g(of)g(w)o(ords;)f(`)p -Fn(-)p Fj(y)t Fo(')g(abbreviates)i(`)p Fn(0-)p Fj(y)t -Fo('.)0 1813 y Fn(*)216 b Fo(All)16 b(of)f(the)g(w)o(ords,)f(except)h -(the)g Fn(0)p Fo(th.)k(This)d(is)f(a)g(synon)o(ym)g(for)f(`)p -Fn(1-$)p Fo('.)k(It)d(is)h(not)e(an)h(error)f(to)h(use)240 -1876 y(`)p Fn(*)p Fo(')f(if)i(there)f(is)h(just)f(one)g(w)o(ord)g(in)h -(the)f(ev)o(en)o(t;)g(the)g(empt)o(y)g(string)g(is)h(returned)f(in)h -(that)f(case.)0 1963 y Fj(x)s Fn(*)189 b Fo(Abbreviates)16 -b(`)p Fj(x)p Fn(-$)p Fo(')0 2050 y Fj(x)p Fn(-)192 b -Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')e(lik)o(e)i(`)p -Fj(x)s Fn(*)p Fo(',)e(but)i(omits)f(the)g(last)g(w)o(ord.)62 -2200 y(If)i(a)g(w)o(ord)f(designator)g(is)i(supplied)h(without)d(an)h -(ev)o(en)o(t)g(sp)q(eci\014cation,)h(the)f(previous)h(command)e(is)h -(used)0 2262 y(as)e(the)g(ev)o(en)o(t.)0 2471 y Fi(1.1.3)30 -b(Mo)r(di\014ers)62 2608 y Fo(After)20 b(the)f(optional)i(w)o(ord)e -(designator,)h(y)o(ou)f(can)h(add)g(a)g(sequence)h(of)e(one)h(or)f -(more)g(of)g(the)h(follo)o(wing)0 2670 y(mo)q(di\014ers,)c(eac)o(h)f -(preceded)i(b)o(y)e(a)g(`)p Fn(:)p Fo('.)p eop -3 4 bop 0 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1157 b(3)0 183 y Fn(h)216 b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h -(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the)f(head.)0 -270 y Fn(t)216 b Fo(Remo)o(v)o(e)15 b(all)h(leading)h(pathname)e(comp)q -(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)0 358 y Fn(r)216 -b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g(the)g(form)g(`)p -Fn(.)p Fj(su\016x)s Fo(',)f(lea)o(ving)i(the)f(basename.)0 -445 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f(trailing)h -(su\016x.)0 532 y Fn(p)216 b Fo(Prin)o(t)15 b(the)g(new)h(command)f -(but)g(do)g(not)g(execute)h(it.)0 619 y Fn(s/)p Fj(old)r -Fn(/)p Fj(new)t Fn(/)240 681 y Fo(Substitute)k Fj(new)k -Fo(for)19 b(the)g(\014rst)g(o)q(ccurrence)i(of)e Fj(old)j -Fo(in)e(the)f(ev)o(en)o(t)h(line.)34 b(An)o(y)19 b(delimiter)j(ma)o(y) -240 744 y(b)q(e)e(used)g(in)g(place)g(of)f(`)p Fn(/)p -Fo('.)31 b(The)19 b(delimiter)i(ma)o(y)e(b)q(e)h(quoted)f(in)h -Fj(old)h Fo(and)f Fj(new)j Fo(with)d(a)f(single)240 806 -y(bac)o(kslash.)28 b(If)18 b(`)p Fn(&)p Fo(')f(app)q(ears)h(in)h -Fj(new)p Fo(,)f(it)h(is)f(replaced)h(b)o(y)f Fj(old)p -Fo(.)28 b(A)18 b(single)h(bac)o(kslash)g(will)g(quote)240 -868 y(the)c(`)p Fn(&)p Fo('.)k(The)d(\014nal)g(delimiter)h(is)e -(optional)h(if)g(it)f(is)h(the)f(last)g(c)o(haracter)g(on)g(the)g -(input)i(line.)0 955 y Fn(&)216 b Fo(Rep)q(eat)16 b(the)f(previous)h -(substitution.)0 1043 y Fn(g)216 b Fo(Cause)17 b(c)o(hanges)g(to)f(b)q -(e)i(applied)g(o)o(v)o(er)e(the)h(en)o(tire)h(ev)o(en)o(t)e(line.)27 -b(Used)17 b(in)h(conjunction)g(with)f(`)p Fn(s)p Fo(',)240 -1105 y(as)e(in)h Fn(gs/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)p -Fo(,)f(or)f(with)i(`)p Fn(&)p Fo('.)p eop -4 5 bop 0 -58 a Fo(4)1497 b(GNU)15 b(History)g(Library)p -eop -5 6 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(5)0 183 y Fk(2)41 b(Programming)16 b(with)f(GNU)h -(History)62 370 y Fo(This)e(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h -(in)o(terface)g(programs)f(that)h(y)o(ou)g(write)g(with)g(the)h(GNU)f -(History)g(Library)l(.)0 432 y(It)j(should)g(b)q(e)g(considered)h(a)f -(tec)o(hnical)h(guide.)22 b(F)l(or)15 b(information)h(on)f(the)h(in)o -(teractiv)o(e)g(use)g(of)f(GNU)g(History)l(,)0 495 y(see)g(Chapter)g(1) -g([Using)h(History)f(In)o(teractiv)o(ely],)g(page)g(1.)0 -719 y Fm(2.1)33 b(In)n(tro)r(duction)17 b(to)e(History)62 -856 y Fo(Man)o(y)j(programs)g(read)h(input)h(from)e(the)g(user)h(a)g -(line)h(at)f(a)f(time.)31 b(The)19 b(GNU)g(History)f(library)i(is)f -(able)0 918 y(to)e(k)o(eep)g(trac)o(k)f(of)h(those)g(lines,)i(asso)q -(ciate)e(arbitrary)g(data)g(with)g(eac)o(h)g(line,)j(and)d(utilize)i -(information)f(from)0 980 y(previous)e(lines)h(in)f(comp)q(osing)f(new) -h(ones.)62 1117 y(The)i(programmer)f(using)h(the)g(History)g(library)g -(has)g(a)o(v)m(ailable)h(functions)g(for)e(remem)o(b)q(ering)h(lines)i -(on)d(a)0 1180 y(history)f(list,)g(asso)q(ciating)g(arbitrary)g(data)f -(with)h(a)f(line,)j(remo)o(ving)d(lines)j(from)d(the)h(list,)g(searc)o -(hing)g(through)0 1242 y(the)h(list)h(for)e(a)h(line)h(con)o(taining)g -(an)f(arbitrary)f(text)h(string,)g(and)g(referencing)h(an)o(y)f(line)h -(in)g(the)f(list)h(directly)l(.)0 1304 y(In)d(addition,)h(a)e(history)h -Fj(expansion)h Fo(function)g(is)f(a)o(v)m(ailable)h(whic)o(h)g(pro)o -(vides)f(for)f(a)h(consisten)o(t)g(user)g(in)o(terface)0 -1366 y(across)f(di\013eren)o(t)i(programs.)62 1503 y(The)i(user)g -(using)g(programs)f(written)g(with)h(the)g(History)f(library)i(has)e -(the)h(b)q(ene\014t)h(of)e(a)g(consisten)o(t)h(user)0 -1566 y(in)o(terface)d(with)g(a)f(set)h(of)f(w)o(ell-kno)o(wn)h -(commands)g(for)f(manipulating)i(the)f(text)f(of)g(previous)h(lines)h -(and)f(using)0 1628 y(that)g(text)g(in)i(new)e(commands.)22 -b(The)15 b(basic)i(history)e(manipulation)j(commands)d(are)g(similar)i -(to)e(the)h(history)0 1690 y(substitution)g(pro)o(vided)g(b)o(y)f -Fn(csh)p Fo(.)62 1827 y(If)g(the)g(programmer)e(desires,)i(he)g(can)g -(use)g(the)f(Readline)j(library)l(,)e(whic)o(h)h(includes)g(some)f -(history)f(manip-)0 1889 y(ulation)i(b)o(y)f(default,)h(and)f(has)g -(the)g(added)h(adv)m(an)o(tage)f(of)g(command)g(line)h(editing.)0 -2114 y Fm(2.2)33 b(History)15 b(Storage)62 2251 y Fo(The)h(history)f -(list)h(is)g(an)f(arra)o(y)f(of)g(history)i(en)o(tries.)k(A)15 -b(history)g(en)o(try)g(is)h(declared)g(as)f(follo)o(ws:)120 -2377 y Fn(typedef)23 b(struct)g(_hist_entry)f({)168 2429 -y(char)h(*line;)168 2481 y(char)g(*data;)120 2533 y(})h(HIST_ENTRY;)62 -2670 y Fo(The)16 b(history)f(list)h(itself)g(migh)o(t)f(therefore)g(b)q -(e)h(declared)g(as)p eop -6 7 bop 0 -58 a Fo(6)1497 b(GNU)15 b(History)g(Library)120 -183 y Fn(HIST_ENTRY)22 b(**the_history_list;)62 327 y -Fo(The)16 b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g -(in)o(to)f(a)g(single)i(structure:)120 460 y Fn(/*)24 -b(A)f(structure)g(used)g(to)h(pass)f(the)h(current)f(state)g(of)g(the)h -(history)f(stuff)g(around.)g(*/)120 512 y(typedef)g(struct)g -(_hist_state)f({)168 564 y(HIST_ENTRY)g(**entries;)214 -b(/*)23 b(Pointer)g(to)h(the)f(entries)g(themselves.)f(*/)168 -616 y(int)h(offset;)453 b(/*)23 b(The)h(location)e(pointer)h(within)g -(this)h(array.)f(*/)168 668 y(int)g(length;)453 b(/*)23 -b(Number)g(of)h(elements)f(within)g(this)g(array.)g(*/)168 -719 y(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f(allocated)g(to)g -(this)h(array.)f(*/)168 771 y(int)g(flags;)120 823 y(})h -(HISTORY_STATE;)62 967 y Fo(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g -(includes)j Fn(HS_STIFLED)p Fo(,)13 b(the)i(history)h(has)f(b)q(een)h -(sti\015ed.)0 1250 y Fm(2.3)33 b(History)15 b(F)-6 b(unctions)62 -1394 y Fo(This)16 b(section)g(describ)q(es)h(the)e(calling)i(sequence)f -(for)f(the)g(v)m(arious)h(functions)g(presen)o(t)f(in)h(GNU)f(History)l -(.)0 1661 y Fi(2.3.1)30 b(Initializing)15 b(History)g(and)g(State)g -(Managemen)n(t)62 1805 y Fo(This)j(section)g(describ)q(es)h(functions)f -(used)g(to)e(initialize)21 b(and)c(manage)g(the)g(state)g(of)g(the)g -(History)g(library)0 1867 y(when)f(y)o(ou)f(w)o(an)o(t)f(to)g(use)i -(the)f(history)g(functions)h(in)g(y)o(our)f(program.)1725 -2049 y(F)l(unction)-1899 b Fh(void)20 b Fg(using)p 258 -2049 18 3 v 20 w(history)j Ff(\(\))120 2111 y Fo(Begin)g(a)f(session)g -(in)h(whic)o(h)g(the)f(history)g(functions)g(migh)o(t)g(b)q(e)h(used.) -40 b(This)23 b(initializes)i(the)120 2173 y(in)o(teractiv)o(e)16 -b(v)m(ariables.)1725 2355 y(F)l(unction)-1899 b Fh(HISTORY_STATE)21 -b(*)e Fg(history)p 582 2355 V 21 w(get)p 680 2355 V 21 -w(history)p 876 2355 V 21 w(state)j Ff(\(\))120 2417 -y Fo(Return)16 b(a)f(structure)g(describing)i(the)e(curren)o(t)g(state) -f(of)h(the)g(input)i(history)l(.)1725 2599 y(F)l(unction)-1899 -b Fh(void)20 b Fg(history)p 302 2599 V 20 w(set)p 393 -2599 V 21 w(history)p 589 2599 V 21 w(state)j Ff(\()p -Fn(HISTORY_STATE)13 b(*state)p Ff(\))120 2661 y Fo(Set)i(the)h(state)e -(of)h(the)g(history)g(list)h(according)g(to)e Fj(state)p -Fo(.)p eop -7 8 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(7)0 183 y Fi(2.3.2)30 b(History)15 b(List)g(Managemen)n -(t)62 322 y Fo(These)i(functions)h(manage)e(individual)k(en)o(tries)d -(on)f(the)h(history)g(list,)g(or)f(set)h(parameters)e(managing)i(the)0 -384 y(list)f(itself.)1725 552 y(F)l(unction)-1899 b Fh(void)20 -b Fg(add)p 219 552 18 3 v 20 w(history)j Ff(\()p Fn(char)14 -b(*string)p Ff(\))120 614 y Fo(Place)j Fj(string)k Fo(at)16 -b(the)g(end)i(of)e(the)g(history)h(list.)25 b(The)17 -b(asso)q(ciated)g(data)f(\014eld)h(\(if)g(an)o(y\))f(is)h(set)g(to)120 -677 y Fn(NULL)p Fo(.)1725 844 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(remo)n(v)n(e)p 509 844 V 20 w(history)k Ff(\()p -Fn(int)14 b(which)p Ff(\))120 907 y Fo(Remo)o(v)o(e)d(history)g(en)o -(try)g(at)g(o\013set)f Fj(whic)o(h)i Fo(from)f(the)g(history)l(.)19 -b(The)11 b(remo)o(v)o(ed)g(elemen)o(t)h(is)g(returned)120 -969 y(so)j(y)o(ou)g(can)g(free)g(the)h(line,)g(data,)e(and)i(con)o -(taining)g(structure.)1725 1137 y(F)l(unction)-1899 b -Fh(HIST_ENTRY)21 b(*)e Fg(replace)p 505 1137 V 22 w(history)p -702 1137 V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)h -(*line,)f(char)208 1199 y(*data)p Ff(\))120 1261 y Fo(Mak)o(e)d(the)i -(history)f(en)o(try)g(at)f(o\013set)h Fj(whic)o(h)h Fo(ha)o(v)o(e)e -Fj(line)17 b Fo(and)12 b Fj(data)p Fo(.)19 b(This)12 -b(returns)g(the)h(old)g(en)o(try)e(so)120 1324 y(y)o(ou)i(can)g(disp)q -(ose)h(of)e(the)h(data.)19 b(In)13 b(the)g(case)g(of)f(an)h(in)o(v)m -(alid)i Fj(whic)o(h)p Fo(,)f(a)f Fn(NULL)f Fo(p)q(oin)o(ter)i(is)f -(returned.)1725 1491 y(F)l(unction)-1899 b Fh(void)20 -b Fg(clear)p 245 1491 V 21 w(history)j Ff(\(\))120 1554 -y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)1725 1721 y(F)l(unction)-1899 b Fh(void)20 -b Fg(sti\015e)p 245 1721 V 21 w(history)j Ff(\()p Fn(int)14 -b(max)p Ff(\))120 1784 y Fo(Sti\015e)i(the)f(history)h(list,)f(remem)o -(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fo(en)o(tries.)1725 -1951 y(F)l(unction)-1899 b Fh(int)20 b Fg(unsti\015e)p -283 1951 V 21 w(history)i Ff(\(\))120 2014 y Fo(Stop)13 -b(sti\015ing)h(the)f(history)l(.)19 b(This)14 b(returns)f(the)g -(previous)h(amoun)o(t)e(the)h(history)g(w)o(as)g(sti\015ed.)20 -b(The)120 2076 y(v)m(alue)c(is)g(p)q(ositiv)o(e)g(if)g(the)f(history)g -(w)o(as)g(sti\015ed,)h(negativ)o(e)f(if)g(it)h(w)o(asn't.)1725 -2244 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -2244 V 20 w(is)p 334 2244 V 21 w(sti\015ed)k Ff(\(\))120 -2306 y Fo(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,) -g(zero)f(if)g(it)h(is)g(not.)0 2531 y Fi(2.3.3)30 b(Information)14 -b(Ab)r(out)h(the)g(History)g(List)62 2670 y Fo(These)h(functions)g -(return)f(information)g(ab)q(out)g(the)h(en)o(tire)f(history)g(list)h -(or)f(individual)j(list)f(en)o(tries.)p eop -8 9 bop 0 -58 a Fo(8)1497 b(GNU)15 b(History)g(Library)1725 -183 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p -530 183 18 3 v 21 w(list)24 b Ff(\(\))120 246 y Fo(Return)e(a)e -Fn(NULL)h Fo(terminated)g(arra)o(y)f(of)g Fn(HIST_ENTRY)g -Fo(whic)o(h)i(is)f(the)g(curren)o(t)g(input)h(history)l(.)120 -308 y(Elemen)o(t)16 b(0)f(of)f(this)i(list)g(is)g(the)f(b)q(eginning)i -(of)e(time.)20 b(If)c(there)f(is)h(no)f(history)l(,)g(return)g -Fn(NULL)p Fo(.)1725 482 y(F)l(unction)-1899 b Fh(int)20 -b Fg(where)p 250 482 V 20 w(history)j Ff(\(\))120 544 -y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history)g -(elemen)o(t.)1725 719 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(curren)n(t)p 512 719 V 21 w(history)k Ff(\(\))120 -781 y Fo(Return)14 b(the)g(history)g(en)o(try)f(at)h(the)g(curren)o(t)f -(p)q(osition,)i(as)e(determined)j(b)o(y)d Fn(where_history)h(\(\))p -Fo(.)120 843 y(If)h(there)h(is)f(no)h(en)o(try)e(there,)h(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 1018 y(F)l(unction)-1899 -b Fh(HIST_ENTRY)21 b(*)e Fg(history)p 504 1018 V 21 w(get)j -Ff(\()p Fn(int)15 b(offset)p Ff(\))120 1080 y Fo(Return)g(the)g -(history)f(en)o(try)g(at)g(p)q(osition)i Fj(o\013set)p -Fo(,)d(starting)h(from)g Fn(history_base)p Fo(.)k(If)c(there)h(is)g(no) -120 1142 y(en)o(try)g(there,)g(or)f(if)i Fj(o\013set)f -Fo(is)h(greater)e(than)h(the)h(history)f(length,)g(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 1316 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1316 V 20 w(total)p 412 -1316 V 22 w(b)n(ytes)j Ff(\(\))120 1379 y Fo(Return)17 -b(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h(primary)g -(history)g(en)o(tries)h(are)e(using.)23 b(This)17 b(function)120 -1441 y(returns)e(the)g(sum)h(of)e(the)i(lengths)f(of)g(all)h(the)g -(lines)g(in)g(the)g(history)l(.)0 1686 y Fi(2.3.4)30 -b(Mo)n(ving)15 b(Around)h(the)f(History)g(List)62 1827 -y Fo(These)h(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g(in)o(to) -f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.)1725 -2001 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -2001 V 20 w(set)p 367 2001 V 21 w(p)r(os)h Ff(\()p Fn(int)15 -b(pos)p Ff(\))120 2063 y Fo(Set)g(the)h(p)q(osition)g(in)g(the)f -(history)g(list)h(to)f Fj(p)q(os)p Fo(,)g(an)g(absolute)g(index)i(in)o -(to)e(the)g(list.)1725 2238 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(previous)p 540 2238 V 20 w(history)k Ff(\(\))120 -2300 y Fo(Bac)o(k)16 b(up)h(the)g(curren)o(t)f(history)h(o\013set)e(to) -h(the)h(previous)g(history)g(en)o(try)l(,)f(and)h(return)f(a)g(p)q(oin) -o(ter)120 2362 y(to)f(that)f(en)o(try)l(.)20 b(If)15 -b(there)g(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 2537 y(F)l(unction)-1899 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 439 2537 V 21 w(history)k -Ff(\(\))120 2599 y Fo(Mo)o(v)o(e)c(the)h(curren)o(t)g(history)f -(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g -(and)g(return)g(the)g(a)120 2661 y(p)q(oin)o(ter)c(to)e(that)h(en)o -(try)l(.)k(If)d(there)f(is)h(no)f(next)g(en)o(try)l(,)g(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)p eop -9 10 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(9)0 183 y Fi(2.3.5)30 b(Searc)n(hing)15 -b(the)h(History)f(List)62 320 y Fo(These)e(functions)g(allo)o(w)f -(searc)o(hing)h(of)f(the)g(history)g(list)h(for)f(en)o(tries)h(con)o -(taining)g(a)f(sp)q(eci\014c)i(string.)19 b(Searc)o(h-)0 -382 y(ing)e(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o(ard)f(and) -h(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)f(history)h(p)q(osition.)26 -b(The)17 b(searc)o(h)0 445 y(ma)o(y)d(b)q(e)i Fj(anc)o(hored)p -Fo(,)f(meaning)h(that)f(the)g(string)g(m)o(ust)g(matc)o(h)f(at)h(the)g -(b)q(eginning)i(of)e(the)h(history)f(en)o(try)l(.)1725 -600 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -600 18 3 v 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h -(direction)p Ff(\))120 662 y Fo(Searc)o(h)k(the)g(history)g(for)f -Fj(string)p Fo(,)i(starting)e(at)g(the)h(curren)o(t)g(history)g -(o\013set.)30 b(If)19 b Fj(direction)h Fn(<)f Fo(0,)120 -724 y(then)14 b(the)f(searc)o(h)g(is)h(through)e(previous)i(en)o -(tries,)g(else)g(through)f(subsequen)o(t.)20 b(If)13 -b Fj(string)k Fo(is)d(found,)120 786 y(then)f(the)g(curren)o(t)g -(history)g(index)i(is)e(set)g(to)f(that)h(history)g(en)o(try)l(,)f(and) -i(the)f(v)m(alue)h(returned)f(is)h(the)120 849 y(o\013set)h(in)i(the)f -(line)i(of)d(the)h(en)o(try)g(where)g Fj(string)k Fo(w)o(as)c(found.)22 -b(Otherwise,)17 b(nothing)f(is)h(c)o(hanged,)120 911 -y(and)e(a)g(-1)g(is)h(returned.)1725 1066 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1066 V 20 w(searc)n(h)p -452 1066 V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g -(direction)p Ff(\))120 1128 y Fo(Searc)o(h)22 b(the)h(history)f(for)f -Fj(string)p Fo(,)j(starting)e(at)f(the)i(curren)o(t)f(history)g -(o\013set.)40 b(The)22 b(searc)o(h)g(is)120 1190 y(anc)o(hored:)i(matc) -o(hing)18 b(lines)h(m)o(ust)d(b)q(egin)j(with)f Fj(string)p -Fo(.)26 b(If)17 b Fj(direction)i Fn(<)e Fo(0,)g(then)h(the)f(searc)o(h) -g(is)120 1253 y(through)e(previous)h(en)o(tries,)f(else)i(through)d -(subsequen)o(t.)21 b(If)16 b Fj(string)j Fo(is)d(found,)f(then)h(the)f -(curren)o(t)120 1315 y(history)20 b(index)i(is)e(set)g(to)g(that)f(en)o -(try)l(,)i(and)f(the)g(return)h(v)m(alue)g(is)g(0.)34 -b(Otherwise,)22 b(nothing)e(is)120 1377 y(c)o(hanged,)15 -b(and)h(a)e(-1)h(is)h(returned.)1725 1532 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1532 V 20 w(searc)n(h)p -452 1532 V 21 w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g -(direction,)g(int)h(pos)p Ff(\))120 1594 y Fo(Searc)o(h)d(for)f -Fj(string)k Fo(in)d(the)g(history)f(list,)i(starting)e(at)g -Fj(p)q(os)p Fo(,)h(an)f(absolute)h(index)h(in)o(to)e(the)h(list.)19 -b(If)12 b Fj(di-)120 1656 y(rection)g Fo(is)h(negativ)o(e,)f(the)g -(searc)o(h)g(pro)q(ceeds)h(bac)o(kw)o(ard)e(from)g Fj(p)q(os)p -Fo(,)i(otherwise)f(forw)o(ard.)17 b(Returns)120 1719 -y(the)e(absolute)h(index)g(of)f(the)g(history)h(elemen)o(t)f(where)h -Fj(string)j Fo(w)o(as)14 b(found,)h(or)g(-1)g(otherwise.)0 -1912 y Fi(2.3.6)30 b(Managing)14 b(the)i(History)f(File)62 -2049 y Fo(The)f(History)g(library)h(can)f(read)g(the)g(history)g(from)f -(and)i(write)f(it)g(to)f(a)h(\014le.)20 b(This)15 b(section)g(do)q -(cumen)o(ts)f(the)0 2111 y(functions)i(for)f(managing)g(a)f(history)i -(\014le.)1725 2266 y(F)l(unction)-1899 b Fh(int)20 b -Fg(read)p 211 2266 V 20 w(history)i Ff(\()p Fn(char)15 -b(*filename)p Ff(\))120 2328 y Fo(Add)i(the)f(con)o(ten)o(ts)g(of)g -Fj(\014lename)k Fo(to)c(the)h(history)f(list,)h(a)f(line)i(at)e(a)g -(time.)24 b(If)17 b Fj(\014lename)j Fo(is)d Fn(NULL)p -Fo(,)120 2391 y(then)f(read)f(from)f(`)p Fn(~/.history)p -Fo('.)k(Returns)e(0)e(if)i(successful,)g(or)f(errno)g(if)h(not.)1725 -2545 y(F)l(unction)-1899 b Fh(int)20 b Fg(read)p 211 -2545 V 20 w(history)p 406 2545 V 20 w(range)i Ff(\()p -Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))120 -2608 y Fo(Read)j(a)e(range)h(of)f(lines)j(from)d Fj(\014lename)p -Fo(,)i(adding)f(them)g(to)f(the)h(history)g(list.)23 -b(Start)15 b(reading)i(at)120 2670 y(line)f Fj(from)f -Fo(and)g(end)g(at)f Fj(to)p Fo(.)19 b(If)d Fj(from)e -Fo(is)h(zero,)f(start)g(at)g(the)h(b)q(eginning.)22 b(If)15 -b Fj(to)i Fo(is)e(less)g(than)g Fj(from)p Fo(,)p eop -10 11 bop 0 -58 a Fo(10)1474 b(GNU)15 b(History)g(Library)120 -183 y(then)i(read)g(un)o(til)h(the)f(end)g(of)g(the)g(\014le.)25 -b(If)17 b Fj(\014lename)k Fo(is)c Fn(NULL)p Fo(,)f(then)i(read)e(from)g -(`)p Fn(~/.history)p Fo('.)120 246 y(Returns)g(0)f(if)g(successful,)h -(or)f Fn(errno)g Fo(if)g(not.)1725 410 y(F)l(unction)-1899 -b Fh(int)20 b Fg(write)p 229 410 18 3 v 22 w(history)i -Ff(\()p Fn(char)15 b(*filename)p Ff(\))120 472 y Fo(W)l(rite)20 -b(the)g(curren)o(t)f(history)h(to)f Fj(\014lename)p Fo(,)i(o)o(v)o -(erwriting)f Fj(\014lename)j Fo(if)d(necessary)l(.)34 -b(If)20 b Fj(\014lename)120 534 y Fo(is)d Fn(NULL)p Fo(,)g(then)g -(write)g(the)g(history)g(list)h(to)e(`)p Fn(~/.history)p -Fo('.)23 b(V)l(alues)18 b(returned)g(are)e(as)h(in)h -Fn(read_)120 596 y(history)c(\(\))p Fo(.)1725 760 y(F)l(unction)-1899 -b Fh(int)20 b Fg(app)r(end)p 285 760 V 19 w(history)j -Ff(\()p Fn(int)14 b(nelements,)g(char)h(*filename)p Ff(\))120 -823 y Fo(App)q(end)i(the)e(last)g Fj(nelemen)o(ts)j Fo(of)d(the)g -(history)g(list)h(to)f Fj(\014lename)p Fo(.)1725 987 -y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 987 -V 20 w(truncate)p 507 987 V 21 w(\014le)k Ff(\()p Fn(char)14 -b(*filename,)g(int)h(nlines)p Ff(\))120 1049 y Fo(T)l(runcate)g(the)h -(history)f(\014le)h Fj(\014lename)p Fo(,)g(lea)o(ving)g(only)g(the)f -(last)g Fj(nlines)k Fo(lines.)0 1263 y Fi(2.3.7)30 b(History)15 -b(Expansion)62 1401 y Fo(These)h(functions)g(implemen)o(t)g -Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)1725 1565 -y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 1565 -V 20 w(expand)j Ff(\()p Fn(char)14 b(*string,)g(char)h(**output)p -Ff(\))120 1627 y Fo(Expand)20 b Fj(string)p Fo(,)f(placing)i(the)e -(result)h(in)o(to)f Fj(output)p Fo(,)h(a)f(p)q(oin)o(ter)h(to)e(a)h -(string)h(\(see)f(Section)h(1.1)120 1689 y([History)15 -b(In)o(teraction],)f(page)h(1\).)20 b(Returns:)120 1840 -y Fn(0)216 b Fo(If)21 b(no)g(expansions)h(to)q(ok)e(place)h(\(or,)g(if) -h(the)f(only)g(c)o(hange)g(in)h(the)f(text)f(w)o(as)g(the)360 -1902 y(de-slashifying)d(of)e(the)g(history)h(expansion)g(c)o -(haracter\);)120 1991 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g(tak)o -(e)e(place;)120 2080 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an)h -(error)g(in)h(expansion;)120 2168 y Fn(2)216 b Fo(if)14 -b(the)f(returned)h(line)h(should)f(only)g(b)q(e)f(displa)o(y)o(ed,)i -(but)e(not)g(executed,)h(as)f(with)h(the)360 2231 y Fn(:p)h -Fo(mo)q(di\014er)h(\(see)f(Section)h(1.1.3)e([Mo)q(di\014ers],)h(page)g -(2\).)120 2381 y(If)g(an)h(error)e(o)q(curred)i(in)g(expansion,)f(then) -h Fj(output)g Fo(con)o(tains)f(a)g(descriptiv)o(e)i(error)d(message.) -1725 2545 y(F)l(unction)-1899 b Fh(char)20 b(*)f Fg(history)p -347 2545 V 21 w(arg)p 449 2545 V 19 w(extract)24 b Ff(\()p -Fn(int)14 b(first,)h(int)g(last,)f(char)h(*string)p Ff(\))120 -2608 y Fo(Extract)10 b(a)h(string)g(segmen)o(t)g(consisting)h(of)f(the) -g Fj(\014rst)h Fo(through)f Fj(last)h Fo(argumen)o(ts)e(presen)o(t)h -(in)h Fj(string)p Fo(.)120 2670 y(Argumen)o(ts)j(are)g(brok)o(en)g(up)g -(as)g(in)h(Bash.)p eop -11 12 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1017 b(11)1725 183 y(F)l(unction)-1899 b Fh(char)20 -b(*)f Fg(get)p 249 183 18 3 v 21 w(history)p 445 183 -V 20 w(ev)n(en)n(t)25 b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,) -f(int)h(qchar)p Ff(\))120 246 y Fo(Returns)e(the)f(text)f(of)h(the)g -(history)g(ev)o(en)o(t)f(b)q(eginning)k(at)c Fj(string)16 -b Fn(+)c Fj(*cindex)p Fo(.)20 b Fj(*cindex)c Fo(is)d(mo)q(di\014ed)120 -308 y(to)h(p)q(oin)o(t)h(to)f(after)h(the)f(ev)o(en)o(t)h(sp)q -(eci\014er.)21 b(A)o(t)15 b(function)g(en)o(try)l(,)f -Fj(cindex)20 b Fo(p)q(oin)o(ts)15 b(to)f(the)h(index)h(in)o(to)120 -370 y Fj(string)h Fo(where)d(the)f(history)h(ev)o(en)o(t)f(sp)q -(eci\014cation)i(b)q(egins.)20 b Fj(qc)o(har)d Fo(is)c(a)g(c)o -(haracter)g(that)g(is)h(allo)o(w)o(ed)120 432 y(to)h(end)g(the)h(ev)o -(en)o(t)f(sp)q(eci\014cation)i(in)f(addition)g(to)f(the)g(\\normal")g -(terminating)g(c)o(haracters.)1725 587 y(F)l(unction)-1899 -b Fh(char)20 b(**)f Fg(history)p 373 587 V 21 w(tok)n(enize)25 -b Ff(\()p Fn(char)14 b(*string)p Ff(\))120 649 y Fo(Return)k(an)f(arra) -o(y)f(of)h(tok)o(ens)f(parsed)i(out)e(of)h Fj(string)p -Fo(,)g(m)o(uc)o(h)h(as)e(the)i(shell)g(migh)o(t.)26 b(The)17 -b(tok)o(ens)120 711 y(are)c(split)h(on)f(white)g(space)h(and)f(on)g -(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)g(and)h(shell)i(quoting)e -(con)o(v)o(en)o(tions)120 774 y(are)i(ob)q(ey)o(ed.)0 -983 y Fm(2.4)33 b(History)15 b(V)-6 b(ariables)62 1120 -y Fo(This)16 b(section)g(describ)q(es)h(the)e(externally)h(visible)i(v) -m(ariables)e(exp)q(orted)g(b)o(y)f(the)g(GNU)g(History)g(Library)l(.) -1736 1275 y(V)l(ariable)-1899 b Fh(int)20 b Fg(history)p -276 1275 V 20 w(base)120 1337 y Fo(The)15 b(logical)i(o\013set)d(of)h -(the)g(\014rst)g(en)o(try)g(in)h(the)f(history)g(list.)1736 -1491 y(V)l(ariable)-1899 b Fh(int)20 b Fg(history)p 276 -1491 V 20 w(length)120 1554 y Fo(The)15 b(n)o(um)o(b)q(er)h(of)f(en)o -(tries)g(curren)o(tly)h(stored)f(in)h(the)f(history)g(list.)1736 -1708 y(V)l(ariable)-1899 b Fh(int)20 b Fg(max)p 208 1708 -V 19 w(input)p 360 1708 V 21 w(history)120 1771 y Fo(The)12 -b(maxim)o(um)g(n)o(um)o(b)q(er)g(of)f(history)h(en)o(tries.)19 -b(This)12 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)h Fn(stifle_history) -120 1833 y(\(\))p Fo(.)1736 1987 y(V)l(ariable)-1899 -b Fh(char)20 b Fg(history)p 302 1987 V 20 w(expansion)p -569 1987 V 21 w(c)n(har)120 2050 y Fo(The)15 b(c)o(haracter)g(that)f -(starts)g(a)h(history)g(ev)o(en)o(t.)20 b(The)15 b(default)h(is)g(`)p -Fn(!)p Fo('.)1736 2204 y(V)l(ariable)-1899 b Fh(char)20 -b Fg(history)p 302 2204 V 20 w(subst)p 454 2204 V 20 -w(c)n(har)120 2266 y Fo(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o -(es)g(w)o(ord)g(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g -(line.)21 b(The)12 b(default)120 2329 y(is)k(`)p Fn(^)p -Fo('.)1736 2483 y(V)l(ariable)-1899 b Fh(char)20 b Fg(history)p -302 2483 V 20 w(commen)n(t)p 552 2483 V 19 w(c)n(har)120 -2545 y Fo(During)12 b(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is) -i(seen)f(as)g(the)g(\014rst)f(c)o(haracter)g(of)h(a)g(w)o(ord,)f(then)i -(it)f(and)120 2608 y(all)19 b(subsequen)o(t)g(c)o(haracters)e(up)h(to)g -(a)f(newline)j(are)e(ignored,)h(suppressing)g(history)f(expansion)120 -2670 y(for)d(the)g(remainder)h(of)f(the)g(line.)21 b(This)16 -b(is)g(disabled)h(b)o(y)e(default.)p eop -12 13 bop 0 -58 a Fo(12)1474 b(GNU)15 b(History)g(Library)1736 -183 y(V)l(ariable)-1899 b Fh(char)20 b(*)f Fg(history)p -347 183 18 3 v 21 w(no)p 429 183 V 20 w(expand)p 629 -183 V 20 w(c)n(hars)120 246 y Fo(The)f(list)g(of)g(c)o(haracters)e -(whic)o(h)j(inhibit)h(history)d(expansion)i(if)f(found)g(immediately)h -(follo)o(wing)120 308 y Fj(history)p 261 308 14 2 v 16 -w(expansion)p 472 308 V 18 w(c)o(har)p Fo(.)g(The)d(default)f(is)h -(whitespace)g(and)g(`)p Fn(=)p Fo('.)1736 469 y(V)l(ariable)-1899 -b Fh(char)20 b(*)f Fg(history)p 347 469 18 3 v 21 w(searc)n(h)p -524 469 V 20 w(delimiter)p 768 469 V 23 w(c)n(hars)120 -532 y Fo(The)d(list)g(of)f(additional)i(c)o(haracters)d(whic)o(h)i(can) -g(delimit)h(a)e(history)g(searc)o(h)h(string,)f(in)h(addition)120 -594 y(to)f(whitespace,)g(`)p Fn(:)p Fo(')f(and)i(`)p -Fn(?)p Fo(')e(in)i(the)f(case)h(of)e(a)h(substring)h(searc)o(h.)k(The) -15 b(default)h(is)g(empt)o(y)l(.)1736 755 y(V)l(ariable)-1899 -b Fh(int)20 b Fg(history)p 276 755 V 20 w(quotes)p 458 -755 V 21 w(inhibit)p 642 755 V 23 w(expansion)120 818 -y Fo(If)e(non-zero,)f(single-quoted)i(w)o(ords)e(are)g(not)g(scanned)h -(for)e(the)i(history)f(expansion)h(c)o(haracter.)120 -880 y(The)d(default)h(v)m(alue)h(is)e(0.)1736 1041 y(V)l(ariable)-1899 -b Fh(Function)20 b(*)g Fg(history)p 452 1041 V 20 w(inhibit)p -635 1041 V 23 w(expansion)p 905 1041 V 21 w(function)120 -1104 y Fo(This)f(should)h(b)q(e)f(set)f(to)g(the)h(address)f(of)g(a)h -(function)g(that)f(tak)o(es)f(t)o(w)o(o)h(argumen)o(ts:)25 -b(a)19 b Fn(char)14 b(*)120 1166 y Fo(\()p Fj(string)t -Fo(\))c(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g(string)g(\()p -Fj(i)r Fo(\).)19 b(It)11 b(should)h(return)f(a)g(non-zero)g(v)m(alue)h -(if)g(the)120 1228 y(history)17 b(expansion)h(starting)e(at)h -Fj(string[i])h Fo(should)g(not)f(b)q(e)h(p)q(erformed;)f(zero)g(if)h -(the)f(expansion)120 1290 y(should)i(b)q(e)f(done.)28 -b(It)18 b(is)g(in)o(tended)h(for)e(use)h(b)o(y)g(applications)h(lik)o -(e)g(Bash)f(that)f(use)h(the)g(history)120 1353 y(expansion)e(c)o -(haracter)f(for)f(additional)j(purp)q(oses.)j(By)c(default,)f(this)h(v) -m(ariable)g(is)g(set)f(to)f(NULL.)0 1576 y Fm(2.5)33 -b(History)15 b(Programming)h(Example)62 1713 y Fo(The)g(follo)o(wing)g -(program)e(demonstrates)g(simple)j(use)e(of)g(the)g(GNU)g(History)g -(Library)l(.)120 1840 y Fn(main)23 b(\(\))120 1892 y({)168 -1944 y(char)g(line[1024],)f(*t;)168 1995 y(int)h(len,)g(done)h(=)g(0;) -168 2099 y(line[0])f(=)g(0;)168 2203 y(using_history)f(\(\);)168 -2255 y(while)h(\(!done\))215 2307 y({)263 2359 y(printf)g(\("history$)g -("\);)263 2411 y(fflush)g(\(stdout\);)263 2462 y(t)h(=)g(fgets)f -(\(line,)g(sizeof)g(\(line\))g(-)h(1,)f(stdin\);)263 -2514 y(if)h(\(t)f(&&)h(*t\))311 2566 y({)359 2618 y(len)f(=)h(strlen)f -(\(t\);)359 2670 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))p -eop -13 14 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1017 b(13)406 183 y Fn(t[len)24 b(-)f(1])h(=)g('\\0';)311 -235 y(})263 339 y(if)g(\(!t\))311 391 y(strcpy)f(\(line,)g("quit"\);) -263 495 y(if)h(\(line[0]\))311 546 y({)359 598 y(char)f(*expansion;)359 -650 y(int)g(result;)359 754 y(result)g(=)g(history_expand)f(\(line,)h -(&expansion\);)359 806 y(if)g(\(result\))406 858 y(fprintf)g(\(stderr,) -g("\045s\\n",)g(expansion\);)359 962 y(if)g(\(result)g(<)h(0)g(||)f -(result)g(==)h(2\))406 1013 y({)454 1065 y(free)f(\(expansion\);)454 -1117 y(continue;)406 1169 y(})359 1273 y(add_history)f(\(expansion\);) -359 1325 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h -(1\);)359 1377 y(free)f(\(expansion\);)311 1429 y(})263 -1532 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))311 -1584 y(done)g(=)h(1;)263 1636 y(else)f(if)h(\(strcmp)f(\(line,)g -("save"\))g(==)h(0\))311 1688 y(write_history)e(\("history_file"\);)263 -1740 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))311 -1792 y(read_history)e(\("history_file"\);)263 1844 y(else)h(if)h -(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))311 1896 y({)359 -1947 y(register)e(HIST_ENTRY)h(**the_list;)359 1999 y(register)f(int)i -(i;)359 2103 y(the_list)e(=)i(history_list)e(\(\);)359 -2155 y(if)h(\(the_list\))406 2207 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e -(i++\))454 2259 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g -(history_base,)e(the_list[i]->line\);)311 2311 y(})263 -2363 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))311 -2414 y({)359 2466 y(int)f(which;)359 2518 y(if)g(\(\(sscanf)g(\(line)g -(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))406 2570 y({)454 -2622 y(HIST_ENTRY)f(*entry)g(=)g(remove_history)f(\(which\);)p -eop -14 15 bop 0 -58 a Fo(14)1474 b(GNU)15 b(History)g(Library)454 -183 y Fn(if)24 b(\(!entry\))502 235 y(fprintf)f(\(stderr,)f("No)i(such) -f(entry)g(\045d\\n",)g(which\);)454 287 y(else)502 339 -y({)550 391 y(free)g(\(entry->line\);)550 443 y(free)g(\(entry\);)502 -495 y(})406 546 y(})359 598 y(else)406 650 y({)454 702 -y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)406 754 y(})311 806 y(})215 858 y(})120 -910 y(})p eop -15 16 bop 0 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1346 -b(15)0 183 y Fk(App)r(endix)13 b(A)41 b(Concept)15 b(Index)0 -430 y Fm(A)0 496 y Fe(anc)o(hored)f(searc)o(h)5 b Fd(.)i(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Fe(9)0 604 y Fm(E)0 670 y Fe(ev)o(en)o(t)13 b(designators)g -Fd(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)23 b Fe(1)1015 430 y Fm(H)1015 496 y Fe(history)15 -b(ev)o(en)o(ts)5 b Fd(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(1)1015 554 -y(history)d(expansion)8 b Fd(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(1)1015 612 y(History)14 -b(Searc)o(hing)7 b Fd(.)h(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)20 b Fe(9)p eop -16 17 bop 0 -58 a Fo(16)1474 b(GNU)15 b(History)g(Library)p -eop -17 18 bop 0 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)1069 b(17)0 183 y Fk(App)r(endix)13 -b(B)41 b(F)-7 b(unction)15 b(and)g(V)-7 b(ariable)14 -b(Index)0 430 y Fm(A)0 496 y Fc(add)p 62 496 12 2 v 13 -w(history)8 b Fd(.)s(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20 b Fe(7)0 554 y -Fc(append)p 122 554 V 12 w(history)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fe(10)0 -679 y Fm(C)0 745 y Fc(clear)p 102 745 V 12 w(history)5 -b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)18 b Fe(7)0 803 y Fc(current)p 142 803 -V 11 w(history)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)24 b Fe(8)0 928 y Fm(G)0 994 y Fc(get)p -62 994 V 13 w(history)p 215 994 V 11 w(event)9 b Fd(.)d(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(11)0 1119 -y Fm(H)0 1185 y Fc(history)p 142 1185 V 11 w(arg)p 213 -1185 V 13 w(extract)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)21 b Fe(10)0 1243 y Fc(history)p 142 1243 V 11 w(base)e -Fd(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)20 b Fe(11)0 1301 y Fc(history)p 142 1301 -V 11 w(comment)p 293 1301 V 12 w(char)g Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)21 b Fe(11)0 1359 y Fc(history)p 142 1359 -V 11 w(expand)10 b Fd(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)24 b Fe(10)0 1418 y Fc(history)p -142 1418 V 11 w(expansion)p 333 1418 V 11 w(char)17 b -Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(11)0 1476 -y Fc(history)p 142 1476 V 11 w(get)8 b Fd(.)d(.)h(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20 -b Fe(8)0 1534 y Fc(history)p 142 1534 V 11 w(get)p 213 -1534 V 13 w(history)p 366 1534 V 12 w(state)t Fd(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)0 1592 y Fc(history)p -142 1592 V 11 w(inhibit)p 293 1592 V 12 w(expansion)p -484 1592 V 10 w(function)k Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)23 b Fe(12)0 1650 y Fc(history)p 142 1650 V 11 -w(is)p 193 1650 V 14 w(stifled)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(7)0 1708 y Fc(history)p -142 1708 V 11 w(length)16 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(11)0 1766 y Fc(history)p -142 1766 V 11 w(list)7 b Fd(.)t(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(8)0 1824 -y Fc(history)p 142 1824 V 11 w(no)p 193 1824 V 14 w(expand)p -327 1824 V 12 w(chars)f Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20 -b Fe(12)0 1883 y Fc(history)p 142 1883 V 11 w(quotes)p -273 1883 V 12 w(inhibit)p 425 1883 V 12 w(expansion)14 -b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 -b Fe(12)0 1941 y Fc(history)p 142 1941 V 11 w(search)t -Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Fe(9)0 1999 y Fc(history)p 142 1999 V -11 w(search)p 273 1999 V 12 w(delimiter)p 465 1999 V -11 w(chars)h Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)20 b Fe(12)0 2057 y Fc(history)p 142 2057 -V 11 w(search)p 273 2057 V 12 w(pos)9 b Fd(.)d(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(9)0 2115 y Fc(history)p -142 2115 V 11 w(search)p 273 2115 V 12 w(prefix)6 b Fd(.)t(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(9)0 2173 y Fc(history)p -142 2173 V 11 w(set)p 213 2173 V 13 w(history)p 366 2173 -V 12 w(state)t Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)1015 -430 y Fc(history)p 1157 430 V 12 w(set)p 1229 430 V 13 -w(pos)5 b Fd(.)g(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)19 b Fe(8)1015 488 y Fc(history)p 1157 -488 V 12 w(subst)p 1269 488 V 12 w(char)k Fd(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)25 b Fe(11)1015 546 y Fc(history)p -1157 546 V 12 w(tokenize)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)22 b Fe(11)1015 604 y Fc(history)p -1157 604 V 12 w(total)p 1269 604 V 12 w(bytes)9 b Fd(.)t(.)d(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(8)1015 662 -y Fc(history)p 1157 662 V 12 w(truncate)p 1329 662 V -11 w(file)5 b Fd(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Fe(10)1015 770 y Fm(M)1015 836 y Fc(max)p 1077 836 -V 13 w(input)p 1190 836 V 13 w(history)14 b Fd(.)6 b(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)17 b Fe(11)1015 944 -y Fm(N)1015 1011 y Fc(next)p 1097 1011 V 13 w(history)7 -b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)20 b Fe(8)1015 1119 y Fm(P)1015 1185 -y Fc(previous)p 1177 1185 V 12 w(history)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(8)1015 -1293 y Fm(R)1015 1359 y Fc(read)p 1097 1359 V 13 w(history)7 -b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)20 b Fe(9)1015 1418 y Fc(read)p 1097 -1418 V 13 w(history)p 1250 1418 V 11 w(range)9 b Fd(.)d(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Fe(9)1015 1476 -y Fc(remove)p 1137 1476 V 12 w(history)t Fd(.)t(.)6 b(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(7)1015 1534 y Fc(replace)p 1157 1534 V 12 w(history)p -1309 1534 V 11 w(entry)6 b Fd(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)19 b Fe(7)1015 1642 y Fm(S)1015 1708 y Fc(stifle)p -1137 1708 V 12 w(history)t Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(7)1015 1816 -y Fm(U)1015 1883 y Fc(unstifle)p 1177 1883 V 12 w(history)7 -b Fd(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Fe(7)1015 1941 y Fc(using)p 1117 1941 V 13 w(history)5 -b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)18 b Fe(6)1015 2049 y Fm(W)1015 2115 y -Fc(where)p 1117 2115 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Fe(8)1015 2173 y Fc(write)p 1117 2173 V 13 w(history)t -Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)17 b Fe(10)p eop -18 19 bop 0 -58 a Fo(18)1474 b(GNU)15 b(History)g(Library)p -eop --1 20 bop 1937 -58 a Fo(i)0 183 y Fk(T)-7 b(able)15 b(of)g(Con)n(ten)n -(ts)0 358 y Fm(1)67 b(Using)22 b(History)h(In)n(teractiv)n(ely)15 -b Fb(.)e(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)f(.)h(.)g(.)37 b Fm(1)149 435 y Fo(1.1)45 -b(In)o(teractiv)o(e)15 b(History)g(Expansion)9 b Fa(.)g(.)e(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)23 b -Fo(1)299 498 y(1.1.1)44 b(Ev)o(en)o(t)14 b(Designators)d -Fa(.)d(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)26 b Fo(1)299 560 y(1.1.2)44 b(W)l(ord)15 b(Designators)t -Fa(.)7 b(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)19 b Fo(2)299 622 y(1.1.3)44 b(Mo)q(di\014ers)15 -b Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b Fo(2)0 -747 y Fm(2)67 b(Programming)23 b(with)g(GNU)f(History)11 -b Fb(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)33 b Fm(5)149 825 y Fo(2.1)45 b(In)o(tro)q(duction)16 -b(to)f(History)9 b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fo(5)149 -887 y(2.2)45 b(History)15 b(Storage)c Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)26 b Fo(5)149 949 y(2.3)45 b(History)15 -b(F)l(unctions)c Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fo(6)299 1011 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e -(Managemen)o(t)g Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)29 b Fo(6)299 1074 y(2.3.2)44 b(History)15 b(List)h(Managemen)o -(t)d Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)28 -b Fo(7)299 1136 y(2.3.3)44 b(Information)15 b(Ab)q(out)g(the)h(History) -f(List)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)25 b Fo(7)299 1198 y(2.3.4)44 -b(Mo)o(ving)15 b(Around)g(the)g(History)g(List)10 b Fa(.)f(.)e(.)h(.)f -(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)25 b Fo(8)299 1260 y(2.3.5)44 b(Searc)o(hing)16 -b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) -f(.)h(.)21 b Fo(9)299 1323 y(2.3.6)44 b(Managing)15 b(the)g(History)g -(File)5 b Fa(.)k(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 -b Fo(9)299 1385 y(2.3.7)44 b(History)15 b(Expansion)8 -b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)23 b Fo(10)149 1447 y(2.4)45 b(History)15 b(V)l(ariables)5 -b Fa(.)k(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)20 b Fo(11)149 -1510 y(2.5)45 b(History)15 b(Programming)f(Example)6 -b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)21 -b Fo(12)0 1634 y Fm(App)r(endix)j(A)67 b(Concept)22 b(Index)7 -b Fb(.)k(.)f(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) -h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)29 b Fm(15)0 1774 y(App)r(endix)24 -b(B)67 b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 -b(Index)13 b Fb(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)35 -b Fm(17)p eop --2 21 bop 0 -58 a Fo(ii)1496 b(GNU)15 b(History)g(Library)p -eop end -userdict /end-hook known{end-hook}if diff --git a/readline/doc/readline.0 b/readline/doc/readline.0 deleted file mode 100644 --- a/readline/doc/readline.0 +++ /dev/null @@ -1,1122 +0,0 @@ - - - -READLINE(3) READLINE(3) - - -NNAAMMEE - readline - get a line from a user with editing - -SSYYNNOOPPSSIISS - ##iinncclluuddee <> - ##iinncclluuddee <> - - cchhaarr **rreeaaddlliinnee ((pprroommpptt)) - cchhaarr **pprroommpptt;; - -CCOOPPYYRRIIGGHHTT - Readline is Copyright (C) 1989, 1991, 1993, 1995, 1996 by - the Free Software Foundation, Inc. - -DDEESSCCRRIIPPTTIIOONN - rreeaaddlliinnee will read a line from the terminal and return it, - using pprroommpptt as a prompt. If pprroommpptt is null, no prompt is - issued. The line returned is allocated with _m_a_l_l_o_c(3), so - the caller must free it when finished. The line returned - has the final newline removed, so only the text of the - line remains. - - rreeaaddlliinnee offers editing capabilities while the user is - entering the line. By default, the line editing commands - are similar to those of emacs. A vi-style line editing - interface is also available. - -RREETTUURRNN VVAALLUUEE - rreeaaddlliinnee returns the text of the line read. A blank line - returns the empty string. If EEOOFF is encountered while - reading a line, and the line is empty, NNUULLLL is returned. - If an EEOOFF is read with a non-empty line, it is treated as - a newline. - -NNOOTTAATTIIOONN - An emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Con- - trol-N. Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x - means Meta-X. (On keyboards without a _m_e_t_a key, M-_x means - ESC _x, i.e., press the Escape key then the _x key. This - makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means - ESC-Control-_x, or press the Escape key then hold the Con- - trol key while pressing the _x key.) - - Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which - normally act as a repeat count. Sometimes, however, it is - the sign of the argument that is significant. Passing a - negative argument to a command that acts in the forward - direction (e.g., kkiillll--lliinnee) causes that command to act in - a backward direction. Commands whose behavior with argu- - ments deviates from this are noted. - - When a command is described as _k_i_l_l_i_n_g text, the text - deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). - - - -GNU 1997 Feb 5 1 - - - - - -READLINE(3) READLINE(3) - - - The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive - kills cause the text to be accumulated into one unit, - which can be yanked all at once. Commands which do not - kill text separate the chunks of text on the kill ring. - -IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE - Readline is customized by putting commands in an initial- - ization file (the _i_n_p_u_t_r_c file). The name of this file is - taken from the value of the IINNPPUUTTRRCC environment variable. - If that variable is unset, the default is _~_/_._i_n_p_u_t_r_c. - When a program which uses the readline library starts up, - the init file is read, and the key bindings and variables - are set. There are only a few basic constructs allowed in - the readline init file. Blank lines are ignored. Lines - beginning with a ## are comments. Lines beginning with a $$ - indicate conditional constructs. Other lines denote key - bindings and variable settings. Each program using this - library may add its own commands and bindings. - - For example, placing - - M-Control-u: universal-argument - or - C-Meta-u: universal-argument - into the _i_n_p_u_t_r_c would make M-C-u execute the readline - command _u_n_i_v_e_r_s_a_l_-_a_r_g_u_m_e_n_t. - - The following symbolic character names are recognized - while processing key bindings: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_- - _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. In addition to - command names, readline allows keys to be bound to a - string that is inserted when the key is pressed (a _m_a_c_r_o). - - - KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c - file is simple. All that is required is the name of the - command or the text of a macro and a key sequence to which - it should be bound. The name may be specified in one of - two ways: as a symbolic key name, possibly with _M_e_t_a_- or - _C_o_n_t_r_o_l_- prefixes, or as a key sequence. When using the - form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is the name - of a key spelled out in English. For example: - - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: ">&output" - - In the above example, _C_-_u is bound to the function uunniivveerr-- - ssaall--aarrgguummeenntt, _M_-_D_E_L is bound to the function bbaacckk-- - wwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to run the macro - expressed on the right hand side (that is, to insert the - text _>_&_o_u_t_p_u_t into the line). - - - - -GNU 1997 Feb 5 2 - - - - - -READLINE(3) READLINE(3) - - - In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyy-- - sseeqq differs from kkeeyynnaammee above in that strings denoting an - entire key sequence may be specified by placing the - sequence within double quotes. Some GNU Emacs style key - escapes can be used, as in the following example. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In this example, _C_-_u is again bound to the function uunnii-- - vveerrssaall--aarrgguummeenntt. _C_-_x _C_-_r is bound to the function - rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the - text FFuunnccttiioonn KKeeyy 11. The full set of escape sequences is - - \\CC-- control prefix - - \\MM-- meta prefix - - \\ee an escape character - - \\\\ backslash - - \\"" literal " - - \\'' literal ' - - When entering the text of a macro, single or double quotes - should be used to indicate a macro definition. Unquoted - text is assumed to be a function name. Backslash will - quote any character in the macro text, including " and '. - - BBaasshh allows the current readline key bindings to be dis- - played or modified with the bbiinndd builtin command. The - editing mode may be switched during interactive use by - using the --oo option to the sseett builtin command. Other - programs using this library provide similar mechanisms. - The _i_n_p_u_t_r_c file may be edited and re-read if a program - does not provide any other means to incorporate new bind- - ings. - - VVaarriiaabblleess - Readline has variables that can be used to further cus- - tomize its behavior. A variable may be set in the _i_n_p_u_t_r_c - file with a statement of the form - - sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e - - Except where noted, readline variables can take the values - OOnn or OOffff. The variables and their default values are: - - bbeellll--ssttyyllee ((aauuddiibbllee)) - Controls what happens when readline wants to ring - the terminal bell. If set to nnoonnee, readline never - - - -GNU 1997 Feb 5 3 - - - - - -READLINE(3) READLINE(3) - - - rings the bell. If set to vviissiibbllee, readline uses a - visible bell if one is available. If set to aauuddii-- - bbllee, readline attempts to ring the terminal's bell. - ccoommmmeenntt--bbeeggiinn ((````##'''')) - The string that is inserted in vvii mode when the - iinnsseerrtt--ccoommmmeenntt command is executed. This command - is bound to MM--## in emacs mode and to ## in vi com- - mand mode. - ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) - This determines when the user is queried about - viewing the number of possible completions gener- - ated by the ppoossssiibbllee--ccoommpplleettiioonnss command. It may - be set to any integer value greater than or equal - to zero. If the number of possible completions is - greater than or equal to the value of this vari- - able, the user is asked whether or not he wishes to - view them; otherwise they are simply listed on the - terminal. - ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with - the eighth bit set to an ASCII key sequence by - stripping the eighth bit and prepending an escape - character (in effect, using escape as the _m_e_t_a _p_r_e_- - _f_i_x). - ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) - If set to OOnn, readline will inhibit word comple- - tion. Completion characters will be inserted into - the line as if they had been mapped to sseellff--iinnsseerrtt. - eeddiittiinngg--mmooddee ((eemmaaccss)) - Controls whether readline begins with a set of key - bindings similar to _e_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can - be set to either eemmaaccss or vvii. - eennaabbllee--kkeeyyppaadd ((OOffff)) - When set to OOnn, readline will try to enable the - application keypad when it is called. Some systems - need this to enable the arrow keys. - eexxppaanndd--ttiillddee ((OOffff)) - If set to oonn, tilde expansion is performed when - readline attempts word completion. - hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line - for display, scrolling the input horizontally on a - single screen line when it becomes longer than the - screen width rather than wrapping to a new line. - kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of legal - keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, - _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. - _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent - to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the - value of eeddiittiinngg--mmooddee also affects the default - keymap. - mmaarrkk--ddiirreeccttoorriieess ((OOnn)) - If set to OOnn, completed directory names have a - - - -GNU 1997 Feb 5 4 - - - - - -READLINE(3) READLINE(3) - - - slash appended. - mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified - are displayed with a preceding asterisk (**). - mmeettaa--ffllaagg ((OOffff)) - If set to OOnn, readline will enable eight-bit input - (that is, it will not strip the high bit from the - characters it reads), regardless of what the termi- - nal claims it can support. - oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with - the eighth bit set directly rather than as a meta- - prefixed escape sequence. - sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion - functions. If set to oonn, words which have more - than one possible completion cause the matches to - be listed immediately instead of ringing the bell. - vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as - reported by ssttaatt(2) is appended to the filename - when listing possible completions. - - CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the - conditional compilation features of the C preprocessor - which allows key bindings and variable settings to be per- - formed as the result of tests. There are three parser - directives used. - - $$iiff The $$iiff construct allows bindings to be made based - on the editing mode, the terminal being used, or - the application using readline. The text of the - test extends to the end of the line; no characters - are required to isolate it. - - mmooddee The mmooddee== form of the $$iiff directive is used - to test whether readline is in emacs or vi - mode. This may be used in conjunction with - the sseett kkeeyymmaapp command, for instance, to set - bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_- - _c_t_l_x keymaps only if readline is starting - out in emacs mode. - - tteerrmm The tteerrmm== form may be used to include termi- - nal-specific key bindings, perhaps to bind - the key sequences output by the terminal's - function keys. The word on the right side - of the == is tested against the full name of - the terminal and the portion of the terminal - name before the first --. This allows _s_u_n to - match both _s_u_n and _s_u_n_-_c_m_d, for instance. - - - - - -GNU 1997 Feb 5 5 - - - - - -READLINE(3) READLINE(3) - - - aapppplliiccaattiioonn - The aapppplliiccaattiioonn construct is used to include - application-specific settings. Each program - using the readline library sets the _a_p_p_l_i_c_a_- - _t_i_o_n _n_a_m_e, and an initialization file can - test for a particular value. This could be - used to bind key sequences to functions use- - ful for a specific program. For instance, - the following command adds a key sequence - that quotes the current or previous word in - Bash: - $$iiff bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $$eennddiiff - - $$eennddiiff This command, as you saw in the previous example, - terminates an $$iiff command. - - $$eellssee Commands in this branch of the $$iiff directive are - executed if the test fails. - -SSEEAARRCCHHIINNGG - Readline provides commands for searching through the com- - mand history for lines containing a specified string. - There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_- - _i_n_c_r_e_m_e_n_t_a_l. - - Incremental searches begin before the user has finished - typing the search string. As each character of the search - string is typed, readline displays the next entry from the - history matching the string typed so far. An incremental - search requires only as many characters as needed to find - the desired history entry. The Escape character is used - to terminate an incremental search. Control-J will also - terminate the search. Control-G will abort an incremental - search and restore the original line. When the search is - terminated, the history entry containing the search string - becomes the current line. To find other matching entries - in the history list, type Control-S or Control-R as appro- - priate. This will search backward or forward in the his- - tory for the next line matching the search string typed so - far. Any other key sequence bound to a readline command - will terminate the search and execute that command. For - instance, a _n_e_w_l_i_n_e will terminate the search and accept - the line, thereby executing the command from the history - list. - - Non-incremental searches read the entire search string - before starting to search for matching history lines. The - search string may be typed by the user or part of the con- - tents of the current line. - - - - - -GNU 1997 Feb 5 6 - - - - - -READLINE(3) READLINE(3) - - -EEDDIITTIINNGG CCOOMMMMAANNDDSS - The following is a list of the names of the commands and - the default key sequences to which they are bound. Com- - mand names without an accompanying key sequence are - unbound by default. - - CCoommmmaannddss ffoorr MMoovviinngg - bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) - Move to the start of the current line. - eenndd--ooff--lliinnee ((CC--ee)) - Move to the end of the line. - ffoorrwwaarrdd--cchhaarr ((CC--ff)) - Move forward a character. - bbaacckkwwaarrdd--cchhaarr ((CC--bb)) - Move back a character. - ffoorrwwaarrdd--wwoorrdd ((MM--ff)) - Move forward to the end of the next word. Words - are composed of alphanumeric characters (letters - and digits). - bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of this, or the previous, - word. Words are composed of alphanumeric charac- - ters (letters and digits). - cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen leaving the current line at the - top of the screen. With an argument, refresh the - current line without clearing the screen. - rreeddrraaww--ccuurrrreenntt--lliinnee - Refresh the current line. - - CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy - aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) - Accept the line regardless of where the cursor is. - If this line is non-empty, add it to the history - list. If the line is a modified history line, then - restore the history line to its original state. - pprreevviioouuss--hhiissttoorryy ((CC--pp)) - Fetch the previous command from the history list, - moving back in the list. - nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, mov- - ing forward in the list. - bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) - Move to the first line in the history. - eenndd--ooff--hhiissttoorryy ((MM-->>)) - Move to the end of the input history, i.e., the - line currently being entered. - rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) - Search backward starting at the current line and - moving `up' through the history as necessary. This - is an incremental search. - ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) - Search forward starting at the current line and - moving `down' through the history as necessary. - - - -GNU 1997 Feb 5 7 - - - - - -READLINE(3) READLINE(3) - - - This is an incremental search. - nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) - Search backward through the history starting at the - current line using a non-incremental search for a - string supplied by the user. - nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) - Search forward through the history using a non- - incremental search for a string supplied by the - user. - hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd - Search forward through the history for the string - of characters between the start of the current line - and the current cursor position (the _p_o_i_n_t). This - is a non-incremental search. - hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd - Search backward through the history for the string - of characters between the start of the current line - and the point. This is a non-incremental search. - yyaannkk--nntthh--aarrgg ((MM--CC--yy)) - Insert the first argument to the previous command - (usually the second word on the previous line) at - point (the current cursor position). With an argu- - ment _n, insert the _nth word from the previous com- - mand (the words in the previous command begin with - word 0). A negative argument inserts the _nth word - from the end of the previous command. - yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) - Insert the last argument to the previous command - (the last word of the previous history entry). - With an argument, behave exactly like yyaannkk--nntthh--aarrgg. - - CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt - ddeelleettee--cchhaarr ((CC--dd)) - Delete the character under the cursor. If point is - at the beginning of the line, there are no charac- - ters in the line, and the last character typed was - not CC--dd, then return EEOOFF. - bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given - a numeric argument, save the deleted text on the - kill ring. - qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character that you type to the line - verbatim. This is how to insert characters like - CC--qq, for example. - ttaabb--iinnsseerrtt ((MM--TTAABB)) - Insert a tab character. - sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) - Insert the character typed. - ttrraannssppoossee--cchhaarrss ((CC--tt)) - Drag the character before point forward over the - character at point. Point moves forward as well. - If point is at the end of the line, then transpose - the two characters before point. Negative - - - -GNU 1997 Feb 5 8 - - - - - -READLINE(3) READLINE(3) - - - arguments don't work. - ttrraannssppoossee--wwoorrddss ((MM--tt)) - Drag the word behind the cursor past the word in - front of the cursor moving the cursor over that - word as well. - uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a - negative argument, do the previous word, but do not - move point. - ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a - negative argument, do the previous word, but do not - move point. - ccaappiittaalliizzee--wwoorrdd ((MM--cc)) - Capitalize the current (or following) word. With a - negative argument, do the previous word, but do not - move point. - - KKiilllliinngg aanndd YYaannkkiinngg - kkiillll--lliinnee ((CC--kk)) - Kill the text from the current cursor position to - the end of the line. - bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) - Kill backward to the beginning of the line. - uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the - line. - kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter - where the cursor is. - kkiillll--wwoorrdd ((MM--dd)) - Kill from the cursor to the end of the current - word, or if between words, to the end of the next - word. Word boundaries are the same as those used - by ffoorrwwaarrdd--wwoorrdd. - bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind the cursor. Word boundaries - are the same as those used by bbaacckkwwaarrdd--wwoorrdd. - uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind the cursor, using white space - as a word boundary. The word boundaries are dif- - ferent from bbaacckkwwaarrdd--kkiillll--wwoorrdd. - ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) - Delete all spaces and tabs around point. - kkiillll--rreeggiioonn - Kill the text between the point and _m_a_r_k (saved - cursor position). This text is referred to as the - _r_e_g_i_o_n. - ccooppyy--rreeggiioonn--aass--kkiillll - Copy the text in the region to the kill buffer. - ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. - ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. - - - -GNU 1997 Feb 5 9 - - - - - -READLINE(3) READLINE(3) - - - yyaannkk ((CC--yy)) - Yank the top of the kill ring into the buffer at - the cursor. - yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only - works following yyaannkk or yyaannkk--ppoopp. - - NNuummeerriicc AArrgguummeennttss - ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulat- - ing, or start a new argument. M-- starts a nega- - tive argument. - uunniivveerrssaall--aarrgguummeenntt - This is another way to specify an argument. If - this command is followed by one or more digits, - optionally with a leading minus sign, those digits - define the argument. If the command is followed by - digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the - numeric argument, but is otherwise ignored. As a - special case, if this command is immediately fol- - lowed by a character that is neither a digit or - minus sign, the argument count for the next command - is multiplied by four. The argument count is ini- - tially one, so executing this function the first - time makes the argument count four, a second time - makes the argument count sixteen, and so on. - - CCoommpplleettiinngg - ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before - point. The actual completion performed is applica- - tion-specific. BBaasshh, for instance, attempts com- - pletion treating the text as a variable (if the - text begins with $$), username (if the text begins - with ~~), hostname (if the text begins with @@), or - command (including aliases and functions) in turn. - If none of these produces a match, filename comple- - tion is attempted. GGddbb, on the other hand, allows - completion of program functions and variables, and - only attempts filename completion under certain - circumstances. - ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) - List the possible completions of the text before - point. - iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point - that would have been generated by ppoossssii-- - bbllee--ccoommpplleettiioonnss. - - KKeeyybbooaarrdd MMaaccrrooss - ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current - keyboard macro. - - - - -GNU 1997 Feb 5 10 - - - - - -READLINE(3) READLINE(3) - - - eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) - Stop saving the characters typed into the current - keyboard macro and store the definition. - ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by mak- - ing the characters in the macro appear as if typed - at the keyboard. - - MMiisscceellllaanneeoouuss - rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) - Read in the contents of the _i_n_p_u_t_r_c file, and - incorporate any bindings or variable assignments - found there. - aabboorrtt ((CC--gg)) - Abort the current editing command and ring the ter- - minal's bell (subject to the setting of - bbeellll--ssttyyllee). - ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) - If the metafied character _x is lowercase, run the - command that is bound to the corresponding upper- - case character. - pprreeffiixx--mmeettaa ((EESSCC)) - Metafy the next character typed. EESSCC ff is equiva- - lent to MMeettaa--ff. - uunnddoo ((CC--__,, CC--xx CC--uu)) - Incremental undo, separately remembered for each - line. - rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like - typing the uunnddoo command enough times to return the - line to its initial state. - ttiillddee--eexxppaanndd ((MM--~~)) - Perform tilde expansion on the current word. - sseett--mmaarrkk ((CC--@@,, MM--<>)) - Set the mark to the current point. If a numeric - argument is supplied, the mark is set to that posi- - tion. - eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor - position is set to the saved position, and the old - cursor position is saved as the mark. - cchhaarraacctteerr--sseeaarrcchh ((CC--]])) - A character is read and point is moved to the next - occurrence of that character. A negative count - searches for previous occurrences. - cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) - A character is read and point is moved to the pre- - vious occurrence of that character. A negative - count searches for subsequent occurrences. - iinnsseerrtt--ccoommmmeenntt ((MM--##)) - The value of the readline ccoommmmeenntt--bbeeggiinn variable is - inserted at the beginning of the current line, and - the line is accepted as if a newline had been - typed. This makes the current line a shell - - - -GNU 1997 Feb 5 11 - - - - - -READLINE(3) READLINE(3) - - - comment. - gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **)) - The word before point is treated as a pattern for - pathname expansion, and the list of matching file - names is inserted, replacing the word. - gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg)) - The list of expansions that would have been gener- - ated by gglloobb--eexxppaanndd--wwoorrdd is inserted into the line, - replacing the word before point. - dduummpp--ffuunnccttiioonnss - Print all of the functions and their key bindings - to the readline output stream. If a numeric argu- - ment is supplied, the output is formatted in such a - way that it can be made part of an _i_n_p_u_t_r_c file. - dduummpp--vvaarriiaabblleess - Print all of the settable variables and their val- - ues to the readline output stream. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - dduummpp--mmaaccrrooss - Print all of the readline key sequences bound to - macros and the strings they ouput. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee)) - When in vvii editing mode, this causes a switch to - eemmaaccss editing mode. - vvii--eeddiittiinngg--mmooddee ((MM--CC--jj)) - When in eemmaaccss editing mode, this causes a switch to - vvii editing mode. - -DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS - The following is a list of the default emacs and vi bind- - ings. Characters with the 8th bit set are written as - M-, and are referred to as _m_e_t_a_f_i_e_d characters. - The printable ASCII characters not mentioned in the list - of emacs standard bindings are bound to the _s_e_l_f_-_i_n_s_e_r_t - function, which just inserts the given character into the - input line. In vi insertion mode, all characters not - specifically mentioned are bound to _s_e_l_f_-_i_n_s_e_r_t. Charac- - ters assigned to signal generation by _s_t_t_y(1) or the ter- - minal driver, such as C-Z or C-C, retain that function. - Upper and lower case _m_e_t_a_f_i_e_d characters are bound to the - same function in the emacs mode meta keymap. The remain- - ing characters are unbound, which causes readline to ring - the bell (subject to the setting of the bbeellll--ssttyyllee vari- - able). - - EEmmaaccss MMooddee - Emacs Standard bindings - - "C-@" set-mark - - - -GNU 1997 Feb 5 12 - - - - - -READLINE(3) READLINE(3) - - - "C-A" beginning-of-line - "C-B" backward-char - "C-D" delete-char - "C-E" end-of-line - "C-F" forward-char - "C-G" abort - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-]" character-search - "C-_" undo - " " to "/" self-insert - "0" to "9" self-insert - ":" to "~" self-insert - "C-?" backward-delete-char - - Emacs Meta bindings - - "M-C-G" abort - "M-C-H" backward-kill-word - "M-C-I" tab-insert - "M-C-J" vi-editing-mode - "M-C-M" vi-editing-mode - "M-C-R" revert-line - "M-C-Y" yank-nth-arg - "M-C-[" complete - "M-C-]" character-search-backward - "M-space" set-mark - "M-#" insert-comment - "M-&" tilde-expand - "M-*" insert-completions - "M--" digit-argument - "M-." yank-last-arg - "M-0" digit-argument - "M-1" digit-argument - "M-2" digit-argument - "M-3" digit-argument - "M-4" digit-argument - "M-5" digit-argument - "M-6" digit-argument - "M-7" digit-argument - - - -GNU 1997 Feb 5 13 - - - - - -READLINE(3) READLINE(3) - - - "M-8" digit-argument - "M-9" digit-argument - "M-<" beginning-of-history - "M-=" possible-completions - "M->" end-of-history - "M-?" possible-completions - "M-B" backward-word - "M-C" capitalize-word - "M-D" kill-word - "M-F" forward-word - "M-L" downcase-word - "M-N" non-incremental-forward-search-history - "M-P" non-incremental-reverse-search-history - "M-R" revert-line - "M-T" transpose-words - "M-U" upcase-word - "M-Y" yank-pop - "M-\" delete-horizontal-space - "M-~" tilde-expand - "M-C-?" backward-delete-word - "M-_" yank-last-arg - - Emacs Control-X bindings - - "C-XC-G" abort - "C-XC-R" re-read-init-file - "C-XC-U" undo - "C-XC-X" exchange-point-and-mark - "C-X(" start-kbd-macro - "C-X)" end-kbd-macro - "C-XE" call-last-kbd-macro - "C-XC-?" backward-kill-line - - - VVII MMooddee bbiinnddiinnggss - VI Insert Mode functions - - "C-D" vi-eof-maybe - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-M" accept-line - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-[" vi-movement-mode - "C-_" undo - " " to "~" self-insert - "C-?" backward-delete-char - - - - -GNU 1997 Feb 5 14 - - - - - -READLINE(3) READLINE(3) - - - VI Command Mode functions - - "C-D" vi-eof-maybe - "C-E" emacs-editing-mode - "C-G" abort - "C-H" backward-char - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - " " forward-char - "#" insert-comment - "$" end-of-line - "%" vi-match - "&" vi-tilde-expand - "*" vi-complete - "+" next-history - "," vi-char-search - "-" previous-history - "." vi-redo - "/" vi-search - "0" beginning-of-line - "1" to "9" vi-arg-digit - ";" vi-char-search - "=" vi-complete - "?" vi-search - "A" vi-append-eol - "B" vi-prev-word - "C" vi-change-to - "D" vi-delete-to - "E" vi-end-word - "F" vi-char-search - "G" vi-fetch-history - "I" vi-insert-beg - "N" vi-search-again - "P" vi-put - "R" vi-replace - "S" vi-subst - "T" vi-char-search - "U" revert-line - "W" vi-next-word - "X" backward-delete-char - "Y" vi-yank-to - "\" vi-complete - - - -GNU 1997 Feb 5 15 - - - - - -READLINE(3) READLINE(3) - - - "^" vi-first-print - "_" vi-yank-arg - "`" vi-goto-mark - "a" vi-append-mode - "b" vi-prev-word - "c" vi-change-to - "d" vi-delete-to - "e" vi-end-word - "f" vi-char-search - "h" backward-char - "i" vi-insertion-mode - "j" next-history - "k" prev-history - "l" forward-char - "m" vi-set-mark - "n" vi-search-again - "p" vi-put - "r" vi-change-char - "s" vi-subst - "t" vi-char-search - "u" undo - "w" vi-next-word - "x" vi-delete - "y" vi-yank-to - "|" vi-column - "~" vi-change-case - -SSEEEE AALLSSOO - _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _b_a_s_h(1) - -FFIILLEESS - _~_/_._i_n_p_u_t_r_c - Individual rreeaaddlliinnee initialization file - -AAUUTTHHOORRSS - Brian Fox, Free Software Foundation (primary author) - bfox@ai.MIT.Edu - - Chet Ramey, Case Western Reserve University - chet@ins.CWRU.Edu - -BBUUGG RREEPPOORRTTSS - If you find a bug in rreeaaddlliinnee,, you should report it. But - first, you should make sure that it really is a bug, and - that it appears in the latest version of the rreeaaddlliinnee - library that you have. - - Once you have determined that a bug actually exists, mail - a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_p_r_e_p_._a_i_._M_I_T_._E_d_u. If you have - a fix, you are welcome to mail that as well! Suggestions - and `philosophical' bug reports may be mailed to _b_u_g_- - _r_e_a_d_l_i_n_e@_p_r_e_p_._a_i_._M_I_T_._E_d_u or posted to the Usenet newsgroup - - - -GNU 1997 Feb 5 16 - - - - - -READLINE(3) READLINE(3) - - - ggnnuu..bbaasshh..bbuugg. - - Comments and bug reports concerning this manual page - should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. - -BBUUGGSS - It's too big and too slow. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GNU 1997 Feb 5 17 - - diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi deleted file mode 100644 index 64449db5da229a68cc21b7173cc580ebe036fb79..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ - - - -GNU Readline Library - - -

    GNU Readline Library

    -

    Edition 2.1, for Readline Library Version 2.1.

    -

    March 1996

    -
    Brian Fox, Free Software Foundation
    -
    Chet Ramey, Case Western Reserve University
    -

    -


    - -

    -This document describes the GNU Readline Library, a utility which aids -in the consistency of user interface across discrete programs that need -to provide a command line interface. - -

    -

    -Published by the Free Software Foundation
    -675 Massachusetts Avenue,
    -Cambridge, MA 02139 USA - -

    -

    -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

    -

    -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -

    -

    -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Foundation. - -

    -

    -Copyright (C) 1989, 1991 Free Software Foundation, Inc. - -

    - - - -

    Command Line Editing

    - -

    -This chapter describes the basic features of the GNU -command line editing interface. - -

    - - - -

    Introduction to Line Editing

    - -

    -The following paragraphs describe the notation used to represent -keystrokes. - -

    -

    -The text C-k is read as `Control-K' and describes the character -produced when the k key is pressed while the Control key -is depressed. - -

    -

    -The text M-k is read as `Meta-K' and describes the character -produced when the meta key (if you have one) is depressed, and the k -key is pressed. If you do not have a meta key, the identical keystroke -can be generated by typing ESC first, and then typing k. -Either process is known as metafying the k key. - -

    -

    -The text M-C-k is read as `Meta-Control-k' and describes the -character produced by metafying C-k. - -

    -

    -In addition, several keys have their own names. Specifically, -DEL, ESC, LFD, SPC, RET, and TAB all -stand for themselves when seen in this text, or in an init file -(@xref{Readline Init File}). - -

    - - -

    Readline Interaction

    -

    - - -

    -

    -Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press RETURN. You do not have to be at the -end of the line to press RETURN; the entire line is accepted -regardless of the location of the cursor within the line. - -

    - - - -

    Readline Init File Syntax

    - -

    -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a `#' are comments. -Lines beginning with a `$' indicate conditional -constructs (see section Conditional Init Constructs). Other lines -denote variable settings and key bindings. - -

    -
    - -
    Variable Settings -
    -You can change the state of a few variables in Readline by -using the set command within the init file. Here is how you -would specify that you wish to use vi line editing commands: - - -
    -set editing-mode vi
    -
    - -Right now, there are only a few variables which can be set; -so few, in fact, that we just list them here: - -
    - -
    bell-style -
    - -Controls what happens when Readline wants to ring the terminal bell. -If set to `none', Readline never rings the bell. If set to -`visible', Readline uses a visible bell if one is available. -If set to `audible' (the default), Readline attempts to ring -the terminal's bell. - -
    comment-begin -
    - -The string to insert at the beginning of the line when the -insert-comment command is executed. The default value -is "#". - -
    completion-query-items -
    - -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. The default limit is -100. - -
    convert-meta -
    - -If set to `on', Readline will convert characters with the -eigth bit set to an ASCII key sequence by stripping the eigth -bit and prepending an ESC character, converting them to a -meta-prefixed key sequence. The default value is `on'. - -
    disable-completion -
    - -If set to `On', readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to self-insert. The default is `off'. - -
    editing-mode -
    - -The editing-mode variable controls which editing mode you are -using. By default, Readline starts up in Emacs editing mode, where -the keystrokes are most similar to Emacs. This variable can be -set to either `emacs' or `vi'. - -
    enable-keypad -
    - -When set to `on', readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is `off'. - -
    expand-tilde -
    - -If set to `on', tilde expansion is performed when Readline -attempts word completion. The default is `off'. - -
    horizontal-scroll-mode -
    - -This variable can be set to either `on' or `off'. Setting it -to `on' means that the text of the lines that you edit will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to `off'. - -
    keymap -
    - -Sets Readline's idea of the current keymap for key binding commands. -Acceptable keymap names are -emacs, -emacs-standard, -emacs-meta, -emacs-ctlx, -vi, -vi-command, and -vi-insert. -vi is equivalent to vi-command; emacs is -equivalent to emacs-standard. The default value is emacs. -The value of the editing-mode variable also affects the -default keymap. - -
    mark-directories -
    -If set to `on', completed directory names have a slash -appended. The default is `on'. - -
    mark-modified-lines -
    - -This variable, when set to `on', says to display an asterisk -(`*') at the start of history lines which have been modified. -This variable is `off' by default. - -
    input-meta -
    - - -If set to `on', Readline will enable eight-bit input (it -will not strip the eighth bit from the characters it reads), -regardless of what the terminal claims it can support. The -default value is `off'. The name meta-flag is a -synonym for this variable. - -
    output-meta -
    - -If set to `on', Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is `off'. - -
    show-all-if-ambiguous -
    - -This alters the default behavior of the completion functions. If -set to `on', -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is `off'. - -
    visible-stats -
    - -If set to `on', a character denoting a file's type -is appended to the filename when listing possible -completions. The default is `off'. - -
    - -
    Key Bindings -
    -The syntax for controlling key bindings in the init file is -simple. First you have to know the name of the command that you -want to change. The following pages contain tables of the command name, -the default keybinding, and a short description of what the command -does. - -Once you know the name of the command, simply place the name of the key -you wish to bind the command to, a colon, and then the name of the -command on a line in the init file. The name of the key -can be expressed in different ways, depending on which is most -comfortable for you. - -
    - -
    keyname: function-name or macro -
    -keyname is the name of a key spelled out in English. For example: - -
    -Control-u: universal-argument
    -Meta-Rubout: backward-kill-word
    -Control-o: "> output"
    -
    - -In the above example, `C-u' is bound to the function -universal-argument, and `C-o' is bound to run the macro -expressed on the right hand side (that is, to insert the text -`> output' into the line). - -
    "keyseq": function-name or macro -
    -keyseq differs from keyname above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - - -
    -"\C-u": universal-argument
    -"\C-x\C-r": re-read-init-file
    -"\e[11~": "Function Key 1"
    -
    - -In the above example, `C-u' is bound to the function -universal-argument (just as it was in the first example), -`C-x C-r' is bound to the function re-read-init-file, and -`ESC [ 1 1 ~' is bound to insert the text `Function Key 1'. -The following escape sequences are available when specifying key -sequences: - -
    - -
    \C- -
    -control prefix -
    \M- -
    -meta prefix -
    \e -
    -an escape character -
    \\ -
    -backslash -
    \" -
    -" -
    \' -
    -' -
    - -When entering the text of a macro, single or double quotes should -be used to indicate a macro definition. Unquoted text -is assumed to be a function name. Backslash -will quote any character in the macro text, including `"' -and `''. -For example, the following binding will make `C-x \' -insert a single `\' into the line: - -
    -"\C-x\\": "\\"
    -
    - -
    -
    - - - -

    Conditional Init Constructs

    - -

    -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are three parser directives used. - -

    -
    - -
    $if -
    -The $if construct allows bindings to be made based on the -editing mode, the terminal being used, or the application using -Readline. The text of the test extends to the end of the line; -no characters are required to isolate it. - -
    - -
    mode -
    -The mode= form of the $if directive is used to test -whether Readline is in emacs or vi mode. -This may be used in conjunction -with the `set keymap' command, for instance, to set bindings in -the emacs-standard and emacs-ctlx keymaps only if -Readline is starting out in emacs mode. - -
    term -
    -The term= form may be used to include terminal-specific -key bindings, perhaps to bind the key sequences output by the -terminal's function keys. The word on the right side of the -`=' is tested against the full name of the terminal and the -portion of the terminal name before the first `-'. This -allows sun to match both sun and sun-cmd, -for instance. - -
    application -
    -The application construct is used to include -application-specific settings. Each program using the Readline -library sets the application name, and you can test for it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -
    -$if Bash
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -$endif
    -
    - -
    - -
    $endif -
    -This command, as you saw in the previous example, terminates an -$if command. - -
    $else -
    -Commands in this branch of the $if directive are executed if -the test fails. -
    - - - -

    Sample Init File

    - -

    -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -

    - -
    -# This file controls the behaviour of line input editing for
    -# programs that use the Gnu Readline library.  Existing programs
    -# include FTP, Bash, and Gdb.
    -#
    -# You can re-read the inputrc file with C-x C-r.
    -# Lines beginning with '#' are comments.
    -#
    -# Set various bindings for emacs mode.
    -
    -set editing-mode emacs 
    -
    -$if mode=emacs
    -
    -Meta-Control-h:	backward-kill-word	Text after the function name is ignored
    -
    -#
    -# Arrow keys in keypad mode
    -#
    -#"\M-OD":        backward-char
    -#"\M-OC":        forward-char
    -#"\M-OA":        previous-history
    -#"\M-OB":        next-history
    -#
    -# Arrow keys in ANSI mode
    -#
    -"\M-[D":        backward-char
    -"\M-[C":        forward-char
    -"\M-[A":        previous-history
    -"\M-[B":        next-history
    -#
    -# Arrow keys in 8 bit keypad mode
    -#
    -#"\M-\C-OD":       backward-char
    -#"\M-\C-OC":       forward-char
    -#"\M-\C-OA":       previous-history
    -#"\M-\C-OB":       next-history
    -#
    -# Arrow keys in 8 bit ANSI mode
    -#
    -#"\M-\C-[D":       backward-char
    -#"\M-\C-[C":       forward-char
    -#"\M-\C-[A":       previous-history
    -#"\M-\C-[B":       next-history
    -
    -C-q: quoted-insert
    -
    -$endif
    -
    -# An old-style binding.  This happens to be the default.
    -TAB: complete
    -
    -# Macros that are convenient for shell interaction
    -$if Bash
    -# edit the path
    -"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
    -# prepare to type a quoted word -- insert open and close double quotes
    -# and move to just after the open quote
    -"\C-x\"": "\"\"\C-b"
    -# insert a backslash (testing backslash escapes in sequences and macros)
    -"\C-x\\": "\\"
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -# Add a binding to refresh the line, which is unbound
    -"\C-xr": redraw-current-line
    -# Edit variable on current line.
    -"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
    -$endif
    -
    -# use a visible bell if one is available
    -set bell-style visible
    -
    -# don't strip characters to 7 bits when reading
    -set input-meta on
    -
    -# allow iso-latin1 characters to be inserted rather than converted to
    -# prefix-meta sequences
    -set convert-meta off
    -
    -# display characters with the eighth bit set directly rather than
    -# as meta-prefixed characters
    -set output-meta on
    -
    -# if there are more than 150 possible completions for a word, ask the
    -# user if he wants to see all of them
    -set completion-query-items 150
    -
    -# For FTP
    -$if Ftp
    -"\C-xg": "get \M-?"
    -"\C-xt": "put \M-?"
    -"\M-.": yank-last-arg
    -$endif
    -
    - - - -

    Bindable Readline Commands

    - -

    -This section describes Readline commands that may be bound to key -sequences. - -

    - - -

    Commands For Moving

    -
    - -
    beginning-of-line (C-a) -
    - -Move to the start of the current line. - -
    end-of-line (C-e) -
    - -Move to the end of the line. - -
    forward-char (C-f) -
    - -Move forward a character. - -
    backward-char (C-b) -
    - -Move back a character. - -
    forward-word (M-f) -
    - -Move forward to the end of the next word. Words are composed of -letters and digits. - -
    backward-word (M-b) -
    - -Move back to the start of this, or the previous, word. Words are -composed of letters and digits. - -
    clear-screen (C-l) -
    - -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -
    redraw-current-line () -
    - -Refresh the current line. By default, this is unbound. - -
    - - - -

    Commands For Manipulating The History

    - -
    - -
    accept-line (Newline, Return) -
    - -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -
    previous-history (C-p) -
    - -Move `up' through the history list. - -
    next-history (C-n) -
    - -Move `down' through the history list. - -
    beginning-of-history (M-<) -
    - -Move to the first line in the history. - -
    end-of-history (M->) -
    - -Move to the end of the input history, i.e., the line you are entering. - -
    reverse-search-history (C-r) -
    - -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -
    forward-search-history (C-s) -
    - -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -
    non-incremental-reverse-search-history (M-p) -
    - -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -
    non-incremental-forward-search-history (M-n) -
    - -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -
    history-search-forward () -
    - -Search forward through the history for the string of characters -between the start of the current line and the current cursor -position (the `point'). This is a non-incremental search. By -default, this command is unbound. - -
    history-search-backward () -
    - -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -
    yank-nth-arg (M-C-y) -
    - -Insert the first argument to the previous command (usually -the second word on the previous line). With an argument n, -insert the nth word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the nth word from the end of the previous command. - -
    yank-last-arg (M-., M-_) -
    - -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like yank-nth-arg. - -
    - - - -

    Commands For Changing Text

    - -
    - -
    delete-char (C-d) -
    - -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not C-d, then return EOF. - -
    backward-delete-char (Rubout) -
    - -Delete the character behind the cursor. A numeric arg says to kill -the characters instead of deleting them. - -
    quoted-insert (C-q, C-v) -
    - -Add the next character that you type to the line verbatim. This is -how to insert key sequences like C-q, for example. - -
    tab-insert (M-TAB) -
    - -Insert a tab character. - -
    self-insert (a, b, A, 1, !, ...) -
    - -Insert yourself. - -
    transpose-chars (C-t) -
    - -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative argumentss don't work. - -
    transpose-words (M-t) -
    - -Drag the word behind the cursor past the word in front of the cursor -moving the cursor over that word as well. - -
    upcase-word (M-u) -
    - -Uppercase the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -
    downcase-word (M-l) -
    - -Lowercase the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -
    capitalize-word (M-c) -
    - -Capitalize the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -
    - - - -

    Killing And Yanking

    - -
    - -
    kill-line (C-k) -
    - -Kill the text from the current cursor position to the end of the line. - -
    backward-kill-line (C-x Rubout) -
    - -Kill backward to the beginning of the line. - -
    unix-line-discard (C-u) -
    - -Kill backward from the cursor to the beginning of the current line. -Save the killed text on the kill-ring. - -
    kill-whole-line () -
    - -Kill all characters on the current line, no matter where the -cursor is. By default, this is unbound. - -
    kill-word (M-d) -
    - -Kill from the cursor to the end of the current word, or if between -words, to the end of the next word. Word boundaries are the same -as forward-word. - -
    backward-kill-word (M-DEL) -
    - -Kill the word behind the cursor. Word boundaries are the same -as backward-word. - -
    unix-word-rubout (C-w) -
    - -Kill the word behind the cursor, using white space as a word -boundary. The killed text is saved on the kill-ring. - -
    delete-horizontal-space () -
    - -Delete all spaces and tabs around point. By default, this is unbound. - -
    kill-region () -
    - -Kill the text between the point and the mark (saved -cursor position. This text is referred to as the region. -By default, this command is unbound. - -
    copy-region-as-kill () -
    - -Copy the text in the region to the kill buffer, so you can yank it -right away. By default, this command is unbound. - -
    copy-backward-word () -
    - -Copy the word before point to the kill buffer. -By default, this command is unbound. - -
    copy-forward-word () -
    - -Copy the word following point to the kill buffer. -By default, this command is unbound. - -
    yank (C-y) -
    - -Yank the top of the kill ring into the buffer at the current -cursor position. - -
    yank-pop (M-y) -
    - -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -
    - - - -

    Specifying Numeric Arguments

    -
    - -
    digit-argument (M-0, M-1, ... M--) -
    - -Add this digit to the argument already accumulating, or start a new -argument. M-- starts a negative argument. - -
    universal-argument () -
    - -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing universal-argument -again ends the numeric argument, but is otherwise ignored. -As a special case, if this command is immediately followed by a -character that is neither a digit or minus sign, the argument count -for the next command is multiplied by four. -The argument count is initially one, so executing this function the -first time makes the argument count four, a second time makes the -argument count sixteen, and so on. -By default, this is not bound to a key. -
    - - - -

    Letting Readline Type For You

    - -
    - -
    complete (TAB) -
    - -Attempt to do completion on the text before the cursor. This is -application-specific. Generally, if you are typing a filename -argument, you can do filename completion; if you are typing a command, -you can do command completion, if you are typing in a symbol to GDB, you -can do symbol name completion, if you are typing in a variable to Bash, -you can do variable name completion, and so on. - -
    possible-completions (M-?) -
    - -List the possible completions of the text before the cursor. - -
    insert-completions (M-*) -
    - -Insert all completions of the text before point that would have -been generated by possible-completions. - -
    - - - -

    Keyboard Macros

    -
    - -
    start-kbd-macro (C-x () -
    - -Begin saving the characters typed into the current keyboard macro. - -
    end-kbd-macro (C-x )) -
    - -Stop saving the characters typed into the current keyboard macro -and save the definition. - -
    call-last-kbd-macro (C-x e) -
    - -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -
    - - - -

    Some Miscellaneous Commands

    -
    - -
    re-read-init-file (C-x C-r) -
    - -Read in the contents of the inputrc file, and incorporate -any bindings or variable assignments found there. - -
    abort (C-g) -
    - -Abort the current editing command and -ring the terminal's bell (subject to the setting of -bell-style). - -
    do-uppercase-version (M-a, M-b, M-x, ...) -
    - -If the metafied character x is lowercase, run the command -that is bound to the corresponding uppercase character. - -
    prefix-meta (ESC) -
    - -Make the next character that you type be metafied. This is for people -without a meta key. Typing `ESC f' is equivalent to typing -`M-f'. - -
    undo (C-_, C-x C-u) -
    - -Incremental undo, separately remembered for each line. - -
    revert-line (M-r) -
    - -Undo all changes made to this line. This is like typing the undo -command enough times to get back to the beginning. - -
    tilde-expand (M-~) -
    - -Perform tilde expansion on the current word. - -
    set-mark (C-@) -
    - -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -
    exchange-point-and-mark (C-x C-x) -
    - -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -
    character-search (C-]) -
    - -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -
    character-search-backward (M-C-]) -
    - -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -
    insert-comment (M-#) -
    - -The value of the comment-begin -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -
    dump-functions () -
    - -Print all of the functions and their key bindings to the -readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-variables () -
    - -Print all of the settable variables and their values to the -readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-macros () -
    - -Print all of the readline key sequences bound to macros and the -strings they ouput. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    - - - -

    Readline vi Mode

    - -

    -While the Readline library does not have a full set of vi -editing functions, it does contain enough to allow simple editing -of the line. The Readline vi mode behaves as specified in -the POSIX 1003.2 standard. - -

    -

    -In order to switch interactively between emacs and vi -editing modes, use the command M-C-j (toggle-editing-mode). -The Readline default is emacs mode. - -

    -

    -When you enter a line in vi mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing ESC -switches you into `command' mode, where you can edit the text of the -line with the standard vi movement keys, move to previous -history lines with `k' and subsequent lines with `j', and -so forth. - -

    - - - -

    Programming with GNU Readline

    - -

    -This chapter describes the interface between the GNU Readline Library and -other programs. If you are a programmer, and you wish to include the -features found in GNU Readline -such as completion, line editing, and interactive history manipulation -in your own programs, this section is for you. - -

    - - - -

    Basic Behavior

    - -

    -Many programs provide a command line interface, such as mail, -ftp, and sh. For such programs, the default behaviour of -Readline is sufficient. This section describes how to use Readline in -the simplest way possible, perhaps to replace calls in your code to -gets() or fgets (). - -

    -

    - - -The function readline () prints a prompt and then reads and returns -a single line of text from the user. The line readline -returns is allocated with malloc (); you should free () -the line when you are done with it. The declaration for readline -in ANSI C is - -

    - -
    -char *readline (char *prompt);
    -
    - -

    -So, one might say - -

    -char *line = readline ("Enter a line: ");
    -
    - -

    -in order to read a line of text from the user. -The line returned has the final newline removed, so only the -text remains. - -

    -

    -If readline encounters an EOF while reading the line, and the -line is empty at that point, then (char *)NULL is returned. -Otherwise, the line is ended just as if a newline had been typed. - -

    -

    -If you want the user to be able to get at the line later, (with -C-p for example), you must call add_history () to save the -line away in a history list of such lines. - -

    - -
    -add_history (line);
    -
    - -

    -For full details on the GNU History Library, see the associated manual. - -

    -

    -It is preferable to avoid saving empty lines on the history list, since -users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard gets () library -function, and has the advantage of no static buffer to overflow: - -

    - -
    -/* A static variable for holding the line. */
    -static char *line_read = (char *)NULL;
    -
    -/* Read a string, and return a pointer to it.  Returns NULL on EOF. */
    -char *
    -rl_gets ()
    -{
    -  /* If the buffer has already been allocated, return the memory
    -     to the free pool. */
    -  if (line_read)
    -    {
    -      free (line_read);
    -      line_read = (char *)NULL;
    -    }
    -
    -  /* Get a line from the user. */
    -  line_read = readline ("");
    -
    -  /* If the line has any text in it, save it on the history. */
    -  if (line_read && *line_read)
    -    add_history (line_read);
    -
    -  return (line_read);
    -}
    -
    - -

    -This function gives the user the default behaviour of TAB -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the TAB key -with rl_bind_key (). - -

    - -
    -int rl_bind_key (int key, int (*function)());
    -
    - -

    -rl_bind_key () takes two arguments: key is the character that -you want to bind, and function is the address of the function to -call when key is pressed. Binding TAB to rl_insert () -makes TAB insert itself. -rl_bind_key () returns non-zero if key is not a valid -ASCII character code (between 0 and 255). - -

    -

    -Thus, to disable the default TAB behavior, the following suffices: - -

    -rl_bind_key ('\t', rl_insert);
    -
    - -

    -This code should be executed once at the start of your program; you -might write a function called initialize_readline () which -performs this and other desired initializations, such as installing -custom completers (see section Custom Completers). - -

    - - -

    Custom Functions

    - -

    -Readline provides many functions for manipulating the text of -the line, but it isn't possible to anticipate the needs of all -programs. This section describes the various functions and variables -defined within the Readline library which allow a user program to add -customized functionality to Readline. - -

    - - - -

    The Function Type

    - -

    -For readabilty, we declare a new type of object, called -Function. A Function is a C function which -returns an int. The type declaration for Function is: - -

    -

    -typedef int Function (); - -

    -

    -The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called func which was a pointer to a function. Instead of the -classic C declaration - -

    -

    -int (*)()func; - -

    -

    -we may write - -

    -

    -Function *func; - -

    -

    -Similarly, there are - -

    - -
    -typedef void VFunction ();
    -typedef char *CPFunction (); and
    -typedef char **CPPFunction ();
    -
    - -

    -for functions returning no value, pointer to char, and -pointer to pointer to char, respectively. - -

    - - -

    Writing a New Function

    - -

    -In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - -

    -

    -The calling sequence for a command foo looks like - -

    - -
    -foo (int count, int key)
    -
    - -

    -where count is the numeric argument (or 1 if defaulted) and -key is the key that invoked this function. - -

    -

    -It is completely up to the function as to what should be done with the -numeric argument. Some functions use it as a repeat count, some -as a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a -function uses the numeric argument as a repeat count, it should be able -to do something useful with both negative and positive arguments. -At the very least, it should be aware that it can be passed a -negative argument. - -

    - - -

    Readline Variables

    - -

    -These variables are available to function writers. - -

    -

    -

    -
    Variable: char * rl_line_buffer -
    -This is the line gathered so far. You are welcome to modify the -contents of the line, but see section Allowing Undoing. -
    - -

    -

    -

    -
    Variable: int rl_point -
    -The offset of the current cursor position in rl_line_buffer -(the point). -
    - -

    -

    -

    -
    Variable: int rl_end -
    -The number of characters present in rl_line_buffer. When -rl_point is at the end of the line, rl_point and -rl_end are equal. -
    - -

    -

    -

    -
    Variable: int rl_mark -
    -The mark (saved position) in the current line. If set, the mark -and point define a region. -
    - -

    -

    -

    -
    Variable: int rl_done -
    -Setting this to a non-zero value causes Readline to return the current -line immediately. -
    - -

    -

    -

    -
    Variable: int rl_pending_input -
    -Setting this to a value makes it the next keystroke read. This is a -way to stuff a single character into the input stream. -
    - -

    -

    -

    -
    Variable: char * rl_prompt -
    -The prompt Readline uses. This is set from the argument to -readline (), and should not be assigned to directly. -
    - -

    -

    -

    -
    Variable: char * rl_library_version -
    -The version number of this revision of the library. -
    - -

    -

    -

    -
    Variable: char * rl_terminal_name -
    -The terminal type, used for initialization. -
    - -

    -

    -

    -
    Variable: char * rl_readline_name -
    -This variable is set to a unique name by each application using Readline. -The value allows conditional parsing of the inputrc file -(see section Conditional Init Constructs). -
    - -

    -

    -

    -
    Variable: FILE * rl_instream -
    -The stdio stream from which Readline reads input. -
    - -

    -

    -

    -
    Variable: FILE * rl_outstream -
    -The stdio stream to which Readline performs output. -
    - -

    -

    -

    -
    Variable: Function * rl_startup_hook -
    -If non-zero, this is the address of a function to call just -before readline prints the first prompt. -
    - -

    -

    -

    -
    Variable: Function * rl_event_hook -
    -If non-zero, this is the address of a function to call periodically -when readline is waiting for terminal input. -
    - -

    -

    -

    -
    Variable: Function * rl_getc_function -
    -If non-zero, readline will call indirectly through this pointer -to get a character from the input stream. By default, it is set to -rl_getc, the default readline character input function -(see section Utility Functions). -
    - -

    -

    -

    -
    Variable: VFunction * rl_redisplay_function -
    -If non-zero, readline will call indirectly through this pointer -to update the display with the current contents of the editing buffer. -By default, it is set to rl_redisplay, the default readline -redisplay function (see section Redisplay). -
    - -

    -

    -

    -
    Variable: Keymap rl_executing_keymap -
    -This variable is set to the keymap (see section Selecting a Keymap) in which the -currently executing readline function was found. -
    - -

    -

    -

    -
    Variable: Keymap rl_binding_keymap -
    -This variable is set to the keymap (see section Selecting a Keymap) in which the -last key binding occurred. -
    - -

    - - -

    Readline Convenience Functions

    - - - -

    Naming a Function

    - -

    -The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - -

    - -
    -Meta-Rubout:	backward-kill-word
    -
    - -

    -This binds the keystroke Meta-Rubout to the function -descriptively named backward-kill-word. You, as the -programmer, should bind the functions you write to descriptive names as -well. Readline provides a function for doing that: - -

    -

    -

    -
    Function: int rl_add_defun (char *name, Function *function, int key) -
    -Add name to the list of named functions. Make function be -the function that gets called. If key is not -1, then bind it to -function using rl_bind_key (). -
    - -

    -

    -Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other -than adding a function to Readline, you may need to use the -underlying functions described below. - -

    - - -

    Selecting a Keymap

    - -

    -Key bindings take place on a keymap. The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - -

    -

    -

    -
    Function: Keymap rl_make_bare_keymap () -
    -Returns a new, empty keymap. The space for the keymap is allocated with -malloc (); you should free () it when you are done. -
    - -

    -

    -

    -
    Function: Keymap rl_copy_keymap (Keymap map) -
    -Return a new keymap which is a copy of map. -
    - -

    -

    -

    -
    Function: Keymap rl_make_keymap () -
    -Return a new keymap with the printing characters bound to rl_insert, -the lowercase Meta characters bound to run their equivalents, and -the Meta digits bound to produce numeric arguments. -
    - -

    -

    -

    -
    Function: void rl_discard_keymap (Keymap keymap) -
    -Free the storage associated with keymap. -
    - -

    -

    -Readline has several internal keymaps. These functions allow you to -change which keymap is active. - -

    -

    -

    -
    Function: Keymap rl_get_keymap () -
    -Returns the currently active keymap. -
    - -

    -

    -

    -
    Function: void rl_set_keymap (Keymap keymap) -
    -Makes keymap the currently active keymap. -
    - -

    -

    -

    -
    Function: Keymap rl_get_keymap_by_name (char *name) -
    -Return the keymap matching name. name is one which would -be supplied in a set keymap inputrc line (@xref{Readline Init File}). -
    - -

    -

    -

    -
    Function: char * rl_get_keymap_name (Keymap keymap) -
    -Return the name matching keymap. name is one which would -be supplied in a set keymap inputrc line (@xref{Readline Init File}). -
    - -

    - - -

    Binding Keys

    - -

    -You associate keys with functions through the keymap. Readline has -several internal keymaps: emacs_standard_keymap, -emacs_meta_keymap, emacs_ctlx_keymap, -vi_movement_keymap, and vi_insertion_keymap. -emacs_standard_keymap is the default, and the examples in -this manual assume that. - -

    -

    -These functions manage key bindings. - -

    -

    -

    -
    Function: int rl_bind_key (int key, Function *function) -
    -Binds key to function in the currently active keymap. -Returns non-zero in the case of an invalid key. -
    - -

    -

    -

    -
    Function: int rl_bind_key_in_map (int key, Function *function, Keymap map) -
    -Bind key to function in map. Returns non-zero in the case -of an invalid key. -
    - -

    -

    -

    -
    Function: int rl_unbind_key (int key) -
    -Bind key to the null function in the currently active keymap. -Returns non-zero in case of error. -
    - -

    -

    -

    -
    Function: int rl_unbind_key_in_map (int key, Keymap map) -
    -Bind key to the null function in map. -Returns non-zero in case of error. -
    - -

    -

    -

    -
    Function: int rl_generic_bind (int type, char *keyseq, char *data, Keymap map) -
    -Bind the key sequence represented by the string keyseq to the arbitrary -pointer data. type says what kind of data is pointed to by -data; this can be a function (ISFUNC), a macro -(ISMACR), or a keymap (ISKMAP). This makes new keymaps as -necessary. The initial keymap in which to do bindings is map. -
    - -

    -

    -

    -
    Function: int rl_parse_and_bind (char *line) -
    -Parse line as if it had been read from the inputrc file and -perform any key bindings and variable assignments found -(@xref{Readline Init File}). -
    - -

    -

    -

    -
    Function: int rl_read_init_file (char *filename) -
    -Read keybindings and variable assignments from filename -(@xref{Readline Init File}). -
    - -

    - - -

    Associating Function Names and Bindings

    - -

    -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. - -

    -

    -

    -
    Function: Function * rl_named_function (char *name) -
    -Return the function with name name. -
    - -

    -

    -

    -
    Function: Function * rl_function_of_keyseq (char *keyseq, Keymap map, int *type) -
    -Return the function invoked by keyseq in keymap map. -If map is NULL, the current keymap is used. If type is -not NULL, the type of the object is returned in it (one of ISFUNC, -ISKMAP, or ISMACR). -
    - -

    -

    -

    -
    Function: char ** rl_invoking_keyseqs (Function *function) -
    -Return an array of strings representing the key sequences used to -invoke function in the current keymap. -
    - -

    -

    -

    -
    Function: char ** rl_invoking_keyseqs_in_map (Function *function, Keymap map) -
    -Return an array of strings representing the key sequences used to -invoke function in the keymap map. -
    - -

    -

    -

    -
    Function: void rl_function_dumper (int readable) -
    -Print the readline function names and the key sequences currently -bound to them to rl_outstream. If readable is non-zero, -the list is formatted in such a way that it can be made part of an -inputrc file and re-read. -
    - -

    -

    -

    -
    Function: void rl_list_funmap_names () -
    -Print the names of all bindable Readline functions to rl_outstream. -
    - -

    - - -

    Allowing Undoing

    - -

    -Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try -something if you know you can undo it. I could use an undo function for -the stock market. - -

    -

    -If your function simply inserts text once, or deletes text once, and -uses rl_insert_text () or rl_delete_text () to do it, then -undoing is already done for you automatically. - -

    -

    -If you do multiple insertions or multiple deletions, or any combination -of these operations, you should group them together into one operation. -This is done with rl_begin_undo_group () and -rl_end_undo_group (). - -

    -

    -The types of events that can be undone are: - -

    - -
    -enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; 
    -
    - -

    -Notice that UNDO_DELETE means to insert some text, and -UNDO_INSERT means to delete some text. That is, the undo code -tells undo what to undo, not how to undo it. UNDO_BEGIN and -UNDO_END are tags added by rl_begin_undo_group () and -rl_end_undo_group (). - -

    -

    -

    -
    Function: int rl_begin_undo_group () -
    -Begins saving undo information in a group construct. The undo -information usually comes from calls to rl_insert_text () and -rl_delete_text (), but could be the result of calls to -rl_add_undo (). -
    - -

    -

    -

    -
    Function: int rl_end_undo_group () -
    -Closes the current undo group started with rl_begin_undo_group -(). There should be one call to rl_end_undo_group () -for each call to rl_begin_undo_group (). -
    - -

    -

    -

    -
    Function: void rl_add_undo (enum undo_code what, int start, int end, char *text) -
    -Remember how to undo an event (according to what). The affected -text runs from start to end, and encompasses text. -
    - -

    -

    -

    -
    Function: void free_undo_list () -
    -Free the existing undo list. -
    - -

    -

    -

    -
    Function: int rl_do_undo () -
    -Undo the first thing on the undo list. Returns 0 if there was -nothing to undo, non-zero if something was undone. -
    - -

    -

    -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g., change its case), call rl_modifying () -once, just before you modify the text. You must supply the indices of -the text range that you are going to modify. - -

    -

    -

    -
    Function: int rl_modifying (int start, int end) -
    -Tell Readline to save the text between start and end as a -single undo unit. It is assumed that you will subsequently modify -that text. -
    - -

    - - -

    Redisplay

    - -

    -

    -
    Function: void rl_redisplay () -
    -Change what's displayed on the screen to reflect the current contents -of rl_line_buffer. -
    - -

    -

    -

    -
    Function: int rl_forced_update_display () -
    -Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -
    - -

    -

    -

    -
    Function: int rl_on_new_line () -
    -Tell the update routines that we have moved onto a new (empty) line, -usually after ouputting a newline. -
    - -

    -

    -

    -
    Function: int rl_reset_line_state () -
    -Reset the display state to a clean state and redisplay the current line -starting on a new line. -
    - -

    -

    -

    -
    Function: int rl_message (va_alist) -
    -The arguments are a string as would be supplied to printf. The -resulting string is displayed in the echo area. The echo area -is also used to display numeric arguments and search strings. -
    - -

    -

    -

    -
    Function: int rl_clear_message () -
    -Clear the message in the echo area. -
    - -

    - - -

    Modifying Text

    - -

    -

    -
    Function: int rl_insert_text (char *text) -
    -Insert text into the line at the current cursor position. -
    - -

    -

    -

    -
    Function: int rl_delete_text (int start, int end) -
    -Delete the text between start and end in the current line. -
    - -

    -

    -

    -
    Function: char * rl_copy_text (int start, int end) -
    -Return a copy of the text between start and end in -the current line. -
    - -

    -

    -

    -
    Function: int rl_kill_text (int start, int end) -
    -Copy the text between start and end in the current line -to the kill ring, appending or prepending to the last kill if the -last command was a kill command. The text is deleted. -If start is less than end, -the text is appended, otherwise prepended. If the last command was -not a kill, a new kill ring slot is used. -
    - -

    - - -

    Utility Functions

    - -

    -

    -
    Function: int rl_read_key () -
    -Return the next character available. This handles input inserted into -the input stream via pending input (see section Readline Variables) -and rl_stuff_char (), macros, and characters read from the keyboard. -
    - -

    -

    -

    -
    Function: int rl_getc (FILE *) -
    -Return the next character available from the keyboard. -
    - -

    -

    -

    -
    Function: int rl_stuff_char (int c) -
    -Insert c into the Readline input stream. It will be "read" -before Readline attempts to read characters from the terminal with -rl_read_key (). -
    - -

    -

    -

    -
    Function: rl_extend_line_buffer (int len) -
    -Ensure that rl_line_buffer has enough space to hold len -characters, possibly reallocating it if necessary. -
    - -

    -

    -

    -
    Function: int rl_initialize () -
    -Initialize or re-initialize Readline's internal state. -
    - -

    -

    -

    -
    Function: int rl_reset_terminal (char *terminal_name) -
    -Reinitialize Readline's idea of the terminal settings using -terminal_name as the terminal type (e.g., vt100). -
    - -

    -

    -

    -
    Function: int alphabetic (int c) -
    -Return 1 if c is an alphabetic character. -
    - -

    -

    -

    -
    Function: int numeric (int c) -
    -Return 1 if c is a numeric character. -
    - -

    -

    -

    -
    Function: int ding () -
    -Ring the terminal bell, obeying the setting of bell-style. -
    - -

    -

    -The following are implemented as macros, defined in chartypes.h. - -

    -

    -

    -
    Function: int uppercase_p (int c) -
    -Return 1 if c is an uppercase alphabetic character. -
    - -

    -

    -

    -
    Function: int lowercase_p (int c) -
    -Return 1 if c is a lowercase alphabetic character. -
    - -

    -

    -

    -
    Function: int digit_p (int c) -
    -Return 1 if c is a numeric character. -
    - -

    -

    -

    -
    Function: int to_upper (int c) -
    -If c is a lowercase alphabetic character, return the corresponding -uppercase character. -
    - -

    -

    -

    -
    Function: int to_lower (int c) -
    -If c is an uppercase alphabetic character, return the corresponding -lowercase character. -
    - -

    -

    -

    -
    Function: int digit_value (int c) -
    -If c is a number, return the value it represents. -
    - -

    - - -

    Alternate Interface

    - -

    -An alternate interface is available to plain readline(). Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to select() -on various file descriptors. To accomodate this need, readline can -also be invoked as a `callback' function from an event loop. There -are functions available to make this easy. - -

    -

    -

    -
    Function: void rl_callback_handler_install (char *prompt, Vfunction *lhandler) -
    -Set up the terminal for readline I/O and display the initial -expanded value of prompt. Save the value of lhandler to -use as a callback when a complete line of input has been entered. -
    - -

    -

    -

    -
    Function: void rl_callback_read_char () -
    -Whenever an application determines that keyboard input is available, it -should call rl_callback_read_char(), which will read the next -character from the current input source. If that character completes the -line, rl_callback_read_char will invoke the lhandler -function saved by rl_callback_handler_install to process the -line. EOF is indicated by calling lhandler with a -NULL line. -
    - -

    -

    -

    -
    Function: void rl_callback_handler_remove () -
    -Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -
    - -

    - - -

    An Example

    - -

    -Here is a function which changes lowercase characters to their uppercase -equivalents, and uppercase characters to lowercase. If -this function was bound to `M-c', then typing `M-c' would -change the case of the character under point. Typing `M-1 0 M-c' -would change the case of the following 10 characters, leaving the cursor on -the last character changed. - -

    - -
    -/* Invert the case of the COUNT following characters. */
    -int
    -invert_case_line (count, key)
    -     int count, key;
    -{
    -  register int start, end, i;
    -
    -  start = rl_point;
    -
    -  if (rl_point >= rl_end)
    -    return (0);
    -
    -  if (count < 0)
    -    {
    -      direction = -1;
    -      count = -count;
    -    }
    -  else
    -    direction = 1;
    -      
    -  /* Find the end of the range to modify. */
    -  end = start + (count * direction);
    -
    -  /* Force it to be within range. */
    -  if (end > rl_end)
    -    end = rl_end;
    -  else if (end < 0)
    -    end = 0;
    -
    -  if (start == end)
    -    return (0);
    -
    -  if (start > end)
    -    {
    -      int temp = start;
    -      start = end;
    -      end = temp;
    -    }
    -
    -  /* Tell readline that we are modifying the line, so it will save
    -     the undo information. */
    -  rl_modifying (start, end);
    -
    -  for (i = start; i != end; i++)
    -    {
    -      if (uppercase_p (rl_line_buffer[i]))
    -        rl_line_buffer[i] = to_lower (rl_line_buffer[i]);
    -      else if (lowercase_p (rl_line_buffer[i]))
    -        rl_line_buffer[i] = to_upper (rl_line_buffer[i]);
    -    }
    -  /* Move point to on top of the last character changed. */
    -  rl_point = (direction == 1) ? end - 1 : start;
    -  return (0);
    -}
    -
    - - - -

    Custom Completers

    - -

    -Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. -The following sections describe how your program and Readline -cooperate to provide this service. - -

    - - - -

    How Completing Works

    - -

    -In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately -expand a partial word without knowing all of the possible words -which make sense in that context. The Readline library provides -the user interface to completion, and two of the most common -completion functions: filename and username. For completing other types -of text, you must write your own completion function. This section -describes exactly what such functions must do, and provides an example. - -

    -

    -There are three major functions used to perform completion: - -

    - -
      -
    1. - -The user-interface function rl_complete (). This function is -called with the same arguments as other Readline -functions intended for interactive use: count and -invoking_key. It isolates the word to be completed and calls -completion_matches () to generate a list of possible completions. -It then either lists the possible completions, inserts the possible -completions, or actually performs the -completion, depending on which behavior is desired. - -
    2. - -The internal function completion_matches () uses your -generator function to generate the list of possible matches, and -then returns the array of these matches. You should place the address -of your generator function in rl_completion_entry_function. - -
    3. - -The generator function is called repeatedly from -completion_matches (), returning a string each time. The -arguments to the generator function are text and state. -text is the partial word to be completed. state is zero the -first time the function is called, allowing the generator to perform -any necessary initialization, and a positive non-zero integer for -each subsequent call. When the generator function returns -(char *)NULL this signals completion_matches () that there are -no more possibilities left. Usually the generator function computes the -list of possible completions when state is zero, and returns them -one at a time on subsequent calls. Each string the generator function -returns as a match must be allocated with malloc(); Readline -frees the strings when it has finished with them. - -
    - -

    -

    -
    Function: int rl_complete (int ignore, int invoking_key) -
    -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -completion_matches ()). The default is to do filename completion. -
    - -

    -

    -

    -
    Variable: Function * rl_completion_entry_function -
    -This is a pointer to the generator function for completion_matches -(). If the value of rl_completion_entry_function is -(Function *)NULL then the default filename generator function, -filename_completion_function (), is used. -
    - -

    - - -

    Completion Functions

    - -

    -Here is the complete list of callable completion functions present in -Readline. - -

    -

    -

    -
    Function: int rl_complete_internal (int what_to_do) -
    -Complete the word at or before point. what_to_do says what to do -with the completion. A value of `?' means list the possible -completions. `TAB' means do standard completion. `*' means -insert all of the possible completions. `!' means to display -all of the possible completions, if there is more than one, as well as -performing partial completion. -
    - -

    -

    -

    -
    Function: int rl_complete (int ignore, int invoking_key) -
    -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -completion_matches () and rl_completion_entry_function). -The default is to do filename -completion. This calls rl_complete_internal () with an -argument depending on invoking_key. -
    - -

    -

    -

    -
    Function: int rl_possible_completions (int count, int invoking_key)) -
    -List the possible completions. See description of rl_complete -(). This calls rl_complete_internal () with an argument of -`?'. -
    - -

    -

    -

    -
    Function: int rl_insert_completions (int count, int invoking_key)) -
    -Insert the list of possible completions into the line, deleting the -partially-completed word. See description of rl_complete (). -This calls rl_complete_internal () with an argument of `*'. -
    - -

    -

    -

    -
    Function: char ** completion_matches (char *text, CPFunction *entry_func) -
    -Returns an array of (char *) which is a list of completions for -text. If there are no completions, returns (char **)NULL. -The first entry in the returned array is the substitution for text. -The remaining entries are the possible completions. The array is -terminated with a NULL pointer. - -

    -

    -entry_func is a function of two args, and returns a -(char *). The first argument is text. The second is a -state argument; it is zero on the first call, and non-zero on subsequent -calls. entry_func returns a NULL pointer to the caller -when there are no more matches. -

    - -

    -

    -

    -
    Function: char * filename_completion_function (char *text, int state) -
    -A generator function for filename completion in the general case. Note -that completion in Bash is a little different because of all -the pathnames that must be followed when looking up completions for a -command. The Bash source is a useful reference for writing custom -completion functions. -
    - -

    -

    -

    -
    Function: char * username_completion_function (char *text, int state) -
    -A completion generator for usernames. text contains a partial -username preceded by a random character (usually `~'). As with all -completion generators, state is zero on the first call and non-zero -for subsequent calls. -
    - -

    - - -

    Completion Variables

    - -

    -

    -
    Variable: Function * rl_completion_entry_function -
    -A pointer to the generator function for completion_matches (). -NULL means to use filename_entry_function (), the default -filename completer. -
    - -

    -

    -

    -
    Variable: CPPFunction * rl_attempted_completion_function -
    -A pointer to an alternative function to create matches. -The function is called with text, start, and end. -start and end are indices in rl_line_buffer saying -what the boundaries of text are. If this function exists and -returns NULL, or if this variable is set to NULL, then -rl_complete () will call the value of -rl_completion_entry_function to generate matches, otherwise the -array of strings returned will be used. -
    - -

    -

    -

    -
    Variable: CPFunction * rl_filename_quoting_function -
    -A pointer to a function that will quote a filename in an application- -specific fashion. This is called if filename completion is being -attempted and one of the characters in rl_filename_quote_characters -appears in a completed filename. The function is called with -text, match_type, and quote_pointer. The text -is the filename to be quoted. The match_type is either -SINGLE_MATCH, if there is only one completion match, or -MULT_MATCH. Some functions use this to decide whether or not to -insert a closing quote character. The quote_pointer is a pointer -to any opening quote character the user typed. Some functions choose -to reset this character. -
    - -

    -

    -

    -
    Variable: CPFunction * rl_filename_dequoting_function -
    -A pointer to a function that will remove application-specific quoting -characters from a filename before completion is attempted, so those -characters do not interfere with matching the text against names in -the filesystem. It is called with text, the text of the word -to be dequoted, and quote_char, which is the quoting character -that delimits the filename (usually `'' or `"'). If -quote_char is zero, the filename was not in an embedded string. -
    - -

    -

    -

    -
    Variable: Function * rl_char_is_quoted_p -
    -A pointer to a function to call that determines whether or not a specific -character in the line buffer is quoted, according to whatever quoting -mechanism the program calling readline uses. The function is called with -two arguments: text, the text of the line, and index, the -index of the character in the line. It is used to decide whether a -character found in rl_completer_word_break_characters should be -used to break words for the completer. -
    - -

    -

    -

    -
    Variable: int rl_completion_query_items -
    -Up to this many items will be displayed in response to a -possible-completions call. After that, we ask the user if she is sure -she wants to see them all. The default value is 100. -
    - -

    -

    -

    -
    Variable: char * rl_basic_word_break_characters -
    -The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash, i.e., -" \t\n\"\\'`@$><=;|&{(". -
    - -

    -

    -

    -
    Variable: char * rl_basic_quote_characters -
    -List of quote characters which can cause a word break. -
    - -

    -

    -

    -
    Variable: char * rl_completer_word_break_characters -
    -The list of characters that signal a break between words for -rl_complete_internal (). The default list is the value of -rl_basic_word_break_characters. -
    - -

    -

    -

    -
    Variable: char * rl_completer_quote_characters -
    -List of characters which can be used to quote a substring of the line. -Completion occurs on the entire substring, and within the substring -rl_completer_word_break_characters are treated as any other character, -unless they also appear within this list. -
    - -

    -

    -

    -
    Variable: char * rl_filename_quote_characters -
    -A list of characters that cause a filename to be quoted by the completer -when they appear in a completed filename. The default is empty. -
    - -

    -

    -

    -
    Variable: char * rl_special_prefixes -
    -The list of characters that are word break characters, but should be -left in text when it is passed to the completion function. -Programs can use this to help determine what kind of completing to do. -For instance, Bash sets this variable to "$@" so that it can complete -shell variables and hostnames. -
    - -

    -

    -

    -
    Variable: int rl_completion_append_character -
    -When a single completion alternative matches at the end of the command -line, this character is appended to the inserted completion text. The -default is a space character (` '). Setting this to the null -character (`\0') prevents anything being appended automatically. -This can be changed in custom completion functions to -provide the "most sensible word separator character" according to -an application-specific command line syntax specification. -
    - -

    -

    -

    -
    Variable: int rl_ignore_completion_duplicates -
    -If non-zero, then disallow duplicates in the matches. Default is 1. -
    - -

    -

    -

    -
    Variable: int rl_filename_completion_desired -
    -Non-zero means that the results of the matches are to be treated as -filenames. This is always zero on entry, and can only be changed -within a completion entry generator function. If it is set to a non-zero -value, directory names have a slash appended and Readline attempts to -quote completed filenames if they contain any embedded word break -characters. -
    - -

    -

    -

    -
    Variable: int rl_filename_quoting_desired -
    -Non-zero means that the results of the matches are to be quoted using -double quotes (or an application-specific quoting mechanism) if the -completed filename contains any characters in -rl_filename_quote_chars. This is always non-zero -on entry, and can only be changed within a completion entry generator -function. The quoting is effected via a call to the function pointed to -by rl_filename_quoting_function. -
    - -

    -

    -

    -
    Variable: int rl_inhibit_completion -
    -If this variable is non-zero, completion is inhibit<ed. The completion -character will be inserted as any other bound to self-insert. -
    - -

    -

    -

    -
    Variable: Function * rl_ignore_some_completions_function -
    -This function, if defined, is called by the completer when real filename -completion is done, after all the matching names have been generated. -It is passed a NULL terminated array of matches. -The first element (matches[0]) is the -maximal substring common to all matches. This function can -re-arrange the list of matches as required, but each element deleted -from the array must be freed. -
    - -

    -

    -

    -
    Variable: Function * rl_directory_completion_hook -
    -This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument. It could be used -to expand symbolic links or shell variables in pathnames. -
    - -

    - - -

    A Short Completion Example

    - -

    -Here is a small application demonstrating the use of the GNU Readline -library. It is called fileman, and the source code resides in -`examples/fileman.c'. This sample application provides -completion of command names, line editing features, and access to the -history list. - -

    - -
    -/* fileman.c -- A tiny application which demonstrates how to use the
    -   GNU Readline library.  This application interactively allows users
    -   to manipulate files and their modes. */
    -
    -#include <stdio.h>
    -#include <sys/types.h>
    -#include <sys/file.h>
    -#include <sys/stat.h>
    -#include <sys/errno.h>
    -
    -#include <readline/readline.h>
    -#include <readline/history.h>
    -
    -extern char *getwd ();
    -extern char *xmalloc ();
    -
    -/* The names of functions that actually do the manipulation. */
    -int com_list (), com_view (), com_rename (), com_stat (), com_pwd ();
    -int com_delete (), com_help (), com_cd (), com_quit ();
    -
    -/* A structure which contains information on the commands this program
    -   can understand. */
    -
    -typedef struct {
    -  char *name;			/* User printable name of the function. */
    -  Function *func;		/* Function to call to do the job. */
    -  char *doc;			/* Documentation for this function.  */
    -} COMMAND;
    -
    -COMMAND commands[] = {
    -  { "cd", com_cd, "Change to directory DIR" },
    -  { "delete", com_delete, "Delete FILE" },
    -  { "help", com_help, "Display this text" },
    -  { "?", com_help, "Synonym for `help'" },
    -  { "list", com_list, "List files in DIR" },
    -  { "ls", com_list, "Synonym for `list'" },
    -  { "pwd", com_pwd, "Print the current working directory" },
    -  { "quit", com_quit, "Quit using Fileman" },
    -  { "rename", com_rename, "Rename FILE to NEWNAME" },
    -  { "stat", com_stat, "Print out statistics on FILE" },
    -  { "view", com_view, "View the contents of FILE" },
    -  { (char *)NULL, (Function *)NULL, (char *)NULL }
    -};
    -
    -/* Forward declarations. */
    -char *stripwhite ();
    -COMMAND *find_command ();
    -
    -/* The name of this program, as taken from argv[0]. */
    -char *progname;
    -
    -/* When non-zero, this global means the user is done using this program. */
    -int done;
    -
    -char *
    -dupstr (s)
    -     int s;
    -{
    -  char *r;
    -
    -  r = xmalloc (strlen (s) + 1);
    -  strcpy (r, s);
    -  return (r);
    -}
    -
    -main (argc, argv)
    -     int argc;
    -     char **argv;
    -{
    -  char *line, *s;
    -
    -  progname = argv[0];
    -
    -  initialize_readline ();	/* Bind our completer. */
    -
    -  /* Loop reading and executing lines until the user quits. */
    -  for ( ; done == 0; )
    -    {
    -      line = readline ("FileMan: ");
    -
    -      if (!line)
    -        break;
    -
    -      /* Remove leading and trailing whitespace from the line.
    -         Then, if there is anything left, add it to the history list
    -         and execute it. */
    -      s = stripwhite (line);
    -
    -      if (*s)
    -        {
    -          add_history (s);
    -          execute_line (s);
    -        }
    -
    -      free (line);
    -    }
    -  exit (0);
    -}
    -
    -/* Execute a command line. */
    -int
    -execute_line (line)
    -     char *line;
    -{
    -  register int i;
    -  COMMAND *command;
    -  char *word;
    -
    -  /* Isolate the command word. */
    -  i = 0;
    -  while (line[i] && whitespace (line[i]))
    -    i++;
    -  word = line + i;
    -
    -  while (line[i] && !whitespace (line[i]))
    -    i++;
    -
    -  if (line[i])
    -    line[i++] = '\0';
    -
    -  command = find_command (word);
    -
    -  if (!command)
    -    {
    -      fprintf (stderr, "%s: No such command for FileMan.\n", word);
    -      return (-1);
    -    }
    -
    -  /* Get argument to command, if any. */
    -  while (whitespace (line[i]))
    -    i++;
    -
    -  word = line + i;
    -
    -  /* Call the function. */
    -  return ((*(command->func)) (word));
    -}
    -
    -/* Look up NAME as the name of a command, and return a pointer to that
    -   command.  Return a NULL pointer if NAME isn't a command name. */
    -COMMAND *
    -find_command (name)
    -     char *name;
    -{
    -  register int i;
    -
    -  for (i = 0; commands[i].name; i++)
    -    if (strcmp (name, commands[i].name) == 0)
    -      return (&commands[i]);
    -
    -  return ((COMMAND *)NULL);
    -}
    -
    -/* Strip whitespace from the start and end of STRING.  Return a pointer
    -   into STRING. */
    -char *
    -stripwhite (string)
    -     char *string;
    -{
    -  register char *s, *t;
    -
    -  for (s = string; whitespace (*s); s++)
    -    ;
    -    
    -  if (*s == 0)
    -    return (s);
    -
    -  t = s + strlen (s) - 1;
    -  while (t > s && whitespace (*t))
    -    t--;
    -  *++t = '\0';
    -
    -  return s;
    -}
    -
    -/* **************************************************************** */
    -/*                                                                  */
    -/*                  Interface to Readline Completion                */
    -/*                                                                  */
    -/* **************************************************************** */
    -
    -char *command_generator ();
    -char **fileman_completion ();
    -
    -/* Tell the GNU Readline library how to complete.  We want to try to complete
    -   on command names if this is the first word in the line, or on filenames
    -   if not. */
    -initialize_readline ()
    -{
    -  /* Allow conditional parsing of the ~/.inputrc file. */
    -  rl_readline_name = "FileMan";
    -
    -  /* Tell the completer that we want a crack first. */
    -  rl_attempted_completion_function = (CPPFunction *)fileman_completion;
    -}
    -
    -/* Attempt to complete on the contents of TEXT.  START and END bound the
    -   region of rl_line_buffer that contains the word to complete.  TEXT is
    -   the word to complete.  We can use the entire contents of rl_line_buffer
    -   in case we want to do some simple parsing.  Return the array of matches,
    -   or NULL if there aren't any. */
    -char **
    -fileman_completion (text, start, end)
    -     char *text;
    -     int start, end;
    -{
    -  char **matches;
    -
    -  matches = (char **)NULL;
    -
    -  /* If this word is at the start of the line, then it is a command
    -     to complete.  Otherwise it is the name of a file in the current
    -     directory. */
    -  if (start == 0)
    -    matches = completion_matches (text, command_generator);
    -
    -  return (matches);
    -}
    -
    -/* Generator function for command completion.  STATE lets us know whether
    -   to start from scratch; without any state (i.e. STATE == 0), then we
    -   start at the top of the list. */
    -char *
    -command_generator (text, state)
    -     char *text;
    -     int state;
    -{
    -  static int list_index, len;
    -  char *name;
    -
    -  /* If this is a new word to complete, initialize now.  This includes
    -     saving the length of TEXT for efficiency, and initializing the index
    -     variable to 0. */
    -  if (!state)
    -    {
    -      list_index = 0;
    -      len = strlen (text);
    -    }
    -
    -  /* Return the next name which partially matches from the command list. */
    -  while (name = commands[list_index].name)
    -    {
    -      list_index++;
    -
    -      if (strncmp (name, text, len) == 0)
    -        return (dupstr(name));
    -    }
    -
    -  /* If no names matched, then return NULL. */
    -  return ((char *)NULL);
    -}
    -
    -/* **************************************************************** */
    -/*                                                                  */
    -/*                       FileMan Commands                           */
    -/*                                                                  */
    -/* **************************************************************** */
    -
    -/* String to pass to system ().  This is for the LIST, VIEW and RENAME
    -   commands. */
    -static char syscom[1024];
    -
    -/* List the file(s) named in arg. */
    -com_list (arg)
    -     char *arg;
    -{
    -  if (!arg)
    -    arg = "";
    -
    -  sprintf (syscom, "ls -FClg %s", arg);
    -  return (system (syscom));
    -}
    -
    -com_view (arg)
    -     char *arg;
    -{
    -  if (!valid_argument ("view", arg))
    -    return 1;
    -
    -  sprintf (syscom, "more %s", arg);
    -  return (system (syscom));
    -}
    -
    -com_rename (arg)
    -     char *arg;
    -{
    -  too_dangerous ("rename");
    -  return (1);
    -}
    -
    -com_stat (arg)
    -     char *arg;
    -{
    -  struct stat finfo;
    -
    -  if (!valid_argument ("stat", arg))
    -    return (1);
    -
    -  if (stat (arg, &finfo) == -1)
    -    {
    -      perror (arg);
    -      return (1);
    -    }
    -
    -  printf ("Statistics for `%s':\n", arg);
    -
    -  printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
    -          finfo.st_nlink,
    -          (finfo.st_nlink == 1) ? "" : "s",
    -          finfo.st_size,
    -          (finfo.st_size == 1) ? "" : "s");
    -  printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
    -  printf ("      Last access at: %s", ctime (&finfo.st_atime));
    -  printf ("    Last modified at: %s", ctime (&finfo.st_mtime));
    -  return (0);
    -}
    -
    -com_delete (arg)
    -     char *arg;
    -{
    -  too_dangerous ("delete");
    -  return (1);
    -}
    -
    -/* Print out help for ARG, or for all of the commands if ARG is
    -   not present. */
    -com_help (arg)
    -     char *arg;
    -{
    -  register int i;
    -  int printed = 0;
    -
    -  for (i = 0; commands[i].name; i++)
    -    {
    -      if (!*arg || (strcmp (arg, commands[i].name) == 0))
    -        {
    -          printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
    -          printed++;
    -        }
    -    }
    -
    -  if (!printed)
    -    {
    -      printf ("No commands match `%s'.  Possibilties are:\n", arg);
    -
    -      for (i = 0; commands[i].name; i++)
    -        {
    -          /* Print in six columns. */
    -          if (printed == 6)
    -            {
    -              printed = 0;
    -              printf ("\n");
    -            }
    -
    -          printf ("%s\t", commands[i].name);
    -          printed++;
    -        }
    -
    -      if (printed)
    -        printf ("\n");
    -    }
    -  return (0);
    -}
    -
    -/* Change to the directory ARG. */
    -com_cd (arg)
    -     char *arg;
    -{
    -  if (chdir (arg) == -1)
    -    {
    -      perror (arg);
    -      return 1;
    -    }
    -
    -  com_pwd ("");
    -  return (0);
    -}
    -
    -/* Print out the current working directory. */
    -com_pwd (ignore)
    -     char *ignore;
    -{
    -  char dir[1024], *s;
    -
    -  s = getwd (dir);
    -  if (s == 0)
    -    {
    -      printf ("Error getting pwd: %s\n", dir);
    -      return 1;
    -    }
    -
    -  printf ("Current directory is %s\n", dir);
    -  return 0;
    -}
    -
    -/* The user wishes to quit using this program.  Just set DONE non-zero. */
    -com_quit (arg)
    -     char *arg;
    -{
    -  done = 1;
    -  return (0);
    -}
    -
    -/* Function which tells you that you can't do this. */
    -too_dangerous (caller)
    -     char *caller;
    -{
    -  fprintf (stderr,
    -           "%s: Too dangerous for me to distribute.  Write it yourself.\n",
    -           caller);
    -}
    -
    -/* Return non-zero if ARG is a valid argument for CALLER, else print
    -   an error message and return zero. */
    -int
    -valid_argument (caller, arg)
    -     char *caller, *arg;
    -{
    -  if (!arg || !*arg)
    -    {
    -      fprintf (stderr, "%s: Argument required.\n", caller);
    -      return (0);
    -    }
    -
    -  return (1);
    -}
    -
    - - - -

    Concept Index

    -

    -

    i

    - -
  • interaction, readline -
  • -

    r

    - -
  • readline, function -
  • - -

    - - -

    Function and Variable Index

    -

    -

    (

    - -
  • (int -
  • -

    a

    - -
  • abort (C-g) -
  • accept-line (Newline, Return) -
  • alphabetic -
  • -

    b

    - -
  • backward-char (C-b) -
  • backward-delete-char (Rubout) -
  • backward-kill-line (C-x Rubout) -
  • backward-kill-word (M-DEL) -
  • backward-word (M-b) -
  • beginning-of-history (M-&#60;) -
  • beginning-of-line (C-a) -
  • bell-style -
  • -

    c

    - -
  • call-last-kbd-macro (C-x e) -
  • capitalize-word (M-c) -
  • character-search (C-]) -
  • character-search-backward (M-C-]) -
  • clear-screen (C-l) -
  • comment-begin -
  • complete (TAB) -
  • completion-query-items -
  • completion_matches -
  • convert-meta -
  • copy-backward-word () -
  • copy-forward-word () -
  • copy-region-as-kill () -
  • -

    d

    - -
  • delete-char (C-d) -
  • delete-horizontal-space () -
  • digit-argument (M-0, M-1, ... M--) -
  • digit_p -
  • digit_value -
  • ding -
  • disable-completion -
  • do-uppercase-version (M-a, M-b, M-x, ...) -
  • downcase-word (M-l) -
  • dump-functions () -
  • dump-macros () -
  • dump-variables () -
  • -

    e

    - -
  • editing-mode -
  • enable-keypad -
  • end-kbd-macro (C-x )) -
  • end-of-history (M-&#62;) -
  • end-of-line (C-e) -
  • exchange-point-and-mark (C-x C-x) -
  • expand-tilde -
  • -

    f

    - -
  • filename_completion_function -
  • forward-char (C-f) -
  • forward-search-history (C-s) -
  • forward-word (M-f) -
  • free_undo_list -
  • -

    h

    - -
  • history-search-backward () -
  • history-search-forward () -
  • horizontal-scroll-mode -
  • -

    i

    - -
  • input-meta -
  • insert-comment (M-#) -
  • insert-completions (M-*) -
  • -

    k

    - -
  • keymap -
  • kill-line (C-k) -
  • kill-region () -
  • kill-whole-line () -
  • kill-word (M-d) -
  • -

    l

    - -
  • lowercase_p -
  • -

    m

    - -
  • mark-modified-lines -
  • meta-flag -
  • -

    n

    - -
  • next-history (C-n) -
  • non-incremental-forward-search-history (M-n) -
  • non-incremental-reverse-search-history (M-p) -
  • numeric -
  • -

    o

    - -
  • output-meta -
  • -

    p

    - -
  • possible-completions (M-?) -
  • prefix-meta (ESC) -
  • previous-history (C-p) -
  • -

    q

    - -
  • quoted-insert (C-q, C-v) -
  • -

    r

    - -
  • re-read-init-file (C-x C-r) -
  • readline -
  • redraw-current-line () -
  • reverse-search-history (C-r) -
  • revert-line (M-r) -
  • rl_add_defun -
  • rl_add_undo -
  • rl_attempted_completion_function -
  • rl_basic_quote_characters -
  • rl_basic_word_break_characters -
  • rl_begin_undo_group -
  • rl_bind_key -
  • rl_bind_key_in_map -
  • rl_binding_keymap -
  • rl_callback_handler_install -
  • rl_callback_handler_remove -
  • rl_callback_read_char -
  • rl_char_is_quoted_p -
  • rl_clear_message -
  • rl_complete, rl_complete -
  • rl_complete_internal -
  • rl_completer_quote_characters -
  • rl_completer_word_break_characters -
  • rl_completion_append_character -
  • rl_completion_entry_function, rl_completion_entry_function -
  • rl_completion_query_items -
  • rl_copy_keymap -
  • rl_copy_text -
  • rl_delete_text -
  • rl_directory_completion_hook -
  • rl_discard_keymap -
  • rl_do_undo -
  • rl_done -
  • rl_end -
  • rl_end_undo_group -
  • rl_event_hook -
  • rl_executing_keymap -
  • rl_filename_completion_desired -
  • rl_filename_dequoting_function -
  • rl_filename_quote_characters -
  • rl_filename_quoting_desired -
  • rl_filename_quoting_function -
  • rl_forced_update_display -
  • rl_function_dumper -
  • rl_function_of_keyseq -
  • rl_generic_bind -
  • rl_get_keymap -
  • rl_get_keymap_by_name -
  • rl_get_keymap_name -
  • rl_getc -
  • rl_getc_function -
  • rl_ignore_completion_duplicates -
  • rl_ignore_some_completions_function -
  • rl_inhibit_completion -
  • rl_initialize -
  • rl_insert_completions -
  • rl_insert_text -
  • rl_instream -
  • rl_invoking_keyseqs -
  • rl_invoking_keyseqs_in_map -
  • rl_kill_text -
  • rl_library_version -
  • rl_line_buffer -
  • rl_list_funmap_names -
  • rl_make_bare_keymap -
  • rl_make_keymap -
  • rl_mark -
  • rl_message -
  • rl_modifying -
  • rl_named_function -
  • rl_on_new_line -
  • rl_outstream -
  • rl_parse_and_bind -
  • rl_pending_input -
  • rl_point -
  • rl_possible_completions -
  • rl_prompt -
  • rl_read_init_file -
  • rl_read_key -
  • rl_readline_name -
  • rl_redisplay -
  • rl_redisplay_function -
  • rl_reset_line_state -
  • rl_reset_terminal -
  • rl_set_keymap -
  • rl_special_prefixes -
  • rl_startup_hook -
  • rl_stuff_char -
  • rl_terminal_name -
  • rl_unbind_key -
  • rl_unbind_key_in_map -
  • -

    s

    - -
  • self-insert (a, b, A, 1, !, ...) -
  • set-mark (C-@) -
  • show-all-if-ambiguous -
  • start-kbd-macro (C-x () -
  • -

    t

    - -
  • tab-insert (M-TAB) -
  • tilde-expand (M-~) -
  • to_lower -
  • to_upper -
  • transpose-chars (C-t) -
  • transpose-words (M-t) -
  • -

    u

    - -
  • undo (C-_, C-x C-u) -
  • universal-argument () -
  • unix-line-discard (C-u) -
  • unix-word-rubout (C-w) -
  • upcase-word (M-u) -
  • uppercase_p -
  • username_completion_function -
  • -

    v

    - -
  • visible-stats -
  • -

    y

    - -
  • yank (C-y) -
  • yank-last-arg (M-., M-_) -
  • yank-nth-arg (M-C-y) -
  • yank-pop (M-y) -
  • - -

    -


    -This document was generated on 22 May 1997 using the -texi2html -translator version 1.51.

    - - diff --git a/readline/doc/readline.info b/readline/doc/readline.info deleted file mode 100644 --- a/readline/doc/readline.info +++ /dev/null @@ -1,2766 +0,0 @@ -This is Info file readline.info, produced by Makeinfo-1.55 from the -input file -/usr/homes/chet/src/bash/readline-2.1-beta2/doc/rlman.texinfo. - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - - Copyright (C) 1988, 1991 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: readline.info, Node: Top, Next: Command Line Editing, Prev: (DIR), Up: (DIR) - -GNU Readline Library -******************** - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. -* Programming with GNU Readline:: GNU Readline Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text C-k is read as `Control-K' and describes the character -produced when the k key is pressed while the Control key is depressed. - - The text M-k is read as `Meta-K' and describes the character -produced when the meta key (if you have one) is depressed, and the k -key is pressed. If you do not have a meta key, the identical keystroke -can be generated by typing ESC first, and then typing k. Either -process is known as "metafying" the k key. - - The text M-C-k is read as `Meta-Control-k' and describes the -character produced by "metafying" C-k. - - In addition, several keys have their own names. Specifically, DEL, -ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this -text, or in an init file (*note Readline Init File::.). - - -File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press RETURN. You do not have to be at the end of -the line to press RETURN; the entire line is accepted regardless of the -location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may miss typing a character that you wanted to type, -and not notice your error until you have typed several other -characters. In that case, you can type C-b to move the cursor to the -left, and then correct your mistake. Afterwards, you can move the -cursor to the right with C-f. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the basic bare essentials for editing the text of an input line -follows. - -C-b - Move back one character. - -C-f - Move forward one character. - -DEL - Delete the character to the left of the cursor. - -C-d - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -C-_ - Undo the last thing that you did. You can undo all the way back - to an empty line. - - -File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic possible keystrokes that -you need in order to do editing of the input line. For your -convenience, many other commands have been added in addition to C-b, -C-f, C-d, and DEL. Here are some commands for moving more rapidly -about the line. - -C-a - Move to the start of the line. - -C-e - Move to the end of the line. - -M-f - Move forward a word. - -M-b - Move backward a word. - -C-l - Clear the screen, reprinting the current line at the top. - - Notice how C-f moves forward a character, while M-f moves forward a -word. It is a loose convention that control keystrokes operate on -characters while meta keystrokes operate on words. - - -File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. If the description for a command says that it `kills' text, -then you can be sure that you can get the text back in a different (or -the same) place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -C-k - Kill the text from the current cursor position to the end of the - line. - -M-d - Kill from the cursor to the end of the current word, or if between - words, to the end of the next word. - -M-DEL - Kill from the cursor the start of the previous word, or if between - words, to the start of the previous word. - -C-w - Kill from the cursor to the previous whitespace. This is - different than M-DEL because the word boundaries differ. - - And, here is how to "yank" the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -C-y - Yank the most recently killed text back into the buffer at the - cursor. - -M-y - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is C-y or M-y. - - -File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' you type is a -minus sign (-), then the sign of the argument will be negative. Once -you have typed one meta digit to get the argument started, you can type -the remainder of the digits, and then the command. For example, to give -the C-d command an argument of 10, you could type `M-1 0 C-d'. - - -File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -iNCREMENTAL and NON-INCREMENTAL. - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. The Escape character is -used to terminate an incremental search. Control-J will also terminate -the search. Control-G will abort an incremental search and restore the -original line. When the search is terminated, the history entry -containing the search string becomes the current line. To find other -matching entries in the history list, type Control-S or Control-R as -appropriate. This will search backward or forward in the history for -the next entry matching the search string typed so far. Any other key -sequence bound to a readline command will terminate the search and -execute that command. For instance, a `newline' will terminate the -search and accept the line, thereby executing the command from the -history list. - - Non-incremental searches read the entire search string before -starting to search for matching history lines. The search string may be -typed by the user or part of the contents of the current line. - - -File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of `emacs'-like -keybindings installed by default, it is possible that you would like to -use a different set of keybindings. You can customize programs that -use Readline by putting commands in an "inputrc" file in your home -directory. The name of this file is taken from the value of the -environment variable `INPUTRC'. If that variable is unset, the default -is `~/.inputrc'. - - When a program which uses the Readline library starts up, the init -file is read, and the key bindings are set. - - In addition, the `C-x C-r' command re-reads this init file, thus -incorporating any changes that you might have made to it. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::.). Other lines denote variable -settings and key bindings. - -Variable Settings - You can change the state of a few variables in Readline by using - the `set' command within the init file. Here is how you would - specify that you wish to use `vi' line editing commands: - - set editing-mode vi - - Right now, there are only a few variables which can be set; so - few, in fact, that we just list them here: - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eigth bit set to an ASCII key sequence by stripping the eigth - bit and prepending an ESC character, converting them to a - meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which editing mode you - are using. By default, Readline starts up in Emacs editing - mode, where the keystrokes are most similar to Emacs. This - variable can be set to either `emacs' or `vi'. - - `enable-keypad' - When set to `on', readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines that you edit will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', says to display an asterisk - (`*') at the start of history lines which have been modified. - This variable is `off' by default. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you have to know the name of the command that you - want to change. The following pages contain tables of the command - name, the default keybinding, and a short description of what the - command does. - - Once you know the name of the command, simply place the name of - the key you wish to bind the command to, a colon, and then the - name of the command on a line in the init file. The name of the - key can be expressed in different ways, depending on which is most - comfortable for you. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, `C-u' is bound to the function - `universal-argument', and `C-o' is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, `C-u' is bound to the function - `universal-argument' (just as it was in the first example), - `C-x C-r' is bound to the function `re-read-init-file', and - `ESC [ 1 1 ~' is bound to insert the text `Function Key 1'. - The following escape sequences are available when specifying - key sequences: - - ``\C-'' - control prefix - - ``\M-'' - meta prefix - - ``\e'' - an escape character - - ``\\'' - backslash - - ``\"'' - " - - ``\''' - ' - - When entering the text of a macro, single or double quotes - should be used to indicate a macro definition. Unquoted text - is assumed to be a function name. Backslash will quote any - character in the macro text, including `"' and `''. For - example, the following binding will make `C-x \' insert a - single `\' into the line: - "\C-x\\": "\\" - - -File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are three parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against the full name of the terminal and the - portion of the terminal name before the first `-'. This - allows `sun' to match both `sun' and `sun-cmd', for instance. - - `application' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as you saw in the previous example, terminates an - `$if' command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - - -File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the Gnu Readline library. Existing programs - # include FTP, Bash, and Gdb. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # Set various bindings for emacs mode. - - set editing-mode emacs - - $if mode=emacs - - Meta-Control-h: backward-kill-word Text after the function name is ignored - - # - # Arrow keys in keypad mode - # - #"\M-OD": backward-char - #"\M-OC": forward-char - #"\M-OA": previous-history - #"\M-OB": next-history - # - # Arrow keys in ANSI mode - # - "\M-[D": backward-char - "\M-[C": forward-char - "\M-[A": previous-history - "\M-[B": next-history - # - # Arrow keys in 8 bit keypad mode - # - #"\M-\C-OD": backward-char - #"\M-\C-OC": forward-char - #"\M-\C-OA": previous-history - #"\M-\C-OB": next-history - # - # Arrow keys in 8 bit ANSI mode - # - #"\M-\C-[D": backward-char - #"\M-\C-[C": forward-char - #"\M-\C-[A": previous-history - #"\M-\C-[B": next-history - - C-q: quoted-insert - - $endif - - # An old-style binding. This happens to be the default. - TAB: complete - - # Macros that are convenient for shell interaction - $if Bash - # edit the path - "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" - # prepare to type a quoted word -- insert open and close double quotes - # and move to just after the open quote - "\C-x\"": "\"\"\C-b" - # insert a backslash (testing backslash escapes in sequences and macros) - "\C-x\\": "\\" - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - # Add a binding to refresh the line, which is unbound - "\C-xr": redraw-current-line - # Edit variable on current line. - "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" - $endif - - # use a visible bell if one is available - set bell-style visible - - # don't strip characters to 7 bits when reading - set input-meta on - - # allow iso-latin1 characters to be inserted rather than converted to - # prefix-meta sequences - set convert-meta off - - # display characters with the eighth bit set directly rather than - # as meta-prefixed characters - set output-meta on - - # if there are more than 150 possible completions for a word, ask the - # user if he wants to see all of them - set completion-query-items 150 - - # For FTP - $if Ftp - "\C-xg": "get \M-?" - "\C-xt": "put \M-?" - "\M-.": yank-last-arg - $endif - - -File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. - - -File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of this, or the previous, word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline, Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list. If this line was a history - line, then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line you are - entering. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the current cursor - position (the `point'). This is a non-incremental search. By - default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-., M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. - - -File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not `C-d', then return `EOF'. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric arg says to kill - the characters instead of deleting them. - -`quoted-insert (C-q, C-v)' - Add the next character that you type to the line verbatim. This is - how to insert key sequences like C-q, for example. - -`tab-insert (M-TAB)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative argumentss don't work. - -`transpose-words (M-t)' - Drag the word behind the cursor past the word in front of the - cursor moving the cursor over that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, do the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, do the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, do the previous word, but do not move the cursor. - - -File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from the current cursor position to the end of the - line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - Save the killed text on the kill-ring. - -`kill-whole-line ()' - Kill all characters on the current line, no matter where the - cursor is. By default, this is unbound. - -`kill-word (M-d)' - Kill from the cursor to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-DEL)' - Kill the word behind the cursor. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind the cursor, using white space as a word - boundary. The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text between the point and the *mark* (saved cursor - position. This text is referred to as the REGION. By default, - this command is unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so you can yank it - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. By default, - this command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is yank or yank-pop. - - -File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. M- starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (TAB)' - Attempt to do completion on the text before the cursor. This is - application-specific. Generally, if you are typing a filename - argument, you can do filename completion; if you are typing a - command, you can do command completion, if you are typing in a - symbol to GDB, you can do symbol name completion, if you are - typing in a variable to Bash, you can do variable name completion, - and so on. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - - -File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the inputrc file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta (ESC)' - Make the next character that you type be metafied. This is for - people without a meta key. Typing `ESC f' is equivalent to typing - `M-f'. - -`undo (C-_, C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like typing the `undo' - command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the readline key sequences bound to macros and the - strings they ouput. If a numeric argument is supplied, the output - is formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - - -File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command M-C-j (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing ESC switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - This document describes the GNU Readline Library, a utility for -aiding in the consitency of user interface across discrete programs -that need to provide a command line interface. - - Copyright (C) 1988, 1994, 1996 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: readline.info, Node: Programming with GNU Readline, Next: Concept Index, Prev: Command Line Editing, Up: Top - -Programming with GNU Readline -***************************** - - This chapter describes the interface between the GNU Readline -Library and other programs. If you are a programmer, and you wish to -include the features found in GNU Readline such as completion, line -editing, and interactive history manipulation in your own programs, -this section is for you. - -* Menu: - -* Basic Behavior:: Using the default behavior of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Readline Variables:: Variables accessible to custom - functions. -* Readline Convenience Functions:: Functions which Readline supplies to - aid in writing your own -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. - - -File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline - -Basic Behavior -============== - - Many programs provide a command line interface, such as `mail', -`ftp', and `sh'. For such programs, the default behaviour of Readline -is sufficient. This section describes how to use Readline in the -simplest way possible, perhaps to replace calls in your code to -`gets()' or `fgets ()'. - - The function `readline ()' prints a prompt and then reads and returns -a single line of text from the user. The line `readline' returns is -allocated with `malloc ()'; you should `free ()' the line when you are -done with it. The declaration for `readline' in ANSI C is - - `char *readline (char *PROMPT);' - -So, one might say - `char *line = readline ("Enter a line: ");' - -in order to read a line of text from the user. The line returned has -the final newline removed, so only the text remains. - - If `readline' encounters an `EOF' while reading the line, and the -line is empty at that point, then `(char *)NULL' is returned. -Otherwise, the line is ended just as if a newline had been typed. - - If you want the user to be able to get at the line later, (with C-p -for example), you must call `add_history ()' to save the line away in a -"history" list of such lines. - - `add_history (line)'; - -For full details on the GNU History Library, see the associated manual. - - It is preferable to avoid saving empty lines on the history list, -since users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard `gets ()' library -function, and has the advantage of no static buffer to overflow: - - /* A static variable for holding the line. */ - static char *line_read = (char *)NULL; - - /* Read a string, and return a pointer to it. Returns NULL on EOF. */ - char * - rl_gets () - { - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - free (line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); - } - - This function gives the user the default behaviour of TAB -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the TAB key with -`rl_bind_key ()'. - - `int rl_bind_key (int KEY, int (*FUNCTION)());' - - `rl_bind_key ()' takes two arguments: KEY is the character that you -want to bind, and FUNCTION is the address of the function to call when -KEY is pressed. Binding TAB to `rl_insert ()' makes TAB insert itself. -`rl_bind_key ()' returns non-zero if KEY is not a valid ASCII character -code (between 0 and 255). - - Thus, to disable the default TAB behavior, the following suffices: - `rl_bind_key ('\t', rl_insert);' - - This code should be executed once at the start of your program; you -might write a function called `initialize_readline ()' which performs -this and other desired initializations, such as installing custom -completers (*note Custom Completers::.). - - -File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline - -Custom Functions -================ - - Readline provides many functions for manipulating the text of the -line, but it isn't possible to anticipate the needs of all programs. -This section describes the various functions and variables defined -within the Readline library which allow a user program to add -customized functionality to Readline. - -* Menu: - -* The Function Type:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. - - -File: readline.info, Node: The Function Type, Next: Function Writing, Up: Custom Functions - -The Function Type ------------------ - - For readabilty, we declare a new type of object, called "Function". -A `Function' is a C function which returns an `int'. The type -declaration for `Function' is: - -`typedef int Function ();' - - The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called FUNC which was a pointer to a function. Instead of the classic -C declaration - - `int (*)()func;' - -we may write - - `Function *func;' - -Similarly, there are - - typedef void VFunction (); - typedef char *CPFunction (); and - typedef char **CPPFunction (); - -for functions returning no value, `pointer to char', and `pointer to -pointer to char', respectively. - - -File: readline.info, Node: Function Writing, Prev: The Function Type, Up: Custom Functions - -Writing a New Function ----------------------- - - In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - - The calling sequence for a command `foo' looks like - - `foo (int count, int key)' - -where COUNT is the numeric argument (or 1 if defaulted) and KEY is the -key that invoked this function. - - It is completely up to the function as to what should be done with -the numeric argument. Some functions use it as a repeat count, some as -a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a function uses the numeric argument as a -repeat count, it should be able to do something useful with both -negative and positive arguments. At the very least, it should be aware -that it can be passed a negative argument. - - -File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline - -Readline Variables -================== - - These variables are available to function writers. - - - Variable: char * rl_line_buffer - This is the line gathered so far. You are welcome to modify the - contents of the line, but see *Note Allowing Undoing::. - - - Variable: int rl_point - The offset of the current cursor position in `rl_line_buffer' (the - *point*). - - - Variable: int rl_end - The number of characters present in `rl_line_buffer'. When - `rl_point' is at the end of the line, `rl_point' and `rl_end' are - equal. - - - Variable: int rl_mark - The mark (saved position) in the current line. If set, the mark - and point define a *region*. - - - Variable: int rl_done - Setting this to a non-zero value causes Readline to return the - current line immediately. - - - Variable: int rl_pending_input - Setting this to a value makes it the next keystroke read. This is - a way to stuff a single character into the input stream. - - - Variable: char * rl_prompt - The prompt Readline uses. This is set from the argument to - `readline ()', and should not be assigned to directly. - - - Variable: char * rl_library_version - The version number of this revision of the library. - - - Variable: char * rl_terminal_name - The terminal type, used for initialization. - - - Variable: char * rl_readline_name - This variable is set to a unique name by each application using - Readline. The value allows conditional parsing of the inputrc file - (*note Conditional Init Constructs::.). - - - Variable: FILE * rl_instream - The stdio stream from which Readline reads input. - - - Variable: FILE * rl_outstream - The stdio stream to which Readline performs output. - - - Variable: Function * rl_startup_hook - If non-zero, this is the address of a function to call just before - `readline' prints the first prompt. - - - Variable: Function * rl_event_hook - If non-zero, this is the address of a function to call periodically - when readline is waiting for terminal input. - - - Variable: Function * rl_getc_function - If non-zero, `readline' will call indirectly through this pointer - to get a character from the input stream. By default, it is set to - `rl_getc', the default `readline' character input function (*note - Utility Functions::.). - - - Variable: VFunction * rl_redisplay_function - If non-zero, `readline' will call indirectly through this pointer - to update the display with the current contents of the editing - buffer. By default, it is set to `rl_redisplay', the default - `readline' redisplay function (*note Redisplay::.). - - - Variable: Keymap rl_executing_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - currently executing readline function was found. - - - Variable: Keymap rl_binding_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - last key binding occurred. - - -File: readline.info, Node: Readline Convenience Functions, Next: Custom Completers, Prev: Readline Variables, Up: Programming with GNU Readline - -Readline Convenience Functions -============================== - -* Menu: - -* Function Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Associating Function Names and Bindings:: Translate function names to - key sequences. -* Allowing Undoing:: How to make your functions undoable. -* Redisplay:: Functions to control line display. -* Modifying Text:: Functions to modify `rl_line_buffer'. -* Utility Functions:: Generally useful functions and hooks. -* Alternate Interface:: Using Readline in a `callback' fashion. - - -File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions - -Naming a Function ------------------ - - The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - - Meta-Rubout: backward-kill-word - - This binds the keystroke Meta-Rubout to the function *descriptively* -named `backward-kill-word'. You, as the programmer, should bind the -functions you write to descriptive names as well. Readline provides a -function for doing that: - - - Function: int rl_add_defun (char *name, Function *function, int key) - Add NAME to the list of named functions. Make FUNCTION be the - function that gets called. If KEY is not -1, then bind it to - FUNCTION using `rl_bind_key ()'. - - Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other than adding a -function to Readline, you may need to use the underlying functions -described below. - - -File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions - -Selecting a Keymap ------------------- - - Key bindings take place on a "keymap". The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - - - Function: Keymap rl_make_bare_keymap () - Returns a new, empty keymap. The space for the keymap is - allocated with `malloc ()'; you should `free ()' it when you are - done. - - - Function: Keymap rl_copy_keymap (Keymap map) - Return a new keymap which is a copy of MAP. - - - Function: Keymap rl_make_keymap () - Return a new keymap with the printing characters bound to - rl_insert, the lowercase Meta characters bound to run their - equivalents, and the Meta digits bound to produce numeric - arguments. - - - Function: void rl_discard_keymap (Keymap keymap) - Free the storage associated with KEYMAP. - - Readline has several internal keymaps. These functions allow you to -change which keymap is active. - - - Function: Keymap rl_get_keymap () - Returns the currently active keymap. - - - Function: void rl_set_keymap (Keymap keymap) - Makes KEYMAP the currently active keymap. - - - Function: Keymap rl_get_keymap_by_name (char *name) - Return the keymap matching NAME. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - - Function: char * rl_get_keymap_name (Keymap keymap) - Return the name matching KEYMAP. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - -File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions - -Binding Keys ------------- - - You associate keys with functions through the keymap. Readline has -several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap', -`emacs_ctlx_keymap', `vi_movement_keymap', and `vi_insertion_keymap'. -`emacs_standard_keymap' is the default, and the examples in this manual -assume that. - - These functions manage key bindings. - - - Function: int rl_bind_key (int key, Function *function) - Binds KEY to FUNCTION in the currently active keymap. Returns - non-zero in the case of an invalid KEY. - - - Function: int rl_bind_key_in_map (int key, Function *function, - Keymap map) - Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an - invalid KEY. - - - Function: int rl_unbind_key (int key) - Bind KEY to the null function in the currently active keymap. - Returns non-zero in case of error. - - - Function: int rl_unbind_key_in_map (int key, Keymap map) - Bind KEY to the null function in MAP. Returns non-zero in case of - error. - - - Function: int rl_generic_bind (int type, char *keyseq, char *data, - Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - arbitrary pointer DATA. TYPE says what kind of data is pointed to - by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or - a keymap (`ISKMAP'). This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_parse_and_bind (char *line) - Parse LINE as if it had been read from the `inputrc' file and - perform any key bindings and variable assignments found (*note - Readline Init File::.). - - - Function: int rl_read_init_file (char *filename) - Read keybindings and variable assignments from FILENAME (*note - Readline Init File::.). - - -File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions - -Associating Function Names and Bindings ---------------------------------------- - - These functions allow you to find out what keys invoke named -functions and the functions invoked by a particular key sequence. - - - Function: Function * rl_named_function (char *name) - Return the function with name NAME. - - - Function: Function * rl_function_of_keyseq (char *keyseq, Keymap - map, int *type) - Return the function invoked by KEYSEQ in keymap MAP. If MAP is - NULL, the current keymap is used. If TYPE is not NULL, the type - of the object is returned in it (one of `ISFUNC', `ISKMAP', or - `ISMACR'). - - - Function: char ** rl_invoking_keyseqs (Function *function) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the current keymap. - - - Function: char ** rl_invoking_keyseqs_in_map (Function *function, - Keymap map) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the keymap MAP. - - - Function: void rl_function_dumper (int readable) - Print the readline function names and the key sequences currently - bound to them to `rl_outstream'. If READABLE is non-zero, the - list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: void rl_list_funmap_names () - Print the names of all bindable Readline functions to - `rl_outstream'. - - -File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions - -Allowing Undoing ----------------- - - Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try something if -you know you can undo it. I could use an undo function for the stock -market. - - If your function simply inserts text once, or deletes text once, and -uses `rl_insert_text ()' or `rl_delete_text ()' to do it, then undoing -is already done for you automatically. - - If you do multiple insertions or multiple deletions, or any -combination of these operations, you should group them together into -one operation. This is done with `rl_begin_undo_group ()' and -`rl_end_undo_group ()'. - - The types of events that can be undone are: - - enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; - - Notice that `UNDO_DELETE' means to insert some text, and -`UNDO_INSERT' means to delete some text. That is, the undo code tells -undo what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are -tags added by `rl_begin_undo_group ()' and `rl_end_undo_group ()'. - - - Function: int rl_begin_undo_group () - Begins saving undo information in a group construct. The undo - information usually comes from calls to `rl_insert_text ()' and - `rl_delete_text ()', but could be the result of calls to - `rl_add_undo ()'. - - - Function: int rl_end_undo_group () - Closes the current undo group started with `rl_begin_undo_group - ()'. There should be one call to `rl_end_undo_group ()' for each - call to `rl_begin_undo_group ()'. - - - Function: void rl_add_undo (enum undo_code what, int start, int end, - char *text) - Remember how to undo an event (according to WHAT). The affected - text runs from START to END, and encompasses TEXT. - - - Function: void free_undo_list () - Free the existing undo list. - - - Function: int rl_do_undo () - Undo the first thing on the undo list. Returns `0' if there was - nothing to undo, non-zero if something was undone. - - Finally, if you neither insert nor delete text, but directly modify -the existing text (e.g., change its case), call `rl_modifying ()' once, -just before you modify the text. You must supply the indices of the -text range that you are going to modify. - - - Function: int rl_modifying (int start, int end) - Tell Readline to save the text between START and END as a single - undo unit. It is assumed that you will subsequently modify that - text. - - -File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions - -Redisplay ---------- - - - Function: void rl_redisplay () - Change what's displayed on the screen to reflect the current - contents of `rl_line_buffer'. - - - Function: int rl_forced_update_display () - Force the line to be updated and redisplayed, whether or not - Readline thinks the screen display is correct. - - - Function: int rl_on_new_line () - Tell the update routines that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - Function: int rl_reset_line_state () - Reset the display state to a clean state and redisplay the current - line starting on a new line. - - - Function: int rl_message (va_alist) - The arguments are a string as would be supplied to `printf'. The - resulting string is displayed in the "echo area". The echo area - is also used to display numeric arguments and search strings. - - - Function: int rl_clear_message () - Clear the message in the echo area. - - -File: readline.info, Node: Modifying Text, Next: Utility Functions, Prev: Redisplay, Up: Readline Convenience Functions - -Modifying Text --------------- - - - Function: int rl_insert_text (char *text) - Insert TEXT into the line at the current cursor position. - - - Function: int rl_delete_text (int start, int end) - Delete the text between START and END in the current line. - - - Function: char * rl_copy_text (int start, int end) - Return a copy of the text between START and END in the current - line. - - - Function: int rl_kill_text (int start, int end) - Copy the text between START and END in the current line to the - kill ring, appending or prepending to the last kill if the last - command was a kill command. The text is deleted. If START is - less than END, the text is appended, otherwise prepended. If the - last command was not a kill, a new kill ring slot is used. - - -File: readline.info, Node: Utility Functions, Next: Alternate Interface, Prev: Modifying Text, Up: Readline Convenience Functions - -Utility Functions ------------------ - - - Function: int rl_read_key () - Return the next character available. This handles input inserted - into the input stream via PENDING INPUT (*note Readline - Variables::.) and `rl_stuff_char ()', macros, and characters read - from the keyboard. - - - Function: int rl_getc (FILE *) - Return the next character available from the keyboard. - - - Function: int rl_stuff_char (int c) - Insert C into the Readline input stream. It will be "read" before - Readline attempts to read characters from the terminal with - `rl_read_key ()'. - - - Function: rl_extend_line_buffer (int len) - Ensure that `rl_line_buffer' has enough space to hold LEN - characters, possibly reallocating it if necessary. - - - Function: int rl_initialize () - Initialize or re-initialize Readline's internal state. - - - Function: int rl_reset_terminal (char *terminal_name) - Reinitialize Readline's idea of the terminal settings using - TERMINAL_NAME as the terminal type (e.g., `vt100'). - - - Function: int alphabetic (int c) - Return 1 if C is an alphabetic character. - - - Function: int numeric (int c) - Return 1 if C is a numeric character. - - - Function: int ding () - Ring the terminal bell, obeying the setting of `bell-style'. - - The following are implemented as macros, defined in `chartypes.h'. - - - Function: int uppercase_p (int c) - Return 1 if C is an uppercase alphabetic character. - - - Function: int lowercase_p (int c) - Return 1 if C is a lowercase alphabetic character. - - - Function: int digit_p (int c) - Return 1 if C is a numeric character. - - - Function: int to_upper (int c) - If C is a lowercase alphabetic character, return the corresponding - uppercase character. - - - Function: int to_lower (int c) - If C is an uppercase alphabetic character, return the corresponding - lowercase character. - - - Function: int digit_value (int c) - If C is a number, return the value it represents. - - -File: readline.info, Node: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions - -Alternate Interface -------------------- - - An alternate interface is available to plain `readline()'. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to `select()' on -various file descriptors. To accomodate this need, readline can also -be invoked as a `callback' function from an event loop. There are -functions available to make this easy. - - - Function: void rl_callback_handler_install (char *prompt, Vfunction - *lhandler) - Set up the terminal for readline I/O and display the initial - expanded value of PROMPT. Save the value of LHANDLER to use as a - callback when a complete line of input has been entered. - - - Function: void rl_callback_read_char () - Whenever an application determines that keyboard input is - available, it should call `rl_callback_read_char()', which will - read the next character from the current input source. If that - character completes the line, `rl_callback_read_char' will invoke - the LHANDLER function saved by `rl_callback_handler_install' to - process the line. `EOF' is indicated by calling LHANDLER with a - `NULL' line. - - - Function: void rl_callback_handler_remove () - Restore the terminal to its initial state and remove the line - handler. This may be called from within a callback as well as - independently. - -An Example ----------- - - Here is a function which changes lowercase characters to their -uppercase equivalents, and uppercase characters to lowercase. If this -function was bound to `M-c', then typing `M-c' would change the case of -the character under point. Typing `M-1 0 M-c' would change the case of -the following 10 characters, leaving the cursor on the last character -changed. - - /* Invert the case of the COUNT following characters. */ - int - invert_case_line (count, key) - int count, key; - { - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, so it will save - the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_lower (rl_line_buffer[i]); - else if (lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); - } - - -File: readline.info, Node: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline - -Custom Completers -================= - - Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. The following -sections describe how your program and Readline cooperate to provide -this service. - -* Menu: - -* How Completing Works:: The logic used to do completion. -* Completion Functions:: Functions provided by Readline. -* Completion Variables:: Variables which control completion. -* A Short Completion Example:: An example of writing completer subroutines. - - -File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers - -How Completing Works --------------------- - - In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately expand a -partial word without knowing all of the possible words which make sense -in that context. The Readline library provides the user interface to -completion, and two of the most common completion functions: filename -and username. For completing other types of text, you must write your -own completion function. This section describes exactly what such -functions must do, and provides an example. - - There are three major functions used to perform completion: - - 1. The user-interface function `rl_complete ()'. This function is - called with the same arguments as other Readline functions - intended for interactive use: COUNT and INVOKING_KEY. It - isolates the word to be completed and calls `completion_matches - ()' to generate a list of possible completions. It then either - lists the possible completions, inserts the possible completions, - or actually performs the completion, depending on which behavior - is desired. - - 2. The internal function `completion_matches ()' uses your - "generator" function to generate the list of possible matches, and - then returns the array of these matches. You should place the - address of your generator function in - `rl_completion_entry_function'. - - 3. The generator function is called repeatedly from - `completion_matches ()', returning a string each time. The - arguments to the generator function are TEXT and STATE. TEXT is - the partial word to be completed. STATE is zero the first time - the function is called, allowing the generator to perform any - necessary initialization, and a positive non-zero integer for each - subsequent call. When the generator function returns `(char - *)NULL' this signals `completion_matches ()' that there are no - more possibilities left. Usually the generator function computes - the list of possible completions when STATE is zero, and returns - them one at a time on subsequent calls. Each string the generator - function returns as a match must be allocated with `malloc()'; - Readline frees the strings when it has finished with them. - - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()'). The default is to do filename - completion. - - - Variable: Function * rl_completion_entry_function - This is a pointer to the generator function for `completion_matches - ()'. If the value of `rl_completion_entry_function' is `(Function - *)NULL' then the default filename generator function, - `filename_completion_function ()', is used. - - -File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers - -Completion Functions --------------------- - - Here is the complete list of callable completion functions present in -Readline. - - - Function: int rl_complete_internal (int what_to_do) - Complete the word at or before point. WHAT_TO_DO says what to do - with the completion. A value of `?' means list the possible - completions. `TAB' means do standard completion. `*' means - insert all of the possible completions. `!' means to display all - of the possible completions, if there is more than one, as well as - performing partial completion. - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()' and `rl_completion_entry_function'). - The default is to do filename completion. This calls - `rl_complete_internal ()' with an argument depending on - INVOKING_KEY. - - - Function: int rl_possible_completions (int count, int invoking_key)) - List the possible completions. See description of `rl_complete - ()'. This calls `rl_complete_internal ()' with an argument of `?'. - - - Function: int rl_insert_completions (int count, int invoking_key)) - Insert the list of possible completions into the line, deleting the - partially-completed word. See description of `rl_complete ()'. - This calls `rl_complete_internal ()' with an argument of `*'. - - - Function: char ** completion_matches (char *text, CPFunction - *entry_func) - Returns an array of `(char *)' which is a list of completions for - TEXT. If there are no completions, returns `(char **)NULL'. The - first entry in the returned array is the substitution for TEXT. - The remaining entries are the possible completions. The array is - terminated with a `NULL' pointer. - - ENTRY_FUNC is a function of two args, and returns a `(char *)'. - The first argument is TEXT. The second is a state argument; it is - zero on the first call, and non-zero on subsequent calls. - eNTRY_FUNC returns a `NULL' pointer to the caller when there are - no more matches. - - - Function: char * filename_completion_function (char *text, int state) - A generator function for filename completion in the general case. - Note that completion in Bash is a little different because of all - the pathnames that must be followed when looking up completions - for a command. The Bash source is a useful reference for writing - custom completion functions. - - - Function: char * username_completion_function (char *text, int state) - A completion generator for usernames. TEXT contains a partial - username preceded by a random character (usually `~'). As with all - completion generators, STATE is zero on the first call and non-zero - for subsequent calls. - - -File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers - -Completion Variables --------------------- - - - Variable: Function * rl_completion_entry_function - A pointer to the generator function for `completion_matches ()'. - `NULL' means to use `filename_entry_function ()', the default - filename completer. - - - Variable: CPPFunction * rl_attempted_completion_function - A pointer to an alternative function to create matches. The - function is called with TEXT, START, and END. START and END are - indices in `rl_line_buffer' saying what the boundaries of TEXT - are. If this function exists and returns `NULL', or if this - variable is set to `NULL', then `rl_complete ()' will call the - value of `rl_completion_entry_function' to generate matches, - otherwise the array of strings returned will be used. - - - Variable: CPFunction * rl_filename_quoting_function - A pointer to a function that will quote a filename in an - application- specific fashion. This is called if filename - completion is being attempted and one of the characters in - `rl_filename_quote_characters' appears in a completed filename. - The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. - The TEXT is the filename to be quoted. The MATCH_TYPE is either - `SINGLE_MATCH', if there is only one completion match, or - `MULT_MATCH'. Some functions use this to decide whether or not to - insert a closing quote character. The QUOTE_POINTER is a pointer - to any opening quote character the user typed. Some functions - choose to reset this character. - - - Variable: CPFunction * rl_filename_dequoting_function - A pointer to a function that will remove application-specific - quoting characters from a filename before completion is attempted, - so those characters do not interfere with matching the text - against names in the filesystem. It is called with TEXT, the text - of the word to be dequoted, and QUOTE_CHAR, which is the quoting - character that delimits the filename (usually `'' or `"'). If - QUOTE_CHAR is zero, the filename was not in an embedded string. - - - Variable: Function * rl_char_is_quoted_p - A pointer to a function to call that determines whether or not a - specific character in the line buffer is quoted, according to - whatever quoting mechanism the program calling readline uses. The - function is called with two arguments: TEXT, the text of the line, - and INDEX, the index of the character in the line. It is used to - decide whether a character found in - `rl_completer_word_break_characters' should be used to break words - for the completer. - - - Variable: int rl_completion_query_items - Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she is - sure she wants to see them all. The default value is 100. - - - Variable: char * rl_basic_word_break_characters - The basic list of characters that signal a break between words for - the completer routine. The default value of this variable is the - characters which break words for completion in Bash, i.e., `" - \t\n\"\\'`@$><=;|&{("'. - - - Variable: char * rl_basic_quote_characters - List of quote characters which can cause a word break. - - - Variable: char * rl_completer_word_break_characters - The list of characters that signal a break between words for - `rl_complete_internal ()'. The default list is the value of - `rl_basic_word_break_characters'. - - - Variable: char * rl_completer_quote_characters - List of characters which can be used to quote a substring of the - line. Completion occurs on the entire substring, and within the - substring `rl_completer_word_break_characters' are treated as any - other character, unless they also appear within this list. - - - Variable: char * rl_filename_quote_characters - A list of characters that cause a filename to be quoted by the - completer when they appear in a completed filename. The default - is empty. - - - Variable: char * rl_special_prefixes - The list of characters that are word break characters, but should - be left in TEXT when it is passed to the completion function. - Programs can use this to help determine what kind of completing to - do. For instance, Bash sets this variable to "$@" so that it can - complete shell variables and hostnames. - - - Variable: int rl_completion_append_character - When a single completion alternative matches at the end of the - command line, this character is appended to the inserted - completion text. The default is a space character (` '). Setting - this to the null character (`\0') prevents anything being appended - automatically. This can be changed in custom completion functions - to provide the "most sensible word separator character" according - to an application-specific command line syntax specification. - - - Variable: int rl_ignore_completion_duplicates - If non-zero, then disallow duplicates in the matches. Default is - 1. - - - Variable: int rl_filename_completion_desired - Non-zero means that the results of the matches are to be treated as - filenames. This is *always* zero on entry, and can only be changed - within a completion entry generator function. If it is set to a - non-zero value, directory names have a slash appended and Readline - attempts to quote completed filenames if they contain any embedded - word break characters. - - - Variable: int rl_filename_quoting_desired - Non-zero means that the results of the matches are to be quoted - using double quotes (or an application-specific quoting mechanism) - if the completed filename contains any characters in - `rl_filename_quote_chars'. This is *always* non-zero on entry, - and can only be changed within a completion entry generator - function. The quoting is effected via a call to the function - pointed to by `rl_filename_quoting_function'. - - - Variable: int rl_inhibit_completion - If this variable is non-zero, completion is inhibit - #include - #include - #include - #include - - #include - #include - - extern char *getwd (); - extern char *xmalloc (); - - /* The names of functions that actually do the manipulation. */ - int com_list (), com_view (), com_rename (), com_stat (), com_pwd (); - int com_delete (), com_help (), com_cd (), com_quit (); - - /* A structure which contains information on the commands this program - can understand. */ - - typedef struct { - char *name; /* User printable name of the function. */ - Function *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ - } COMMAND; - - COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (Function *)NULL, (char *)NULL } - }; - - /* Forward declarations. */ - char *stripwhite (); - COMMAND *find_command (); - - /* The name of this program, as taken from argv[0]. */ - char *progname; - - /* When non-zero, this global means the user is done using this program. */ - int done; - - char * - dupstr (s) - int s; - { - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); - } - - main (argc, argv) - int argc; - char **argv; - { - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); - } - - /* Execute a command line. */ - int - execute_line (line) - char *line; - { - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); - } - - /* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ - COMMAND * - find_command (name) - char *name; - { - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); - } - - /* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ - char * - stripwhite (string) - char *string; - { - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; - } - - /* **************************************************************** */ - /* */ - /* Interface to Readline Completion */ - /* */ - /* **************************************************************** */ - - char *command_generator (); - char **fileman_completion (); - - /* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ - initialize_readline () - { - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *)fileman_completion; - } - - /* Attempt to complete on the contents of TEXT. START and END bound the - region of rl_line_buffer that contains the word to complete. TEXT is - the word to complete. We can use the entire contents of rl_line_buffer - in case we want to do some simple parsing. Return the array of matches, - or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - char *text; - int start, end; - { - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = completion_matches (text, command_generator); - - return (matches); - } - - /* Generator function for command completion. STATE lets us know whether - to start from scratch; without any state (i.e. STATE == 0), then we - start at the top of the list. */ - char * - command_generator (text, state) - char *text; - int state; - { - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This includes - saving the length of TEXT for efficiency, and initializing the index - variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); - } - - /* **************************************************************** */ - /* */ - /* FileMan Commands */ - /* */ - /* **************************************************************** */ - - /* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ - static char syscom[1024]; - - /* List the file(s) named in arg. */ - com_list (arg) - char *arg; - { - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); - } - - com_view (arg) - char *arg; - { - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); - } - - com_rename (arg) - char *arg; - { - too_dangerous ("rename"); - return (1); - } - - com_stat (arg) - char *arg; - { - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); - } - - com_delete (arg) - char *arg; - { - too_dangerous ("delete"); - return (1); - } - - /* Print out help for ARG, or for all of the commands if ARG is - not present. */ - com_help (arg) - char *arg; - { - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); - } - - /* Change to the directory ARG. */ - com_cd (arg) - char *arg; - { - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); - } - - /* Print out the current working directory. */ - com_pwd (ignore) - char *ignore; - { - char dir[1024], *s; - - s = getwd (dir); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; - } - - /* The user wishes to quit using this program. Just set DONE non-zero. */ - com_quit (arg) - char *arg; - { - done = 1; - return (0); - } - - /* Function which tells you that you can't do this. */ - too_dangerous (caller) - char *caller; - { - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); - } - - /* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; - { - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); - } - - -File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top - -Concept Index -************* - -* Menu: - -* command editing: Readline Bare Essentials. -* editing command lines: Readline Bare Essentials. -* initialization file, readline: Readline Init File. -* interaction, readline: Readline Interaction. -* kill ring: Readline Killing Commands. -* killing text: Readline Killing Commands. -* notation, readline: Readline Bare Essentials. -* readline, function: Basic Behavior. -* yanking text: Readline Killing Commands. - - -File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* (: Utility Functions. -* abort (C-g): Miscellaneous Commands. -* accept-line (Newline, Return): Commands For History. -* alphabetic: Utility Functions. -* backward-char (C-b): Commands For Moving. -* backward-delete-char (Rubout): Commands For Text. -* backward-kill-line (C-x Rubout): Commands For Killing. -* backward-kill-word (M-DEL): Commands For Killing. -* backward-word (M-b): Commands For Moving. -* beginning-of-history (M-<): Commands For History. -* beginning-of-line (C-a): Commands For Moving. -* bell-style: Readline Init File Syntax. -* call-last-kbd-macro (C-x e): Keyboard Macros. -* capitalize-word (M-c): Commands For Text. -* character-search (C-]): Miscellaneous Commands. -* character-search-backward (M-C-]): Miscellaneous Commands. -* clear-screen (C-l): Commands For Moving. -* comment-begin: Readline Init File Syntax. -* complete (TAB): Commands For Completion. -* completion-query-items: Readline Init File Syntax. -* completion_matches: Completion Functions. -* convert-meta: Readline Init File Syntax. -* copy-backward-word (): Commands For Killing. -* copy-forward-word (): Commands For Killing. -* copy-region-as-kill (): Commands For Killing. -* delete-char (C-d): Commands For Text. -* delete-horizontal-space (): Commands For Killing. -* digit-argument (M-0, M-1, ... M-): Numeric Arguments. -* digit_p: Utility Functions. -* digit_value: Utility Functions. -* ding: Utility Functions. -* disable-completion: Readline Init File Syntax. -* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. -* downcase-word (M-l): Commands For Text. -* dump-functions (): Miscellaneous Commands. -* dump-macros (): Miscellaneous Commands. -* dump-variables (): Miscellaneous Commands. -* editing-mode: Readline Init File Syntax. -* enable-keypad: Readline Init File Syntax. -* end-kbd-macro (C-x )): Keyboard Macros. -* end-of-history (M->): Commands For History. -* end-of-line (C-e): Commands For Moving. -* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. -* expand-tilde: Readline Init File Syntax. -* filename_completion_function: Completion Functions. -* forward-char (C-f): Commands For Moving. -* forward-search-history (C-s): Commands For History. -* forward-word (M-f): Commands For Moving. -* free_undo_list: Allowing Undoing. -* history-search-backward (): Commands For History. -* history-search-forward (): Commands For History. -* horizontal-scroll-mode: Readline Init File Syntax. -* input-meta: Readline Init File Syntax. -* insert-comment (M-#): Miscellaneous Commands. -* insert-completions (M-*): Commands For Completion. -* keymap: Readline Init File Syntax. -* kill-line (C-k): Commands For Killing. -* kill-region (): Commands For Killing. -* kill-whole-line (): Commands For Killing. -* kill-word (M-d): Commands For Killing. -* lowercase_p: Utility Functions. -* mark-modified-lines: Readline Init File Syntax. -* meta-flag: Readline Init File Syntax. -* next-history (C-n): Commands For History. -* non-incremental-forward-search-history (M-n): Commands For History. -* non-incremental-reverse-search-history (M-p): Commands For History. -* numeric: Utility Functions. -* output-meta: Readline Init File Syntax. -* possible-completions (M-?): Commands For Completion. -* prefix-meta (ESC): Miscellaneous Commands. -* previous-history (C-p): Commands For History. -* quoted-insert (C-q, C-v): Commands For Text. -* re-read-init-file (C-x C-r): Miscellaneous Commands. -* readline: Basic Behavior. -* redraw-current-line (): Commands For Moving. -* reverse-search-history (C-r): Commands For History. -* revert-line (M-r): Miscellaneous Commands. -* rl_add_defun: Function Naming. -* rl_add_undo: Allowing Undoing. -* rl_attempted_completion_function: Completion Variables. -* rl_basic_quote_characters: Completion Variables. -* rl_basic_word_break_characters: Completion Variables. -* rl_begin_undo_group: Allowing Undoing. -* rl_binding_keymap: Readline Variables. -* rl_bind_key: Binding Keys. -* rl_bind_key_in_map: Binding Keys. -* rl_callback_handler_install: Alternate Interface. -* rl_callback_handler_remove: Alternate Interface. -* rl_callback_read_char: Alternate Interface. -* rl_char_is_quoted_p: Completion Variables. -* rl_clear_message: Redisplay. -* rl_complete: Completion Functions. -* rl_complete: How Completing Works. -* rl_completer_quote_characters: Completion Variables. -* rl_completer_word_break_characters: Completion Variables. -* rl_complete_internal: Completion Functions. -* rl_completion_append_character: Completion Variables. -* rl_completion_entry_function: Completion Variables. -* rl_completion_entry_function: How Completing Works. -* rl_completion_query_items: Completion Variables. -* rl_copy_keymap: Keymaps. -* rl_copy_text: Modifying Text. -* rl_delete_text: Modifying Text. -* rl_directory_completion_hook: Completion Variables. -* rl_discard_keymap: Keymaps. -* rl_done: Readline Variables. -* rl_do_undo: Allowing Undoing. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_event_hook: Readline Variables. -* rl_executing_keymap: Readline Variables. -* rl_filename_completion_desired: Completion Variables. -* rl_filename_dequoting_function: Completion Variables. -* rl_filename_quote_characters: Completion Variables. -* rl_filename_quoting_desired: Completion Variables. -* rl_filename_quoting_function: Completion Variables. -* rl_forced_update_display: Redisplay. -* rl_function_dumper: Associating Function Names and Bindings. -* rl_function_of_keyseq: Associating Function Names and Bindings. -* rl_generic_bind: Binding Keys. -* rl_getc: Utility Functions. -* rl_getc_function: Readline Variables. -* rl_get_keymap: Keymaps. -* rl_get_keymap_by_name: Keymaps. -* rl_get_keymap_name: Keymaps. -* rl_ignore_completion_duplicates: Completion Variables. -* rl_ignore_some_completions_function: Completion Variables. -* rl_inhibit_completion: Completion Variables. -* rl_initialize: Utility Functions. -* rl_insert_completions: Completion Functions. -* rl_insert_text: Modifying Text. -* rl_instream: Readline Variables. -* rl_invoking_keyseqs: Associating Function Names and Bindings. -* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. -* rl_kill_text: Modifying Text. -* rl_library_version: Readline Variables. -* rl_line_buffer: Readline Variables. -* rl_list_funmap_names: Associating Function Names and Bindings. -* rl_make_bare_keymap: Keymaps. -* rl_make_keymap: Keymaps. -* rl_mark: Readline Variables. -* rl_message: Redisplay. -* rl_modifying: Allowing Undoing. -* rl_named_function: Associating Function Names and Bindings. -* rl_on_new_line: Redisplay. -* rl_outstream: Readline Variables. -* rl_parse_and_bind: Binding Keys. -* rl_pending_input: Readline Variables. -* rl_point: Readline Variables. -* rl_possible_completions: Completion Functions. -* rl_prompt: Readline Variables. -* rl_readline_name: Readline Variables. -* rl_read_init_file: Binding Keys. -* rl_read_key: Utility Functions. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Utility Functions. -* rl_set_keymap: Keymaps. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Utility Functions. -* rl_terminal_name: Readline Variables. -* rl_unbind_key: Binding Keys. -* rl_unbind_key_in_map: Binding Keys. -* self-insert (a, b, A, 1, !, ...): Commands For Text. -* set-mark (C-@): Miscellaneous Commands. -* show-all-if-ambiguous: Readline Init File Syntax. -* start-kbd-macro (C-x (): Keyboard Macros. -* tab-insert (M-TAB): Commands For Text. -* tilde-expand (M-~): Miscellaneous Commands. -* to_lower: Utility Functions. -* to_upper: Utility Functions. -* transpose-chars (C-t): Commands For Text. -* transpose-words (M-t): Commands For Text. -* undo (C-_, C-x C-u): Miscellaneous Commands. -* universal-argument (): Numeric Arguments. -* unix-line-discard (C-u): Commands For Killing. -* unix-word-rubout (C-w): Commands For Killing. -* upcase-word (M-u): Commands For Text. -* uppercase_p: Utility Functions. -* username_completion_function: Completion Functions. -* visible-stats: Readline Init File Syntax. -* yank (C-y): Commands For Killing. -* yank-last-arg (M-., M-_): Commands For History. -* yank-nth-arg (M-C-y): Commands For History. -* yank-pop (M-y): Commands For Killing. - - - -Tag Table: -Node: Top1048 -Node: Command Line Editing1661 -Node: Introduction and Notation2312 -Node: Readline Interaction3321 -Node: Readline Bare Essentials4510 -Node: Readline Movement Commands6040 -Node: Readline Killing Commands6931 -Node: Readline Arguments8634 -Node: Searching9608 -Node: Readline Init File11209 -Node: Readline Init File Syntax12272 -Node: Conditional Init Constructs20062 -Node: Sample Init File22344 -Node: Bindable Readline Commands25378 -Node: Commands For Moving26129 -Node: Commands For History26977 -Node: Commands For Text29591 -Node: Commands For Killing31334 -Node: Numeric Arguments33361 -Node: Commands For Completion34486 -Node: Keyboard Macros35370 -Node: Miscellaneous Commands35929 -Node: Readline vi Mode38740 -Node: Programming with GNU Readline40496 -Node: Basic Behavior41365 -Node: Custom Functions44678 -Node: The Function Type45279 -Node: Function Writing46124 -Node: Readline Variables47208 -Node: Readline Convenience Functions50296 -Node: Function Naming51027 -Node: Keymaps52254 -Node: Binding Keys53968 -Node: Associating Function Names and Bindings55912 -Node: Allowing Undoing57490 -Node: Redisplay60075 -Node: Modifying Text61146 -Node: Utility Functions62057 -Node: Alternate Interface64176 -Node: Custom Completers67470 -Node: How Completing Works68191 -Node: Completion Functions71187 -Node: Completion Variables74202 -Node: A Short Completion Example81344 -Node: Concept Index93650 -Node: Function and Variable Index94395 - -End Tag Table diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps deleted file mode 100644 --- a/readline/doc/readline.ps +++ /dev/null @@ -1,3856 +0,0 @@ -%!PS (but not EPSF; comments have been disabled) -%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi -%DVIPSParameters: dpi=300, compressed, comments removed -%DVIPSSource: TeX output 1997.05.22:1433 -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 -mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} -ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale -isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div -hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul -TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} -forall round exch round exch]setmatrix}N /@landscape{/isls true N}B -/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B -/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ -/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N -string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N -end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ -/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] -N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N -/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N -/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id -gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp -add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add -/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ -dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 -adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 -idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string -putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval -adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} -{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ -adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 -chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] -}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ -cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin -0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul -add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict -/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook -known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X -/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 -0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} -B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ -4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ -p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p -a}B /bos{/SS save N}B /eos{SS restore}B end -TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi) -@start /Fa 1 47 df<127012F8A212F012E005057B840E>46 D -E /Fb 1 47 df<1238127C12FCA212F8127006067A8512>46 D E -/Fc 1 59 df<126012F0A2126004047D830B>58 D E /Fd 52 127 -df<126012F0AD12601200A4126012F0A212600417789614>33 D35 D40 -D<128012C01260123012381218121C120EA31207A9120EA3121C121812381230126012C0 -1280081D7C9914>II<127012F812FCA2127C120C1218123012E012C006 -0A798414>44 DI<127012F8A312700505798414>I48 D<1203A25A5A123F12F712471207AEEA7FF0A20C177C9614>I<130E133E -137C13F0EA03E0EA07C0EA1F00123E12F85A7E123E7EEA07C0EA03E0EA00F0137C133E13 -0E0F137E9414>60 D<124012E012F8127C121EEA0F80EA07C0EA01F0EA00F8133E131E13 -3E13F8EA01F0EA07C0EA0F80EA1E00127C5A12E012400F157E9514>62 -DII< -EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2487EA238FE3F -80A211177F9614>II<3801F180EA07FFEA0E1FEA1C071238EA7003 -A348C7FCA738700380A338380700121CEA0E0EEA07FCEA01F011177F9614>III76 D<38FC1F80A2007C1300EA7637A4EA -7777A2EA7367A313E7EA71C7A2EA7007A638F80F80A211177F9614>I<38FE3F80A2383E -0E00123BA4138E1239A213CEA31238A213EE136EA4133E12FEA211177F9614>I82 DI<387FFF80 -B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I93 D97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C13 -80EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>II<13 -7EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA -07CF12177F9614>II<13FCEA01FEEA038EEA07041300A3 -EA7FFE12FFEA0700ACEAFFF8A20F177F9614>II<12FCA2121CA51378EA1DFEEA1F86EA1E0712 -1CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D18 -7C9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C -131C7F38FF1F80A21117809614>107 DIIIIIIII<1206120EA4EA7FFC12FFEA0E00A8130EA3131C -EA07F8EA01F00F157F9414>II< -38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F -80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>II<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA348 -5A12730077C7FC127E123C11187F8F14>II126 D E /Fe 2 121 df<1270A212F0126004047D830B>46 -D<383FC7E038078380EB0200EA038413C8EA01D8EA00F05B7F120113381202487EEA081E -123838FC3FC013107F8F14>120 D E /Ff 39 123 df<13FEEA038138060180EA0E0338 -1C010090C7FCA5B51280EA1C03AE38FF8FF0141A809915>12 DI<126012F0A212701210A31220A21240 -A2040B7D830B>44 DI48 -D<12035AB4FC1207B3A2EA7FF80D187D9713>III<1318A21338137813F813B8EA01381202A212041208121812101220124012C0 -B5FCEA0038A6EA03FF10187F9713>I -II<1240EA7FFF13 -FEA2EA4004EA80081310A2EA00201340A21380120113005AA25A1206A2120EA512041019 -7E9813>I -II97 D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C01480381E0300EA -1906EA10F8131A809915>II<133F1307A9EA03E7EA0C17EA180F487E127012E0A612601270 -6C5AEA1C373807C7E0131A7F9915>IIII<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I< -1218123CA212181200A612FC121CAE12FF081A80990A>I<12FC121CA9EB1FC0EB0F0013 -0C5B13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A809914>107 -D<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0A2001C1301 -AB39FF9FE7F81D107F8F20>I -IIIIII<1208A41218A21238EAFFC0 -EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC1F80EA1C03AB1307120CEA0E -0B3803F3F01410808F15>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2 -EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C0700003C1306381C0C04130E380E16 -081317A238072310149013A33803C1A014E0380180C0A319107F8F1C>I<38FE3F80383C -1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181CEA381E38FC3FC0 -12107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C -5AA248C7FCA212E112E212E4127811177F8F14>II -E /Fg 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012 -F0AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E /Fh 28 -123 df<90380FF83F90397FFDFFC03A01FC1FE3E03903F03FC7EA07E0D80FC01387ED83 -C091381F8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 -DI<13181330136013C01201EA0380120713005A -121EA2123E123CA2127CA3127812F8AD1278127CA3123CA2123E121EA27E7E13801203EA -01C012001360133013180D317BA416>40 D97 DII<49B4FCA2EB003FAB13FE3807FFBF380FC1FF48 -C67E003E7F127E127CA212FCA7127C127E123E6C5B380F81FF3907FF3FE0EA01FC1B237E -A220>I<13FE3807FF80380F83C0381E01E0383E00F0127E007C13F8147812FCB512F8A2 -00FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0C6130015167E951A>II<9038FE0F803903FF9FC0380F83E3381F01F3391E00F000003E7FA5001E5BEA -1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C381FFFE014FC6C13FF7E001F1480 -397C001FC00078130F00F81307A3007CEB0F806CEB1F00381F807E6CB45A000113E01A21 -7F951D>II<121E123FEA7F80A4EA3F00121EC7FCA6EAFF80A2121FB2EAFFF0A20C24 -7EA30F>I107 -DI<3AFF03F803F890390FFE0FFE3A1F183F -183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0A22C167D9531>I<38 -FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B167D9520>I<13FF00 -0713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C133E007E137E003E137C -6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBFFC381FF07EEBC01F90 -38800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEBBFFCEB8FE00180C7FC -A8EAFFF0A21B207E9520>I -I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8A214167E9518>I<38 -07F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C7E6C1380120738003F -C0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E9517>I<487EA41203A2 -1207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FEEA01F811207F9F16> -I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B167D9520>I<39FFF01F -E0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0EB -7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FCA23A1F807C00E0D80F -C014C08001E013010007017F1380A2D803F0EB0300ECCF8301F81387D801F913C61487D8 -00FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026167F9529>I<39FFF0 -7FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7FC7F6D7E497EEB37E0 -EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B167F951E>I<39FFF0 -1FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0 -EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305BEA69C0EA7F80001FC8 -FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E0138038C03F005B137EC6 -5A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA7E03B5FCA214167E95 -19>I E /Fi 29 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA -07FCEA1FFF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 -D67 -D69 D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7 -FCA8EA7FE012FF127F161E7F9D1A>I -73 D<387F03F838FF87FC387F03F8381C01E0EB03C01480EB07005B131E131C5B13785B -7F121DEA1FDC139C130EEA1E0F7F001C13801303EB01C0A2EB00E0A21470007F13FC38FF -81FE387F00FC171E7F9D1A>75 DI80 D<38FF01FEA3381C0070 -A3001E13F0000E13E0A3380701C0A438038380A43801C700A4EA00C613EEA3136C137CA2 -1338171E7F9D1A>86 D<387FFFC0B512E0A26C13C013047D7E1A>95 -D97 D<12FEA3120EA6133EEBFF -80000F13E0EBC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E -138038063E00161E7F9D1A>IIIII<12FEA3120EA6133EEBFF80 -000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -DI< -EAFFE0A31200B3A6B512E0A3131E7D9D1A>108 D<387CE0E038FFFBF8EA7FFF381F1F1C -EA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>IIII<387F81F838FF8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFF -B5FC7E17157F941A>114 D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E0 -13FF6C1380EB3F00141C7F9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7E -EA00FC17157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A3380701C0A338038380 -A33801C700A3EA00EEA3137CA2133817157F941A>I<387FC7F8EBCFFCEBC7F8380703C0 -38038380EBC700EA01EFEA00FE137C13781338137C13EE120113C738038380000713C013 -01387FC7FC00FF13FE007F13FC17157F941A>120 D<387FC7FC00FF13FE007F13FC380E -00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7A213E61366136E133CA31338 -A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F941A>I -E /Fj 1 59 df<127012F8A3127005057C840D>58 D E /Fk 52 -122 df<123C127E12FFA4127E123C08087C8711>46 D48 D<131C133C13FC12FFA21200B3AA387FFF -FCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12FE14FF -147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B1370EB -E003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F>I<48B4 -FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB03F8EB -07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FEA214FE -A2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A214F813 -01130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A12185A1270 -5AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEBFFF814 -F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FCC7127E -A3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE001823 -7DA21F>II<1230123C003FB512C0A215 -804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133CA25BA2 -13F8A41201A66C5A13601A257DA41F>II<13FF000313C0380F83E0381F00F04813F8007E137CA214 -7E12FEA3147FA4127E14FF123EEA3F01001F137FEA0FFEEA03FCC7FC147EA2123C007E13 -FCA214F814F0EA7C01383003E0381C0F80380FFF00EA03F818237DA21F>I<141CA2143E -A3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F1403011C7FEB -1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C7120FA248 -6E7ED8FFF090B51280A229257EA42E>65 DI<9138FF8008010FEBF01890393FC03C789039FE0006F8D801F8130348481301484813 -0048481478121F48481438A2007F151890C8FCA2481500A97E16187F123FA26C6C143012 -0F6C6C14606C6C14C06C6CEB0180D800FEEB070090383FC01E90380FFFF8010013C02525 -7DA42C>I69 DI72 DI -75 DIII82 -D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>I< -007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C160C5AA4C71400 -B3A390B512FEA226247EA32B>IIII89 D97 -DIII<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>II<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>II<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I107 DI<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E803F001 -A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80390F8E -0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>II<38FFC1FCEBCFFF390FFC1FC09038F007E001 -C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038CFFF00 -EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC13B013 -A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA7001EAF0 -00A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212E014C0 -EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F121FB5 -12C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39FFC07F -E0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I<39FFF8 -0FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00005B13FE -EB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<3BFFF9FFE0FF80A23B1F -C03F001C00000F6D13181580D807E05CA29039F03FC07000030137136015E02601F8635B -A29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA2011E133CA3010C -131829187F972C>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C6C5A00001360 -EB7EC06D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F3907003F804813 -1F39FFC07FF8A21D187F9720>I<39FFF80FF8A2390FC001C015803907E00300A26D5A00 -031306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA2 -1306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720>I -E /Fl 28 122 df12 -D45 D<0007B512F83900F800780178133815185B1508A53901E0 -0800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E> -70 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C -146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381 -380F00016D487E39FFF00FFE231F7E9E23>75 D97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14F0A538 -7001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA0383380E -0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314> -I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>II<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>II<13E0120712011200 -A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E7FA213 -0F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0 -A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98618639 -07A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E -3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713E01300 -A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C -00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07 -E014147D9317>II< -EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0A2130712 -7038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>III<1380EA0100A35A5A5A121EEAFFF8EA0E00A4 -5AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A2 -38380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E000 -1C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC1514 -7C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D81001309 -EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321> -I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E134E -1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F8039 -01E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C13 -3813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E /Fm 8 89 df<903807F00890383C0C189038E003383901C000B8D80780137848C71238 -120E001E14185A1508127C1278150012F8A6EC1FFF0078EB00F81578127C123CA27E120E -120F6C7ED801C013B83900E0011890383C0E08903807F00020217C9F27>71 -D73 D78 DII<3803F020380C0C603818 -03E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC00071380000113C0 -38000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA81FC1421 -7C9F1C>83 D<39FFF00FF8390F0003E0EC0080B3A46CEB01001380120314026C6C5A6C6C -5AEB3830EB0FC01D207C9E25>85 D<397FF807FE390FE001F0D807C013C06C6C6C5A0001 -49C7FCEBF0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8 -EB0478EB087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F -8001F83AFFC007FF80211F7E9E25>88 D E /Fn 34 121 df49 DI<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91F -F8EB079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607 -A2485A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E -6D150E0003161E6C6C151C6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FF -FEC7FCD9003F13F80203138031317CB03A>67 D69 -DII73 D76 D78 -D80 -D82 -D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3481603 -A5C792C7FCB3AA017FB6FCA331307DAF38>84 DII97 DIIIII<90391FF007C09039FFFE3F -E03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF000A2003F80A5001F5CA2 -000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC121EA2121F7F90B57E6C -14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C140F00FC1407A4007EEC -0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0D8001F90C7FC242F7E9F -28>III108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01 -E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3 -B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1 -801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F2D>II<3901F83FE000FFEBFFFC9038FBE07F9039FF00 -3F80D807FEEB1FC049EB0FE04914F0ED07F8A216FC1503A216FEA816FC1507A216F8A2ED -0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3FC091C8FCABB512C0A327 -2E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30FF0EA07F6A29038FC07E0 -EC03C091C7FCA25BB2B512E0A31C207E9F21>114 D<3801FF86000713FEEA1F00003C13 -3E48131E140E12F8A36C90C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA003F -01001380143F0060131F00E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C07F -8019207D9F20>I<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7 -FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>II119 D<3A7FFF807FFCA33A03FC -000F006C6C131E6C6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D90 -C7FC6D5A13016D7E81815B903803DFE09038078FF08190380F07FC90381E03FEEB3C0149 -6C7E4914804848EB7FC00003EC3FE026FFFC01B5FCA328207F9F2B>I -E /Fo 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C0 -00061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C -1530A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090 -C7FC282B7EA02D>13 D E /Fp 54 122 df<1306130C13181338137013E01201EA03C0A2 -EA0780A2120F13005AA2123EA3127EA3127CA212FCAE127CA2127EA3123EA37EA27E1380 -1207A2EA03C0A2EA01E01200137013381318130C13060F3C7AAC1A>40 -D<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A21206120E5A5A12100A -157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -DII<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I57 D65 DI<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>IIII<91387F -E003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F48488048488048 -4880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E -6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>III75 DII -III< -ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48 -486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C -6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0 -90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F -5A6F5A6F5A2A357CA833>II<9038FF80600003EBF0E0 -000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F -FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0 -1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8 -25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815 -01A5C791C7FCB3A490B612C0A32A287EA72F>IIII89 -D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA -0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21 ->97 DIIIII<9038FF80F00003EBE3 -F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E6C137C -380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C14F012 -1F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512003800 -7FF01E287E9A22>II<1207EA0F80EA1FC0EA3FE0A3EA1F -C0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D8 -0FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A333 -1B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213 -E0B039FFFE3FFFA3201B7D9A25>II<38FFE1FE9038EFFF809038FE0FE039 -0FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038 -F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FF -C1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E /Fq 90 127 df<127012F8B012701200A51270 -12F8A31270051C779B18>33 DI< -EA0306EA078FA6387FFFC0B512E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E -3C00A6EA0C18131C7E9B18>I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C3 -8013C7A338F1C0001279123F6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EB -C7001271EA79DEEA3FFEEA1FF8EA07E0EA01C0A3120011247D9F18>II< -EA01C0EA07E0487EEA0E70487EA4EB73F813F313E3380FC1C0EBC38013831303381F0700 -EA3F87EA7B8EEA71CEEAE1FC12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C -7F9B18>I<1238127CA2127E123E120EA3121CA2123812F812F012C0070E789B18>I<1370 -13F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780 -EA03C0EA01F0120013700C24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA -00E0A41370A813E0A4EA01C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>II<136013F0A7387FFFC0B512E0A26C13C03800F000 -A7136013147E9718>I<121C123E127E127F123F121F1207120E121E127C12F81260080C -788518>I<387FFFC0B512E0A26C13C013047E8F18>I<1230127812FCA212781230060677 -8518>I<1303EB0780A2130F14005B131EA2133E133C137C1378A213F85B12015B12035B -A212075B120F90C7FCA25A121E123E123CA2127C127812F85AA2126011247D9F18>IIII<131F5B13 -77A213E7120113C7EA038712071307120E121E123C1238127812F0B512F8A338000700A6 -EB7FF0A3151C7F9B18>52 D<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003 -C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C -7E9B18>I<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EA -E7FEB5FC38FE078038F803C0EAF001EB00E05A7E1270A3383801C0EA3C03381E0780380F -FF006C5AEA01F8131C7E9B18>I<12E0B512E0A214C038E00380EB0700C65A131E131C5B -A25B13F05BA2485AA3485AA448C7FCA7131D7E9C18>II<123012 -7812FCA2127812301200A81230127812FCA2127812300614779318>58 -D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E121C123C127812F0 -1260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048 -C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303EB00C013187E -9918>I<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>I<126012F87E127F6C -7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00485AEA07F048 -5AEA3F8048C7FC12FC5A126013187E9918>II< -137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1EAE380 -A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC00001138038 -007E00131C7E9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80 -A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>IIII -II<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F -130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F -07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F015 -1C7F9B18>II<38 -01FFC0A338000E00B312F0A2133CEA7FFCEA3FF0EA0FC0121C7D9B18>I<387F07F038FF -87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C121E -EA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>II<38FC01F8EAFE03A2383B06E0A4138EA2EA39 -8CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C7F9B18>I<387E07F038FF0F -F8387F07F0381D81C0A313C1121CA213E1A313611371A213311339A31319A2131D130DA3 -EA7F07EAFF87EA7F03151C7F9B18>IIIII<3803F1C0EA1FFF5AEA -7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00 -E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5 -FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0 -EA0F01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03383C -01E0001C13C0A3EA1E03000E1380A438070700A4EA038EA4EA018C13DCA3EA00D813F8A2 -1370151C7F9B18>I<38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2001913C0A3 -138CA2EA1D8DA31305000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0139F130F38 -0E0700120FEA070E138EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138E -EA070F7F000E13801303001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03 -F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00 -F8A21370A9EA01FC487E6C5A151C7F9B18>I91 D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F -12007F1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>II<387FFFC0B512E0A26C13C013047E7F18>95 -D<1206121E123E12381270A212E0A312F812FC127CA21238070E789E18>II<127E12FE127E120EA5133EEBFF80000F13C0EBC1E0 -1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E138038063E00151C809B18 ->IIIII< -3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7 -FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E03381FFFC06C13 -803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13C013C1EB80E013 -00120EAB387FC7FC38FFE7FE387FC7FC171C809B18>II<1338137CA313381300A4EA0FFCA3EA00 -1CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E12FE127E120EA5EB3F -F0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014C0387FC7F812FF -127F151C7F9B18>II<38F9C1C038FFF7F013 -FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>IIII<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6 -EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E93 -18>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E -9318>II<487E1203A4387FFFC0B5 -FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EA -FE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF0 -00FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A2 -137015147F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD -000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA07 -8EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000 -FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207 -EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F -806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B -13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318>I -I<126012F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB -7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18>II E /Fr 78 123 df<90381F83E09038F06E303901C07878 -380380F8903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11 -D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F -19>II<9038 -1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A -3FE3FE3FE02320809F26>I34 D<1340A2EA03F0EA0C4EEA1041382040801260004013 -4038C041C01343A238E04180EB40001270127CEA3FC0EA1FF86C7EEA03FEEA007FEB4F80 -1343EB41C0A2EAF040A312801480EA404100201300EA3042EA0C4CEA03F0EA0040A31225 -7EA117>36 D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -DI<127012F8A3127005057C840D>I<144014C0EB0180A3EB0300 -A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35AA2122D -7EA117>II<13801203120F12F31203B3A6EA -07C0EAFFFE0F1E7C9D17>III<1306A2130EA2131E132EA2134E138EA2EA -010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17> -II<137CEA -0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EA -F807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17 ->I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B -1201A41203A76C5A131F7E9D17>III<127012F8A312 -701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A212 -781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB20 -78A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E0 -39FF801FFE1F207F9F22>65 DI<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A15 -10127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E003 -00EB380CEB0FF01C217E9F21>IIII<90380FE0109038381C309038E002703803C00139078000F048C71270121E -15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903 -C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD -90B5FCEB0007AF39FFF07FF81D1F7E9E22>II< -3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E -17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13 -C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E -9E23>I -IIIII< -B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143CA3 -143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 DI<12FFA21203B3B3A512FFA2082D80 -A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -DI<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>IIII<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>IIII<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>III<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>II E /Fs 14 122 df71 D76 -D78 -D82 D85 D97 D<13FE12FFA412071203B04AB4FC021F13F0027F13FC9138FC03 -FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF017F8A2EE07FCA317FEA917FCA3 -160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EBFF009039F0FC07FE91387FFFF8 -D9E01F13E09026C003FEC7FC2F3C7DBB36>I100 D<49B47E010F13F0017F13FC9038FF81FE3A03 -FE007F80D807F8133F4848EB1FC0ED0FE0485A003F15F01507485A16F8A212FFA290B6FC -A301C0C8FCA4127FA36C7E1678121F7F000F15F06C6C13016C6CEB03E06C6CEB0FC03A00 -FFC07F8090393FFFFE00010F13F8010013C025267DA52C>I105 -D<13FE12FFA412071203B3B3AEB512F8A4153C7DBB1A>108 D110 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC -707F00079038E0FFC000035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512 -FCA422267DA528>114 D121 D E end -TeXDict begin - -1 0 bop 0 693 a Fs(GNU)33 b(Readline)h(Library)p 0 743 -1950 17 v 1011 791 a Fr(Edition)17 b(2.1,)c(for)i Fq(Readline)f -(Library)g Fr(V)l(ersion)i(2.1.)1718 845 y(Marc)o(h)e(1996)0 -2467 y Fp(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 -b(Soft)n(w)n(are)f(F)-6 b(oundation)0 2534 y(Chet)22 -b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n -(ersit)n(y)p 0 2570 1950 9 v eop -2 1 bop 0 320 a Fr(This)15 b(do)q(cumen)o(t)f(describ)q(es)i(the)e(GNU) -g(Readline)j(Library)l(,)d(a)g(utilit)o(y)h(whic)o(h)g(aids)g(in)g(the) -f(consistency)h(of)f(user)0 382 y(in)o(terface)h(across)g(discrete)h -(programs)e(that)g(need)j(to)d(pro)o(vide)i(a)f(command)g(line)i(in)o -(terface.)0 519 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f -(F)l(oundation)0 582 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)0 -644 y(Cam)o(bridge,)h(MA)g(02139)f(USA)0 781 y(P)o(ermission)f(is)g -(gran)o(ted)f(to)f(mak)o(e)h(and)h(distribute)h(v)o(erbatim)e(copies)h -(of)f(this)h(man)o(ual)g(pro)o(vided)g(the)f(cop)o(yrigh)o(t)0 -843 y(notice)k(and)f(this)h(p)q(ermission)h(notice)e(are)g(preserv)o -(ed)h(on)f(all)h(copies.)0 980 y(P)o(ermission)f(is)f(gran)o(ted)f(to)h -(cop)o(y)g(and)g(distribute)h(mo)q(di\014ed)h(v)o(ersions)e(of)f(this)i -(man)o(ual)f(under)h(the)f(conditions)0 1043 y(for)e(v)o(erbatim)g(cop) -o(ying,)h(pro)o(vided)h(that)d(the)i(en)o(tire)g(resulting)h(deriv)o -(ed)f(w)o(ork)f(is)h(distributed)h(under)f(the)g(terms)0 -1105 y(of)i(a)g(p)q(ermission)h(notice)g(iden)o(tical)h(to)e(this)g -(one.)0 1242 y(P)o(ermission)20 b(is)g(gran)o(ted)f(to)g(cop)o(y)h(and) -f(distribute)i(translations)f(of)f(this)h(man)o(ual)f(in)o(to)h -(another)f(language,)0 1304 y(under)c(the)f(ab)q(o)o(v)o(e)g -(conditions)h(for)e(mo)q(di\014ed)j(v)o(ersions,)e(except)g(that)g -(this)g(p)q(ermission)i(notice)e(ma)o(y)g(b)q(e)h(stated)0 -1366 y(in)h(a)f(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l -(oundation.)0 2661 y(Cop)o(yrigh)o(t)226 2660 y(c)214 -2661 y Fo(\015)g Fr(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -1 2 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(1)0 183 y Fn(1)41 b(Command)16 b(Line)f(Editing)62 -408 y Fr(This)h(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fm(GNU)g Fr(command)g(line)i(editing)f(in)o(terface.)0 -701 y Fp(1.1)33 b(In)n(tro)r(duction)17 b(to)e(Line)h(Editing)62 -845 y Fr(The)g(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)62 -990 y(The)k(text)e Fq(C-K)h Fr(is)h(read)f(as)f(`Con)o(trol-K')h(and)g -(describ)q(es)i(the)e(c)o(haracter)f(pro)q(duced)j(when)e(the)g -Fq(K)g Fr(k)o(ey)g(is)0 1052 y(pressed)d(while)g(the)g(Con)o(trol)e(k)o -(ey)h(is)h(depressed.)62 1197 y(The)h(text)f Fq(M-K)g -Fr(is)i(read)e(as)g(`Meta-K')g(and)h(describ)q(es)h(the)f(c)o(haracter) -f(pro)q(duced)h(when)h(the)e(meta)g(k)o(ey)h(\(if)0 1259 -y(y)o(ou)f(ha)o(v)o(e)f(one\))h(is)g(depressed,)h(and)f(the)g -Fq(K)f Fr(k)o(ey)h(is)h(pressed.)22 b(If)16 b(y)o(ou)g(do)g(not)f(ha)o -(v)o(e)g(a)h(meta)f(k)o(ey)l(,)h(the)g(iden)o(tical)0 -1321 y(k)o(eystrok)o(e)j(can)g(b)q(e)i(generated)e(b)o(y)h(t)o(yping)f -Fq(ESC)h Fl(\014rst)p Fr(,)g(and)f(then)h(t)o(yping)g -Fq(K)p Fr(.)33 b(Either)20 b(pro)q(cess)g(is)g(kno)o(wn)f(as)0 -1383 y Fl(metafying)g Fr(the)c Fq(K)g Fr(k)o(ey)l(.)62 -1528 y(The)h(text)e Fq(M-C-K)g Fr(is)i(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)h(the)g(c)o(haracter)e(pro)q(duced)i(b)o(y)f -Fl(metafying)0 1590 y Fq(C-K)p Fr(.)62 1735 y(In)i(addition,)h(sev)o -(eral)e(k)o(eys)g(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)23 -b(Sp)q(eci\014cally)m(,)c Fq(DEL)p Fr(,)d Fq(ESC)p Fr(,)f -Fq(LFD)p Fr(,)h Fq(SPC)p Fr(,)g Fq(RET)p Fr(,)g(and)g -Fq(TAB)0 1797 y Fr(all)e(stand)f(for)f(themselv)o(es)i(when)f(seen)h -(in)g(this)f(text,)g(or)g(in)g(an)g(init)i(\014le)f(\(see)f(Section)h -(1.3)e([Readline)j(Init)f(File],)0 1859 y(page)h(5\).)0 -2152 y Fp(1.2)33 b(Readline)16 b(In)n(teraction)62 2296 -y Fr(Often)g(during)h(an)f(in)o(teractiv)o(e)g(session)h(y)o(ou)e(t)o -(yp)q(e)h(in)h(a)f(long)g(line)h(of)f(text,)f(only)h(to)g(notice)g -(that)f(the)h(\014rst)0 2359 y(w)o(ord)d(on)i(the)f(line)i(is)e(missp)q -(elled.)23 b(The)14 b(Readline)i(library)f(giv)o(es)g(y)o(ou)e(a)h(set) -g(of)g(commands)g(for)f(manipulating)0 2421 y(the)18 -b(text)g(as)g(y)o(ou)g(t)o(yp)q(e)g(it)h(in,)g(allo)o(wing)g(y)o(ou)f -(to)g(just)g(\014x)g(y)o(our)g(t)o(yp)q(o,)g(and)h(not)f(forcing)g(y)o -(ou)g(to)g(ret)o(yp)q(e)g(the)0 2483 y(ma)s(jorit)o(y)d(of)h(the)g -(line.)25 b(Using)17 b(these)g(editing)h(commands,)e(y)o(ou)g(mo)o(v)o -(e)f(the)i(cursor)f(to)g(the)g(place)h(that)f(needs)0 -2545 y(correction,)g(and)h(delete)g(or)f(insert)g(the)h(text)e(of)h -(the)g(corrections.)23 b(Then,)17 b(when)g(y)o(ou)f(are)g(satis\014ed)g -(with)h(the)0 2608 y(line,)h(y)o(ou)e(simply)i(press)f -Fq(RETURN)p Fr(.)23 b(Y)l(ou)17 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i -(at)e(the)g(end)h(of)f(the)h(line)h(to)e(press)h Fq(RETURN)p -Fr(;)f(the)0 2670 y(en)o(tire)g(line)h(is)e(accepted)h(regardless)f(of) -g(the)g(lo)q(cation)h(of)f(the)h(cursor)e(within)j(the)e(line.)p -eop -2 3 bop 0 -58 a Fr(2)1472 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(1.2.1)30 b(Readline)15 b(Bare)g(Essen)n(tials)62 -320 y Fr(In)f(order)f(to)f(en)o(ter)h(c)o(haracters)g(in)o(to)g(the)g -(line,)i(simply)f(t)o(yp)q(e)f(them.)19 b(The)14 b(t)o(yp)q(ed)f(c)o -(haracter)f(app)q(ears)i(where)0 382 y(the)h(cursor)h(w)o(as,)e(and)h -(then)h(the)g(cursor)f(mo)o(v)o(es)f(one)i(space)g(to)e(the)i(righ)o -(t.)k(If)c(y)o(ou)f(mist)o(yp)q(e)h(a)f(c)o(haracter,)f(y)o(ou)0 -445 y(can)h(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g -(and)h(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)62 -582 y(Sometimes)f(y)o(ou)e(ma)o(y)h(miss)g(t)o(yping)g(a)g(c)o -(haracter)g(that)f(y)o(ou)h(w)o(an)o(ted)f(to)g(t)o(yp)q(e,)h(and)h -(not)e(notice)i(y)o(our)f(error)0 644 y(un)o(til)k(y)o(ou)e(ha)o(v)o(e) -g(t)o(yp)q(ed)h(sev)o(eral)g(other)f(c)o(haracters.)23 -b(In)18 b(that)d(case,)i(y)o(ou)f(can)h(t)o(yp)q(e)g -Fq(C-B)f Fr(to)g(mo)o(v)o(e)g(the)g(cursor)0 706 y(to)f(the)h(left,)g -(and)g(then)g(correct)f(y)o(our)h(mistak)o(e.)21 b(Afterw)o(ards,)14 -b(y)o(ou)i(can)g(mo)o(v)o(e)f(the)h(cursor)f(to)g(the)h(righ)o(t)g -(with)0 769 y Fq(C-F)p Fr(.)62 906 y(When)i(y)o(ou)f(add)g(text)g(in)h -(the)f(middle)i(of)e(a)g(line,)i(y)o(ou)e(will)i(notice)e(that)g(c)o -(haracters)f(to)h(the)g(righ)o(t)g(of)g(the)0 968 y(cursor)h(are)h -(`pushed)g(o)o(v)o(er')e(to)h(mak)o(e)g(ro)q(om)g(for)g(the)h(text)f -(that)g(y)o(ou)g(ha)o(v)o(e)h(inserted.)31 b(Lik)o(ewise,)20 -b(when)f(y)o(ou)0 1030 y(delete)f(text)f(b)q(ehind)i(the)f(cursor,)f(c) -o(haracters)f(to)h(the)g(righ)o(t)g(of)g(the)h(cursor)f(are)g(`pulled)i -(bac)o(k')d(to)h(\014ll)i(in)f(the)0 1092 y(blank)g(space)f(created)g -(b)o(y)g(the)h(remo)o(v)m(al)f(of)f(the)i(text.)25 b(A)17 -b(list)h(of)e(the)h(basic)h(bare)f(essen)o(tials)h(for)e(editing)j(the) -0 1155 y(text)c(of)f(an)i(input)g(line)h(follo)o(ws.)0 -1303 y Fq(C-B)168 b Fr(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o(haracter.)0 -1390 y Fq(C-F)168 b Fr(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h(c)o -(haracter.)0 1476 y Fq(DEL)168 b Fr(Delete)16 b(the)f(c)o(haracter)g -(to)f(the)h(left)h(of)f(the)g(cursor.)0 1562 y Fq(C-D)168 -b Fr(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)0 -1648 y(Prin)o(ting)h(c)o(haracters)240 1710 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)0 -1796 y Fq(C-_)168 b Fr(Undo)15 b(the)h(last)f(thing)h(that)e(y)o(ou)h -(did.)21 b(Y)l(ou)15 b(can)h(undo)f(all)h(the)g(w)o(a)o(y)e(bac)o(k)h -(to)f(an)i(empt)o(y)e(line.)0 2001 y Fk(1.2.2)30 b(Readline)15 -b(Mo)n(v)n(emen)n(t)h(Commands)62 2138 y Fr(The)c(ab)q(o)o(v)o(e)g -(table)g(describ)q(es)i(the)e(most)f(basic)h(p)q(ossible)i(k)o(eystrok) -o(es)d(that)g(y)o(ou)g(need)i(in)g(order)f(to)f(do)h(editing)0 -2201 y(of)g(the)h(input)h(line.)21 b(F)l(or)12 b(y)o(our)g(con)o(v)o -(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o(e)f(b)q(een)i(added)f -(in)h(addition)g(to)e Fq(C-B)p Fr(,)0 2263 y Fq(C-F)p -Fr(,)i Fq(C-D)p Fr(,)h(and)g Fq(DEL)p Fr(.)20 b(Here)15 -b(are)g(some)g(commands)g(for)f(mo)o(ving)h(more)g(rapidly)i(ab)q(out)e -(the)g(line.)0 2412 y Fq(C-A)168 b Fr(Mo)o(v)o(e)14 b(to)h(the)g(start) -f(of)h(the)g(line.)0 2498 y Fq(C-E)168 b Fr(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)0 2584 y Fq(M-F)168 -b Fr(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord.)0 2670 -y Fq(M-B)168 b Fr(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)p -eop -3 4 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(3)0 183 y Fq(C-L)168 b Fr(Clear)15 b(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)62 350 y(Notice)22 -b(ho)o(w)e Fq(C-F)h Fr(mo)o(v)o(es)f(forw)o(ard)g(a)g(c)o(haracter,)i -(while)g Fq(M-F)f Fr(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)36 -b(It)21 b(is)h(a)f(lo)q(ose)0 412 y(con)o(v)o(en)o(tion)15 -b(that)g(con)o(trol)g(k)o(eystrok)o(es)f(op)q(erate)h(on)g(c)o -(haracters)f(while)j(meta)e(k)o(eystrok)o(es)f(op)q(erate)h(on)g(w)o -(ords.)0 696 y Fk(1.2.3)30 b(Readline)15 b(Killing)g(Commands)62 -841 y Fl(Killing)25 b Fr(text)18 b(means)g(to)f(delete)i(the)g(text)e -(from)h(the)g(line,)i(but)e(to)g(sa)o(v)o(e)f(it)i(a)o(w)o(a)o(y)d(for) -i(later)g(use,)h(usually)0 903 y(b)o(y)c Fl(y)o(anking)k -Fr(\(re-inserting\))c(it)g(bac)o(k)g(in)o(to)g(the)g(line.)21 -b(If)16 b(the)f(description)h(for)e(a)h(command)f(sa)o(ys)h(that)f(it)h -(`kills')0 966 y(text,)f(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)g(y) -o(ou)g(can)g(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o(t)g -(\(or)f(the)i(same\))e(place)i(later.)62 1111 y(When)g(y)o(ou)f(use)g -(a)g(kill)i(command,)e(the)h(text)e(is)i(sa)o(v)o(ed)f(in)h(a)f -Fl(kill-ring)p Fr(.)22 b(An)o(y)16 b(n)o(um)o(b)q(er)f(of)g(consecutiv) -o(e)h(kills)0 1173 y(sa)o(v)o(e)g(all)i(of)e(the)h(killed)i(text)d -(together,)g(so)g(that)g(when)h(y)o(ou)f(y)o(ank)h(it)g(bac)o(k,)f(y)o -(ou)h(get)f(it)h(all.)25 b(The)17 b(kill)h(ring)f(is)0 -1236 y(not)e(line)i(sp)q(eci\014c;)g(the)f(text)f(that)g(y)o(ou)g -(killed)j(on)d(a)h(previously)g(t)o(yp)q(ed)g(line)h(is)f(a)o(v)m -(ailable)i(to)d(b)q(e)h(y)o(ank)o(ed)f(bac)o(k)0 1298 -y(later,)g(when)h(y)o(ou)e(are)h(t)o(yping)h(another)e(line.)62 -1443 y(Here)i(is)f(the)h(list)g(of)e(commands)h(for)g(killing)j(text.)0 -1610 y Fq(C-K)168 b Fr(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g -(cursor)g(p)q(osition)h(to)f(the)g(end)h(of)f(the)g(line.)0 -1714 y Fq(M-D)168 b Fr(Kill)17 b(from)d(the)h(cursor)g(to)f(the)h(end)g -(of)g(the)g(curren)o(t)f(w)o(ord,)g(or)g(if)i(b)q(et)o(w)o(een)f(w)o -(ords,)f(to)g(the)h(end)g(of)240 1776 y(the)g(next)h(w)o(ord.)0 -1880 y Fq(M-DEL)120 b Fr(Kill)16 b(from)d(the)i(cursor)e(the)h(start)f -(of)h(the)g(previous)h(w)o(ord,)e(or)g(if)i(b)q(et)o(w)o(een)f(w)o -(ords,)f(to)h(the)g(start)e(of)240 1942 y(the)j(previous)h(w)o(ord.)0 -2046 y Fq(C-W)168 b Fr(Kill)18 b(from)e(the)g(cursor)g(to)f(the)h -(previous)h(whitespace.)24 b(This)17 b(is)f(di\013eren)o(t)h(than)f -Fq(M-DEL)f Fr(b)q(ecause)240 2109 y(the)g(w)o(ord)g(b)q(oundaries)h -(di\013er.)62 2275 y(And,)e(here)g(is)h(ho)o(w)e(to)g -Fl(y)o(ank)j Fr(the)e(text)f(bac)o(k)g(in)o(to)h(the)f(line.)22 -b(Y)l(anking)14 b(means)g(to)f(cop)o(y)g(the)h(most-recen)o(tly-)0 -2337 y(killed)j(text)e(from)g(the)g(kill)i(bu\013er.)0 -2504 y Fq(C-Y)168 b Fr(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h -(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)0 -2608 y Fq(M-Y)168 b Fr(Rotate)13 b(the)h(kill-ring,)i(and)e(y)o(ank)g -(the)g(new)g(top.)19 b(Y)l(ou)14 b(can)g(only)g(do)g(this)g(if)g(the)g -(prior)g(command)240 2670 y(is)i Fq(C-Y)e Fr(or)h Fq(M-Y)p -Fr(.)p eop -4 5 bop 0 -58 a Fr(4)1472 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(1.2.4)30 b(Readline)15 b(Argumen)n(ts)62 345 -y Fr(Y)l(ou)k(can)g(pass)f(n)o(umeric)i(argumen)o(ts)d(to)h(Readline)j -(commands.)30 b(Sometimes)19 b(the)f(argumen)o(t)g(acts)g(as)g(a)0 -407 y(rep)q(eat)f(coun)o(t,)f(other)g(times)g(it)h(is)g(the)g -Fl(sign)f Fr(of)g(the)h(argumen)o(t)f(that)f(is)i(signi\014can)o(t.)25 -b(If)16 b(y)o(ou)h(pass)f(a)g(negativ)o(e)0 470 y(argumen)o(t)g(to)g(a) -h(command)g(whic)o(h)h(normally)f(acts)g(in)h(a)e(forw)o(ard)g -(direction,)i(that)f(command)f(will)j(act)d(in)i(a)0 -532 y(bac)o(kw)o(ard)13 b(direction.)20 b(F)l(or)13 b(example,)i(to)d -(kill)k(text)d(bac)o(k)g(to)g(the)h(start)e(of)h(the)h(line,)h(y)o(ou)e -(migh)o(t)g(t)o(yp)q(e)h Fq(M--)h(C-k)o Fr(.)62 694 y(The)k(general)g -(w)o(a)o(y)f(to)g(pass)g(n)o(umeric)i(argumen)o(ts)e(to)g(a)g(command)h -(is)g(to)f(t)o(yp)q(e)g(meta)g(digits)i(b)q(efore)f(the)0 -756 y(command.)36 b(If)21 b(the)g(\014rst)f(`digit')h(y)o(ou)g(t)o(yp)q -(e)f(is)i(a)e(min)o(us)h(sign)g(\()p Fq(-)p Fr(\),)g(then)g(the)g(sign) -g(of)g(the)f(argumen)o(t)g(will)0 818 y(b)q(e)i(negativ)o(e.)40 -b(Once)22 b(y)o(ou)f(ha)o(v)o(e)h(t)o(yp)q(ed)g(one)f(meta)g(digit)i -(to)e(get)g(the)h(argumen)o(t)f(started,)h(y)o(ou)f(can)h(t)o(yp)q(e)0 -881 y(the)c(remainder)h(of)f(the)g(digits,)h(and)f(then)h(the)f -(command.)29 b(F)l(or)17 b(example,)i(to)f(giv)o(e)g(the)g -Fq(C-D)g Fr(command)g(an)0 943 y(argumen)o(t)c(of)h(10,)f(y)o(ou)h -(could)h(t)o(yp)q(e)g(`)p Fq(M-1)e(0)h(C-d)p Fr('.)0 -1375 y Fk(1.2.5)30 b(Searc)n(hing)15 b(for)g(Commands)h(in)f(the)g -(History)62 1537 y Fr(Readline)j(pro)o(vides)d(commands)g(for)g(searc)o -(hing)h(through)e(the)i(command)f(history)g(for)g(lines)h(con)o -(taining)g(a)0 1599 y(sp)q(eci\014ed)h(string.)j(There)c(are)f(t)o(w)o -(o)e(searc)o(h)i(mo)q(des:)20 b Fl(incremen)o(tal)f Fr(and)c -Fl(non-incremen)o(tal)p Fr(.)62 1761 y(Incremen)o(tal)i(searc)o(hes)e -(b)q(egin)i(b)q(efore)f(the)g(user)f(has)h(\014nished)h(t)o(yping)f -(the)g(searc)o(h)f(string.)21 b(As)15 b(eac)o(h)h(c)o(har-)0 -1823 y(acter)f(of)h(the)g(searc)o(h)f(string)h(is)g(t)o(yp)q(ed,)g -(readline)h(displa)o(ys)g(the)f(next)g(en)o(try)f(from)g(the)h(history) -g(matc)o(hing)g(the)0 1885 y(string)g(t)o(yp)q(ed)g(so)f(far.)20 -b(An)c(incremen)o(tal)h(searc)o(h)e(requires)i(only)f(as)f(man)o(y)g(c) -o(haracters)g(as)h(needed)h(to)e(\014nd)h(the)0 1948 -y(desired)g(history)f(en)o(try)l(.)20 b(The)15 b(Escap)q(e)h(c)o -(haracter)e(is)h(used)h(to)e(terminate)h(an)g(incremen)o(tal)h(searc)o -(h.)k(Con)o(trol-J)0 2010 y(will)c(also)f(terminate)g(the)g(searc)o(h.) -k(Con)o(trol-G)14 b(will)j(ab)q(ort)d(an)h(incremen)o(tal)g(searc)o(h)g -(and)g(restore)f(the)h(original)0 2072 y(line.)30 b(When)18 -b(the)h(searc)o(h)e(is)i(terminated,)g(the)f(history)g(en)o(try)f(con)o -(taining)i(the)f(searc)o(h)g(string)g(b)q(ecomes)h(the)0 -2134 y(curren)o(t)g(line.)35 b(T)l(o)20 b(\014nd)g(other)f(matc)o(hing) -h(en)o(tries)g(in)g(the)g(history)g(list,)h(t)o(yp)q(e)e(Con)o(trol-S)h -(or)f(Con)o(trol-R)g(as)0 2197 y(appropriate.)k(This)17 -b(will)h(searc)o(h)e(bac)o(kw)o(ard)g(or)f(forw)o(ard)g(in)j(the)e -(history)g(for)g(the)g(next)h(en)o(try)f(matc)o(hing)g(the)0 -2259 y(searc)o(h)c(string)h(t)o(yp)q(ed)f(so)g(far.)19 -b(An)o(y)12 b(other)g(k)o(ey)g(sequence)i(b)q(ound)f(to)f(a)g(readline) -i(command)e(will)i(terminate)f(the)0 2321 y(searc)o(h)j(and)h(execute)g -(that)f(command.)24 b(F)l(or)16 b(instance,)h(a)g Fq(newline)e -Fr(will)j(terminate)f(the)g(searc)o(h)f(and)h(accept)0 -2384 y(the)e(line,)i(thereb)o(y)e(executing)h(the)g(command)f(from)f -(the)h(history)h(list.)62 2545 y(Non-incremen)o(tal)k(searc)o(hes)f -(read)f(the)h(en)o(tire)g(searc)o(h)g(string)f(b)q(efore)h(starting)f -(to)g(searc)o(h)h(for)f(matc)o(hing)0 2608 y(history)g(lines.)29 -b(The)18 b(searc)o(h)g(string)g(ma)o(y)f(b)q(e)h(t)o(yp)q(ed)g(b)o(y)g -(the)g(user)g(or)f(part)g(of)h(the)g(con)o(ten)o(ts)f(of)g(the)h -(curren)o(t)0 2670 y(line.)p eop -5 6 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(5)0 183 y Fp(1.3)33 b(Readline)16 b(Init)g(File)62 -324 y Fr(Although)h(the)f(Readline)j(library)e(comes)f(with)g(a)g(set)g -(of)g Fq(emacs)p Fr(-lik)o(e)h(k)o(eybindings)h(installed)g(b)o(y)e -(default,)0 387 y(it)e(is)g(p)q(ossible)i(that)d(y)o(ou)g(w)o(ould)h -(lik)o(e)h(to)e(use)h(a)f(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.) -21 b(Y)l(ou)14 b(can)g(customize)g(programs)0 449 y(that)j(use)h -(Readline)i(b)o(y)e(putting)h(commands)e(in)i(an)f Fl(inputrc)j -Fr(\014le)e(in)g(y)o(our)e(home)h(directory)l(.)28 b(The)19 -b(name)e(of)0 511 y(this)e(\014le)h(is)g(tak)o(en)e(from)h(the)g(v)m -(alue)h(of)e(the)h(en)o(vironmen)o(t)h(v)m(ariable)g -Fq(INPUTRC)p Fr(.)j(If)c(that)f(v)m(ariable)j(is)e(unset,)g(the)0 -573 y(default)h(is)f(`)p Fq(~/.inputrc)p Fr('.)62 714 -y(When)k(a)g(program)e(whic)o(h)j(uses)f(the)g(Readline)i(library)e -(starts)f(up,)h(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)g(k)o(ey)0 -777 y(bindings)e(are)e(set.)62 918 y(In)j(addition,)h(the)f -Fq(C-x)c(C-r)k Fr(command)f(re-reads)g(this)h(init)h(\014le,)g(th)o(us) -e(incorp)q(orating)h(an)o(y)f(c)o(hanges)h(that)0 980 -y(y)o(ou)d(migh)o(t)g(ha)o(v)o(e)g(made)g(to)f(it.)0 -1224 y Fk(1.3.1)30 b(Readline)15 b(Init)g(File)g(Syn)n(tax)62 -1365 y Fr(There)h(are)f(only)h(a)f(few)g(basic)h(constructs)f(allo)o(w) -o(ed)h(in)g(the)g(Readline)i(init)e(\014le.)22 b(Blank)16 -b(lines)h(are)e(ignored.)0 1427 y(Lines)f(b)q(eginning)h(with)e(a)f(`)p -Fq(#)p Fr(')g(are)g(commen)o(ts.)19 b(Lines)14 b(b)q(eginning)h(with)e -(a)f(`)p Fq($)p Fr(')g(indicate)i(conditional)g(constructs)0 -1490 y(\(see)i(Section)h(1.3.2)e([Conditional)i(Init)g(Constructs],)e -(page)i(8\).)22 b(Other)16 b(lines)i(denote)f(v)m(ariable)h(settings)e -(and)0 1552 y(k)o(ey)f(bindings.)0 1710 y(V)l(ariable)h(Settings)240 -1772 y(Y)l(ou)j(can)g(c)o(hange)g(the)g(state)f(of)g(a)g(few)h(v)m -(ariables)h(in)g(Readline)h(b)o(y)d(using)i(the)f Fq(set)f -Fr(command)240 1834 y(within)e(the)f(init)h(\014le.)k(Here)15 -b(is)g(ho)o(w)g(y)o(ou)f(w)o(ould)h(sp)q(ecify)h(that)e(y)o(ou)g(wish)i -(to)e(use)h Fq(vi)f Fr(line)j(editing)240 1896 y(commands:)360 -1965 y Fq(set)23 b(editing-mode)g(vi)240 2044 y Fr(Righ)o(t)14 -b(no)o(w,)f(there)h(are)f(only)h(a)f(few)h(v)m(ariables)g(whic)o(h)h -(can)f(b)q(e)g(set;)f(so)g(few,)h(in)g(fact,)f(that)g(w)o(e)g(just)240 -2106 y(list)j(them)f(here:)240 2201 y Fq(bell-style)480 -2263 y Fr(Con)o(trols)h(what)f(happ)q(ens)j(when)f(Readline)h(w)o(an)o -(ts)e(to)f(ring)i(the)f(terminal)h(b)q(ell.)26 b(If)480 -2326 y(set)17 b(to)f(`)p Fq(none)p Fr(',)g(Readline)j(nev)o(er)f(rings) -f(the)g(b)q(ell.)28 b(If)17 b(set)g(to)f(`)p Fq(visible)p -Fr(',)g(Readline)480 2388 y(uses)21 b(a)g(visible)j(b)q(ell)f(if)e(one) -h(is)f(a)o(v)m(ailable.)40 b(If)21 b(set)g(to)g(`)p Fq(audible)p -Fr(')e(\(the)i(default\),)480 2450 y(Readline)d(attempts)c(to)g(ring)i -(the)f(terminal's)h(b)q(ell.)240 2545 y Fq(comment-begin)480 -2608 y Fr(The)d(string)h(to)e(insert)i(at)e(the)i(b)q(eginning)h(of)e -(the)g(line)i(when)f(the)f Fq(insert-comment)480 2670 -y Fr(command)i(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g -Fq("#")p Fr(.)p eop -6 7 bop 0 -58 a Fr(6)1472 b(GNU)15 b(Readline)i(Library)240 -183 y Fq(completion-query-items)480 246 y Fr(The)12 b(n)o(um)o(b)q(er)g -(of)f(p)q(ossible)j(completions)e(that)f(determines)i(when)f(the)g -(user)g(is)g(ask)o(ed)480 308 y(whether)k(he)h(w)o(an)o(ts)d(to)i(see)g -(the)g(list)h(of)e(p)q(ossibiliti)q(es.)25 b(If)16 b(the)g(n)o(um)o(b)q -(er)h(of)e(p)q(ossible)480 370 y(completions)i(is)f(greater)f(than)h -(this)h(v)m(alue,)f(Readline)j(will)e(ask)f(the)g(user)g(whether)480 -432 y(or)k(not)h(he)h(wishes)f(to)g(view)g(them;)j(otherwise,)e(they)f -(are)g(simply)h(listed.)39 b(The)480 495 y(default)16 -b(limit)g(is)g Fq(100)p Fr(.)240 592 y Fq(convert-meta)480 -654 y Fr(If)21 b(set)f(to)g(`)p Fq(on)p Fr(',)g(Readline)j(will)f(con)o -(v)o(ert)e(c)o(haracters)f(with)i(the)g(eigth)f(bit)h(set)g(to)480 -716 y(an)c(ASCI)q(I)g(k)o(ey)g(sequence)h(b)o(y)e(stripping)i(the)f -(eigth)g(bit)g(and)g(prep)q(ending)i(an)d Fq(ESC)480 -779 y Fr(c)o(haracter,)h(con)o(v)o(erting)g(them)g(to)f(a)h -(meta-pre\014xed)h(k)o(ey)f(sequence.)27 b(The)17 b(default)480 -841 y(v)m(alue)f(is)g(`)p Fq(on)p Fr('.)240 938 y Fq -(disable-completion)480 1000 y Fr(If)e(set)f(to)g(`)p -Fq(On)p Fr(',)f(readline)j(will)h(inhibit)f(w)o(ord)e(completion.)20 -b(Completion)15 b(c)o(haracters)480 1063 y(will)h(b)q(e)g(inserted)g -(in)o(to)e(the)h(line)i(as)d(if)h(they)g(had)g(b)q(een)h(mapp)q(ed)g -(to)e Fq(self-insert)p Fr(.)480 1125 y(The)h(default)h(is)g(`)p -Fq(off)p Fr('.)240 1222 y Fq(editing-mode)480 1285 y -Fr(The)d Fq(editing-mode)e Fr(v)m(ariable)j(con)o(trols)e(whic)o(h)h -(editing)h(mo)q(de)f(y)o(ou)f(are)g(using.)20 b(By)480 -1347 y(default,)f(Readline)h(starts)c(up)i(in)h(Emacs)e(editing)i(mo)q -(de,)f(where)g(the)g(k)o(eystrok)o(es)480 1409 y(are)g(most)f(similar)i -(to)e(Emacs.)27 b(This)19 b(v)m(ariable)g(can)f(b)q(e)h(set)e(to)g -(either)i(`)p Fq(emacs)p Fr(')d(or)480 1471 y(`)p Fq(vi)p -Fr('.)240 1569 y Fq(enable-keypad)480 1631 y Fr(When)g(set)g(to)f(`)p -Fq(on)p Fr(',)g(readline)j(will)f(try)e(to)h(enable)h(the)f -(application)h(k)o(eypad)f(when)480 1693 y(it)f(is)g(called.)22 -b(Some)15 b(systems)f(need)i(this)f(to)f(enable)i(the)f(arro)o(w)f(k)o -(eys.)19 b(The)c(default)480 1755 y(is)h(`)p Fq(off)p -Fr('.)240 1853 y Fq(expand-tilde)480 1915 y Fr(If)i(set)f(to)f(`)p -Fq(on)p Fr(',)h(tilde)h(expansion)h(is)e(p)q(erformed)h(when)g -(Readline)h(attempts)e(w)o(ord)480 1977 y(completion.)k(The)15 -b(default)h(is)g(`)p Fq(off)p Fr('.)240 2075 y Fq -(horizontal-scroll-mode)480 2137 y Fr(This)j(v)m(ariable)h(can)e(b)q(e) -i(set)e(to)g(either)h(`)p Fq(on)p Fr(')e(or)h(`)p Fq(off)p -Fr('.)28 b(Setting)19 b(it)g(to)f(`)p Fq(on)p Fr(')f(means)480 -2199 y(that)f(the)h(text)f(of)h(the)f(lines)j(that)d(y)o(ou)g(edit)i -(will)g(scroll)g(horizon)o(tally)f(on)g(a)g(single)480 -2261 y(screen)h(line)h(when)f(they)f(are)g(longer)h(than)f(the)g(width) -h(of)f(the)g(screen,)h(instead)g(of)480 2324 y(wrapping)e(on)o(to)e(a)h -(new)g(screen)h(line.)21 b(By)16 b(default,)f(this)h(v)m(ariable)g(is)g -(set)f(to)g(`)p Fq(off)p Fr('.)240 2421 y Fq(keymap)96 -b Fr(Sets)13 b(Readline's)i(idea)e(of)g(the)g(curren)o(t)f(k)o(eymap)h -(for)f(k)o(ey)h(binding)i(commands.)k(Ac-)480 2483 y(ceptable)d -Fq(keymap)e Fr(names)h(are)g Fq(emacs)p Fr(,)f Fq(emacs-standard)p -Fr(,)f Fq(emacs-meta)p Fr(,)g Fq(emacs-)480 2545 y(ctlx)p -Fr(,)18 b Fq(vi)p Fr(,)h Fq(vi-command)p Fr(,)e(and)i -Fq(vi-insert)p Fr(.)28 b Fq(vi)18 b Fr(is)h(equiv)m(alen)o(t)h(to)e -Fq(vi-command)p Fr(;)480 2608 y Fq(emacs)d Fr(is)i(equiv)m(alen)o(t)h -(to)d Fq(emacs-standard)p Fr(.)20 b(The)d(default)f(v)m(alue)i(is)e -Fq(emacs)p Fr(.)22 b(The)480 2670 y(v)m(alue)16 b(of)f(the)g -Fq(editing-mode)f Fr(v)m(ariable)j(also)e(a\013ects)f(the)h(default)h -(k)o(eymap.)p eop -7 8 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(7)240 183 y Fq(mark-directories)480 246 y Fr(If)22 -b(set)g(to)g(`)p Fq(on)p Fr(',)g(completed)h(directory)f(names)h(ha)o -(v)o(e)e(a)h(slash)h(app)q(ended.)42 b(The)480 308 y(default)16 -b(is)f(`)p Fq(on)p Fr('.)240 388 y Fq(mark-modified-lines)480 -450 y Fr(This)f(v)m(ariable,)h(when)e(set)g(to)g(`)p -Fq(on)p Fr(',)f(sa)o(ys)h(to)g(displa)o(y)h(an)f(asterisk)g(\(`)p -Fq(*)p Fr('\))f(at)h(the)g(start)480 512 y(of)f(history)h(lines)h(whic) -o(h)f(ha)o(v)o(e)f(b)q(een)i(mo)q(di\014ed.)21 b(This)13 -b(v)m(ariable)h(is)f(`)p Fq(off)p Fr(')e(b)o(y)i(default.)240 -593 y Fq(input-meta)480 655 y Fr(If)21 b(set)g(to)g(`)p -Fq(on)p Fr(',)g(Readline)i(will)g(enable)g(eigh)o(t-bit)f(input)g(\(it) -f(will)i(not)d(strip)i(the)480 717 y(eigh)o(th)e(bit)f(from)f(the)i(c)o -(haracters)e(it)h(reads\),)h(regardless)f(of)f(what)h(the)g(terminal) -480 779 y(claims)d(it)g(can)f(supp)q(ort.)21 b(The)15 -b(default)h(v)m(alue)h(is)e(`)p Fq(off)p Fr('.)20 b(The)15 -b(name)g Fq(meta-flag)f Fr(is)480 842 y(a)h(synon)o(ym)g(for)f(this)i -(v)m(ariable.)240 922 y Fq(output-meta)480 984 y Fr(If)11 -b(set)f(to)g(`)p Fq(on)p Fr(',)g(Readline)j(will)g(displa)o(y)e(c)o -(haracters)f(with)h(the)g(eigh)o(th)g(bit)g(set)g(directly)480 -1046 y(rather)k(than)g(as)f(a)h(meta-pre\014xed)h(escap)q(e)g -(sequence.)21 b(The)16 b(default)f(is)h(`)p Fq(off)p -Fr('.)240 1126 y Fq(show-all-if-ambiguous)480 1189 y -Fr(This)f(alters)f(the)h(default)g(b)q(eha)o(vior)g(of)f(the)h -(completion)g(functions.)21 b(If)14 b(set)h(to)e(`)p -Fq(on)p Fr(',)480 1251 y(w)o(ords)18 b(whic)o(h)i(ha)o(v)o(e)f(more)f -(than)h(one)g(p)q(ossible)i(completion)f(cause)f(the)g(matc)o(hes)480 -1313 y(to)e(b)q(e)h(listed)h(immediately)g(instead)f(of)f(ringing)i -(the)e(b)q(ell.)29 b(The)18 b(default)g(v)m(alue)g(is)480 -1375 y(`)p Fq(off)p Fr('.)240 1456 y Fq(visible-stats)480 -1518 y Fr(If)c(set)g(to)f(`)p Fq(on)p Fr(',)f(a)i(c)o(haracter)f -(denoting)h(a)g(\014le's)g(t)o(yp)q(e)g(is)g(app)q(ended)i(to)d(the)h -(\014lename)480 1580 y(when)i(listing)g(p)q(ossible)h(completions.)k -(The)16 b(default)f(is)h(`)p Fq(off)p Fr('.)0 1660 y(Key)g(Bindings)240 -1722 y(The)k(syn)o(tax)f(for)g(con)o(trolling)i(k)o(ey)e(bindings)j(in) -e(the)g(init)h(\014le)g(is)f(simple.)35 b(First)19 b(y)o(ou)g(ha)o(v)o -(e)h(to)240 1785 y(kno)o(w)13 b(the)h(name)g(of)f(the)h(command)g(that) -f(y)o(ou)g(w)o(an)o(t)g(to)g(c)o(hange.)20 b(The)14 b(follo)o(wing)g -(pages)g(con)o(tain)240 1847 y(tables)i(of)f(the)h(command)g(name,)f -(the)h(default)g(k)o(eybinding,)i(and)e(a)f(short)g(description)i(of)f -(what)240 1909 y(the)f(command)g(do)q(es.)240 1980 y(Once)h(y)o(ou)e -(kno)o(w)g(the)h(name)g(of)f(the)h(command,)f(simply)i(place)g(the)f -(name)f(of)h(the)f(k)o(ey)h(y)o(ou)f(wish)240 2043 y(to)g(bind)j(the)e -(command)g(to,)f(a)g(colon,)i(and)f(then)g(the)g(name)g(of)g(the)g -(command)g(on)g(a)f(line)j(in)f(the)240 2105 y(init)h(\014le.)22 -b(The)16 b(name)g(of)f(the)h(k)o(ey)f(can)h(b)q(e)g(expressed)h(in)f -(di\013eren)o(t)g(w)o(a)o(ys,)f(dep)q(ending)i(on)f(whic)o(h)240 -2167 y(is)g(most)e(comfortable)h(for)g(y)o(ou.)240 2247 -y Fl(k)o(eyname)s Fr(:)k Fl(function-name)g Fr(or)c Fl(macro)480 -2310 y(k)o(eyname)j Fr(is)d(the)h(name)f(of)g(a)g(k)o(ey)g(sp)q(elled)i -(out)e(in)h(English.)21 b(F)l(or)15 b(example:)600 2370 -y Fq(Control-u:)22 b(universal-argument)600 2422 y(Meta-Rubout:)g -(backward-kill-word)600 2474 y(Control-o:)g(">)i(output")480 -2545 y Fr(In)12 b(the)g(ab)q(o)o(v)o(e)f(example,)h(`)p -Fq(C-u)p Fr(')f(is)h(b)q(ound)g(to)f(the)h(function)g -Fq(universal-argument)p Fr(,)480 2608 y(and)h(`)p Fq(C-o)p -Fr(')f(is)h(b)q(ound)h(to)f(run)g(the)g(macro)f(expressed)i(on)f(the)g -(righ)o(t)g(hand)g(side)h(\(that)480 2670 y(is,)h(to)g(insert)h(the)f -(text)g(`)p Fq(>)f(output)p Fr(')g(in)o(to)h(the)h(line\).)p -eop -8 9 bop 0 -58 a Fr(8)1472 b(GNU)15 b(Readline)i(Library)240 -183 y Fq(")p Fl(k)o(eyseq)q Fq(")p Fr(:)j Fl(function-name)e -Fr(or)d Fl(macro)480 246 y(k)o(eyseq)j Fr(di\013ers)f(from)f -Fl(k)o(eyname)k Fr(ab)q(o)o(v)o(e)c(in)i(that)e(strings)h(denoting)h -(an)f(en)o(tire)g(k)o(ey)480 308 y(sequence)i(can)f(b)q(e)h(sp)q -(eci\014ed,)i(b)o(y)d(placing)h(the)f(k)o(ey)g(sequence)h(in)g(double)h -(quotes.)480 370 y(Some)e(GNU)g(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es) -g(can)g(b)q(e)h(used,)g(as)e(in)i(the)f(follo)o(wing)h(ex-)480 -432 y(ample,)c(but)h(the)f(sp)q(ecial)i(c)o(haracter)e(names)g(are)g -(not)f(recognized.)600 499 y Fq("\\C-u":)23 b(universal-argument)600 -551 y("\\C-x\\C-r":)f(re-read-init-file)600 603 y("\\e[11~":)h -("Function)f(Key)i(1")480 681 y Fr(In)13 b(the)g(ab)q(o)o(v)o(e)g -(example,)g(`)p Fq(C-u)p Fr(')f(is)h(b)q(ound)h(to)e(the)h(function)g -Fq(universal-argument)480 743 y Fr(\(just)g(as)f(it)i(w)o(as)e(in)i -(the)f(\014rst)g(example\),)h(`)p Fq(C-x)g(C-r)p Fr(')f(is)g(b)q(ound)i -(to)d(the)h(function)h Fq(re-)480 805 y(read-init-file)p -Fr(,)g(and)i(`)p Fq(ESC)e([)h(1)g(1)g(~)p Fr(')h(is)g(b)q(ound)h(to)f -(insert)g(the)g(text)f(`)p Fq(Function)480 867 y(Key)g(1)p -Fr('.)24 b(The)18 b(follo)o(wing)f(escap)q(e)h(sequences)g(are)f(a)o(v) -m(ailable)i(when)e(sp)q(ecifying)i(k)o(ey)480 930 y(sequences:)480 -1022 y Fq(\\C-)168 b Fr(con)o(trol)15 b(pre\014x)480 -1115 y Fq(\\M-)168 b Fr(meta)15 b(pre\014x)480 1208 y -Fq(\\e)192 b Fr(an)15 b(escap)q(e)h(c)o(haracter)480 -1300 y Fq(\\\\)192 b Fr(bac)o(kslash)480 1393 y Fq(\\")g(")480 -1485 y(\\')g(')480 1578 y Fr(When)14 b(en)o(tering)h(the)f(text)f(of)h -(a)f(macro,)g(single)j(or)d(double)i(quotes)f(should)h(b)q(e)f(used)480 -1640 y(to)g(indicate)j(a)e(macro)f(de\014nition.)22 b(Unquoted)15 -b(text)g(is)g(assumed)g(to)g(b)q(e)g(a)g(function)480 -1703 y(name.)21 b(Bac)o(kslash)16 b(will)h(quote)f(an)o(y)f(c)o -(haracter)g(in)h(the)g(macro)f(text,)g(including)j(`)p -Fq(")p Fr(')480 1765 y(and)12 b(`)p Fq(')p Fr('.)18 b(F)l(or)11 -b(example,)i(the)f(follo)o(wing)g(binding)i(will)f(mak)o(e)e(`)p -Fq(C-x)k(\\)p Fr(')c(insert)h(a)g(single)480 1827 y(`)p -Fq(\\)p Fr(')i(in)o(to)h(the)h(line:)600 1894 y Fq("\\C-x\\\\":)23 -b("\\\\")0 2126 y Fk(1.3.2)30 b(Conditional)15 b(Init)g(Constructs)62 -2266 y Fr(Readline)j(implemen)o(ts)e(a)f(facilit)o(y)h(similar)g(in)g -(spirit)g(to)f(the)g(conditional)i(compilation)f(features)f(of)g(the)g -(C)0 2328 y(prepro)q(cessor)f(whic)o(h)h(allo)o(ws)f(k)o(ey)g(bindings) -h(and)f(v)m(ariable)i(settings)e(to)f(b)q(e)h(p)q(erformed)h(as)e(the)h -(result)g(of)g(tests.)0 2391 y(There)h(are)g(three)h(parser)e(directiv) -o(es)j(used.)0 2545 y Fq($if)168 b Fr(The)14 b Fq($if)e -Fr(construct)h(allo)o(ws)h(bindings)h(to)e(b)q(e)h(made)f(based)h(on)f -(the)h(editing)g(mo)q(de,)g(the)f(terminal)240 2608 y(b)q(eing)k(used,) -e(or)g(the)g(application)i(using)f(Readline.)22 b(The)16 -b(text)f(of)g(the)g(test)g(extends)g(to)g(the)g(end)240 -2670 y(of)g(the)g(line;)i(no)e(c)o(haracters)f(are)h(required)h(to)f -(isolate)g(it.)p eop -9 10 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(9)240 183 y Fq(mode)144 b Fr(The)19 b Fq(mode=)f Fr(form)g(of)h(the)g -Fq($if)f Fr(directiv)o(e)i(is)f(used)h(to)e(test)g(whether)h(Readline)i -(is)480 246 y(in)h Fq(emacs)f Fr(or)f Fq(vi)h Fr(mo)q(de.)38 -b(This)22 b(ma)o(y)f(b)q(e)h(used)g(in)g(conjunction)g(with)f(the)h(`)p -Fq(set)480 308 y(keymap)p Fr(')d(command,)i(for)e(instance,)j(to)d(set) -h(bindings)i(in)f(the)f Fq(emacs-standard)480 370 y Fr(and)15 -b Fq(emacs-ctlx)f Fr(k)o(eymaps)h(only)h(if)f(Readline)j(is)e(starting) -e(out)h(in)h Fq(emacs)f Fr(mo)q(de.)240 457 y Fq(term)144 -b Fr(The)21 b Fq(term=)f Fr(form)g(ma)o(y)h(b)q(e)g(used)h(to)e -(include)j(terminal-sp)q(eci\014c)h(k)o(ey)c(bindings,)480 -519 y(p)q(erhaps)15 b(to)f(bind)j(the)d(k)o(ey)h(sequences)h(output)e -(b)o(y)h(the)g(terminal's)g(function)h(k)o(eys.)480 582 -y(The)f(w)o(ord)g(on)f(the)i(righ)o(t)e(side)i(of)f(the)g(`)p -Fq(=)p Fr(')f(is)h(tested)g(against)g(the)g(full)h(name)f(of)g(the)480 -644 y(terminal)k(and)g(the)g(p)q(ortion)g(of)f(the)h(terminal)g(name)g -(b)q(efore)g(the)g(\014rst)f(`)p Fq(-)p Fr('.)29 b(This)480 -706 y(allo)o(ws)15 b Fq(sun)g Fr(to)g(matc)o(h)f(b)q(oth)i -Fq(sun)e Fr(and)i Fq(sun-cmd)p Fr(,)e(for)g(instance.)240 -793 y Fq(application)480 856 y Fr(The)k Fl(application)i -Fr(construct)e(is)g(used)h(to)e(include)k(application-sp)q(eci\014c)g -(settings.)480 918 y(Eac)o(h)d(program)g(using)h(the)f(Readline)j -(library)e(sets)f(the)h Fl(application)h(name)p Fr(,)f(and)480 -980 y(y)o(ou)c(can)h(test)f(for)g(it.)21 b(This)16 b(could)g(b)q(e)h -(used)f(to)e(bind)j(k)o(ey)f(sequences)g(to)f(functions)480 -1043 y(useful)h(for)e(a)h(sp)q(eci\014c)i(program.)h(F)l(or)d -(instance,)g(the)g(follo)o(wing)h(command)e(adds)h(a)480 -1105 y(k)o(ey)g(sequence)h(that)f(quotes)g(the)g(curren)o(t)g(or)g -(previous)h(w)o(ord)e(in)i(Bash:)600 1169 y Fq($if)23 -b(Bash)600 1221 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)600 -1273 y("\\C-xq":)g("\\eb\\"\\ef\\"")600 1325 y($endif)0 -1412 y($endif)96 b Fr(This)16 b(command,)e(as)h(y)o(ou)g(sa)o(w)g(in)h -(the)f(previous)h(example,)f(terminates)h(an)f Fq($if)f -Fr(command.)0 1499 y Fq($else)120 b Fr(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Fq($if)e Fr(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)0 1707 y Fk(1.3.3)30 b(Sample)15 b(Init)g(File)62 -1844 y Fr(Here)20 b(is)f(an)g(example)h(of)f(an)g(inputrc)h(\014le.)33 -b(This)20 b(illustrates)g(k)o(ey)f(binding,)j(v)m(ariable)e(assignmen)o -(t,)g(and)0 1906 y(conditional)d(syn)o(tax.)p eop -10 11 bop 0 -58 a Fr(10)1449 b(GNU)15 b(Readline)i(Library)120 -235 y Fq(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)120 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)120 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)120 391 -y(#)120 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)120 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)120 546 y(#)120 598 y(#)g(Set)f(various)g(bindings)g(for)g -(emacs)g(mode.)120 702 y(set)g(editing-mode)g(emacs)120 -806 y($if)g(mode=emacs)120 910 y(Meta-Control-h:)46 b -(backward-kill-word)21 b(Text)i(after)h(the)f(function)g(name)g(is)h -(ignored)120 1013 y(#)120 1065 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode) -120 1117 y(#)120 1169 y(#"\\M-OD":)190 b(backward-char)120 -1221 y(#"\\M-OC":)g(forward-char)120 1273 y(#"\\M-OA":)g -(previous-history)120 1325 y(#"\\M-OB":)g(next-history)120 -1377 y(#)120 1429 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)120 -1480 y(#)120 1532 y("\\M-[D":)190 b(backward-char)120 -1584 y("\\M-[C":)g(forward-char)120 1636 y("\\M-[A":)g -(previous-history)120 1688 y("\\M-[B":)g(next-history)120 -1740 y(#)120 1792 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -120 1844 y(#)120 1896 y(#"\\M-\\C-OD":)165 b(backward-char)120 -1947 y(#"\\M-\\C-OC":)g(forward-char)120 1999 y(#"\\M-\\C-OA":)g -(previous-history)120 2051 y(#"\\M-\\C-OB":)g(next-history)120 -2103 y(#)120 2155 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -120 2207 y(#)120 2259 y(#"\\M-\\C-[D":)165 b(backward-char)120 -2311 y(#"\\M-\\C-[C":)g(forward-char)120 2363 y(#"\\M-\\C-[A":)g -(previous-history)120 2414 y(#"\\M-\\C-[B":)g(next-history)120 -2518 y(C-q:)23 b(quoted-insert)120 2622 y($endif)p eop -11 12 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(11)120 235 y Fq(#)24 b(An)f(old-style)g(binding.)47 -b(This)23 b(happens)g(to)g(be)h(the)f(default.)120 287 -y(TAB:)g(complete)120 391 y(#)h(Macros)f(that)g(are)h(convenient)e(for) -h(shell)h(interaction)120 443 y($if)f(Bash)120 495 y(#)h(edit)f(the)g -(path)120 546 y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")120 -598 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)f(insert)g(open) -h(and)f(close)g(double)g(quotes)120 650 y(#)h(and)f(move)g(to)h(just)f -(after)h(the)f(open)g(quote)120 702 y("\\C-x\\"":)g("\\"\\"\\C-b")120 -754 y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f -(in)i(sequences)f(and)g(macros\))120 806 y("\\C-x\\\\":)g("\\\\")120 -858 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)120 -910 y("\\C-xq":)g("\\eb\\"\\ef\\"")120 962 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)120 -1013 y("\\C-xr":)f(redraw-current-line)120 1065 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)120 1117 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")120 1169 y($endif)120 -1273 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)120 -1325 y(set)f(bell-style)g(visible)120 1429 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)120 1480 -y(set)f(input-meta)g(on)120 1584 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)120 -1636 y(#)h(prefix-meta)e(sequences)120 1688 y(set)h(convert-meta)g(off) -120 1792 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)120 1844 y(#)h(as)f(meta-prefixed)f -(characters)120 1896 y(set)h(output-meta)g(on)120 1999 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)120 2051 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)120 2103 y(set)g(completion-query-items)e -(150)120 2207 y(#)j(For)f(FTP)120 2259 y($if)g(Ftp)120 -2311 y("\\C-xg":)g("get)g(\\M-?")120 2363 y("\\C-xt":)g("put)g(\\M-?") -120 2414 y("\\M-.":)g(yank-last-arg)120 2466 y($endif)p -eop -12 13 bop 0 -58 a Fr(12)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fp(1.4)33 b(Bindable)16 b(Readline)h(Commands)62 -322 y Fr(This)f(section)g(describ)q(es)h(Readline)g(commands)e(that)g -(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)0 -545 y Fk(1.4.1)30 b(Commands)15 b(F)-5 b(or)15 b(Mo)n(ving)0 -698 y Fq(beginning-of-line)e(\(C-a\))240 760 y Fr(Mo)o(v)o(e)h(to)h -(the)g(start)f(of)h(the)g(curren)o(t)g(line.)0 851 y -Fq(end-of-line)f(\(C-e\))240 913 y Fr(Mo)o(v)o(e)g(to)h(the)g(end)h(of) -f(the)g(line.)0 1003 y Fq(forward-char)f(\(C-f\))240 -1066 y Fr(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)0 -1156 y Fq(backward-char)e(\(C-b\))240 1219 y Fr(Mo)o(v)o(e)h(bac)o(k)h -(a)g(c)o(haracter.)0 1309 y Fq(forward-word)f(\(M-f\))240 -1371 y Fr(Mo)o(v)o(e)g(forw)o(ard)g(to)h(the)g(end)h(of)f(the)g(next)g -(w)o(ord.)k(W)l(ords)c(are)g(comp)q(osed)h(of)e(letters)i(and)f -(digits.)0 1462 y Fq(backward-word)e(\(M-b\))240 1524 -y Fr(Mo)o(v)o(e)j(bac)o(k)g(to)g(the)h(start)f(of)g(this,)h(or)g(the)f -(previous,)i(w)o(ord.)24 b(W)l(ords)16 b(are)g(comp)q(osed)i(of)e -(letters)240 1587 y(and)f(digits.)0 1677 y Fq(clear-screen)f(\(C-l\)) -240 1739 y Fr(Clear)h(the)g(screen)g(and)g(redra)o(w)f(the)h(curren)o -(t)g(line,)h(lea)o(ving)g(the)f(curren)o(t)f(line)j(at)d(the)h(top)f -(of)h(the)240 1802 y(screen.)0 1892 y Fq(redraw-current-line)e(\(\))240 -1955 y Fr(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)0 2177 y Fk(1.4.2)30 -b(Commands)15 b(F)-5 b(or)15 b(Manipulating)g(The)g(History)0 -2330 y Fq(accept-line)f(\(Newline,)g(Return\))240 2393 -y Fr(Accept)g(the)f(line)i(regardless)e(of)g(where)g(the)g(cursor)g -(is.)20 b(If)13 b(this)h(line)h(is)e(non-empt)o(y)l(,)h(add)f(it)g(to)g -(the)240 2455 y(history)k(list.)25 b(If)17 b(this)g(line)i(w)o(as)c(a)i -(history)g(line,)h(then)f(restore)f(the)h(history)f(line)j(to)d(its)h -(original)240 2517 y(state.)0 2608 y Fq(previous-history)c(\(C-p\))240 -2670 y Fr(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g(list.)p -eop -13 14 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(13)0 183 y Fq(next-history)14 b(\(C-n\))240 246 y Fr(Mo)o(v)o(e)g -(`do)o(wn')g(through)h(the)h(history)f(list.)0 331 y -Fq(beginning-of-history)d(\(M-<\))240 393 y Fr(Mo)o(v)o(e)i(to)h(the)g -(\014rst)g(line)i(in)f(the)f(history)l(.)0 478 y Fq(end-of-history)e -(\(M->\))240 540 y Fr(Mo)o(v)o(e)h(to)h(the)g(end)h(of)f(the)g(input)h -(history)l(,)f(i.e.,)g(the)g(line)i(y)o(ou)e(are)g(en)o(tering.)0 -625 y Fq(reverse-search-history)d(\(C-r\))240 688 y Fr(Searc)o(h)18 -b(bac)o(kw)o(ard)f(starting)g(at)g(the)g(curren)o(t)h(line)h(and)f(mo)o -(ving)f(`up')h(through)f(the)h(history)f(as)240 750 y(necessary)l(.)j -(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)0 835 y -Fq(forward-search-history)c(\(C-s\))240 897 y Fr(Searc)o(h)j(forw)o -(ard)e(starting)h(at)g(the)g(curren)o(t)h(line)h(and)f(mo)o(ving)f(`do) -o(wn')g(through)g(the)g(the)h(history)240 960 y(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)0 1045 -y Fq(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))240 -1107 y Fr(Searc)o(h)18 b(bac)o(kw)o(ard)f(starting)g(at)g(the)g(curren) -o(t)h(line)h(and)f(mo)o(ving)f(`up')h(through)f(the)h(history)f(as)240 -1169 y(necessary)e(using)h(a)f(non-incremen)o(tal)i(searc)o(h)e(for)g -(a)f(string)i(supplied)h(b)o(y)e(the)h(user.)0 1254 y -Fq(non-incremental-forward-se)o(arch-hi)o(story)c(\(M-n\))240 -1317 y Fr(Searc)o(h)j(forw)o(ard)e(starting)h(at)g(the)g(curren)o(t)h -(line)h(and)f(mo)o(ving)f(`do)o(wn')g(through)g(the)g(the)h(history)240 -1379 y(as)g(necessary)g(using)h(a)f(non-incremen)o(tal)i(searc)o(h)e -(for)f(a)h(string)g(supplied)j(b)o(y)d(the)g(user.)0 -1464 y Fq(history-search-forward)d(\(\))240 1526 y Fr(Searc)o(h)h(forw) -o(ard)f(through)h(the)g(history)g(for)g(the)g(string)g(of)g(c)o -(haracters)f(b)q(et)o(w)o(een)i(the)f(start)f(of)h(the)240 -1589 y(curren)o(t)19 b(line)h(and)f(the)g(curren)o(t)f(cursor)h(p)q -(osition)g(\(the)g(`p)q(oin)o(t'\).)30 b(This)19 b(is)g(a)f -(non-incremen)o(tal)240 1651 y(searc)o(h.)i(By)15 b(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)0 1736 y Fq(history-search-backward)c -(\(\))240 1798 y Fr(Searc)o(h)21 b(bac)o(kw)o(ard)f(through)g(the)h -(history)f(for)g(the)h(string)f(of)h(c)o(haracters)f(b)q(et)o(w)o(een)g -(the)h(start)240 1860 y(of)c(the)h(curren)o(t)g(line)h(and)f(the)f(p)q -(oin)o(t.)28 b(This)18 b(is)h(a)e(non-incremen)o(tal)i(searc)o(h.)27 -b(By)18 b(default,)h(this)240 1923 y(command)c(is)h(un)o(b)q(ound.)0 -2008 y Fq(yank-nth-arg)e(\(M-C-y\))240 2070 y Fr(Insert)19 -b(the)g(\014rst)f(argumen)o(t)g(to)g(the)h(previous)g(command)g -(\(usually)g(the)g(second)g(w)o(ord)f(on)h(the)240 2132 -y(previous)e(line\).)23 b(With)16 b(an)g(argumen)o(t)f -Fl(n)p Fr(,)h(insert)h(the)f Fl(n)p Fr(th)g(w)o(ord)f(from)g(the)h -(previous)h(command)240 2195 y(\(the)d(w)o(ords)g(in)h(the)g(previous)g -(command)f(b)q(egin)i(with)f(w)o(ord)f(0\).)19 b(A)14 -b(negativ)o(e)h(argumen)o(t)f(inserts)240 2257 y(the)h -Fl(n)p Fr(th)h(w)o(ord)e(from)h(the)g(end)h(of)e(the)i(previous)g -(command.)0 2342 y Fq(yank-last-arg)d(\(M-.,)i(M-_\))240 -2404 y Fr(Insert)i(last)g(argumen)o(t)g(to)f(the)h(previous)h(command)f -(\(the)g(last)g(w)o(ord)f(of)h(the)g(previous)h(history)240 -2467 y(en)o(try\).)h(With)d(an)f(argumen)o(t,)f(b)q(eha)o(v)o(e)h -(exactly)h(lik)o(e)g Fq(yank-nth-arg)p Fr(.)0 2670 y -Fk(1.4.3)30 b(Commands)15 b(F)-5 b(or)15 b(Changing)g(T)-5 -b(ext)p eop -14 15 bop 0 -58 a Fr(14)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(delete-char)d(\(C-d\))240 246 y Fr(Delete)f(the)f(c)o -(haracter)f(under)i(the)f(cursor.)19 b(If)12 b(the)g(cursor)g(is)g(at)g -(the)g(b)q(eginning)i(of)e(the)g(line,)i(there)240 308 -y(are)k(no)h(c)o(haracters)e(in)j(the)e(line,)j(and)d(the)h(last)f(c)o -(haracter)g(t)o(yp)q(ed)h(w)o(as)f(not)g Fq(C-d)p Fr(,)g(then)h(return) -240 370 y Fq(EOF)p Fr(.)0 460 y Fq(backward-delete-char)12 -b(\(Rubout\))240 522 y Fr(Delete)g(the)f(c)o(haracter)f(b)q(ehind)j -(the)e(cursor.)18 b(A)11 b(n)o(umeric)h(arg)e(sa)o(ys)g(to)g(kill)j -(the)e(c)o(haracters)f(instead)240 584 y(of)15 b(deleting)h(them.)0 -674 y Fq(quoted-insert)d(\(C-q,)i(C-v\))240 736 y Fr(Add)i(the)f(next)h -(c)o(haracter)f(that)f(y)o(ou)h(t)o(yp)q(e)h(to)f(the)g(line)i(v)o -(erbatim.)24 b(This)17 b(is)g(ho)o(w)e(to)h(insert)h(k)o(ey)240 -799 y(sequences)f(lik)o(e)h Fq(C-Q)p Fr(,)d(for)h(example.)0 -888 y Fq(tab-insert)f(\(M-TAB\))240 951 y Fr(Insert)h(a)g(tab)g(c)o -(haracter.)0 1040 y Fq(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\)) -240 1103 y Fr(Insert)g(y)o(ourself.)0 1192 y Fq(transpose-chars)e -(\(C-t\))240 1255 y Fr(Drag)h(the)h(c)o(haracter)g(b)q(efore)g(the)h -(cursor)f(forw)o(ard)f(o)o(v)o(er)g(the)h(c)o(haracter)g(at)f(the)i -(cursor,)e(mo)o(ving)240 1317 y(the)k(cursor)h(forw)o(ard)e(as)h(w)o -(ell.)30 b(If)19 b(the)f(insertion)i(p)q(oin)o(t)f(is)g(at)e(the)i(end) -g(of)f(the)g(line,)j(then)e(this)240 1379 y(transp)q(oses)c(the)g(last) -g(t)o(w)o(o)f(c)o(haracters)h(of)f(the)i(line.)21 b(Negativ)o(e)15 -b(argumen)o(tss)f(don't)h(w)o(ork.)0 1469 y Fq(transpose-words)e -(\(M-t\))240 1531 y Fr(Drag)f(the)h(w)o(ord)f(b)q(ehind)i(the)f(cursor) -g(past)f(the)h(w)o(ord)f(in)h(fron)o(t)f(of)h(the)f(cursor)h(mo)o(ving) -f(the)h(cursor)240 1594 y(o)o(v)o(er)h(that)h(w)o(ord)f(as)h(w)o(ell.)0 -1683 y Fq(upcase-word)f(\(M-u\))240 1746 y Fr(Upp)q(ercase)h(the)e -(curren)o(t)h(\(or)f(follo)o(wing\))h(w)o(ord.)k(With)c(a)f(negativ)o -(e)h(argumen)o(t,)f(do)g(the)h(previous)240 1808 y(w)o(ord,)g(but)h(do) -h(not)e(mo)o(v)o(e)h(the)g(cursor.)0 1898 y Fq(downcase-word)e(\(M-l\)) -240 1960 y Fr(Lo)o(w)o(ercase)g(the)i(curren)o(t)f(\(or)f(follo)o -(wing\))h(w)o(ord.)19 b(With)14 b(a)g(negativ)o(e)g(argumen)o(t,)f(do)h -(the)g(previous)240 2022 y(w)o(ord,)g(but)h(do)h(not)e(mo)o(v)o(e)h -(the)g(cursor.)0 2112 y Fq(capitalize-word)e(\(M-c\))240 -2174 y Fr(Capitalize)j(the)e(curren)o(t)g(\(or)f(follo)o(wing\))i(w)o -(ord.)j(With)d(a)f(negativ)o(e)g(argumen)o(t,)f(do)h(the)g(previous)240 -2236 y(w)o(ord,)g(but)h(do)h(not)e(mo)o(v)o(e)h(the)g(cursor.)0 -2456 y Fk(1.4.4)30 b(Killing)15 b(And)h(Y)-5 b(anking)0 -2608 y Fq(kill-line)14 b(\(C-k\))240 2670 y Fr(Kill)j(the)f(text)e -(from)h(the)g(curren)o(t)g(cursor)g(p)q(osition)h(to)f(the)g(end)h(of)f -(the)g(line.)p eop -15 16 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(15)0 183 y Fq(backward-kill-line)13 b(\(C-x)h(Rubout\))240 -246 y Fr(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)0 332 y Fq(unix-line-discard)e(\(C-u\))240 394 -y Fr(Kill)j(bac)o(kw)o(ard)d(from)f(the)i(cursor)f(to)g(the)h(b)q -(eginning)i(of)d(the)g(curren)o(t)h(line.)21 b(Sa)o(v)o(e)13 -b(the)h(killed)h(text)240 456 y(on)g(the)g(kill-ring.)0 -543 y Fq(kill-whole-line)e(\(\))240 605 y Fr(Kill)18 -b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e(matter)e -(where)i(the)g(cursor)g(is.)22 b(By)16 b(default,)h(this)240 -667 y(is)f(un)o(b)q(ound.)0 753 y Fq(kill-word)e(\(M-d\))240 -816 y Fr(Kill)j(from)d(the)h(cursor)g(to)f(the)h(end)g(of)g(the)g -(curren)o(t)f(w)o(ord,)g(or)g(if)i(b)q(et)o(w)o(een)f(w)o(ords,)f(to)g -(the)h(end)g(of)240 878 y(the)g(next)h(w)o(ord.)j(W)l(ord)c(b)q -(oundaries)h(are)f(the)g(same)g(as)g Fq(forward-word)p -Fr(.)0 964 y Fq(backward-kill-word)e(\(M-DEL\))240 1027 -y Fr(Kill)k(the)f(w)o(ord)e(b)q(ehind)j(the)f(cursor.)j(W)l(ord)c(b)q -(oundaries)i(are)d(the)i(same)f(as)f Fq(backward-word)p -Fr(.)0 1113 y Fq(unix-word-rubout)f(\(C-w\))240 1175 -y Fr(Kill)i(the)e(w)o(ord)f(b)q(ehind)j(the)f(cursor,)e(using)i(white)f -(space)h(as)e(a)h(w)o(ord)f(b)q(oundary)l(.)20 b(The)13 -b(killed)i(text)240 1237 y(is)h(sa)o(v)o(ed)e(on)i(the)f(kill-ring.)0 -1324 y Fq(delete-horizontal-space)d(\(\))240 1386 y Fr(Delete)k(all)g -(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)0 1472 y Fq(kill-region)e(\(\)) -240 1535 y Fr(Kill)23 b(the)e(text)g(b)q(et)o(w)o(een)g(the)g(p)q(oin)o -(t)g(and)g(the)g Fl(mark)j Fr(\(sa)o(v)o(ed)c(cursor)g(p)q(osition.)38 -b(This)22 b(text)e(is)240 1597 y(referred)15 b(to)g(as)g(the)g -Fl(region)p Fr(.)20 b(By)15 b(default,)h(this)g(command)f(is)g(un)o(b)q -(ound.)0 1683 y Fq(copy-region-as-kill)e(\(\))240 1745 -y Fr(Cop)o(y)f(the)h(text)f(in)i(the)f(region)g(to)f(the)g(kill)j -(bu\013er,)e(so)f(y)o(ou)h(can)f(y)o(ank)h(it)g(righ)o(t)f(a)o(w)o(a)o -(y)l(.)18 b(By)13 b(default,)240 1808 y(this)j(command)f(is)g(un)o(b)q -(ound.)0 1894 y Fq(copy-backward-word)e(\(\))240 1956 -y Fr(Cop)o(y)i(the)g(w)o(ord)f(b)q(efore)i(p)q(oin)o(t)g(to)e(the)h -(kill)j(bu\013er.)h(By)d(default,)f(this)h(command)f(is)h(un)o(b)q -(ound.)0 2043 y Fq(copy-forward-word)d(\(\))240 2105 -y Fr(Cop)o(y)f(the)h(w)o(ord)f(follo)o(wing)h(p)q(oin)o(t)g(to)f(the)h -(kill)h(bu\013er.)19 b(By)13 b(default,)g(this)h(command)e(is)h(un)o(b) -q(ound.)0 2191 y Fq(yank)i(\(C-y\))240 2253 y Fr(Y)l(ank)g(the)h(top)f -(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(the)i(curren) -o(t)f(cursor)g(p)q(osition.)0 2340 y Fq(yank-pop)f(\(M-y\))240 -2402 y Fr(Rotate)f(the)h(kill-ring,)i(and)e(y)o(ank)g(the)g(new)g(top.) -19 b(Y)l(ou)14 b(can)g(only)g(do)g(this)g(if)g(the)g(prior)g(command) -240 2464 y(is)i(y)o(ank)f(or)f(y)o(ank-p)q(op.)0 2670 -y Fk(1.4.5)30 b(Sp)r(ecifying)15 b(Numeric)h(Argumen)n(ts)p -eop -16 17 bop 0 -58 a Fr(16)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(digit-argument)c(\(M-0,)i(M-1,)f(...)h(M--\))240 -246 y Fr(Add)j(this)g(digit)h(to)e(the)h(argumen)o(t)e(already)i(accum) -o(ulating,)h(or)e(start)g(a)g(new)h(argumen)o(t.)26 b -Fq(M--)240 308 y Fr(starts)14 b(a)h(negativ)o(e)g(argumen)o(t.)0 -403 y Fq(universal-argument)e(\(\))240 465 y Fr(This)f(is)h(another)e -(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)12 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)g(or)f(more)240 -527 y(digits,)19 b(optionally)g(with)f(a)g(leading)h(min)o(us)f(sign,)h -(those)e(digits)i(de\014ne)g(the)f(argumen)o(t.)27 b(If)18 -b(the)240 590 y(command)12 b(is)h(follo)o(w)o(ed)g(b)o(y)f(digits,)i -(executing)f Fq(universal-argument)d Fr(again)j(ends)g(the)f(n)o -(umeric)240 652 y(argumen)o(t,)i(but)h(is)g(otherwise)g(ignored.)20 -b(As)15 b(a)f(sp)q(ecial)j(case,)d(if)h(this)g(command)g(is)g -(immediately)240 714 y(follo)o(w)o(ed)e(b)o(y)f(a)h(c)o(haracter)e -(that)h(is)h(neither)h(a)e(digit)i(or)e(min)o(us)h(sign,)g(the)g -(argumen)o(t)f(coun)o(t)g(for)g(the)240 776 y(next)i(command)g(is)h(m)o -(ultiplied)i(b)o(y)d(four.)19 b(The)c(argumen)o(t)e(coun)o(t)h(is)h -(initially)i(one,)d(so)g(executing)240 839 y(this)k(function)g(the)f -(\014rst)g(time)g(mak)o(es)g(the)g(argumen)o(t)g(coun)o(t)g(four,)g(a)g -(second)h(time)f(mak)o(es)g(the)240 901 y(argumen)o(t)d(coun)o(t)h -(sixteen,)h(and)f(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f(b) -q(ound)h(to)f(a)g(k)o(ey)l(.)0 1143 y Fk(1.4.6)30 b(Letting)14 -b(Readline)h(T)n(yp)r(e)h(F)-5 b(or)14 b(Y)-5 b(ou)0 -1301 y Fq(complete)14 b(\(TAB\))240 1363 y Fr(A)o(ttempt)i(to)h(do)g -(completion)i(on)e(the)g(text)g(b)q(efore)h(the)f(cursor.)26 -b(This)18 b(is)g(application-sp)q(eci\014c.)240 1425 -y(Generally)l(,)h(if)f(y)o(ou)f(are)h(t)o(yping)g(a)f(\014lename)i -(argumen)o(t,)e(y)o(ou)g(can)h(do)f(\014lename)i(completion;)g(if)240 -1487 y(y)o(ou)f(are)f(t)o(yping)i(a)e(command,)i(y)o(ou)e(can)i(do)f -(command)g(completion,)h(if)g(y)o(ou)e(are)h(t)o(yping)g(in)h(a)240 -1550 y(sym)o(b)q(ol)e(to)f(GDB,)g(y)o(ou)g(can)h(do)g(sym)o(b)q(ol)g -(name)g(completion,)h(if)f(y)o(ou)f(are)h(t)o(yping)g(in)g(a)g(v)m -(ariable)240 1612 y(to)e(Bash,)f(y)o(ou)h(can)h(do)f(v)m(ariable)h -(name)g(completion,)g(and)f(so)g(on.)0 1707 y Fq(possible-completions)d -(\(M-?\))240 1769 y Fr(List)k(the)f(p)q(ossible)i(completions)f(of)f -(the)g(text)g(b)q(efore)h(the)f(cursor.)0 1864 y Fq(insert-completions) -e(\(M-*\))240 1926 y Fr(Insert)22 b(all)h(completions)g(of)f(the)g -(text)f(b)q(efore)h(p)q(oin)o(t)h(that)e(w)o(ould)h(ha)o(v)o(e)g(b)q -(een)h(generated)f(b)o(y)240 1989 y Fq(possible-completions)p -Fr(.)0 2231 y Fk(1.4.7)30 b(Keyb)r(oard)15 b(Macros)0 -2388 y Fq(start-kbd-macro)e(\(C-x)i(\(\))240 2451 y Fr(Begin)h(sa)o -(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o(to)f(the)g(curren)o(t) -g(k)o(eyb)q(oard)g(macro.)0 2545 y Fq(end-kbd-macro)e(\(C-x)i(\)\))240 -2608 y Fr(Stop)f(sa)o(ving)h(the)g(c)o(haracters)f(t)o(yp)q(ed)h(in)o -(to)f(the)h(curren)o(t)f(k)o(eyb)q(oard)h(macro)f(and)h(sa)o(v)o(e)f -(the)g(de\014ni-)240 2670 y(tion.)p eop -17 18 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(17)0 183 y Fq(call-last-kbd-macro)13 b(\(C-x)h(e\))240 -246 y Fr(Re-execute)20 b(the)f(last)f(k)o(eyb)q(oard)g(macro)g -(de\014ned,)i(b)o(y)f(making)f(the)h(c)o(haracters)f(in)h(the)g(macro) -240 308 y(app)q(ear)c(as)g(if)h(t)o(yp)q(ed)f(at)g(the)g(k)o(eyb)q -(oard.)0 546 y Fk(1.4.8)30 b(Some)15 b(Miscellaneous)h(Commands)0 -703 y Fq(re-read-init-file)d(\(C-x)h(C-r\))240 765 y -Fr(Read)23 b(in)h(the)e(con)o(ten)o(ts)g(of)h(the)f(inputrc)i(\014le,)h -(and)e(incorp)q(orate)g(an)o(y)f(bindings)i(or)f(v)m(ariable)240 -827 y(assignmen)o(ts)15 b(found)h(there.)0 921 y Fq(abort)e(\(C-g\))240 -984 y Fr(Ab)q(ort)f(the)h(curren)o(t)f(editing)i(command)e(and)h(ring)g -(the)f(terminal's)h(b)q(ell)h(\(sub)s(ject)f(to)e(the)i(setting)240 -1046 y(of)h Fq(bell-style)p Fr(\).)0 1140 y Fq(do-uppercase-version)d -(\(M-a,)j(M-b,)f(M-)p Fl(x)p Fq(,)h Fj(:)8 b(:)g(:)n -Fq(\))240 1202 y Fr(If)16 b(the)f(meta\014ed)g(c)o(haracter)g -Fl(x)k Fr(is)c(lo)o(w)o(ercase,)g(run)h(the)f(command)g(that)g(is)h(b)q -(ound)g(to)f(the)g(corre-)240 1264 y(sp)q(onding)h(upp)q(ercase)h(c)o -(haracter.)0 1358 y Fq(prefix-meta)d(\(ESC\))240 1421 -y Fr(Mak)o(e)g(the)g(next)h(c)o(haracter)f(that)g(y)o(ou)g(t)o(yp)q(e)h -(b)q(e)g(meta\014ed.)20 b(This)15 b(is)g(for)f(p)q(eople)i(without)e(a) -h(meta)240 1483 y(k)o(ey)l(.)20 b(T)o(yping)c(`)p Fq(ESC)e(f)p -Fr(')h(is)g(equiv)m(alen)o(t)i(to)e(t)o(yping)g(`)p Fq(M-f)p -Fr('.)0 1577 y Fq(undo)g(\(C-_,)f(C-x)h(C-u\))240 1639 -y Fr(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q(ered)g(for)e -(eac)o(h)h(line.)0 1733 y Fq(revert-line)f(\(M-r\))240 -1796 y Fr(Undo)20 b(all)h(c)o(hanges)f(made)g(to)f(this)i(line.)35 -b(This)21 b(is)f(lik)o(e)h(t)o(yping)f(the)g Fq(undo)g -Fr(command)g(enough)240 1858 y(times)15 b(to)g(get)g(bac)o(k)g(to)f -(the)i(b)q(eginning.)0 1952 y Fq(tilde-expand)e(\(M-~\))240 -2014 y Fr(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)0 2108 y Fq(set-mark)f(\(C-@\))240 2171 y Fr(Set)i(the)g(mark)f -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)23 b(If)16 b(a)f(n)o(umeric)i -(argumen)o(t)e(is)i(supplied,)h(the)e(mark)f(is)h(set)240 -2233 y(to)f(that)f(p)q(osition.)0 2327 y Fq(exchange-point-and-mark)e -(\(C-x)j(C-x\))240 2389 y Fr(Sw)o(ap)e(the)g(p)q(oin)o(t)h(with)f(the)g -(mark.)19 b(The)13 b(curren)o(t)g(cursor)g(p)q(osition)h(is)g(set)f(to) -f(the)i(sa)o(v)o(ed)e(p)q(osition,)240 2451 y(and)j(the)h(old)f(cursor) -g(p)q(osition)i(is)e(sa)o(v)o(ed)g(as)g(the)g(mark.)0 -2545 y Fq(character-search)e(\(C-]\))240 2608 y Fr(A)19 -b(c)o(haracter)e(is)j(read)e(and)h(p)q(oin)o(t)g(is)g(mo)o(v)o(ed)f(to) -g(the)g(next)h(o)q(ccurrence)h(of)e(that)g(c)o(haracter.)29 -b(A)240 2670 y(negativ)o(e)15 b(coun)o(t)g(searc)o(hes)g(for)g -(previous)h(o)q(ccurrences.)p eop -18 19 bop 0 -58 a Fr(18)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(character-search-backward)12 b(\(M-C-]\))240 -246 y Fr(A)i(c)o(haracter)f(is)h(read)g(and)f(p)q(oin)o(t)i(is)f(mo)o -(v)o(ed)f(to)g(the)h(previous)g(o)q(ccurrence)h(of)e(that)g(c)o -(haracter.)19 b(A)240 308 y(negativ)o(e)c(coun)o(t)g(searc)o(hes)g(for) -g(subsequen)o(t)h(o)q(ccurrences.)0 395 y Fq(insert-comment)d(\(M-#\)) -240 457 y Fr(The)19 b(v)m(alue)g(of)f(the)g Fq(comment-begin)f -Fr(v)m(ariable)i(is)g(inserted)g(at)f(the)g(b)q(eginning)j(of)d(the)g -(curren)o(t)240 519 y(line,)e(and)g(the)f(line)i(is)f(accepted)g(as)e -(if)i(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)0 607 -y Fq(dump-functions)c(\(\))240 669 y Fr(Prin)o(t)18 b(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(readline)h -(output)e(stream.)28 b(If)18 b(a)240 731 y(n)o(umeric)i(argumen)o(t)d -(is)i(supplied,)j(the)d(output)f(is)h(formatted)f(in)h(suc)o(h)g(a)f(w) -o(a)o(y)g(that)g(it)h(can)f(b)q(e)240 793 y(made)d(part)g(of)g(an)g -Fl(inputrc)k Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b)o -(y)e(default.)0 881 y Fq(dump-variables)e(\(\))240 943 -y Fr(Prin)o(t)j(all)h(of)f(the)h(settable)f(v)m(ariables)i(and)e(their) -h(v)m(alues)g(to)f(the)g(readline)i(output)e(stream.)23 -b(If)16 b(a)240 1005 y(n)o(umeric)k(argumen)o(t)d(is)i(supplied,)j(the) -d(output)f(is)h(formatted)f(in)h(suc)o(h)g(a)f(w)o(a)o(y)g(that)g(it)h -(can)f(b)q(e)240 1067 y(made)d(part)g(of)g(an)g Fl(inputrc)k -Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b)o(y)e(default.) -0 1155 y Fq(dump-macros)f(\(\))240 1217 y Fr(Prin)o(t)h(all)g(of)g(the) -f(readline)j(k)o(ey)d(sequences)i(b)q(ound)g(to)e(macros)g(and)h(the)f -(strings)h(they)g(ouput.)20 b(If)240 1279 y(a)c(n)o(umeric)h(argumen)o -(t)e(is)i(supplied,)h(the)e(output)g(is)g(formatted)f(in)i(suc)o(h)g(a) -e(w)o(a)o(y)g(that)h(it)g(can)g(b)q(e)240 1341 y(made)f(part)g(of)g(an) -g Fl(inputrc)k Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b) -o(y)e(default.)0 1566 y Fp(1.5)33 b(Readline)16 b(vi)g(Mo)r(de)62 -1703 y Fr(While)d(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o -(e)f(a)g(full)i(set)f(of)f Fq(vi)g Fr(editing)i(functions,)g(it)f(do)q -(es)g(con)o(tain)g(enough)0 1765 y(to)f(allo)o(w)i(simple)g(editing)g -(of)f(the)g(line.)20 b(The)13 b(Readline)h Fq(vi)d Fr(mo)q(de)i(b)q -(eha)o(v)o(es)f(as)g(sp)q(eci\014ed)i(in)e(the)h Fm(POSIX)f -Fr(1003.2)0 1827 y(standard.)62 1964 y(In)17 b(order)e(to)g(switc)o(h)h -(in)o(teractiv)o(ely)h(b)q(et)o(w)o(een)f Fq(emacs)f -Fr(and)h Fq(vi)f Fr(editing)i(mo)q(des,)f(use)g(the)g(command)f(M-C-j)0 -2026 y(\(toggle-editing-mo)q(de\).)21 b(The)15 b(Readline)j(default)e -(is)f Fq(emacs)g Fr(mo)q(de.)62 2163 y(When)k(y)o(ou)f(en)o(ter)g(a)g -(line)i(in)g Fq(vi)e Fr(mo)q(de,)h(y)o(ou)f(are)g(already)g(placed)i -(in)f(`insertion')g(mo)q(de,)g(as)f(if)h(y)o(ou)f(had)0 -2226 y(t)o(yp)q(ed)e(an)f(`)p Fq(i)p Fr('.)20 b(Pressing)c -Fq(ESC)f Fr(switc)o(hes)h(y)o(ou)f(in)o(to)h(`command')f(mo)q(de,)g -(where)h(y)o(ou)f(can)h(edit)g(the)g(text)f(of)g(the)0 -2288 y(line)j(with)e(the)h(standard)e Fq(vi)h Fr(mo)o(v)o(emen)o(t)f(k) -o(eys,)h(mo)o(v)o(e)g(to)f(previous)i(history)f(lines)i(with)f(`)p -Fq(k)p Fr(')e(and)h(subsequen)o(t)0 2350 y(lines)h(with)e(`)p -Fq(j)p Fr(',)f(and)i(so)e(forth.)p eop -19 20 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(19)0 183 y Fn(2)41 b(Programming)16 b(with)f(GNU)h -(Readline)62 394 y Fr(This)j(c)o(hapter)f(describ)q(es)i(the)e(in)o -(terface)g(b)q(et)o(w)o(een)h(the)f(GNU)g(Readline)j(Library)d(and)h -(other)f(programs.)0 456 y(If)h(y)o(ou)g(are)f(a)h(programmer,)f(and)i -(y)o(ou)e(wish)i(to)e(include)j(the)e(features)g(found)g(in)h(GNU)f -(Readline)i(suc)o(h)e(as)0 518 y(completion,)f(line)h(editing,)f(and)f -(in)o(teractiv)o(e)h(history)f(manipulation)h(in)g(y)o(our)f(o)o(wn)f -(programs,)g(this)h(section)0 581 y(is)f(for)e(y)o(ou.)0 -848 y Fp(2.1)33 b(Basic)14 b(Beha)n(vior)62 989 y Fr(Man)o(y)c -(programs)g(pro)o(vide)h(a)g(command)f(line)j(in)o(terface,)e(suc)o(h)g -(as)g Fq(mail)p Fr(,)f Fq(ftp)p Fr(,)h(and)g Fq(sh)p -Fr(.)18 b(F)l(or)10 b(suc)o(h)i(programs,)0 1052 y(the)17 -b(default)h(b)q(eha)o(viour)g(of)e(Readline)k(is)e(su\016cien)o(t.)26 -b(This)18 b(section)f(describ)q(es)i(ho)o(w)e(to)f(use)i(Readline)h(in) -f(the)0 1114 y(simplest)e(w)o(a)o(y)e(p)q(ossible,)j(p)q(erhaps)f(to)e -(replace)j(calls)f(in)g(y)o(our)f(co)q(de)g(to)g Fq(gets\(\))f -Fr(or)h Fq(fgets)f(\(\))p Fr(.)62 1256 y(The)g(function)g -Fq(readline)g(\(\))f Fr(prin)o(ts)h(a)f(prompt)g(and)h(then)g(reads)f -(and)g(returns)h(a)f(single)i(line)g(of)e(text)g(from)0 -1318 y(the)g(user.)19 b(The)13 b(line)i Fq(readline)d -Fr(returns)g(is)i(allo)q(cated)g(with)f Fq(malloc)h(\(\))p -Fr(;)f(y)o(ou)g(should)h Fq(free)g(\(\))f Fr(the)g(line)h(when)0 -1380 y(y)o(ou)h(are)g(done)g(with)h(it.)k(The)15 b(declaration)h(for)f -Fq(readline)f Fr(in)i(ANSI)g(C)f(is)120 1512 y Fq(char)23 -b(*readline)g(\(char)g(*)p Fl(prompt)q Fq(\);)0 1653 -y Fr(So,)15 b(one)g(migh)o(t)g(sa)o(y)120 1785 y Fq(char)23 -b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)0 -1927 y Fr(in)17 b(order)g(to)f(read)g(a)g(line)j(of)d(text)g(from)g -(the)g(user.)24 b(The)17 b(line)h(returned)f(has)g(the)f(\014nal)i -(newline)g(remo)o(v)o(ed,)e(so)0 1989 y(only)g(the)f(text)g(remains.)62 -2131 y(If)g Fq(readline)f Fr(encoun)o(ters)h(an)f Fq(EOF)h -Fr(while)h(reading)f(the)g(line,)h(and)f(the)g(line)h(is)f(empt)o(y)g -(at)f(that)g(p)q(oin)o(t,)h(then)0 2193 y Fq(\(char)f(*\)NULL)h -Fr(is)h(returned.)k(Otherwise,)15 b(the)h(line)h(is)e(ended)i(just)d -(as)h(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)62 -2335 y(If)g(y)o(ou)g(w)o(an)o(t)f(the)h(user)g(to)f(b)q(e)i(able)f(to)g -(get)f(at)g(the)h(line)i(later,)e(\(with)g Fq(C-P)f Fr(for)g -(example\),)i(y)o(ou)e(m)o(ust)h(call)0 2397 y Fq(add_history)d(\(\))h -Fr(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)c(in)j(a)f -Fl(history)k Fr(list)d(of)f(suc)o(h)h(lines.)120 2528 -y Fq(add_history)22 b(\(line\);)0 2670 y Fr(F)l(or)15 -b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f -(asso)q(ciated)g(man)o(ual.)p eop -20 21 bop 0 -58 a Fr(20)1449 b(GNU)15 b(Readline)i(Library)62 -183 y(It)e(is)g(preferable)g(to)f(a)o(v)o(oid)g(sa)o(ving)h(empt)o(y)f -(lines)i(on)f(the)f(history)h(list,)g(since)g(users)g(rarely)g(ha)o(v)o -(e)f(a)g(burning)0 246 y(need)i(to)e(reuse)h(a)f(blank)i(line.)21 -b(Here)15 b(is)g(a)g(function)g(whic)o(h)h(usefully)g(replaces)g(the)f -(standard)f Fq(gets)h(\(\))f Fr(library)0 308 y(function,)i(and)f(has)g -(the)g(adv)m(an)o(tage)g(of)g(no)g(static)g(bu\013er)g(to)g(o)o(v)o -(er\015o)o(w:)120 445 y Fq(/*)24 b(A)f(static)g(variable)g(for)h -(holding)e(the)i(line.)f(*/)120 497 y(static)g(char)g(*line_read)g(=)h -(\(char)f(*\)NULL;)120 601 y(/*)h(Read)f(a)h(string,)f(and)g(return)g -(a)h(pointer)f(to)g(it.)48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)120 -653 y(char)f(*)120 705 y(rl_gets)g(\(\))120 757 y({)168 -809 y(/*)g(If)h(the)f(buffer)g(has)h(already)f(been)g(allocated,)g -(return)g(the)g(memory)239 861 y(to)h(the)f(free)h(pool.)f(*/)168 -912 y(if)g(\(line_read\))215 964 y({)263 1016 y(free)g(\(line_read\);) -263 1068 y(line_read)g(=)h(\(char)f(*\)NULL;)215 1120 -y(})168 1224 y(/*)g(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)168 -1276 y(line_read)f(=)i(readline)f(\(""\);)168 1379 y(/*)g(If)h(the)f -(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f(the)h(history.)f -(*/)168 1431 y(if)g(\(line_read)g(&&)g(*line_read\))215 -1483 y(add_history)g(\(line_read\);)168 1587 y(return)g(\(line_read\);) -120 1639 y(})62 1787 y Fr(This)15 b(function)g(giv)o(es)f(the)g(user)g -(the)g(default)h(b)q(eha)o(viour)g(of)e Fq(TAB)h Fr(completion:)20 -b(completion)15 b(on)f(\014le)h(names.)0 1849 y(If)h(y)o(ou)f(do)h(not) -f(w)o(an)o(t)g(Readline)j(to)d(complete)i(on)e(\014lenames,)i(y)o(ou)e -(can)h(c)o(hange)g(the)g(binding)i(of)d(the)h Fq(TAB)f -Fr(k)o(ey)0 1912 y(with)h Fq(rl_bind_key)d(\(\))p Fr(.)120 -2049 y Fq(int)23 b(rl_bind_key)g(\(int)g Fl(k)o(ey)p -Fq(,)h(int)f(\(*)p Fl(function)p Fq(\)\(\)\);)62 2197 -y(rl_bind_key)14 b(\(\))f Fr(tak)o(es)g(t)o(w)o(o)f(argumen)o(ts:)19 -b Fl(k)o(ey)e Fr(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)f -(to)h(bind,)i(and)f Fl(function)0 2260 y Fr(is)g(the)g(address)g(of)f -(the)h(function)g(to)f(call)i(when)f Fl(k)o(ey)j Fr(is)d(pressed.)20 -b(Binding)c Fq(TAB)d Fr(to)g Fq(rl_insert)h(\(\))f Fr(mak)o(es)g -Fq(TAB)0 2322 y Fr(insert)i(itself.)20 b Fq(rl_bind_key)14 -b(\(\))g Fr(returns)g(non-zero)h(if)g Fl(k)o(ey)j Fr(is)d(not)f(a)g(v)m -(alid)i(ASCI)q(I)f(c)o(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)0 -2384 y(0)g(and)g(255\).)62 2532 y(Th)o(us,)g(to)g(disable)h(the)g -(default)f Fq(TAB)g Fr(b)q(eha)o(vior,)h(the)f(follo)o(wing)h -(su\016ces:)120 2670 y Fq(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)p -eop -21 22 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(21)62 183 y(This)12 b(co)q(de)f(should)h(b)q(e)f -(executed)h(once)f(at)f(the)h(start)f(of)g(y)o(our)g(program;)h(y)o(ou) -g(migh)o(t)f(write)h(a)g(function)g(called)0 246 y Fq -(initialize_readline)i(\(\))j Fr(whic)o(h)h(p)q(erforms)f(this)h(and)f -(other)g(desired)i(initializations,)h(suc)o(h)e(as)f(installing)0 -308 y(custom)f(completers)g(\(see)h(Section)g(2.5)e([Custom)g -(Completers],)h(page)g(34\).)0 562 y Fp(2.2)33 b(Custom)14 -b(F)-6 b(unctions)62 702 y Fr(Readline)18 b(pro)o(vides)f(man)o(y)e -(functions)i(for)e(manipulating)j(the)e(text)f(of)g(the)h(line,)i(but)e -(it)g(isn't)g(p)q(ossible)i(to)0 765 y(an)o(ticipate)i(the)g(needs)g -(of)f(all)h(programs.)31 b(This)20 b(section)g(describ)q(es)h(the)f(v)m -(arious)g(functions)g(and)g(v)m(ariables)0 827 y(de\014ned)c(within)f -(the)g(Readline)i(library)e(whic)o(h)g(allo)o(w)g(a)f(user)g(program)f -(to)h(add)h(customized)g(functionalit)o(y)h(to)0 889 -y(Readline.)0 1127 y Fk(2.2.1)30 b(The)15 b(F)-5 b(unction)14 -b(T)n(yp)r(e)62 1267 y Fr(F)l(or)j(readabilt)o(y)l(,)h(w)o(e)f(declare) -i(a)e(new)g(t)o(yp)q(e)h(of)f(ob)s(ject,)f(called)j Fl(F)l(unction)p -Fr(.)28 b(A)17 b Fq(Function)f Fr(is)i(a)f(C)g(function)0 -1329 y(whic)o(h)f(returns)f(an)g Fq(int)p Fr(.)20 b(The)15 -b(t)o(yp)q(e)g(declaration)h(for)f Fq(Function)f Fr(is:)0 -1470 y Fq(typedef)g(int)h(Function)f(\(\);)62 1610 y -Fr(The)i(reason)f(for)g(declaring)i(this)f(new)g(t)o(yp)q(e)f(is)h(to)f -(mak)o(e)g(it)h(easier)g(to)f(write)g(co)q(de)h(describing)i(p)q(oin)o -(ters)e(to)0 1672 y(C)g(functions.)25 b(Let)17 b(us)f(sa)o(y)g(w)o(e)g -(had)h(a)f(v)m(ariable)i(called)g Fl(func)i Fr(whic)o(h)d(w)o(as)f(a)g -(p)q(oin)o(ter)h(to)f(a)g(function.)25 b(Instead)0 1735 -y(of)15 b(the)g(classic)h(C)f(declaration)62 1875 y Fq(int)g -(\(*\)\(\)func;)0 2015 y Fr(w)o(e)g(ma)o(y)f(write)62 -2156 y Fq(Function)g(*func;)0 2296 y Fr(Similarly)l(,)j(there)e(are)120 -2426 y Fq(typedef)23 b(void)g(VFunction)g(\(\);)120 2478 -y(typedef)g(char)g(*CPFunction)g(\(\);)g Fr(and)120 2530 -y Fq(typedef)g(char)g(**CPPFunction)f(\(\);)0 2670 y -Fr(for)12 b(functions)h(returning)g(no)g(v)m(alue,)g -Fq(pointer)i(to)g(char)p Fr(,)d(and)g Fq(pointer)i(to)h(pointer)g(to)f -(char)p Fr(,)e(resp)q(ectiv)o(ely)l(.)p eop -22 23 bop 0 -58 a Fr(22)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(2.2.2)30 b(W)-5 b(riting)15 b(a)g(New)g(F)-5 -b(unction)62 325 y Fr(In)22 b(order)f(to)g(write)g(new)h(functions)g -(for)f(Readline,)j(y)o(ou)d(need)h(to)f(kno)o(w)g(the)g(calling)i(con)o -(v)o(en)o(tions)f(for)0 387 y(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)17 -b(functions,)g(and)f(the)h(names)f(of)g(the)h(v)m(ariables)h(that)d -(describ)q(e)j(the)f(curren)o(t)f(state)g(of)g(the)0 -449 y(line)h(read)e(so)g(far.)62 591 y(The)h(calling)h(sequence)f(for)f -(a)f(command)i Fq(foo)e Fr(lo)q(oks)i(lik)o(e)120 722 -y Fq(foo)23 b(\(int)h(count,)f(int)g(key\))0 864 y Fr(where)f -Fl(coun)o(t)g Fr(is)g(the)f(n)o(umeric)i(argumen)o(t)d(\(or)h(1)g(if)h -(defaulted\))g(and)f Fl(k)o(ey)26 b Fr(is)21 b(the)h(k)o(ey)f(that)g -(in)o(v)o(ok)o(ed)h(this)0 926 y(function.)62 1068 y(It)f(is)h -(completely)g(up)f(to)f(the)h(function)h(as)f(to)f(what)g(should)i(b)q -(e)g(done)f(with)g(the)g(n)o(umeric)h(argumen)o(t.)0 -1130 y(Some)c(functions)g(use)g(it)g(as)f(a)h(rep)q(eat)g(coun)o(t,)f -(some)h(as)f(a)g(\015ag,)h(and)g(others)f(to)g(c)o(ho)q(ose)h -(alternate)f(b)q(eha)o(vior)0 1192 y(\(refreshing)12 -b(the)g(curren)o(t)g(line)h(as)f(opp)q(osed)g(to)f(refreshing)i(the)f -(screen,)g(for)g(example\).)19 b(Some)12 b(c)o(ho)q(ose)f(to)h(ignore)0 -1255 y(it.)24 b(In)17 b(general,)g(if)g(a)g(function)g(uses)g(the)g(n)o -(umeric)g(argumen)o(t)f(as)g(a)g(rep)q(eat)h(coun)o(t,)f(it)h(should)h -(b)q(e)f(able)g(to)f(do)0 1317 y(something)f(useful)g(with)g(b)q(oth)f -(negativ)o(e)h(and)f(p)q(ositiv)o(e)i(argumen)o(ts.)i(A)o(t)c(the)h(v)o -(ery)f(least,)g(it)h(should)g(b)q(e)g(a)o(w)o(are)0 1379 -y(that)f(it)i(can)f(b)q(e)h(passed)g(a)e(negativ)o(e)i(argumen)o(t.)0 -1645 y Fp(2.3)33 b(Readline)16 b(V)-6 b(ariables)62 1787 -y Fr(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h -(writers.)1736 1963 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 1963 18 3 v 21 w(line)p 320 1963 V -23 w(bu\013er)120 2025 y Fr(This)f(is)g(the)f(line)i(gathered)e(so)g -(far.)25 b(Y)l(ou)18 b(are)f(w)o(elcome)g(to)g(mo)q(dify)h(the)f(con)o -(ten)o(ts)g(of)f(the)i(line,)120 2087 y(but)d(see)h(Section)g(2.4.5)d -([Allo)o(wing)k(Undoing],)e(page)g(28.)1736 2263 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 2263 V 21 w(p)r(oin)n(t)120 -2325 y Fr(The)15 b(o\013set)g(of)f(the)i(curren)o(t)f(cursor)g(p)q -(osition)h(in)g Fq(rl_line_buffer)d Fr(\(the)i Fl(p)q(oin)o(t)q -Fr(\).)1736 2501 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p -140 2501 V 21 w(end)120 2563 y Fr(The)d(n)o(um)o(b)q(er)f(of)g(c)o -(haracters)g(presen)o(t)g(in)h Fq(rl_line_buffer)p Fr(.)k(When)c -Fq(rl_point)e Fr(is)i(at)f(the)g(end)120 2626 y(of)f(the)g(line,)i -Fq(rl_point)d Fr(and)h Fq(rl_end)f Fr(are)h(equal.)p -eop -23 24 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(23)1736 183 y(V)l(ariable)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(mark)120 246 y Fr(The)h(mark)e(\(sa)o(v)o -(ed)h(p)q(osition\))h(in)g(the)f(curren)o(t)h(line.)37 -b(If)20 b(set,)h(the)g(mark)e(and)i(p)q(oin)o(t)g(de\014ne)g(a)120 -308 y Fl(region)p Fr(.)1736 473 y(V)l(ariable)-1899 b -Fi(int)20 b Fh(rl)p 140 473 V 21 w(done)120 536 y Fr(Setting)13 -b(this)h(to)f(a)f(non-zero)i(v)m(alue)g(causes)f(Readline)j(to)c -(return)h(the)h(curren)o(t)f(line)h(immediately)l(.)1736 -701 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p 140 701 -V 21 w(p)r(ending)p 361 701 V 20 w(input)120 764 y Fr(Setting)15 -b(this)f(to)g(a)g(v)m(alue)i(mak)o(es)d(it)i(the)f(next)h(k)o(eystrok)o -(e)e(read.)19 b(This)c(is)g(a)f(w)o(a)o(y)f(to)h(stu\013)g(a)g(single) -120 826 y(c)o(haracter)g(in)o(to)i(the)f(input)h(stream.)1736 -991 y(V)l(ariable)-1899 b Fi(char)20 b(*)f Fh(rl)p 211 -991 V 21 w(prompt)120 1054 y Fr(The)c(prompt)e(Readline)k(uses.)j(This) -15 b(is)f(set)h(from)e(the)h(argumen)o(t)g(to)g Fq(readline)g(\(\))p -Fr(,)f(and)i(should)120 1116 y(not)g(b)q(e)h(assigned)f(to)g(directly)l -(.)1736 1282 y(V)l(ariable)-1899 b Fi(char)20 b(*)f Fh(rl)p -211 1282 V 21 w(library)p 400 1282 V 22 w(v)n(ersion)120 -1344 y Fr(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g -(of)f(the)g(library)l(.)1736 1509 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1509 V 21 w(terminal)p -443 1509 V 21 w(name)120 1572 y Fr(The)c(terminal)h(t)o(yp)q(e,)f(used) -h(for)f(initialization.)1736 1737 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1737 V 21 w(readline)p -430 1737 V 22 w(name)120 1800 y Fr(This)f(v)m(ariable)h(is)f(set)f(to)g -(a)g(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.) -29 b(The)18 b(v)m(alue)120 1862 y(allo)o(ws)f(conditional)h(parsing)f -(of)f(the)g(inputrc)i(\014le)f(\(see)g(Section)g(1.3.2)e([Conditional)j -(Init)f(Con-)120 1924 y(structs],)d(page)h(8\).)1736 -2090 y(V)l(ariable)-1899 b Fi(FILE)20 b(*)f Fh(rl)p 211 -2090 V 21 w(instream)120 2152 y Fr(The)c(stdio)h(stream)e(from)h(whic)o -(h)h(Readline)h(reads)e(input.)1736 2318 y(V)l(ariable)-1899 -b Fi(FILE)20 b(*)f Fh(rl)p 211 2318 V 21 w(outstream)120 -2380 y Fr(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q -(erforms)e(output.)1736 2545 y(V)l(ariable)-1899 b Fi(Function)20 -b(*)g Fh(rl)p 316 2545 V 21 w(startup)p 520 2545 V 20 -w(ho)r(ok)120 2608 y Fr(If)13 b(non-zero,)h(this)f(is)h(the)f(address)g -(of)g(a)f(function)i(to)f(call)h(just)f(b)q(efore)g Fq(readline)f -Fr(prin)o(ts)h(the)g(\014rst)120 2670 y(prompt.)p eop -24 25 bop 0 -58 a Fr(24)1449 b(GNU)15 b(Readline)i(Library)1736 -183 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g Fh(rl)p -316 183 18 3 v 21 w(ev)n(en)n(t)p 469 183 V 22 w(ho)r(ok)120 -246 y Fr(If)13 b(non-zero,)f(this)h(is)g(the)g(address)f(of)g(a)g -(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(readline)h(is)f(w)o -(aiting)120 308 y(for)i(terminal)h(input.)1736 471 y(V)l(ariable)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 471 V 21 w(getc)p -439 471 V 21 w(function)120 533 y Fr(If)c(non-zero,)h -Fq(readline)d Fr(will)k(call)f(indirectly)i(through)c(this)i(p)q(oin)o -(ter)g(to)e(get)h(a)f(c)o(haracter)h(from)120 595 y(the)k(input)h -(stream.)33 b(By)20 b(default,)i(it)e(is)g(set)g(to)g -Fq(rl_getc)p Fr(,)f(the)h(default)h Fq(readline)e Fr(c)o(haracter)120 -657 y(input)d(function)g(\(see)f(Section)h(2.4.8)e([Utilit)o(y)i(F)l -(unctions],)f(page)g(31\).)1736 820 y(V)l(ariable)-1899 -b Fi(VFunction)20 b(*)g Fh(rl)p 342 820 V 21 w(redispla)n(y)p -586 820 V 22 w(function)120 883 y Fr(If)f(non-zero,)h -Fq(readline)e Fr(will)i(call)g(indirectly)i(through)c(this)i(p)q(oin)o -(ter)f(to)f(up)q(date)i(the)f(displa)o(y)120 945 y(with)d(the)g(curren) -o(t)f(con)o(ten)o(ts)g(of)h(the)f(editing)i(bu\013er.)22 -b(By)15 b(default,)h(it)g(is)h(set)e(to)g Fq(rl_redisplay)p -Fr(,)120 1007 y(the)g(default)h Fq(readline)e Fr(redispla)o(y)i -(function)g(\(see)g(Section)g(2.4.6)d([Redispla)o(y],)j(page)f(29\).) -1736 1170 y(V)l(ariable)-1899 b Fi(Keymap)20 b Fh(rl)p -218 1170 V 21 w(executing)p 476 1170 V 22 w(k)n(eymap)120 -1232 y Fr(This)15 b(v)m(ariable)h(is)f(set)g(to)f(the)g(k)o(eymap)h -(\(see)f(Section)i(2.4.2)d([Keymaps],)h(page)g(25\))g(in)h(whic)o(h)h -(the)120 1294 y(curren)o(tly)g(executing)g(readline)h(function)f(w)o -(as)e(found.)1736 1457 y(V)l(ariable)-1899 b Fi(Keymap)20 -b Fh(rl)p 218 1457 V 21 w(binding)p 426 1457 V 22 w(k)n(eymap)120 -1520 y Fr(This)15 b(v)m(ariable)h(is)f(set)g(to)f(the)g(k)o(eymap)h -(\(see)f(Section)i(2.4.2)d([Keymaps],)h(page)g(25\))g(in)h(whic)o(h)h -(the)120 1582 y(last)f(k)o(ey)g(binding)i(o)q(ccurred.)0 -1809 y Fp(2.4)33 b(Readline)16 b(Con)n(v)n(enience)g(F)-6 -b(unctions)0 2019 y Fk(2.4.1)30 b(Naming)15 b(a)g(F)-5 -b(unction)62 2157 y Fr(The)19 b(user)f(can)g(dynamically)i(c)o(hange)e -(the)g(bindings)i(of)e(k)o(eys)f(while)j(using)f(Readline.)30 -b(This)19 b(is)g(done)f(b)o(y)0 2219 y(represen)o(ting)f(the)g -(function)h(with)f(a)g(descriptiv)o(e)h(name.)25 b(The)17 -b(user)g(is)g(able)h(to)e(t)o(yp)q(e)h(the)g(descriptiv)o(e)h(name)0 -2281 y(when)e(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14 -b(in)j(an)e(init)h(\014le,)g(one)f(migh)o(t)g(\014nd)120 -2408 y Fq(Meta-Rubout:)46 b(backward-kill-word)62 2545 -y Fr(This)21 b(binds)f(the)g(k)o(eystrok)o(e)f Fq(META-RUBOUT)f -Fr(to)h(the)h(function)g Fl(descriptiv)o(ely)26 b Fr(named)20 -b Fq(backward-kill-)0 2608 y(word)p Fr(.)j(Y)l(ou,)16 -b(as)g(the)g(programmer,)f(should)i(bind)h(the)e(functions)i(y)o(ou)d -(write)i(to)e(descriptiv)o(e)j(names)e(as)g(w)o(ell.)0 -2670 y(Readline)i(pro)o(vides)d(a)g(function)h(for)f(doing)g(that:)p -eop -25 26 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(25)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(add)p 253 183 V 20 w(defun)i -Fg(\()p Fq(char)14 b(*name,)g(Function)g(*function,)g(int)h(key)p -Fg(\))120 246 y Fr(Add)20 b Fl(name)i Fr(to)d(the)h(list)g(of)f(named)h -(functions.)33 b(Mak)o(e)19 b Fl(function)i Fr(b)q(e)f(the)f(function)i -(that)d(gets)120 308 y(called.)j(If)16 b Fl(k)o(ey)j -Fr(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fl(function)i -Fr(using)g Fq(rl_bind_key)e(\(\))p Fr(.)62 471 y(Using)i(this)g -(function)g(alone)g(is)g(su\016cien)o(t)h(for)d(most)h(applications.)22 -b(It)16 b(is)g(the)f(recommended)i(w)o(a)o(y)d(to)h(add)0 -533 y(a)i(few)h(functions)g(to)f(the)h(default)g(functions)h(that)e -(Readline)j(has)d(built)i(in.)28 b(If)18 b(y)o(ou)g(need)g(to)f(do)h -(something)0 595 y(other)c(than)h(adding)h(a)e(function)i(to)e -(Readline,)j(y)o(ou)d(ma)o(y)g(need)i(to)e(use)h(the)g(underlying)h -(functions)g(describ)q(ed)0 658 y(b)q(elo)o(w.)0 869 -y Fk(2.4.2)30 b(Selecting)15 b(a)g(Keymap)62 1006 y Fr(Key)k(bindings)i -(tak)o(e)c(place)j(on)e(a)g Fl(k)o(eymap)p Fr(.)30 b(The)18 -b(k)o(eymap)h(is)g(the)f(asso)q(ciation)h(b)q(et)o(w)o(een)g(the)f(k)o -(eys)h(that)0 1069 y(the)g(user)g(t)o(yp)q(es)g(and)g(the)g(functions)g -(that)f(get)h(run.)30 b(Y)l(ou)20 b(can)e(mak)o(e)h(y)o(our)f(o)o(wn)g -(k)o(eymaps,)h(cop)o(y)g(existing)0 1131 y(k)o(eymaps,)14 -b(and)i(tell)g(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1725 -1294 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -1294 V 21 w(mak)n(e)p 370 1294 V 20 w(bare)p 500 1294 -V 20 w(k)n(eymap)j Fg(\(\))120 1356 y Fr(Returns)14 b(a)f(new,)g(empt)o -(y)g(k)o(eymap.)19 b(The)14 b(space)f(for)g(the)h(k)o(eymap)f(is)g -(allo)q(cated)i(with)e Fq(malloc)i(\(\))p Fr(;)120 1419 -y(y)o(ou)g(should)h Fq(free)f(\(\))g Fr(it)g(when)h(y)o(ou)f(are)f -(done.)1725 1582 y(F)l(unction)-1899 b Fi(Keymap)20 b -Fh(rl)p 218 1582 V 21 w(cop)n(y)p 353 1582 V 21 w(k)n(eymap)j -Fg(\()p Fq(Keymap)14 b(map)p Fg(\))120 1644 y Fr(Return)i(a)f(new)g(k)o -(eymap)g(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fl(map)p -Fr(.)1725 1807 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p -218 1807 V 21 w(mak)n(e)p 370 1807 V 20 w(k)n(eymap)j -Fg(\(\))120 1869 y Fr(Return)c(a)f(new)h(k)o(eymap)f(with)h(the)f(prin) -o(ting)i(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1407 1869 -14 2 v 16 w(insert,)i(the)e(lo)o(w)o(ercase)120 1932 -y(Meta)13 b(c)o(haracters)g(b)q(ound)h(to)f(run)h(their)g(equiv)m(alen) -o(ts,)i(and)d(the)h(Meta)f(digits)h(b)q(ound)h(to)e(pro)q(duce)120 -1994 y(n)o(umeric)j(argumen)o(ts.)1725 2157 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 2157 18 3 v 21 w(discard)p -366 2157 V 21 w(k)n(eymap)i Fg(\()p Fq(Keymap)14 b(keymap)p -Fg(\))120 2219 y Fr(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fl(k)o(eymap)p Fr(.)62 2382 y(Readline)20 b(has)d(sev)o(eral)h(in)o -(ternal)g(k)o(eymaps.)26 b(These)18 b(functions)g(allo)o(w)g(y)o(ou)f -(to)g(c)o(hange)g(whic)o(h)h(k)o(eymap)f(is)0 2445 y(activ)o(e.)1725 -2608 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -2608 V 21 w(get)p 316 2608 V 21 w(k)n(eymap)i Fg(\(\))120 -2670 y Fr(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)p -eop -26 27 bop 0 -58 a Fr(26)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 183 -18 3 v 21 w(set)p 258 183 V 21 w(k)n(eymap)i Fg(\()p -Fq(Keymap)14 b(keymap)p Fg(\))120 246 y Fr(Mak)o(es)g -Fl(k)o(eymap)j Fr(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1725 -420 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -420 V 21 w(get)p 316 420 V 21 w(k)n(eymap)p 530 420 V -20 w(b)n(y)p 610 420 V 21 w(name)i Fg(\()p Fq(char)14 -b(*name)p Fg(\))120 482 y Fr(Return)19 b(the)g(k)o(eymap)f(matc)o(hing) -g Fl(name)p Fr(.)30 b Fl(name)21 b Fr(is)e(one)g(whic)o(h)g(w)o(ould)g -(b)q(e)g(supplied)i(in)e(a)f Fq(set)120 544 y(keymap)c -Fr(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(5\).)1725 719 y(F)l(unction)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 719 V 21 w(get)p 309 719 V 21 w(k)n(eymap)p -523 719 V 20 w(name)i Fg(\()p Fq(Keymap)14 b(keymap)p -Fg(\))120 781 y Fr(Return)19 b(the)g(name)f(matc)o(hing)h -Fl(k)o(eymap)p Fr(.)29 b Fl(name)21 b Fr(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)g(supplied)i(in)e(a)f Fq(set)120 843 y(keymap)c -Fr(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(5\).)0 1088 y Fk(2.4.3)30 b(Binding)15 b(Keys)62 -1229 y Fr(Y)l(ou)h(asso)q(ciate)f(k)o(eys)f(with)i(functions)g(through) -e(the)i(k)o(eymap.)j(Readline)f(has)c(sev)o(eral)i(in)o(ternal)g(k)o -(eymaps:)0 1291 y Fq(emacs_standard_keymap)p Fr(,)i Fq -(emacs_meta_keymap)p Fr(,)g Fq(emacs_ctlx_keymap)p Fr(,)h -Fq(vi_movement_keymap)p Fr(,)f(and)0 1354 y Fq(vi_insertion_keymap)p -Fr(.)h Fq(emacs_standard_keymap)13 b Fr(is)k(the)f(default,)g(and)g -(the)g(examples)h(in)f(this)h(man)o(ual)0 1416 y(assume)e(that.)62 -1557 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1725 -1731 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1731 -V 21 w(bind)p 272 1731 V 21 w(k)n(ey)k Fg(\()p Fq(int)14 -b(key,)h(Function)f(*function)p Fg(\))120 1794 y Fr(Binds)i -Fl(k)o(ey)j Fr(to)14 b Fl(function)i Fr(in)g(the)f(curren)o(tly)h -(activ)o(e)f(k)o(eymap.)k(Returns)d(non-zero)f(in)h(the)f(case)g(of)120 -1856 y(an)g(in)o(v)m(alid)j Fl(k)o(ey)p Fr(.)1725 2030 -y(F)l(unction)-1899 b Fi(int)19 b Fh(rl)p 139 2030 V -21 w(bind)p 271 2030 V 21 w(k)n(ey)p 376 2030 V 21 w(in)p -444 2030 V 22 w(map)i Fg(\()p Fq(int)14 b(key,)h(Function)f(*function,) -g(Keymap)g(map)p Fg(\))120 2093 y Fr(Bind)i Fl(k)o(ey)j -Fr(to)c Fl(function)h Fr(in)g Fl(map)p Fr(.)k(Returns)15 -b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j -Fl(k)o(ey)p Fr(.)1725 2267 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 2267 V 21 w(un)n(bind)p 334 2267 V 21 w(k)n(ey)k -Fg(\()p Fq(int)14 b(key)p Fg(\))120 2329 y Fr(Bind)h -Fl(k)o(ey)i Fr(to)c(the)h(n)o(ull)h(function)f(in)g(the)g(curren)o(tly) -g(activ)o(e)g(k)o(eymap.)19 b(Returns)14 b(non-zero)g(in)g(case)120 -2391 y(of)h(error.)1725 2566 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 2566 V 21 w(un)n(bind)p 334 2566 V 21 w(k)n(ey)p -439 2566 V 21 w(in)p 507 2566 V 22 w(map)h Fg(\()p Fq(int)14 -b(key,)h(Keymap)f(map)p Fg(\))120 2628 y Fr(Bind)i Fl(k)o(ey)j -Fr(to)c(the)g(n)o(ull)i(function)f(in)g Fl(map)p Fr(.)k(Returns)15 -b(non-zero)h(in)g(case)f(of)g(error.)p eop -27 28 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(27)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(generic)p 338 183 V 21 -w(bind)j Fg(\()p Fq(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)f -(Keymap)208 246 y(map)p Fg(\))120 308 y Fr(Bind)j(the)f(k)o(ey)g -(sequence)h(represen)o(ted)f(b)o(y)g(the)g(string)g Fl(k)o(eyseq)g -Fr(to)g(the)f(arbitrary)h(p)q(oin)o(ter)g Fl(data)p Fr(.)120 -370 y Fl(t)o(yp)q(e)j Fr(sa)o(ys)c(what)g(kind)i(of)f(data)f(is)i(p)q -(oin)o(ted)g(to)e(b)o(y)h Fl(data)p Fr(;)f(this)i(can)f(b)q(e)g(a)g -(function)h(\()p Fq(ISFUNC)p Fr(\),)d(a)120 432 y(macro)i(\()p -Fq(ISMACR)p Fr(\),)f(or)i(a)f(k)o(eymap)g(\()p Fq(ISKMAP)p -Fr(\).)23 b(This)18 b(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.) -25 b(The)120 495 y(initial)17 b(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g -(bindings)i(is)f Fl(map)p Fr(.)1725 683 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 683 V 21 w(parse)p 294 683 -V 19 w(and)p 405 683 V 21 w(bind)j Fg(\()p Fq(char)14 -b(*line)p Fg(\))120 745 y Fr(P)o(arse)i Fl(line)21 b -Fr(as)16 b(if)h(it)g(had)f(b)q(een)i(read)f(from)e(the)i -Fq(inputrc)f Fr(\014le)h(and)g(p)q(erform)f(an)o(y)h(k)o(ey)f(bindings) -120 808 y(and)f(v)m(ariable)i(assignmen)o(ts)e(found)h(\(see)f(Section) -h(1.3)e([Readline)j(Init)f(File],)g(page)f(5\).)1725 -996 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 996 -V 21 w(read)p 271 996 V 20 w(init)p 375 996 V 22 w(\014le)k -Fg(\()p Fq(char)14 b(*filename)p Fg(\))120 1059 y Fr(Read)19 -b(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)f(from)f -Fl(\014lename)k Fr(\(see)d(Section)g(1.3)f([Readline)120 -1121 y(Init)e(File],)g(page)f(5\).)0 1409 y Fk(2.4.4)30 -b(Asso)r(ciating)15 b(F)-5 b(unction)15 b(Names)g(and)g(Bindings)62 -1554 y Fr(These)22 b(functions)g(allo)o(w)g(y)o(ou)f(to)f(\014nd)i(out) -f(what)g(k)o(eys)g(in)o(v)o(ok)o(e)h(named)f(functions)h(and)g(the)f -(functions)0 1617 y(in)o(v)o(ok)o(ed)15 b(b)o(y)h(a)e(particular)i(k)o -(ey)f(sequence.)1725 1805 y(F)l(unction)-1899 b Fi(Function)20 -b(*)g Fh(rl)p 316 1805 V 21 w(named)p 504 1805 V 19 w(function)j -Fg(\()p Fq(char)14 b(*name)p Fg(\))120 1868 y Fr(Return)i(the)f -(function)h(with)g(name)f Fl(name)p Fr(.)1725 2056 y(F)l(unction)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 2056 V 21 w(function)p -542 2056 V 21 w(of)p 610 2056 V 19 w(k)n(eyseq)k Fg(\()p -Fq(char)15 b(*keyseq,)f(Keymap)g(map,)h(int)208 2118 -y(*type)p Fg(\))120 2181 y Fr(Return)i(the)f(function)h(in)o(v)o(ok)o -(ed)g(b)o(y)f Fl(k)o(eyseq)i Fr(in)f(k)o(eymap)f Fl(map)p -Fr(.)23 b(If)16 b Fl(map)i Fr(is)f(NULL,)g(the)f(curren)o(t)120 -2243 y(k)o(eymap)g(is)i(used.)25 b(If)17 b Fl(t)o(yp)q(e)i -Fr(is)e(not)g(NULL,)g(the)g(t)o(yp)q(e)g(of)f(the)h(ob)s(ject)f(is)h -(returned)g(in)h(it)f(\(one)f(of)120 2305 y Fq(ISFUNC)p -Fr(,)e Fq(ISKMAP)p Fr(,)g(or)h Fq(ISMACR)p Fr(\).)1725 -2494 y(F)l(unction)-1899 b Fi(char)20 b(**)f Fh(rl)p -237 2494 V 21 w(in)n(v)n(oking)p 466 2494 V 23 w(k)n(eyseqs)k -Fg(\()p Fq(Function)14 b(*function)p Fg(\))120 2556 y -Fr(Return)19 b(an)e(arra)o(y)g(of)h(strings)f(represen)o(ting)i(the)f -(k)o(ey)g(sequences)h(used)f(to)f(in)o(v)o(ok)o(e)h Fl(function)h -Fr(in)120 2618 y(the)c(curren)o(t)g(k)o(eymap.)p eop -28 29 bop 0 -58 a Fr(28)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(char)20 b(**)f Fh(rl)p 237 -183 18 3 v 21 w(in)n(v)n(oking)p 466 183 V 23 w(k)n(eyseqs)p -675 183 V 21 w(in)p 743 183 V 22 w(map)i Fg(\()p Fq(Function)14 -b(*function,)f(Keymap)208 246 y(map)p Fg(\))120 308 y -Fr(Return)19 b(an)e(arra)o(y)g(of)h(strings)f(represen)o(ting)i(the)f -(k)o(ey)g(sequences)h(used)f(to)f(in)o(v)o(ok)o(e)h Fl(function)h -Fr(in)120 370 y(the)c(k)o(eymap)g Fl(map)p Fr(.)1725 -563 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 563 -V 21 w(function)p 392 563 V 21 w(dump)r(er)g Fg(\()p -Fq(int)15 b(readable)p Fg(\))120 625 y Fr(Prin)o(t)i(the)g(readline)h -(function)g(names)f(and)g(the)g(k)o(ey)g(sequences)h(curren)o(tly)g(b)q -(ound)f(to)g(them)g(to)120 687 y Fq(rl_outstream)p Fr(.)j(If)c -Fl(readable)j Fr(is)d(non-zero,)g(the)g(list)g(is)g(formatted)f(in)i -(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)120 750 y(b)q(e)g(made)f -(part)g(of)f(an)i Fq(inputrc)e Fr(\014le)i(and)f(re-read.)1725 -942 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 942 -V 21 w(list)p 262 942 V 22 w(funmap)p 475 942 V 18 w(names)h -Fg(\(\))120 1005 y Fr(Prin)o(t)15 b(the)g(names)h(of)e(all)j(bindable)g -(Readline)g(functions)f(to)f Fq(rl_outstream)p Fr(.)0 -1305 y Fk(2.4.5)30 b(Allo)n(wing)16 b(Undoing)62 1452 -y Fr(Supp)q(orting)f(the)f(undo)g(command)g(is)g(a)g(painless)h(thing,) -f(and)g(mak)o(es)f(y)o(our)h(functions)g(m)o(uc)o(h)g(more)f(useful.)0 -1515 y(It)i(is)g(certainly)g(easy)f(to)g(try)g(something)h(if)g(y)o(ou) -f(kno)o(w)g(y)o(ou)g(can)h(undo)g(it.)20 b(I)15 b(could)g(use)g(an)f -(undo)h(function)h(for)0 1577 y(the)f(sto)q(c)o(k)g(mark)o(et.)62 -1724 y(If)h(y)o(our)f(function)i(simply)g(inserts)f(text)f(once,)h(or)f -(deletes)h(text)f(once,)h(and)g(uses)g Fq(rl_insert_text)d(\(\))i -Fr(or)0 1786 y Fq(rl_delete_text)e(\(\))i Fr(to)g(do)g(it,)g(then)g -(undoing)i(is)e(already)h(done)f(for)g(y)o(ou)g(automatically)l(.)62 -1934 y(If)h(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o(ultiple)i -(deletions,)f(or)f(an)o(y)g(com)o(bination)h(of)f(these)g(op)q -(erations,)g(y)o(ou)0 1996 y(should)j(group)e(them)g(together)g(in)o -(to)g(one)h(op)q(eration.)24 b(This)17 b(is)g(done)g(with)g -Fq(rl_begin_undo_group)c(\(\))j Fr(and)0 2058 y Fq(rl_end_undo_group)d -(\(\))p Fr(.)62 2206 y(The)j(t)o(yp)q(es)f(of)g(ev)o(en)o(ts)g(that)f -(can)h(b)q(e)h(undone)g(are:)120 2343 y Fq(enum)23 b(undo_code)g({)h -(UNDO_DELETE,)e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)62 -2490 y Fr(Notice)c(that)e Fq(UNDO_DELETE)f Fr(means)i(to)f(insert)i -(some)e(text,)h(and)g Fq(UNDO_INSERT)e Fr(means)i(to)f(delete)i(some)0 -2552 y(text.)37 b(That)21 b(is,)i(the)e(undo)h(co)q(de)f(tells)i(undo)e -(what)g(to)f(undo,)j(not)e(ho)o(w)g(to)f(undo)i(it.)38 -b Fq(UNDO_BEGIN)20 b Fr(and)0 2614 y Fq(UNDO_END)14 b -Fr(are)h(tags)f(added)i(b)o(y)f Fq(rl_begin_undo_group)e(\(\))i -Fr(and)g Fq(rl_end_undo_group)e(\(\))p Fr(.)p eop -29 30 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(29)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(b)r(egin)p 297 183 V 20 -w(undo)p 442 183 V 20 w(group)h Fg(\(\))120 246 y Fr(Begins)e(sa)o -(ving)e(undo)i(information)f(in)g(a)g(group)f(construct.)27 -b(The)18 b(undo)h(information)f(usually)120 308 y(comes)j(from)f(calls) -h(to)g Fq(rl_insert_text)13 b(\(\))20 b Fr(and)h Fq(rl_delete_text)13 -b(\(\))p Fr(,)22 b(but)f(could)g(b)q(e)h(the)120 370 -y(result)16 b(of)e(calls)j(to)d Fq(rl_add_undo)g(\(\))p -Fr(.)1725 541 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 541 V 21 w(end)p 251 541 V 20 w(undo)p 396 541 V -20 w(group)h Fg(\(\))120 603 y Fr(Closes)d(the)f(curren)o(t)g(undo)h -(group)f(started)g(with)h Fq(rl_begin_undo_group)12 b(\(\))p -Fr(.)26 b(There)18 b(should)120 665 y(b)q(e)e(one)f(call)i(to)d -Fq(rl_end_undo_group)f(\(\))i Fr(for)f(eac)o(h)i(call)g(to)f -Fq(rl_begin_undo_group)d(\(\))p Fr(.)1725 836 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 836 V 21 w(add)p 279 836 V -20 w(undo)i Fg(\()p Fq(enum)14 b(undo_code)g(what,)g(int)h(start,)g -(int)f(end,)h(char)208 898 y(*text)p Fg(\))120 960 y -Fr(Remem)o(b)q(er)20 b(ho)o(w)e(to)h(undo)g(an)g(ev)o(en)o(t)g -(\(according)g(to)g Fl(what)q Fr(\).)30 b(The)19 b(a\013ected)g(text)f -(runs)i(from)120 1023 y Fl(start)15 b Fr(to)g Fl(end)p -Fr(,)g(and)g(encompasses)h Fl(text)p Fr(.)1725 1193 y(F)l(unction)-1899 -b Fi(void)20 b Fh(free)p 221 1193 V 20 w(undo)p 366 1193 -V 20 w(list)k Fg(\(\))120 1256 y Fr(F)l(ree)15 b(the)h(existing)g(undo) -f(list.)1725 1426 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 1426 V 21 w(do)p 222 1426 V 20 w(undo)i Fg(\(\))120 -1488 y Fr(Undo)14 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h(list.)20 -b(Returns)14 b Fq(0)f Fr(if)h(there)g(w)o(as)e(nothing)i(to)f(undo,)h -(non-zero)120 1551 y(if)i(something)f(w)o(as)f(undone.)62 -1721 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i -(text,)d(but)i(directly)h(mo)q(dify)f(the)f(existing)i(text)e(\(e.g.,)f -(c)o(hange)0 1784 y(its)g(case\),)f(call)i Fq(rl_modifying)e(\(\))g -Fr(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)g(text.)19 -b(Y)l(ou)14 b(m)o(ust)f(supply)h(the)g(indices)0 1846 -y(of)h(the)g(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q -(dify)l(.)1725 2017 y(F)l(unction)-1899 b Fi(int)20 b -Fh(rl)p 140 2017 V 21 w(mo)r(difying)h Fg(\()p Fq(int)15 -b(start,)f(int)h(end)p Fg(\))120 2079 y Fr(T)l(ell)e(Readline)g(to)e -(sa)o(v)o(e)f(the)i(text)f(b)q(et)o(w)o(een)g Fl(start)g -Fr(and)h Fl(end)h Fr(as)e(a)g(single)i(undo)e(unit.)20 -b(It)11 b(is)h(assumed)120 2141 y(that)i(y)o(ou)h(will)i(subsequen)o -(tly)g(mo)q(dify)e(that)g(text.)0 2375 y Fk(2.4.6)30 -b(Redispla)n(y)1725 2545 y Fr(F)l(unction)-1899 b Fi(void)20 -b Fh(rl)p 166 2545 V 21 w(redispla)n(y)k Fg(\(\))120 -2608 y Fr(Change)d(what's)g(displa)o(y)o(ed)h(on)g(the)f(screen)h(to)f -(re\015ect)h(the)f(curren)o(t)g(con)o(ten)o(ts)g(of)g -Fq(rl_line_)120 2670 y(buffer)p Fr(.)p eop -30 31 bop 0 -58 a Fr(30)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 183 -18 3 v 21 w(forced)p 315 183 V 20 w(up)r(date)p 509 183 -V 20 w(displa)n(y)k Fg(\(\))120 246 y Fr(F)l(orce)12 -b(the)g(line)h(to)f(b)q(e)g(up)q(dated)h(and)f(redispla)o(y)o(ed,)i -(whether)e(or)f(not)h(Readline)i(thinks)e(the)g(screen)120 -308 y(displa)o(y)k(is)g(correct.)1725 462 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 462 V 21 w(on)p 222 462 V 20 -w(new)p 341 462 V 21 w(line)k Fg(\(\))120 524 y Fr(T)l(ell)c(the)f(up)q -(date)g(routines)g(that)f(w)o(e)g(ha)o(v)o(e)g(mo)o(v)o(ed)g(on)o(to)g -(a)g(new)h(\(empt)o(y\))e(line,)k(usually)f(after)120 -587 y(ouputting)c(a)e(newline.)1725 741 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 741 V 21 w(reset)p 282 741 -V 20 w(line)p 390 741 V 23 w(state)j Fg(\(\))120 803 -y Fr(Reset)14 b(the)f(displa)o(y)h(state)f(to)f(a)h(clean)h(state)f -(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)g -(new)120 866 y(line.)1725 1020 y(F)l(unction)-1899 b -Fi(int)20 b Fh(rl)p 140 1020 V 21 w(message)g Fg(\()p -Fq(va_alist)p Fg(\))120 1082 y Fr(The)f(argumen)o(ts)e(are)h(a)g -(string)g(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)d Fq(printf)p -Fr(.)28 b(The)19 b(resulting)g(string)f(is)120 1145 y(displa)o(y)o(ed)h -(in)f(the)g Fl(ec)o(ho)f(area)p Fr(.)27 b(The)18 b(ec)o(ho)f(area)g(is) -h(also)g(used)g(to)f(displa)o(y)h(n)o(umeric)h(argumen)o(ts)120 -1207 y(and)c(searc)o(h)g(strings.)1725 1361 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 1361 V 21 w(clear)p 279 1361 -V 21 w(message)h Fg(\(\))120 1424 y Fr(Clear)15 b(the)h(message)e(in)i -(the)g(ec)o(ho)f(area.)0 1616 y Fk(2.4.7)30 b(Mo)r(difying)15 -b(T)-5 b(ext)1725 1771 y Fr(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 1771 V 21 w(insert)p 303 1771 V 21 w(text)k -Fg(\()p Fq(char)14 b(*text)p Fg(\))120 1833 y Fr(Insert)h -Fl(text)h Fr(in)o(to)f(the)h(line)g(at)f(the)g(curren)o(t)g(cursor)g(p) -q(osition.)1725 1988 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 1988 V 21 w(delete)p 308 1988 V 22 w(text)k -Fg(\()p Fq(int)14 b(start,)h(int)f(end)p Fg(\))120 2050 -y Fr(Delete)i(the)f(text)g(b)q(et)o(w)o(een)g Fl(start)g -Fr(and)h Fl(end)h Fr(in)f(the)g(curren)o(t)f(line.)1725 -2204 y(F)l(unction)-1899 b Fi(char)20 b(*)f Fh(rl)p 211 -2204 V 21 w(cop)n(y)p 346 2204 V 21 w(text)24 b Fg(\()p -Fq(int)14 b(start,)h(int)g(end)p Fg(\))120 2266 y Fr(Return)h(a)f(cop)o -(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i Fl(start)f -Fr(and)g Fl(end)j Fr(in)e(the)f(curren)o(t)g(line.)1725 -2421 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 2421 -V 21 w(kill)p 236 2421 V 23 w(text)k Fg(\()p Fq(int)14 -b(start,)h(int)g(end)p Fg(\))120 2483 y Fr(Cop)o(y)k(the)g(text)f(b)q -(et)o(w)o(een)i Fl(start)e Fr(and)i Fl(end)h Fr(in)f(the)f(curren)o(t)g -(line)i(to)d(the)h(kill)i(ring,)f(app)q(ending)120 2545 -y(or)e(prep)q(ending)j(to)d(the)h(last)f(kill)j(if)e(the)g(last)f -(command)h(w)o(as)e(a)i(kill)h(command.)30 b(The)19 b(text)f(is)120 -2608 y(deleted.)j(If)13 b Fl(start)g Fr(is)h(less)f(than)h -Fl(end)p Fr(,)f(the)h(text)e(is)i(app)q(ended,)h(otherwise)e(prep)q -(ended.)21 b(If)14 b(the)f(last)120 2670 y(command)i(w)o(as)f(not)h(a)g -(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)g(used.)p -eop -31 32 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(31)0 183 y Fk(2.4.8)30 b(Utilit)n(y)16 -b(F)-5 b(unctions)1725 345 y Fr(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 345 18 3 v 21 w(read)p 271 345 V 20 w(k)n(ey)k -Fg(\(\))120 407 y Fr(Return)14 b(the)g(next)g(c)o(haracter)f(a)o(v)m -(ailable.)21 b(This)15 b(handles)g(input)g(inserted)f(in)o(to)g(the)g -(input)h(stream)120 469 y(via)h Fl(p)q(ending)i(input)h -Fr(\(see)d(Section)h(2.3)e([Readline)j(V)l(ariables],)f(page)f(22\))f -(and)i Fq(rl_stuff_char)120 532 y(\(\))p Fr(,)e(macros,)f(and)h(c)o -(haracters)f(read)h(from)g(the)g(k)o(eyb)q(oard.)1725 -693 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 693 -V 21 w(getc)j Fg(\()p Fq(FILE)14 b(*)p Fg(\))120 755 -y Fr(Return)i(the)f(next)g(c)o(haracter)g(a)o(v)m(ailable)i(from)d(the) -h(k)o(eyb)q(oard.)1725 917 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 917 V 21 w(stu\013)p 271 917 V 20 w(c)n(har)j -Fg(\()p Fq(int)15 b(c)p Fg(\))120 979 y Fr(Insert)g Fl(c)i -Fr(in)o(to)e(the)g(Readline)i(input)e(stream.)k(It)c(will)h(b)q(e)g -Fq(")p Fr(read)p Fq(")e Fr(b)q(efore)h(Readline)i(attempts)d(to)120 -1041 y(read)h(c)o(haracters)g(from)f(the)h(terminal)h(with)g -Fq(rl_read_key)d(\(\))p Fr(.)1725 1203 y(F)l(unction)-1899 -b Fi(rl_extend_line_buffer)22 b Fh(\(in)n(t)j Fq(len)p -Fg(\))120 1265 y Fr(Ensure)15 b(that)f Fq(rl_line_buffer)e -Fr(has)j(enough)g(space)g(to)e(hold)j Fl(len)f Fr(c)o(haracters,)f(p)q -(ossibly)i(reallo-)120 1327 y(cating)f(it)h(if)f(necessary)l(.)1725 -1489 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1489 -V 21 w(initiali)q(z)q(e)26 b Fg(\(\))120 1551 y Fr(Initialize)18 -b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)1725 -1713 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1713 -V 21 w(reset)p 282 1713 V 20 w(terminal)j Fg(\()p Fq(char)15 -b(*terminal_name)p Fg(\))120 1775 y Fr(Reinitializ)q(e)f(Readline's)e -(idea)g(of)e(the)h(terminal)h(settings)f(using)g Fl(terminal)p -1404 1775 14 2 v 17 w(name)j Fr(as)c(the)h(terminal)120 -1837 y(t)o(yp)q(e)k(\(e.g.,)f Fq(vt100)p Fr(\).)1725 -1999 y(F)l(unction)-1899 b Fi(int)20 b Fh(alphab)r(etic)k -Fg(\()p Fq(int)14 b(c)p Fg(\))120 2061 y Fr(Return)i(1)f(if)g -Fl(c)j Fr(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1725 -2222 y(F)l(unction)-1899 b Fi(int)20 b Fh(n)n(umeric)i -Fg(\()p Fq(int)15 b(c)p Fg(\))120 2285 y Fr(Return)h(1)f(if)g -Fl(c)j Fr(is)e(a)f(n)o(umeric)h(c)o(haracter.)1725 2446 -y(F)l(unction)-1899 b Fi(int)20 b Fh(ding)i Fg(\(\))120 -2508 y Fr(Ring)16 b(the)f(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g -(setting)f(of)g Fq(bell-style)p Fr(.)62 2670 y(The)h(follo)o(wing)g -(are)f(implemen)o(ted)h(as)f(macros,)f(de\014ned)j(in)f -Fq(chartypes.h)p Fr(.)p eop -32 33 bop 0 -58 a Fr(32)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(int)20 b Fh(upp)r(ercase)p -351 183 18 3 v 19 w(p)j Fg(\()p Fq(int)14 b(c)p Fg(\))120 -246 y Fr(Return)i(1)f(if)g Fl(c)j Fr(is)e(an)f(upp)q(ercase)i(alphab)q -(etic)f(c)o(haracter.)1725 409 y(F)l(unction)-1899 b -Fi(int)20 b Fh(lo)n(w)n(ercase)p 334 409 V 22 w(p)i Fg(\()p -Fq(int)15 b(c)p Fg(\))120 471 y Fr(Return)h(1)f(if)g -Fl(c)j Fr(is)e(a)f(lo)o(w)o(ercase)g(alphab)q(etic)i(c)o(haracter.)1725 -634 y(F)l(unction)-1899 b Fi(int)20 b Fh(digit)p 214 -634 V 22 w(p)i Fg(\()p Fq(int)15 b(c)p Fg(\))120 696 -y Fr(Return)h(1)f(if)g Fl(c)j Fr(is)e(a)f(n)o(umeric)h(c)o(haracter.) -1725 859 y(F)l(unction)-1899 b Fi(int)20 b Fh(to)p 152 -859 V 20 w(upp)r(er)i Fg(\()p Fq(int)14 b(c)p Fg(\))120 -922 y Fr(If)h Fl(c)i Fr(is)f(a)e(lo)o(w)o(ercase)g(alphab)q(etic)j(c)o -(haracter,)c(return)i(the)g(corresp)q(onding)g(upp)q(ercase)h(c)o -(haracter.)1725 1085 y(F)l(unction)-1899 b Fi(int)20 -b Fh(to)p 152 1085 V 20 w(lo)n(w)n(er)k Fg(\()p Fq(int)15 -b(c)p Fg(\))120 1147 y Fr(If)e Fl(c)i Fr(is)e(an)f(upp)q(ercase)h -(alphab)q(etic)h(c)o(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o -(w)o(ercase)f(c)o(haracter.)1725 1310 y(F)l(unction)-1899 -b Fi(int)20 b Fh(digit)p 214 1310 V 22 w(v)m(alue)j Fg(\()p -Fq(int)15 b(c)p Fg(\))120 1372 y Fr(If)g Fl(c)k Fr(is)c(a)g(n)o(um)o(b) -q(er,)g(return)g(the)h(v)m(alue)g(it)g(represen)o(ts.)0 -1584 y Fk(2.4.9)30 b(Alternate)15 b(In)n(terface)62 1721 -y Fr(An)k(alternate)e(in)o(terface)h(is)h(a)o(v)m(ailable)h(to)d(plain) -i Fq(readline\(\))p Fr(.)27 b(Some)18 b(applications)h(need)g(to)e(in)o -(terlea)o(v)o(e)0 1783 y(k)o(eyb)q(oard)d(I/O)h(with)f(\014le,)h -(device,)h(or)d(windo)o(w)i(system)e(I/O,)i(t)o(ypically)g(b)o(y)f -(using)h(a)f(main)h(lo)q(op)g(to)e Fq(select\(\))0 1846 -y Fr(on)k(v)m(arious)h(\014le)g(descriptors.)26 b(T)l(o)17 -b(accomo)q(date)g(this)h(need,)g(readline)h(can)e(also)h(b)q(e)f(in)o -(v)o(ok)o(ed)h(as)f(a)g(`callbac)o(k')0 1908 y(function)f(from)e(an)i -(ev)o(en)o(t)f(lo)q(op.)20 b(There)15 b(are)g(functions)h(a)o(v)m -(ailable)h(to)e(mak)o(e)f(this)i(easy)l(.)1725 2071 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 2071 V 21 w(callbac)n(k)p -383 2071 V 23 w(handler)p 595 2071 V 21 w(install)25 -b Fg(\()p Fq(char)14 b(*prompt,)g(Vfunction)208 2133 -y(*lhandler)p Fg(\))120 2196 y Fr(Set)h(up)g(the)f(terminal)i(for)d -(readline)k(I/O)e(and)f(displa)o(y)i(the)f(initial)h(expanded)g(v)m -(alue)g(of)e Fl(prompt)p Fr(.)120 2258 y(Sa)o(v)o(e)h(the)f(v)m(alue)j -(of)d Fl(lhandler)20 b Fr(to)14 b(use)h(as)g(a)g(callbac)o(k)h(when)f -(a)f(complete)i(line)h(of)d(input)i(has)f(b)q(een)120 -2320 y(en)o(tered.)1725 2483 y(F)l(unction)-1899 b Fi(void)20 -b Fh(rl)p 166 2483 V 21 w(callbac)n(k)p 383 2483 V 23 -w(read)p 516 2483 V 20 w(c)n(har)j Fg(\(\))120 2545 y -Fr(Whenev)o(er)d(an)f(application)i(determines)g(that)e(k)o(eyb)q(oard) -g(input)i(is)f(a)o(v)m(ailable,)i(it)d(should)i(call)120 -2608 y Fq(rl_callback_read_char\(\))p Fr(,)11 b(whic)o(h)j(will)i(read) -e(the)g(next)g(c)o(haracter)f(from)g(the)h(curren)o(t)g(input)120 -2670 y(source.)24 b(If)17 b(that)f(c)o(haracter)g(completes)i(the)f -(line,)h Fq(rl_callback_read_char)c Fr(will)k(in)o(v)o(ok)o(e)f(the)p -eop -33 34 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(33)120 183 y Fl(lhandler)19 b Fr(function)d(sa)o(v)o -(ed)e(b)o(y)g Fq(rl_callback_handler_install)d Fr(to)j(pro)q(cess)h -(the)f(line.)21 b Fq(EOF)14 b Fr(is)120 246 y(indicated)j(b)o(y)e -(calling)i Fl(lhandler)j Fr(with)c(a)f Fq(NULL)f Fr(line.)1725 -413 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 413 -18 3 v 21 w(callbac)n(k)p 383 413 V 23 w(handler)p 595 -413 V 21 w(remo)n(v)n(e)i Fg(\(\))120 476 y Fr(Restore)12 -b(the)g(terminal)h(to)e(its)i(initial)h(state)d(and)h(remo)o(v)o(e)g -(the)g(line)i(handler.)20 b(This)12 b(ma)o(y)g(b)q(e)g(called)120 -538 y(from)i(within)j(a)e(callbac)o(k)h(as)f(w)o(ell)h(as)f(indep)q -(enden)o(tly)l(.)0 763 y Fk(2.4.10)29 b(An)16 b(Example)62 -902 y Fr(Here)d(is)g(a)f(function)h(whic)o(h)g(c)o(hanges)g(lo)o(w)o -(ercase)f(c)o(haracters)f(to)h(their)h(upp)q(ercase)g(equiv)m(alen)o -(ts,)h(and)f(upp)q(er-)0 964 y(case)j(c)o(haracters)g(to)g(lo)o(w)o -(ercase.)23 b(If)16 b(this)h(function)g(w)o(as)f(b)q(ound)h(to)f(`)p -Fq(M-c)p Fr(',)f(then)h(t)o(yping)h(`)p Fq(M-c)p Fr(')e(w)o(ould)i(c)o -(hange)0 1026 y(the)g(case)f(of)g(the)h(c)o(haracter)f(under)h(p)q(oin) -o(t.)25 b(T)o(yping)17 b(`)p Fq(M-1)d(0)h(M-c)p Fr(')h(w)o(ould)h(c)o -(hange)f(the)h(case)f(of)h(the)f(follo)o(wing)0 1089 -y(10)f(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)g(last)g -(c)o(haracter)g(c)o(hanged.)120 1217 y Fq(/*)24 b(Invert)f(the)g(case)g -(of)h(the)f(COUNT)h(following)e(characters.)h(*/)120 -1269 y(int)120 1321 y(invert_case_line)f(\(count,)h(key\))239 -1373 y(int)h(count,)f(key;)120 1425 y({)168 1477 y(register)f(int)i -(start,)f(end,)g(i;)168 1580 y(start)g(=)h(rl_point;)168 -1684 y(if)f(\(rl_point)g(>=)h(rl_end\))215 1736 y(return)f(\(0\);)168 -1840 y(if)g(\(count)g(<)h(0\))215 1892 y({)263 1944 y(direction)f(=)h -(-1;)263 1995 y(count)f(=)h(-count;)215 2047 y(})168 -2099 y(else)215 2151 y(direction)f(=)h(1;)168 2255 y(/*)f(Find)h(the)f -(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)168 2307 -y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)168 -2411 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)168 -2462 y(if)g(\(end)h(>)f(rl_end\))215 2514 y(end)h(=)g(rl_end;)168 -2566 y(else)f(if)h(\(end)f(<)h(0\))215 2618 y(end)g(=)g(0;)p -eop -34 35 bop 0 -58 a Fr(34)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(if)23 b(\(start)g(==)h(end\))215 235 y(return)f(\(0\);)168 -339 y(if)g(\(start)g(>)h(end\))215 391 y({)263 443 y(int)g(temp)f(=)h -(start;)263 495 y(start)f(=)h(end;)263 546 y(end)g(=)f(temp;)215 -598 y(})168 702 y(/*)g(Tell)h(readline)e(that)i(we)f(are)h(modifying)e -(the)i(line,)f(so)h(it)f(will)h(save)239 754 y(the)g(undo)f -(information.)f(*/)168 806 y(rl_modifying)g(\(start,)h(end\);)168 -910 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))215 -962 y({)263 1013 y(if)h(\(uppercase_p)e(\(rl_line_buffer[i]\)\))311 -1065 y(rl_line_buffer[i])f(=)j(to_lower)f(\(rl_line_buffer[i]\);)263 -1117 y(else)g(if)h(\(lowercase_p)e(\(rl_line_buffer[i]\)\))311 -1169 y(rl_line_buffer[i])f(=)j(to_upper)f(\(rl_line_buffer[i]\);)215 -1221 y(})168 1273 y(/*)g(Move)h(point)f(to)g(on)h(top)f(of)h(the)f -(last)h(character)e(changed.)h(*/)168 1325 y(rl_point)f(=)i -(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f(start;)168 -1377 y(return)g(\(0\);)120 1429 y(})0 1670 y Fp(2.5)33 -b(Custom)14 b(Completers)62 1809 y Fr(T)o(ypically)l(,)g(a)c(program)g -(that)h(reads)g(commands)g(from)f(the)h(user)h(has)e(a)h(w)o(a)o(y)f -(of)h(disam)o(biguating)h(commands)0 1871 y(and)k(data.)k(If)c(y)o(our) -f(program)g(is)h(one)g(of)f(these,)h(then)g(it)g(can)g(pro)o(vide)g -(completion)g(for)g(commands,)f(data,)f(or)0 1933 y(b)q(oth.)28 -b(The)18 b(follo)o(wing)h(sections)f(describ)q(e)h(ho)o(w)f(y)o(our)f -(program)g(and)h(Readline)i(co)q(op)q(erate)e(to)f(pro)o(vide)i(this)0 -1995 y(service.)0 2220 y Fk(2.5.1)30 b(Ho)n(w)15 b(Completing)g(W)-5 -b(orks)62 2359 y Fr(In)16 b(order)f(to)g(complete)h(some)f(text,)f(the) -h(full)i(list)f(of)f(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o -(v)m(ailable.)21 b(That)15 b(is,)0 2421 y(it)k(is)f(not)g(p)q(ossible)i -(to)e(accurately)h(expand)g(a)f(partial)h(w)o(ord)e(without)i(kno)o -(wing)f(all)h(of)f(the)h(p)q(ossible)h(w)o(ords)0 2483 -y(whic)o(h)c(mak)o(e)f(sense)h(in)g(that)e(con)o(text.)20 -b(The)15 b(Readline)j(library)e(pro)o(vides)f(the)h(user)f(in)o -(terface)h(to)e(completion,)0 2545 y(and)h(t)o(w)o(o)f(of)h(the)h(most) -e(common)h(completion)h(functions:)21 b(\014lename)c(and)e(username.)20 -b(F)l(or)15 b(completing)h(other)0 2608 y(t)o(yp)q(es)h(of)f(text,)g(y) -o(ou)h(m)o(ust)f(write)h(y)o(our)f(o)o(wn)g(completion)i(function.)25 -b(This)18 b(section)f(describ)q(es)h(exactly)g(what)0 -2670 y(suc)o(h)e(functions)f(m)o(ust)g(do,)g(and)g(pro)o(vides)h(an)f -(example.)p eop -35 36 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(35)62 183 y(There)16 b(are)f(three)g(ma)s(jor)f -(functions)i(used)f(to)g(p)q(erform)g(completion:)25 -320 y(1.)29 b(The)15 b(user-in)o(terface)g(function)g -Fq(rl_complete)e(\(\))p Fr(.)20 b(This)15 b(function)g(is)g(called)h -(with)e(the)h(same)f(argumen)o(ts)90 383 y(as)j(other)g(Readline)j -(functions)f(in)o(tended)g(for)e(in)o(teractiv)o(e)h(use:)25 -b Fl(coun)o(t)18 b Fr(and)g Fl(in)o(v)o(oking)p 1633 -383 14 2 v 17 w(k)o(ey)p Fr(.)27 b(It)18 b(isolates)90 -445 y(the)j(w)o(ord)g(to)f(b)q(e)i(completed)h(and)e(calls)h -Fq(completion_matches)13 b(\(\))21 b Fr(to)f(generate)h(a)g(list)h(of)f -(p)q(ossible)90 507 y(completions.)h(It)16 b(then)g(either)h(lists)f -(the)g(p)q(ossible)h(completions,)g(inserts)f(the)g(p)q(ossible)h -(completions,)f(or)90 569 y(actually)g(p)q(erforms)f(the)g(completion,) -h(dep)q(ending)i(on)d(whic)o(h)h(b)q(eha)o(vior)f(is)h(desired.)25 -644 y(2.)29 b(The)18 b(in)o(ternal)h(function)g Fq(completion_matches) -13 b(\(\))18 b Fr(uses)g(y)o(our)f Fl(generator)k Fr(function)e(to)e -(generate)h(the)90 706 y(list)h(of)e(p)q(ossible)j(matc)o(hes,)e(and)g -(then)g(returns)g(the)g(arra)o(y)f(of)h(these)g(matc)o(hes.)28 -b(Y)l(ou)18 b(should)h(place)g(the)90 769 y(address)c(of)g(y)o(our)g -(generator)f(function)i(in)g Fq(rl_completion_entry_functi)o(on)p -Fr(.)25 843 y(3.)29 b(The)16 b(generator)g(function)h(is)f(called)i -(rep)q(eatedly)g(from)d Fq(completion_matches)e(\(\))p -Fr(,)i(returning)i(a)f(string)90 906 y(eac)o(h)j(time.)31 -b(The)19 b(argumen)o(ts)f(to)g(the)h(generator)e(function)j(are)e -Fl(text)i Fr(and)f Fl(state)p Fr(.)29 b Fl(text)19 b -Fr(is)h(the)f(partial)90 968 y(w)o(ord)13 b(to)g(b)q(e)h(completed.)21 -b Fl(state)15 b Fr(is)f(zero)g(the)g(\014rst)f(time)h(the)g(function)g -(is)g(called,)i(allo)o(wing)e(the)g(generator)90 1030 -y(to)19 b(p)q(erform)f(an)o(y)h(necessary)h(initialization,)i(and)e(a)f -(p)q(ositiv)o(e)h(non-zero)f(in)o(teger)h(for)e(eac)o(h)h(subsequen)o -(t)90 1092 y(call.)35 b(When)21 b(the)f(generator)f(function)i(returns) -f Fq(\(char)14 b(*\)NULL)19 b Fr(this)i(signals)f Fq -(completion_matches)90 1155 y(\(\))c Fr(that)g(there)h(are)f(no)h(more) -f(p)q(ossibilitie)q(s)j(left.)25 b(Usually)18 b(the)e(generator)g -(function)i(computes)e(the)h(list)90 1217 y(of)j(p)q(ossible)i -(completions)f(when)g Fl(state)h Fr(is)f(zero,)g(and)f(returns)g(them)h -(one)f(at)g(a)g(time)g(on)g(subsequen)o(t)90 1279 y(calls.)g(Eac)o(h)14 -b(string)f(the)h(generator)e(function)j(returns)e(as)g(a)g(matc)o(h)g -(m)o(ust)g(b)q(e)h(allo)q(cated)h(with)e Fq(malloc\(\))p -Fr(;)90 1341 y(Readline)18 b(frees)d(the)g(strings)g(when)h(it)f(has)g -(\014nished)i(with)f(them.)1725 1503 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 1503 18 3 v 21 w(complete)j -Fg(\()p Fq(int)14 b(ignore,)g(int)h(invoking_key)p Fg(\))120 -1566 y Fr(Complete)j(the)f(w)o(ord)f(at)h(or)g(b)q(efore)g(p)q(oin)o -(t.)27 b(Y)l(ou)17 b(ha)o(v)o(e)g(supplied)i(the)f(function)g(that)e -(do)q(es)i(the)120 1628 y(initial)d(simple)f(matc)o(hing)f(selection)h -(algorithm)f(\(see)f Fq(completion_matches)h(\(\))p Fr(\).)18 -b(The)13 b(default)120 1690 y(is)j(to)e(do)h(\014lename)i(completion.) -1736 1852 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g -Fh(rl)p 316 1852 V 21 w(completion)p 611 1852 V 21 w(en)n(try)p -764 1852 V 21 w(function)120 1914 y Fr(This)e(is)g(a)f(p)q(oin)o(ter)h -(to)f(the)g(generator)g(function)h(for)f Fq(completion_matches)12 -b(\(\))p Fr(.)27 b(If)17 b(the)h(v)m(alue)120 1977 y(of)j -Fq(rl_completion_entry_funct)o(ion)d Fr(is)k Fq(\(Function)14 -b(*\)NULL)20 b Fr(then)i(the)f(default)h(\014lename)120 -2039 y(generator)14 b(function,)i Fq(filename_completion_functi)o(on)c -(\(\))p Fr(,)j(is)g(used.)0 2247 y Fk(2.5.2)30 b(Completion)15 -b(F)-5 b(unctions)62 2384 y Fr(Here)16 b(is)f(the)h(complete)g(list)g -(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.) -1725 2545 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 -2545 V 21 w(complete)p 385 2545 V 21 w(in)n(ternal)k -Fg(\()p Fq(int)15 b(what_to_do)p Fg(\))120 2608 y Fr(Complete)d(the)g -(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)19 b Fl(what)p -979 2608 14 2 v 16 w(to)p 1036 2608 V 16 w(do)14 b Fr(sa)o(ys)d(what)g -(to)g(do)g(with)h(the)g(completion.)120 2670 y(A)g(v)m(alue)h(of)f(`)p -Fq(?)p Fr(')f(means)h(list)h(the)f(p)q(ossible)i(completions.)20 -b(`)p Fq(TAB)p Fr(')11 b(means)h(do)g(standard)f(completion.)p -eop -36 37 bop 0 -58 a Fr(36)1449 b(GNU)15 b(Readline)i(Library)120 -183 y(`)p Fq(*)p Fr(')c(means)h(insert)h(all)g(of)f(the)g(p)q(ossible)i -(completions.)21 b(`)p Fq(!)p Fr(')13 b(means)h(to)g(displa)o(y)h(all)g -(of)f(the)g(p)q(ossible)120 246 y(completions,)i(if)g(there)f(is)h -(more)e(than)h(one,)g(as)g(w)o(ell)h(as)f(p)q(erforming)h(partial)f -(completion.)1725 441 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 441 18 3 v 21 w(complete)j Fg(\()p Fq(int)14 -b(ignore,)g(int)h(invoking_key)p Fg(\))120 503 y Fr(Complete)23 -b(the)g(w)o(ord)e(at)h(or)g(b)q(efore)h(p)q(oin)o(t.)43 -b(Y)l(ou)23 b(ha)o(v)o(e)f(supplied)j(the)d(function)i(that)e(do)q(es) -120 565 y(the)16 b(initial)j(simple)f(matc)o(hing)e(selection)i -(algorithm)e(\(see)g Fq(completion_matches)d(\(\))j Fr(and)g -Fq(rl_)120 627 y(completion_entry_function)p Fr(\))o(.)25 -b(The)18 b(default)g(is)g(to)f(do)h(\014lename)h(completion.)29 -b(This)18 b(calls)120 690 y Fq(rl_complete_internal)12 -b(\(\))j Fr(with)h(an)f(argumen)o(t)f(dep)q(ending)k(on)d -Fl(in)o(v)o(oking)p 1496 690 14 2 v 17 w(k)o(ey)p Fr(.)1725 -885 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 885 -18 3 v 21 w(p)r(ossible)p 358 885 V 20 w(completions)j -Fg(\()p Fq(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))120 -947 y Fr(List)23 b(the)f(p)q(ossible)j(completions.)42 -b(See)23 b(description)h(of)e Fq(rl_complete)14 b(\(\))p -Fr(.)41 b(This)23 b(calls)g Fq(rl_)120 1009 y(complete_internal)13 -b(\(\))i Fr(with)g(an)g(argumen)o(t)g(of)g(`)p Fq(?)p -Fr('.)1725 1204 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 1204 V 21 w(insert)p 303 1204 V 21 w(completions)j -Fg(\()p Fq(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))120 -1267 y Fr(Insert)20 b(the)f(list)i(of)e(p)q(ossible)i(completions)f(in) -o(to)g(the)f(line,)j(deleting)f(the)f(partially-completed)120 -1329 y(w)o(ord.)h(See)c(description)g(of)e Fq(rl_complete)f(\(\))p -Fr(.)21 b(This)c(calls)g Fq(rl_complete_internal)12 b(\(\))k -Fr(with)120 1391 y(an)f(argumen)o(t)g(of)f(`)p Fq(*)p -Fr('.)1725 1586 y(F)l(unction)-1899 b Fi(char)20 b(**)f -Fh(completion)p 472 1586 V 21 w(matc)n(hes)j Fg(\()p -Fq(char)15 b(*text,)f(CPFunction)208 1648 y(*entry_func)p -Fg(\))120 1711 y Fr(Returns)22 b(an)g(arra)o(y)e(of)h -Fq(\(char)15 b(*\))21 b Fr(whic)o(h)i(is)f(a)f(list)i(of)e(completions) -i(for)e Fl(text)p Fr(.)39 b(If)22 b(there)f(are)120 1773 -y(no)d(completions,)i(returns)e Fq(\(char)c(**\)NULL)p -Fr(.)28 b(The)19 b(\014rst)e(en)o(try)h(in)h(the)g(returned)f(arra)o(y) -f(is)i(the)120 1835 y(substitution)c(for)e Fl(text)p -Fr(.)19 b(The)c(remaining)g(en)o(tries)f(are)g(the)g(p)q(ossible)i -(completions.)k(The)15 b(arra)o(y)d(is)120 1897 y(terminated)j(with)h -(a)f Fq(NULL)f Fr(p)q(oin)o(ter.)120 2045 y Fl(en)o(try)p -227 2045 14 2 v 16 w(func)h Fr(is)d(a)g(function)h(of)e(t)o(w)o(o)g -(args,)g(and)h(returns)g(a)f Fq(\(char)k(*\))p Fr(.)j(The)12 -b(\014rst)f(argumen)o(t)g(is)i Fl(text)p Fr(.)120 2108 -y(The)i(second)f(is)h(a)f(state)g(argumen)o(t;)f(it)i(is)g(zero)f(on)g -(the)h(\014rst)f(call,)h(and)f(non-zero)h(on)f(subsequen)o(t)120 -2170 y(calls.)21 b Fl(en)o(try)p 346 2170 V 16 w(func)c -Fr(returns)e(a)f Fq(NULL)g Fr(p)q(oin)o(ter)h(to)f(the)g(caller)i(when) -f(there)f(are)g(no)h(more)f(matc)o(hes.)1725 2365 y(F)l(unction)-1899 -b Fi(char)20 b(*)f Fh(\014lename)p 380 2365 18 3 v 20 -w(completion)p 674 2365 V 21 w(function)k Fg(\()p Fq(char)15 -b(*text,)f(int)h(state)p Fg(\))120 2427 y Fr(A)e(generator)f(function)h -(for)f(\014lename)i(completion)g(in)f(the)g(general)g(case.)19 -b(Note)13 b(that)f(completion)120 2490 y(in)18 b(Bash)f(is)h(a)f -(little)h(di\013eren)o(t)f(b)q(ecause)h(of)f(all)h(the)f(pathnames)g -(that)g(m)o(ust)f(b)q(e)i(follo)o(w)o(ed)f(when)120 2552 -y(lo)q(oking)23 b(up)f(completions)h(for)e(a)g(command.)39 -b(The)22 b(Bash)g(source)g(is)g(a)f(useful)i(reference)g(for)120 -2614 y(writing)16 b(custom)f(completion)h(functions.)p -eop -37 38 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(37)1725 183 y(F)l(unction)-1899 b Fi(char)20 -b(*)f Fh(username)p 412 183 18 3 v 19 w(completion)p -705 183 V 21 w(function)k Fg(\()p Fq(char)14 b(*text,)g(int)h(state)p -Fg(\))120 246 y Fr(A)i(completion)h(generator)e(for)g(usernames.)24 -b Fl(text)18 b Fr(con)o(tains)e(a)h(partial)g(username)g(preceded)h(b)o -(y)120 308 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p -Fq(~)p Fr('\).)24 b(As)18 b(with)f(all)h(completion)h(generators,)d -Fl(state)j Fr(is)f(zero)f(on)120 370 y(the)e(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)0 618 y Fk(2.5.3)30 -b(Completion)15 b(V)-5 b(ariables)1736 793 y Fr(V)l(ariable)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 793 V 21 w(completion)p -611 793 V 21 w(en)n(try)p 764 793 V 21 w(function)120 -856 y Fr(A)d(p)q(oin)o(ter)h(to)f(the)g(generator)f(function)i(for)f -Fq(completion_matches)c(\(\))p Fr(.)25 b Fq(NULL)17 b -Fr(means)g(to)g(use)120 918 y Fq(filename_entry_function)12 -b(\(\))p Fr(,)j(the)g(default)h(\014lename)g(completer.)1736 -1093 y(V)l(ariable)-1899 b Fi(CPPFunction)21 b(*)e Fh(rl)p -394 1093 V 21 w(attempted)p 674 1093 V 20 w(completion)p -968 1093 V 21 w(function)120 1156 y Fr(A)g(p)q(oin)o(ter)h(to)f(an)g -(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)32 -b(The)20 b(function)g(is)g(called)h(with)120 1218 y Fl(text)p -Fr(,)e Fl(start)p Fr(,)g(and)g Fl(end)p Fr(.)32 b Fl(start)19 -b Fr(and)g Fl(end)j Fr(are)c(indices)j(in)f Fq(rl_line_buffer)d -Fr(sa)o(ying)i(what)g(the)120 1280 y(b)q(oundaries)c(of)e -Fl(text)h Fr(are.)19 b(If)13 b(this)h(function)g(exists)g(and)g -(returns)f Fq(NULL)p Fr(,)g(or)g(if)h(this)f(v)m(ariable)i(is)f(set)120 -1342 y(to)h Fq(NULL)p Fr(,)f(then)i Fq(rl_complete)e(\(\))h -Fr(will)i(call)g(the)e(v)m(alue)i(of)e Fq(rl_completion_entry_funct)o -(ion)120 1405 y Fr(to)g(generate)f(matc)o(hes,)h(otherwise)g(the)h -(arra)o(y)e(of)g(strings)h(returned)h(will)h(b)q(e)f(used.)1736 -1580 y(V)l(ariable)-1899 b Fi(CPFunction)21 b(*)e Fh(rl)p -368 1580 V 21 w(\014lename)p 597 1580 V 20 w(quoting)p -806 1580 V 21 w(function)120 1642 y Fr(A)e(p)q(oin)o(ter)h(to)f(a)g -(function)h(that)e(will)j(quote)e(a)g(\014lename)h(in)h(an)e -(application-)i(sp)q(eci\014c)g(fashion.)120 1705 y(This)f(is)g(called) -i(if)e(\014lename)h(completion)f(is)h(b)q(eing)f(attempted)g(and)f(one) -h(of)f(the)h(c)o(haracters)f(in)120 1767 y Fq -(rl_filename_quote_characte)o(rs)g Fr(app)q(ears)k(in)g(a)f(completed)h -(\014lename.)37 b(The)20 b(function)h(is)120 1829 y(called)14 -b(with)f Fl(text)p Fr(,)g Fl(matc)o(h)p 579 1829 14 2 -v 15 w(t)o(yp)q(e)p Fr(,)g(and)g Fl(quote)p 903 1829 -V 16 w(p)q(oin)o(ter)p Fr(.)20 b(The)13 b Fl(text)g Fr(is)g(the)g -(\014lename)h(to)e(b)q(e)h(quoted.)120 1891 y(The)21 -b Fl(matc)o(h)p 345 1891 V 16 w(t)o(yp)q(e)j Fr(is)e(either)f -Fq(SINGLE_MATCH)p Fr(,)g(if)h(there)f(is)h(only)f(one)h(completion)g -(matc)o(h,)f(or)120 1954 y Fq(MULT_MATCH)p Fr(.)d(Some)13 -b(functions)g(use)h(this)f(to)f(decide)j(whether)e(or)f(not)h(to)f -(insert)i(a)e(closing)i(quote)120 2016 y(c)o(haracter.)36 -b(The)21 b Fl(quote)p 565 2016 V 16 w(p)q(oin)o(ter)k -Fr(is)c(a)g(p)q(oin)o(ter)g(to)f(an)o(y)h(op)q(ening)h(quote)f(c)o -(haracter)f(the)h(user)120 2078 y(t)o(yp)q(ed.)f(Some)15 -b(functions)h(c)o(ho)q(ose)g(to)e(reset)h(this)h(c)o(haracter.)1736 -2254 y(V)l(ariable)-1899 b Fi(CPFunction)21 b(*)e Fh(rl)p -368 2254 18 3 v 21 w(\014lename)p 597 2254 V 20 w(dequoting)p -864 2254 V 21 w(function)120 2316 y Fr(A)f(p)q(oin)o(ter)g(to)f(a)g -(function)h(that)f(will)i(remo)o(v)o(e)e(application-sp)q(eci\014c)k -(quoting)d(c)o(haracters)f(from)120 2378 y(a)h(\014lename)i(b)q(efore)f -(completion)h(is)f(attempted,)g(so)f(those)h(c)o(haracters)f(do)g(not)h -(in)o(terfere)g(with)120 2440 y(matc)o(hing)13 b(the)g(text)f(against)g -(names)h(in)g(the)g(\014lesystem.)20 b(It)13 b(is)g(called)h(with)f -Fl(text)p Fr(,)g(the)f(text)h(of)f(the)120 2503 y(w)o(ord)i(to)g(b)q(e) -h(dequoted,)g(and)g Fl(quote)p 757 2503 14 2 v 16 w(c)o(har)p -Fr(,)f(whic)o(h)i(is)f(the)g(quoting)g(c)o(haracter)f(that)f(delimits)k -(the)120 2565 y(\014lename)d(\(usually)g(`)p Fq(')p Fr(')e(or)g(`)p -Fq(")p Fr('\).)18 b(If)13 b Fl(quote)p 838 2565 V 16 -w(c)o(har)j Fr(is)e(zero,)e(the)h(\014lename)h(w)o(as)e(not)h(in)h(an)f -(em)o(b)q(edded)120 2627 y(string.)p eop -38 39 bop 0 -58 a Fr(38)1449 b(GNU)15 b(Readline)i(Library)1736 -183 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g Fh(rl)p -316 183 18 3 v 21 w(c)n(har)p 444 183 V 20 w(is)p 502 -183 V 22 w(quoted)p 695 183 V 20 w(p)120 246 y Fr(A)d(p)q(oin)o(ter)g -(to)f(a)g(function)i(to)e(call)h(that)f(determines)i(whether)f(or)f -(not)g(a)h(sp)q(eci\014c)h(c)o(haracter)e(in)120 308 -y(the)c(line)i(bu\013er)e(is)h(quoted,)f(according)h(to)e(whatev)o(er)h -(quoting)g(mec)o(hanism)h(the)f(program)f(calling)120 -370 y(readline)j(uses.)20 b(The)13 b(function)g(is)h(called)g(with)f(t) -o(w)o(o)f(argumen)o(ts:)17 b Fl(text)p Fr(,)c(the)g(text)f(of)g(the)h -(line,)i(and)120 432 y Fl(index)p Fr(,)j(the)e(index)i(of)e(the)g(c)o -(haracter)g(in)h(the)g(line.)25 b(It)16 b(is)h(used)g(to)f(decide)i -(whether)f(a)f(c)o(haracter)120 495 y(found)j(in)g Fq -(rl_completer_word_break_)o(charact)o(ers)c Fr(should)20 -b(b)q(e)e(used)h(to)f(break)g(w)o(ords)g(for)120 557 -y(the)d(completer.)1736 745 y(V)l(ariable)-1899 b Fi(int)20 -b Fh(rl)p 140 745 V 21 w(completion)p 435 745 V 21 w(query)p -598 745 V 21 w(items)120 807 y Fr(Up)h(to)e(this)i(man)o(y)f(items)h -(will)h(b)q(e)f(displa)o(y)o(ed)h(in)f(resp)q(onse)g(to)f(a)g(p)q -(ossible-completions)j(call.)120 869 y(After)16 b(that,)f(w)o(e)g(ask)h -(the)g(user)g(if)g(she)g(is)h(sure)f(she)g(w)o(an)o(ts)f(to)g(see)h -(them)g(all.)23 b(The)16 b(default)h(v)m(alue)120 932 -y(is)f(100.)1736 1120 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 1120 V 21 w(basic)p 355 1120 V 21 w(w)n(ord)p -500 1120 V 21 w(break)p 661 1120 V 20 w(c)n(haracters)120 -1182 y Fr(The)12 b(basic)g(list)h(of)e(c)o(haracters)g(that)g(signal)h -(a)g(break)f(b)q(et)o(w)o(een)h(w)o(ords)f(for)g(the)h(completer)g -(routine.)120 1244 y(The)17 b(default)h(v)m(alue)g(of)e(this)i(v)m -(ariable)g(is)g(the)f(c)o(haracters)f(whic)o(h)h(break)g(w)o(ords)g -(for)f(completion)120 1306 y(in)g(Bash,)f(i.e.,)g Fq(")g -(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fr(.)1736 1494 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1494 V 21 w(basic)p 355 -1494 V 21 w(quote)p 515 1494 V 21 w(c)n(haracters)120 -1557 y Fr(List)d(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)f(cause)h -(a)f(w)o(ord)f(break.)1736 1745 y(V)l(ariable)-1899 b -Fi(char)20 b(*)f Fh(rl)p 211 1745 V 21 w(completer)p -480 1745 V 21 w(w)n(ord)p 625 1745 V 20 w(break)p 785 -1745 V 20 w(c)n(haracters)120 1807 y Fr(The)f(list)h(of)e(c)o -(haracters)g(that)g(signal)i(a)f(break)f(b)q(et)o(w)o(een)h(w)o(ords)g -(for)f Fq(rl_complete_internal)120 1869 y(\(\))p Fr(.)j(The)15 -b(default)h(list)g(is)f(the)h(v)m(alue)g(of)f Fq -(rl_basic_word_break_charac)o(ters)p Fr(.)1736 2057 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 2057 V 21 w(completer)p -480 2057 V 21 w(quote)p 640 2057 V 21 w(c)n(haracters)120 -2120 y Fr(List)j(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)h(used)f -(to)f(quote)h(a)g(substring)g(of)f(the)h(line.)39 b(Completion)120 -2182 y(o)q(ccurs)17 b(on)f(the)h(en)o(tire)g(substring,)g(and)f(within) -i(the)e(substring)h Fq(rl_completer_word_break_)120 2244 -y(characters)i Fr(are)g(treated)h(as)f(an)o(y)h(other)g(c)o(haracter,)g -(unless)h(they)f(also)g(app)q(ear)g(within)i(this)120 -2306 y(list.)1736 2494 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 2494 V 21 w(\014lename)p 440 2494 V -20 w(quote)p 599 2494 V 21 w(c)n(haracters)120 2557 y -Fr(A)g(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g(\014lename)h(to)e -(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f(they)120 -2619 y(app)q(ear)c(in)h(a)f(completed)h(\014lename.)21 -b(The)16 b(default)g(is)f(empt)o(y)l(.)p eop -39 40 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(39)1736 183 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 183 18 3 v 21 w(sp)r(ecial)p 398 183 -V 22 w(pre\014xes)120 246 y Fr(The)d(list)h(of)e(c)o(haracters)g(that)g -(are)h(w)o(ord)f(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g -(in)h Fl(text)f Fr(when)120 308 y(it)f(is)g(passed)g(to)f(the)g -(completion)i(function.)k(Programs)14 b(can)g(use)h(this)g(to)f(help)i -(determine)g(what)120 370 y(kind)h(of)f(completing)i(to)e(do.)23 -b(F)l(or)16 b(instance,)h(Bash)f(sets)g(this)h(v)m(ariable)h(to)e -Fq(")p Fr($)p Fq(@")f Fr(so)h(that)g(it)h(can)120 432 -y(complete)f(shell)h(v)m(ariables)f(and)g(hostnames.)1736 -587 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p 140 587 -V 21 w(completion)p 435 587 V 21 w(app)r(end)p 640 587 -V 19 w(c)n(haracter)120 650 y Fr(When)f(a)g(single)h(completion)g -(alternativ)o(e)f(matc)o(hes)g(at)f(the)h(end)g(of)g(the)g(command)f -(line,)k(this)120 712 y(c)o(haracter)12 b(is)i(app)q(ended)h(to)d(the)i -(inserted)g(completion)g(text.)19 b(The)13 b(default)h(is)f(a)g(space)h -(c)o(haracter)120 774 y(\(`)g('\).)21 b(Setting)c(this)f(to)f(the)h(n)o -(ull)h(c)o(haracter)e(\(`)p Fq(\\0)p Fr('\))f(prev)o(en)o(ts)i(an)o -(ything)g(b)q(eing)h(app)q(ended)g(auto-)120 836 y(matically)l(.)26 -b(This)17 b(can)g(b)q(e)g(c)o(hanged)g(in)g(custom)g(completion)h -(functions)f(to)f(pro)o(vide)h(the)g(\\most)120 899 y(sensible)i(w)o -(ord)d(separator)g(c)o(haracter")g(according)h(to)f(an)h -(application-sp)q(eci\014)q(c)j(command)c(line)120 961 -y(syn)o(tax)e(sp)q(eci\014cation.)1736 1116 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1116 V 21 w(ignore)p 316 1116 -V 20 w(completion)p 610 1116 V 21 w(duplicates)120 1178 -y Fr(If)15 b(non-zero,)h(then)f(disallo)o(w)h(duplicates)h(in)f(the)g -(matc)o(hes.)j(Default)c(is)h(1.)1736 1333 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1333 V 21 w(\014lename)p 369 -1333 V 20 w(completion)p 663 1333 V 21 w(desired)120 -1395 y Fr(Non-zero)e(means)g(that)f(the)g(results)i(of)e(the)h(matc)o -(hes)f(are)h(to)f(b)q(e)h(treated)f(as)h(\014lenames.)28 -b(This)120 1458 y(is)16 b Fl(alw)o(a)o(ys)h Fr(zero)e(on)g(en)o(try)l -(,)g(and)h(can)g(only)g(b)q(e)g(c)o(hanged)f(within)i(a)e(completion)i -(en)o(try)e(generator)120 1520 y(function.)26 b(If)18 -b(it)f(is)h(set)f(to)f(a)h(non-zero)g(v)m(alue,)i(directory)e(names)g -(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(and)120 1582 -y(Readline)i(attempts)c(to)g(quote)h(completed)i(\014lenames)f(if)f -(they)h(con)o(tain)f(an)o(y)g(em)o(b)q(edded)i(w)o(ord)120 -1645 y(break)15 b(c)o(haracters.)1736 1800 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1800 V 21 w(\014lename)p 369 -1800 V 20 w(quoting)p 578 1800 V 21 w(desired)120 1862 -y Fr(Non-zero)c(means)g(that)g(the)g(results)h(of)e(the)i(matc)o(hes)e -(are)h(to)g(b)q(e)h(quoted)f(using)h(double)g(quotes)120 -1924 y(\(or)d(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o -(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y) -120 1986 y(c)o(haracters)i(in)h Fq(rl_filename_quote_chars)p -Fr(.)24 b(This)19 b(is)f Fl(alw)o(a)o(ys)h Fr(non-zero)f(on)f(en)o(try) -l(,)h(and)g(can)120 2049 y(only)d(b)q(e)g(c)o(hanged)f(within)i(a)e -(completion)h(en)o(try)f(generator)g(function.)20 b(The)14 -b(quoting)h(is)g(e\013ected)120 2111 y(via)g(a)g(call)i(to)d(the)i -(function)g(p)q(oin)o(ted)g(to)e(b)o(y)h Fq -(rl_filename_quoting_function)p Fr(.)1736 2266 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 2266 V 21 w(inhibit)p 324 2266 -V 23 w(completion)120 2328 y Fr(If)15 b(this)g(v)m(ariable)h(is)f -(non-zero,)g(completion)h(is)f(inhibit)p Fq(<)p Fr(ed.)22 -b(The)15 b(completion)h(c)o(haracter)e(will)i(b)q(e)120 -2390 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)e -Fq(self-insert)p Fr(.)1736 2545 y(V)l(ariable)-1899 b -Fi(Function)20 b(*)g Fh(rl)p 316 2545 V 21 w(ignore)p -492 2545 V 20 w(some)p 639 2545 V 19 w(completions)p -955 2545 V 21 w(function)120 2608 y Fr(This)e(function,)g(if)g -(de\014ned,)h(is)f(called)h(b)o(y)e(the)h(completer)g(when)g(real)f -(\014lename)i(completion)f(is)120 2670 y(done,)13 b(after)e(all)i(the)g -(matc)o(hing)f(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)19 -b(It)12 b(is)h(passed)f(a)g Fq(NULL)g Fr(terminated)p -eop -40 41 bop 0 -58 a Fr(40)1449 b(GNU)15 b(Readline)i(Library)120 -183 y(arra)o(y)f(of)h(matc)o(hes.)26 b(The)17 b(\014rst)g(elemen)o(t)h -(\()p Fq(matches[0])p Fr(\))e(is)h(the)h(maximal)g(substring)f(common) -120 246 y(to)f(all)h(matc)o(hes.)22 b(This)17 b(function)g(can)f -(re-arrange)g(the)g(list)h(of)f(matc)o(hes)g(as)f(required,)j(but)e -(eac)o(h)120 308 y(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f(m)o -(ust)h(b)q(e)h(freed.)1736 470 y(V)l(ariable)-1899 b -Fi(Function)20 b(*)g Fh(rl)p 316 470 18 3 v 21 w(directory)p -564 470 V 21 w(completion)p 859 470 V 21 w(ho)r(ok)120 -532 y Fr(This)15 b(function,)g(if)g(de\014ned,)h(is)f(allo)o(w)o(ed)g -(to)e(mo)q(dify)j(the)e(directory)h(p)q(ortion)g(of)f(\014lenames)h -(Read-)120 594 y(line)h(completes.)k(It)14 b(is)g(called)i(with)e(the)g -(address)g(of)g(a)g(string)g(\(the)g(curren)o(t)f(directory)i(name\))e -(as)120 656 y(an)f(argumen)o(t.)17 b(It)12 b(could)h(b)q(e)f(used)g(to) -f(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)i(v)m(ariables)g(in)f -(pathnames.)0 864 y Fk(2.5.4)30 b(A)15 b(Short)g(Completion)g(Example) -62 1001 y Fr(Here)20 b(is)h(a)e(small)i(application)g(demonstrating)f -(the)f(use)i(of)e(the)h(GNU)f(Readline)k(library)l(.)34 -b(It)20 b(is)g(called)0 1063 y Fq(fileman)p Fr(,)14 b(and)i(the)f -(source)g(co)q(de)h(resides)g(in)h(`)p Fq(examples/fileman.c)p -Fr(')o(.)h(This)e(sample)f(application)i(pro)o(vides)0 -1126 y(completion)f(of)f(command)g(names,)g(line)i(editing)f(features,) -f(and)g(access)g(to)g(the)g(history)g(list.)p eop -41 42 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(41)120 183 y Fq(/*)24 b(fileman.c)e(--)i(A)g(tiny)f -(application)f(which)h(demonstrates)g(how)g(to)h(use)f(the)192 -235 y(GNU)g(Readline)g(library.)46 b(This)24 b(application)e -(interactively)g(allows)h(users)192 287 y(to)g(manipulate)g(files)g -(and)g(their)g(modes.)h(*/)120 391 y(#include)f()120 -443 y(#include)g()120 495 y(#include)g()120 -546 y(#include)g()120 598 y(#include)g()120 -702 y(#include)g()120 754 y(#include)g -()120 858 y(extern)g(char)g(*getwd)g(\(\);)120 -910 y(extern)g(char)g(*xmalloc)g(\(\);)120 1013 y(/*)h(The)f(names)g -(of)h(functions)e(that)i(actually)f(do)g(the)h(manipulation.)e(*/)120 -1065 y(int)h(com_list)g(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i -(com_stat)f(\(\),)g(com_pwd)g(\(\);)120 1117 y(int)g(com_delete)g -(\(\),)g(com_help)g(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)120 -1221 y(/*)h(A)f(structure)g(which)g(contains)g(information)f(on)i(the)f -(commands)g(this)g(program)192 1273 y(can)g(understand.)f(*/)120 -1377 y(typedef)h(struct)g({)168 1429 y(char)g(*name;)g(/*)h(User)f -(printable)g(name)g(of)h(the)f(function.)g(*/)168 1480 -y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.) -h(*/)168 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h -(function.)46 b(*/)120 1584 y(})24 b(COMMAND;)120 1688 -y(COMMAND)f(commands[])f(=)i({)168 1740 y({)f("cd",)h(com_cd,)f -("Change)f(to)i(directory)f(DIR")g(},)168 1792 y({)g("delete",)g -(com_delete,)f("Delete)h(FILE")h(},)168 1844 y({)f("help",)g(com_help,) -g("Display)g(this)g(text")g(},)168 1896 y({)g("?",)h(com_help,)e -("Synonym)h(for)h(`help'")f(},)168 1947 y({)g("list",)g(com_list,)g -("List)g(files)g(in)h(DIR")f(},)168 1999 y({)g("ls",)h(com_list,)e -("Synonym)h(for)g(`list'")g(},)168 2051 y({)g("pwd",)g(com_pwd,)g -("Print)g(the)h(current)f(working)g(directory")f(},)168 -2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)168 -2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g -(},)168 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g -(on)h(FILE")f(},)168 2259 y({)g("view",)g(com_view,)g("View)g(the)h -(contents)e(of)i(FILE")f(},)168 2311 y({)g(\(char)h(*\)NULL,)f -(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})120 2363 -y(};)120 2466 y(/*)h(Forward)e(declarations.)h(*/)120 -2518 y(char)g(*stripwhite)g(\(\);)120 2570 y(COMMAND)g(*find_command)f -(\(\);)p eop -42 43 bop 0 -58 a Fr(42)1449 b(GNU)15 b(Readline)i(Library)120 -183 y Fq(/*)24 b(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f(from) -g(argv[0].)g(*/)120 235 y(char)g(*progname;)120 339 y(/*)h(When)f -(non-zero,)g(this)g(global)g(means)g(the)h(user)f(is)g(done)h(using)f -(this)g(program.)g(*/)120 391 y(int)g(done;)120 495 y(char)g(*)120 -546 y(dupstr)g(\(s\))239 598 y(int)h(s;)120 650 y({)168 -702 y(char)f(*r;)168 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h -(1\);)168 858 y(strcpy)f(\(r,)g(s\);)168 910 y(return)g(\(r\);)120 -962 y(})120 1065 y(main)g(\(argc,)g(argv\))239 1117 y(int)h(argc;)239 -1169 y(char)g(**argv;)120 1221 y({)168 1273 y(char)f(*line,)g(*s;)168 -1377 y(progname)f(=)i(argv[0];)168 1480 y(initialize_readline)d(\(\);)i -(/*)h(Bind)f(our)h(completer.)e(*/)168 1584 y(/*)h(Loop)h(reading)f -(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)168 -1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))215 1688 y({)263 -1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)263 1844 -y(if)i(\(!line\))311 1896 y(break;)263 1999 y(/*)g(Remove)f(leading)g -(and)g(trailing)g(whitespace)f(from)i(the)f(line.)335 -2051 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h -(the)f(history)g(list)335 2103 y(and)g(execute)g(it.)h(*/)263 -2155 y(s)g(=)g(stripwhite)e(\(line\);)263 2259 y(if)i(\(*s\))311 -2311 y({)359 2363 y(add_history)e(\(s\);)359 2414 y(execute_line)g -(\(s\);)311 2466 y(})263 2570 y(free)h(\(line\);)215 -2622 y(})p eop -43 44 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(43)168 183 y Fq(exit)23 b(\(0\);)120 -235 y(})120 339 y(/*)h(Execute)e(a)i(command)f(line.)g(*/)120 -391 y(int)120 443 y(execute_line)f(\(line\))239 495 y(char)i(*line;)120 -546 y({)168 598 y(register)e(int)i(i;)168 650 y(COMMAND)f(*command;)168 -702 y(char)g(*word;)168 806 y(/*)g(Isolate)g(the)h(command)f(word.)g -(*/)168 858 y(i)g(=)h(0;)168 910 y(while)f(\(line[i])g(&&)g(whitespace) -g(\(line[i]\)\))215 962 y(i++;)168 1013 y(word)g(=)h(line)f(+)h(i;)168 -1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))215 -1169 y(i++;)168 1273 y(if)g(\(line[i]\))215 1325 y(line[i++])g(=)h -('\\0';)168 1429 y(command)f(=)g(find_command)g(\(word\);)168 -1532 y(if)g(\(!command\))215 1584 y({)263 1636 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)263 -1688 y(return)g(\(-1\);)215 1740 y(})168 1844 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)168 1896 y(while)f(\(whitespace)f -(\(line[i]\)\))215 1947 y(i++;)168 2051 y(word)h(=)h(line)f(+)h(i;)168 -2155 y(/*)f(Call)h(the)f(function.)g(*/)168 2207 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)120 2259 y(})120 -2363 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g -(and)h(return)f(a)g(pointer)g(to)h(that)192 2414 y(command.)46 -b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f -(name.)g(*/)120 2466 y(COMMAND)g(*)120 2518 y(find_command)f(\(name\)) -239 2570 y(char)i(*name;)120 2622 y({)p eop -44 45 bop 0 -58 a Fr(44)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(register)22 b(int)i(i;)168 287 y(for)f(\(i)h(=)f(0;)h -(commands[i].name;)e(i++\))215 339 y(if)i(\(strcmp)f(\(name,)g -(commands[i].name\))f(==)h(0\))263 391 y(return)g(\(&commands[i]\);)168 -495 y(return)g(\(\(COMMAND)f(*\)NULL\);)120 546 y(})120 -650 y(/*)i(Strip)f(whitespace)f(from)i(the)f(start)g(and)h(end)f(of)h -(STRING.)46 b(Return)24 b(a)f(pointer)192 702 y(into)g(STRING.)g(*/)120 -754 y(char)g(*)120 806 y(stripwhite)f(\(string\))239 -858 y(char)i(*string;)120 910 y({)168 962 y(register)e(char)i(*s,)f -(*t;)168 1065 y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\)) -215 1117 y(;)168 1221 y(if)g(\(*s)h(==)f(0\))215 1273 -y(return)g(\(s\);)168 1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;) -168 1429 y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))215 -1480 y(t--;)168 1532 y(*++t)h(=)h('\\0';)168 1636 y(return)f(s;)120 -1688 y(})120 1792 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)120 1844 y(/*)1575 -b(*/)120 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)120 1947 y(/*)1575 b(*/)120 1999 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)120 2103 y(char)i(*command_generator)f(\(\);)120 -2155 y(char)h(**fileman_completion)e(\(\);)120 2259 y(/*)j(Tell)f(the)g -(GNU)h(Readline)f(library)f(how)i(to)g(complete.)46 b(We)24 -b(want)f(to)h(try)f(to)h(complete)192 2311 y(on)f(command)g(names)g(if) -h(this)f(is)h(the)f(first)g(word)h(in)f(the)h(line,)f(or)h(on)f -(filenames)192 2363 y(if)g(not.)g(*/)120 2414 y(initialize_readline)e -(\(\))120 2466 y({)168 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g -(the)h(~/.inputrc)e(file.)h(*/)168 2570 y(rl_readline_name)e(=)j -("FileMan";)p eop -45 46 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(45)168 183 y Fq(/*)23 b(Tell)h(the)f(completer)g(that)g -(we)h(want)f(a)h(crack)f(first.)g(*/)168 235 y -(rl_attempted_completion_)o(functio)o(n)e(=)j(\(CPPFunction)e -(*\)fileman_completion;)120 287 y(})120 391 y(/*)i(Attempt)e(to)i -(complete)f(on)g(the)h(contents)f(of)g(TEXT.)47 b(START)23 -b(and)h(END)f(bound)h(the)192 443 y(region)f(of)g(rl_line_buffer)f -(that)h(contains)g(the)h(word)f(to)h(complete.)46 b(TEXT)23 -b(is)192 495 y(the)g(word)g(to)h(complete.)46 b(We)24 -b(can)f(use)h(the)f(entire)g(contents)g(of)h(rl_line_buffer)192 -546 y(in)f(case)g(we)h(want)f(to)h(do)g(some)f(simple)g(parsing.)47 -b(Return)23 b(the)g(array)g(of)h(matches,)192 598 y(or)f(NULL)g(if)h -(there)f(aren't)g(any.)h(*/)120 650 y(char)f(**)120 702 -y(fileman_completion)e(\(text,)i(start,)g(end\))239 754 -y(char)h(*text;)239 806 y(int)g(start,)f(end;)120 858 -y({)168 910 y(char)g(**matches;)168 1013 y(matches)g(=)g(\(char)h -(**\)NULL;)168 1117 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g -(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)239 -1169 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h -(a)f(file)h(in)f(the)h(current)239 1221 y(directory.)f(*/)168 -1273 y(if)g(\(start)g(==)h(0\))215 1325 y(matches)f(=)h -(completion_matches)d(\(text,)j(command_generator\);)168 -1429 y(return)f(\(matches\);)120 1480 y(})120 1584 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)h(know)f(whether)192 1636 y(to)g(start)g(from)h(scratch;)e -(without)h(any)h(state)f(\(i.e.)g(STATE)g(==)h(0\),)f(then)h(we)192 -1688 y(start)f(at)g(the)h(top)f(of)h(the)f(list.)g(*/)120 -1740 y(char)g(*)120 1792 y(command_generator)f(\(text,)h(state\))239 -1844 y(char)h(*text;)239 1896 y(int)g(state;)120 1947 -y({)168 1999 y(static)f(int)g(list_index,)g(len;)168 -2051 y(char)g(*name;)168 2155 y(/*)g(If)h(this)f(is)h(a)g(new)f(word)g -(to)h(complete,)f(initialize)f(now.)47 b(This)24 b(includes)239 -2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)g(and)g -(initializing)f(the)i(index)239 2259 y(variable)f(to)h(0.)f(*/)168 -2311 y(if)g(\(!state\))215 2363 y({)263 2414 y(list_index)g(=)g(0;)263 -2466 y(len)h(=)f(strlen)g(\(text\);)215 2518 y(})168 -2622 y(/*)g(Return)g(the)h(next)f(name)g(which)h(partially)e(matches)h -(from)g(the)h(command)f(list.)g(*/)p eop -46 47 bop 0 -58 a Fr(46)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(while)23 b(\(name)g(=)h(commands[list_index].name)o(\))215 -235 y({)263 287 y(list_index++;)263 391 y(if)g(\(strncmp)f(\(name,)g -(text,)g(len\))g(==)h(0\))311 443 y(return)f(\(dupstr\(name\)\);)215 -495 y(})168 598 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f -(NULL.)g(*/)168 650 y(return)g(\(\(char)g(*\)NULL\);)120 -702 y(})120 806 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)120 858 y(/*)1575 -b(*/)120 910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)120 -962 y(/*)1575 b(*/)120 1013 y(/*)24 b(***********************)o -(*******)o(********)o(*******)o(*******)o(********)o(****)d(*/)120 -1117 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47 -b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)192 -1169 y(commands.)f(*/)120 1221 y(static)h(char)g(syscom[1024];)120 -1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)120 -1377 y(com_list)g(\(arg\))239 1429 y(char)h(*arg;)120 -1480 y({)168 1532 y(if)f(\(!arg\))215 1584 y(arg)h(=)g("";)168 -1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)168 -1740 y(return)g(\(system)g(\(syscom\)\);)120 1792 y(})120 -1896 y(com_view)g(\(arg\))239 1947 y(char)h(*arg;)120 -1999 y({)168 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))215 -2103 y(return)g(1;)168 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)168 2259 y(return)g(\(system)g(\(syscom\)\);)120 -2311 y(})120 2414 y(com_rename)f(\(arg\))239 2466 y(char)i(*arg;)120 -2518 y({)168 2570 y(too_dangerous)e(\("rename"\);)168 -2622 y(return)h(\(1\);)p eop -47 48 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(47)120 183 y Fq(})120 287 y(com_stat)23 -b(\(arg\))239 339 y(char)h(*arg;)120 391 y({)168 443 -y(struct)f(stat)g(finfo;)168 546 y(if)g(\(!valid_argument)f(\("stat",)h -(arg\)\))215 598 y(return)g(\(1\);)168 702 y(if)g(\(stat)g(\(arg,)h -(&finfo\))f(==)g(-1\))215 754 y({)263 806 y(perror)g(\(arg\);)263 -858 y(return)g(\(1\);)215 910 y(})168 1013 y(printf)g(\("Statistics)f -(for)h(`\045s':\\n",)g(arg\);)168 1117 y(printf)g(\("\045s)g(has)h -(\045d)f(link\045s,)g(and)g(is)h(\045d)g(byte\045s)f(in)g(length.\\n",) -g(arg,)359 1169 y(finfo.st_nlink,)359 1221 y(\(finfo.st_nlink)e(==)j -(1\))g(?)f("")h(:)g("s",)359 1273 y(finfo.st_size,)359 -1325 y(\(finfo.st_size)e(==)h(1\))h(?)f("")h(:)g("s"\);)168 -1377 y(printf)f(\("Inode)g(Last)g(Change)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_ctime\)\);)168 1429 y(printf)g(\(")143 b(Last)23 -b(access)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_atime\)\);)168 -1480 y(printf)g(\(")95 b(Last)23 b(modified)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_mtime\)\);)168 1532 y(return)g(\(0\);)120 -1584 y(})120 1688 y(com_delete)f(\(arg\))239 1740 y(char)i(*arg;)120 -1792 y({)168 1844 y(too_dangerous)e(\("delete"\);)168 -1896 y(return)h(\(1\);)120 1947 y(})120 2051 y(/*)h(Print)f(out)g(help) -h(for)f(ARG,)g(or)h(for)f(all)h(of)f(the)h(commands)f(if)g(ARG)h(is)192 -2103 y(not)f(present.)g(*/)120 2155 y(com_help)g(\(arg\))239 -2207 y(char)h(*arg;)120 2259 y({)168 2311 y(register)e(int)i(i;)168 -2363 y(int)f(printed)g(=)h(0;)168 2466 y(for)f(\(i)h(=)f(0;)h -(commands[i].name;)e(i++\))215 2518 y({)263 2570 y(if)i(\(!*arg)f(||)g -(\(strcmp)g(\(arg,)g(commands[i].name\))f(==)i(0\)\))311 -2622 y({)p eop -48 49 bop 0 -58 a Fr(48)1449 b(GNU)15 b(Readline)i(Library)359 -183 y Fq(printf)23 b(\("\045s\\t\\t\045s.\\n",)e(commands[i].name,)h -(commands[i].doc\);)359 235 y(printed++;)311 287 y(})215 -339 y(})168 443 y(if)h(\(!printed\))215 495 y({)263 546 -y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 b(Possibilties)22 -b(are:\\n",)h(arg\);)263 650 y(for)h(\(i)f(=)h(0;)g(commands[i].name;)d -(i++\))311 702 y({)359 754 y(/*)i(Print)g(in)h(six)f(columns.)g(*/)359 -806 y(if)g(\(printed)g(==)h(6\))406 858 y({)454 910 y(printed)f(=)h(0;) -454 962 y(printf)f(\("\\n"\);)406 1013 y(})359 1117 y(printf)g -(\("\045s\\t",)f(commands[i].name\);)359 1169 y(printed++;)311 -1221 y(})263 1325 y(if)i(\(printed\))311 1377 y(printf)f(\("\\n"\);)215 -1429 y(})168 1480 y(return)g(\(0\);)120 1532 y(})120 -1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)120 -1688 y(com_cd)f(\(arg\))239 1740 y(char)h(*arg;)120 1792 -y({)168 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))215 -1896 y({)263 1947 y(perror)g(\(arg\);)263 1999 y(return)g(1;)215 -2051 y(})168 2155 y(com_pwd)g(\(""\);)168 2207 y(return)g(\(0\);)120 -2259 y(})120 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)120 2414 y(com_pwd)g(\(ignore\))239 -2466 y(char)h(*ignore;)120 2518 y({)168 2570 y(char)f(dir[1024],)g(*s;) -p eop -49 50 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(49)168 183 y Fq(s)23 b(=)h(getwd)f(\(dir\);)168 -235 y(if)g(\(s)h(==)f(0\))215 287 y({)263 339 y(printf)g(\("Error)g -(getting)g(pwd:)g(\045s\\n",)g(dir\);)263 391 y(return)g(1;)215 -443 y(})168 546 y(printf)g(\("Current)f(directory)h(is)h(\045s\\n",)f -(dir\);)168 598 y(return)g(0;)120 650 y(})120 754 y(/*)h(The)f(user)g -(wishes)g(to)h(quit)f(using)g(this)h(program.)46 b(Just)24 -b(set)f(DONE)h(non-zero.)e(*/)120 806 y(com_quit)h(\(arg\))239 -858 y(char)h(*arg;)120 910 y({)168 962 y(done)f(=)h(1;)168 -1013 y(return)f(\(0\);)120 1065 y(})120 1169 y(/*)h(Function)e(which)i -(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)120 -1221 y(too_dangerous)f(\(caller\))239 1273 y(char)i(*caller;)120 -1325 y({)168 1377 y(fprintf)f(\(stderr,)382 1429 y("\045s:)h(Too)f -(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23 -b(it)h(yourself.\\n",)382 1480 y(caller\);)120 1532 y(})120 -1636 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid)f(argument)g -(for)g(CALLER,)g(else)g(print)192 1688 y(an)g(error)g(message)g(and)h -(return)f(zero.)g(*/)120 1740 y(int)120 1792 y(valid_argument)f -(\(caller,)h(arg\))239 1844 y(char)h(*caller,)e(*arg;)120 -1896 y({)168 1947 y(if)h(\(!arg)g(||)h(!*arg\))215 1999 -y({)263 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g -(required.\\n",)f(caller\);)263 2103 y(return)h(\(0\);)215 -2155 y(})168 2259 y(return)g(\(1\);)120 2311 y(})p eop -50 51 bop 0 -58 a Fr(50)1449 b(GNU)15 b(Readline)i(Library)p -eop -51 52 bop 0 -58 a Fr(Concept)15 b(Index)1616 b(51)0 183 -y Fn(Concept)16 b(Index)0 430 y Fp(C)0 496 y Ff(command)e(editing)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)23 b Ff(2)0 604 y Fp(E)0 670 y Ff(editing)15 b(command)f(lines)d -Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(2)0 778 y Fp(I)0 845 y Ff(initiali)q(zati)q(on)16 -b(\014le,)e(readline)d Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(5)0 903 y(in)o(teraction,)15 b(readline)5 b Fe(.)j(.)e(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 b Ff(1)0 1011 -y Fp(K)0 1077 y Ff(kill)e(ring)5 b Fe(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)17 b Ff(3)1015 430 y(killin)q(g)f(text)t Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(3)1015 579 y Fp(N)1015 -646 y Ff(notation,)e(readline)7 b Fe(.)h(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(2)1015 795 -y Fp(R)1015 861 y Ff(readline,)15 b(function)8 b Fe(.)g(.)e(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(19)1015 -1011 y Fp(Y)1015 1077 y Ff(y)o(anking)15 b(text)7 b Fe(.)g(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)20 b Ff(3)p eop -52 53 bop 0 -58 a Fr(52)1449 b(GNU)15 b(Readline)i(Library)p -eop -53 54 bop 0 -58 a Fr(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1337 -b(53)0 183 y Fn(F)-7 b(unction)15 b(and)g(V)-7 b(ariable)14 -b(Index)0 424 y Fp(\()0 490 y Fd(\(int)t Fe(.)5 b(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)17 b Ff(31)0 608 y Fp(A)0 674 -y Fd(abort)11 b(\(C-g\))c Fe(.)t(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 b Ff(17)0 -732 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\))5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Ff(12)0 790 y Fd(alphabetic)t Fe(.)s(.)7 -b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(31)0 908 y Fp(B)0 974 y Fd(backward-c)o(ha)o(r)10 -b(\(C-b\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(12)0 1032 y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 -b(\(Rubout\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)23 b Ff(14)0 1090 y Fd(backward-k)o(il)o(l-l)o(in)o -(e)10 b(\(C-x)h(Rubout\))d Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)0 1148 y Fd(backward-k)o(il)o(l-w)o -(or)o(d)10 b(\(M-DEL\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(15)0 -1207 y Fd(backward-w)o(or)o(d)10 b(\(M-b\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(12)0 1265 y Fd(beginning-)o(of)o(-hi)o -(st)o(ory)9 b(\(M-<\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(13)0 -1323 y Fd(beginning-)o(of)o(-li)o(ne)9 b(\(C-a\))g Fe(.)c(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)22 b Ff(12)0 1381 y(b)q(ell-st)o(yle)s Fe(.)9 -b(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(5)0 1498 y Fp(C)0 -1565 y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))7 -b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)20 b Ff(17)0 1623 y Fd(capitalize)o(-w)o(ord)9 -b(\(M-c\))s Fe(.)t(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(14)0 1681 y Fd(character-)o(se)o(arc)o(h)10 b(\(C-]\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(17)0 1739 -y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))c -Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(18)0 1797 y Fd(clear-scre)o(en)9 b(\(C-l\))e Fe(.)t(.)f(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12)0 1855 -y(commen)o(t-b)q(egin)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)0 1913 -y Fd(complete)10 b(\(TAB\))t Fe(.)s(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(16)0 1972 y(completion-query-i) -q(tems)d Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(6)0 2030 y Fd(completion)p 201 2030 12 2 v 10 w(matches)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(36)0 2088 y(con)o(v)o(ert-meta)t Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)16 -b Ff(6)0 2146 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 -b(\(\))s Fe(.)5 b(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(15)0 2204 y Fd(copy-forwa)o(rd)o(-wo)o(rd)9 b(\(\))t -Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(15)0 -2262 y Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)9 b(\(\))h -Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(15)0 2379 -y Fp(D)0 2446 y Fd(delete-cha)o(r)10 b(\(C-d\))e Fe(.)t(.)e(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(14)0 2504 -y Fd(delete-hor)o(iz)o(ont)o(al)o(-sp)o(ace)9 b(\(\))c -Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)18 b Ff(15)0 2562 y Fd(digit-argu)o(me)o(nt)9 -b(\(M-0,)i(M-1,)h(...)f(M--\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)18 b Ff(16)0 2620 y Fd(digit)p 102 -2620 V 12 w(p)s Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(32)0 2678 y Fd(digit)p 102 2678 V 12 w(value)7 b -Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)20 b Ff(32)1015 424 y Fd(ding)t Fe(.)5 -b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(31)1015 -482 y(disable-compl)q(eti)q(on)9 b Fe(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Ff(6)1015 540 y -Fd(do-uppercas)o(e-)o(ver)o(sio)o(n)10 b(\(M-a,)g(M-b,)i(M-)p -Fe(x)p Fd(,)g Fc(:)6 b(:)g(:)g Fd(\))j Fe(.)c(.)h(.)g(.)g(.)g(.)22 -b Ff(17)1015 598 y Fd(downcase-wo)o(rd)9 b(\(M-l\))d -Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(14)1015 656 y Fd(dump-functi)o(on)o(s)10 b(\(\))e -Fe(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(18)1015 715 y Fd(dump-macros)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b -Ff(18)1015 773 y Fd(dump-variab)o(le)o(s)10 b(\(\))e -Fe(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(18)1015 890 y Fp(E)1015 956 y Ff(editing-mo)q(de)t -Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(6)1015 1014 y(enable-k)o(eypad)d -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)24 b Ff(6)1015 1072 y Fd(end-kbd-mac)o(ro)9 -b(\(C-x)j(\)\))7 b Fe(.)t(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(16)1015 1131 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))t -Fe(.)t(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(13)1015 -1189 y Fd(end-of-line)9 b(\(C-e\))f Fe(.)t(.)f(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(12)1015 1247 y Fd(exchange-po)o(in)o -(t-a)o(nd-)o(ma)o(rk)9 b(\(C-x)j(C-x\))c Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(17)1015 1305 y(expand-tilde)10 -b Fe(.)f(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(6)1015 1422 y Fp(F)1015 -1488 y Fd(filename)p 1177 1488 V 12 w(completi)o(on)p -1388 1488 V 11 w(function)5 b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(36)1015 -1547 y Fd(forward-cha)o(r)10 b(\(C-f\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(12)1015 1605 y Fd(forward-sea)o(rc)o -(h-h)o(ist)o(or)o(y)10 b(\(C-s\))f Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 b Ff(13)1015 -1663 y Fd(forward-wor)o(d)10 b(\(M-f\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(12)1015 1721 y Fd(free)p -1097 1721 V 13 w(undo)p 1190 1721 V 13 w(list)6 b Fe(.)t(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(29)1015 1838 y Fp(H)1015 1904 y Fd(history-sea)o(rc)o(h-b)o(ack)o -(wa)o(rd)9 b(\(\))c Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(13)1015 -1963 y Fd(history-sea)o(rc)o(h-f)o(orw)o(ar)o(d)10 b(\(\))d -Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(13)1015 2021 y(horizon)o(tal-scrol)q(l)q -(-mo)q(de)t Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(6)1015 2138 y Fp(I)1015 2204 y Ff(input-meta)s Fe(.)8 -b(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)16 b Ff(7)1015 2262 y Fd(insert-comm)o(en)o(t) -10 b(\(M-#\))t Fe(.)t(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(18)1015 2320 y Fd(insert-comp)o(le)o(tio)o(ns)9 -b(\(M-*\))f Fe(.)t(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(16)1015 -2438 y Fp(K)1015 2504 y Ff(k)o(eymap)6 b Fe(.)h(.)f(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)19 b Ff(6)1015 2562 y Fd(kill-line)10 b(\(C-k\))f -Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(14)1015 2620 y Fd(kill-region)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(15)1015 2678 y Fd(kill-whole-)o(li)o(ne)10 b(\(\))d -Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 -b Ff(15)p eop -54 55 bop 0 -58 a Fr(54)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fd(kill-word)9 b(\(M-d\))g Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)0 298 y Fp(L)0 -364 y Fd(lowercase)p 182 364 12 2 v 11 w(p)7 b Fe(.)e(.)h(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(32)0 479 y Fp(M)0 545 y Ff(mark-mo)q(di\014ed-lin)q(es)7 -b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(7)0 603 y(meta-\015ag)10 b Fe(.)c(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(7)0 718 y Fp(N)0 784 y Fd(next-histo)o(ry)9 b(\(C-n\))e -Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(13)0 842 y Fd(non-increm)o(en)o(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o -(ch)o(-hi)o(st)o(ory)9 b(\(M-n\))82 900 y Fe(.)d(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)18 b Ff(13)0 958 y Fd(non-increm)o(en)o(tal)o(-r)o -(eve)o(rse)o(-s)o(ear)o(ch)o(-hi)o(st)o(ory)9 b(\(M-p\))82 -1017 y Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(13)0 1075 y Fd(numeric)9 b Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(31)0 1189 y Fp(O)0 1256 y Ff(output-meta)8 b Fe(.)g(.)e(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -21 b Ff(7)0 1370 y Fp(P)0 1436 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(16)0 1495 y Fd(prefix-met)o(a)10 -b(\(ESC\))e Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -21 b Ff(17)0 1553 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(12)0 1667 -y Fp(Q)0 1734 y Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))e -Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(14)0 1848 y Fp(R)0 -1914 y Fd(re-read-in)o(it)o(-fi)o(le)9 b(\(C-x)i(C-r\))c -Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)20 b Ff(17)0 1973 y Fd(readline)8 b Fe(.)s(.)e(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)21 b Ff(19)0 2031 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)9 -b(\(\))h Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(12)0 -2089 y Fd(reverse-se)o(ar)o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))h -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)24 b Ff(13)0 2147 y Fd(revert-lin)o(e)10 b(\(M-r\))e -Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(17)0 2205 y Fd(rl)p 42 2205 V 13 w(add)p 115 2205 -V 13 w(defun)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(25)0 2263 y Fd(rl)p -42 2263 V 13 w(add)p 115 2263 V 13 w(undo)8 b Fe(.)e(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(29)0 2321 y Fd(rl)p 42 2321 V 13 w(attempted)p 235 -2321 V 11 w(completion)p 445 2321 V 10 w(function)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 -b Ff(37)0 2379 y Fd(rl)p 42 2379 V 13 w(basic)p 155 2379 -V 13 w(quote)p 268 2379 V 12 w(character)o(s)e Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)18 b Ff(38)0 2438 y Fd(rl)p 42 2438 -V 13 w(basic)p 155 2438 V 13 w(word)p 248 2438 V 12 w(break)p -360 2438 V 12 w(characters)h Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(38)0 2496 y Fd(rl)p -42 2496 V 13 w(begin)p 155 2496 V 13 w(undo)p 248 2496 -V 12 w(group)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(28)0 2554 y Fd(rl)p 42 2554 V 13 w(bind)p 135 2554 -V 13 w(key)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(26)0 2612 y Fd(rl)p -42 2612 V 13 w(bind)p 135 2612 V 13 w(key)p 208 2612 -V 13 w(in)p 261 2612 V 13 w(map)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(26)0 2670 y Fd(rl)p 42 -2670 V 13 w(binding)p 195 2670 V 12 w(keymap)14 b Fe(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(24)1015 183 y Fd(rl)p 1057 183 V 14 w(callback)p -1231 183 V 11 w(handler)p 1382 183 V 11 w(install)9 b -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)22 b Ff(32)1015 241 y Fd(rl)p 1057 241 -V 14 w(callback)p 1231 241 V 11 w(handler)p 1382 241 -V 11 w(remove)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(33)1015 299 -y Fd(rl)p 1057 299 V 14 w(callback)p 1231 299 V 11 w(read)p -1322 299 V 12 w(char)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 -b Ff(32)1015 358 y Fd(rl)p 1057 358 V 14 w(char)p 1151 -358 V 12 w(is)p 1203 358 V 14 w(quoted)p 1337 358 V 12 -w(p)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(37)1015 416 y Fd(rl)p 1057 416 V 14 w(clear)p 1171 -416 V 12 w(message)s Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)16 b Ff(30)1015 474 y Fd(rl)p 1057 -474 V 14 w(complete)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(35,)13 b(36)1015 532 -y Fd(rl)p 1057 532 V 14 w(complete)p 1231 532 V 11 w(internal)6 -b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b -Ff(35)1015 590 y Fd(rl)p 1057 590 V 14 w(completer)p -1250 590 V 10 w(quote)p 1361 590 V 13 w(character)o(s)e -Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)22 b Ff(38)1015 648 y Fd(rl)p 1057 648 V 14 w(completer)p -1250 648 V 10 w(word)p 1341 648 V 13 w(break)p 1454 648 -V 12 w(characters)14 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)18 b Ff(38)1015 706 y Fd(rl)p 1057 706 V 14 w(completio)o(n)p -1270 706 V 11 w(append)p 1401 706 V 12 w(character)e -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -20 b Ff(39)1015 764 y Fd(rl)p 1057 764 V 14 w(completio)o(n)p -1270 764 V 11 w(entry)p 1381 764 V 12 w(function)14 b -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(35,)13 b(37)1015 823 y Fd(rl)p 1057 823 V 14 w(completio)o(n)p -1270 823 V 11 w(query)p 1381 823 V 12 w(items)j Fe(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)18 b Ff(38)1015 881 y Fd(rl)p 1057 -881 V 14 w(copy)p 1151 881 V 12 w(keymap)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b -Ff(25)1015 939 y Fd(rl)p 1057 939 V 14 w(copy)p 1151 -939 V 12 w(text)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 b Ff(30)1015 997 y -Fd(rl)p 1057 997 V 14 w(delete)p 1191 997 V 12 w(text)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)19 b Ff(30)1015 1055 y Fd(rl)p 1057 1055 V 14 -w(directory)p 1250 1055 V 10 w(completion)p 1461 1055 -V 11 w(hook)i Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(40)1015 1113 y Fd(rl)p -1057 1113 V 14 w(discard)p 1211 1113 V 11 w(keymap)8 -b Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(25)1015 1171 y Fd(rl)p 1057 1171 V 14 w(do)p 1111 -1171 V 13 w(undo)9 b Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(29)1015 -1229 y Fd(rl)p 1057 1229 V 14 w(done)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)19 b Ff(23)1015 1287 y Fd(rl)p 1057 1287 V 14 -w(end)f Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(22)1015 -1346 y Fd(rl)p 1057 1346 V 14 w(end)p 1131 1346 V 13 -w(undo)p 1224 1346 V 12 w(group)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(29)1015 1404 y Fd(rl)p -1057 1404 V 14 w(event)p 1171 1404 V 12 w(hook)i Fe(.)6 -b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -22 b Ff(24)1015 1462 y Fd(rl)p 1057 1462 V 14 w(executing)p -1250 1462 V 10 w(keymap)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)23 b Ff(24)1015 1520 y Fd(rl)p 1057 1520 V 14 w(filename)p -1231 1520 V 11 w(completio)o(n)p 1441 1520 V 11 w(desired)17 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)20 b Ff(39)1015 1578 y Fd(rl)p 1057 1578 V 14 w(filename)p -1231 1578 V 11 w(dequoting)p 1421 1578 V 11 w(function)c -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -20 b Ff(37)1015 1636 y Fd(rl)p 1057 1636 V 14 w(filename)p -1231 1636 V 11 w(quote)p 1342 1636 V 12 w(characters)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)23 b Ff(38)1015 1694 y Fd(rl)p 1057 1694 V 14 -w(filename)p 1231 1694 V 11 w(quoting)p 1382 1694 V 11 -w(desired)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)24 b Ff(39)1015 1752 y Fd(rl)p -1057 1752 V 14 w(filename)p 1231 1752 V 11 w(quoting)p -1382 1752 V 11 w(function)c Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(37)1015 1810 -y Fd(rl)p 1057 1810 V 14 w(forced)p 1191 1810 V 12 w(update)p -1323 1810 V 11 w(display)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 -b Ff(30)1015 1869 y Fd(rl)p 1057 1869 V 14 w(function)p -1231 1869 V 11 w(dumper)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)22 b Ff(28)1015 1927 y Fd(rl)p 1057 1927 -V 14 w(function)p 1231 1927 V 11 w(of)p 1282 1927 V 13 -w(keyseq)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 -b Ff(27)1015 1985 y Fd(rl)p 1057 1985 V 14 w(generic)p -1211 1985 V 11 w(bind)t Fe(.)5 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(26)1015 2043 y Fd(rl)p -1057 2043 V 14 w(get)p 1131 2043 V 13 w(keymap)7 b Fe(.)t(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(25)1015 2101 y Fd(rl)p 1057 2101 V 14 w(get)p 1131 -2101 V 13 w(keymap)p 1264 2101 V 12 w(by)p 1316 2101 -V 13 w(name)9 b Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(26)1015 2159 y Fd(rl)p 1057 2159 V 14 w(get)p 1131 -2159 V 13 w(keymap)p 1264 2159 V 12 w(name)s Fe(.)t(.)7 -b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(26)1015 2217 y Fd(rl)p 1057 2217 V 14 w(getc)s Fe(.)5 -b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(31)1015 2275 -y Fd(rl)p 1057 2275 V 14 w(getc)p 1151 2275 V 12 w(function)e -Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(24)1015 2334 y Fd(rl)p 1057 2334 V 14 w(ignore)p -1191 2334 V 12 w(completio)o(n)p 1402 2334 V 11 w(duplicate)o(s)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 -b Ff(39)1015 2392 y Fd(rl)p 1057 2392 V 14 w(ignore)p -1191 2392 V 12 w(some)p 1283 2392 V 12 w(completion)o(s)p -1514 2392 V 11 w(function)13 b Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Ff(39)1015 2450 y Fd(rl)p 1057 2450 V -14 w(inhibit)p 1211 2450 V 11 w(completion)g Fe(.)6 b(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)21 b Ff(39)1015 2508 y Fd(rl)p 1057 2508 -V 14 w(initializ)o(e)t Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(31)1015 2566 -y Fd(rl)p 1057 2566 V 14 w(insert)p 1191 2566 V 12 w(completio)o(ns)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(36)1015 -2624 y Fd(rl)p 1057 2624 V 14 w(insert)p 1191 2624 V -12 w(text)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)19 b Ff(30)p eop -55 56 bop 0 -58 a Fr(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1337 -b(55)0 183 y Fd(rl)p 42 183 12 2 v 13 w(instream)19 b -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)22 b Ff(23)0 241 y Fd(rl)p 42 241 V 13 -w(invoking)p 215 241 V 11 w(keyseqs)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)21 b Ff(27)0 299 y Fd(rl)p 42 299 -V 13 w(invoking)p 215 299 V 11 w(keyseqs)p 366 299 V -12 w(in)p 418 299 V 13 w(map)t Fe(.)5 b(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(27)0 358 y Fd(rl)p 42 358 V 13 w(kill)p 135 358 -V 13 w(text)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(30)0 416 y Fd(rl)p -42 416 V 13 w(library)p 195 416 V 12 w(version)g Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(23)0 -474 y Fd(rl)p 42 474 V 13 w(line)p 135 474 V 13 w(buffer)18 -b Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)21 b Ff(22)0 532 y Fd(rl)p 42 532 V 13 w(list)p 135 -532 V 13 w(funmap)p 268 532 V 12 w(names)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)22 b Ff(28)0 590 y Fd(rl)p 42 590 -V 13 w(make)p 135 590 V 13 w(bare)p 228 590 V 13 w(keymap)8 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(25)0 648 y Fd(rl)p 42 648 V 13 w(make)p 135 648 -V 13 w(keymap)6 b Fe(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(25)0 706 y Fd(rl)p 42 -706 V 13 w(mark)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Ff(22)0 764 y Fd(rl)p 42 764 V 13 w(message)8 b Fe(.)t(.)e(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -21 b Ff(30)0 823 y Fd(rl)p 42 823 V 13 w(modifying)5 -b Fe(.)s(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)18 b Ff(29)0 881 y Fd(rl)p 42 881 V 13 -w(named)p 155 881 V 13 w(function)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(27)0 939 y Fd(rl)p -42 939 V 13 w(on)p 95 939 V 14 w(new)p 169 939 V 13 w(line)8 -b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)21 b Ff(30)0 997 y Fd(rl)p 42 997 V 13 w(outstream)c -Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)20 b Ff(23)0 1055 y Fd(rl)p 42 1055 V 13 w(parse)p -155 1055 V 13 w(and)p 228 1055 V 13 w(bind)5 b Fe(.)t(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(27)0 -1113 y Fd(rl)p 42 1113 V 13 w(pending)p 195 1113 V 12 -w(input)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)18 b Ff(23)0 1171 y Fd(rl)p 42 1171 V 13 w(point)d -Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)0 1229 y Fd(rl)p -42 1229 V 13 w(possible)p 215 1229 V 11 w(completions)7 -b Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(36)0 1287 y Fd(rl)p -42 1287 V 13 w(prompt)e Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(23)0 -1346 y Fd(rl)p 42 1346 V 13 w(read)p 135 1346 V 13 w(init)p -228 1346 V 13 w(file)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)17 b Ff(27)0 1404 y Fd(rl)p 42 1404 V -13 w(read)p 135 1404 V 13 w(key)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(31)0 1462 y Fd(rl)p 42 1462 V 13 w(readline)p 215 -1462 V 11 w(name)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)18 b Ff(23)0 1520 y Fd(rl)p 42 1520 V -13 w(redisplay)5 b Fe(.)s(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(29)0 1578 y Fd(rl)p -42 1578 V 13 w(redisplay)p 235 1578 V 11 w(function)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(24)0 -1636 y Fd(rl)p 42 1636 V 13 w(reset)p 155 1636 V 13 w(line)p -248 1636 V 12 w(state)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)23 b Ff(30)0 1694 y Fd(rl)p 42 1694 V 13 w(reset)p -155 1694 V 13 w(terminal)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Ff(31)0 1752 y Fd(rl)p 42 1752 V -13 w(set)p 115 1752 V 13 w(keymap)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(26)0 -1810 y Fd(rl)p 42 1810 V 13 w(special)p 195 1810 V 12 -w(prefixes)f Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(38)0 1869 y Fd(rl)p 42 1869 V 13 w(startup)p 195 -1869 V 12 w(hook)18 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)19 b Ff(23)0 1927 y Fd(rl)p 42 1927 -V 13 w(stuff)p 155 1927 V 13 w(char)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b -Ff(31)0 1985 y Fd(rl)p 42 1985 V 13 w(terminal)p 215 -1985 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(23)0 2043 y Fd(rl)p 42 2043 V 13 -w(unbind)p 175 2043 V 12 w(key)7 b Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(26)1015 -183 y Fd(rl)p 1057 183 V 14 w(unbind)p 1191 183 V 12 -w(key)p 1263 183 V 13 w(in)p 1316 183 V 13 w(map)t Fe(.)t(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(26)1015 -291 y Fp(S)1015 358 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g -(...\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)19 b Ff(14)1015 416 y Fd(set-mark)10 b(\(C-@\))t -Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)17 b Ff(17)1015 474 y(sho)o(w-all-if-am)o(bigu)q(ous)9 -b Fe(.)g(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(7)1015 532 y Fd(start-kbd-m)o(ac)o(ro)10 b(\(C-x)h(\(\))t -Fe(.)5 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(16)1015 640 -y Fp(T)1015 706 y Fd(tab-insert)9 b(\(M-TAB\))e Fe(.)t(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(14)1015 764 y -Fd(tilde-expan)o(d)10 b(\(M-~\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)20 b Ff(17)1015 823 y Fd(to)p 1057 -823 V 14 w(lower)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b -Ff(32)1015 881 y Fd(to)p 1057 881 V 14 w(upper)8 b Fe(.)f(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)24 b Ff(32)1015 939 y Fd(transpose-c)o(ha)o(rs)10 -b(\(C-t\))s Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)16 -b Ff(14)1015 997 y Fd(transpose-w)o(or)o(ds)10 b(\(M-t\))s -Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(14)1015 -1105 y Fp(U)1015 1171 y Fd(undo)c(\(C-)p 1169 1171 V -13 w(,)g(C-x)g(C-u\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)20 b Ff(17)1015 1229 y Fd(universal-a)o(rg)o(ume)o(nt)9 -b(\(\))s Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)16 -b Ff(16)1015 1287 y Fd(unix-line-d)o(is)o(car)o(d)10 -b(\(C-u\))f Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)22 b Ff(15)1015 -1346 y Fd(unix-word-r)o(ub)o(out)9 b(\(C-w\))g Fe(.)d(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)24 b Ff(15)1015 1404 y Fd(upcase-word)9 b(\(M-u\))f -Fe(.)t(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(14)1015 1462 y Fd(uppercase)p 1197 1462 V 11 w(p)7 -b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)20 b Ff(32)1015 1520 y Fd(username)p -1177 1520 V 12 w(completi)o(on)p 1388 1520 V 11 w(function)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)18 b Ff(36)1015 1628 y Fp(V)1015 1694 y Ff(visible-stats)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(7)1015 1802 y Fp(Y)1015 -1869 y Fd(yank)12 b(\(C-y\))d Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(15)1015 1927 y Fd(yank-last-a)o(rg)9 b(\(M-.,)i(M-)p -1436 1927 V 13 w(\))6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(13)1015 1985 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))t -Fe(.)s(.)d(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(13)1015 -2043 y Fd(yank-pop)10 b(\(M-y\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(15)p eop -56 57 bop 0 -58 a Fr(56)1449 b(GNU)15 b(Readline)i(Library)p -eop --1 58 bop 1937 -58 a Fr(i)0 183 y Fn(T)-7 b(able)15 b(of)g(Con)n(ten)n -(ts)0 358 y Fp(1)67 b(Command)22 b(Line)i(Editing)18 -b Fb(.)10 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)38 b Fp(1)149 -435 y Fr(1.1)45 b(In)o(tro)q(duction)16 b(to)f(Line)h(Editing)d -Fa(.)8 b(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)27 b Fr(1)149 498 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)22 b Fr(1)299 -560 y(1.2.1)44 b(Readline)17 b(Bare)e(Essen)o(tials)f -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fr(2)299 622 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fr(2)299 684 -y(1.2.3)44 b(Readline)17 b(Killing)h(Commands)10 b Fa(.)e(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)25 b Fr(3)299 747 y(1.2.4)44 -b(Readline)17 b(Argumen)o(ts)12 b Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fr(4)299 809 -y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h(the)f(History)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -27 b Fr(4)149 871 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fr(5)299 -934 y(1.3.1)44 b(Readline)17 b(Init)f(File)h(Syn)o(tax)6 -b Fa(.)h(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fr(5)299 996 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)t -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)19 b -Fr(8)299 1058 y(1.3.3)44 b(Sample)16 b(Init)g(File)11 -b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fr(9)149 1120 y(1.4)45 b(Bindable)17 -b(Readline)h(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)g(.)f(.)h(.)f(.)21 b Fr(12)299 1183 y(1.4.1)44 -b(Commands)14 b(F)l(or)h(Mo)o(ving)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)28 b Fr(12)299 1245 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 -b Fr(12)299 1307 y(1.4.3)44 b(Commands)14 b(F)l(or)h(Changing)h(T)l -(ext)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)29 b Fr(13)299 1369 -y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)8 b Fa(.)g(.)g(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)23 b Fr(14)299 -1432 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Fr(15)299 1494 y(1.4.6)44 -b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l(or)g(Y)l(ou)9 -b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fr(16)299 1556 y(1.4.7)44 -b(Keyb)q(oard)15 b(Macros)5 b Fa(.)i(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 b Fr(16)299 -1618 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)6 -b Fa(.)h(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fr(17)149 1681 y(1.5)45 -b(Readline)17 b(vi)f(Mo)q(de)d Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)28 b Fr(18)0 1805 y Fp(2)67 b(Programming)23 b(with)g(GNU)f -(Readline)d Fb(.)10 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)41 b Fp(19)149 1883 y Fr(2.1)k(Basic)16 b(Beha)o(vior)7 -b Fa(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 -b Fr(19)149 1945 y(2.2)45 b(Custom)14 b(F)l(unctions)7 -b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)22 b Fr(21)299 -2008 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)10 -b Fa(.)e(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)26 b Fr(21)299 2070 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l -(unction)5 b Fa(.)k(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fr(22)149 2132 y(2.3)45 b(Readline)17 b(V)l(ariables)f -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b Fr(22)149 -2194 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7 -b Fa(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)22 -b Fr(24)299 2257 y(2.4.1)44 b(Naming)15 b(a)g(F)l(unction)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fr(24)299 2319 y(2.4.2)44 b(Selecting)17 b(a)e(Keymap)6 -b Fa(.)h(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)21 b Fr(25)299 2381 y(2.4.3)44 b(Binding)17 b(Keys)t -Fa(.)8 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b Fr(26)299 2444 y(2.4.4)44 -b(Asso)q(ciating)16 b(F)l(unction)g(Names)f(and)g(Bindings)8 -b Fa(.)h(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 -b Fr(27)299 2506 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)29 b Fr(28)299 2568 y(2.4.6)44 b(Redispla)o(y)10 -b Fa(.)f(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25 b Fr(29)299 -2630 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)6 b Fa(.)i(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fr(30)p eop --2 59 bop 0 -58 a Fr(ii)1471 b(GNU)15 b(Readline)i(Library)299 -42 y(2.4.8)44 b(Utilit)o(y)16 b(F)l(unctions)e Fa(.)7 -b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)28 b Fr(31)299 104 y(2.4.9)44 b(Alternate)15 b(In)o(terface)t -Fa(.)8 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)19 b Fr(32)299 166 y(2.4.10)43 b(An)16 b(Example)f -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)29 b Fr(33)149 228 y(2.5)45 b(Custom)14 -b(Completers)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)27 b -Fr(34)299 291 y(2.5.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)9 -b Fa(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 -b Fr(34)299 353 y(2.5.2)44 b(Completion)16 b(F)l(unctions)6 -b Fa(.)i(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fr(35)299 415 y(2.5.3)44 b(Completion)16 b(V)l(ariables)11 -b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 -b Fr(37)299 477 y(2.5.4)44 b(A)15 b(Short)g(Completion)h(Example)t -Fa(.)8 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fr(40)0 602 -y Fp(Concept)j(Index)11 b Fb(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)34 b Fp(51)0 -742 y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)17 -b Fb(.)10 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fp(53)p eop end -userdict /end-hook known{end-hook}if