From 1b17e766659d93d1e7bd6633bf78132e1abb3568 Mon Sep 17 00:00:00 2001
From: Elena Zannoni
-
-
-
-
-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
-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 Free Software Foundation.
-
-
-Copyright (C) 1988-1999 Free Software Foundation, Inc.
-
-
-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.
-
-
-The History library provides a history expansion feature that is similar
-to the history expansion provided by
-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 history list 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 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 words
-surrounded by quotes are considered one word.
-History expansions are introduced by the appearance of the
-history expansion character, which is `!' by default.
-
-
-An event designator is a reference to a command line entry in the
-history list.
-
-
-
-Word designators are used to select desired words from the event.
-A `:' separates the event specification from the word designator. It
-may 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.
-
-
-For example,
-
-
-Here are the word designators:
-
-
-If a word designator is supplied without an event specification, the
-previous command is used as the event.
-
-
-After the optional word designator, you can add a sequence of one or more
-of the following modifiers, each preceded by a `:'.
-
-
-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.
-
-
-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
-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.
-
-
-Before declaring any functions using any functionality the History
-library provides in other code, an application writer should include
-the file
-The history list is an array of history entries. A history entry is
-declared as follows:
-
-
-The history list itself might therefore be declared as
-
-
-The state of the History library is encapsulated into a single structure:
-
-
-If the flags member includes
-This section describes the calling sequence for the various functions
-present in GNU History.
-
-
-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.
-
-
-GNU History Library
-Edition 4.1, for
-History Library
Version 4.1.January 2000
-Brian Fox, Free Software Foundation
-Chet Ramey, Case Western Reserve University
-Table of Contents
-
-
-
-59 Temple Place, Suite 330,
-Boston, MA 02111 USA
-
-Using History Interactively
-
-
-
-
-
-
-History Expansion
-
-csh
. This section
-describes the syntax used to manipulate the history information.
-
-
-
-
-
-
-Event Designators
-
-
-
-
-
-
-
-!
-!n
-!-n
-!!
-!string
-!?string[?]
-^string1^string2^
-!!:s/string1/string2/
.
-
-!#
-Word Designators
-
-
-
-
-
-!!
-!!:$
-!$
.
-
-!fi:2
-fi
.
-
-
-
-
-0 (zero)
-0
th word. For many applications, this is the command word.
-
-n
-^
-$
-%
-x-y
-*
-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*
-x-
-Modifiers
-
-
-
-
-
-
-
-h
-t
-r
-e
-p
-s/old/new/
-&
-g
-gs/old/new/
,
-or with `&'.
-
-Programming with GNU History
-
-
-
-
-
-
-Introduction to History
-
-csh
.
-
-<readline/history.h>
in any file that uses the
-History library's features. It supplies extern declarations for all
-of the library's public functions and variables, and declares all of
-the public data structures.
-
-History Storage
-
-
-typedef struct _hist_entry {
- char *line;
- char *data;
-} HIST_ENTRY;
-
-
-
-HIST_ENTRY **the_history_list;
-
-
-
-/* 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;
-
-
-HS_STIFLED
, the history has been
-stifled.
-
-History Functions
-
-
-
-
-
-
-Initializing History and State Management
-
-
-
-
-These functions manage individual entries on the history list, or set -parameters managing the list itself. - -
--
NULL
.
--
-
NULL
pointer is returned.
--
-
-
-
-These functions return information about the entire history list or -individual list entries. - -
--
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
.
--
-
where_history ()
. If there is no entry there, return a NULL
-pointer.
--
history_base
. If there is no entry there, or if offset
-is greater than the history length, return a NULL
pointer.
--
-These functions allow the current index into the history list to be -set or changed. - -
--
-
NULL
pointer.
--
NULL
pointer.
--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. - - -
--
-
-
-The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -
--
NULL
, then read from
-`~/.history'. Returns 0 if successful, or errno if not.
--
NULL
, then read from `~/.history'. Returns 0 if successful,
-or errno
if not.
--
NULL
, then write the history list to `~/.history'. Values
-returned are as in read_history ()
.
--
-
-These functions implement csh
-like history expansion.
-
-
-
0
-1
--1
-2
-:p
modifier (see section Modifiers).
--If an error ocurred in expansion, then output contains a descriptive -error message. -
-
-
-
()<>;&|$
, and shell quoting conventions are
-obeyed.
--This section describes the externally visible variables exported by -the GNU History Library. - -
--
-
-
stifle_history ()
.
--
-
-
-
-
-
-
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.
--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"); - } - } - } -} -- - - -
-
-Jump to: -a -- -c -- -g -- -h -- -m -- -n -- -p -- -r -- -s -- -u -- -w -
-
-This document was generated on 19 January 2000 using the -texi2html -translator version 1.52.
- - diff --git a/readline/doc/history.info b/readline/doc/history.info deleted file mode 100644 index e73cd63..0000000 --- a/readline/doc/history.info +++ /dev/null @@ -1,811 +0,0 @@ -This is Info file history.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* History: (history). The GNU history library API -END-INFO-DIR-ENTRY - - 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-1999 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 Free Software Foundation. - - -File: history.info, Node: Top, Next: Using History Interactively, 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 - -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 history list 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 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 words surrounded by quotes are -considered 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 may -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. - - For example, - -`!!' - designates the preceding command. When you type this, the - preceding command is repeated in toto. - -`!!:$' - designates the last argument of the preceding command. This may be - shortened to `!$'. - -`!fi:2' - designates the second argument of the most recent command starting - with the letters `fi'. - - Here are the word designators: - -`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. - - Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file `Readline Library
Version 4.1.-
-
- -
-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
-59 Temple Place, Suite 330,
-Boston, MA 02111 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 Free Software Foundation. - -
--Copyright (C) 1988-1999 Free Software Foundation, Inc. - -
- - - --This chapter describes the basic features of the GNU -command line editing interface. - -
- --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. -The Meta key is labeled ALT on many keyboards. -On keyboards with two keys labeled ALT (usually to either side of -the space bar), the ALT on the left side is generally set to -work as a Meta key. -The ALT key on the right may also be configured to work as a -Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - -
--If you do not have a Meta or ALT key, or another key working as -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 -(see section Readline Init File). -If your keyboard lacks a LFD key, typing C-j will -produce the desired character. -The RET key may be labeled Return or Enter on -some keyboards. - -
- - --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. - -
- --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 mistype a character, and -not notice the 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 bare -essentials for editing the text of an input line follows. - -
--(Depending on your configuration, the Backspace key be set to -delete the character to the left of the cursor and the DEL key set -to delete the character underneath the cursor, like C-d, rather -than the character to the left of the cursor.) - -
- - --The above table describes the most basic 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. - -
--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. - -
- - --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. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) - -
--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. - -
--Here is how to yank the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -
--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' typed 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'. - -
- - --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.
-To search backward in the history for a particular string, type
-C-r. Typing C-s searches forward through the history.
-The characters present in the value of the isearch-terminators
variable
-are used to terminate an incremental search.
-If that variable has not been assigned a value, the ESC and
-C-J characters will terminate an incremental search.
-C-g will abort an incremental search and restore the original line.
-When the search is terminated, the history entry containing the
-search string becomes the current line.
-
-
-To find other matching entries in the history list, type C-r or -C-s 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 RET 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 be part of the contents of the current line. - -
- - -
-Although the Readline library comes with a set of Emacs-like
-keybindings installed by default, it is possible to use a different set
-of keybindings.
-Any user can customize programs that use Readline by putting
-commands in an inputrc file, conventionally in his 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.
-
-
-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. - -
-set
command within the init file. Here is how to
-change from the default Emacs-like key binding to use
-vi
line editing commands:
-
-
--set editing-mode vi -- -A great deal of run-time behavior is changeable with the following -variables. - -
bell-style
-comment-begin
-insert-comment
command is executed. The default value
-is "#"
.
-
-completion-ignore-case
-completion-query-items
-100
.
-
-convert-meta
-disable-completion
-self-insert
. The default is `off'.
-
-editing-mode
-editing-mode
variable controls which default set of
-key bindings is used. 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
-expand-tilde
-horizontal-scroll-mode
-input-meta
-meta-flag
is a
-synonym for this variable.
-
-isearch-terminators
-keymap
-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
-mark-modified-lines
-output-meta
-print-completions-horizontally
-show-all-if-ambiguous
-visible-stats
--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).
-
--"\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'.
-
-\C-
-\M-
-\e
-\\
-\"
-\'
-\a
-\b
-\d
-\f
-\n
-\r
-\t
-\v
-\nnn
-ASCII
code is the octal value nnn
-(one to three digits)
-\xnnn
-ASCII
code is the hexadecimal value nnn
-(one to three digits)
--"\C-x\\": "\\" -- -
-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 four parser directives used. - -
-$if
-$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
-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
-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 both 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
--$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -- -
$endif
-$if
command.
-
-$else
-$if
directive are executed if
-the test fails.
-
-$include
--$include /etc/inputrc -- -
-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. -# -# First, include any systemwide bindings and variable assignments from -# /etc/Inputrc -$include /etc/Inputrc - -# -# 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 -- - - -
-This section describes Readline commands that may be bound to key -sequences. - -
-
-Command names without an accompanying key sequence are unbound by default.
-In the following descriptions, point refers to the current cursor
-position, and mark refers to a cursor position saved by the
-set-mark
command.
-The text between the point and mark is referred to as the region.
-
-
beginning-of-line (C-a)
-end-of-line (C-e)
-forward-char (C-f)
-backward-char (C-b)
-forward-word (M-f)
-backward-word (M-b)
-clear-screen (C-l)
-redraw-current-line ()
-accept-line (Newline, Return)
-previous-history (C-p)
-next-history (C-n)
-beginning-of-history (M-<)
-end-of-history (M->)
-reverse-search-history (C-r)
-forward-search-history (C-s)
-non-incremental-reverse-search-history (M-p)
-non-incremental-forward-search-history (M-n)
-history-search-forward ()
-history-search-backward ()
-yank-nth-arg (M-C-y)
-yank-last-arg (M-., M-_)
-yank-nth-arg
.
-Successive calls to yank-last-arg
move back through the history
-list, inserting the last argument of each line in turn.
-
-delete-char (C-d)
-delete-char
, then
-return EOF
.
-
-backward-delete-char (Rubout)
-forward-backward-delete-char ()
-quoted-insert (C-q, C-v)
-tab-insert (M-TAB)
-self-insert (a, b, A, 1, !, ...)
-transpose-chars (C-t)
-transpose-words (M-t)
-upcase-word (M-u)
-downcase-word (M-l)
-capitalize-word (M-c)
-kill-line (C-k)
-backward-kill-line (C-x Rubout)
-unix-line-discard (C-u)
-kill-whole-line ()
-kill-word (M-d)
-forward-word
.
-
-backward-kill-word (M-DEL)
-backward-word
.
-
-unix-word-rubout (C-w)
-delete-horizontal-space ()
-kill-region ()
-copy-region-as-kill ()
-copy-backward-word ()
-backward-word
.
-By default, this command is unbound.
-
-copy-forward-word ()
-forward-word
.
-By default, this command is unbound.
-
-yank (C-y)
-yank-pop (M-y)
-digit-argument (M-0, M-1, ... M--)
-universal-argument ()
-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.
-complete (TAB)
-possible-completions (M-?)
-insert-completions (M-*)
-possible-completions
.
-
-menu-complete ()
-complete
, but replaces the word to be completed
-with a single match from the list of possible completions.
-Repeated execution of menu-complete
steps through the list
-of possible completions, inserting each match in turn.
-At the end of the list of completions, the bell is rung and the
-original text is restored.
-An argument of n moves n positions forward in the list
-of matches; a negative argument may be used to move backward
-through the list.
-This command is intended to be bound to TAB
, but is unbound
-by default.
-
-delete-char-or-list ()
-delete-char
).
-If at the end of the line, behaves identically to
-possible-completions
.
-This command is unbound by default.
-
-start-kbd-macro (C-x ()
-end-kbd-macro (C-x ))
-call-last-kbd-macro (C-x e)
-re-read-init-file (C-x C-r)
-abort (C-g)
-bell-style
).
-
-do-uppercase-version (M-a, M-b, M-x, ...)
-prefix-meta (ESC)
-undo (C-_, C-x C-u)
-revert-line (M-r)
-undo
-command enough times to get back to the beginning.
-
-tilde-expand (M-~)
-set-mark (C-@)
-exchange-point-and-mark (C-x C-x)
-character-search (C-])
-character-search-backward (M-C-])
-insert-comment (M-#)
-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 ()
-dump-variables ()
-dump-macros ()
-
-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 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. - -
- -
-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).
-
-
-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. - -
-
-Before declaring any functions that customize Readline's behavior, or
-using any functionality Readline provides in other code, an
-application writer should include the file <readline/readline.h>
-in any file that uses Readline's features. Since some of the definitions
-in readline.h
use the stdio
library, the file
-<stdio.h>
should be included before readline.h
.
-
-
-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.
-
-
-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. - -
- - --These variables are available to function writers. - -
--
rl_extend_line_buffer
is available to increase
-the memory allocated to rl_line_buffer
.
--
rl_line_buffer
-(the point).
--
rl_line_buffer
. When
-rl_point
is at the end of the line, rl_point
and
-rl_end
are equal.
--
-
-
-
-
readline ()
, and should not be assigned to directly.
--
readline()
is called, it should set
-this variable to a non-zero value after displaying the prompt.
-The prompt must also be passed as the argument to readline()
so
-the redisplay functions can update the display properly.
-The calling application is responsible for managing the value; Readline
-never sets it.
--
-
-
-
-
-
readline
prints the first prompt.
--
readline
-starts reading input characters.
--
-
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).
--
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).
--
-
rl_line_buffer
.
--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:
-
-
-
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. - -
- - --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. - -
--
malloc ()
; you should free ()
it when you are done.
--
-
-
-Readline has several internal keymaps. These functions allow you to -change which keymap is active. - -
--
-
-
set keymap
inputrc line (see section Readline Init File).
--
set keymap
inputrc line (see section Readline Init File).
-
-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.
-
-
-Since readline
installs a set of default key bindings the first
-time it is called, there is always the danger that a custom binding
-installed before the first call to readline
will be overridden.
-An alternate mechanism is to install custom key bindings in an
-initialization function assigned to the rl_startup_hook
variable
-(see section Readline Variables).
-
-
-These functions manage key bindings. - -
--
-
-
-
-
-
-
ISFUNC
), a macro
-(ISMACR
), or a keymap (ISKMAP
). This makes new keymaps as
-necessary. The initial keymap in which to do bindings is map.
--
inputrc
file and
-perform any key bindings and variable assignments found
-(see section Readline Init File).
--
-These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. - -
--
-
ISFUNC
,
-ISKMAP
, or ISMACR
).
--
-
-
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.
--
rl_outstream
.
--
-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 ()
.
-
-
-
rl_insert_text ()
and
-rl_delete_text ()
, but could be the result of calls to
-rl_add_undo ()
.
--
rl_begin_undo_group
-()
. There should be one call to rl_end_undo_group ()
-for each call to rl_begin_undo_group ()
.
--
-
-
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.
-
-
-
-
rl_line_buffer
.
--
-
-
-
-
printf
. The
-resulting string is displayed in the echo area. The echo area
-is also used to display numeric arguments and search strings.
--
-
rl_message
.
--
rl_save_prompt
.
--
-
-
-
-
rl_stuff_char ()
, macros, and characters read from the keyboard.
--
-
rl_read_key ()
.
--
rl_line_buffer
has enough space to hold len
-characters, possibly reallocating it if necessary.
--
-
vt100
).
-If terminal_name is NULL, the value of the TERM
-environment variable is used.
--
-
-
bell-style
.
--
matches
is the list
-of strings, in argv format, such as a list of completion matches.
-len
is the number of strings in matches
, and max
-is the length of the longest string in matches
. This function uses
-the setting of print-completions-horizontally
to select how the
-matches are displayed (see section Readline Init File Syntax).
-
-The following are implemented as macros, defined in chartypes.h
.
-
-
-
-
-
-
-
-
-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.
-
-
-
-
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.
--
-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); -} -- - - -
-Signals are asynchronous events sent to a process by the Unix kernel, -sometimes on behalf of another process. They are intended to indicate -exceptional events, like a user pressing the interrupt key on his -terminal, or a network connection being broken. There is a class of -signals that can be sent to the process currently reading input from -the keyboard. Since Readline changes the terminal attributes when it -is called, it needs to perform special processing when a signal is -received to restore the terminal to a sane state, or provide application -writers with functions to do so manually. - -
-
-Readline contains an internal signal handler that is installed for a
-number of signals (SIGINT
, SIGQUIT
, SIGTERM
,
-SIGALRM
, SIGTSTP
, SIGTTIN
, and SIGTTOU
).
-When one of these signals is received, the signal handler
-will reset the terminal attributes to those that were in effect before
-readline ()
was called, reset the signal handling to what it was
-before readline ()
was called, and resend the signal to the calling
-application.
-If and when the calling application's signal handler returns, Readline
-will reinitialize the terminal and continue to accept input.
-When a SIGINT
is received, the Readline signal handler performs
-some additional work, which will cause any partially-entered line to be
-aborted (see the description of rl_free_line_state ()
).
-
-
-There is an additional Readline signal handler, for SIGWINCH
, which
-the kernel sends to a process whenever the terminal's size changes (for
-example, if a user resizes an xterm
). The Readline SIGWINCH
-handler updates Readline's internal screen size state, and then calls any
-SIGWINCH
signal handler the calling application has installed.
-Readline calls the application's SIGWINCH
signal handler without
-resetting the terminal to its original state. If the application's signal
-handler does more than update its idea of the terminal size and return (for
-example, a longjmp
back to a main processing loop), it must
-call rl_cleanup_after_signal ()
(described below), to restore the
-terminal state.
-
-
-Readline provides two variables that allow application writers to
-control whether or not it will catch certain signals and act on them
-when they are received. It is important that applications change the
-values of these variables only when calling readline ()
, not in
-a signal handler, so Readline's internal signal state is not corrupted.
-
-
-
SIGINT
, SIGQUIT
, SIGTERM
, SIGALRM
,
-SIGTSTP
, SIGTTIN
, and SIGTTOU
.
-
-
-
-The default value of rl_catch_signals
is 1.
-
-
SIGWINCH
.
-
-
-
-The default value of rl_catch_sigwinch
is 1.
-
-If an application does not wish to have Readline catch any signals, or
-to handle signals other than those Readline catches (SIGHUP
,
-for example),
-Readline provides convenience functions to do the necessary terminal
-and internal state cleanup upon receipt of a signal.
-
-
-
readline ()
was called, and remove the Readline signal handlers for
-all signals, depending on the values of rl_catch_signals
and
-rl_catch_sigwinch
.
--
rl_cleanup_after_signal ()
. The
-Readline signal handler for SIGINT
calls this to abort the
-current input line.
--
rl_catch_signals
and
-rl_catch_sigwinch
.
-
-If an application does not wish Readline to catch SIGWINCH
, it may
-call rl_resize_terminal ()
to force Readline to update its idea of
-the terminal size when a SIGWINCH
is received.
-
-
-
-The following functions install and remove Readline's signal handlers. - -
--
SIGINT
, SIGQUIT
,
-SIGTERM
, SIGALRM
, SIGTSTP
, SIGTTIN
,
-SIGTTOU
, and SIGWINCH
, depending on the values of
-rl_catch_signals
and rl_catch_sigwinch
.
--
rl_set_signals ()
.
--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. - -
- --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: - -
- -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.
-
-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
.
-
-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.
-
--
completion_matches ()
). The default is to do filename completion.
--
completion_matches
-()
. If the value of rl_completion_entry_function
is
-(Function *)NULL
then the default filename generator function,
-filename_completion_function ()
, is used.
--Here is the complete list of callable completion functions present in -Readline. - -
--
-
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.
--
rl_complete
-()
. This calls rl_complete_internal ()
with an argument of
-`?'.
--
rl_complete ()
.
-This calls rl_complete_internal ()
with an argument 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.
-
-
-
-
completion_matches ()
.
-NULL
means to use filename_completion_function ()
, the default
-filename completer.
--
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.
--
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.
--
-
rl_completer_word_break_characters
should be
-used to break words for the completer.
--
-
" \t\n\"\\'`@$><=;|&{("
.
--
-
rl_complete_internal ()
. The default list is the value of
-rl_basic_word_break_characters
.
--
rl_completer_word_break_characters
are treated as any other character,
-unless they also appear within this list.
--
-
-
-
-
-
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
.
--
self-insert
.
--
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.
--
-
char **
matches, int
num_matches, int
max_length)
-where matches is the array of matching strings,
-num_matches is the number of strings in that array, and
-max_length is the length of the longest string in that array.
-Readline provides a convenience function, rl_display_match_list
,
-that takes care of doing the display to Readline's output stream. That
-function may be called from this hook.
-
-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); -} -- - - -
-Jump to: -c -- -e -- -i -- -k -- -n -- -r -- -y -
-
-Jump to: -a -- -b -- -c -- -d -- -e -- -f -- -h -- -i -- -k -- -l -- -m -- -n -- -o -- -p -- -q -- -r -- -s -- -t -- -u -- -v -- -y -
-
-This document was generated on 1 March 2000 using the -texi2html -translator version 1.52.
- - diff --git a/readline/doc/readline.info b/readline/doc/readline.info deleted file mode 100644 index ae6767f..0000000 --- a/readline/doc/readline.info +++ /dev/null @@ -1,3107 +0,0 @@ -This is Info file readline.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -END-INFO-DIR-ENTRY - - 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-1999 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 Free Software Foundation. - - -File: readline.info, Node: Top, Next: Command Line Editing, 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