diff options
Diffstat (limited to 'readline/readline.texi')
-rwxr-xr-x | readline/readline.texi | 442 |
1 files changed, 0 insertions, 442 deletions
diff --git a/readline/readline.texi b/readline/readline.texi deleted file mode 100755 index abb6351..0000000 --- a/readline/readline.texi +++ /dev/null @@ -1,442 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename readline.info -@settitle Line Editing Commands -@comment %**end of header (This is for running Texinfo on a region.) -@synindex fn vr - -@ifinfo -@format -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU Readline Library. -END-INFO-DIR-ENTRY -@end format -@end ifinfo - -@iftex -@comment finalout -@end iftex - -@ifinfo -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 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. - -@ignore -Permission is granted to process this file through TeX and print the -results, provided the printed document carries copying permission -notice identical to this one except for the removal of this paragraph -(this paragraph not being relevant to the printed manual). - -@end ignore -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. -@end ifinfo - -@setchapternewpage odd -@titlepage -@sp 11 -@center @titlefont{GNU Readline Library} -@sp 2 -@center by Brian Fox -@sp 2 -@center Version 1.0 -@sp 2 -@center February 1989 - -@comment Include the Distribution inside the titlepage environment so -@c that headings are turned off. - -@page -@vskip 0pt plus 1filll -Copyright @copyright{} 1989 Free Software Foundation, Inc. - -@sp 2 -This document describes the GNU Readline Library, a utility for aiding -in the consistency of user interface across discrete programs that need -to provide a command line interface. -@sp 2 - -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. - -@end titlepage - -@node Top, , ,(DIR) -@chapter GNU Readline Library - -@ifinfo -This document describes the GNU Readline Library, a utility for aiding -in the consistency of user interface across discrete programs that need -to provide a command line interface. -@end ifinfo - -@menu -* Command Line Editing:: GNU Readline User's Manual -* Readline Technical:: GNU Readline Programmer's Manual -@end menu -@include inc-read.texi -@node Readline Technical, , Top, Top -@chapter Readline Programmer's Manual - -This manual describes the interface between the GNU Readline Library and -user programs. If you are a programmer, and you wish to include the -features found in GNU Readline in your own programs, such as completion, -line editing, and interactive history manipulation, this documentation -is for you. - -@menu -* Default Behaviour:: Using the default behaviour of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. -* Variable Index:: Index of externally tweakable variables. -@end menu - -@node Default Behaviour, Custom Functions, Readline Technical, Readline Technical -@section Default Behaviour - -Many programs provide a command line interface, such as @code{mail}, -@code{ftp}, and @code{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 -@code{gets ()}. - -@findex readline () -@cindex readline, function -The function @code{readline} prints a prompt and then reads and returns -a single line of text from the user. The line which @code{readline ()} -returns is allocated with @code{malloc ()}; you should @code{free ()} -the line when you are done with it. The declaration in ANSI C is - -@example -@code{char *readline (char *@var{prompt});} -@end example -or, preferably, -@example -@code{#include <readline/readline.h>} -@end example - -So, one might say -@example -@code{char *line = readline ("Enter a line: ");} -@end example -in order to read a line of text from the user. - -The line which is returned has the final newline removed, so only the -text of the line remains. - -If readline encounters an EOF while reading the line, and the line is -empty at that point, then @code{(char *)NULL} is returned. Otherwise, -the line is ended just as if a newline was typed. - -If you want the user to be able to get at the line later, (with -@key{C-p} for example), you must call @code{add_history ()} to save the -line away in a @dfn{history} list of such lines. - -@example -@code{add_history (line)}; -@end example - -If you use @code{add_history ()}, you should also -@code{#include <readline/history.h>} -For full details on the GNU History Library, see the associated manual. - -It is polite to avoid saving empty lines on the history list, since -no one has a burning need to reuse a blank line. Here is a function -which usefully replaces the standard @code{gets ()} library function: - -@example -#include <readline/readline.h> -#include <readline/history.h> - -/* A static variable for holding the line. */ -static char *my_gets_line = (char *)NULL; - -/* Read a string, and return a pointer to it. Returns NULL on EOF. */ -char * -my_gets () -@{ - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (my_gets_line != (char *)NULL) - free (my_gets_line); - - /* Get a line from the user. */ - my_gets_line = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (my_get_line && *my_gets_line) - add_history (my_gets_line); - - return (my_gets_line); -@} -@end example - -The above code gives the user the default behaviour of @key{TAB} -completion: completion on file names. If you do not want readline to -complete on filenames, you can change the binding of the @key{TAB} key -with @code{rl_bind_key ()}. - -@findex rl_bind_key () - -@example -@code{int rl_bind_key (int @var{key}, (int (*)())@var{function});} -@end example - -@code{rl_bind_key ()} takes 2 arguments; @var{key} is the character that -you want to bind, and @var{function} is the address of the function to -run when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert ()} -makes @key{TAB} just insert itself. - -@code{rl_bind_key ()} returns non-zero if @var{key} is not a valid -ASCII character code (between 0 and 255). - -@example -@code{rl_bind_key ('\t', rl_insert);} -@end example - -@node Custom Functions, Custom Completers, Default Behaviour, Readline Technical -@section Custom Functions - -Readline provides a great 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 in 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 Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Function Writing:: Variables and calling conventions. -* Allowing Undoing:: How to make your functions undoable. -@end menu - -@node The Function Type, Function Naming, Custom Functions, Custom Functions -For the sake of readabilty, we declare a new type of object, called -@dfn{Function}. `Function' is a C language function which returns an -@code{int}. The type declaration for `Function' is: - -@code{typedef int Function ();} - -The reason for declaring this new type is to make it easier to discuss -pointers to C functions. Let us say we had a variable called @var{func} -which was a pointer to a function. Instead of the classic C declaration - -@code{int (*)()func;} - -we have - -@code{Function *func;} - -@node Function Naming, Keymaps, The Function Type, Custom Functions -@subsection 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 - -@example -Meta-Rubout: backward-kill-word -@end example - -This binds @key{Meta-Rubout} to the function @emph{descriptively} named -@code{backward-kill-word}. You, as a programmer, should bind the -functions you write to descriptive names as well. Here is how to do -that. - -@defun rl_add_defun (char *name, Function *function, int key) -Add @var{name} to the list of named functions. Make @var{function} be -the function that gets called. If @var{key} is not -1, then bind it to -@var{function} using @code{rl_bind_key ()}. -@end defun - -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 already. If you need to do more or different -things than adding a function to Readline, you may need to use the -underlying functions described below. - -@node Keymaps, Binding Keys, Function Naming, Custom Functions -@subsection Selecting a Keymap - -Key bindings take place on a @dfn{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. - -@defun rl_make_bare_keymap () -Returns a new, empty keymap. The space for the keymap is allocated with -@code{malloc ()}; you should @code{free ()} it when you are done. -@end defun - -@defun rl_copy_keymap (Keymap map) -Return a new keymap which is a copy of @var{map}. -@end defun - -@defun 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. -@end defun - -@node Binding Keys, Function Writing, Keymaps, Custom Functions -@subsection Binding Keys - -You associate keys with functions through the keymap. Here are -the functions for doing that. - -@defun rl_bind_key (int key, Function *function) -Binds @var{key} to @var{function} in the currently selected keymap. -Returns non-zero in the case of an invalid @var{key}. -@end defun - -@defun rl_bind_key_in_map (int key, Function *function, Keymap map) -Bind @var{key} to @var{function} in @var{map}. Returns non-zero in the case -of an invalid @var{key}. -@end defun - -@defun rl_unbind_key (int key) -Make @var{key} do nothing in the currently selected keymap. -Returns non-zero in case of error. -@end defun - -@defun rl_unbind_key_in_map (int key, Keymap map) -Make @var{key} be bound to the null function in @var{map}. -Returns non-zero in case of error. -@end defun - -@node Function Writing, Allowing Undoing, Binding Keys, Custom Functions -@subsection 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 gathered so far. - -@defvar char *rl_line_buffer -This is the line gathered so far. You are welcome to modify the -contents of this, but see Undoing, below. -@end defvar - -@defvar int rl_point -The offset of the current cursor position in @var{rl_line_buffer}. -@end defvar - -@defvar int rl_end -The number of characters present in @code{rl_line_buffer}. When -@code{rl_point} is at the end of the line, then @code{rl_point} and -@code{rl_end} are equal. -@end defvar - -The calling sequence for a command @code{foo} looks like - -@example -@code{foo (count, key)} -@end example - -where @var{count} is the numeric argument (or 1 if defaulted) and -@var{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, other -functions as a flag, and 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 a negative argument as well as a positive -argument. At the very least, it should be aware that it can be passed a -negative argument. - -@node Allowing Undoing, , Function Writing, Custom Functions -@subsection Allowing Undoing - -Supporting the undo command is a painless thing to do, and makes your -function much more useful to the end user. 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 it -calls @code{rl_insert_text ()} or @code{rl_delete_text ()} to do it, then -undoing is already done for you automatically, and you can safely skip -this section. - -If you do multiple insertions or multiple deletions, or any combination -of these operations, you will want to group them together into one -operation. This can be done with @code{rl_begin_undo_group ()} and -@code{rl_end_undo_group ()}. - -@defun rl_begin_undo_group () -Begins saving undo information in a group construct. The undo -information usually comes from calls to @code{rl_insert_text ()} and -@code{rl_delete_text ()}, but they could be direct calls to -@code{rl_add_undo ()}. -@end defun - -@defun rl_end_undo_group () -Closes the current undo group started with @code{rl_begin_undo_group -()}. There should be exactly one call to @code{rl_end_undo_group ()} -for every call to @code{rl_begin_undo_group ()}. -@end defun - -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g. change its case), you call @code{rl_modifying ()} -once, just before you modify the text. You must supply the indices of -the text range that you are going to modify. - -@defun rl_modifying (int start, int end) -Tell Readline to save the text between @var{start} and @var{end} as a -single undo unit. It is assumed that subsequent to this call you will -modify that range of text in some way. -@end defun - -@subsection An Example - -Let us say that we are actually going to put an example here. - -@node Custom Completers, Variable Index, Custom Functions, Readline Technical - -Typically, a program that reads commands from the user has a way of -disambiguating between commands and data. If your program is one of -these, then it can provide completion for either commands, or data, or -both commands and data. The following sections describe how your -program and Readline cooperate to provide this service to end users. - -@menu -@end menu - -@node Variable Index, , Custom Completers, Readline Technical -@appendix Variable Index -@printindex vr -@contents - -@bye - |