diff options
Diffstat (limited to 'readline-4.3.orig/doc')
30 files changed, 0 insertions, 47484 deletions
diff --git a/readline-4.3.orig/doc/Makefile.in b/readline-4.3.orig/doc/Makefile.in deleted file mode 100644 index 8a85ae1..0000000 --- a/readline-4.3.orig/doc/Makefile.in +++ /dev/null @@ -1,234 +0,0 @@ -# This makefile for Readline library documentation is in -*- text -*- mode. -# Emacs likes it that way. - -# Copyright (C) 1996 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. - -topdir = @top_srcdir@ -srcdir = @srcdir@ -VPATH = .:@srcdir@ - -prefix = @prefix@ -infodir = @infodir@ - -mandir = @mandir@ -manpfx = man - -man1ext = .1 -man1dir = $(mandir)/$(manpfx)1 -man3ext = .3 -man3dir = $(mandir)/$(manpfx)3 - -# set this to a value to have the HTML documentation installed -htmldir = - -# Support an alternate destination root directory for package building -DESTDIR = - -SHELL = @MAKE_SHELL@ -RM = rm -f - -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ - -BUILD_DIR = @BUILD_DIR@ -TEXINPUTDIR = $(srcdir) - -MAKEINFO = LANGUAGE= makeinfo -TEXI2DVI = $(srcdir)/texi2dvi -TEXI2HTML = $(srcdir)/texi2html -QUIETPS = #set this to -q to shut up dvips -PAPERSIZE = letter -PSDPI = 300 # I don't have any 600-dpi printers -DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky - -RLSRC = $(srcdir)/rlman.texinfo $(srcdir)/rluser.texinfo \ - $(srcdir)/rltech.texinfo $(srcdir)/manvers.texinfo \ - $(srcdir)/rluserman.texinfo -HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \ - $(srcdir)/hstech.texinfo $(srcdir)/manvers.texinfo - -# This should be a program that converts troff to an ascii-readable format -NROFF = groff -Tascii - -# This should be a program that converts troff to postscript -GROFF = groff - -DVIOBJ = readline.dvi history.dvi rluserman.dvi -INFOOBJ = readline.info history.info rluserman.info -PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps -HTMLOBJ = readline.html history.html rluserman.html -TEXTOBJ = readline.0 history.0 - -INTERMEDIATE_OBJ = rlman.dvi hist.dvi rluserman.dvi - -DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) - -.SUFFIXES: .0 .3 .ps .txt .dvi - -.3.0: - $(RM) $@ - -${NROFF} -man $< > $@ - -all: info dvi html ps text -nodvi: info html text - -readline.dvi: $(RLSRC) - TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texinfo - mv rlman.dvi readline.dvi - -readline.info: $(RLSRC) - $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texinfo - -rluserman.dvi: $(RLSRC) - TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texinfo - -rluserman.info: $(RLSRC) - $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texinfo - -history.dvi: ${HISTSRC} - TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/hist.texinfo - mv hist.dvi history.dvi - -history.info: ${HISTSRC} - $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/hist.texinfo - -readline.ps: readline.dvi - $(RM) $@ - $(DVIPS) readline.dvi - -rluserman.ps: rluserman.dvi - $(RM) $@ - $(DVIPS) rluserman.dvi - -history.ps: history.dvi - $(RM) $@ - $(DVIPS) history.dvi - -# -# This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org -# -readline.html: ${RLSRC} - $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo - sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html - -rluserman.html: ${RLSRC} - $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texinfo - -history.html: ${HISTSRC} - $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/hist.texinfo - sed -e 's:hist.html:history.html:g' hist.html > history.html - $(RM) hist.html - -info: $(INFOOBJ) -dvi: $(DVIOBJ) -ps: $(PSOBJ) -html: $(HTMLOBJ) -text: $(TEXTOBJ) - -readline.0: readline.3 - -readline_3.ps: readline.3 - ${RM} $@ - ${GROFF} -man < $(srcdir)/readline.3 > $@ - -history.0: history.3 - -history_3.ps: history.3 - ${RM} $@ - ${GROFF} -man < $(srcdir)/history.3 > $@ - -clean: - $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \ - *.fns *.kys *.tps *.vrs *.bt *.bts *.o core *.core - -mostlyclean: clean - -distclean: clean maybe-clean - $(RM) $(INTERMEDIATE_OBJ) - $(RM) Makefile - -maybe-clean: - -if test "X$(topdir)" != "X$(BUILD_DIR)"; then \ - $(RM) $(DIST_DOCS); \ - fi - -maintainer-clean: clean - $(RM) $(DIST_DOCS) - $(RM) $(INTERMEDIATE_OBJ) - $(RM) Makefile - -installdirs: $(topdir)/support/mkdirs - -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) - -if test -n "${htmldir}" ; then \ - $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \ - fi - -install: installdirs - if test -f readline.info; then \ - ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \ - else \ - ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \ - fi - if test -f rluserman.info; then \ - ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ - else \ - ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ - fi - if test -f history.info; then \ - ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \ - else \ - ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \ - fi - -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ - install-info --dir-file=$(DESTDIR)$(infodir)/dir \ - $(DESTDIR)$(infodir)/readline.info ; \ - install-info --dir-file=$(DESTDIR)$(infodir)/dir \ - $(DESTDIR)$(infodir)/history.info ; \ - install-info --dir-file=$(DESTDIR)$(infodir)/dir \ - $(DESTDIR)$(infodir)/rluserman.info ; \ - else true; fi - -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext) - -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext) - -if test -n "${htmldir}" ; then \ - if test -f readline.html; then \ - ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \ - else \ - ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \ - fi ; \ - if test -f history.html; then \ - ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \ - else \ - ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \ - fi ; \ - if test -f rluserman.html; then \ - ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ - else \ - ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ - fi ; \ - fi - -uninstall: - $(RM) $(DESTDIR)$(infodir)/readline.info - $(RM) $(DESTDIR)$(infodir)/rluserman.info - $(RM) $(DESTDIR)$(infodir)/history.info - $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext) - $(RM) $(DESTDIR)$(man3dir)/history$(man3ext) - -if test -n "${htmldir}" ; then \ - $(RM) $(DESTDIR)$(htmldir)/readline.html ; \ - $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \ - $(RM) $(DESTDIR)$(htmldir)/history.html ; \ - fi diff --git a/readline-4.3.orig/doc/hist.texinfo b/readline-4.3.orig/doc/hist.texinfo deleted file mode 100644 index 63ceb16..0000000 --- a/readline-4.3.orig/doc/hist.texinfo +++ /dev/null @@ -1,110 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@c %**start of header (This is for running Texinfo on a region.) -@setfilename history.info -@settitle GNU History Library -@c %**end of header (This is for running Texinfo on a region.) - -@setchapternewpage odd - -@include manvers.texinfo - -@ifinfo -@dircategory Libraries -@direntry -* History: (history). The GNU history library API -@end direntry - -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-2002 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 Free Software Foundation. -@end ifinfo - -@titlepage -@title GNU History Library -@subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}. -@subtitle @value{UPDATE-MONTH} -@author Brian Fox, Free Software Foundation -@author Chet Ramey, Case Western Reserve University - -@page -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 @* -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. - -@vskip 0pt plus 1filll -Copyright @copyright{} 1988-2002 Free Software Foundation, Inc. -@end titlepage - -@ifinfo -@node Top -@top 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. -@end menu -@end ifinfo - -@syncodeindex fn vr - -@include hsuser.texinfo -@include hstech.texinfo - -@node Concept Index -@appendix Concept Index -@printindex cp - -@node Function and Variable Index -@appendix Function and Variable Index -@printindex vr - -@contents -@bye diff --git a/readline-4.3.orig/doc/history.0 b/readline-4.3.orig/doc/history.0 deleted file mode 100644 index 324c363..0000000 --- a/readline-4.3.orig/doc/history.0 +++ /dev/null @@ -1,660 +0,0 @@ - - - -HISTORY(3) HISTORY(3) - - -NNAAMMEE - history - GNU History Library - -CCOOPPYYRRIIGGHHTT - The GNU History Library is Copyright (C) 1989-2002 by the - Free Software Foundation, Inc. - -DDEESSCCRRIIPPTTIIOONN - 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 uti- - lize information from previous lines in composing new - ones. - - -HHIISSTTOORRYY EEXXPPAANNSSIIOONN - The history library supports a history expansion feature - that is identical to the history expansion in bbaasshh.. This - section describes what syntax features are available. - - 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 cur- - rent input line, or fix errors in previous commands - quickly. - - History expansion is usually performed immediately after a - complete line is read. It takes place in two parts. The - first is to determine which line from the history list to - use during substitution. The second is to select portions - of that line for inclusion into the current one. The line - selected from the history is the _e_v_e_n_t, and the portions - of that line that are acted upon are _w_o_r_d_s. Various _m_o_d_i_- - _f_i_e_r_s are available to manipulate the selected words. The - line is broken into words in the same fashion as bbaasshh does - when reading input, so that several words that would oth- - erwise be separated are considered one word when sur- - rounded by quotes (see the description of hhiissttoorryy__ttookk-- - eenniizzee(()) below). History expansions are introduced by the - appearance of the history expansion character, which is !! - by default. Only backslash (\\) and single quotes can - quote the history expansion character. - - EEvveenntt DDeessiiggnnaattoorrss - An event designator is a reference to a command line entry - in the history list. - - !! Start a history substitution, except when followed - by a bbllaannkk, newline, = or (. - !!_n Refer to command line _n. - !!--_n Refer to the current command line minus _n. - !!!! Refer to the previous command. This is a synonym - for `!-1'. - - - - -GNU History 4.3 2002 January 31 1 - - - - - -HISTORY(3) HISTORY(3) - - - !!_s_t_r_i_n_g - Refer to the most recent command starting with - _s_t_r_i_n_g. - !!??_s_t_r_i_n_g[[??]] - Refer to the most recent command containing _s_t_r_i_n_g. - The trailing ?? may be omitted if _s_t_r_i_n_g is followed - immediately by a newline. - ^^_s_t_r_i_n_g_1^^_s_t_r_i_n_g_2^^ - Quick substitution. Repeat the last command, - replacing _s_t_r_i_n_g_1 with _s_t_r_i_n_g_2. Equivalent to - ``!!:s/_s_t_r_i_n_g_1/_s_t_r_i_n_g_2/'' (see MMooddiiffiieerrss below). - !!## The entire command line typed so far. - - WWoorrdd DDeessiiggnnaattoorrss - 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. - - 00 ((zzeerroo)) - The zeroth word. For the shell, this is the com- - mand word. - _n The _nth word. - ^^ The first argument. That is, word 1. - $$ The last argument. - %% The word matched by the most recent `?_s_t_r_i_n_g?' - search. - _x--_y A range of words; `-_y' abbreviates `0-_y'. - ** All of the words but the zeroth. 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. - xx** Abbreviates _x_-_$. - xx-- Abbreviates _x_-_$ like xx**, but omits the last word. - - If a word designator is supplied without an event specifi- - cation, the previous command is used as the event. - - MMooddiiffiieerrss - After the optional word designator, there may appear a - sequence of one or more of the following modifiers, each - preceded by a `:'. - - hh Remove a trailing file name component, leaving only - the head. - tt Remove all leading file name components, leaving - the tail. - rr Remove a trailing suffix of the form _._x_x_x, leaving - the basename. - ee Remove all but the trailing suffix. - pp Print the new command but do not execute it. - - - -GNU History 4.3 2002 January 31 2 - - - - - -HISTORY(3) HISTORY(3) - - - qq Quote the substituted words, escaping further sub- - stitutions. - xx Quote the substituted words as with qq, but break - into words at bbllaannkkss and newlines. - ss//_o_l_d//_n_e_w// - Substitute _n_e_w for the first occurrence of _o_l_d in - the event line. Any delimiter can be used in place - of /. The final delimiter is optional if it is the - last character of the event line. The delimiter - may be quoted in _o_l_d and _n_e_w with a single back- - slash. If & appears in _n_e_w, it is replaced by _o_l_d. - A single backslash will quote the &. If _o_l_d is - null, it is set to the last _o_l_d substituted, or, if - no previous history substitutions took place, the - last _s_t_r_i_n_g in a !!??_s_t_r_i_n_g[[??]] search. - && Repeat the previous substitution. - gg Cause changes to be applied over the entire event - line. This is used in conjunction with `::ss' (e.g., - `::ggss//_o_l_d//_n_e_w//') or `::&&'. If used with `::ss', any - delimiter can be used in place of /, and the final - delimiter is optional if it is the last character - of the event line. - -PPRROOGGRRAAMMMMIINNGG WWIITTHH HHIISSTTOORRYY FFUUNNCCTTIIOONNSS - This section describes how to use the History library in - other programs. - - IInnttrroodduuccttiioonn ttoo HHiissttoorryy - The programmer using the History library has available - functions for remembering lines on a history list, associ- - ating 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 _e_x_p_a_n_s_i_o_n function - is available which provides for a consistent user inter- - face 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 previ- - ous lines and using that text in new commands. The basic - history manipulation commands are identical to the history - substitution provided by bbaasshh. - - 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 edit- - ing. - - Before declaring any functions using any functionality the - History library provides in other code, an application - writer should include the file _<_r_e_a_d_l_i_n_e_/_h_i_s_t_o_r_y_._h_> in any - file that uses the History library's features. It sup- - plies extern declarations for all of the library's public - - - -GNU History 4.3 2002 January 31 3 - - - - - -HISTORY(3) HISTORY(3) - - - functions and variables, and declares all of the public - data structures. - - - HHiissttoorryy SSttoorraaggee - The history list is an array of history entries. A his- - tory entry is declared as follows: - - _t_y_p_e_d_e_f _v_o_i_d _* hhiissttddaattaa__tt;; - - typedef struct _hist_entry { - char *line; - histdata_t data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - _H_I_S_T___E_N_T_R_Y _*_* tthhee__hhiissttoorryy__lliisstt;; - - The state of the History library is encapsulated into a - single structure: - - /* - * A structure used to pass around the current state of the history. - */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes HHSS__SSTTIIFFLLEEDD, the history has - been stifled. - -HHiissttoorryy FFuunnccttiioonnss - This section describes the calling sequence for the vari- - ous functions exported by the GNU History library. - - IInniittiiaalliizziinngg HHiissttoorryy aanndd SSttaattee MMaannaaggeemmeenntt - 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. - - _v_o_i_d uussiinngg__hhiissttoorryy (_v_o_i_d) - Begin a session in which the history functions might be - used. This initializes the interactive variables. - - _H_I_S_T_O_R_Y___S_T_A_T_E _* hhiissttoorryy__ggeett__hhiissttoorryy__ssttaattee (_v_o_i_d) - Return a structure describing the current state of the - input history. - - _v_o_i_d hhiissttoorryy__sseett__hhiissttoorryy__ssttaattee (_H_I_S_T_O_R_Y___S_T_A_T_E _*_s_t_a_t_e) - - - -GNU History 4.3 2002 January 31 4 - - - - - -HISTORY(3) HISTORY(3) - - - Set the state of the history list according to _s_t_a_t_e. - - - HHiissttoorryy LLiisstt MMaannaaggeemmeenntt - These functions manage individual entries on the history - list, or set parameters managing the list itself. - - _v_o_i_d aadddd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) - Place _s_t_r_i_n_g at the end of the history list. The associ- - ated data field (if any) is set to NNUULLLL. - - _H_I_S_T___E_N_T_R_Y _* rreemmoovvee__hhiissttoorryy (_i_n_t _w_h_i_c_h) - Remove history entry at offset _w_h_i_c_h from the history. - The removed element is returned so you can free the line, - data, and containing structure. - - _H_I_S_T___E_N_T_R_Y _* rreeppllaaccee__hhiissttoorryy__eennttrryy (_i_n_t _w_h_i_c_h_, _c_o_n_s_t _c_h_a_r - _*_l_i_n_e_, _h_i_s_t_d_a_t_a___t _d_a_t_a) - Make the history entry at offset _w_h_i_c_h have _l_i_n_e and _d_a_t_a. - This returns the old entry so you can dispose of the data. - In the case of an invalid _w_h_i_c_h, a NNUULLLL pointer is - returned. - - _v_o_i_d cclleeaarr__hhiissttoorryy (_v_o_i_d) - Clear the history list by deleting all the entries. - - _v_o_i_d ssttiiffllee__hhiissttoorryy (_i_n_t _m_a_x) - Stifle the history list, remembering only the last _m_a_x - entries. - - _i_n_t uunnssttiiffllee__hhiissttoorryy (_v_o_i_d) - Stop stifling the history. This returns the previously- - set maximum number of history entries (as set by ssttii-- - ffllee__hhiissttoorryy(())). history was stifled. The value is posi- - tive if the history was stifled, negative if it wasn't. - - _i_n_t hhiissttoorryy__iiss__ssttiifflleedd (_v_o_i_d) - Returns non-zero if the history is stifled, zero if it is - not. - - - IInnffoorrmmaattiioonn AAbboouutt tthhee HHiissttoorryy LLiisstt - These functions return information about the entire his- - tory list or individual list entries. - - _H_I_S_T___E_N_T_R_Y _*_* hhiissttoorryy__lliisstt (_v_o_i_d) - Return a NNUULLLL terminated array of _H_I_S_T___E_N_T_R_Y _* which is - the current input history. Element 0 of this list is the - beginning of time. If there is no history, return NNUULLLL. - - _i_n_t wwhheerree__hhiissttoorryy (_v_o_i_d) - Returns the offset of the current history element. - - _H_I_S_T___E_N_T_R_Y _* ccuurrrreenntt__hhiissttoorryy (_v_o_i_d) - - - -GNU History 4.3 2002 January 31 5 - - - - - -HISTORY(3) HISTORY(3) - - - Return the history entry at the current position, as - determined by wwhheerree__hhiissttoorryy(()). If there is no entry - there, return a NNUULLLL pointer. - - _H_I_S_T___E_N_T_R_Y _* hhiissttoorryy__ggeett (_i_n_t _o_f_f_s_e_t) - Return the history entry at position _o_f_f_s_e_t, starting from - hhiissttoorryy__bbaassee. If there is no entry there, or if _o_f_f_s_e_t is - greater than the history length, return a NNUULLLL pointer. - - _i_n_t hhiissttoorryy__ttoottaall__bbyytteess (_v_o_i_d) - Return the number of bytes that the primary history - entries are using. This function returns the sum of the - lengths of all the lines in the history. - - - MMoovviinngg AArroouunndd tthhee HHiissttoorryy LLiisstt - These functions allow the current index into the history - list to be set or changed. - - _i_n_t hhiissttoorryy__sseett__ppooss (_i_n_t _p_o_s) - Set the current history offset to _p_o_s, an absolute index - into the list. Returns 1 on success, 0 if _p_o_s is less - than zero or greater than the number of history entries. - - _H_I_S_T___E_N_T_R_Y _* pprreevviioouuss__hhiissttoorryy (_v_o_i_d) - Back up the current history offset to the previous history - entry, and return a pointer to that entry. If there is no - previous entry, return a NNUULLLL pointer. - - _H_I_S_T___E_N_T_R_Y _* nneexxtt__hhiissttoorryy (_v_o_i_d) - Move the current history offset forward to the next his- - tory entry, and return the a pointer to that entry. If - there is no next entry, return a NNUULLLL pointer. - - - SSeeaarrcchhiinngg tthhee HHiissttoorryy LLiisstt - 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 his- - tory position. The search may be _a_n_c_h_o_r_e_d, meaning that - the string must match at the beginning of the history - entry. - - _i_n_t hhiissttoorryy__sseeaarrcchh (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n) - Search the history for _s_t_r_i_n_g, starting at the current - history offset. If _d_i_r_e_c_t_i_o_n is less than 0, then the - search is through previous entries, otherwise through sub- - sequent entries. If _s_t_r_i_n_g is found, then the current - history index is set to that history entry, and the value - returned is the offset in the line of the entry where - _s_t_r_i_n_g was found. Otherwise, nothing is changed, and a -1 - is returned. - - _i_n_t hhiissttoorryy__sseeaarrcchh__pprreeffiixx (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t - - - -GNU History 4.3 2002 January 31 6 - - - - - -HISTORY(3) HISTORY(3) - - - _d_i_r_e_c_t_i_o_n) - Search the history for _s_t_r_i_n_g, starting at the current - history offset. The search is anchored: matching lines - must begin with _s_t_r_i_n_g. If _d_i_r_e_c_t_i_o_n is less than 0, then - the search is through previous entries, otherwise through - subsequent entries. If _s_t_r_i_n_g is found, then the current - history index is set to that entry, and the return value - is 0. Otherwise, nothing is changed, and a -1 is - returned. - - _i_n_t hhiissttoorryy__sseeaarrcchh__ppooss (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _d_i_r_e_c_t_i_o_n_, - _i_n_t _p_o_s) - Search for _s_t_r_i_n_g in the history list, starting at _p_o_s, an - absolute index into the list. If _d_i_r_e_c_t_i_o_n is negative, - the search proceeds backward from _p_o_s, otherwise forward. - Returns the absolute index of the history element where - _s_t_r_i_n_g was found, or -1 otherwise. - - - MMaannaaggiinngg tthhee HHiissttoorryy FFiillee - The History library can read the history from and write it - to a file. This section documents the functions for man- - aging a history file. - - _i_n_t rreeaadd__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) - Add the contents of _f_i_l_e_n_a_m_e to the history list, a line - at a time. If _f_i_l_e_n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_- - _t_o_r_y. Returns 0 if successful, or eerrrrnnoo if not. - - _i_n_t rreeaadd__hhiissttoorryy__rraannggee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t _f_r_o_m_, - _i_n_t _t_o) - Read a range of lines from _f_i_l_e_n_a_m_e, adding them to the - history list. Start reading at line _f_r_o_m and end at _t_o. - If _f_r_o_m is zero, start at the beginning. If _t_o is less - than _f_r_o_m, then read until the end of the file. If _f_i_l_e_- - _n_a_m_e is NNUULLLL, then read from _~_/_._h_i_s_t_o_r_y. Returns 0 if - successful, or eerrrrnnoo if not. - - _i_n_t wwrriittee__hhiissttoorryy (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) - Write the current history to _f_i_l_e_n_a_m_e, overwriting _f_i_l_e_- - _n_a_m_e if necessary. If _f_i_l_e_n_a_m_e is NNUULLLL, then write the - history list to _~_/_._h_i_s_t_o_r_y. Returns 0 on success, or - eerrrrnnoo on a read or write error. - - - _i_n_t aappppeenndd__hhiissttoorryy (_i_n_t _n_e_l_e_m_e_n_t_s_, _c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e) - Append the last _n_e_l_e_m_e_n_t_s of the history list to _f_i_l_e_n_a_m_e. - If _f_i_l_e_n_a_m_e is NNUULLLL, then append to _~_/_._h_i_s_t_o_r_y. Returns 0 - on success, or eerrrrnnoo on a read or write error. - - _i_n_t hhiissttoorryy__ttrruunnccaattee__ffiillee (_c_o_n_s_t _c_h_a_r _*_f_i_l_e_n_a_m_e_, _i_n_t - _n_l_i_n_e_s) - Truncate the history file _f_i_l_e_n_a_m_e, leaving only the last - _n_l_i_n_e_s lines. If _f_i_l_e_n_a_m_e is NNUULLLL, then _~_/_._h_i_s_t_o_r_y is - - - -GNU History 4.3 2002 January 31 7 - - - - - -HISTORY(3) HISTORY(3) - - - truncated. Returns 0 on success, or eerrrrnnoo on failure. - - - HHiissttoorryy EExxppaannssiioonn - These functions implement history expansion. - - _i_n_t hhiissttoorryy__eexxppaanndd (_c_h_a_r _*_s_t_r_i_n_g_, _c_h_a_r _*_*_o_u_t_p_u_t) - Expand _s_t_r_i_n_g, placing the result into _o_u_t_p_u_t, a pointer - to a string. Returns: - 0 If no expansions took place (or, if the only - change in the text was the removal of escape - characters preceding the history expansion - character); - 1 if expansions did take place; - -1 if there was an error in expansion; - 2 if the returned line should be displayed, - but not executed, as with the ::pp modifier. - If an error ocurred in expansion, then _o_u_t_p_u_t contains a - descriptive error message. - - _c_h_a_r _* ggeett__hhiissttoorryy__eevveenntt (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g_, _i_n_t _*_c_i_n_d_e_x_, - _i_n_t _q_c_h_a_r) - Returns the text of the history event beginning at _s_t_r_i_n_g - + _*_c_i_n_d_e_x. _*_c_i_n_d_e_x is modified to point to after the - event specifier. At function entry, _c_i_n_d_e_x points to the - index into _s_t_r_i_n_g where the history event specification - begins. _q_c_h_a_r is a character that is allowed to end the - event specification in addition to the ``normal'' termi- - nating characters. - - _c_h_a_r _*_* hhiissttoorryy__ttookkeenniizzee (_c_o_n_s_t _c_h_a_r _*_s_t_r_i_n_g) - Return an array of tokens parsed out of _s_t_r_i_n_g, much as - the shell might. The tokens are split on the characters - in the hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss variable, and shell quoting - conventions are obeyed. - - _c_h_a_r _* hhiissttoorryy__aarrgg__eexxttrraacctt (_i_n_t _f_i_r_s_t_, _i_n_t _l_a_s_t_, _c_o_n_s_t - _c_h_a_r _*_s_t_r_i_n_g) - Extract a string segment consisting of the _f_i_r_s_t through - _l_a_s_t arguments present in _s_t_r_i_n_g. Arguments are split - using hhiissttoorryy__ttookkeenniizzee(()). - - - HHiissttoorryy VVaarriiaabblleess - This section describes the externally-visible variables - exported by the GNU History Library. - - _i_n_t hhiissttoorryy__bbaassee - The logical offset of the first entry in the history list. - - _i_n_t hhiissttoorryy__lleennggtthh - The number of entries currently stored in the history - list. - - - - -GNU History 4.3 2002 January 31 8 - - - - - -HISTORY(3) HISTORY(3) - - - _i_n_t hhiissttoorryy__mmaaxx__eennttrriieess - The maximum number of history entries. This must be - changed using ssttiiffllee__hhiissttoorryy(()). - - _c_h_a_r hhiissttoorryy__eexxppaannssiioonn__cchhaarr - The character that introduces a history event. The - default is !!. Setting this to 0 inhibits history expan- - sion. - - _c_h_a_r hhiissttoorryy__ssuubbsstt__cchhaarr - The character that invokes word substitution if found at - the start of a line. The default is ^^. - - _c_h_a_r hhiissttoorryy__ccoommmmeenntt__cchhaarr - During tokenization, if this character is seen as the - first character of a word, then it and all subsequent - characters up to a newline are ignored, suppressing his- - tory expansion for the remainder of the line. This is - disabled by default. - - _c_h_a_r _* hhiissttoorryy__wwoorrdd__ddeelliimmiitteerrss - The characters that separate tokens for hhiissttoorryy__ttookk-- - eenniizzee(()). The default value is "" \\tt\\nn(())<<>>;;&&||"". - - _c_h_a_r _* hhiissttoorryy__nnoo__eexxppaanndd__cchhaarrss - The list of characters which inhibit history expansion if - found immediately following hhiissttoorryy__eexxppaannssiioonn__cchhaarr. The - default is space, tab, newline, \\rr, and ==. - - _c_h_a_r _* hhiissttoorryy__sseeaarrcchh__ddeelliimmiitteerr__cchhaarrss - The list of additional characters which can delimit a his- - tory search string, in addition to space, tab, _: and _? in - the case of a substring search. The default is empty. - - _i_n_t hhiissttoorryy__qquuootteess__iinnhhiibbiitt__eexxppaannssiioonn - If non-zero, single-quoted words are not scanned for the - history expansion character. The default value is 0. - - _r_l___l_i_n_e_b_u_f___f_u_n_c___t _* hhiissttoorryy__iinnhhiibbiitt__eexxppaannssiioonn__ffuunnccttiioonn - This should be set to the address of a function that takes - two arguments: a cchhaarr ** (_s_t_r_i_n_g) and an iinntt index into - that string (_i). It should return a non-zero value if the - history expansion starting at _s_t_r_i_n_g_[_i_] should not be per- - formed; zero if the expansion should be done. It is - intended for use by applications like bbaasshh that use the - history expansion character for additional purposes. By - default, this variable is set to NNUULLLL. - -FFIILLEESS - _~_/_._h_i_s_t_o_r_y - Default filename for reading and writing saved his- - tory - - - - - -GNU History 4.3 2002 January 31 9 - - - - - -HISTORY(3) HISTORY(3) - - -SSEEEE AALLSSOO - _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _b_a_s_h(1) - _r_e_a_d_l_i_n_e(3) - -AAUUTTHHOORRSS - Brian Fox, Free Software Foundation - bfox@gnu.org - - Chet Ramey, Case Western Reserve University - chet@ins.CWRU.Edu - -BBUUGG RREEPPOORRTTSS - If you find a bug in the hhiissttoorryy library, you should - report it. But first, you should make sure that it really - is a bug, and that it appears in the latest version of the - hhiissttoorryy library that you have. - - Once you have determined that a bug actually exists, mail - a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, - you are welcome to mail that as well! Suggestions and - `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_- - _l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup - ggnnuu..bbaasshh..bbuugg. - - Comments and bug reports concerning this manual page - should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GNU History 4.3 2002 January 31 10 - - diff --git a/readline-4.3.orig/doc/history.3 b/readline-4.3.orig/doc/history.3 deleted file mode 100644 index ed0cb9f..0000000 --- a/readline-4.3.orig/doc/history.3 +++ /dev/null @@ -1,640 +0,0 @@ -.\" -.\" MAN PAGE COMMENTS to -.\" -.\" Chet Ramey -.\" Information Network Services -.\" Case Western Reserve University -.\" chet@ins.CWRU.Edu -.\" -.\" Last Change: Thu Jan 31 16:08:07 EST 2002 -.\" -.TH HISTORY 3 "2002 January 31" "GNU History 4.3" -.\" -.\" File Name macro. This used to be `.PN', for Path Name, -.\" but Sun doesn't seem to like that very much. -.\" -.de FN -\fI\|\\$1\|\fP -.. -.ds lp \fR\|(\fP -.ds rp \fR\|)\fP -.\" FnN return-value fun-name N arguments -.de Fn1 -\fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp -.br -.. -.de Fn2 -.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp -.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp -.br -.. -.de Fn3 -.if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp -.if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp -.br -.. -.de Vb -\fI\\$1\fP \fB\\$2\fP -.br -.. -.SH NAME -history \- GNU History Library -.SH COPYRIGHT -.if t The GNU History Library is Copyright \(co 1989-2002 by the Free Software Foundation, Inc. -.if n The GNU History Library is Copyright (C) 1989-2002 by the Free Software Foundation, Inc. -.SH DESCRIPTION -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. -.PP -.SH "HISTORY EXPANSION" -.PP -The history library supports a history expansion feature that -is identical to the history expansion in -.BR bash. -This section describes what syntax features are available. -.PP -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. -.PP -History expansion is usually performed immediately after a complete line -is read. -It takes place in two parts. -The first is to determine which line from the history list -to use during substitution. -The second is to select portions of that line for inclusion into -the current one. -The line selected from the history is the \fIevent\fP, -and the portions of that line that are acted upon are \fIwords\fP. -Various \fImodifiers\fP are available to manipulate the selected words. -The line is broken into words in the same fashion as \fBbash\fP -does when reading input, -so that several words that would otherwise be separated -are considered one word when surrounded by quotes (see the -description of \fBhistory_tokenize()\fP below). -History expansions are introduced by the appearance of the -history expansion character, which is \^\fB!\fP\^ by default. -Only backslash (\^\fB\e\fP\^) and single quotes can quote -the history expansion character. -.SS Event Designators -.PP -An event designator is a reference to a command line entry in the -history list. -.PP -.PD 0 -.TP -.B ! -Start a history substitution, except when followed by a -.BR blank , -newline, = or (. -.TP -.B !\fIn\fR -Refer to command line -.IR n . -.TP -.B !\-\fIn\fR -Refer to the current command line minus -.IR n . -.TP -.B !! -Refer to the previous command. This is a synonym for `!\-1'. -.TP -.B !\fIstring\fR -Refer to the most recent command starting with -.IR string . -.TP -.B !?\fIstring\fR\fB[?]\fR -Refer to the most recent command containing -.IR string . -The trailing \fB?\fP may be omitted if -.I string -is followed immediately by a newline. -.TP -.B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u -Quick substitution. Repeat the last command, replacing -.I string1 -with -.IR string2 . -Equivalent to -``!!:s/\fIstring1\fP/\fIstring2\fP/'' -(see \fBModifiers\fP below). -.TP -.B !# -The entire command line typed so far. -.PD -.SS Word Designators -.PP -Word designators are used to select desired words from the event. -A -.B : -separates the event specification from the word designator. -It may be omitted if the word designator begins with a -.BR ^ , -.BR $ , -.BR * , -.BR \- , -or -.BR % . -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. -.PP -.PD 0 -.TP -.B 0 (zero) -The zeroth word. For the shell, this is the command -word. -.TP -.I n -The \fIn\fRth word. -.TP -.B ^ -The first argument. That is, word 1. -.TP -.B $ -The last argument. -.TP -.B % -The word matched by the most recent `?\fIstring\fR?' search. -.TP -.I x\fB\-\fPy -A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. -.TP -.B * -All of the words but the zeroth. This is a synonym -for `\fI1\-$\fP'. It is not an error to use -.B * -if there is just one -word in the event; the empty string is returned in that case. -.TP -.B x* -Abbreviates \fIx\-$\fP. -.TP -.B x\- -Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word. -.PD -.PP -If a word designator is supplied without an event specification, the -previous command is used as the event. -.SS Modifiers -.PP -After the optional word designator, there may appear a sequence of -one or more of the following modifiers, each preceded by a `:'. -.PP -.PD 0 -.PP -.TP -.B h -Remove a trailing file name component, leaving only the head. -.TP -.B t -Remove all leading file name components, leaving the tail. -.TP -.B r -Remove a trailing suffix of the form \fI.xxx\fP, leaving the -basename. -.TP -.B e -Remove all but the trailing suffix. -.TP -.B p -Print the new command but do not execute it. -.TP -.B q -Quote the substituted words, escaping further substitutions. -.TP -.B x -Quote the substituted words as with -.BR q , -but break into words at -.B blanks -and newlines. -.TP -.B s/\fIold\fP/\fInew\fP/ -Substitute -.I new -for the first occurrence of -.I old -in the event line. Any delimiter can be used in place of /. The -final delimiter is optional if it is the last character of the -event line. The delimiter may be quoted in -.I old -and -.I new -with a single backslash. If & appears in -.IR new , -it is replaced by -.IR old . -A single backslash will quote the &. If -.I old -is null, it is set to the last -.I old -substituted, or, if no previous history substitutions took place, -the last -.I string -in a -.B !?\fIstring\fR\fB[?]\fR -search. -.TP -.B & -Repeat the previous substitution. -.TP -.B g -Cause changes to be applied over the entire event line. This is -used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') -or `\fB:&\fP'. If used with -`\fB:s\fP', any delimiter can be used -in place of /, and the final delimiter is optional -if it is the last character of the event line. -.PD -.SH "PROGRAMMING WITH HISTORY FUNCTIONS" -This section describes how to use the History library in other programs. -.SS Introduction to History -.PP -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 \fIexpansion\fP function -is available which provides for a consistent user interface across -different programs. -.PP -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 -identical to -the history substitution provided by \fBbash\fP. -.PP -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. -.PP -Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file -.FN <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. - -.SS History Storage -.PP -The history list is an array of history entries. A history entry is -declared as follows: -.PP -.Vb "typedef void *" histdata_t; -.PP -.nf -typedef struct _hist_entry { - char *line; - histdata_t data; -} HIST_ENTRY; -.fi -.PP -The history list itself might therefore be declared as -.PP -.Vb "HIST_ENTRY **" the_history_list; -.PP -The state of the History library is encapsulated into a single structure: -.PP -.nf -/* - * A structure used to pass around the current state of the history. - */ -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; -.fi -.PP -If the flags member includes \fBHS_STIFLED\fP, the history has been -stifled. -.SH "History Functions" -.PP -This section describes the calling sequence for the various functions -exported by the GNU History library. -.SS Initializing History and State Management -This section describes functions used to initialize and manage -the state of the History library when you want to use the history -functions in your program. - -.Fn1 void using_history void -Begin a session in which the history functions might be used. This -initializes the interactive variables. - -.Fn1 "HISTORY_STATE *" history_get_history_state void -Return a structure describing the current state of the input history. - -.Fn1 void history_set_history_state "HISTORY_STATE *state" -Set the state of the history list according to \fIstate\fP. - -.SS History List Management - -These functions manage individual entries on the history list, or set -parameters managing the list itself. - -.Fn1 void add_history "const char *string" -Place \fIstring\fP at the end of the history list. The associated data -field (if any) is set to \fBNULL\fP. - -.Fn1 "HIST_ENTRY *" remove_history "int which" -Remove history entry at offset \fIwhich\fP from the history. The -removed element is returned so you can free the line, data, -and containing structure. - -.Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data" -Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP. -This returns the old entry so you can dispose of the data. In the case -of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned. - -.Fn1 void clear_history "void" -Clear the history list by deleting all the entries. - -.Fn1 void stifle_history "int max" -Stifle the history list, remembering only the last \fImax\fP entries. - -.Fn1 int unstifle_history "void" -Stop stifling the history. This returns the previously-set -maximum number of history entries (as set by \fBstifle_history()\fP). -history was stifled. The value is positive if the history was -stifled, negative if it wasn't. - -.Fn1 int history_is_stifled "void" -Returns non-zero if the history is stifled, zero if it is not. - -.SS Information About the History List - -These functions return information about the entire history list or -individual list entries. - -.Fn1 "HIST_ENTRY **" history_list "void" -Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return \fBNULL\fP. - -.Fn1 int where_history "void" -Returns the offset of the current history element. - -.Fn1 "HIST_ENTRY *" current_history "void" -Return the history entry at the current position, as determined by -\fBwhere_history()\fP. If there is no entry there, return a \fBNULL\fP -pointer. - -.Fn1 "HIST_ENTRY *" history_get "int offset" -Return the history entry at position \fIoffset\fP, starting from -\fBhistory_base\fP. -If there is no entry there, or if \fIoffset\fP -is greater than the history length, return a \fBNULL\fP pointer. - -.Fn1 int history_total_bytes "void" -Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. - -.SS Moving Around the History List - -These functions allow the current index into the history list to be -set or changed. - -.Fn1 int history_set_pos "int pos" -Set the current history offset to \fIpos\fP, an absolute index -into the list. -Returns 1 on success, 0 if \fIpos\fP is less than zero or greater -than the number of history entries. - -.Fn1 "HIST_ENTRY *" previous_history "void" -Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a \fBNULL\fP pointer. - -.Fn1 "HIST_ENTRY *" next_history "void" -Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a \fBNULL\fP pointer. - -.SS Searching the History List - -These functions allow searching of the history list for entries containing -a specific string. Searching may be performed both forward and backward -from the current history position. The search may be \fIanchored\fP, -meaning that the string must match at the beginning of the history entry. - -.Fn2 int history_search "const char *string" "int direction" -Search the history for \fIstring\fP, starting at the current history offset. -If \fIdirection\fP is less than 0, then the search is through -previous entries, otherwise through subsequent entries. -If \fIstring\fP is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -\fIstring\fP was found. Otherwise, nothing is changed, and a -1 is -returned. - -.Fn2 int history_search_prefix "const char *string" "int direction" -Search the history for \fIstring\fP, starting at the current history -offset. The search is anchored: matching lines must begin with -\fIstring\fP. If \fIdirection\fP is less than 0, then the search is -through previous entries, otherwise through subsequent entries. -If \fIstring\fP is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. - -.Fn3 int history_search_pos "const char *string" "int direction" "int pos" -Search for \fIstring\fP in the history list, starting at \fIpos\fP, an -absolute index into the list. If \fIdirection\fP is negative, the search -proceeds backward from \fIpos\fP, otherwise forward. Returns the absolute -index of the history element where \fIstring\fP was found, or -1 otherwise. - -.SS Managing the History File -The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -.Fn1 int read_history "const char *filename" -Add the contents of \fIfilename\fP to the history list, a line at a time. -If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. -Returns 0 if successful, or \fBerrno\fP if not. - -.Fn3 int read_history_range "const char *filename" "int from" "int to" -Read a range of lines from \fIfilename\fP, adding them to the history list. -Start reading at line \fIfrom\fP and end at \fIto\fP. -If \fIfrom\fP is zero, start at the beginning. If \fIto\fP is less than -\fIfrom\fP, then read until the end of the file. If \fIfilename\fP is -\fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, -or \fBerrno\fP if not. - -.Fn1 int write_history "const char *filename" -Write the current history to \fIfilename\fP, overwriting \fIfilename\fP -if necessary. -If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP. -Returns 0 on success, or \fBerrno\fP on a read or write error. - - -.Fn2 int append_history "int nelements" "const char *filename" -Append the last \fInelements\fP of the history list to \fIfilename\fP. -If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP. -Returns 0 on success, or \fBerrno\fP on a read or write error. - -.Fn2 int history_truncate_file "const char *filename" "int nlines" -Truncate the history file \fIfilename\fP, leaving only the last -\fInlines\fP lines. -If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated. -Returns 0 on success, or \fBerrno\fP on failure. - -.SS History Expansion - -These functions implement history expansion. - -.Fn2 int history_expand "char *string" "char **output" -Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer -to a string. Returns: -.RS -.PD 0 -.TP -0 -If no expansions took place (or, if the only change in -the text was the removal of escape characters preceding the history expansion -character); -.TP -1 -if expansions did take place; -.TP --1 -if there was an error in expansion; -.TP -2 -if the returned line should be displayed, but not executed, -as with the \fB:p\fP modifier. -.PD -.RE -If an error ocurred in expansion, then \fIoutput\fP contains a descriptive -error message. - -.Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar" -Returns the text of the history event beginning at \fIstring\fP + -\fI*cindex\fP. \fI*cindex\fP is modified to point to after the event -specifier. At function entry, \fIcindex\fP points to the index into -\fIstring\fP where the history event specification begins. \fIqchar\fP -is a character that is allowed to end the event specification in addition -to the ``normal'' terminating characters. - -.Fn1 "char **" history_tokenize "const char *string" -Return an array of tokens parsed out of \fIstring\fP, much as the -shell might. -The tokens are split on the characters in the -\fBhistory_word_delimiters\fP variable, -and shell quoting conventions are obeyed. - -.Fn3 "char *" history_arg_extract "int first" "int last" "const char *string" -Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP -arguments present in \fIstring\fP. Arguments are split using -\fBhistory_tokenize()\fP. - -.SS History Variables - -This section describes the externally-visible variables exported by -the GNU History Library. - -.Vb int history_base -The logical offset of the first entry in the history list. - -.Vb int history_length -The number of entries currently stored in the history list. - -.Vb int history_max_entries -The maximum number of history entries. This must be changed using -\fBstifle_history()\fP. - -.Vb char history_expansion_char -The character that introduces a history event. The default is \fB!\fP. -Setting this to 0 inhibits history expansion. - -.Vb char history_subst_char -The character that invokes word substitution if found at the start of -a line. The default is \fB^\fP. - -.Vb char history_comment_char -During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. - -.Vb "char *" history_word_delimiters -The characters that separate tokens for \fBhistory_tokenize()\fP. -The default value is \fB"\ \et\en()<>;&|"\fP. - -.Vb "char *" history_no_expand_chars -The list of characters which inhibit history expansion if found immediately -following \fBhistory_expansion_char\fP. The default is space, tab, newline, -\fB\er\fP, and \fB=\fP. - -.Vb "char *" history_search_delimiter_chars -The list of additional characters which can delimit a history search -string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of -a substring search. The default is empty. - -.Vb int history_quotes_inhibit_expansion -If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. - -.Vb "rl_linebuf_func_t *" history_inhibit_expansion_function -This should be set to the address of a function that takes two arguments: -a \fBchar *\fP (\fIstring\fP) -and an \fBint\fP index into that string (\fIi\fP). -It should return a non-zero value if the history expansion starting at -\fIstring[i]\fP should not be performed; zero if the expansion should -be done. -It is intended for use by applications like \fBbash\fP that use the history -expansion character for additional purposes. -By default, this variable is set to \fBNULL\fP. -.SH FILES -.PD 0 -.TP -.FN ~/.history -Default filename for reading and writing saved history -.PD -.SH "SEE ALSO" -.PD 0 -.TP -\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey -.TP -\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey -.TP -\fIbash\fP(1) -.TP -\fIreadline\fP(3) -.PD -.SH AUTHORS -Brian Fox, Free Software Foundation -.br -bfox@gnu.org -.PP -Chet Ramey, Case Western Reserve University -.br -chet@ins.CWRU.Edu -.SH BUG REPORTS -If you find a bug in the -.B history -library, you should report it. But first, you should -make sure that it really is a bug, and that it appears in the latest -version of the -.B history -library that you have. -.PP -Once you have determined that a bug actually exists, mail a -bug report to \fIbug\-readline\fP@\fIgnu.org\fP. -If you have a fix, you are welcome to mail that -as well! Suggestions and `philosophical' bug reports may be mailed -to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet -newsgroup -.BR gnu.bash.bug . -.PP -Comments and bug reports concerning -this manual page should be directed to -.IR chet@ins.CWRU.Edu . diff --git a/readline-4.3.orig/doc/history.dvi b/readline-4.3.orig/doc/history.dvi Binary files differdeleted file mode 100644 index bf7444e..0000000 --- a/readline-4.3.orig/doc/history.dvi +++ /dev/null diff --git a/readline-4.3.orig/doc/history.html b/readline-4.3.orig/doc/history.html deleted file mode 100644 index 5afe15b..0000000 --- a/readline-4.3.orig/doc/history.html +++ /dev/null @@ -1,1639 +0,0 @@ -<HTML> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on June, 27 2002 by texi2html 1.64 --> -<!-- -Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) - Karl Berry <karl@freefriends.org> - Olaf Bachmann <obachman@mathematik.uni-kl.de> - and many others. -Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> -Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> - ---> -<HEAD> -<TITLE>GNU History Library: </TITLE> - -<META NAME="description" CONTENT="GNU History Library: "> -<META NAME="keywords" CONTENT="GNU History Library: "> -<META NAME="resource-type" CONTENT="document"> -<META NAME="distribution" CONTENT="global"> -<META NAME="Generator" CONTENT="texi2html 1.64"> - -</HEAD> - -<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> - -<A NAME="SEC_Top"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>GNU History Library</H1></P><P> - -This document describes the GNU History library, a programming tool that -provides a consistent user interface for recalling lines of previously -typed input. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC1">1. Using History Interactively</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU History User's Manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC6">2. Programming with GNU History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU History Programmer's Manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC19">A. Concept Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC20">B. Function and Variable Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions - and variables.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<HR SIZE=1> -<A NAME="SEC1"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<A NAME="Using History Interactively"></A> -<H1> 1. Using History Interactively </H1> -<!--docid::SEC1::--> -<P> - -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 <A HREF="history.html#SEC6">2. Programming with GNU History</A>. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC2">1.1 History Expansion</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">What it feels like using History as a user.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="History Interaction"></A> -<HR SIZE="6"> -<A NAME="SEC2"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.1 History Expansion </H2> -<!--docid::SEC2::--> -<P> - -The History library provides a history expansion feature that is similar -to the history expansion provided by <CODE>csh</CODE>. This section -describes the syntax used to manipulate the history information. -</P><P> - -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. -</P><P> - -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 -<EM>event</EM>, and the portions of that line that are acted upon are -called <EM>words</EM>. Various <EM>modifiers</EM> 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 <SAMP>`!'</SAMP> by default. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to specify which history line to use.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC4">1.1.2 Word Designators</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying which words are of interest.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC5">1.1.3 Modifiers</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Modifying the results of substitution.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Event Designators"></A> -<HR SIZE="6"> -<A NAME="SEC3"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.1.1 Event Designators </H3> -<!--docid::SEC3::--> -<P> - -An event designator is a reference to a command line entry in the -history list. -<A NAME="IDX1"></A> -</P><P> - -<DL COMPACT> - -<DT><CODE>!</CODE> -<DD>Start a history substitution, except when followed by a space, tab, -the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>. -<P> - -<DT><CODE>!<VAR>n</VAR></CODE> -<DD>Refer to command line <VAR>n</VAR>. -<P> - -<DT><CODE>!-<VAR>n</VAR></CODE> -<DD>Refer to the command <VAR>n</VAR> lines back. -<P> - -<DT><CODE>!!</CODE> -<DD>Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>. -<P> - -<DT><CODE>!<VAR>string</VAR></CODE> -<DD>Refer to the most recent command starting with <VAR>string</VAR>. -<P> - -<DT><CODE>!?<VAR>string</VAR>[?]</CODE> -<DD>Refer to the most recent command containing <VAR>string</VAR>. The trailing -<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by -a newline. -<P> - -<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE> -<DD>Quick Substitution. Repeat the last command, replacing <VAR>string1</VAR> -with <VAR>string2</VAR>. Equivalent to -<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>. -<P> - -<DT><CODE>!#</CODE> -<DD>The entire command line typed so far. -<P> - -</DL> -<P> - -<A NAME="Word Designators"></A> -<HR SIZE="6"> -<A NAME="SEC4"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC3"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.1.2 Word Designators </H3> -<!--docid::SEC4::--> -<P> - -Word designators are used to select desired words from the event. -A <SAMP>`:'</SAMP> separates the event specification from the word designator. It -may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>, -<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>. 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. -</P><P> - -For example, -</P><P> - -<DL COMPACT> -<DT><CODE>!!</CODE> -<DD>designates the preceding command. When you type this, the preceding -command is repeated in toto. -<P> - -<DT><CODE>!!:$</CODE> -<DD>designates the last argument of the preceding command. This may be -shortened to <CODE>!$</CODE>. -<P> - -<DT><CODE>!fi:2</CODE> -<DD>designates the second argument of the most recent command starting with -the letters <CODE>fi</CODE>. -</DL> -<P> - -Here are the word designators: - -<DL COMPACT> - -<DT><CODE>0 (zero)</CODE> -<DD>The <CODE>0</CODE>th word. For many applications, this is the command word. -<P> - -<DT><CODE><VAR>n</VAR></CODE> -<DD>The <VAR>n</VAR>th word. -<P> - -<DT><CODE>^</CODE> -<DD>The first argument; that is, word 1. -<P> - -<DT><CODE>$</CODE> -<DD>The last argument. -<P> - -<DT><CODE>%</CODE> -<DD>The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search. -<P> - -<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE> -<DD>A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>. -<P> - -<DT><CODE>*</CODE> -<DD>All of the words, except the <CODE>0</CODE>th. This is a synonym for <SAMP>`1-$'</SAMP>. -It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event; -the empty string is returned in that case. -<P> - -<DT><CODE><VAR>x</VAR>*</CODE> -<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> -<P> - -<DT><CODE><VAR>x</VAR>-</CODE> -<DD>Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word. -<P> - -</DL> -<P> - -If a word designator is supplied without an event specification, the -previous command is used as the event. -</P><P> - -<A NAME="Modifiers"></A> -<HR SIZE="6"> -<A NAME="SEC5"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC4"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC2"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.1.3 Modifiers </H3> -<!--docid::SEC5::--> -<P> - -After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a <SAMP>`:'</SAMP>. -</P><P> - -<DL COMPACT> - -<DT><CODE>h</CODE> -<DD>Remove a trailing pathname component, leaving only the head. -<P> - -<DT><CODE>t</CODE> -<DD>Remove all leading pathname components, leaving the tail. -<P> - -<DT><CODE>r</CODE> -<DD>Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving -the basename. -<P> - -<DT><CODE>e</CODE> -<DD>Remove all but the trailing suffix. -<P> - -<DT><CODE>p</CODE> -<DD>Print the new command but do not execute it. -<P> - -<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE> -<DD>Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the -event line. Any delimiter may be used in place of <SAMP>`/'</SAMP>. -The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR> -with a single backslash. If <SAMP>`&'</SAMP> appears in <VAR>new</VAR>, -it is replaced by <VAR>old</VAR>. A single backslash will quote -the <SAMP>`&'</SAMP>. The final delimiter is optional if it is the last -character on the input line. -<P> - -<DT><CODE>&</CODE> -<DD>Repeat the previous substitution. -<P> - -<DT><CODE>g</CODE> -<DD>Cause changes to be applied over the entire event line. Used in -conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>, -or with <SAMP>`&'</SAMP>. -<P> - -</DL> -<P> - -<A NAME="Programming with GNU History"></A> -<HR SIZE="6"> -<A NAME="SEC6"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC5"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> 2. Programming with GNU History </H1> -<!--docid::SEC6::--> -<P> - -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 <A HREF="history.html#SEC1">1. Using History Interactively</A>. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC7">2.1 Introduction to History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">What is the GNU History library for?</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC8">2.2 History Storage</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How information is stored.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC9">2.3 History Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that you can use.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC17">2.4 History Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables that control behaviour.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC18">2.5 History Programming Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Example of using the GNU History Library.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Introduction to History"></A> -<HR SIZE="6"> -<A NAME="SEC7"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.1 Introduction to History </H2> -<!--docid::SEC7::--> -<P> - -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. -</P><P> - -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 <EM>expansion</EM> function -is available which provides for a consistent user interface across -different programs. -</P><P> - -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 <CODE>csh</CODE>. -</P><P> - -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. -</P><P> - -Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file <CODE><readline/history.h></CODE> 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. -</P><P> - -<A NAME="History Storage"></A> -<HR SIZE="6"> -<A NAME="SEC8"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC7"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.2 History Storage </H2> -<!--docid::SEC8::--> -<P> - -The history list is an array of history entries. A history entry is -declared as follows: -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>typedef void *histdata_t; - -typedef struct _hist_entry { - char *line; - histdata_t data; -} HIST_ENTRY; -</pre></td></tr></table></P><P> - -The history list itself might therefore be declared as -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>HIST_ENTRY **the_history_list; -</pre></td></tr></table></P><P> - -The state of the History library is encapsulated into a single structure: -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>/* - * A structure used to pass around the current state of the history. - */ -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; -</pre></td></tr></table></P><P> - -If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been -stifled. -</P><P> - -<A NAME="History Functions"></A> -<HR SIZE="6"> -<A NAME="SEC9"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC8"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.3 History Functions </H2> -<!--docid::SEC9::--> -<P> - -This section describes the calling sequence for the various functions -exported by the GNU History library. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to call when you - want to use history in a - program.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions used to manage the list - of history entries.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions returning information about - the history list.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions used to change the position - in the history list.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to search the history list - for entries containing a string.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that read and write a file - containing the history list.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to perform csh-like history - expansion.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Initializing History and State Management"></A> -<HR SIZE="6"> -<A NAME="SEC10"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.1 Initializing History and State Management </H3> -<!--docid::SEC10::--> -<P> - -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. -</P><P> - -<A NAME="IDX2"></A> -<DL> -<DT><U>Function:</U> void <B>using_history</B> <I>(void)</I> -<DD>Begin a session in which the history functions might be used. This -initializes the interactive variables. -</DL> -</P><P> - -<A NAME="IDX3"></A> -<DL> -<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>(void)</I> -<DD>Return a structure describing the current state of the input history. -</DL> -</P><P> - -<A NAME="IDX4"></A> -<DL> -<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I> -<DD>Set the state of the history list according to <VAR>state</VAR>. -</DL> -</P><P> - -<A NAME="History List Management"></A> -<HR SIZE="6"> -<A NAME="SEC11"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC10"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.2 History List Management </H3> -<!--docid::SEC11::--> -<P> - -These functions manage individual entries on the history list, or set -parameters managing the list itself. -</P><P> - -<A NAME="IDX5"></A> -<DL> -<DT><U>Function:</U> void <B>add_history</B> <I>(const char *string)</I> -<DD>Place <VAR>string</VAR> at the end of the history list. The associated data -field (if any) is set to <CODE>NULL</CODE>. -</DL> -</P><P> - -<A NAME="IDX6"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I> -<DD>Remove history entry at offset <VAR>which</VAR> from the history. The -removed element is returned so you can free the line, data, -and containing structure. -</DL> -</P><P> - -<A NAME="IDX7"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, const char *line, histdata_t data)</I> -<DD>Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>. -This returns the old entry so you can dispose of the data. In the case -of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned. -</DL> -</P><P> - -<A NAME="IDX8"></A> -<DL> -<DT><U>Function:</U> void <B>clear_history</B> <I>(void)</I> -<DD>Clear the history list by deleting all the entries. -</DL> -</P><P> - -<A NAME="IDX9"></A> -<DL> -<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I> -<DD>Stifle the history list, remembering only the last <VAR>max</VAR> entries. -</DL> -</P><P> - -<A NAME="IDX10"></A> -<DL> -<DT><U>Function:</U> int <B>unstifle_history</B> <I>(void)</I> -<DD>Stop stifling the history. This returns the previously-set -maximum number of history entries (as set by <CODE>stifle_history()</CODE>). -The value is positive if the history was -stifled, negative if it wasn't. -</DL> -</P><P> - -<A NAME="IDX11"></A> -<DL> -<DT><U>Function:</U> int <B>history_is_stifled</B> <I>(void)</I> -<DD>Returns non-zero if the history is stifled, zero if it is not. -</DL> -</P><P> - -<A NAME="Information About the History List"></A> -<HR SIZE="6"> -<A NAME="SEC12"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC11"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.3 Information About the History List </H3> -<!--docid::SEC12::--> -<P> - -These functions return information about the entire history list or -individual list entries. -</P><P> - -<A NAME="IDX12"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>(void)</I> -<DD>Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY *</CODE> which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return <CODE>NULL</CODE>. -</DL> -</P><P> - -<A NAME="IDX13"></A> -<DL> -<DT><U>Function:</U> int <B>where_history</B> <I>(void)</I> -<DD>Returns the offset of the current history element. -</DL> -</P><P> - -<A NAME="IDX14"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>(void)</I> -<DD>Return the history entry at the current position, as determined by -<CODE>where_history()</CODE>. If there is no entry there, return a <CODE>NULL</CODE> -pointer. -</DL> -</P><P> - -<A NAME="IDX15"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I> -<DD>Return the history entry at position <VAR>offset</VAR>, starting from -<CODE>history_base</CODE> (see section <A HREF="history.html#SEC17">2.4 History Variables</A>). -If there is no entry there, or if <VAR>offset</VAR> -is greater than the history length, return a <CODE>NULL</CODE> pointer. -</DL> -</P><P> - -<A NAME="IDX16"></A> -<DL> -<DT><U>Function:</U> int <B>history_total_bytes</B> <I>(void)</I> -<DD>Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. -</DL> -</P><P> - -<A NAME="Moving Around the History List"></A> -<HR SIZE="6"> -<A NAME="SEC13"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC12"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.4 Moving Around the History List </H3> -<!--docid::SEC13::--> -<P> - -These functions allow the current index into the history list to be -set or changed. -</P><P> - -<A NAME="IDX17"></A> -<DL> -<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I> -<DD>Set the current history offset to <VAR>pos</VAR>, an absolute index -into the list. -Returns 1 on success, 0 if <VAR>pos</VAR> is less than zero or greater -than the number of history entries. -</DL> -</P><P> - -<A NAME="IDX18"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>(void)</I> -<DD>Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a <CODE>NULL</CODE> pointer. -</DL> -</P><P> - -<A NAME="IDX19"></A> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>(void)</I> -<DD>Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a <CODE>NULL</CODE> pointer. -</DL> -</P><P> - -<A NAME="Searching the History List"></A> -<HR SIZE="6"> -<A NAME="SEC14"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC13"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.5 Searching the History List </H3> -<!--docid::SEC14::--> -<P> - -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 <EM>anchored</EM>, -meaning that the string must match at the beginning of the history entry. -<A NAME="IDX20"></A> -</P><P> - -<A NAME="IDX21"></A> -<DL> -<DT><U>Function:</U> int <B>history_search</B> <I>(const char *string, int direction)</I> -<DD>Search the history for <VAR>string</VAR>, starting at the current history offset. -If <VAR>direction</VAR> is less than 0, then the search is through -previous entries, otherwise through subsequent entries. -If <VAR>string</VAR> is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -<VAR>string</VAR> was found. Otherwise, nothing is changed, and a -1 is -returned. -</DL> -</P><P> - -<A NAME="IDX22"></A> -<DL> -<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(const char *string, int direction)</I> -<DD>Search the history for <VAR>string</VAR>, starting at the current history -offset. The search is anchored: matching lines must begin with -<VAR>string</VAR>. If <VAR>direction</VAR> is less than 0, then the search is -through previous entries, otherwise through subsequent entries. -If <VAR>string</VAR> is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. -</DL> -</P><P> - -<A NAME="IDX23"></A> -<DL> -<DT><U>Function:</U> int <B>history_search_pos</B> <I>(const char *string, int direction, int pos)</I> -<DD>Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an -absolute index into the list. If <VAR>direction</VAR> is negative, the search -proceeds backward from <VAR>pos</VAR>, otherwise forward. Returns the absolute -index of the history element where <VAR>string</VAR> was found, or -1 otherwise. -</DL> -</P><P> - -<A NAME="Managing the History File"></A> -<HR SIZE="6"> -<A NAME="SEC15"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC14"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.6 Managing the History File </H3> -<!--docid::SEC15::--> -<P> - -The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. -</P><P> - -<A NAME="IDX24"></A> -<DL> -<DT><U>Function:</U> int <B>read_history</B> <I>(const char *filename)</I> -<DD>Add the contents of <VAR>filename</VAR> to the history list, a line at a time. -If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>. -Returns 0 if successful, or <CODE>errno</CODE> if not. -</DL> -</P><P> - -<A NAME="IDX25"></A> -<DL> -<DT><U>Function:</U> int <B>read_history_range</B> <I>(const char *filename, int from, int to)</I> -<DD>Read a range of lines from <VAR>filename</VAR>, adding them to the history list. -Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>. -If <VAR>from</VAR> is zero, start at the beginning. If <VAR>to</VAR> is less than -<VAR>from</VAR>, then read until the end of the file. If <VAR>filename</VAR> is -<CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>. Returns 0 if successful, -or <CODE>errno</CODE> if not. -</DL> -</P><P> - -<A NAME="IDX26"></A> -<DL> -<DT><U>Function:</U> int <B>write_history</B> <I>(const char *filename)</I> -<DD>Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR> -if necessary. -If <VAR>filename</VAR> is <CODE>NULL</CODE>, then write the history list to -<TT>`~/.history'</TT>. -Returns 0 on success, or <CODE>errno</CODE> on a read or write error. -</DL> -</P><P> - -<A NAME="IDX27"></A> -<DL> -<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, const char *filename)</I> -<DD>Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>. -If <VAR>filename</VAR> is <CODE>NULL</CODE>, then append to <TT>`~/.history'</TT>. -Returns 0 on success, or <CODE>errno</CODE> on a read or write error. -</DL> -</P><P> - -<A NAME="IDX28"></A> -<DL> -<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(const char *filename, int nlines)</I> -<DD>Truncate the history file <VAR>filename</VAR>, leaving only the last -<VAR>nlines</VAR> lines. -If <VAR>filename</VAR> is <CODE>NULL</CODE>, then <TT>`~/.history'</TT> is truncated. -Returns 0 on success, or <CODE>errno</CODE> on failure. -</DL> -</P><P> - -<A NAME="History Expansion"></A> -<HR SIZE="6"> -<A NAME="SEC16"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC15"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.3.7 History Expansion </H3> -<!--docid::SEC16::--> -<P> - -These functions implement history expansion. -</P><P> - -<A NAME="IDX29"></A> -<DL> -<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I> -<DD>Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer -to a string (see section <A HREF="history.html#SEC2">1.1 History Expansion</A>). Returns: -<DL COMPACT> -<DT><CODE>0</CODE> -<DD>If no expansions took place (or, if the only change in -the text was the removal of escape characters preceding the history expansion -character); -<DT><CODE>1</CODE> -<DD>if expansions did take place; -<DT><CODE>-1</CODE> -<DD>if there was an error in expansion; -<DT><CODE>2</CODE> -<DD>if the returned line should be displayed, but not executed, -as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">1.1.3 Modifiers</A>). -</DL> -<P> - -If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive -error message. -</DL> -</P><P> - -<A NAME="IDX30"></A> -<DL> -<DT><U>Function:</U> char * <B>get_history_event</B> <I>(const char *string, int *cindex, int qchar)</I> -<DD>Returns the text of the history event beginning at <VAR>string</VAR> + -<VAR>*cindex</VAR>. <VAR>*cindex</VAR> is modified to point to after the event -specifier. At function entry, <VAR>cindex</VAR> points to the index into -<VAR>string</VAR> where the history event specification begins. <VAR>qchar</VAR> -is a character that is allowed to end the event specification in addition -to the "normal" terminating characters. -</DL> -</P><P> - -<A NAME="IDX31"></A> -<DL> -<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(const char *string)</I> -<DD>Return an array of tokens parsed out of <VAR>string</VAR>, much as the -shell might. The tokens are split on the characters in the -<VAR>history_word_delimiters</VAR> variable, -and shell quoting conventions are obeyed. -</DL> -</P><P> - -<A NAME="IDX32"></A> -<DL> -<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, const char *string)</I> -<DD>Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR> -arguments present in <VAR>string</VAR>. Arguments are split using -<CODE>history_tokenize</CODE>. -</DL> -</P><P> - -<A NAME="History Variables"></A> -<HR SIZE="6"> -<A NAME="SEC17"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC16"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.4 History Variables </H2> -<!--docid::SEC17::--> -<P> - -This section describes the externally-visible variables exported by -the GNU History Library. -</P><P> - -<A NAME="IDX33"></A> -<DL> -<DT><U>Variable:</U> int <B>history_base</B> -<DD>The logical offset of the first entry in the history list. -</DL> -</P><P> - -<A NAME="IDX34"></A> -<DL> -<DT><U>Variable:</U> int <B>history_length</B> -<DD>The number of entries currently stored in the history list. -</DL> -</P><P> - -<A NAME="IDX35"></A> -<DL> -<DT><U>Variable:</U> int <B>history_max_entries</B> -<DD>The maximum number of history entries. This must be changed using -<CODE>stifle_history()</CODE>. -</DL> -</P><P> - -<A NAME="IDX36"></A> -<DL> -<DT><U>Variable:</U> char <B>history_expansion_char</B> -<DD>The character that introduces a history event. The default is <SAMP>`!'</SAMP>. -Setting this to 0 inhibits history expansion. -</DL> -</P><P> - -<A NAME="IDX37"></A> -<DL> -<DT><U>Variable:</U> char <B>history_subst_char</B> -<DD>The character that invokes word substitution if found at the start of -a line. The default is <SAMP>`^'</SAMP>. -</DL> -</P><P> - -<A NAME="IDX38"></A> -<DL> -<DT><U>Variable:</U> char <B>history_comment_char</B> -<DD>During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. -</DL> -</P><P> - -<A NAME="IDX39"></A> -<DL> -<DT><U>Variable:</U> char * <B>history_word_delimiters</B> -<DD>The characters that separate tokens for <CODE>history_tokenize()</CODE>. -The default value is <CODE>" \t\n()<>;&|"</CODE>. -</DL> -</P><P> - -<A NAME="IDX40"></A> -<DL> -<DT><U>Variable:</U> char * <B>history_no_expand_chars</B> -<DD>The list of characters which inhibit history expansion if found immediately -following <VAR>history_expansion_char</VAR>. The default is space, tab, newline, -carriage return, and <SAMP>`='</SAMP>. -</DL> -</P><P> - -<A NAME="IDX41"></A> -<DL> -<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B> -<DD>The list of additional characters which can delimit a history search -string, in addition to space, TAB, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of -a substring search. The default is empty. -</DL> -</P><P> - -<A NAME="IDX42"></A> -<DL> -<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B> -<DD>If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -</DL> -</P><P> - -<A NAME="IDX43"></A> -<DL> -<DT><U>Variable:</U> rl_linebuf_func_t * <B>history_inhibit_expansion_function</B> -<DD>This should be set to the address of a function that takes two arguments: -a <CODE>char *</CODE> (<VAR>string</VAR>) -and an <CODE>int</CODE> index into that string (<VAR>i</VAR>). -It should return a non-zero value if the history expansion starting at -<VAR>string[i]</VAR> 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 <CODE>NULL</CODE>. -</DL> -</P><P> - -<A NAME="History Programming Example"></A> -<HR SIZE="6"> -<A NAME="SEC18"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC17"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.5 History Programming Example </H2> -<!--docid::SEC18::--> -<P> - -The following program demonstrates simple use of the GNU History Library. -</P><P> - -<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>#include <stdio.h> -#include <readline/history.h> - -main (argc, argv) - int argc; - char **argv; -{ - 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"); - } - } - } -} -</FONT></pre></td></tr></table></P><P> - -<A NAME="Concept Index"></A> -<HR SIZE="6"> -<A NAME="SEC19"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC18"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC6"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC20"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> A. Concept Index </H1> -<!--docid::SEC19::--> -<table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A> - -</td></tr></table><br><P></P> -<TABLE border=0> -<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_A"></A>A</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX20">anchored search</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#SEC3">event designators</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_H"></A>H</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX1">history events</A></TD><TD valign=top><A HREF="history.html#SEC3">1.1.1 Event Designators</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#SEC2">history expansion</A></TD><TD valign=top><A HREF="history.html#SEC2">1.1 History Expansion</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#SEC14">History Searching</A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#cp_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="history.html#cp_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="history.html#cp_H" style="text-decoration:none"><b>H</b></A> - -</td></tr></table><br><P> - -<A NAME="Function and Variable Index"></A> -<HR SIZE="6"> -<A NAME="SEC20"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> B. Function and Variable Index </H1> -<!--docid::SEC20::--> -<table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A> - -<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A> - -<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A> - -<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A> - -<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A> - -<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A> - -</td></tr></table><br><P></P> -<TABLE border=0> -<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_A"></A>A</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX5"><CODE>add_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX27"><CODE>append_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_C"></A>C</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX8"><CODE>clear_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX14"><CODE>current_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_G"></A>G</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX30"><CODE>get_history_event</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_H"></A>H</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX32"><CODE>history_arg_extract</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX33"><CODE>history_base</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX38"><CODE>history_comment_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX29"><CODE>history_expand</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX36"><CODE>history_expansion_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX15"><CODE>history_get</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX3"><CODE>history_get_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX43"><CODE>history_inhibit_expansion_function</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX11"><CODE>history_is_stifled</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX34"><CODE>history_length</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX12"><CODE>history_list</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX35"><CODE>history_max_entries</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX40"><CODE>history_no_expand_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX42"><CODE>history_quotes_inhibit_expansion</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX21"><CODE>history_search</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX41"><CODE>history_search_delimiter_chars</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX23"><CODE>history_search_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX22"><CODE>history_search_prefix</CODE></A></TD><TD valign=top><A HREF="history.html#SEC14">2.3.5 Searching the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX4"><CODE>history_set_history_state</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX17"><CODE>history_set_pos</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX37"><CODE>history_subst_char</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX31"><CODE>history_tokenize</CODE></A></TD><TD valign=top><A HREF="history.html#SEC16">2.3.7 History Expansion</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX16"><CODE>history_total_bytes</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX28"><CODE>history_truncate_file</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX39"><CODE>history_word_delimiters</CODE></A></TD><TD valign=top><A HREF="history.html#SEC17">2.4 History Variables</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_N"></A>N</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX19"><CODE>next_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_P"></A>P</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX18"><CODE>previous_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC13">2.3.4 Moving Around the History List</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_R"></A>R</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX24"><CODE>read_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX25"><CODE>read_history_range</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX6"><CODE>remove_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX7"><CODE>replace_history_entry</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_S"></A>S</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX9"><CODE>stifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_U"></A>U</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX10"><CODE>unstifle_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC11">2.3.2 History List Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX2"><CODE>using_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="vr_W"></A>W</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX13"><CODE>where_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC12">2.3.3 Information About the History List</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="history.html#IDX26"><CODE>write_history</CODE></A></TD><TD valign=top><A HREF="history.html#SEC15">2.3.6 Managing the History File</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="history.html#vr_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="history.html#vr_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="history.html#vr_G" style="text-decoration:none"><b>G</b></A> - -<A HREF="history.html#vr_H" style="text-decoration:none"><b>H</b></A> - -<A HREF="history.html#vr_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="history.html#vr_P" style="text-decoration:none"><b>P</b></A> - -<A HREF="history.html#vr_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="history.html#vr_S" style="text-decoration:none"><b>S</b></A> - -<A HREF="history.html#vr_U" style="text-decoration:none"><b>U</b></A> - -<A HREF="history.html#vr_W" style="text-decoration:none"><b>W</b></A> - -</td></tr></table><br><P> - -<HR SIZE="6"> -<A NAME="SEC_Contents"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Table of Contents</H1> -<UL> -<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A> -<BR> -<UL> -<A NAME="TOC2" HREF="history.html#SEC2">1.1 History Expansion</A> -<BR> -<UL> -<A NAME="TOC3" HREF="history.html#SEC3">1.1.1 Event Designators</A> -<BR> -<A NAME="TOC4" HREF="history.html#SEC4">1.1.2 Word Designators</A> -<BR> -<A NAME="TOC5" HREF="history.html#SEC5">1.1.3 Modifiers</A> -<BR> -</UL> -</UL> -<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A> -<BR> -<UL> -<A NAME="TOC7" HREF="history.html#SEC7">2.1 Introduction to History</A> -<BR> -<A NAME="TOC8" HREF="history.html#SEC8">2.2 History Storage</A> -<BR> -<A NAME="TOC9" HREF="history.html#SEC9">2.3 History Functions</A> -<BR> -<UL> -<A NAME="TOC10" HREF="history.html#SEC10">2.3.1 Initializing History and State Management</A> -<BR> -<A NAME="TOC11" HREF="history.html#SEC11">2.3.2 History List Management</A> -<BR> -<A NAME="TOC12" HREF="history.html#SEC12">2.3.3 Information About the History List</A> -<BR> -<A NAME="TOC13" HREF="history.html#SEC13">2.3.4 Moving Around the History List</A> -<BR> -<A NAME="TOC14" HREF="history.html#SEC14">2.3.5 Searching the History List</A> -<BR> -<A NAME="TOC15" HREF="history.html#SEC15">2.3.6 Managing the History File</A> -<BR> -<A NAME="TOC16" HREF="history.html#SEC16">2.3.7 History Expansion</A> -<BR> -</UL> -<A NAME="TOC17" HREF="history.html#SEC17">2.4 History Variables</A> -<BR> -<A NAME="TOC18" HREF="history.html#SEC18">2.5 History Programming Example</A> -<BR> -</UL> -<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A> -<BR> -<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A> -<BR> -</UL> -<HR SIZE=1> -<A NAME="SEC_OVERVIEW"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Short Table of Contents</H1> -<BLOCKQUOTE> -<A NAME="TOC1" HREF="history.html#SEC1">1. Using History Interactively</A> -<BR> -<A NAME="TOC6" HREF="history.html#SEC6">2. Programming with GNU History</A> -<BR> -<A NAME="TOC19" HREF="history.html#SEC19">A. Concept Index</A> -<BR> -<A NAME="TOC20" HREF="history.html#SEC20">B. Function and Variable Index</A> -<BR> - -</BLOCKQUOTE> -<HR SIZE=1> -<A NAME="SEC_About"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC19">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> -<P></P> -The buttons in the navigation panels have the following meaning: -<P></P> -<table border = "1"> -<TR> -<TH> Button </TH> -<TH> Name </TH> -<TH> Go to </TH> -<TH> From 1.2.3 go to</TH> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ < ] </TD> -<TD ALIGN="CENTER"> -Back -</TD> -<TD> -previous section in reading order -</TD> -<TD> -1.2.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ > ] </TD> -<TD ALIGN="CENTER"> -Forward -</TD> -<TD> -next section in reading order -</TD> -<TD> -1.2.4 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ << ] </TD> -<TD ALIGN="CENTER"> -FastBack -</TD> -<TD> -previous or up-and-previous section -</TD> -<TD> -1.1 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ Up ] </TD> -<TD ALIGN="CENTER"> -Up -</TD> -<TD> -up section -</TD> -<TD> -1.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ >> ] </TD> -<TD ALIGN="CENTER"> -FastForward -</TD> -<TD> -next or up-and-next section -</TD> -<TD> -1.3 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Top] </TD> -<TD ALIGN="CENTER"> -Top -</TD> -<TD> -cover (top) of document -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Contents] </TD> -<TD ALIGN="CENTER"> -Contents -</TD> -<TD> -table of contents -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Index] </TD> -<TD ALIGN="CENTER"> -Index -</TD> -<TD> -concept index -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ ? ] </TD> -<TD ALIGN="CENTER"> -About -</TD> -<TD> -this page -</TD> -<TD> - -</TD> -</TR> -</TABLE> -<P></P> -where the <STRONG> Example </STRONG> assumes that the current position -is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of -the following structure: -<UL> -<LI> 1. Section One </LI> -<UL> -<LI>1.1 Subsection One-One</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.2 Subsection One-Two</LI> -<UL> -<LI>1.2.1 Subsubsection One-Two-One -</LI><LI>1.2.2 Subsubsection One-Two-Two -</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> -<== Current Position </STRONG> -</LI><LI>1.2.4 Subsubsection One-Two-Four -</LI></UL> -<LI>1.3 Subsection One-Three</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.4 Subsection One-Four</LI> -</UL> -</UL> - -<HR SIZE=1> -<BR> -<FONT SIZE="-1"> -This document was generated -by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> - -</BODY> -</HTML> diff --git a/readline-4.3.orig/doc/history.info b/readline-4.3.orig/doc/history.info deleted file mode 100644 index 98c0002..0000000 --- a/readline-4.3.orig/doc/history.info +++ /dev/null @@ -1,840 +0,0 @@ -This is history.info, produced by makeinfo version 4.1 from -/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-2002 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/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. - - -File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History - -History Storage -=============== - - The history list is an array of history entries. A history entry is -declared as follows: - - typedef void *histdata_t; - - typedef struct _hist_entry { - char *line; - histdata_t data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - HIST_ENTRY **the_history_list; - - The state of the History library is encapsulated into a single -structure: - - /* - * A structure used to pass around the current state of the history. - */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes `HS_STIFLED', the history has been -stifled. - - -File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History - -History Functions -================= - - This section describes the calling sequence for the various functions -exported by the GNU History library. - -* Menu: - -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. - - -File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions - -Initializing History and State Management ------------------------------------------ - - This section describes functions used to initialize and manage the -state of the History library when you want to use the history functions -in your program. - - - Function: void using_history (void) - Begin a session in which the history functions might be used. This - initializes the interactive variables. - - - Function: HISTORY_STATE * history_get_history_state (void) - Return a structure describing the current state of the input - history. - - - Function: void history_set_history_state (HISTORY_STATE *state) - Set the state of the history list according to STATE. - - -File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions - -History List Management ------------------------ - - These functions manage individual entries on the history list, or set -parameters managing the list itself. - - - Function: void add_history (const char *string) - Place STRING at the end of the history list. The associated data - field (if any) is set to `NULL'. - - - Function: HIST_ENTRY * remove_history (int which) - Remove history entry at offset WHICH from the history. The - removed element is returned so you can free the line, data, and - containing structure. - - - Function: HIST_ENTRY * replace_history_entry (int which, const char - *line, histdata_t data) - Make the history entry at offset WHICH have LINE and DATA. This - returns the old entry so you can dispose of the data. In the case - of an invalid WHICH, a `NULL' pointer is returned. - - - Function: void clear_history (void) - Clear the history list by deleting all the entries. - - - Function: void stifle_history (int max) - Stifle the history list, remembering only the last MAX entries. - - - Function: int unstifle_history (void) - Stop stifling the history. This returns the previously-set - maximum number of history entries (as set by `stifle_history()'). - The value is positive if the history was stifled, negative if it - wasn't. - - - Function: int history_is_stifled (void) - Returns non-zero if the history is stifled, zero if it is not. - - -File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions - -Information About the History List ----------------------------------- - - These functions return information about the entire history list or -individual list entries. - - - Function: HIST_ENTRY ** history_list (void) - Return a `NULL' terminated array of `HIST_ENTRY *' which is the - current input history. Element 0 of this list is the beginning of - time. If there is no history, return `NULL'. - - - Function: int where_history (void) - Returns the offset of the current history element. - - - Function: HIST_ENTRY * current_history (void) - Return the history entry at the current position, as determined by - `where_history()'. If there is no entry there, return a `NULL' - pointer. - - - Function: HIST_ENTRY * history_get (int offset) - Return the history entry at position OFFSET, starting from - `history_base' (*note History Variables::). If there is no entry - there, or if OFFSET is greater than the history length, return a - `NULL' pointer. - - - Function: int history_total_bytes (void) - Return the number of bytes that the primary history entries are - using. This function returns the sum of the lengths of all the - lines in the history. - - -File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions - -Moving Around the History List ------------------------------- - - These functions allow the current index into the history list to be -set or changed. - - - Function: int history_set_pos (int pos) - Set the current history offset to POS, an absolute index into the - list. Returns 1 on success, 0 if POS is less than zero or greater - than the number of history entries. - - - Function: HIST_ENTRY * previous_history (void) - Back up the current history offset to the previous history entry, - and return a pointer to that entry. If there is no previous - entry, return a `NULL' pointer. - - - Function: HIST_ENTRY * next_history (void) - Move the current history offset forward to the next history entry, - and return the a pointer to that entry. If there is no next - entry, return a `NULL' pointer. - - -File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions - -Searching the History List --------------------------- - - These functions allow searching of the history list for entries -containing a specific string. Searching may be performed both forward -and backward from the current history position. The search may be -"anchored", meaning that the string must match at the beginning of the -history entry. - - - Function: int history_search (const char *string, int direction) - Search the history for STRING, starting at the current history - offset. If DIRECTION is less than 0, then the search is through - previous entries, otherwise through subsequent entries. If STRING - is found, then the current history index is set to that history - entry, and the value returned is the offset in the line of the - entry where STRING was found. Otherwise, nothing is changed, and - a -1 is returned. - - - Function: int history_search_prefix (const char *string, int - direction) - Search the history for STRING, starting at the current history - offset. The search is anchored: matching lines must begin with - STRING. If DIRECTION is less than 0, then the search is through - previous entries, otherwise through subsequent entries. If STRING - is found, then the current history index is set to that entry, and - the return value is 0. Otherwise, nothing is changed, and a -1 is - returned. - - - Function: int history_search_pos (const char *string, int direction, - int pos) - Search for STRING in the history list, starting at POS, an - absolute index into the list. If DIRECTION is negative, the search - proceeds backward from POS, otherwise forward. Returns the - absolute index of the history element where STRING was found, or - -1 otherwise. - - -File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions - -Managing the History File -------------------------- - - The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - - - Function: int read_history (const char *filename) - Add the contents of FILENAME to the history list, a line at a time. - If FILENAME is `NULL', then read from `~/.history'. Returns 0 if - successful, or `errno' if not. - - - Function: int read_history_range (const char *filename, int from, - int to) - Read a range of lines from FILENAME, adding them to the history - list. Start reading at line FROM and end at TO. If FROM is zero, - start at the beginning. If TO is less than FROM, then read until - the end of the file. If FILENAME is `NULL', then read from - `~/.history'. Returns 0 if successful, or `errno' if not. - - - Function: int write_history (const char *filename) - Write the current history to FILENAME, overwriting FILENAME if - necessary. If FILENAME is `NULL', then write the history list to - `~/.history'. Returns 0 on success, or `errno' on a read or write - error. - - - Function: int append_history (int nelements, const char *filename) - Append the last NELEMENTS of the history list to FILENAME. If - FILENAME is `NULL', then append to `~/.history'. Returns 0 on - success, or `errno' on a read or write error. - - - Function: int history_truncate_file (const char *filename, int - nlines) - Truncate the history file FILENAME, leaving only the last NLINES - lines. If FILENAME is `NULL', then `~/.history' is truncated. - Returns 0 on success, or `errno' on failure. - - -File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions - -History Expansion ------------------ - - These functions implement history expansion. - - - Function: int history_expand (char *string, char **output) - Expand STRING, placing the result into OUTPUT, a pointer to a - string (*note History Interaction::). Returns: - `0' - If no expansions took place (or, if the only change in the - text was the removal of escape characters preceding the - history expansion character); - - `1' - if expansions did take place; - - `-1' - if there was an error in expansion; - - `2' - if the returned line should be displayed, but not executed, - as with the `:p' modifier (*note Modifiers::). - - If an error ocurred in expansion, then OUTPUT contains a - descriptive error message. - - - Function: char * get_history_event (const char *string, int *cindex, - int qchar) - Returns the text of the history event beginning at STRING + - *CINDEX. *CINDEX is modified to point to after the event - specifier. At function entry, CINDEX points to the index into - STRING where the history event specification begins. QCHAR is a - character that is allowed to end the event specification in - addition to the "normal" terminating characters. - - - Function: char ** history_tokenize (const char *string) - Return an array of tokens parsed out of STRING, much as the shell - might. The tokens are split on the characters in the - HISTORY_WORD_DELIMITERS variable, and shell quoting conventions - are obeyed. - - - Function: char * history_arg_extract (int first, int last, const - char *string) - Extract a string segment consisting of the FIRST through LAST - arguments present in STRING. Arguments are split using - `history_tokenize'. - - -File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History - -History Variables -================= - - This section describes the externally-visible variables exported by -the GNU History Library. - - - Variable: int history_base - The logical offset of the first entry in the history list. - - - Variable: int history_length - The number of entries currently stored in the history list. - - - Variable: int history_max_entries - The maximum number of history entries. This must be changed using - `stifle_history()'. - - - Variable: char history_expansion_char - The character that introduces a history event. The default is `!'. - Setting this to 0 inhibits history expansion. - - - Variable: char history_subst_char - The character that invokes word substitution if found at the start - of a line. The default is `^'. - - - Variable: char history_comment_char - During tokenization, if this character is seen as the first - character of a word, then it and all subsequent characters up to a - newline are ignored, suppressing history expansion for the - remainder of the line. This is disabled by default. - - - Variable: char * history_word_delimiters - The characters that separate tokens for `history_tokenize()'. The - default value is `" \t\n()<>;&|"'. - - - Variable: char * history_no_expand_chars - The list of characters which inhibit history expansion if found - immediately following HISTORY_EXPANSION_CHAR. The default is - space, tab, newline, carriage return, and `='. - - - Variable: char * history_search_delimiter_chars - The list of additional characters which can delimit a history - search string, in addition to space, TAB, `:' and `?' in the case - of a substring search. The default is empty. - - - Variable: int history_quotes_inhibit_expansion - If non-zero, single-quoted words are not scanned for the history - expansion character. The default value is 0. - - - Variable: rl_linebuf_func_t * history_inhibit_expansion_function - This should be set to the address of a function that takes two - arguments: a `char *' (STRING) and an `int' index into that string - (I). It should return a non-zero value if the history expansion - starting at STRING[I] should not be performed; zero if the - expansion should be done. It is intended for use by applications - like Bash that use the history expansion character for additional - purposes. By default, this variable is set to `NULL'. - - -File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History - -History Programming Example -=========================== - - The following program demonstrates simple use of the GNU History -Library. - - #include <stdio.h> - #include <readline/history.h> - - main (argc, argv) - int argc; - char **argv; - { - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } - } - - -File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top - -Concept Index -************* - -* Menu: - -* anchored search: Searching the History List. -* event designators: Event Designators. -* history events: Event Designators. -* history expansion: History Interaction. -* History Searching: Searching the History List. - - -File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* add_history: History List Management. -* append_history: Managing the History File. -* clear_history: History List Management. -* current_history: Information About the History List. -* get_history_event: History Expansion. -* history_arg_extract: History Expansion. -* history_base: History Variables. -* history_comment_char: History Variables. -* history_expand: History Expansion. -* history_expansion_char: History Variables. -* history_get: Information About the History List. -* history_get_history_state: Initializing History and State Management. -* history_inhibit_expansion_function: History Variables. -* history_is_stifled: History List Management. -* history_length: History Variables. -* history_list: Information About the History List. -* history_max_entries: History Variables. -* history_no_expand_chars: History Variables. -* history_quotes_inhibit_expansion: History Variables. -* history_search: Searching the History List. -* history_search_delimiter_chars: History Variables. -* history_search_pos: Searching the History List. -* history_search_prefix: Searching the History List. -* history_set_history_state: Initializing History and State Management. -* history_set_pos: Moving Around the History List. -* history_subst_char: History Variables. -* history_tokenize: History Expansion. -* history_total_bytes: Information About the History List. -* history_truncate_file: Managing the History File. -* history_word_delimiters: History Variables. -* next_history: Moving Around the History List. -* previous_history: Moving Around the History List. -* read_history: Managing the History File. -* read_history_range: Managing the History File. -* remove_history: History List Management. -* replace_history_entry: History List Management. -* stifle_history: History List Management. -* unstifle_history: History List Management. -* using_history: Initializing History and State Management. -* where_history: Information About the History List. -* write_history: Managing the History File. - - - -Tag Table: -Node: Top1136 -Node: Using History Interactively1716 -Node: History Interaction2223 -Node: Event Designators3642 -Node: Word Designators4569 -Node: Modifiers6198 -Node: Programming with GNU History7336 -Node: Introduction to History8061 -Node: History Storage9746 -Node: History Functions10857 -Node: Initializing History and State Management11841 -Node: History List Management12641 -Node: Information About the History List14235 -Node: Moving Around the History List15591 -Node: Searching the History List16580 -Node: Managing the History File18498 -Node: History Expansion20304 -Node: History Variables22199 -Node: History Programming Example24766 -Node: Concept Index27488 -Node: Function and Variable Index27974 - -End Tag Table diff --git a/readline-4.3.orig/doc/history.ps b/readline-4.3.orig/doc/history.ps deleted file mode 100644 index a35bcf4..0000000 --- a/readline-4.3.orig/doc/history.ps +++ /dev/null @@ -1,1658 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: history.dvi -%%Pages: 20 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o history.ps history.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2002.06.27:1354 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (history.dvi) -@start -%DVIPSBitmapFont: Fa cmti10 10.95 1 -/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbxti10 14.4 1 -/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmtt9 9 26 -/Fc 26 123 df<EAFFFEA30F037E7E14>95 D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA -07FC121FEA3C1C127012E0A3EA707C383FFF80EA0F8F11107E8F14>97 -D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0E -EA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804EA7000126012E0A4126012 -70EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130EA5EA07CEEA0FFEEA1C3EEA -301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF12177F9614>I<EA07E0EA0FF0 -EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA380EEA1C1EEA0FFCEA03F0 -0F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F17 -7F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA3018EA3838EA3FF0EA37C000 -70C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C1EEA1FFCEA07F011197F8F -14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206 -120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I<12FCA2121CA5EBFF80A2EB -1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF1F80A21117809614>107 -D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF383CF380A2EA38E3AA38FE -FBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA38FF8FE0A21310808F14> -I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA3C78EA1FF0EA07C00F107E -8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1D -FCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA1C1FEA300F1270487EA6EA -700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F14>I<EAFE1FEB7F80EA0E -E3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8EA3FF8EA603812C0A2EA -F000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFFF8EACFE00F107E8F14> -I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F00F157F9414>I<EAFC3F -A2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A2383C1E00EA1C1CA36C5A -A3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA -1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA0E78EA07705B12036C -5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38FE3F80A2381C0E005B -A2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7FC127E123C11187F8F -14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA0700120EEA1C07123812 -70B5FCA210107F8F14>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmti9 9 1 -/Fd 1 47 df<1230127812F0126005047C830C>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr9 9 24 -/Fe 24 122 df<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA6006A2EA70 -0EEA300CEA381CEA1C38EA07E010187F9713>48 D<12035AB4FC1207B3A2EA7FF80D187D -9713>I<EA01F8EA0704EA0C06EA180E123013001270126012E0EAE3E0EAE418EAE80CEA -F00EEAE0061307A31260A2EA7006EA300EEA180CEA0C38EA07E010187F9713>54 -D<1240EA7FFF13FEA2EA4004EA80081310A2EA00201340A21380120113005AA25A1206A2 -120EA5120410197E9813>I<EA07E0EA1818EA300CEA20061260A21270EA780CEA3E18EA -1F30EA07C0EA03E0EA0CF8EA307CEA601E130FEAC0071303A3EA6002EA2004EA1818EA07 -E010187F9713>I<EA07E0EA1C30EA3018EA700CEA600EEAE006A21307A31260EA700FEA -3017EA1827EA07C7EA00071306130E130C12701318EA6030EA3060EA0F8010187F9713> -I<39FFE1FFC0390E001C00AB380FFFFC380E001CAC39FFE1FFC01A1A7F991D>72 -D<EA0FC2EA1836EA200EEA600612C01302A3EAE0001270127EEA3FE0EA1FF8EA03FCEA00 -7E130E130713031280A3EAC0021306EAE004EAD818EA87E0101A7E9915>83 -D<EA1FC0EA38707FEA101C1200A2EA03FCEA1E1C1238127012E01480A2133CEA705F381F -8F0011107F8F13>97 D<EA07F8EA1C1C1238EA700813005AA612701304EA3808EA1C18EA -07E00E107F8F11>99 D<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C -5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA600C12E0EAFFFCEAE0 -00A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA0FCF3818718038303000EA70 -38A4EA30306C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA6006EA38 -1CEA07E011187F8F13>103 D<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF014 -1A809915>I<1218123CA212181200A612FC121CAE12FF081A80990A>I<EAFC7CEA1D8738 -1E0380A2121CAB38FF9FF01410808F15>110 D<EA07E0EA1C38EA300CEA700EEA6006EA -E007A6EA6006EA700EEA381CEA1C38EA07E010107F8F13>I<EAFCFCEA1D07381E038038 -1C01C0A2EB00E0A6EB01C01480381E0300EA1D06EA1CF890C7FCA6B47E1317808F15>I< -EAFC78EA1D9CEA1E1C1308EA1C00ABEAFF800E10808F0F>114 D<EA1F20EA60E0EA4020 -12C0A2EAF000127FEA3FC0EA1FE0EA00F0EA8070133012C01320EAF040EA8F800C107F8F -0F>I<1208A41218A21238EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38 -FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14> -118 D<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA -181CEA381E38FC3FC012107F8F14>120 D<38FF0F80383C0700EA1C061304A26C5AA26C -5AA3EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmss10 10.95 2 -/Ff 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmbx10 12 27 -/Fg 27 123 df<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2 -ECFF80B6FCA2380FC01FB2397FF8FFF0A21C237FA220>12 D<90380FFF80137F3801FC1F -3803F03FEA07E0EA0FC0141FA7B6FCA2380FC01FB2397FF8FFF0A21C237FA220>I<EA07 -FE381FFF80383F07E06D7E130180121E1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA -7C02EA7E0C391FF87F803807E03F19167E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF0 -3EEBC01F9038800F8015C0140715E0A715C0A2140F15809038C01F00381E707E381C3FFC -38180FE01B237EA220>I<EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC -12FCA6127C127EA2003E13186C1330380FC0603807FFC0C6130015167E9519>I<49B4FC -A2EB003FAB13FE3807FFBF380FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C -5B380F81FF3907FF3FE0EA01FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E -00F0127E007C13F8147812FCB512F8A200FCC7FCA3127CA26C1318A26C1330380F80E038 -03FFC0C6130015167E951A>I<EB1F80EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC0 -00A6EAFFFEA2EA0FC0B2EA7FFCA214237EA212>I<9038FE0F803903FF9FC0380F83E338 -1F01F3391E00F000003E7FA5001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2 -121C381FFFE014FC6C13FF7E001F1480397C001FC00078130F00F81307A3007CEB0F806C -EB1F00381F807E6CB45A000113E01A217F951D>I<B47EA2121FABEB83F0EB8FFCEB987E -EBA03EEBC03FA21380AE39FFF1FFE0A21B237DA220>I<121E123FEA7F80A4EA3F00121E -C7FCA6EAFF80A2121FB2EAFFF0A20C247EA30F>I<B47EA2121FABECFF80A2EC3C001430 -14E0EB81C00183C7FC1386139E13BE13FFEBDF80EB8FC01307806D7E6D7E130080147E39 -FFE1FFC0A21A237EA21E>107 D<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F8 -03F890390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FF -F0FFF0A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FF -E0A21B167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7 -007C133E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87 -F0EBBFFC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EB -F07EEBBFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>I<EBFE033807FF07380FC1CF38 -1F00DF48137F007E7FA2127C12FCA7127EA2003E5B6C5BEA0FC13807FF3FEA00FC1300A8 -903801FFE0A21B207E951E>I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000AD -EAFFF8A214167E9518>I<3807F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA -7FFE6C7E6C1380120738003FC0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812 -167E9517>I<487EA41203A21207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3 -EA07FEEA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01 -FC1B167D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA2 -6C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3 -FF83FCA23A1F807C00E0D80FC014C08001E013010007017F1380A2D803F0EB0300ECCF83 -01F81387D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118 -136026167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD8013 -7F91C7FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48487E000E137F39FF81FF -E0A21B167F951E>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035B -A26C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC38 -13305BEA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F -00E0138038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB -00E0EA7E03B5FCA214167E9519>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmtt10 12 27 -/Fh 27 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<1338137CA2136C13EEA313 -C6A2EA01C7A438038380A4380701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83 -FE387F01FC171E7F9D1A>65 D<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0EA3 -90C7FCA3141CA5B512FCA3161E7E9D1A>69 D<38FF83FEA3381C0070AA381FFFF0A3381C -0070AB38FF83FEA3171E7F9D1A>72 D<B51280A33801C000B3A6B51280A3111E7C9D1A> -I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213301338A21318131CA2 -130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>78 -D<EA0FFE383FFF804813C0EA7C07EA700100F013E0EAE000B1EAF001A2007013C0EA7C07 -EA7FFF6C1380380FFE00131E7D9D1A>I<EAFFFC13FF1480381C07C0EB01E0EB00F01470 -A414F0EB01E0EB07C0381FFF8014001480381C07C01301EB00E0A514E214E7A338FF807E -A21438181E7F9D1A>82 D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12 -701278123FEA1FF0EA07FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF001 -38FC03C0B5128000EF1300EAE3FC141E7D9D1A>I<387FFFFEB5FCA238E0380EA5000013 -00B33803FF80A3171E7F9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003 -138013C700011300A2EA00EEA2137CA21338AA48B4FCA3171E7F9D1A>89 -D<387FFFC0B512E0A26C13C013047D7E1A>95 D<EA1FF0EA3FFC487EEA780FEA30073800 -0380A2137FEA07FF121FEA3F83EA7803127012E0A3EA7007EA780F383FFFFCEA1FFDEA07 -F016157D941A>97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB0038120E14 -1CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>I<EBFF8000 -0313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E381F01F0380F -FFE0000313C03800FE0014157D941A>I<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0F -EA3C07EA7803EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D -1A>I<EA01F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0A300E0C7 -FC1270A2007813707E381F01F0380FFFE0000313803800FE0014157D941A>I<EB07E0EB -1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF804813C06C13 -80151E7F9D1A>I<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3 -FE13E713E3171E7F9D1A>104 D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80 -B512C06C1380121F7C9E1A>I<EAFFE0A31200B3A6B512E0A3131E7D9D1A>108 -D<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A> -110 D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF0010070 -13C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F81F838FF8F -FC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114 -D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F -9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C -A2133817157F941A>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 13.14 41 -/Fi 41 123 df<EB07FCEB3FFF9038FE0780D803F013C03807E00FA2EA0FC0A3EC030091 -C7FCA3EC7FE0B6FCA2380FC007B3A239FFFC7FFEA21F267FA522>12 -D<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA21200B3AA387FFF -FCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC387C00FE12FE14 -FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B1370 -EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F>I<48 -B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB03F8 -EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FEA214 -FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A214F8 -1301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A12185A12 -705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEBFFF8 -14F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FCC712 -7EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE0018 -237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F005AA2007E13 -3C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4003E137E123F -6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C003FB512C0A2 -15804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133CA25B -A213F8A41201A66C5A13601A257DA41F>I<141CA2143EA3147FA24A7EA39038019FC0A2 -9038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FCA290 -39E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229257E -A42E>65 D<B612E015FC3903F800FFED1FC0ED07E06F7E6F7E82150082A2167FA31780AA -1700A316FEA24B5A5E4B5A4B5AED1FC0EDFF80B648C7FC15E029257EA42F>68 -D<B7FCA23903F8007FED0F8015071503A21501A3ED00C01406A21600A2140E141EEBFFFE -A2EBF81E140E1406A21660A291C7FC16C0A415011503A2ED0F80153FB7FCA223257EA428 ->I<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C5C90B5FCA2EBF80F -8080A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F80003F800AF90B6FC -A29038F80003B0B500E0B512E0A22B257EA430>72 D<B512E0A23803F800B3AFB512E0A2 -13257EA417>I<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E157CEC03FC -B6FCA220257EA425>76 D<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D1406A26D6C -130CA26D6C1318A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A291387E0300A3 -EC3F06A2EC1F8CA2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A235257EA43A> -I<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>83 -D<B53B81FFFE01FFF0A23D07F0001FC0000F007013066C6C010F5CA26F7E6C6C5EA26D49 -6C1338000017304B7E017F01195CA291388030FE013F5E829139C0607F01011F5E03E013 -8190280FE0C03F83C7FCA29139F1801FC3010715C617E69139FB000FEE010315EC02FF14 -FC6D486D5AA24A130301005DA24A130102785CA202306D5A3C257FA43F>87 -D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1FFE3803FE7EEA0FC0EA1F -00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B187E971E>97 -D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2EC01F8A215FC -A815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E267FA522>I<EB -7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F6C130CEA1F80 -EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC137F3803FFCF38 -0FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380FC0EF3903FFCF -FC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400A7B5FCA2EA0F -C0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0FC013D89038D0 -07E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FB3B0EAFFFCA20E26 -7EA511>108 D<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E8 -03F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80 -390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F803803 -FFF03807C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F00A238 -1F807E6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC09038F0 -07E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038 -CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC -13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA70 -01EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212 -E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F -121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39 -FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I< -39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC0000 -5B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A239 -0FC00F003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F8 -1361EBE0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I<387FFFF8A2387C03F0EA700738600FE000 -E013C0EB1F80EAC03F1400137EEA00FE5B485A0003130C13F0EA07E0120FEBC01C381F80 -18003F1338387F0078387E01F8B5FCA216187E971B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsl10 10.95 30 -/Fj 30 122 df<903803F07C90381E0DC69038380F0FEB701E01E0130EEC0C003801C01C -A548485A007FB512C03903803800A448485AA6000E5BA648485A001E7F38FF8FFC20207E -9F1B>11 D<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF038038070A4 -380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>I<903803F03F9039 -1E09E0809039380F80C09039701F01E0EBE03E021E13C02601C01CC7FCA548485A007FB6 -12803903803803A43A0700700700A6000EEBE00EA64848485A001EEBE01E3AFF8FF8FFC0 -23207E9F26>14 D<13201360A4383061C0383C4380380E4E00EA0778EA01E0A2EA07B8EA -1C9CEA708FEAE083EA0180A490C7FC12147AA117>42 D<13181338EA01F8EA0E701200A5 -13E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B9D17>49 D<EB3F80EBC1E0380100 -70000213785AA2000F137C1380A2EB00781206C712F814F0EB01E014C0EB0380EB070013 -0E5B5B13605B485A380300201206000813405A383FFFC0481380B5FC161E7E9D17>I<13 -FFEA01FE1380A5EA0300A61206A65AA65AA65AA65AA6B4FCA2102D7EA10D>91 -D<13FFEA01FEEA0006A5130CA61318A61330A61360A613C0A6EA0180A6EAFF00A2102D82 -A10D>93 D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F0 -1310A3131EEB2E2038784F40381F878014147D9317>97 D<13FEEA0383380E0780121C00 -38130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99 -D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA -0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FCA6EA03 -80121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712011200 -A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>108 -D<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5000EEB -E00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A0 -3803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319> -I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0130300F013 -8038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C6C487E140F -48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120E -A4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C003813C0127812 -F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0 -131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120EA65A121EEA -FFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA -01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<1380EA0100 -A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<38 -1C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011147B -9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA0390 -13A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C030060148015 -401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C48 -5A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0C0EBE180EB -73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07FC -18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B143014205C13705CA2 -0171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278 -191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmcsc10 10.95 3 -/Fk 3 118 df<EB7E083803819838070078000C1338001C13185A00781308127000F013 -00A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E961D>103 -D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C130E1307A2 -EB03A0EB01E0A213001460123800FE132016177E961C>110 D<38FF81FC381C00701420 -B0000C1340120E6C138038018300EA007C16177E961C>117 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 17.28 36 -/Fl 36 122 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF000 -7CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215 -F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49 -131C485A48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28>I<1578A215FCA34A7E -A24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F02787FEC700FA202E07F1507 -010180ECC003A249486C7EA201078191C7FC498191B6FCA24981011CC7123F013C810138 -141FA24981160F01F081491407A2484881486C1403B549B512FCA336317DB03D>65 -D<B712C016FC16FFD801FEC77FEE7FE0707E161F707EA2831607A4160FA25FA24C5A4C5A -4C5A4B485ADB1FFEC7FC90B65AEEFF8049C7EA3FE0EE0FF0EE07FCA2707E83821880A718 -005E5F16074C5A4C5AEEFFF0B812C094C7FC16F831317DB039>I<913A03FF800180023F -EBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C8127F -4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127FA2 -7FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93FC0 -5CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A>I< -B812E0A3C6903880007FEE0FF016031601A21600A21770A31738A21507A21700A35D5D5D -91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>70 D<DA03FF1303027FEBF0 -0749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03FF49487F4848C87E485A0007 -824848815B001F82A2484881A2127FA24992C7FC12FFAA0307B512F8127F7FDB00011300 -123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8497ED907FFEB3E3F01019038 -FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B6D8807FB512C0A3C60180C7387FC000 -B391B7FCA30280C7127FB3A3B6D8807FB512C0A33A317EB03F>I<B61280A3C6EB8000B3 -B3A7B61280A319317EB01E>I<B56C49B512C08080C66D90390003E0006E6E5AEBEFFC13 -E780EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E16806E13C0ED7FE0ED3F -F0151F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1EE1FF9EE0FFD160717FF -828282177F173FA2171F170F486C1507B500E014031701A23A317EB03F>78 -D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FFA717FEA2EE -07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB037>80 -D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3481603 -A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<B6D88003B51280A3C60180C73807C000 -715AB3AE137F4DC7FC80013F150EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF801FC002 -3FB55A020F49C8FC020013E039317EB03E>I<B500FC91B5FCA3000390C8EA03C06C1780 -6E14076C170080017F150EA26E141E013F151C6E143C011F153880010F5D8001075DA26E -130101035D6E13036D5D15806D4AC7FCA26F5A027F130EEDE01E023F131CEDF03C021F13 -3815F8020F5BA2EDFCF002075B15FF6E5BA26E5BA26E90C8FCA3157EA2153CA238317EB0 -3D>I<EBFFF0000313FF390F803F809038C00FE0486C6C7EA26E7ED80FC07FEA0780C7FC -A414FF131FEBFFE33803FC03EA0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F800D39 -3FC01DFE3A1FE078FFF03907FFE07FC6EB803F24207E9F27>97 D<EA01F812FFA3120F12 -07ADEC3FE0ECFFFC9038FBE07F9039FF001F8049EB0FC04914E049EB07F016F8A2ED03FC -A316FEA816FCA3ED07F8A216F06DEB0FE06D14C001E7EB3F809039C3C0FE00903880FFF8 -9038003FC027327EB12D>I<EB0FFF017F13C03901FC01F03803F0033907E007F8120FEA -1FC0003FEB03F0EC01E04848C7FCA312FFA8127FA36C6C131CA2001F14386C7E00071470 -3903F001E03901FC07C039007FFF00EB0FF81E207D9F24>I<ED0FC0EC07FFA3EC007F15 -3FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F4848133F123FA2485AA312 -FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01FC0F3FFE38007FFEEB0F -F027327DB12D>I<EB0FFC90387FFF803901FC0FC03903F003E03907E001F0000F14F839 -1FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7FCA4127FA36C6C130712 -1F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807FE0020207E9F25>I<EB -01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC1203EC07E0EC018091C7 -FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90391FF007C09039FFFE3F -E03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF000A2003F80A5001F5CA2 -000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC121EA2121F7F90B57E6C -14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C140F00FC1407A4007EEC -0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0D8001F90C7FC242F7E9F -28>I<EA01F812FFA3120F1207ADEC07F8EC3FFEEC783F02C013809039F9801FC0EBFB00 -01FE14E05BA35BB3B500C3B5FCA328327DB12D>I<EA03C0487E487E487EA46C5A6C5A6C -5AC8FCA9EA01F8127FA31207B3A7B51280A311337DB217>I<EA01F812FFA3120F1207B3 -B3A6B512C0A312327DB117>108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01 -E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3 -B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1 -801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F2D>I<EB07FC90387FFF -C03901FC07F03903F001F848486C7E4848137E001F147F003F158049133F007F15C0A300 -FF15E0A8007F15C0A36C6CEB7F80A2001F15006C6C13FE00075C3903F803F83901FE0FF0 -39007FFFC0D907FCC7FC23207E9F28>I<3901F83FE000FFEBFFFC9038FBE07F9039FF00 -3F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216FEA816FC1507A216F8A2 -ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3FC091C8FCABB512C0A3 -272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30FF0EA07F6A29038FC07 -E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 D<3801FF86000713FEEA1F00003C -133E48131E140E12F8A36C90C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA00 -3F01001380143F0060131F00E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C0 -7F8019207D9F20>I<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FC -C7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I<D801F8EB07 -E000FFEB03FFA3000FEB003F0007141FB3153FA20003147FA26C6CEBDFF03A00FE039FFF -90387FFF1FEB0FFC28207D9F2D>I<B5EB1FFCA3D80FF8EB03C0000715806D1307000315 -007F0001140E7F6C5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B14F1010F5B14 -F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478A226207E9F2B>I<B53A1FFFE03F -F8A33C0FF000FE0007806D150300076EEB0700816D5D00039138FF800EA26C6C486D5A15 -DF01FF153C6C9039038FE038A2D97F876D5A150702C714F0D93FCF6D5AECCE03D91FFEEB -F9C09138FC01FD16FF010F5D4A7EA26D486DC7FCA20103147E4A133EA26D48131C35207E -9F3A>I<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B90 -381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF081 -90380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FCA3 -28207F9F2B>I<B5EB1FFCA3D80FF8EB03C0000715806D1307000315007F0001140E7F6C -5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B14F1010F5B14F9903807FB80A214 -FF6D90C7FCA26D5AA26D5AA21478A21470A214F05C1301007C5BEAFE035C49C8FC5BEAFC -1EEA787CEA3FF0EA0FC0262E7E9F2B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmsy10 10.95 1 -/Fm 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01 -800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15 -306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0 -D900FEC7FC272B7DA02E>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbx12 14.4 44 -/Fn 44 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F14 -80A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F080491303 -000181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8 -001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EA -FE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1F -F8B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>I<B712E0A33903FC001FED -07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC0F1403A202 -01130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297EA82C>69 -D<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403A2140F -90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003903907 -FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880485A82 -485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E6C -B45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5FC -A3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512F0 -A33803FC00B3B1B512F0A314297EA819>I<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0 -139F80EB8FF8EB87FCEB83FEEB81FF01801380147F15C0EC3FE0EC1FF0EC0FF8EC07FC14 -0315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F16F9ED07FDED03FF8181167FA2163F16 -1F160F1607D8FFFE14031601A230297EA835>78 D<B612F815FF16C03A03FC003FE0ED07 -F0ED03F816FC150116FEA716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B5 -12F0A327297EA82E>80 D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E -4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA2 -1503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>82 D<9038FF80600003EBF0E0 -000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F -FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0 -1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8 -25>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED07007F0000150E137F6D143CD91F -C05B90390FF003F06DB55A01001480DA1FFCC7FC2F297EA834>85 -D<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B017F140E80013F -5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301015CECFF076D -91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230297FA833>I<B5 -3CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C604B1380 -02801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F09126F01C -0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA2913AFEE001 -FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141EA242297F -A845>I<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801 -FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B -7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F8 -9038E000FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C0FE090380F -FF80390E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A2 -48133E007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C -3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807F03F380FC0 -0F381F8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FF -E738007F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F130048EB0F80 -127E15C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003803907C007 -003803F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC7FEA03F813 -F01207143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<9038FF80F000 -03EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E -6C137C380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C -14F0121F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512 -0038007FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EB -E80701F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0 -A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3 -120FB3B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0 -C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFF -E0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013 -D0A213E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390FC01F80391F -800FC0393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC039 -0FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFE1FE9038EFFF809038FE -0FE0390FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013 -F89038F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25> -I<38FFC1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B> -114 D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14 -C06C13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038 -E7FFC000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380F -E000AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A300 -0F1307B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FF -A3390FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0E -A2149EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B -0FE00FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC -2600FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C -5AA2EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F00 -3801FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038 -F03F803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E13 -1C5BEA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmtt10 10.95 76 -/Fo 76 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<EA3803387C0780A2EAEE0F1400A25B131EA213 -3EEA7C3CA2EA387CEA0078A213F85B12015BA212035BA21207EB8380EB87C0120FEB0EE0 -A2121F121EA2123E383C07C0A23818038013247E9F18>I<EA01C0EA07E0487EEA0E7048 -7EA4EB73F813F313E3380FC1C0EBC38013831303381F0700EA3F87EA7B8EEA71CEEAE1FC -12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C7F9B18>I<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EA -FDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A41114 -7D9718>I<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C -0738380380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C07 -00EA1F1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12 -431203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003 -C0EAE00138F000E0A21260C7FCA2EB01C0A21303EB0780EB0F00131E5B5B5B485AEA07C0 -485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC -38FE078038F803C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5A -EA01F8131C7E9B18>54 D<1230127812FCA2127812301200A81230127812FCA212781230 -0614779318>58 D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E12 -1C123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07 -F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E013 -03EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0 -130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2 -EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0F -F0EA3FFC48B4FCEA700F38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5 -EA0380487EA36C5A111C7D9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 -D<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114 -C01303EB0F80387FFF00485AEA7FF8141C7F9B18>68 D<B512F0A3381C0070A41400A213 -0EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F0A3381C0070 -A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0A3141C7E9B18>I<387F07F038FF -8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18 ->72 D<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<EAFFC0 -A3001CC7FCB114E0A5B5FCA3131C7E9B18>76 D<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>78 D<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000B0EAF00100 -7013C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01 -E013001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I< -EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB -0380A5149CA3387F01F8EAFF81387F00F0161C7F9B18>82 D<3803F1C0EA1FFF5AEA7C0F -EA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2 -126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA2 -38E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F -01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03381C01C0 -EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC487E6C -5A151C7F9B18>89 D<EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8A3EA00 -38B3ACEAFFF8A30D247F9F18>I<EA0180EA07C0EA1FF0EA7EFCEAF83EEAE00E0F067C9B -18>I<387FFFC0B512E0A26C13C013047E7F18>I<1206121E123E12381270A212E0A312F8 -12FC127CA21238070E789E18>I<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF12 -07121FEA7F03127812E0A3EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>I<127E -12FE127E120EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80 -E013C1EBFFC0000E138038063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838 -030048C7FCA25AA61270EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I< -EB1F80133F131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007 -A2EA380FEA3C1F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA -3E0F38380780EA7003A238E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF80 -00071300EA01F812147D9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0 -B5FCA23801C000AEEA7FFFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00 -487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F03870 -0070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE12 -7E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17 -1C809B18>I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C -18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA -0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>107 D<EAFFC0A31201B3A4B51280 -A3111C7D9B18>I<38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E -7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7 -FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A2 -38E000E0A5EAF001007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318 ->I<EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013 -C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FB -EA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3 -EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060 -EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A300 -7CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F0 -11147D9318>I<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C -1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C -13FE3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A33807 -0700A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F13073838 -00E0A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F93 -18>I<387F8FF0139F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DC -EA039E138EEA0707000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000 -FF13F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013 -DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2 -387001E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512 -F0A314147F9318>I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E012 -00AB1378EB7FE0131F130713247E9F18>I<126012F0B3B012600424769F18>I<127CB4FC -13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E -9F18>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA60C00F067C9B18>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmr10 10.95 74 -/Fp 74 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07 -00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I<EA7038 -EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008A2EA2010EA40200F0E7F9F17>34 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<EA03F0EA0E1C487EEA1806 -EA380738700380A400F013C0AD00701380A3EA780700381300EA1806EA1C0E6C5AEA03F0 -121F7E9D17>48 D<13801203120F12F31203B3A6EA07C0EA7FFE0F1E7C9D17>I<EA03F0 -EA0C1CEA100E487E00401380128000F013C0EAF803A3EA200712001480A2EB0F00130E5B -5B5B13605B485A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E9D17>I<EA03F0 -EA0C1CEA100EEA200F007813801307A2EA380F12001400A2131E131C1370EA07F0EA003C -130E130FEB0780A214C0122012F8A300F013801240EB0F00EA200EEA183CEA07F0121F7E -9D17>I<1306A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A2 -124012C0B512F038000E00A7EBFFE0141E7F9D17>I<EA1803EA1FFE5B5B13E00010C7FC -A6EA11F0EA161CEA180EEA10071480EA0003A214C0A3127012F0A200E013801240EB0700 -EA20066C5AEA0838EA07E0121F7E9D17>I<137CEA0182EA0701380E0380EA0C07121838 -38030090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F013C0A51270A214 -801238EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE014C0A238400080 -38800100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A131F7E9D17>I< -EA03F0EA0C0CEA1006EA3003382001801260A3127038780300123EEA3F06EA1FC8EA0FF0 -EA03F8487EEA0C7EEA103F38300F80EA6007EB01C012C01300A31480EA600100201300EA -1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18487E487E13071270EB038012F0A214 -C0A5EA7007A21238EA180BEA0E13EA03E338000380A3EB07001230EA7806130EEA700CEA -2018EA1070EA0FC0121F7E9D17>I<127012F8A312701200AA127012F8A3127005147C93 -0D>I<127012F8A312701200AA127012F012F8A212781208A31210A31220A21240051D7C -930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FC -EB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F9F22>65 -D<B512E0380F0078141EA2801580A515005C141E147CEBFFF0EB007C141FEC0F80EC07C0 -140315E0A515C014071580EC0F00143EB512F01B1F7E9E20>I<90380FE0109038381C30 -9038E002703803C00139078000F048C71270121E15305A1510127C127800F81400A91278 -007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C217E9F21 ->I<B512F83807801EEC0780EC03C0EC01E0EC00F015701578A2153CA3153EA8153CA215 -7C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F9E23>I<B61280380F000F14 -031401140015C01540A314401500A214C0130113FF130113001440A3EC0020A31540A315 -C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780071401A2140015C01540A4EC20 -00A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<90380FE02090 -387818609038E004E03803800238070001481300001E1460A25A1520127C127800F81400 -A7EC7FFCEC03E000781301127C123CA27EA27E7E380380023900E0046090387818209038 -0FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF81D1F7E -9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<EAFFF8EA0F8090C7FCB21402A41406 -1404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2D805C0130BA2 -D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB0384A2EB01C8 -A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0B -C0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2143C141E -A2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB70383801C00E48487E -39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900781478 -007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E380070 -38EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580A2EC0F00141E -147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48487E39070003 -804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147CA90078147800 -7C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017003801D01E39 -00783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E9F23>I<B512 -E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814 -3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>I<38 -03F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4 -FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C6 -0300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000 -801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3 -A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE39 -1F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB -7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF8 -1FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC -19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090 -383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA2 -12C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB8 -5CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<12 -0812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA -01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010 -20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33 -E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13 -C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212 -1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F -9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61 -80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0 -EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC -121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200 -1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF -8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070 -13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180 -14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC -A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270 -12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18 -EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000 -127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F -9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F -9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8 -383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3 -132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807 -04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F -9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013 -7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I< -38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8 -A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260 -EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006 -130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmbx12 20.736 13 -/Fq 13 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B6D8F803B612E0A426007FF0C70001EBC000B3A491B8FCA402F0C71201B3A7 -B6D8F803B612E0A4433B7CBA4C>I<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3 -170FA3171FA2173F177F17FF5E04071300163FB9FCA4323B7DBA3A>76 -D<B500F00207B512E0808080D8007F92390007E0006E6F5A81017B7F81137901787F6E7E -6E7E81141F6E7E6E7F6E7F82806E7F6F7E6F7E826F7E816F13806F13C017E06F13F081EE -7FF8EE3FFC17FEEE1FFF827013837013C318E37013F382EF7FFBEF3FFFA283838383A283 -83187F183FA201FC161FB500FC150F18071803A2433B7CBA4C>78 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<EA01E0EA -07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512F0A4143D -7DBC1A>105 D<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE0D807F8EB0FF0 -48486D7EA248486D7E003F81A248486D7EA400FF1680A9007F1600A36C6C495AA2001F5D -6D1307000F5D6C6C495AD803FEEB3FE03A00FF80FF806DB5C7FC010F13F8010113C02926 -7DA530>111 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000 -035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E13 -7C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391 -C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C14 -1E0008133E007F133C147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA -1FFCEA07F02E377EA533>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fq(GNU)33 b(History)f(Library)p 75 709 -1800 17 v 960 757 a Fp(Edition)16 b(4.3,)e(for)h Fo(History)f(Library)g -Fp(V)l(ersion)i(4.3.)1643 811 y(Marc)o(h)e(2002)75 2467 -y Fn(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F) --6 b(oundation)75 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 -b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 -1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fp(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f -(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o -(vides)h(a)75 271 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g -(recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75 -339 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 394 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -448 y(Boston,)d(MA)h(02111)f(USA)75 516 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 570 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fm(\015)h Fp(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(1)75 149 y Fl(1)41 b(Using)26 b(History)h(In)n(teractiv)n -(ely)137 289 y Fp(This)17 b(c)o(hapter)g(describ)q(es)h(ho)o(w)e(to)g -(use)h(the)g Fk(gnu)f Fp(History)g(Library)h(in)o(teractiv)o(ely)l(,)h -(from)e(a)g(user's)75 344 y(standp)q(oin)o(t.)38 b(It)21 -b(should)h(b)q(e)g(considered)g(a)f(user's)g(guide.)38 -b(F)l(or)21 b(information)g(on)g(using)h(the)f Fk(gnu)75 -398 y Fp(History)c(Library)h(in)h(y)o(our)e(o)o(wn)g(programs,)f(see)i -(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],)75 -453 y(page)e(5.)75 600 y Fn(1.1)33 b(History)22 b(Expansion)137 -704 y Fp(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h -(expansion)h(feature)e(that)h(is)g(similar)h(to)e(the)h(history)75 -759 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fo(csh)p Fp(.)18 -b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e(used)h(to)g -(manipulate)h(the)f(history)75 814 y(information.)137 -888 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i -(history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75 -943 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o -(ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75 -998 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f -(quic)o(kly)l(.)137 1072 y(History)j(expansion)i(tak)o(es)d(place)i(in) -h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i -(whic)o(h)f(line)h(from)75 1127 y(the)h(history)f(list)i(should)g(b)q -(e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f -(select)i(p)q(ortions)e(of)75 1182 y(that)15 b(line)i(for)d(inclusion)k -(in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e -(the)g(history)g(is)h(called)h(the)75 1237 y Fj(ev)o(en)o(t)p -Fp(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted) -h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fp(.)i(V)l(arious)c -Fj(mo)q(di\014ers)75 1292 y Fp(are)i(a)o(v)m(ailable)i(to)e(manipulate) -i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o -(to)h(w)o(ords)e(in)j(the)e(same)75 1346 y(fashion)c(that)e(Bash)i(do)q -(es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes) -h(are)f(considered)h(one)g(w)o(ord.)75 1401 y(History)18 -b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g -(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1456 -y(whic)o(h)d(is)g(`)p Fo(!)p Fp(')e(b)o(y)h(default.)75 -1583 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137 -1687 y Fp(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f -(a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75 -1777 y Fo(!)216 b Fp(Start)16 b(a)g(history)h(substitution,)g(except)h -(when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315 -1832 y(the)e(line,)i(`)p Fo(=)p Fp(')d(or)h(`)p Fo(\()p -Fp('.)75 1919 y Fo(!)p Fj(n)191 b Fp(Refer)15 b(to)f(command)h(line)i -Fj(n)p Fp(.)75 2006 y Fo(!-)p Fj(n)167 b Fp(Refer)15 -b(to)f(the)i(command)f Fj(n)g Fp(lines)i(bac)o(k.)75 -2094 y Fo(!!)192 b Fp(Refer)15 b(to)f(the)i(previous)f(command.)20 -b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fo(!-1)p Fp('.)75 -2181 y Fo(!)p Fj(string)102 b Fp(Refer)15 b(to)f(the)i(most)e(recen)o -(t)h(command)g(starting)g(with)g Fj(string)p Fp(.)75 -2268 y Fo(!?)p Fj(string)t Fo([?])315 2323 y Fp(Refer)h(to)g(the)h -(most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p -Fp(.)25 b(The)17 b(trailing)g(`)p Fo(?)p Fp(')f(ma)o(y)g(b)q(e)315 -2377 y(omitted)f(if)h(the)f Fj(string)k Fp(is)d(follo)o(w)o(ed)f -(immediately)i(b)o(y)e(a)g(newline.)75 2464 y Fo(^)p -Fj(string1)t Fo(^)p Fj(string2)t Fo(^)315 2519 y Fp(Quic)o(k)i -(Substitution.)23 b(Rep)q(eat)16 b(the)g(last)f(command,)h(replacing)h -Fj(string1)i Fp(with)e Fj(string2)p Fp(.)315 2574 y(Equiv)m(alen)o(t)g -(to)d Fo(!!:s/)p Fj(string1)t Fo(/)p Fj(string2)t Fo(/)p -Fp(.)75 2661 y Fo(!#)192 b Fp(The)15 b(en)o(tire)h(command)f(line)i(t)o -(yp)q(ed)f(so)e(far.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fp(2)1347 b(GNU)15 b(History)g(Library)75 -149 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 247 -y Fp(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o -(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fo(:)p -Fp(')e(separates)h(the)75 302 y(ev)o(en)o(t)j(sp)q(eci\014cation)h -(from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h -(omitted)g(if)g(the)g(w)o(ord)f(designator)75 357 y(b)q(egins)f(with)g -(a)e(`)p Fo(^)p Fp(',)h(`)p Fo($)p Fp(',)f(`)p Fo(*)p -Fp(',)g(`)p Fo(-)p Fp(',)g(or)h(`)p Fo(\045)p Fp('.)24 -b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i -(of)e(the)g(line,)75 411 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h -(denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i -(in)o(to)f(the)g(curren)o(t)f(line)75 466 y(separated)c(b)o(y)g(single) -i(spaces.)137 535 y(F)l(or)e(example,)75 616 y Fo(!!)192 -b Fp(designates)18 b(the)g(preceding)i(command.)28 b(When)18 -b(y)o(ou)g(t)o(yp)q(e)g(this,)h(the)f(preceding)h(com-)315 -671 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 752 y Fo(!!:$)144 -b Fp(designates)12 b(the)f(last)g(argumen)o(t)f(of)h(the)g(preceding)i -(command.)19 b(This)11 b(ma)o(y)g(b)q(e)h(shortened)315 -807 y(to)j Fo(!$)p Fp(.)75 887 y Fo(!fi:2)120 b Fp(designates)15 -b(the)g(second)g(argumen)o(t)f(of)g(the)h(most)f(recen)o(t)g(command)h -(starting)f(with)h(the)315 942 y(letters)g Fo(fi)p Fp(.)137 -1024 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1105 -y Fo(0)h(\(zero\))57 b Fp(The)15 b Fo(0)p Fp(th)g(w)o(ord.)20 -b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g(the)f(command)g(w)o -(ord.)75 1186 y Fj(n)215 b Fp(The)15 b Fj(n)p Fp(th)h(w)o(ord.)75 -1267 y Fo(^)216 b Fp(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o -(ord)g(1.)75 1348 y Fo($)216 b Fp(The)15 b(last)h(argumen)o(t.)75 -1429 y Fo(\045)216 b Fp(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g -(most)g(recen)o(t)g(`)p Fo(?)p Fj(string)t Fo(?)p Fp(')f(searc)o(h.)75 -1510 y Fj(x)p Fo(-)p Fj(y)168 b Fp(A)15 b(range)g(of)g(w)o(ords;)f(`)p -Fo(-)p Fj(y)t Fp(')g(abbreviates)i(`)p Fo(0-)p Fj(y)t -Fp('.)75 1591 y Fo(*)216 b Fp(All)15 b(of)f(the)f(w)o(ords,)g(except)i -(the)f Fo(0)p Fp(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p -Fo(1-$)p Fp('.)18 b(It)c(is)g(not)g(an)g(error)315 1645 -y(to)g(use)h(`)p Fo(*)p Fp(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f -(in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g -(in)315 1700 y(that)f(case.)75 1781 y Fj(x)s Fo(*)189 -b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p Fp(')75 1862 -y Fj(x)p Fo(-)192 b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p -Fp(')e(lik)o(e)i(`)p Fj(x)s Fo(*)p Fp(',)e(but)i(omits)f(the)g(last)g -(w)o(ord.)137 1943 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h -(without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h -(command)75 1998 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 -2113 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2210 y Fp(After)10 -b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g -(sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75 -2265 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p -Fo(:)p Fp('.)75 2346 y Fo(h)216 b Fp(Remo)o(v)o(e)14 -b(a)h(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the) -f(head.)75 2427 y Fo(t)216 b Fp(Remo)o(v)o(e)14 b(all)i(leading)h -(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75 -2508 y Fo(r)216 b Fp(Remo)o(v)o(e)14 b(a)h(trailing)h(su\016x)f(of)g -(the)g(form)g(`)p Fo(.)p Fj(su\016x)s Fp(',)f(lea)o(ving)i(the)f -(basename.)75 2589 y Fo(e)216 b Fp(Remo)o(v)o(e)14 b(all)i(but)g(the)f -(trailing)h(su\016x.)75 2670 y Fo(p)216 b Fp(Prin)o(t)15 -b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)p -eop -%%Page: 3 5 -3 4 bop 75 -58 a Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(3)75 149 y Fo(s/)p Fj(old)r Fo(/)p Fj(new)t -Fo(/)315 204 y Fp(Substitute)17 b Fj(new)j Fp(for)c(the)h(\014rst)e(o)q -(ccurrence)j(of)e Fj(old)i Fp(in)f(the)g(ev)o(en)o(t)f(line.)25 -b(An)o(y)16 b(delimiter)315 259 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g -(of)f(`)p Fo(/)p Fp('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h -(quoted)f(in)i Fj(old)g Fp(and)f Fj(new)k Fp(with)12 -b(a)315 314 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p -Fo(&)p Fp(')e(app)q(ears)h(in)h Fj(new)p Fp(,)f(it)g(is)h(replaced)g(b) -o(y)f Fj(old)p Fp(.)20 b(A)14 b(single)i(bac)o(kslash)315 -369 y(will)j(quote)e(the)h(`)p Fo(&)p Fp('.)25 b(The)17 -b(\014nal)i(delimiter)g(is)f(optional)g(if)f(it)h(is)g(the)f(last)g(c)o -(haracter)g(on)315 423 y(the)e(input)h(line.)75 503 y -Fo(&)216 b Fp(Rep)q(eat)15 b(the)g(previous)h(substitution.)75 -583 y Fo(g)216 b Fp(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o -(v)o(er)e(the)g(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20 -b(in)g(conjunction)315 638 y(with)c(`)p Fo(s)p Fp(',)d(as)i(in)h -Fo(gs/)p Fj(old)r Fo(/)p Fj(new)t Fo(/)p Fp(,)f(or)g(with)g(`)p -Fo(&)p Fp('.)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fp(4)1347 b(GNU)15 b(History)g(Library)p -eop -%%Page: 5 7 -5 6 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(5)75 149 y Fl(2)41 b(Programming)28 b(with)e(GNU)i -(History)137 269 y Fp(This)17 b(c)o(hapter)f(describ)q(es)i(ho)o(w)e -(to)f(in)o(terface)i(programs)e(that)g(y)o(ou)h(write)g(with)h(the)f -Fk(gnu)g Fp(History)75 324 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g -(considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15 -b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75 -379 y(of)e Fk(gnu)g Fp(History)l(,)g(see)g(Chapter)g(1)g([Using)g -(History)g(In)o(teractiv)o(ely],)h(page)f(1.)75 509 y -Fn(2.1)33 b(In)n(tro)r(duction)24 b(to)e(History)137 -607 y Fp(Man)o(y)11 b(programs)f(read)h(input)i(from)d(the)i(user)f(a)g -(line)i(at)e(a)g(time.)19 b(The)12 b Fk(gnu)f Fp(History)g(library)h -(is)g(able)75 661 y(to)i(k)o(eep)g(trac)o(k)g(of)g(those)g(lines,)i -(asso)q(ciate)e(arbitrary)g(data)g(with)g(eac)o(h)h(line,)h(and)e -(utilize)j(information)75 716 y(from)d(previous)i(lines)h(in)f(comp)q -(osing)g(new)f(ones.)137 784 y(The)f(programmer)f(using)h(the)g -(History)g(library)g(has)g(a)o(v)m(ailable)h(functions)g(for)e(remem)o -(b)q(ering)h(lines)75 839 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g -(arbitrary)f(data)f(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d -(the)i(list,)h(searc)o(hing)75 894 y(through)17 b(the)h(list)g(for)f(a) -h(line)h(con)o(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g -(referencing)h(an)o(y)e(line)i(in)75 949 y(the)c(list)i(directly)l(.)22 -b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fp(function)h(is)e -(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75 -1003 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g -(programs.)137 1072 y(The)f(user)h(using)f(programs)f(written)h(with)g -(the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h -(consisten)o(t)75 1126 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f -(w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g -(previous)75 1181 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f -(commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d -(are)75 1236 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o -(vided)g(b)o(y)g Fo(csh)p Fp(.)137 1304 y(If)f(the)g(programmer)f -(desires,)h(he)g(can)g(use)g(the)g(Readline)h(library)l(,)g(whic)o(h)f -(includes)j(some)c(history)75 1359 y(manipulation)j(b)o(y)e(default,)g -(and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i -(editing.)137 1427 y(Before)i(declaring)i(an)o(y)d(functions)i(using)g -(an)o(y)f(functionalit)o(y)h(the)f(History)g(library)h(pro)o(vides)f -(in)75 1482 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should) -i(include)g(the)f(\014le)g Fo(<readline/history.h>)d -Fp(in)j(an)o(y)f(\014le)75 1537 y(that)d(uses)h(the)h(History)e -(library's)i(features.)18 b(It)12 b(supplies)i(extern)e(declarations)h -(for)e(all)i(of)f(the)g(library's)75 1591 y(public)17 -b(functions)f(and)g(v)m(ariables,)g(and)f(declares)h(all)g(of)f(the)h -(public)h(data)d(structures.)75 1722 y Fn(2.2)33 b(History)22 -b(Storage)137 1819 y Fp(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f -(of)g(history)i(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h -(declared)g(as)f(follo)o(ws:)195 1885 y Fo(typedef)23 -b(void)g(*histdata_t;)195 1988 y(typedef)g(struct)g(_hist_entry)f({)243 -2040 y(char)h(*line;)243 2092 y(histdata_t)f(data;)195 -2144 y(})i(HIST_ENTRY;)137 2212 y Fp(The)16 b(history)f(list)h(itself)g -(migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2277 -y Fo(HIST_ENTRY)22 b(**the_history_list;)137 2345 y Fp(The)16 -b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g(in)o(to)f -(a)g(single)i(structure:)195 2411 y Fo(/*)219 2462 y(*)24 -b(A)f(structure)g(used)g(to)h(pass)f(around)g(the)h(current)f(state)g -(of)g(the)h(history.)219 2514 y(*/)195 2566 y(typedef)f(struct)g -(_hist_state)f({)243 2618 y(HIST_ENTRY)g(**entries;)h(/*)g(Pointer)g -(to)h(the)f(entries)g(themselves.)g(*/)243 2670 y(int)g(offset;)262 -b(/*)23 b(The)h(location)f(pointer)f(within)h(this)h(array.)f(*/)p -eop -%%Page: 6 8 -6 7 bop 75 -58 a Fp(6)1347 b(GNU)15 b(History)g(Library)243 -149 y Fo(int)23 b(length;)262 b(/*)23 b(Number)g(of)h(elements)f -(within)g(this)g(array.)g(*/)243 201 y(int)g(size;)310 -b(/*)23 b(Number)g(of)h(slots)f(allocated)g(to)g(this)h(array.)f(*/)243 -253 y(int)g(flags;)195 305 y(})h(HISTORY_STATE;)137 372 -y Fp(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j -Fo(HS_STIFLED)p Fp(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)75 -498 y Fn(2.3)33 b(History)22 b(F)-6 b(unctions)137 593 -y Fp(This)13 b(section)g(describ)q(es)h(the)e(calling)i(sequence)g(for) -e(the)g(v)m(arious)h(functions)g(exp)q(orted)f(b)o(y)h(the)f -Fk(gnu)75 648 y Fp(History)j(library)l(.)75 758 y Fi(2.3.1)30 -b(Initializing)20 b(History)h(and)f(State)g(Managemen)n(t)137 -853 y Fp(This)e(section)g(describ)q(es)h(functions)f(used)g(to)e -(initialize)21 b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75 -908 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g -(functions)h(in)g(y)o(our)f(program.)1762 1021 y(F)l(unction)-1861 -b Fh(void)20 b Fg(using)p 333 1021 18 3 v 20 w(history)j -Ff(\()p Fo(void)p Ff(\))195 1075 y Fp(Begin)e(a)f(session)g(in)h(whic)o -(h)g(the)f(history)g(functions)g(migh)o(t)g(b)q(e)h(used.)34 -b(This)21 b(initializes)i(the)195 1130 y(in)o(teractiv)o(e)16 -b(v)m(ariables.)1762 1243 y(F)l(unction)-1861 b Fh(HISTORY_STATE)21 -b(*)e Fg(history)p 657 1243 V 21 w(get)p 755 1243 V 21 -w(history)p 951 1243 V 21 w(state)j Ff(\()p Fo(void)p -Ff(\))195 1298 y Fp(Return)15 b(a)g(structure)g(describing)i(the)e -(curren)o(t)g(state)f(of)h(the)g(input)i(history)l(.)1762 -1411 y(F)l(unction)-1861 b Fh(void)20 b Fg(history)p -377 1411 V 20 w(set)p 468 1411 V 21 w(history)p 664 1411 -V 21 w(state)j Ff(\()p Fo(HISTORY_STATE)13 b(*state)p -Ff(\))195 1466 y Fp(Set)i(the)h(state)e(of)h(the)g(history)g(list)h -(according)g(to)e Fj(state)p Fp(.)75 1575 y Fi(2.3.2)30 -b(History)20 b(List)h(Managemen)n(t)137 1671 y Fp(These)11 -b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f -(list,)i(or)f(set)f(parameters)g(managing)75 1725 y(the)15 -b(list)h(itself.)1762 1838 y(F)l(unction)-1861 b Fh(void)20 -b Fg(add)p 294 1838 V 20 w(history)j Ff(\()p Fo(const)14 -b(char)g(*string)p Ff(\))195 1893 y Fp(Place)i Fj(string)i -Fp(at)d(the)g(end)h(of)e(the)h(history)g(list.)21 b(The)15 -b(asso)q(ciated)g(data)g(\014eld)h(\(if)f(an)o(y\))f(is)i(set)f(to)195 -1948 y Fo(NULL)p Fp(.)1762 2061 y(F)l(unction)-1861 b -Fh(HIST_ENTRY)21 b(*)e Fg(remo)n(v)n(e)p 584 2061 V 20 -w(history)k Ff(\()p Fo(int)14 b(which)p Ff(\))195 2115 -y Fp(Remo)o(v)o(e)22 b(history)g(en)o(try)h(at)f(o\013set)g -Fj(whic)o(h)h Fp(from)f(the)h(history)l(.)43 b(The)23 -b(remo)o(v)o(ed)f(elemen)o(t)h(is)195 2170 y(returned)16 -b(so)e(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining) -h(structure.)1762 2283 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 -b(*)e Fg(replace)p 580 2283 V 22 w(history)p 777 2283 -V 20 w(en)n(try)24 b Ff(\()p Fo(int)14 b(which,)g(const)h(char)283 -2338 y(*line,)f(histdata_t)g(data)p Ff(\))195 2393 y -Fp(Mak)o(e)f(the)h(history)g(en)o(try)f(at)g(o\013set)g -Fj(whic)o(h)i Fp(ha)o(v)o(e)e Fj(line)18 b Fp(and)c Fj(data)p -Fp(.)19 b(This)14 b(returns)g(the)g(old)g(en)o(try)195 -2448 y(so)19 b(y)o(ou)f(can)i(disp)q(ose)g(of)e(the)i(data.)30 -b(In)20 b(the)f(case)g(of)g(an)g(in)o(v)m(alid)i Fj(whic)o(h)p -Fp(,)g(a)d Fo(NULL)h Fp(p)q(oin)o(ter)g(is)195 2502 y(returned.)1762 -2615 y(F)l(unction)-1861 b Fh(void)20 b Fg(clear)p 320 -2615 V 21 w(history)j Ff(\()p Fo(void)p Ff(\))195 2670 -y Fp(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(7)1762 149 y(F)l(unction)-1861 b Fh(void)20 -b Fg(sti\015e)p 320 149 18 3 v 21 w(history)j Ff(\()p -Fo(int)14 b(max)p Ff(\))195 204 y Fp(Sti\015e)i(the)f(history)h(list,)f -(remem)o(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fp(en)o(tries.)1762 -302 y(F)l(unction)-1861 b Fh(int)20 b Fg(unsti\015e)p -358 302 V 21 w(history)i Ff(\()p Fo(void)p Ff(\))195 -357 y Fp(Stop)14 b(sti\015ing)g(the)g(history)l(.)20 -b(This)14 b(returns)f(the)h(previously-set)h(maxim)o(um)f(n)o(um)o(b)q -(er)g(of)f(history)195 411 y(en)o(tries)h(\(as)e(set)i(b)o(y)f -Fo(stifle_history\(\))p Fp(\).)k(The)c(v)m(alue)i(is)f(p)q(ositiv)o(e)g -(if)g(the)g(history)f(w)o(as)f(sti\015ed,)195 466 y(negativ)o(e)j(if)h -(it)f(w)o(asn't.)1762 564 y(F)l(unction)-1861 b Fh(int)20 -b Fg(history)p 351 564 V 20 w(is)p 409 564 V 21 w(sti\015ed)k -Ff(\()p Fo(void)p Ff(\))195 619 y Fp(Returns)15 b(non-zero)g(if)h(the)f -(history)g(is)h(sti\015ed,)g(zero)f(if)g(it)h(is)g(not.)75 -719 y Fi(2.3.3)30 b(Information)19 b(Ab)r(out)i(the)f(History)h(List) -137 811 y Fp(These)13 b(functions)h(return)f(information)g(ab)q(out)f -(the)h(en)o(tire)h(history)e(list)i(or)e(individual)k(list)e(en)o -(tries.)1762 909 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 -b(**)e Fg(history)p 605 909 V 21 w(list)24 b Ff(\()p -Fo(void)p Ff(\))195 964 y Fp(Return)15 b(a)g Fo(NULL)f -Fp(terminated)i(arra)o(y)e(of)h Fo(HIST_ENTRY)f(*)h Fp(whic)o(h)h(is)f -(the)h(curren)o(t)f(input)h(history)l(.)195 1018 y(Elemen)o(t)g(0)f(of) -f(this)i(list)g(is)g(the)f(b)q(eginning)i(of)e(time.)20 -b(If)c(there)f(is)h(no)f(history)l(,)g(return)g Fo(NULL)p -Fp(.)1762 1116 y(F)l(unction)-1861 b Fh(int)20 b Fg(where)p -325 1116 V 20 w(history)j Ff(\()p Fo(void)p Ff(\))195 -1171 y Fp(Returns)15 b(the)g(o\013set)f(of)h(the)g(curren)o(t)g -(history)g(elemen)o(t.)1762 1268 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(curren)n(t)p 587 1268 V 21 -w(history)k Ff(\()p Fo(void)p Ff(\))195 1323 y Fp(Return)12 -b(the)h(history)f(en)o(try)g(at)g(the)g(curren)o(t)h(p)q(osition,)g(as) -f(determined)i(b)o(y)e Fo(where_history\(\))p Fp(.)195 -1378 y(If)j(there)h(is)f(no)h(en)o(try)e(there,)h(return)g(a)g -Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1475 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(history)p 579 1475 V 21 w(get)j -Ff(\()p Fo(int)15 b(offset)p Ff(\))195 1530 y Fp(Return)20 -b(the)h(history)g(en)o(try)f(at)h(p)q(osition)g Fj(o\013set)p -Fp(,)g(starting)f(from)g Fo(history_base)f Fp(\(see)i(Sec-)195 -1585 y(tion)15 b(2.4)f([History)g(V)l(ariables],)h(page)g(10\).)j(If)d -(there)g(is)g(no)g(en)o(try)f(there,)h(or)f(if)h Fj(o\013set)g -Fp(is)g(greater)195 1640 y(than)g(the)g(history)g(length,)h(return)f(a) -g Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1737 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 1737 V 20 w(total)p 487 -1737 V 22 w(b)n(ytes)j Ff(\()p Fo(void)p Ff(\))195 1792 -y Fp(Return)13 b(the)h(n)o(um)o(b)q(er)g(of)g(b)o(ytes)f(that)g(the)h -(primary)g(history)g(en)o(tries)g(are)g(using.)20 b(This)14 -b(function)195 1847 y(returns)h(the)g(sum)h(of)e(the)i(lengths)f(of)g -(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1947 y -Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137 -2040 y Fp(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g -(in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.) -1762 2137 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p -351 2137 V 20 w(set)p 442 2137 V 21 w(p)r(os)h Ff(\()p -Fo(int)15 b(pos)p Ff(\))195 2192 y Fp(Set)j(the)h(curren)o(t)f(history) -g(o\013set)g(to)f Fj(p)q(os)p Fp(,)i(an)f(absolute)h(index)h(in)o(to)e -(the)g(list.)30 b(Returns)18 b(1)g(on)195 2247 y(success,)d(0)g(if)h -Fj(p)q(os)h Fp(is)f(less)g(than)f(zero)g(or)g(greater)f(than)h(the)g(n) -o(um)o(b)q(er)h(of)e(history)i(en)o(tries.)1762 2344 -y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p -615 2344 V 20 w(history)k Ff(\()p Fo(void)p Ff(\))195 -2399 y Fp(Bac)o(k)14 b(up)h(the)g(curren)o(t)f(history)g(o\013set)g(to) -f(the)i(previous)g(history)f(en)o(try)l(,)g(and)h(return)f(a)g(p)q(oin) -o(ter)195 2454 y(to)h(that)f(en)o(try)l(.)20 b(If)15 -b(there)g(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fo(NULL)g Fp(p)q(oin)o(ter.)1762 2552 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 2552 V 21 w(history)k -Ff(\()p Fo(void)p Ff(\))195 2606 y Fp(Mo)o(v)o(e)17 b(the)h(curren)o(t) -f(history)h(o\013set)f(forw)o(ard)f(to)h(the)h(next)g(history)g(en)o -(try)l(,)g(and)g(return)f(the)h(a)195 2661 y(p)q(oin)o(ter)e(to)e(that) -h(en)o(try)l(.)k(If)d(there)f(is)h(no)f(next)g(en)o(try)l(,)g(return)g -(a)g Fo(NULL)g Fp(p)q(oin)o(ter.)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fp(8)1347 b(GNU)15 b(History)g(Library)75 -149 y Fi(2.3.5)30 b(Searc)n(hing)21 b(the)f(History)h(List)137 -245 y Fp(These)14 b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i -(history)f(list)h(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c) -i(string.)75 300 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q -(oth)g(forw)o(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g -(history)f(p)q(osition.)75 355 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i -Fj(anc)o(hored)p Fp(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc) -o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 410 y(history)g(en)o(try)l -(.)1762 524 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p -351 524 18 3 v 20 w(searc)n(h)j Ff(\()p Fo(const)14 b(char)h(*string,)f -(int)h(direction)p Ff(\))195 578 y Fp(Searc)o(h)g(the)f(history)g(for)g -Fj(string)p Fp(,)g(starting)g(at)g(the)h(curren)o(t)f(history)g -(o\013set.)19 b(If)c Fj(direction)g Fp(is)g(less)195 -633 y(than)20 b(0,)g(then)h(the)f(searc)o(h)f(is)i(through)f(previous)g -(en)o(tries,)i(otherwise)e(through)f(subsequen)o(t)195 -688 y(en)o(tries.)h(If)c Fj(string)j Fp(is)d(found,)f(then)g(the)h -(curren)o(t)f(history)g(index)h(is)g(set)f(to)g(that)f(history)h(en)o -(try)l(,)195 743 y(and)i(the)g(v)m(alue)h(returned)f(is)g(the)g -(o\013set)e(in)j(the)f(line)h(of)e(the)h(en)o(try)g(where)g -Fj(string)j Fp(w)o(as)c(found.)195 798 y(Otherwise,)g(nothing)f(is)h(c) -o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 912 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 912 V 20 w(searc)n(h)p -527 912 V 21 w(pre\014x)i Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h -(direction)p Ff(\))195 966 y Fp(Searc)o(h)20 b(the)h(history)f(for)g -Fj(string)p Fp(,)h(starting)e(at)h(the)g(curren)o(t)h(history)f -(o\013set.)34 b(The)20 b(searc)o(h)g(is)195 1021 y(anc)o(hored:)g(matc) -o(hing)14 b(lines)j(m)o(ust)d(b)q(egin)i(with)f Fj(string)p -Fp(.)20 b(If)15 b Fj(direction)h Fp(is)f(less)g(than)g(0,)f(then)h(the) -195 1076 y(searc)o(h)g(is)i(through)e(previous)h(en)o(tries,)g -(otherwise)g(through)f(subsequen)o(t)h(en)o(tries.)22 -b(If)16 b Fj(string)j Fp(is)195 1131 y(found,)e(then)g(the)f(curren)o -(t)h(history)f(index)i(is)f(set)f(to)g(that)g(en)o(try)l(,)g(and)h(the) -f(return)h(v)m(alue)h(is)f(0.)195 1186 y(Otherwise,)f(nothing)f(is)h(c) -o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 1300 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 1300 V 20 w(searc)n(h)p -527 1300 V 21 w(p)r(os)h Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h -(direction,)f(int)283 1355 y(pos)p Ff(\))195 1409 y Fp(Searc)o(h)j(for) -g Fj(string)k Fp(in)d(the)f(history)g(list,)h(starting)e(at)h -Fj(p)q(os)p Fp(,)g(an)g(absolute)h(index)g(in)o(to)f(the)h(list.)195 -1464 y(If)g Fj(direction)i Fp(is)e(negativ)o(e,)h(the)f(searc)o(h)g -(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p Fp(,)h(otherwise)h -(forw)o(ard.)195 1519 y(Returns)j(the)g(absolute)g(index)h(of)f(the)g -(history)g(elemen)o(t)h(where)f Fj(string)k Fp(w)o(as)21 -b(found,)j(or)d(-1)195 1574 y(otherwise.)75 1684 y Fi(2.3.6)30 -b(Managing)20 b(the)g(History)h(File)137 1780 y Fp(The)16 -b(History)g(library)h(can)e(read)h(the)g(history)g(from)f(and)h(write)g -(it)g(to)f(a)h(\014le.)22 b(This)17 b(section)f(do)q(cu-)75 -1835 y(men)o(ts)f(the)g(functions)h(for)f(managing)g(a)g(history)g -(\014le.)1762 1949 y(F)l(unction)-1861 b Fh(int)20 b -Fg(read)p 286 1949 V 20 w(history)i Ff(\()p Fo(const)15 -b(char)f(*filename)p Ff(\))195 2003 y Fp(Add)h(the)g(con)o(ten)o(ts)f -(of)h Fj(\014lename)j Fp(to)c(the)h(history)g(list,)g(a)g(line)h(at)f -(a)f(time.)20 b(If)15 b Fj(\014lename)k Fp(is)c Fo(NULL)p -Fp(,)195 2058 y(then)h(read)f(from)f(`)p Fo(~/.history)p -Fp('.)k(Returns)d(0)f(if)i(successful,)g(or)f Fo(errno)f -Fp(if)i(not.)1762 2172 y(F)l(unction)-1861 b Fh(int)20 -b Fg(read)p 286 2172 V 20 w(history)p 481 2172 V 20 w(range)i -Ff(\()p Fo(const)14 b(char)h(*filename,)f(int)h(from,)f(int)h(to)p -Ff(\))195 2227 y Fp(Read)f(a)f(range)h(of)f(lines)j(from)d -Fj(\014lename)p Fp(,)i(adding)g(them)f(to)f(the)h(history)g(list.)20 -b(Start)13 b(reading)i(at)195 2282 y(line)g Fj(from)d -Fp(and)h(end)h(at)f Fj(to)p Fp(.)18 b(If)c Fj(from)e -Fp(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)13 -b Fj(to)i Fp(is)e(less)h(than)f Fj(from)p Fp(,)195 2337 -y(then)i(read)g(un)o(til)i(the)e(end)g(of)g(the)g(\014le.)21 -b(If)15 b Fj(\014lename)k Fp(is)d Fo(NULL)p Fp(,)e(then)h(read)g(from)f -(`)p Fo(~/.history)p Fp('.)195 2392 y(Returns)h(0)g(if)g(successful,)h -(or)f Fo(errno)g Fp(if)g(not.)1762 2506 y(F)l(unction)-1861 -b Fh(int)20 b Fg(write)p 304 2506 V 22 w(history)i Ff(\()p -Fo(const)15 b(char)f(*filename)p Ff(\))195 2560 y Fp(W)l(rite)k(the)f -(curren)o(t)g(history)h(to)f Fj(\014lename)p Fp(,)h(o)o(v)o(erwriting)f -Fj(\014lename)k Fp(if)d(necessary)l(.)27 b(If)18 b Fj(\014lename)195 -2615 y Fp(is)f Fo(NULL)p Fp(,)e(then)h(write)h(the)f(history)g(list)h -(to)e(`)p Fo(~/.history)p Fp('.)21 b(Returns)16 b(0)f(on)h(success,)h -(or)f Fo(errno)195 2670 y Fp(on)f(a)g(read)g(or)g(write)g(error.)p -eop -%%Page: 9 11 -9 10 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(9)1762 149 y(F)l(unction)-1861 b Fh(int)20 -b Fg(app)r(end)p 360 149 18 3 v 19 w(history)j Ff(\()p -Fo(int)14 b(nelements,)g(const)h(char)f(*filename)p Ff(\))195 -204 y Fp(App)q(end)19 b(the)e(last)g Fj(nelemen)o(ts)k -Fp(of)16 b(the)i(history)f(list)h(to)f Fj(\014lename)p -Fp(.)27 b(If)18 b Fj(\014lename)j Fp(is)d Fo(NULL)p Fp(,)f(then)195 -259 y(app)q(end)f(to)f(`)p Fo(~/.history)p Fp('.)j(Returns)c(0)h(on)g -(success,)h(or)e Fo(errno)h Fp(on)g(a)g(read)g(or)g(write)g(error.)1762 -404 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p 351 -404 V 20 w(truncate)p 582 404 V 21 w(\014le)k Ff(\()p -Fo(const)14 b(char)h(*filename,)e(int)i(nlines)p Ff(\))195 -459 y Fp(T)l(runcate)k(the)h(history)f(\014le)h Fj(\014lename)p -Fp(,)h(lea)o(ving)f(only)g(the)f(last)g Fj(nlines)k Fp(lines.)34 -b(If)20 b Fj(\014lename)i Fp(is)195 513 y Fo(NULL)p Fp(,)14 -b(then)i(`)p Fo(~/.history)p Fp(')d(is)j(truncated.)j(Returns)c(0)g(on) -g(success,)h(or)e Fo(errno)h Fp(on)g(failure.)75 644 -y Fi(2.3.7)30 b(History)20 b(Expansion)137 750 y Fp(These)c(functions)g -(implemen)o(t)g(history)f(expansion.)1762 895 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 895 V 20 w(expand)j Ff(\()p -Fo(char)14 b(*string,)g(char)h(**output)p Ff(\))195 949 -y Fp(Expand)j Fj(string)p Fp(,)f(placing)h(the)g(result)f(in)o(to)g -Fj(output)p Fp(,)h(a)e(p)q(oin)o(ter)i(to)f(a)g(string)g(\(see)g -(Section)h(1.1)195 1004 y([History)d(In)o(teraction],)f(page)h(1\).)20 -b(Returns:)195 1098 y Fo(0)216 b Fp(If)19 b(no)g(expansions)g(to)q(ok)f -(place)i(\(or,)e(if)i(the)e(only)i(c)o(hange)e(in)i(the)f(text)f(w)o -(as)g(the)435 1152 y(remo)o(v)m(al)d(of)g(escap)q(e)h(c)o(haracters)e -(preceding)i(the)f(history)g(expansion)h(c)o(haracter\);)195 -1241 y Fo(1)216 b Fp(if)16 b(expansions)g(did)g(tak)o(e)e(place;)195 -1330 y Fo(-1)192 b Fp(if)16 b(there)f(w)o(as)f(an)h(error)g(in)h -(expansion;)195 1419 y Fo(2)216 b Fp(if)14 b(the)g(returned)g(line)i -(should)f(b)q(e)f(displa)o(y)o(ed,)h(but)f(not)f(executed,)i(as)e(with) -h(the)g Fo(:p)435 1474 y Fp(mo)q(di\014er)i(\(see)f(Section)h(1.1.3)e -([Mo)q(di\014ers],)h(page)g(2\).)195 1568 y(If)g(an)h(error)e(o)q -(curred)i(in)g(expansion,)f(then)h Fj(output)g Fp(con)o(tains)f(a)g -(descriptiv)o(e)i(error)d(message.)1762 1713 y(F)l(unction)-1861 -b Fh(char)20 b(*)f Fg(get)p 324 1713 V 21 w(history)p -520 1713 V 20 w(ev)n(en)n(t)25 b Ff(\()p Fo(const)14 -b(char)h(*string,)f(int)g(*cindex,)g(int)283 1767 y(qchar)p -Ff(\))195 1822 y Fp(Returns)22 b(the)h(text)f(of)h(the)f(history)h(ev)o -(en)o(t)g(b)q(eginning)h(at)f Fj(string)j Fo(+)d Fj(*cindex)p -Fp(.)43 b Fj(*cindex)27 b Fp(is)195 1877 y(mo)q(di\014ed)16 -b(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o(t)f(sp)q(eci\014er.) -22 b(A)o(t)14 b(function)h(en)o(try)l(,)g Fj(cindex)k -Fp(p)q(oin)o(ts)c(to)f(the)195 1932 y(index)19 b(in)o(to)f -Fj(string)k Fp(where)c(the)g(history)g(ev)o(en)o(t)g(sp)q -(eci\014cation)h(b)q(egins.)30 b Fj(qc)o(har)21 b Fp(is)d(a)g(c)o -(haracter)195 1987 y(that)13 b(is)h(allo)o(w)o(ed)g(to)e(end)i(the)g -(ev)o(en)o(t)f(sp)q(eci\014cation)j(in)e(addition)g(to)f(the)h -(\\normal")f(terminating)195 2041 y(c)o(haracters.)1762 -2186 y(F)l(unction)-1861 b Fh(char)20 b(**)f Fg(history)p -448 2186 V 21 w(tok)n(enize)25 b Ff(\()p Fo(const)14 -b(char)h(*string)p Ff(\))195 2241 y Fp(Return)g(an)g(arra)o(y)g(of)g -(tok)o(ens)g(parsed)g(out)g(of)g Fj(string)p Fp(,)g(m)o(uc)o(h)h(as)f -(the)g(shell)i(migh)o(t.)k(The)15 b(tok)o(ens)195 2296 -y(are)h(split)h(on)e(the)h(c)o(haracters)g(in)g(the)g -Fj(history)p 1007 2296 14 2 v 17 w(w)o(ord)p 1122 2296 -V 15 w(delimiters)k Fp(v)m(ariable,)d(and)f(shell)i(quoting)195 -2351 y(con)o(v)o(en)o(tions)d(are)g(ob)q(ey)o(ed.)1762 -2496 y(F)l(unction)-1861 b Fh(char)20 b(*)f Fg(history)p -422 2496 18 3 v 21 w(arg)p 524 2496 V 19 w(extract)24 -b Ff(\()p Fo(int)14 b(first,)h(int)g(last,)f(const)g(char)283 -2550 y(*string)p Ff(\))195 2605 y Fp(Extract)19 b(a)h(string)g(segmen)o -(t)g(consisting)h(of)f(the)g Fj(\014rst)h Fp(through)f -Fj(last)h Fp(argumen)o(ts)e(presen)o(t)h(in)195 2660 -y Fj(string)p Fp(.)g(Argumen)o(ts)15 b(are)f(split)j(using)f -Fo(history_tokenize)p Fp(.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fp(10)1324 b(GNU)15 b(History)g(Library)75 -149 y Fn(2.4)33 b(History)22 b(V)-6 b(ariables)137 251 -y Fp(This)18 b(section)f(describ)q(es)i(the)e(externally-visible)k(v)m -(ariables)d(exp)q(orted)f(b)o(y)g(the)g Fk(gnu)g Fp(History)g(Li-)75 -306 y(brary)l(.)1773 438 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(history)p 351 438 18 3 v 20 w(base)195 493 y Fp(The)15 -b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f -(history)g(list.)1773 625 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(history)p 351 625 V 20 w(length)195 680 y Fp(The)15 -b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the) -f(history)g(list.)1773 812 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(history)p 351 812 V 20 w(max)p 478 812 V 20 w(en)n(tries)195 -867 y Fp(The)j(maxim)o(um)g(n)o(um)o(b)q(er)g(of)g(history)g(en)o -(tries.)43 b(This)24 b(m)o(ust)e(b)q(e)i(c)o(hanged)f(using)h -Fo(stifle_)195 922 y(history\(\))p Fp(.)1773 1054 y(V)l(ariable)-1861 -b Fh(char)20 b Fg(history)p 377 1054 V 20 w(expansion)p -644 1054 V 21 w(c)n(har)195 1109 y Fp(The)e(c)o(haracter)f(that)g(in)o -(tro)q(duces)h(a)f(history)h(ev)o(en)o(t.)27 b(The)18 -b(default)g(is)g(`)p Fo(!)p Fp('.)26 b(Setting)18 b(this)g(to)f(0)195 -1164 y(inhibits)g(history)f(expansion.)1773 1296 y(V)l(ariable)-1861 -b Fh(char)20 b Fg(history)p 377 1296 V 20 w(subst)p 529 -1296 V 20 w(c)n(har)195 1351 y Fp(The)h(c)o(haracter)e(that)h(in)o(v)o -(ok)o(es)g(w)o(ord)g(substitution)h(if)g(found)f(at)g(the)h(start)e(of) -h(a)g(line.)37 b(The)195 1406 y(default)16 b(is)f(`)p -Fo(^)p Fp('.)1773 1538 y(V)l(ariable)-1861 b Fh(char)20 -b Fg(history)p 377 1538 V 20 w(commen)n(t)p 627 1538 -V 19 w(c)n(har)195 1593 y Fp(During)f(tok)o(enization,)h(if)f(this)h(c) -o(haracter)e(is)h(seen)h(as)e(the)h(\014rst)g(c)o(haracter)f(of)g(a)h -(w)o(ord,)g(then)195 1648 y(it)j(and)g(all)g(subsequen)o(t)h(c)o -(haracters)d(up)j(to)e(a)g(newline)i(are)f(ignored,)h(suppressing)g -(history)195 1702 y(expansion)16 b(for)f(the)g(remainder)h(of)f(the)g -(line.)21 b(This)16 b(is)g(disabled)h(b)o(y)e(default.)1773 -1835 y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p -422 1835 V 21 w(w)n(ord)p 567 1835 V 20 w(delimiters)195 -1889 y Fp(The)14 b(c)o(haracters)f(that)g(separate)g(tok)o(ens)h(for)f -Fo(history_tokenize\(\))p Fp(.)k(The)d(default)g(v)m(alue)h(is)f -Fo(")195 1944 y(\\t\\n\(\)<>;&|")p Fp(.)1773 2077 y(V)l(ariable)-1861 -b Fh(char)20 b(*)f Fg(history)p 422 2077 V 21 w(no)p -504 2077 V 20 w(expand)p 704 2077 V 20 w(c)n(hars)195 -2131 y Fp(The)c(list)h(of)e(c)o(haracters)g(whic)o(h)i(inhibit)h -(history)e(expansion)h(if)f(found)h(immediately)g(follo)o(wing)195 -2186 y Fj(history)p 336 2186 14 2 v 16 w(expansion)p -547 2186 V 18 w(c)o(har)p Fp(.)j(The)d(default)f(is)h(space,)f(tab,)g -(newline,)h(carriage)f(return,)g(and)h(`)p Fo(=)p Fp('.)1773 -2318 y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p -422 2318 18 3 v 21 w(searc)n(h)p 599 2318 V 20 w(delimiter)p -843 2318 V 23 w(c)n(hars)195 2373 y Fp(The)13 b(list)h(of)f(additional) -h(c)o(haracters)e(whic)o(h)i(can)g(delimit)g(a)f(history)g(searc)o(h)g -(string,)g(in)h(addition)195 2428 y(to)h(space,)g(T)l(AB,)g(`)p -Fo(:)p Fp(')f(and)h(`)p Fo(?)p Fp(')g(in)h(the)f(case)g(of)g(a)g -(substring)g(searc)o(h.)20 b(The)c(default)f(is)h(empt)o(y)l(.)1773 -2560 y(V)l(ariable)-1861 b Fh(int)20 b Fg(history)p 351 -2560 V 20 w(quotes)p 533 2560 V 21 w(inhibit)p 717 2560 -V 23 w(expansion)195 2615 y Fp(If)15 b(non-zero,)f(single-quoted)j(w)o -(ords)c(are)i(not)f(scanned)h(for)f(the)h(history)g(expansion)g(c)o -(haracter.)195 2670 y(The)g(default)h(v)m(alue)h(is)e(0.)p -eop -%%Page: 11 13 -11 12 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)867 b(11)1773 149 y(V)l(ariable)-1861 b Fh(rl_linebuf_func_t) -22 b(*)d Fg(history)p 762 149 18 3 v 21 w(inhibit)p 946 -149 V 23 w(expansion)p 1216 149 V 20 w(function)195 204 -y Fp(This)e(should)h(b)q(e)f(set)g(to)f(the)g(address)h(of)f(a)h -(function)g(that)f(tak)o(es)g(t)o(w)o(o)f(argumen)o(ts:)22 -b(a)17 b Fo(char)d(*)195 259 y Fp(\()p Fj(string)t Fp(\))e(and)i(an)f -Fo(int)g Fp(index)i(in)o(to)e(that)f(string)i(\()p Fj(i)r -Fp(\).)19 b(It)14 b(should)g(return)f(a)g(non-zero)h(v)m(alue)g(if)g -(the)195 314 y(history)h(expansion)g(starting)f(at)g -Fj(string[i])i Fp(should)g(not)e(b)q(e)h(p)q(erformed;)g(zero)f(if)h -(the)g(expansion)195 369 y(should)i(b)q(e)g(done.)22 -b(It)16 b(is)h(in)o(tended)g(for)e(use)i(b)o(y)f(applications)h(lik)o -(e)g(Bash)f(that)g(use)g(the)g(history)195 423 y(expansion)g(c)o -(haracter)f(for)f(additional)j(purp)q(oses.)j(By)c(default,)f(this)h(v) -m(ariable)g(is)g(set)f(to)f Fo(NULL)p Fp(.)75 543 y Fn(2.5)33 -b(History)22 b(Programming)h(Example)137 637 y Fp(The)16 -b(follo)o(wing)g(program)e(demonstrates)g(simple)j(use)e(of)g(the)g -Fk(gnu)g Fp(History)g(Library)l(.)195 698 y Fo(#include)23 -b(<stdio.h>)195 750 y(#include)g(<readline/history.h>)195 -854 y(main)g(\(argc,)g(argv\))314 906 y(int)h(argc;)314 -958 y(char)g(**argv;)195 1010 y({)243 1061 y(char)f(line[1024],)f(*t;) -243 1113 y(int)h(len,)g(done)h(=)g(0;)243 1217 y(line[0])f(=)g(0;)243 -1321 y(using_history)f(\(\);)243 1373 y(while)h(\(!done\))290 -1425 y({)338 1477 y(printf)g(\("history$)g("\);)338 1528 -y(fflush)g(\(stdout\);)338 1580 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g -(\(line\))g(-)h(1,)f(stdin\);)338 1632 y(if)h(\(t)f(&&)h(*t\))386 -1684 y({)434 1736 y(len)f(=)h(strlen)f(\(t\);)434 1788 -y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 1840 y(t[len)h(-)f(1])h(=)g -('\\0';)386 1892 y(})338 1995 y(if)g(\(!t\))386 2047 -y(strcpy)f(\(line,)g("quit"\);)338 2151 y(if)h(\(line[0]\))386 -2203 y({)434 2255 y(char)f(*expansion;)434 2307 y(int)g(result;)434 -2411 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434 -2462 y(if)g(\(result\))481 2514 y(fprintf)g(\(stderr,)g("\045s\\n",)g -(expansion\);)434 2618 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h -(2\))481 2670 y({)p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fp(12)1324 b(GNU)15 b(History)g(Library)529 -149 y Fo(free)23 b(\(expansion\);)529 201 y(continue;)481 -253 y(})434 357 y(add_history)f(\(expansion\);)434 409 -y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h(1\);)434 -461 y(free)f(\(expansion\);)386 513 y(})338 616 y(if)h(\(strcmp)f -(\(line,)g("quit"\))g(==)g(0\))386 668 y(done)g(=)h(1;)338 -720 y(else)f(if)h(\(strcmp)f(\(line,)g("save"\))g(==)h(0\))386 -772 y(write_history)e(\("history_file"\);)338 824 y(else)h(if)h -(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386 876 y(read_history)e -(\("history_file"\);)338 928 y(else)h(if)h(\(strcmp)f(\(line,)g -("list"\))g(==)h(0\))386 980 y({)434 1032 y(register)e(HIST_ENTRY)h -(**the_list;)434 1083 y(register)f(int)i(i;)434 1187 -y(the_list)e(=)i(history_list)e(\(\);)434 1239 y(if)h(\(the_list\))481 -1291 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e(i++\))529 -1343 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g(history_base,)e -(the_list[i]->line\);)386 1395 y(})338 1447 y(else)h(if)h(\(strncmp)f -(\(line,)g("delete",)g(6\))g(==)h(0\))386 1499 y({)434 -1550 y(int)f(which;)434 1602 y(if)g(\(\(sscanf)g(\(line)g(+)h(6,)f -("\045d",)h(&which\)\))e(==)i(1\))481 1654 y({)529 1706 -y(HIST_ENTRY)f(*entry)g(=)g(remove_history)f(\(which\);)529 -1758 y(if)i(\(!entry\))577 1810 y(fprintf)f(\(stderr,)f("No)i(such)f -(entry)g(\045d\\n",)g(which\);)529 1862 y(else)577 1914 -y({)625 1966 y(free)g(\(entry->line\);)625 2017 y(free)g(\(entry\);)577 -2069 y(})481 2121 y(})434 2173 y(else)481 2225 y({)529 -2277 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)481 2329 y(})386 2381 y(})290 2433 y(})195 -2484 y(})p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fp(App)q(endix)17 b(A:)e(Concept)g(Index)1196 -b(13)75 149 y Fl(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75 -321 y Fn(A)75 383 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)8 -b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16 -b Fe(8)75 507 y Fn(E)75 568 y Fe(ev)o(en)o(t)d(designators)g -Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b -Fe(1)1012 321 y Fn(H)1012 431 y Fe(history)15 b(ev)o(en)o(ts)d -Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Fe(1)1012 500 y(history)15 b(expansion)8 b Fd(.)g(.)e(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)21 b Fe(1)1012 568 y(History)14 b(Searc)o(hing)6 -b Fd(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b -Fe(8)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fp(14)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: 15 17 -15 16 bop 75 -58 a Fp(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)919 b(15)75 149 y Fl(App)r(endix)25 -b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 321 y Fn(A)75 382 y Fc(add_histor)o(y)8 b -Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(6)75 428 y Fc(append_his)o(to)o(ry)8 b Fd(.)s(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)21 b Fe(9)75 557 y Fn(C)75 618 -y Fc(clear_hist)o(or)o(y)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)22 b Fe(6)75 664 y Fc(current_hi)o(st)o(ory)7 -b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b -Fe(7)75 793 y Fn(G)75 854 y Fc(get_histor)o(y_)o(eve)o(nt)5 -b Fd(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 b Fe(9)75 -984 y Fn(H)75 1044 y Fc(history_ar)o(g_)o(ext)o(ra)o(ct)5 -b Fd(.)s(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1090 y Fc(history_ba)o(se) -6 b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Fe(10)75 1136 y Fc(history_co)o(mm)o(ent)o(_c)o(har)s -Fd(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(10)75 1182 y Fc(history_ex)o(pa)o(nd)8 -b Fd(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Fe(9)75 1227 y Fc(history_ex)o(pa)o(nsi)o(on)o(_ch)o(ar)8 -b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)24 b Fe(10)75 1273 y Fc(history_ge)o(t)8 -b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(7)75 1319 y Fc(history_ge)o(t_)o(his)o(to)o(ry_)o(sta)o(te)6 -b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)22 b Fe(6)75 1364 y Fc(history_in)o(hi)o(bit)o(_e)o(xpa)o(nsi)o(on) -o(_fu)o(nc)o(tio)o(n)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)h(.)24 -b Fe(11)75 1410 y Fc(history_is)o(_s)o(tif)o(le)o(d)6 -b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(7)75 1456 -y Fc(history_le)o(ng)o(th)8 b Fd(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)21 b Fe(10)75 1501 y Fc(history_li)o(st)6 b Fd(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75 -1547 y Fc(history_ma)o(x_)o(ent)o(ri)o(es)t Fd(.)s(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)17 b Fe(10)75 1593 y Fc(history_no)o(_e)o(xpa)o(nd)o -(_ch)o(ars)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)23 b Fe(10)75 1638 y Fc(history_qu)o(ot)o(es_)o -(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)t Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)17 b Fe(10)75 1684 y Fc(history_se)o(ar)o(ch)8 -b Fd(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Fe(8)75 1730 y Fc(history_se)o(ar)o(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o -(rs)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 -b Fe(10)75 1776 y Fc(history_se)o(ar)o(ch_)o(po)o(s)6 -b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(8)75 1821 -y Fc(history_se)o(ar)o(ch_)o(pr)o(efi)o(x)s Fd(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)16 b Fe(8)75 1867 y Fc(history_se)o(t_)o(his)o(to)o(ry_) -o(sta)o(te)6 b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)22 b Fe(6)75 1913 y Fc(history_se)o(t_)o(pos)7 -b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b -Fe(7)1012 321 y Fc(history_sub)o(st)o(_ch)o(ar)t Fd(.)t(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(10)1012 368 y Fc(history_tok)o(en)o(ize) -6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)20 b Fe(9)1012 -414 y Fc(history_tot)o(al)o(_by)o(te)o(s)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)18 b Fe(7)1012 460 y Fc(history_tru)o(nc)o(ate)o(_f)o(ile)s -Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(9)1012 507 y Fc(history_wor)o(d_)o(del) -o(im)o(ite)o(rs)7 b Fd(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Fe(10)1012 640 y Fn(N)1012 -702 y Fc(next_histor)o(y)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)23 b Fe(7)1012 836 y Fn(P)1012 898 y -Fc(previous_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)20 b Fe(7)1012 1031 y Fn(R)1012 1094 y Fc(read_histor)o(y)7 -b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(8)1012 1140 y Fc(read_histor)o(y_)o(ran)o(ge)5 b -Fd(.)s(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Fe(8)1012 1186 -y Fc(remove_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)22 b Fe(6)1012 1233 y Fc(replace_his)o(to)o(ry_)o(en)o(try)s -Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1366 y Fn(S)1012 -1429 y Fc(stifle_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)22 b Fe(7)1012 1562 y Fn(U)1012 1624 -y Fc(unstifle_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)20 b Fe(7)1012 1671 y Fc(using_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(6)1012 1804 -y Fn(W)1012 1866 y Fc(where_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(7)1012 1913 y Fc(write_histo)o(ry)6 -b Fd(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Fe(8)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fp(16)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: -1 19 --1 18 bop 1862 -58 a Fp(i)75 149 y Fl(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fn(1)67 b(Using)22 b(History)h(In)n -(teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)h(.)31 b Fn(1)224 389 y Fp(1.1)45 b(History)15 -b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fp(1)374 444 y(1.1.1)44 -b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)26 b Fp(1)374 499 y(1.1.2)44 b(W)l(ord)15 -b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)19 b Fp(2)374 553 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8 -b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)19 b Fp(2)75 675 y Fn(2)67 b(Programming)23 -b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)38 b Fn(5)224 743 y Fp(2.1)45 b(In)o(tro)q(duction)16 -b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)24 b Fp(5)224 798 y(2.2)45 b(History)15 -b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fp(5)224 853 -y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 -b Fp(6)374 907 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e -(Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b -Fp(6)374 962 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d -Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)29 b Fp(6)374 1017 y(2.3.3)44 -b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c -Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fp(7)374 1072 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g -(List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)25 b Fp(7)374 1127 y(2.3.5)44 b(Searc)o(hing)16 -b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fp(8)374 1181 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6 -b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)20 b Fp(8)374 1236 y(2.3.7)44 -b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)24 b Fp(9)224 1291 y(2.4)45 b(History)15 b(V)l(ariables)6 -b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)21 b Fp(10)224 1346 y(2.5)45 b(History)15 -b(Programming)f(Example)7 b Fa(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fp(11)75 1467 y Fn(App)r(endix)i(A)67 b(Concept)22 -b(Index)17 b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)38 b Fn(13)75 1602 y(App)r(endix)24 b(B)67 -b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16 -b Fb(.)10 b(.)g(.)g(.)38 b Fn(15)p eop -%%Page: -2 20 --2 19 bop 75 -58 a Fp(ii)1346 b(GNU)15 b(History)g(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline-4.3.orig/doc/history_3.ps b/readline-4.3.orig/doc/history_3.ps deleted file mode 100644 index f5231a5..0000000 --- a/readline-4.3.orig/doc/history_3.ps +++ /dev/null @@ -1,800 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.16.1 -%%CreationDate: Mon Mar 18 10:17:27 2002 -%%DocumentNeededResources: font Times-Roman -%%+ font Times-Bold -%%+ font Times-Italic -%%DocumentSuppliedResources: procset grops 1.16 1 -%%Pages: 7 -%%PageOrder: Ascend -%%Orientation: Portrait -%%EndComments -%%BeginProlog -%%BeginResource: procset grops 1.16 1 -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/MF{ -findfont -[5 2 roll -0 3 1 roll -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}bind def -/DA{ -newpath arcn stroke -}bind def -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -/DL{ -SN -moveto -SN -lineto stroke -}bind def -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -/FL{ -currentgray exch setgray fill setgray -}bind def -/BL/fill load def -/LW/setlinewidth load def -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -}bind def -/PEND{ -clear -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%IncludeResource: font Times-Roman -%%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Italic -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE -/Times-Roman@0 ENC0/Times-Roman RE -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME) -.219 E F0(history \255 GNU History Library)108 96 Q F1(COPYRIGHT)72 -112.8 Q F0(The GNU History Library is Cop)108 124.8 Q -(yright \251 1989-2002 by the Free Softw)-.1 E(are F)-.1 E -(oundation, Inc.)-.15 E F1(DESCRIPTION)72 141.6 Q F0(Man)108 153.6 Q -2.81(yp)-.15 G .31(rograms read input from the user a line at a time.) --2.81 F .309(The GNU History library is able to k)5.309 F .309 -(eep track of)-.1 F .024(those lines, associate arbitrary data with eac\ -h line, and utilize information from pre)108 165.6 R .024 -(vious lines in composing)-.25 F(ne)108 177.6 Q 2.5(wo)-.25 G(nes.)-2.5 -E F1(HIST)72 199.2 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81 -E F0 .823(The history library supports a history e)108 211.2 R .822 -(xpansion feature that is identical to the history e)-.15 F .822 -(xpansion in)-.15 F/F2 10/Times-Bold@0 SF(bash.)3.322 E F0 -(This section describes what syntax features are a)108 223.2 Q -.25(va) --.2 G(ilable.).25 E 1.305(History e)108 240 R 1.305 -(xpansions introduce w)-.15 F 1.306(ords from the history list into the\ - input stream, making it easy to repeat)-.1 F .21 -(commands, insert the ar)108 252 R .21(guments to a pre)-.18 F .209 -(vious command into the current input line, or \214x errors in pre)-.25 -F(vious)-.25 E(commands quickly)108 264 Q(.)-.65 E 1.296(History e)108 -280.8 R 1.297(xpansion is usually performed immediately after a complet\ -e line is read.)-.15 F 1.297(It tak)6.297 F 1.297(es place in tw)-.1 F -(o)-.1 E 2.855(parts. The)108 292.8 R .354(\214rst is to determine whic\ -h line from the history list to use during substitution.)2.855 F .354 -(The second is to)5.354 F .116 -(select portions of that line for inclusion into the current one.)108 -304.8 R .117(The line selected from the history is the)5.116 F/F3 10 -/Times-Italic@0 SF -.15(ev)2.617 G(ent).15 E F0(,)A .846 -(and the portions of that line that are acted upon are)108 316.8 R F3 -(wor)3.346 E(ds)-.37 E F0 5.846(.V)C(arious)-6.956 E F3(modi\214er)3.346 -E(s)-.1 E F0 .846(are a)3.346 F -.25(va)-.2 G .845(ilable to manipulate) -.25 F .304(the selected w)108 328.8 R 2.804(ords. The)-.1 F .304 -(line is brok)2.804 F .304(en into w)-.1 F .304(ords in the same f)-.1 F -.304(ashion as)-.1 F F2(bash)2.804 E F0 .305 -(does when reading input, so)2.804 F .539(that se)108 340.8 R -.15(ve) --.25 G .539(ral w).15 F .539(ords that w)-.1 F .539 -(ould otherwise be separated are considered one w)-.1 F .538 -(ord when surrounded by quotes)-.1 F .307(\(see the description of)108 -352.8 R F2(history_tok)2.807 E(enize\(\))-.1 E F0(belo)2.807 E 2.807 -(w\). History)-.25 F -.15(ex)2.807 G .307 -(pansions are introduced by the appearance of).15 F .52(the history e) -108 364.8 R .52(xpansion character)-.15 F 3.02(,w)-.4 G .52(hich is) --3.02 F F2(!)3.853 E F0 .52(by def)3.853 F 3.02(ault. Only)-.1 F .52 -(backslash \()3.02 F F2(\\).833 E F0 3.02(\)a).833 G .52 -(nd single quotes can quote the)-3.02 F(history e)108 376.8 Q -(xpansion character)-.15 E(.)-.55 E F2(Ev)87 393.6 Q(ent Designators)-.1 -E F0(An e)108 405.6 Q -.15(ve)-.25 G(nt designator is a reference to a \ -command line entry in the history list.).15 E F2(!)108 422.4 Q F0 -(Start a history substitution, e)32.67 E(xcept when follo)-.15 E -(wed by a)-.25 E F2(blank)2.5 E F0 2.5(,n)C -.25(ew)-2.5 G -(line, = or \(.).25 E F2(!)108 434.4 Q F3(n)A F0(Refer to command line) -27.67 E F3(n)2.5 E F0(.).24 E F2<21ad>108 446.4 Q F3(n)A F0 -(Refer to the current command line minus)21.97 E F3(n)2.5 E F0(.).24 E -F2(!!)108 458.4 Q F0(Refer to the pre)29.34 E(vious command.)-.25 E -(This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 470.4 Q F3(string) -A F0(Refer to the most recent command starting with)9.33 E F3(string)2.5 -E F0(.).22 E F2(!?)108 482.4 Q F3(string)A F2([?])A F0 1.057 -(Refer to the most recent command containing)144 494.4 R F3(string)3.557 -E F0 6.057(.T).22 G 1.057(he trailing)-6.057 F F2(?)3.557 E F0 1.057 -(may be omitted if)3.557 F F3(string)3.557 E F0(is)3.557 E(follo)144 -506.4 Q(wed immediately by a ne)-.25 E(wline.)-.25 E/F4 12/Times-Bold@0 -SF(^)108 523.4 Q F3(string1)-5 I F4(^)5 I F3(string2)-5 I F4(^)5 I F0 -2.66(Quick substitution.)144 530.4 R 2.66 -(Repeat the last command, replacing)7.66 F F3(string1)5.16 E F0(with) -5.16 E F3(string2)5.16 E F0 7.66(.E).02 G(qui)-7.66 E -.25(va)-.25 G -2.66(lent to).25 F -.74(``)144 542.4 S(!!:s/).74 E F3(string1)A F0(/)A -F3(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0 -(belo)2.5 E(w\).)-.25 E F2(!#)108 554.4 Q F0 -(The entire command line typed so f)27.67 E(ar)-.1 E(.)-.55 E F2 -.75 -(Wo)87 571.2 S(rd Designators).75 E F0 -.8(Wo)108 583.2 S 1.313 -(rd designators are used to select desired w).8 F 1.314(ords from the e) --.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.314 -(separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F -.53(from the w)108 595.2 R .529(ord designator)-.1 F 5.529(.I)-.55 G -3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 -(ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2 -($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F2<ad>3.029 E F0 3.029(,o)C(r) --3.029 E F2(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3 -(are numbered from the be)108 607.2 R 1.3 -(ginning of the line, with the \214rst w)-.15 F 1.301 -(ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8 -F(inserted into the current line separated by single spaces.)108 619.2 Q -F2 2.5(0\()108 636 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 648 Q 2.5 -(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E F3 -(n)108 660 Q F0(The)31 E F3(n)2.5 E F0(th w)A(ord.)-.1 E F2(^)108 672 Q -F0(The \214rst ar)32.67 E 2.5(gument. That)-.18 F(is, w)2.5 E(ord 1.)-.1 -E F2($)108 684 Q F0(The last ar)31 E(gument.)-.18 E F2(%)108 696 Q F0 -(The w)26 E(ord matched by the most recent `?)-.1 E F3(string)A F0 -(?' search.)A F3(x)108 708 Q F2<ad>A F3(y)A F0 2.5(Ar)21.42 G(ange of w) --2.5 E(ords; `\255)-.1 E F3(y)A F0 2.5('a)C(bbre)-2.5 E(viates `0\255) --.25 E F3(y)A F0('.)A(GNU History 4.3)72 768 Q(2002 January 31)131.79 E -(1)195.95 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(*)108 84 Q F0 .316 -(All of the w)31 F .316(ords b)-.1 F .316(ut the zeroth.)-.2 F .315 -(This is a synon)5.315 F .315(ym for `)-.15 F/F2 10/Times-Italic@0 SF -(1\255$)A F0 2.815('. It)B .315(is not an error to use)2.815 F F1(*) -2.815 E F0 .315(if there is)2.815 F(just one w)144 96 Q(ord in the e)-.1 -E -.15(ve)-.25 G(nt; the empty string is returned in that case.).15 E F1 -(x*)108 108 Q F0(Abbre)26 E(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1 -<78ad>108 120 Q F0(Abbre)25.3 E(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5 -E(e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E -(If a w)108 136.8 Q(ord designator is supplied without an e)-.1 E -.15 -(ve)-.25 G(nt speci\214cation, the pre).15 E -(vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1 -(Modi\214ers)87 153.6 Q F0 .183(After the optional w)108 165.6 R .183 -(ord designator)-.1 F 2.683(,t)-.4 G .184 -(here may appear a sequence of one or more of the follo)-2.683 F .184 -(wing modi\214ers,)-.25 F(each preceded by a `:'.)108 177.6 Q F1(h)108 -194.4 Q F0(Remo)30.44 E .3 -.15(ve a t)-.15 H -(railing \214le name component, lea).15 E(ving only the head.)-.2 E F1 -(t)108 206.4 Q F0(Remo)32.67 E .3 -.15(ve a)-.15 H -(ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r) -108 218.4 Q F0(Remo)31.56 E .3 -.15(ve a t)-.15 H(railing suf).15 E -(\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E -(ving the basename.)-.2 E F1(e)108 230.4 Q F0(Remo)31.56 E .3 -.15(ve a) --.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 242.4 -Q F0(Print the ne)30.44 E 2.5(wc)-.25 G(ommand b)-2.5 E(ut do not e)-.2 -E -.15(xe)-.15 G(cute it.).15 E F1(q)108 254.4 Q F0 -(Quote the substituted w)30.44 E(ords, escaping further substitutions.) --.1 E F1(x)108 266.4 Q F0(Quote the substituted w)31 E(ords as with)-.1 -E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks) -2.5 E F0(and ne)2.5 E(wlines.)-.25 E F1(s/)108 278.4 Q F2(old)A F1(/)A -F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 290.4 Q F2(ne)2.814 E(w)-.15 E -F0 .314(for the \214rst occurrence of)2.814 F F2(old)2.814 E F0 .314 -(in the e)2.814 F -.15(ve)-.25 G .314(nt line.).15 F(An)5.314 E 2.814 -(yd)-.15 G .314(elimiter can be used in place)-2.814 F .616(of /.)144 -302.4 R .617 -(The \214nal delimiter is optional if it is the last character of the e) -5.616 F -.15(ve)-.25 G .617(nt line.).15 F .617(The delimiter may)5.617 -F .75(be quoted in)144 314.4 R F2(old)3.25 E F0(and)3.25 E F2(ne)3.25 E -(w)-.15 E F0 .75(with a single backslash.)3.25 F .749(If & appears in) -5.75 F F2(ne)3.249 E(w)-.15 E F0 3.249(,i).31 G 3.249(ti)-3.249 G 3.249 -(sr)-3.249 G .749(eplaced by)-3.249 F F2(old)3.249 E F0 5.749(.A).77 G -.369(single backslash will quote the &.)144 326.4 R(If)5.369 E F2(old) -2.869 E F0 .37(is null, it is set to the last)2.869 F F2(old)2.87 E F0 -.37(substituted, or)2.87 F 2.87(,i)-.4 G 2.87(fn)-2.87 G 2.87(op)-2.87 G -(re)-2.87 E(vi-)-.25 E(ous history substitutions took place, the last) -144 338.4 Q F2(string)2.5 E F0(in a)2.5 E F1(!?)2.5 E F2(string)A F1 -([?])A F0(search.)5 E F1(&)108 350.4 Q F0(Repeat the pre)27.67 E -(vious substitution.)-.25 E F1(g)108 362.4 Q F0 .398 -(Cause changes to be applied o)31 F -.15(ve)-.15 G 2.898(rt).15 G .398 -(he entire e)-2.898 F -.15(ve)-.25 G .398(nt line.).15 F .397 -(This is used in conjunction with `)5.398 F F1(:s)A F0 2.897('\()C -(e.g.,)-2.897 E(`)144 374.4 Q F1(:gs/)A F2(old)A F1(/)A F2(ne)A(w)-.15 E -F1(/)A F0 1.218('\) or `)B F1(:&)A F0 3.718('. If)B 1.218(used with `) -3.718 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.219 -(elimiter can be used in place of /, and the \214nal)-3.718 F -(delimiter is optional if it is the last character of the e)144 386.4 Q --.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(PR)72 403.2 Q -(OGRAMMING WITH HIST)-.329 E(OR)-.197 E 2.738(YF)-.383 G(UNCTIONS)-2.738 -E F0(This section describes ho)108 415.2 Q 2.5(wt)-.25 G 2.5(ou)-2.5 G -(se the History library in other programs.)-2.5 E F1(Intr)87 432 Q -(oduction to History)-.18 E F0 .797 -(The programmer using the History library has a)108 444 R -.25(va)-.2 G -.796(ilable functions for remembering lines on a history list,).25 F -.307(associating arbitrary data with a line, remo)108 456 R .308 -(ving lines from the list, searching through the list for a line con-) --.15 F .303(taining an arbitrary te)108 468 R .303 -(xt string, and referencing an)-.15 F 2.803(yl)-.15 G .303 -(ine in the list directly)-2.803 F 5.303(.I)-.65 G 2.803(na)-5.303 G -.303(ddition, a history)-2.803 F F2 -.2(ex)2.802 G(pansion).2 E F0 -(function is a)108 480 Q -.25(va)-.2 G(ilable which pro).25 E -(vides for a consistent user interf)-.15 E(ace across dif)-.1 E -(ferent programs.)-.25 E .059(The user using programs written with the \ -History library has the bene\214t of a consistent user interf)108 496.8 -R .059(ace with a)-.1 F .918(set of well-kno)108 508.8 R .917 -(wn commands for manipulating the te)-.25 F .917(xt of pre)-.15 F .917 -(vious lines and using that te)-.25 F .917(xt in ne)-.15 F 3.417(wc)-.25 -G(om-)-3.417 E 4.183(mands. The)108 520.8 R 1.684(basic history manipul\ -ation commands are identical to the history substitution pro)4.183 F -1.684(vided by)-.15 F F1(bash)108 532.8 Q F0(.)A .904 -(If the programmer desires, he can use the Readline library)108 549.6 R -3.403(,w)-.65 G .903(hich includes some history manipulation by)-3.403 F -(def)108 561.6 Q(ault, and has the added adv)-.1 E -(antage of command line editing.)-.25 E .39(Before declaring an)108 -578.4 R 2.89(yf)-.15 G .39(unctions using an)-2.89 F 2.89(yf)-.15 G .39 -(unctionality the History library pro)-2.89 F .39 -(vides in other code, an appli-)-.15 F .067 -(cation writer should include the \214le)108 590.4 R F2(<r)4.233 E -(eadline/history)-.37 E(.h>)-.55 E F0 .067(in an)4.233 F 2.566<798c>-.15 -G .066(le that uses the History library')-2.566 F 2.566(sf)-.55 G -(eatures.)-2.566 E .538(It supplies e)108 602.4 R .538 -(xtern declarations for all of the library')-.15 F 3.038(sp)-.55 G .538 -(ublic functions and v)-3.038 F .539(ariables, and declares all of the) --.25 F(public data structures.)108 614.4 Q F1(History Storage)87 643.2 Q -F0(The history list is an array of history entries.)108 655.2 Q 2.5(Ah)5 -G(istory entry is declared as follo)-2.5 E(ws:)-.25 E F2(typedef void *) -108 672 Q F1(histdata_t;)2.5 E F0(typedef struct _hist_entry {)108 688.8 -Q(char *line;)113 700.8 Q(histdata_t data;)113 712.8 Q 2.5(}H)108 724.8 -S(IST_ENTR)-2.5 E -.92(Y;)-.65 G(GNU History 4.3)72 768 Q -(2002 January 31)131.79 E(2)195.95 E EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E -(The history list itself might therefore be declared as)108 84 Q/F1 10 -/Times-Italic@0 SF(HIST_ENTR)108 100.8 Q 2.5(Y*)-.18 G(*)-2.5 E/F2 10 -/Times-Bold@0 SF(the_history_list;)2.5 E F0(The state of the History li\ -brary is encapsulated into a single structure:)108 117.6 Q(/*)108 134.4 -Q 2.5(*As)110.5 146.4 S -(tructure used to pass around the current state of the history)-2.5 E(.) --.65 E(*/)110.5 158.4 Q(typedef struct _hist_state {)108 170.4 Q -(HIST_ENTR)113 182.4 Q 2.5(Y*)-.65 G -(*entries; /* Pointer to the entries themselv)-2.5 E(es. */)-.15 E -(int of)113 194.4 Q 25(fset; /*)-.25 F -(The location pointer within this array)2.5 E 2.5(.*)-.65 G(/)-2.5 E -(int length;)113 206.4 Q(/* Number of elements within this array)27.5 E -2.5(.*)-.65 G(/)-2.5 E(int size;)113 218.4 Q -(/* Number of slots allocated to this array)32.5 E 2.5(.*)-.65 G(/)-2.5 -E(int \215ags;)113 230.4 Q 2.5(}H)108 242.4 S(IST)-2.5 E(OR)-.18 E(Y_ST) --.65 E -1.11(AT)-.93 G(E;)1.11 E(If the \215ags member includes)108 -259.2 Q F2(HS_STIFLED)2.5 E F0 2.5(,t)C(he history has been sti\215ed.) --2.5 E/F3 10.95/Times-Bold@0 SF(History Functions)72 276 Q F0 -(This section describes the calling sequence for the v)108 288 Q -(arious functions e)-.25 E(xported by the GNU History library)-.15 E(.) --.65 E F2(Initializing History and State Management)87 304.8 Q F0 1.274 -(This section describes functions used to initialize and manage the sta\ -te of the History library when you)108 316.8 R -.1(wa)108 328.8 S -(nt to use the history functions in your program.).1 E F1(void)108 352.8 -Q F2(using_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Be)108 -364.8 Q(gin a session in which the history functions might be used.)-.15 -E(This initializes the interacti)5 E .3 -.15(ve v)-.25 H(ariables.)-.1 E -F1(HIST)108 388.8 Q(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5(E*).37 G F2 -(history_get_history_state)A F0(\()4.166 E F1(void)A F0(\))1.666 E -(Return a structure describing the current state of the input history) -108 400.8 Q(.)-.65 E F1(void)108 424.8 Q F2(history_set_history_state) -2.5 E F0(\()4.166 E F1(HIST)A(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5 -(E*).37 G(state)-2.5 E F0(\))1.666 E -(Set the state of the history list according to)108 436.8 Q F1(state)2.5 -E F0(.)A F2(History List Management)87 465.6 Q F0 -(These functions manage indi)108 477.6 Q(vidual entries on the history \ -list, or set parameters managing the list itself.)-.25 E F1(void)108 -501.6 Q F2(add_history)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 -E F0(\))1.666 E(Place)108 513.6 Q F1(string)2.5 E F0 -(at the end of the history list.)2.5 E -(The associated data \214eld \(if an)5 E(y\) is set to)-.15 E F2(NULL) -2.5 E F0(.)A F1(HIST_ENTR)108 537.6 Q 2.5(Y*)-.18 G F2 -.18(re)C(mo).18 -E -.1(ve)-.1 G(_history).1 E F0(\()4.166 E F1(int whic)A(h)-.15 E F0(\)) -1.666 E(Remo)108 549.6 Q .352 -.15(ve h)-.15 H .052(istory entry at of) -.15 F(fset)-.25 E F1(whic)2.553 E(h)-.15 E F0 .053(from the history) -2.553 F 5.053(.T)-.65 G .053(he remo)-5.053 F -.15(ve)-.15 G 2.553(de) -.15 G .053(lement is returned so you can free the)-2.553 F -(line, data, and containing structure.)108 561.6 Q F1(HIST_ENTR)108 -585.6 Q 2.5(Y*)-.18 G F2 -.18(re)C(place_history_entry).18 E F0(\()4.166 -E F1(int whic)A -.834(h, const)-.15 F -.15(ch)2.5 G(ar *line).15 E 1.666 -(,h)-.1 G(istdata_t data)-1.666 E F0(\))3.332 E(Mak)108 597.6 Q 2.868 -(et)-.1 G .368(he history entry at of)-2.868 F(fset)-.25 E F1(whic)2.868 -E(h)-.15 E F0(ha)2.868 E -.15(ve)-.2 G F1(line)3.018 E F0(and)2.868 E F1 -(data)2.868 E F0 5.367(.T)C .367 -(his returns the old entry so you can dispose of)-5.367 F(the data.)108 -609.6 Q(In the case of an in)5 E -.25(va)-.4 G(lid).25 E F1(whic)2.5 E -(h)-.15 E F0 2.5(,a)C F2(NULL)A F0(pointer is returned.)2.5 E F1(void) -108 633.6 Q F2(clear_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E -(Clear the history list by deleting all the entries.)108 645.6 Q F1 -(void)108 669.6 Q F2(sti\215e_history)2.5 E F0(\()4.166 E F1(int max)A -F0(\))1.666 E(Sti\215e the history list, remembering only the last)108 -681.6 Q F1(max)2.5 E F0(entries.)2.5 E F1(int)108 705.6 Q F2 -(unsti\215e_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .46 -(Stop sti\215ing the history)108 717.6 R 5.46(.T)-.65 G .46 -(his returns the pre)-5.46 F .46 -(viously-set maximum number of history entries \(as set by)-.25 F F2 -(sti-)2.96 E(\215e_history\(\))108 729.6 Q F0 2.5(\). history)B -.1(wa) -2.5 G 2.5(ss).1 G 2.5(ti\215ed. The)-2.5 F -.25(va)2.5 G(lue is positi) -.25 E .3 -.15(ve i)-.25 H 2.5(ft).15 G(he history w)-2.5 E -(as sti\215ed, ne)-.1 E -.05(ga)-.15 G(ti).05 E .3 -.15(ve i)-.25 H 2.5 -(fi).15 G 2.5(tw)-2.5 G(asn')-2.6 E(t.)-.18 E(GNU History 4.3)72 768 Q -(2002 January 31)131.79 E(3)195.95 E EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF(int)108 84 Q/F2 10 -/Times-Bold@0 SF(history_is_sti\215ed)2.5 E F0(\()4.166 E F1(void)A F0 -(\))1.666 E -(Returns non-zero if the history is sti\215ed, zero if it is not.)108 96 -Q F2(Inf)87 124.8 Q(ormation About the History List)-.25 E F0(These fun\ -ctions return information about the entire history list or indi)108 -136.8 Q(vidual list entries.)-.25 E F1(HIST_ENTR)108 160.8 Q 2.5(Y*)-.18 -G(*)-2.5 E F2(history_list)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E -.708(Return a)108 172.8 R F2(NULL)3.208 E F0 .708(terminated array of) -3.208 F F1(HIST_ENTR)3.208 E 3.208(Y*)-.18 G F0 .708 -(which is the current input history)B 5.707(.E)-.65 G .707 -(lement 0 of this)-5.707 F(list is the be)108 184.8 Q(ginning of time.) --.15 E(If there is no history)5 E 2.5(,r)-.65 G(eturn)-2.5 E F2(NULL)2.5 -E F0(.)A F1(int)108 208.8 Q F2(wher)2.5 E(e_history)-.18 E F0(\()4.166 E -F1(void)A F0(\))1.666 E(Returns the of)108 220.8 Q -(fset of the current history element.)-.25 E F1(HIST_ENTR)108 244.8 Q -2.5(Y*)-.18 G F2(curr)A(ent_history)-.18 E F0(\()4.166 E F1(void)A F0 -(\))1.666 E 1.373 -(Return the history entry at the current position, as determined by)108 -256.8 R F2(wher)3.873 E(e_history\(\))-.18 E F0 6.373(.I)C 3.873(ft) --6.373 G 1.374(here is no entry)-3.873 F(there, return a)108 268.8 Q F2 -(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(HIST_ENTR)108 292.8 Q 2.5(Y*) --.18 G F2(history_get)A F0(\()4.166 E F1(int of)A(fset)-.18 E F0(\)) -1.666 E .288(Return the history entry at position)108 304.8 R F1(of) -2.787 E(fset)-.18 E F0 2.787(,s)C .287(tarting from)-2.787 F F2 -(history_base)2.787 E F0 5.287(.I)C 2.787(ft)-5.287 G .287 -(here is no entry there, or if)-2.787 F F1(of)2.787 E(fset)-.18 E F0 -(is greater than the history length, return a)108 316.8 Q F2(NULL)2.5 E -F0(pointer)2.5 E(.)-.55 E F1(int)108 340.8 Q F2(history_total_bytes)2.5 -E F0(\()4.166 E F1(void)A F0(\))1.666 E .391 -(Return the number of bytes that the primary history entries are using.) -108 352.8 R .392(This function returns the sum of the)5.392 F -(lengths of all the lines in the history)108 364.8 Q(.)-.65 E F2(Mo)87 -393.6 Q(ving Ar)-.1 E(ound the History List)-.18 E F0 -(These functions allo)108 405.6 Q 2.5(wt)-.25 G(he current inde)-2.5 E -2.5(xi)-.15 G(nto the history list to be set or changed.)-2.5 E F1(int) -108 429.6 Q F2(history_set_pos)2.5 E F0(\()4.166 E F1(int pos)A F0(\)) -1.666 E .79(Set the current history of)108 441.6 R .79(fset to)-.25 F F1 -(pos)3.29 E F0 3.29(,a)C 3.29(na)-3.29 G .79(bsolute inde)-3.29 F 3.29 -(xi)-.15 G .79(nto the list.)-3.29 F .79(Returns 1 on success, 0 if)5.79 -F F1(pos)3.29 E F0 .79(is less)3.29 F -(than zero or greater than the number of history entries.)108 453.6 Q F1 -(HIST_ENTR)108 477.6 Q 2.5(Y*)-.18 G F2(pr)A -.15(ev)-.18 G -(ious_history).15 E F0(\()4.166 E F1(void)A F0(\))1.666 E .207 -(Back up the current history of)108 489.6 R .207(fset to the pre)-.25 F -.207(vious history entry)-.25 F 2.708(,a)-.65 G .208 -(nd return a pointer to that entry)-2.708 F 5.208(.I)-.65 G 2.708(ft) --5.208 G .208(here is)-2.708 F(no pre)108 501.6 Q(vious entry)-.25 E 2.5 -(,r)-.65 G(eturn a)-2.5 E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1 -(HIST_ENTR)108 525.6 Q 2.5(Y*)-.18 G F2(next_history)A F0(\()4.166 E F1 -(void)A F0(\))1.666 E(Mo)108 537.6 Q 1.047 -.15(ve t)-.15 H .747 -(he current history of).15 F .747(fset forw)-.25 F .746(ard to the ne) --.1 F .746(xt history entry)-.15 F 3.246(,a)-.65 G .746 -(nd return the a pointer to that entry)-3.246 F 5.746(.I)-.65 G(f)-5.746 -E(there is no ne)108 549.6 Q(xt entry)-.15 E 2.5(,r)-.65 G(eturn a)-2.5 -E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F2(Sear)87 578.4 Q -(ching the History List)-.18 E F0 .005(These functions allo)108 590.4 R -2.505(ws)-.25 G .006(earching of the history list for entries containin\ -g a speci\214c string.)-2.505 F .006(Searching may be)5.006 F 1.452 -(performed both forw)108 602.4 R 1.452(ard and backw)-.1 F 1.451 -(ard from the current history position.)-.1 F 1.451(The search may be) -6.451 F F1(anc)3.951 E(hor)-.15 E(ed)-.37 E F0(,)A -(meaning that the string must match at the be)108 614.4 Q -(ginning of the history entry)-.15 E(.)-.65 E F1(int)108 638.4 Q F2 -(history_sear)2.5 E(ch)-.18 E F0(\()4.166 E F1(const c)A(har *string) --.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))1.666 E .155 -(Search the history for)108 650.4 R F1(string)2.655 E F0 2.656(,s)C .156 -(tarting at the current history of)-2.656 F 2.656(fset. If)-.25 F F1 -(dir)2.656 E(ection)-.37 E F0 .156(is less than 0, then the search)2.656 -F .802(is through pre)108 662.4 R .802 -(vious entries, otherwise through subsequent entries.)-.25 F(If)5.801 E -F1(string)3.301 E F0 .801(is found, then the current his-)3.301 F .064 -(tory inde)108 674.4 R 2.564(xi)-.15 G 2.564(ss)-2.564 G .064 -(et to that history entry)-2.564 F 2.564(,a)-.65 G .064(nd the v)-2.564 -F .064(alue returned is the of)-.25 F .064 -(fset in the line of the entry where)-.25 F F1(string)2.565 E F0 -.1(wa) -108 686.4 S 2.5(sf).1 G 2.5(ound. Otherwise,)-2.5 F -(nothing is changed, and a -1 is returned.)2.5 E F1(int)108 710.4 Q F2 -(history_sear)2.5 E(ch_pr)-.18 E(e\214x)-.18 E F0(\()4.166 E F1(const c) -A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\)) -1.666 E .684(Search the history for)108 722.4 R F1(string)3.183 E F0 -3.183(,s)C .683(tarting at the current history of)-3.183 F 3.183 -(fset. The)-.25 F .683(search is anchored: matching lines)3.183 F -(GNU History 4.3)72 768 Q(2002 January 31)131.79 E(4)195.95 E EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E 1.063(must be)108 84 R 1.063(gin with)-.15 F/F1 -10/Times-Italic@0 SF(string)3.563 E F0 6.063(.I)C(f)-6.063 E F1(dir) -3.563 E(ection)-.37 E F0 1.064 -(is less than 0, then the search is through pre)3.563 F 1.064 -(vious entries, otherwise)-.25 F 1.115(through subsequent entries.)108 -96 R(If)6.115 E F1(string)3.615 E F0 1.115 -(is found, then the current history inde)3.615 F 3.614(xi)-.15 G 3.614 -(ss)-3.614 G 1.114(et to that entry)-3.614 F 3.614(,a)-.65 G 1.114 -(nd the)-3.614 F(return v)108 108 Q(alue is 0.)-.25 E -(Otherwise, nothing is changed, and a -1 is returned.)5 E F1(int)108 132 -Q/F2 10/Times-Bold@0 SF(history_sear)2.5 E(ch_pos)-.18 E F0(\()4.166 E -F1(const c)A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E -.834 -(ection, int)-.37 F(pos)2.5 E F0(\))3.332 E .603(Search for)108 144 R F1 -(string)3.103 E F0 .603(in the history list, starting at)3.103 F F1(pos) -3.104 E F0 3.104(,a)C 3.104(na)-3.104 G .604(bsolute inde)-3.104 F 3.104 -(xi)-.15 G .604(nto the list.)-3.104 F(If)5.604 E F1(dir)3.104 E(ection) --.37 E F0 .604(is ne)3.104 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(,) -.15 E .608(the search proceeds backw)108 156 R .608(ard from)-.1 F F1 -(pos)3.108 E F0 3.108(,o)C .608(therwise forw)-3.108 F 3.108 -(ard. Returns)-.1 F .608(the absolute inde)3.108 F 3.108(xo)-.15 G 3.108 -(ft)-3.108 G .608(he history ele-)-3.108 F(ment where)108 168 Q F1 -(string)2.5 E F0 -.1(wa)2.5 G 2.5(sf).1 G(ound, or -1 otherwise.)-2.5 E -F2(Managing the History File)87 196.8 Q F0 .035(The History library can\ - read the history from and write it to a \214le.)108 208.8 R .036 -(This section documents the functions for)5.035 F -(managing a history \214le.)108 220.8 Q F1(int)108 244.8 Q F2 -.18(re) -2.5 G(ad_history).18 E F0(\()4.166 E F1(const c)A(har *\214lename)-.15 E -F0(\))1.666 E .151(Add the contents of)108 256.8 R F1(\214lename)2.651 E -F0 .151(to the history list, a line at a time.)2.651 F(If)5.15 E F1 -(\214lename)2.65 E F0(is)2.65 E F2(NULL)2.65 E F0 2.65(,t)C .15 -(hen read from)-2.65 F F1(~/.his-)2.65 E(tory)108 268.8 Q F0 5(.R)C -(eturns 0 if successful, or)-5 E F2(err)2.5 E(no)-.15 E F0(if not.)2.5 E -F1(int)108 292.8 Q F2 -.18(re)2.5 G(ad_history_range).18 E F0(\()4.166 E -F1(const c)A(har *\214lename)-.15 E 1.666(,i)-.1 G(nt fr)-1.666 E -.834 -(om, int)-.45 F(to)2.5 E F0(\))3.332 E .052(Read a range of lines from) -108 304.8 R F1(\214lename)2.553 E F0 2.553(,a)C .053 -(dding them to the history list.)-2.553 F .053(Start reading at line) -5.053 F F1(fr)2.553 E(om)-.45 E F0 .053(and end at)2.553 F F1(to)2.553 E -F0(.)A(If)108 316.8 Q F1(fr)2.889 E(om)-.45 E F0 .389 -(is zero, start at the be)2.889 F 2.889(ginning. If)-.15 F F1(to)2.889 E -F0 .389(is less than)2.889 F F1(fr)2.889 E(om)-.45 E F0 2.889(,t)C .388 -(hen read until the end of the \214le.)-2.889 F(If)5.388 E F1 -(\214lename)2.888 E F0(is)108 328.8 Q F2(NULL)2.5 E F0 2.5(,t)C -(hen read from)-2.5 E F1(~/.history)2.5 E F0 5(.R)C -(eturns 0 if successful, or)-5 E F2(err)2.5 E(no)-.15 E F0(if not.)2.5 E -F1(int)108 352.8 Q F2(write_history)2.5 E F0(\()4.166 E F1(const c)A -(har *\214lename)-.15 E F0(\))1.666 E .961(Write the current history to) -108 364.8 R F1(\214lename)3.461 E F0 3.461(,o)C -.15(ve)-3.611 G -(rwriting).15 E F1(\214lename)3.461 E F0 .961(if necessary)3.461 F 5.961 -(.I)-.65 G(f)-5.961 E F1(\214lename)3.462 E F0(is)3.462 E F2(NULL)3.462 -E F0 3.462(,t)C .962(hen write)-3.462 F(the history list to)108 376.8 Q -F1(~/.history)2.5 E F0 5(.R)C(eturns 0 on success, or)-5 E F2(err)2.5 E -(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F1(int)108 412.8 Q -F2(append_history)2.5 E F0(\()4.166 E F1(int nelements,)A(const c)1.666 -E(har *\214lename)-.15 E F0(\))1.666 E .839(Append the last)108 424.8 R -F1(nelements)3.339 E F0 .839(of the history list to)3.339 F F1 -(\214lename)3.339 E F0 5.839(.I)C(f)-5.839 E F1(\214lename)3.339 E F0 -(is)3.339 E F2(NULL)3.339 E F0 3.339(,t)C .838(hen append to)-3.339 F F1 -(~/.history)3.338 E F0(.)A(Returns 0 on success, or)108 436.8 Q F2(err) -2.5 E(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F1(int)108 -460.8 Q F2(history_truncate_\214le)2.5 E F0(\()4.166 E F1(const c)A -(har *\214lename)-.15 E 1.666(,i)-.1 G(nt nlines)-1.666 E F0(\))1.666 E --.35(Tr)108 472.8 S .38(uncate the history \214le).35 F F1(\214lename) -2.88 E F0 2.88(,l)C(ea)-2.88 E .38(ving only the last)-.2 F F1(nlines) -2.881 E F0 2.881(lines. If)2.881 F F1(\214lename)2.881 E F0(is)2.881 E -F2(NULL)2.881 E F0 2.881(,t)C(hen)-2.881 E F1(~/.history)2.881 E F0(is) -2.881 E 2.5(truncated. Returns)108 484.8 R 2.5(0o)2.5 G 2.5(ns)-2.5 G -(uccess, or)-2.5 E F2(err)2.5 E(no)-.15 E F0(on f)2.5 E(ailure.)-.1 E F2 -(History Expansion)87 513.6 Q F0(These functions implement history e)108 -525.6 Q(xpansion.)-.15 E F1(int)108 549.6 Q F2(history_expand)2.5 E F0 -(\()4.166 E F1 -.15(ch)C(ar *string).15 E 1.666(,c)-.1 G(har **output) --1.816 E F0(\))1.666 E(Expand)108 561.6 Q F1(string)2.5 E F0 2.5(,p)C -(lacing the result into)-2.5 E F1(output)2.5 E F0 2.5(,ap)C -(ointer to a string.)-2.5 E(Returns:)5 E 31(0I)144 573.6 S 3.066(fn)-31 -G 3.066(oe)-3.066 G .566(xpansions took place \(or)-3.216 F 3.065(,i)-.4 -G 3.065(ft)-3.065 G .565(he only change in the te)-3.065 F .565(xt w) --.15 F .565(as the remo)-.1 F -.25(va)-.15 G 3.065(lo).25 G 3.065(fe) --3.065 G(scape)-3.065 E(characters preceding the history e)180 585.6 Q -(xpansion character\);)-.15 E 31(1i)144 597.6 S 2.5(fe)-31 G -(xpansions did tak)-2.65 E 2.5(ep)-.1 G(lace;)-2.5 E 25.17(-1 if)144 -609.6 R(there w)2.5 E(as an error in e)-.1 E(xpansion;)-.15 E 31(2i)144 -621.6 S 2.5(ft)-31 G(he returned line should be displayed, b)-2.5 E -(ut not e)-.2 E -.15(xe)-.15 G(cuted, as with the).15 E F2(:p)2.5 E F0 -(modi\214er)2.5 E(.)-.55 E(If an error ocurred in e)108 633.6 Q -(xpansion, then)-.15 E F1(output)2.5 E F0(contains a descripti)2.5 E .3 --.15(ve e)-.25 H(rror message.).15 E F1 -.15(ch)108 657.6 S(ar *).15 E -F2(get_history_e)2.5 E -.1(ve)-.15 G(nt).1 E F0(\()4.166 E F1(const c)A -(har *string)-.15 E 1.666(,i)-.1 G(nt *cinde)-1.666 E -.834(x, int)-.2 F -(qc)2.5 E(har)-.15 E F0(\))3.332 E .262(Returns the te)108 669.6 R .262 -(xt of the history e)-.15 F -.15(ve)-.25 G .262(nt be).15 F .263 -(ginning at)-.15 F F1(string)2.763 E F0(+)2.763 E F1(*cinde)2.763 E(x) --.2 E F0(.)A F1(*cinde)5.263 E(x)-.2 E F0 .263 -(is modi\214ed to point to after the)2.763 F -2.15 -.25(ev e)108 681.6 T -.71(nt speci\214er).25 F 5.71(.A)-.55 G 3.21(tf)-5.71 G .71 -(unction entry)-3.21 F(,)-.65 E F1(cinde)3.21 E(x)-.2 E F0 .709 -(points to the inde)3.21 F 3.209(xi)-.15 G(nto)-3.209 E F1(string)3.209 -E F0 .709(where the history e)3.209 F -.15(ve)-.25 G .709 -(nt speci\214ca-).15 F .527(tion be)108 693.6 R(gins.)-.15 E F1(qc)5.527 -E(har)-.15 E F0 .527(is a character that is allo)3.027 F .527 -(wed to end the e)-.25 F -.15(ve)-.25 G .528 -(nt speci\214cation in addition to the `).15 F(`normal')-.74 E(')-.74 E -(terminating characters.)108 705.6 Q F1 -.15(ch)108 729.6 S(ar **).15 E -F2(history_tok)2.5 E(enize)-.1 E F0(\()4.166 E F1(const c)A(har *string) --.15 E F0(\))1.666 E(GNU History 4.3)72 768 Q(2002 January 31)131.79 E -(5)195.95 E EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E .239(Return an array of tok)108 84 R .239 -(ens parsed out of)-.1 F/F1 10/Times-Italic@0 SF(string)2.739 E F0 2.739 -(,m)C .238(uch as the shell might.)-2.739 F .238(The tok)5.238 F .238 -(ens are split on the charac-)-.1 F(ters in the)108 96 Q/F2 10 -/Times-Bold@0 SF(history_w)2.5 E(ord_delimiters)-.1 E F0 -.25(va)2.5 G -(riable, and shell quoting con).25 E -.15(ve)-.4 G(ntions are obe).15 E -(yed.)-.15 E F1 -.15(ch)108 120 S(ar *).15 E F2(history_ar)2.5 E -(g_extract)-.1 E F0(\()4.166 E F1(int \214r)A -.834(st, int)-.1 F -.834 -(last, const)2.5 F -.15(ch)2.5 G(ar *string).15 E F0(\))3.332 E .025 -(Extract a string se)108 132 R .025(gment consisting of the)-.15 F F1 -<8c72>2.526 E(st)-.1 E F0(through)2.526 E F1(last)2.526 E F0(ar)2.526 E -.026(guments present in)-.18 F F1(string)2.526 E F0 5.026(.A)C -.18(rg) --5.026 G .026(uments are split).18 F(using)108 144 Q F2(history_tok)2.5 -E(enize\(\))-.1 E F0(.)A F2(History V)87 172.8 Q(ariables)-.92 E F0 -(This section describes the e)108 184.8 Q(xternally-visible v)-.15 E -(ariables e)-.25 E(xported by the GNU History Library)-.15 E(.)-.65 E F1 -(int)108 208.8 Q F2(history_base)2.5 E F0(The logical of)108 220.8 Q -(fset of the \214rst entry in the history list.)-.25 E F1(int)108 244.8 -Q F2(history_length)2.5 E F0 -(The number of entries currently stored in the history list.)108 256.8 Q -F1(int)108 280.8 Q F2(history_max_entries)2.5 E F0 -(The maximum number of history entries.)108 292.8 Q -(This must be changed using)5 E F2(sti\215e_history\(\))2.5 E F0(.)A F1 --.15(ch)108 316.8 S(ar).15 E F2(history_expansion_char)2.5 E F0 -(The character that introduces a history e)108 328.8 Q -.15(ve)-.25 G -2.5(nt. The).15 F(def)2.5 E(ault is)-.1 E F2(!)2.5 E F0 5(.S)C -(etting this to 0 inhibits history e)-5 E(xpansion.)-.15 E F1 -.15(ch) -108 352.8 S(ar).15 E F2(history_subst_char)2.5 E F0 -(The character that in)108 364.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(sw).1 G -(ord substitution if found at the start of a line.)-2.6 E(The def)5 E -(ault is)-.1 E F2(^)2.5 E F0(.)A F1 -.15(ch)108 388.8 S(ar).15 E F2 -(history_comment_char)2.5 E F0 .117(During tok)108 400.8 R .117 -(enization, if this character is seen as the \214rst character of a w) --.1 F .117(ord, then it and all subsequent char)-.1 F(-)-.2 E .276 -(acters up to a ne)108 412.8 R .276 -(wline are ignored, suppressing history e)-.25 F .276 -(xpansion for the remainder of the line.)-.15 F .277(This is dis-)5.276 -F(abled by def)108 424.8 Q(ault.)-.1 E F1 -.15(ch)108 448.8 S(ar *).15 E -F2(history_w)2.5 E(ord_delimiters)-.1 E F0 -(The characters that separate tok)108 460.8 Q(ens for)-.1 E F2 -(history_tok)2.5 E(enize\(\))-.1 E F0 5(.T)C(he def)-5 E(ault v)-.1 E -(alue is)-.25 E F2 2.5("\\)2.5 G(t\\n\(\)<>;&|")-2.5 E F0(.)A F1 -.15 -(ch)108 484.8 S(ar *).15 E F2(history_no_expand_chars)2.5 E F0 2.054 -(The list of characters which inhibit history e)108 496.8 R 2.054 -(xpansion if found immediately follo)-.15 F(wing)-.25 E F2 -(history_expan-)4.554 E(sion_char)108 508.8 Q F0 5(.T)C(he def)-5 E -(ault is space, tab, ne)-.1 E(wline,)-.25 E F2(\\r)2.5 E F0 2.5(,a)C(nd) --2.5 E F2(=)2.5 E F0(.)A F1 -.15(ch)108 532.8 S(ar *).15 E F2 -(history_sear)2.5 E(ch_delimiter_chars)-.18 E F0 .401(The list of addit\ -ional characters which can delimit a history search string, in addition\ - to space, tab,)108 544.8 R F1(:)2.901 E F0(and)2.901 E F1(?)2.902 E F0 -(in the case of a substring search.)108 556.8 Q(The def)5 E -(ault is empty)-.1 E(.)-.65 E F1(int)108 580.8 Q F2 -(history_quotes_inhibit_expansion)2.5 E F0 .625 -(If non-zero, single-quoted w)108 592.8 R .625 -(ords are not scanned for the history e)-.1 F .624(xpansion character) --.15 F 5.624(.T)-.55 G .624(he def)-5.624 F .624(ault v)-.1 F .624 -(alue is)-.25 F(0.)108 604.8 Q F1(rl_lineb)108 628.8 Q(uf_func_t *)-.2 E -F2(history_inhibit_expansion_function)2.5 E F0 .347 -(This should be set to the address of a function that tak)108 640.8 R -.348(es tw)-.1 F 2.848(oa)-.1 G -.18(rg)-2.848 G .348(uments: a).18 F F2 -.348(char *)2.848 F F0(\()2.848 E F1(string)A F0 2.848(\)a)C .348(nd an) --2.848 F F2(int)2.848 E F0(inde)2.848 E(x)-.15 E .228 -(into that string \()108 652.8 R F1(i)A F0 2.728(\). It)B .227 -(should return a non-zero v)2.727 F .227(alue if the history e)-.25 F -.227(xpansion starting at)-.15 F F1(string[i])2.727 E F0 .227 -(should not)2.727 F .019(be performed; zero if the e)108 664.8 R .019 -(xpansion should be done.)-.15 F .019 -(It is intended for use by applications lik)5.019 F(e)-.1 E F2(bash) -2.519 E F0 .019(that use)2.519 F(the history e)108 676.8 Q -(xpansion character for additional purposes.)-.15 E(By def)5 E -(ault, this v)-.1 E(ariable is set to)-.25 E F2(NULL)2.5 E F0(.)A/F3 -10.95/Times-Bold@0 SF(FILES)72 693.6 Q F1(~/.history)109.666 705.6 Q F0 -(Def)144 717.6 Q(ault \214lename for reading and writing sa)-.1 E -.15 -(ve)-.2 G 2.5(dh).15 G(istory)-2.5 E(GNU History 4.3)72 768 Q -(2002 January 31)131.79 E(6)195.95 E EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 357.18(Y\(3\) HIST)-.65 F -(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 84 Q/F2 10 -/Times-Italic@0 SF(The Gnu Readline Libr)108 96 Q(ary)-.15 E F0 2.5(,B)C -(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2(The Gnu History Libr) -108 108 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E -(y)-.15 E F2(bash)108 120 Q F0(\(1\))A F2 -.37(re)108 132 S(adline).37 E -F0(\(3\))A F1 -.548(AU)72 148.8 S(THORS).548 E F0(Brian F)108 160.8 Q -(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 -172.8 Q(g)-.18 E(Chet Rame)108 189.6 Q 1.3 -.65(y, C)-.15 H(ase W).65 E -(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E -(chet@ins.CWR)108 201.6 Q(U.Edu)-.4 E F1 -.11(BU)72 218.4 S 2.738(GR).11 -G(EPOR)-2.738 E(TS)-.438 E F0 .16(If you \214nd a b)108 230.4 R .16 -(ug in the)-.2 F/F3 10/Times-Bold@0 SF(history)2.66 E F0(library)2.66 E -2.66(,y)-.65 G .16(ou should report it.)-2.66 F .16 -(But \214rst, you should mak)5.16 F 2.66(es)-.1 G .16 -(ure that it really is)-2.66 F 2.5(ab)108 242.4 S -(ug, and that it appears in the latest v)-2.7 E(ersion of the)-.15 E F3 -(history)2.5 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.).15 E .704 -(Once you ha)108 259.2 R 1.004 -.15(ve d)-.2 H .704(etermined that a b) -.15 F .704(ug actually e)-.2 F .704(xists, mail a b)-.15 F .705 -(ug report to)-.2 F F2 -.2(bu)3.205 G(g\255r).2 E(eadline)-.37 E F0(@)A -F2(gnu.or)A(g)-.37 E F0 5.705(.I)C 3.205(fy)-5.705 G(ou)-3.205 E(ha)108 -271.2 Q 1.81 -.15(ve a \214)-.2 H 1.51 -(x, you are welcome to mail that as well!).15 F 1.509 -(Suggestions and `philosophical' b)6.509 F 1.509(ug reports may be)-.2 F -(mailed to)108 283.2 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2 -(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3 -(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 300 Q -(ug reports concerning this manual page should be directed to)-.2 E F2 --.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E -(GNU History 4.3)72 768 Q(2002 January 31)131.79 E(7)195.95 E EP -%%Trailer -end -%%EOF diff --git a/readline-4.3.orig/doc/hstech.texinfo b/readline-4.3.orig/doc/hstech.texinfo deleted file mode 100644 index 9494446..0000000 --- a/readline-4.3.orig/doc/hstech.texinfo +++ /dev/null @@ -1,550 +0,0 @@ -@ignore -This file documents the user interface to the GNU History library. - -Copyright (C) 1988-2002 Free Software Foundation, Inc. -Authored by Brian Fox and Chet Ramey. - -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 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). - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -GNU Copyright statement is available to the distributee, and 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. -@end ignore - -@node Programming with GNU History -@chapter Programming with GNU History - -This chapter describes how to interface programs that you write -with the @sc{gnu} History Library. -It should be considered a technical guide. -For information on the interactive use of @sc{gnu} History, @pxref{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. -@end menu - -@node Introduction to History -@section Introduction to History - -Many programs read input from the user a line at a time. The @sc{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 @dfn{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 @code{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 @code{<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. - -@node History Storage -@section History Storage - -The history list is an array of history entries. A history entry is -declared as follows: - -@example -typedef void *histdata_t; - -typedef struct _hist_entry @{ - char *line; - histdata_t data; -@} HIST_ENTRY; -@end example - -The history list itself might therefore be declared as - -@example -HIST_ENTRY **the_history_list; -@end example - -The state of the History library is encapsulated into a single structure: - -@example -/* - * A structure used to pass around the current state of the history. - */ -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; -@end example - -If the flags member includes @code{HS_STIFLED}, the history has been -stifled. - -@node History Functions -@section History Functions - -This section describes the calling sequence for the various functions -exported by the @sc{gnu} History library. - -@menu -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. -@end menu - -@node Initializing History and State Management -@subsection Initializing History and State Management - -This section describes functions used to initialize and manage -the state of the History library when you want to use the history -functions in your program. - -@deftypefun void using_history (void) -Begin a session in which the history functions might be used. This -initializes the interactive variables. -@end deftypefun - -@deftypefun {HISTORY_STATE *} history_get_history_state (void) -Return a structure describing the current state of the input history. -@end deftypefun - -@deftypefun void history_set_history_state (HISTORY_STATE *state) -Set the state of the history list according to @var{state}. -@end deftypefun - -@node History List Management -@subsection History List Management - -These functions manage individual entries on the history list, or set -parameters managing the list itself. - -@deftypefun void add_history (const char *string) -Place @var{string} at the end of the history list. The associated data -field (if any) is set to @code{NULL}. -@end deftypefun - -@deftypefun {HIST_ENTRY *} remove_history (int which) -Remove history entry at offset @var{which} from the history. The -removed element is returned so you can free the line, data, -and containing structure. -@end deftypefun - -@deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data) -Make the history entry at offset @var{which} have @var{line} and @var{data}. -This returns the old entry so you can dispose of the data. In the case -of an invalid @var{which}, a @code{NULL} pointer is returned. -@end deftypefun - -@deftypefun void clear_history (void) -Clear the history list by deleting all the entries. -@end deftypefun - -@deftypefun void stifle_history (int max) -Stifle the history list, remembering only the last @var{max} entries. -@end deftypefun - -@deftypefun int unstifle_history (void) -Stop stifling the history. This returns the previously-set -maximum number of history entries (as set by @code{stifle_history()}). -The value is positive if the history was -stifled, negative if it wasn't. -@end deftypefun - -@deftypefun int history_is_stifled (void) -Returns non-zero if the history is stifled, zero if it is not. -@end deftypefun - -@node Information About the History List -@subsection Information About the History List - -These functions return information about the entire history list or -individual list entries. - -@deftypefun {HIST_ENTRY **} history_list (void) -Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return @code{NULL}. -@end deftypefun - -@deftypefun int where_history (void) -Returns the offset of the current history element. -@end deftypefun - -@deftypefun {HIST_ENTRY *} current_history (void) -Return the history entry at the current position, as determined by -@code{where_history()}. If there is no entry there, return a @code{NULL} -pointer. -@end deftypefun - -@deftypefun {HIST_ENTRY *} history_get (int offset) -Return the history entry at position @var{offset}, starting from -@code{history_base} (@pxref{History Variables}). -If there is no entry there, or if @var{offset} -is greater than the history length, return a @code{NULL} pointer. -@end deftypefun - -@deftypefun int history_total_bytes (void) -Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. -@end deftypefun - -@node Moving Around the History List -@subsection Moving Around the History List - -These functions allow the current index into the history list to be -set or changed. - -@deftypefun int history_set_pos (int pos) -Set the current history offset to @var{pos}, an absolute index -into the list. -Returns 1 on success, 0 if @var{pos} is less than zero or greater -than the number of history entries. -@end deftypefun - -@deftypefun {HIST_ENTRY *} previous_history (void) -Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a @code{NULL} pointer. -@end deftypefun - -@deftypefun {HIST_ENTRY *} next_history (void) -Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a @code{NULL} pointer. -@end deftypefun - -@node Searching the History List -@subsection Searching the History List -@cindex History Searching - -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 @dfn{anchored}, -meaning that the string must match at the beginning of the history entry. -@cindex anchored search - -@deftypefun int history_search (const char *string, int direction) -Search the history for @var{string}, starting at the current history offset. -If @var{direction} is less than 0, then the search is through -previous entries, otherwise through subsequent entries. -If @var{string} is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -@var{string} was found. Otherwise, nothing is changed, and a -1 is -returned. -@end deftypefun - -@deftypefun int history_search_prefix (const char *string, int direction) -Search the history for @var{string}, starting at the current history -offset. The search is anchored: matching lines must begin with -@var{string}. If @var{direction} is less than 0, then the search is -through previous entries, otherwise through subsequent entries. -If @var{string} is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. -@end deftypefun - -@deftypefun int history_search_pos (const char *string, int direction, int pos) -Search for @var{string} in the history list, starting at @var{pos}, an -absolute index into the list. If @var{direction} is negative, the search -proceeds backward from @var{pos}, otherwise forward. Returns the absolute -index of the history element where @var{string} was found, or -1 otherwise. -@end deftypefun - -@node Managing the History File -@subsection Managing the History File - -The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -@deftypefun int read_history (const char *filename) -Add the contents of @var{filename} to the history list, a line at a time. -If @var{filename} is @code{NULL}, then read from @file{~/.history}. -Returns 0 if successful, or @code{errno} if not. -@end deftypefun - -@deftypefun int read_history_range (const char *filename, int from, int to) -Read a range of lines from @var{filename}, adding them to the history list. -Start reading at line @var{from} and end at @var{to}. -If @var{from} is zero, start at the beginning. If @var{to} is less than -@var{from}, then read until the end of the file. If @var{filename} is -@code{NULL}, then read from @file{~/.history}. Returns 0 if successful, -or @code{errno} if not. -@end deftypefun - -@deftypefun int write_history (const char *filename) -Write the current history to @var{filename}, overwriting @var{filename} -if necessary. -If @var{filename} is @code{NULL}, then write the history list to -@file{~/.history}. -Returns 0 on success, or @code{errno} on a read or write error. -@end deftypefun - -@deftypefun int append_history (int nelements, const char *filename) -Append the last @var{nelements} of the history list to @var{filename}. -If @var{filename} is @code{NULL}, then append to @file{~/.history}. -Returns 0 on success, or @code{errno} on a read or write error. -@end deftypefun - -@deftypefun int history_truncate_file (const char *filename, int nlines) -Truncate the history file @var{filename}, leaving only the last -@var{nlines} lines. -If @var{filename} is @code{NULL}, then @file{~/.history} is truncated. -Returns 0 on success, or @code{errno} on failure. -@end deftypefun - -@node History Expansion -@subsection History Expansion - -These functions implement history expansion. - -@deftypefun int history_expand (char *string, char **output) -Expand @var{string}, placing the result into @var{output}, a pointer -to a string (@pxref{History Interaction}). Returns: -@table @code -@item 0 -If no expansions took place (or, if the only change in -the text was the removal of escape characters preceding the history expansion -character); -@item 1 -if expansions did take place; -@item -1 -if there was an error in expansion; -@item 2 -if the returned line should be displayed, but not executed, -as with the @code{:p} modifier (@pxref{Modifiers}). -@end table - -If an error ocurred in expansion, then @var{output} contains a descriptive -error message. -@end deftypefun - -@deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar) -Returns the text of the history event beginning at @var{string} + -@var{*cindex}. @var{*cindex} is modified to point to after the event -specifier. At function entry, @var{cindex} points to the index into -@var{string} where the history event specification begins. @var{qchar} -is a character that is allowed to end the event specification in addition -to the ``normal'' terminating characters. -@end deftypefun - -@deftypefun {char **} history_tokenize (const char *string) -Return an array of tokens parsed out of @var{string}, much as the -shell might. The tokens are split on the characters in the -@var{history_word_delimiters} variable, -and shell quoting conventions are obeyed. -@end deftypefun - -@deftypefun {char *} history_arg_extract (int first, int last, const char *string) -Extract a string segment consisting of the @var{first} through @var{last} -arguments present in @var{string}. Arguments are split using -@code{history_tokenize}. -@end deftypefun - -@node History Variables -@section History Variables - -This section describes the externally-visible variables exported by -the @sc{gnu} History Library. - -@deftypevar int history_base -The logical offset of the first entry in the history list. -@end deftypevar - -@deftypevar int history_length -The number of entries currently stored in the history list. -@end deftypevar - -@deftypevar int history_max_entries -The maximum number of history entries. This must be changed using -@code{stifle_history()}. -@end deftypevar - -@deftypevar char history_expansion_char -The character that introduces a history event. The default is @samp{!}. -Setting this to 0 inhibits history expansion. -@end deftypevar - -@deftypevar char history_subst_char -The character that invokes word substitution if found at the start of -a line. The default is @samp{^}. -@end deftypevar - -@deftypevar char history_comment_char -During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. -@end deftypevar - -@deftypevar {char *} history_word_delimiters -The characters that separate tokens for @code{history_tokenize()}. -The default value is @code{" \t\n()<>;&|"}. -@end deftypevar - -@deftypevar {char *} history_no_expand_chars -The list of characters which inhibit history expansion if found immediately -following @var{history_expansion_char}. The default is space, tab, newline, -carriage return, and @samp{=}. -@end deftypevar - -@deftypevar {char *} history_search_delimiter_chars -The list of additional characters which can delimit a history search -string, in addition to space, TAB, @samp{:} and @samp{?} in the case of -a substring search. The default is empty. -@end deftypevar - -@deftypevar int history_quotes_inhibit_expansion -If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -@end deftypevar - -@deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function -This should be set to the address of a function that takes two arguments: -a @code{char *} (@var{string}) -and an @code{int} index into that string (@var{i}). -It should return a non-zero value if the history expansion starting at -@var{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 @code{NULL}. -@end deftypevar - -@node History Programming Example -@section History Programming Example - -The following program demonstrates simple use of the @sc{gnu} History Library. - -@smallexample -#include <stdio.h> -#include <readline/history.h> - -main (argc, argv) - int argc; - char **argv; -@{ - 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"); - @} - @} - @} -@} -@end smallexample diff --git a/readline-4.3.orig/doc/hsuser.texinfo b/readline-4.3.orig/doc/hsuser.texinfo deleted file mode 100644 index 418bfa8..0000000 --- a/readline-4.3.orig/doc/hsuser.texinfo +++ /dev/null @@ -1,437 +0,0 @@ -@ignore -This file documents the user interface to the GNU History library. - -Copyright (C) 1988-2002 Free Software Foundation, Inc. -Authored by Brian Fox and Chet Ramey. - -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 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). - -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that the -GNU Copyright statement is available to the distributee, and 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. -@end ignore - -@node Using History Interactively -@chapter Using History Interactively - -@ifclear BashFeatures -@defcodeindex bt -@end ifclear - -@ifset BashFeatures -This chapter describes how to use the @sc{gnu} History Library -interactively, from a user's standpoint. -It should be considered a user's guide. -For information on using the @sc{gnu} History Library in other programs, -see the @sc{gnu} Readline Library Manual. -@end ifset -@ifclear BashFeatures -This chapter describes how to use the @sc{gnu} History Library interactively, -from a user's standpoint. It should be considered a user's guide. For -information on using the @sc{gnu} History Library in your own programs, -@pxref{Programming with GNU History}. -@end ifclear - -@ifset BashFeatures -@menu -* Bash History Facilities:: How Bash lets you manipulate your command - history. -* Bash History Builtins:: The Bash builtin commands that manipulate - the command history. -* History Interaction:: What it feels like using History as a user. -@end menu -@end ifset -@ifclear BashFeatures -@menu -* History Interaction:: What it feels like using History as a user. -@end menu -@end ifclear - -@ifset BashFeatures -@node Bash History Facilities -@section Bash History Facilities -@cindex command history -@cindex history list - -When the @option{-o history} option to the @code{set} builtin -is enabled (@pxref{The Set Builtin}), -the shell provides access to the @dfn{command history}, -the list of commands previously typed. -The value of the @env{HISTSIZE} shell variable is used as the -number of commands to save in a history list. -The text of the last @env{$HISTSIZE} -commands (default 500) is saved. -The shell stores each command in the history list prior to -parameter and variable expansion -but after history expansion is performed, subject to the -values of the shell variables -@env{HISTIGNORE} and @env{HISTCONTROL}. - -When the shell starts up, the history is initialized from the -file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). -The file named by the value of @env{HISTFILE} is truncated, if -necessary, to contain no more than the number of lines specified by -the value of the @env{HISTFILESIZE} variable. -When an interactive shell exits, the last -@env{$HISTSIZE} lines are copied from the history list to the file -named by @env{$HISTFILE}. -If the @code{histappend} shell option is set (@pxref{Bash Builtins}), -the lines are appended to the history file, -otherwise the history file is overwritten. -If @env{HISTFILE} -is unset, or if the history file is unwritable, the history is -not saved. After saving the history, the history file is truncated -to contain no more than @env{$HISTFILESIZE} -lines. If @env{HISTFILESIZE} is not set, no truncation is performed. - -The builtin command @code{fc} may be used to list or edit and re-execute -a portion of the history list. -The @code{history} builtin may be used to display or modify the history -list and manipulate the history file. -When using command-line editing, search commands -are available in each editing mode that provide access to the -history list (@pxref{Commands For History}). - -The shell allows control over which commands are saved on the history -list. The @env{HISTCONTROL} and @env{HISTIGNORE} -variables may be set to cause the shell to save only a subset of the -commands entered. -The @code{cmdhist} -shell option, if enabled, causes the shell to attempt to save each -line of a multi-line command in the same history entry, adding -semicolons where necessary to preserve syntactic correctness. -The @code{lithist} -shell option causes the shell to save the command with embedded newlines -instead of semicolons. -The @code{shopt} builtin is used to set these options. -@xref{Bash Builtins}, for a description of @code{shopt}. - -@node Bash History Builtins -@section Bash History Builtins -@cindex history builtins - -Bash provides two builtin commands which manipulate the -history list and history file. - -@table @code - -@item fc -@btindex fc -@example -@code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]} -@code{fc -s [@var{pat}=@var{rep}] [@var{command}]} -@end example - -Fix Command. In the first form, a range of commands from @var{first} to -@var{last} is selected from the history list. Both @var{first} and -@var{last} may be specified as a string (to locate the most recent -command beginning with that string) or as a number (an index into the -history list, where a negative number is used as an offset from the -current command number). If @var{last} is not specified it is set to -@var{first}. If @var{first} is not specified it is set to the previous -command for editing and @minus{}16 for listing. If the @option{-l} flag is -given, the commands are listed on standard output. The @option{-n} flag -suppresses the command numbers when listing. The @option{-r} flag -reverses the order of the listing. Otherwise, the editor given by -@var{ename} is invoked on a file containing those commands. If -@var{ename} is not given, the value of the following variable expansion -is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the -value of the @env{FCEDIT} variable if set, or the value of the -@env{EDITOR} variable if that is set, or @code{vi} if neither is set. -When editing is complete, the edited commands are echoed and executed. - -In the second form, @var{command} is re-executed after each instance -of @var{pat} in the selected command is replaced by @var{rep}. - -A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so -that typing @samp{r cc} runs the last command beginning with @code{cc} -and typing @samp{r} re-executes the last command (@pxref{Aliases}). - -@item history -@btindex history -@example -history [@var{n}] -history -c -history -d @var{offset} -history [-anrw] [@var{filename}] -history -ps @var{arg} -@end example - -With no options, display the history list with line numbers. -Lines prefixed with a @samp{*} have been modified. -An argument of @var{n} lists only the last @var{n} lines. -Options, if supplied, have the following meanings: - -@table @code -@item -c -Clear the history list. This may be combined -with the other options to replace the history list completely. - -@item -d @var{offset} -Delete the history entry at position @var{offset}. -@var{offset} should be specified as it appears when the history is -displayed. - -@item -a -Append the new -history lines (history lines entered since the beginning of the -current Bash session) to the history file. - -@item -n -Append the history lines not already read from the history file -to the current history list. These are lines appended to the history -file since the beginning of the current Bash session. - -@item -r -Read the current history file and append its contents to -the history list. - -@item -w -Write out the current history to the history file. - -@item -p -Perform history substitution on the @var{arg}s and display the result -on the standard output, without storing the results in the history list. - -@item -s -The @var{arg}s are added to the end of -the history list as a single entry. - -@end table - -When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is -used, if @var{filename} -is given, then it is used as the history file. If not, then -the value of the @env{HISTFILE} variable is used. - -@end table -@end ifset - -@node History Interaction -@section History Expansion -@cindex history expansion - -The History library provides a history expansion feature that is similar -to the history expansion provided by @code{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 -@dfn{event}, and the portions of that line that are acted upon are -called @dfn{words}. Various @dfn{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 @samp{!} by default. -@ifset BashFeatures -Only @samp{\} and @samp{'} may be used to escape the history expansion -character. -@end ifset - -@ifset BashFeatures -Several shell options settable with the @code{shopt} -builtin (@pxref{Bash Builtins}) may be used to tailor -the behavior of history expansion. If the -@code{histverify} shell option is enabled, and Readline -is being used, history substitutions are not immediately passed to -the shell parser. -Instead, the expanded line is reloaded into the Readline -editing buffer for further modification. -If Readline is being used, and the @code{histreedit} -shell option is enabled, a failed history expansion will be -reloaded into the Readline editing buffer for correction. -The @option{-p} option to the @code{history} builtin command -may be used to see what a history expansion will do before using it. -The @option{-s} option to the @code{history} builtin may be used to -add commands to the end of the history list without actually executing -them, so that they are available for subsequent recall. -This is most useful in conjunction with Readline. - -The shell allows control of the various characters used by the -history expansion mechanism with the @code{histchars} variable. -@end ifset - -@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. -@end menu - -@node Event Designators -@subsection Event Designators -@cindex event designators - -An event designator is a reference to a command line entry in the -history list. -@cindex history events - -@table @asis - -@item @code{!} -Start a history substitution, except when followed by a space, tab, -the end of the line, @samp{=} or @samp{(}. - -@item @code{!@var{n}} -Refer to command line @var{n}. - -@item @code{!-@var{n}} -Refer to the command @var{n} lines back. - -@item @code{!!} -Refer to the previous command. This is a synonym for @samp{!-1}. - -@item @code{!@var{string}} -Refer to the most recent command starting with @var{string}. - -@item @code{!?@var{string}[?]} -Refer to the most recent command containing @var{string}. The trailing -@samp{?} may be omitted if the @var{string} is followed immediately by -a newline. - -@item @code{^@var{string1}^@var{string2}^} -Quick Substitution. Repeat the last command, replacing @var{string1} -with @var{string2}. Equivalent to -@code{!!:s/@var{string1}/@var{string2}/}. - -@item @code{!#} -The entire command line typed so far. - -@end table - -@node Word Designators -@subsection Word Designators - -Word designators are used to select desired words from the event. -A @samp{:} separates the event specification from the word designator. It -may be omitted if the word designator begins with a @samp{^}, @samp{$}, -@samp{*}, @samp{-}, or @samp{%}. 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. - -@need 0.75 -For example, - -@table @code -@item !! -designates the preceding command. When you type this, the preceding -command is repeated in toto. - -@item !!:$ -designates the last argument of the preceding command. This may be -shortened to @code{!$}. - -@item !fi:2 -designates the second argument of the most recent command starting with -the letters @code{fi}. -@end table - -@need 0.75 -Here are the word designators: - -@table @code - -@item 0 (zero) -The @code{0}th word. For many applications, this is the command word. - -@item @var{n} -The @var{n}th word. - -@item ^ -The first argument; that is, word 1. - -@item $ -The last argument. - -@item % -The word matched by the most recent @samp{?@var{string}?} search. - -@item @var{x}-@var{y} -A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. - -@item * -All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. -It is not an error to use @samp{*} if there is just one word in the event; -the empty string is returned in that case. - -@item @var{x}* -Abbreviates @samp{@var{x}-$} - -@item @var{x}- -Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. - -@end table - -If a word designator is supplied without an event specification, the -previous command is used as the event. - -@node Modifiers -@subsection Modifiers - -After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a @samp{:}. - -@table @code - -@item h -Remove a trailing pathname component, leaving only the head. - -@item t -Remove all leading pathname components, leaving the tail. - -@item r -Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving -the basename. - -@item e -Remove all but the trailing suffix. - -@item p -Print the new command but do not execute it. - -@ifset BashFeatures -@item q -Quote the substituted words, escaping further substitutions. - -@item x -Quote the substituted words as with @samp{q}, -but break into words at spaces, tabs, and newlines. -@end ifset - -@item s/@var{old}/@var{new}/ -Substitute @var{new} for the first occurrence of @var{old} in the -event line. Any delimiter may be used in place of @samp{/}. -The delimiter may be quoted in @var{old} and @var{new} -with a single backslash. If @samp{&} appears in @var{new}, -it is replaced by @var{old}. A single backslash will quote -the @samp{&}. The final delimiter is optional if it is the last -character on the input line. - -@item & -Repeat the previous substitution. - -@item g -Cause changes to be applied over the entire event line. Used in -conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, -or with @samp{&}. - -@end table diff --git a/readline-4.3.orig/doc/manvers.texinfo b/readline-4.3.orig/doc/manvers.texinfo deleted file mode 100644 index 1206cf0..0000000 --- a/readline-4.3.orig/doc/manvers.texinfo +++ /dev/null @@ -1,10 +0,0 @@ -@ignore -Copyright (C) 1988-2002 Free Software Foundation, Inc. -@end ignore - -@set EDITION 4.3 -@set VERSION 4.3 -@set UPDATED 2002 March 4 -@set UPDATE-MONTH March 2002 - -@set LASTCHANGE Mon Mar 4 12:00:16 EST 2002 diff --git a/readline-4.3.orig/doc/readline.0 b/readline-4.3.orig/doc/readline.0 deleted file mode 100644 index 87beeac..0000000 --- a/readline-4.3.orig/doc/readline.0 +++ /dev/null @@ -1,997 +0,0 @@ -READLINE(3) READLINE(3) - - - -NNAAMMEE - readline - get a line from a user with editing - -SSYYNNOOPPSSIISS - ##iinncclluuddee <<ssttddiioo..hh>> - ##iinncclluuddee <<rreeaaddlliinnee//rreeaaddlliinnee..hh>> - ##iinncclluuddee <<rreeaaddlliinnee//hhiissttoorryy..hh>> - - _c_h_a_r _* - rreeaaddlliinnee (_c_o_n_s_t _c_h_a_r _*_p_r_o_m_p_t); - -CCOOPPYYRRIIGGHHTT - Readline is Copyright (C) 1989-2002 by the Free Software - Foundation, Inc. - -DDEESSCCRRIIPPTTIIOONN - rreeaaddlliinnee will read a line from the terminal and return it, - using pprroommpptt as a prompt. If pprroommpptt is NNUULLLL or the empty - string, no prompt is issued. The line returned is allo- - cated with _m_a_l_l_o_c(3); the caller must free it when fin- - ished. The line returned has the final newline removed, - so only the text of the line remains. - - rreeaaddlliinnee offers editing capabilities while the user is - entering the line. By default, the line editing commands - are similar to those of emacs. A vi-style line editing - interface is also available. - - This manual page describes only the most basic use of - rreeaaddlliinnee. Much more functionality is available; see _T_h_e - _G_N_U _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y and _T_h_e _G_N_U _H_i_s_t_o_r_y _L_i_b_r_a_r_y for addi- - tional information. - -RREETTUURRNN VVAALLUUEE - rreeaaddlliinnee returns the text of the line read. A blank line - returns the empty string. If EEOOFF is encountered while - reading a line, and the line is empty, NNUULLLL is returned. - If an EEOOFF is read with a non-empty line, it is treated as - a newline. - -NNOOTTAATTIIOONN - An emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Con- - trol-N. Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x - means Meta-X. (On keyboards without a _m_e_t_a key, M-_x means - ESC _x, i.e., press the Escape key then the _x key. This - makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means - ESC-Control-_x, or press the Escape key then hold the Con- - trol key while pressing the _x key.) - - Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which - normally act as a repeat count. Sometimes, however, it is - the sign of the argument that is significant. Passing a - negative argument to a command that acts in the forward - direction (e.g., kkiillll--lliinnee) causes that command to act in - a backward direction. Commands whose behavior with argu- - ments deviates from this are noted. - - When a command is described as _k_i_l_l_i_n_g text, the text - deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). - The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive - kills cause the text to be accumulated into one unit, - which can be yanked all at once. Commands which do not - kill text separate the chunks of text on the kill ring. - -IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE - Readline is customized by putting commands in an initial- - ization file (the _i_n_p_u_t_r_c file). The name of this file is - taken from the value of the IINNPPUUTTRRCC environment variable. - If that variable is unset, the default is _~_/_._i_n_p_u_t_r_c. - When a program which uses the readline library starts up, - the init file is read, and the key bindings and variables - are set. There are only a few basic constructs allowed in - the readline init file. Blank lines are ignored. Lines - beginning with a ## are comments. Lines beginning with a $$ - indicate conditional constructs. Other lines denote key - bindings and variable settings. Each program using this - library may add its own commands and bindings. - - For example, placing - - M-Control-u: universal-argument - or - C-Meta-u: universal-argument - - into the _i_n_p_u_t_r_c would make M-C-u execute the readline - command _u_n_i_v_e_r_s_a_l_-_a_r_g_u_m_e_n_t. - - The following symbolic character names are recognized - while processing key bindings: _D_E_L, _E_S_C, _E_S_C_A_P_E, _L_F_D, _N_E_W_- - _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _R_U_B_O_U_T, _S_P_A_C_E, _S_P_C, and _T_A_B. - - In addition to command names, readline allows keys to be - bound to a string that is inserted when the key is pressed - (a _m_a_c_r_o). - - - KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c - file is simple. All that is required is the name of the - command or the text of a macro and a key sequence to which - it should be bound. The name may be specified in one of - two ways: as a symbolic key name, possibly with _M_e_t_a_- or - _C_o_n_t_r_o_l_- prefixes, or as a key sequence. - - When using the form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_- - _n_a_m_e is the name of a key spelled out in English. For - example: - - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, _C_-_u is bound to the function uunniivveerr-- - ssaall--aarrgguummeenntt, _M_-_D_E_L is bound to the function bbaacckk-- - wwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to run the macro - expressed on the right hand side (that is, to insert the - text ``> output'' into the line). - - In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyy-- - sseeqq differs from kkeeyynnaammee above in that strings denoting an - entire key sequence may be specified by placing the - sequence within double quotes. Some GNU Emacs style key - escapes can be used, as in the following example, but the - symbolic character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In this example, _C_-_u is again bound to the function uunnii-- - vveerrssaall--aarrgguummeenntt. _C_-_x _C_-_r is bound to the function - rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the - text ``Function Key 1''. - - The full set of GNU Emacs style escape sequences available - when specifying key sequences is - \\CC-- control prefix - \\MM-- meta prefix - \\ee an escape character - \\\\ backslash - \\"" literal ", a double quote - \\'' literal ', a single quote - - In addition to the GNU Emacs style escape sequences, a - second set of backslash escapes is available: - \\aa alert (bell) - \\bb backspace - \\dd delete - \\ff form feed - \\nn newline - \\rr carriage return - \\tt horizontal tab - \\vv vertical tab - \\_n_n_n the eight-bit character whose value is the - octal value _n_n_n (one to three digits) - \\xx_H_H the eight-bit character whose value is the - hexadecimal value _H_H (one or two hex digits) - - When entering the text of a macro, single or double quotes - should be used to indicate a macro definition. Unquoted - text is assumed to be a function name. In the macro body, - the backslash escapes described above are expanded. Back- - slash will quote any other character in the macro text, - including " and '. - - BBaasshh allows the current readline key bindings to be dis- - played or modified with the bbiinndd builtin command. The - editing mode may be switched during interactive use by - using the --oo option to the sseett builtin command. Other - programs using this library provide similar mechanisms. - The _i_n_p_u_t_r_c file may be edited and re-read if a program - does not provide any other means to incorporate new bind- - ings. - - VVaarriiaabblleess - Readline has variables that can be used to further cus- - tomize its behavior. A variable may be set in the _i_n_p_u_t_r_c - file with a statement of the form - - sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e - - Except where noted, readline variables can take the values - OOnn or OOffff (without regard to case). The variables and - their default values are: - - bbeellll--ssttyyllee ((aauuddiibbllee)) - Controls what happens when readline wants to ring - the terminal bell. If set to nnoonnee, readline never - rings the bell. If set to vviissiibbllee, readline uses a - visible bell if one is available. If set to aauuddii-- - bbllee, readline attempts to ring the terminal's bell. - ccoommmmeenntt--bbeeggiinn ((````##'''')) - The string that is inserted in vvii mode when the - iinnsseerrtt--ccoommmmeenntt command is executed. This command - is bound to MM--## in emacs mode and to ## in vi com- - mand mode. - ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) - If set to OOnn, readline performs filename matching - and completion in a case-insensitive fashion. - ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) - This determines when the user is queried about - viewing the number of possible completions gener- - ated by the ppoossssiibbllee--ccoommpplleettiioonnss command. It may - be set to any integer value greater than or equal - to zero. If the number of possible completions is - greater than or equal to the value of this vari- - able, the user is asked whether or not he wishes to - view them; otherwise they are simply listed on the - terminal. - ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with - the eighth bit set to an ASCII key sequence by - stripping the eighth bit and prefixing it with an - escape character (in effect, using escape as the - _m_e_t_a _p_r_e_f_i_x). - ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) - If set to OOnn, readline will inhibit word comple- - tion. Completion characters will be inserted into - the line as if they had been mapped to sseellff--iinnsseerrtt. - eeddiittiinngg--mmooddee ((eemmaaccss)) - Controls whether readline begins with a set of key - bindings similar to emacs or vi. eeddiittiinngg--mmooddee can - be set to either eemmaaccss or vvii. - eennaabbllee--kkeeyyppaadd ((OOffff)) - When set to OOnn, readline will try to enable the - application keypad when it is called. Some systems - need this to enable the arrow keys. - eexxppaanndd--ttiillddee ((OOffff)) - If set to oonn, tilde expansion is performed when - readline attempts word completion. - hhiissttoorryy--pprreesseerrvvee--ppooiinntt - If set to oonn, the history code attempts to place - point at the same location on each history line - retrived with pprreevviioouuss--hhiissttoorryy or nneexxtt--hhiissttoorryy. - hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line - for display, scrolling the input horizontally on a - single screen line when it becomes longer than the - screen width rather than wrapping to a new line. - iinnppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will enable eight-bit input - (that is, it will not clear the eighth bit in the - characters it reads), regardless of what the termi- - nal claims it can support. The name mmeettaa--ffllaagg is a - synonym for this variable. - iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[ CC--JJ'''')) - The string of characters that should terminate an - incremental search without subsequently executing - the character as a command. If this variable has - not been given a value, the characters _E_S_C and _C_-_J - will terminate an incremental search. - kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of legal - keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, - _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. - _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent - to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s. - The value of eeddiittiinngg--mmooddee also affects the default - keymap. - mmaarrkk--ddiirreeccttoorriieess ((OOnn)) - If set to OOnn, completed directory names have a - slash appended. - mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified - are displayed with a preceding asterisk (**). - mmaarrkk--ssyymmlliinnkkeedd--ddiirreeccttoorriieess ((OOffff)) - If set to OOnn, completed names which are symbolic - links to directories have a slash appended (subject - to the value of mmaarrkk--ddiirreeccttoorriieess). - mmaattcchh--hhiiddddeenn--ffiilleess ((OOnn)) - This variable, when set to OOnn, causes readline to - match files whose names begin with a `.' (hidden - files) when performing filename completion, unless - the leading `.' is supplied by the user in the - filename to be completed. - oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with - the eighth bit set directly rather than as a meta- - prefixed escape sequence. - ppaaggee--ccoommpplleettiioonnss ((OOnn)) - If set to OOnn, readline uses an internal _m_o_r_e-like - pager to display a screenful of possible comple- - tions at a time. - pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) - If set to OOnn, readline will display completions - with matches sorted horizontally in alphabetical - order, rather than down the screen. - sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion - functions. If set to oonn, words which have more - than one possible completion cause the matches to - be listed immediately instead of ringing the bell. - vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as - reported by _s_t_a_t(2) is appended to the filename - when listing possible completions. - - CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the - conditional compilation features of the C preprocessor - which allows key bindings and variable settings to be per- - formed as the result of tests. There are four parser - directives used. - - $$iiff The $$iiff construct allows bindings to be made based - on the editing mode, the terminal being used, or - the application using readline. The text of the - test extends to the end of the line; no characters - are required to isolate it. - - mmooddee The mmooddee== form of the $$iiff directive is used - to test whether readline is in emacs or vi - mode. This may be used in conjunction with - the sseett kkeeyymmaapp command, for instance, to set - bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_- - _c_t_l_x keymaps only if readline is starting - out in emacs mode. - - tteerrmm The tteerrmm== form may be used to include termi- - nal-specific key bindings, perhaps to bind - the key sequences output by the terminal's - function keys. The word on the right side - of the == is tested against the full name of - the terminal and the portion of the terminal - name before the first --. This allows _s_u_n to - match both _s_u_n and _s_u_n_-_c_m_d, for instance. - - aapppplliiccaattiioonn - The aapppplliiccaattiioonn construct is used to include - application-specific settings. Each program - using the readline library sets the _a_p_p_l_i_c_a_- - _t_i_o_n _n_a_m_e, and an initialization file can - test for a particular value. This could be - used to bind key sequences to functions use- - ful for a specific program. For instance, - the following command adds a key sequence - that quotes the current or previous word in - Bash: - - $$iiff Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $$eennddiiff - - $$eennddiiff This command, as seen in the previous example, ter- - minates an $$iiff command. - - $$eellssee Commands in this branch of the $$iiff directive are - executed if the test fails. - - $$iinncclluuddee - This directive takes a single filename as an argu- - ment and reads commands and bindings from that - file. For example, the following directive would - read _/_e_t_c_/_i_n_p_u_t_r_c: - - $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c - -SSEEAARRCCHHIINNGG - Readline provides commands for searching through the com- - mand history for lines containing a specified string. - There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_- - _t_a_l. - - Incremental searches begin before the user has finished - typing the search string. As each character of the search - string is typed, readline displays the next entry from the - history matching the string typed so far. An incremental - search requires only as many characters as needed to find - the desired history entry. To search backward in the his- - tory for a particular string, type CC--rr. Typing CC--ss - searches forward through the history. The characters pre- - sent in the value of the iisseeaarrcchh--tteerrmmiinnaattoorrss variable are - used to terminate an incremental search. If that variable - has not been assigned a value the _E_s_c_a_p_e and CC--JJ charac- - ters will terminate an incremental search. CC--GG 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 - CC--ss or CC--rr as appropriate. This will search backward or - forward in the history for the next line matching the - search string typed so far. Any other key sequence bound - to a readline command will terminate the search and exe- - cute that command. For instance, a newline will terminate - the search and accept the line, thereby executing the com- - mand from the history list. A movement command will ter- - minate the search, make the last line found the current - line, and begin editing. - - Non-incremental searches read the entire search string - before starting to search for matching history lines. The - search string may be typed by the user or be part of the - contents of the current line. - -EEDDIITTIINNGG CCOOMMMMAANNDDSS - The following is a list of the names of the commands and - the default key sequences to which they are bound. Com- - mand names without an accompanying key sequence are - unbound by default. - - In the following descriptions, _p_o_i_n_t refers to the current - cursor position, and _m_a_r_k refers to a cursor position - saved by the sseett--mmaarrkk command. The text between the point - and mark is referred to as the _r_e_g_i_o_n. - - CCoommmmaannddss ffoorr MMoovviinngg - bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) - Move to the start of the current line. - eenndd--ooff--lliinnee ((CC--ee)) - Move to the end of the line. - ffoorrwwaarrdd--cchhaarr ((CC--ff)) - Move forward a character. - bbaacckkwwaarrdd--cchhaarr ((CC--bb)) - Move back a character. - ffoorrwwaarrdd--wwoorrdd ((MM--ff)) - Move forward to the end of the next word. Words - are composed of alphanumeric characters (letters - and digits). - bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of the current or previous - word. Words are composed of alphanumeric charac- - ters (letters and digits). - cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen leaving the current line at the - top of the screen. With an argument, refresh the - current line without clearing the screen. - rreeddrraaww--ccuurrrreenntt--lliinnee - Refresh the current line. - - CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy - aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) - Accept the line regardless of where the cursor is. - If this line is non-empty, it may be added to the - history list for future recall with aadddd__hhiissttoorryy(()). - If the line is a modified history line, the history - line is restored to its original state. - pprreevviioouuss--hhiissttoorryy ((CC--pp)) - Fetch the previous command from the history list, - moving back in the list. - nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, mov- - ing forward in the list. - bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) - Move to the first line in the history. - eenndd--ooff--hhiissttoorryy ((MM-->>)) - Move to the end of the input history, i.e., the - line currently being entered. - rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) - Search backward starting at the current line and - moving `up' through the history as necessary. This - is an incremental search. - ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) - Search forward starting at the current line and - moving `down' through the history as necessary. - This is an incremental search. - nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) - Search backward through the history starting at the - current line using a non-incremental search for a - string supplied by the user. - nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) - Search forward through the history using a non- - incremental search for a string supplied by the - user. - hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd - Search forward through the history for the string - of characters between the start of the current line - and the current cursor position (the _p_o_i_n_t). This - is a non-incremental search. - hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd - Search backward through the history for the string - of characters between the start of the current line - and the point. This is a non-incremental search. - yyaannkk--nntthh--aarrgg ((MM--CC--yy)) - Insert the first argument to the previous command - (usually the second word on the previous line) at - point. With an argument _n, insert the _nth word - from the previous command (the words in the previ- - ous command begin with word 0). A negative argu- - ment inserts the _nth word from the end of the pre- - vious command. - yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) - Insert the last argument to the previous command - (the last word of the previous history entry). - With an argument, behave exactly like yyaannkk--nntthh--aarrgg. - Successive calls to yyaannkk--llaasstt--aarrgg move back through - the history list, inserting the last argument of - each line in turn. - - CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt - ddeelleettee--cchhaarr ((CC--dd)) - Delete the character at point. If point is at the - beginning of the line, there are no characters in - the line, and the last character typed was not - bound to ddeelleettee--cchhaarr, then return EEOOFF. - bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given - a numeric argument, save the deleted text on the - kill ring. - ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr - Delete the character under the cursor, unless the - cursor is at the end of the line, in which case the - character behind the cursor is deleted. - qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character that you type to the line - verbatim. This is how to insert characters like - CC--qq, for example. - ttaabb--iinnsseerrtt ((MM--TTAABB)) - Insert a tab character. - sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) - Insert the character typed. - ttrraannssppoossee--cchhaarrss ((CC--tt)) - Drag the character before point forward over the - character at point, moving point forward as well. - If point is at the end of the line, then this - transposes the two characters before point. Nega- - tive arguments have no effect. - ttrraannssppoossee--wwoorrddss ((MM--tt)) - Drag the word before point past the word after - point, moving point over that word as well. If - point is at the end of the line, this transposes - the last two words on the line. - uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a - negative argument, uppercase the previous word, but - do not move point. - ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a - negative argument, lowercase the previous word, but - do not move point. - ccaappiittaalliizzee--wwoorrdd ((MM--cc)) - Capitalize the current (or following) word. With a - negative argument, capitalize the previous word, - but do not move point. - oovveerrwwrriittee--mmooddee - Toggle overwrite mode. With an explicit positive - numeric argument, switches to overwrite mode. With - an explicit non-positive numeric argument, switches - to insert mode. This command affects only eemmaaccss - mode; vvii mode does overwrite differently. Each - call to _r_e_a_d_l_i_n_e_(_) starts in insert mode. In over- - write mode, characters bound to sseellff--iinnsseerrtt replace - the text at point rather than pushing the text to - the right. Characters bound to bbaacckk-- - wwaarrdd--ddeelleettee--cchhaarr replace the character before point - with a space. By default, this command is unbound. - - KKiilllliinngg aanndd YYaannkkiinngg - kkiillll--lliinnee ((CC--kk)) - Kill the text from point to the end of the line. - bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) - Kill backward to the beginning of the line. - uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the - line. The killed text is saved on the kill-ring. - kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter - where point is. - kkiillll--wwoorrdd ((MM--dd)) - Kill from point the end of the current word, or if - between words, to the end of the next word. Word - boundaries are the same as those used by ffoorr-- - wwaarrdd--wwoorrdd. - bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind point. Word boundaries are - the same as those used by bbaacckkwwaarrdd--wwoorrdd. - uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind point, using white space as a - word boundary. The killed text is saved on the - kill-ring. - ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) - Delete all spaces and tabs around point. - kkiillll--rreeggiioonn - Kill the text between the point and _m_a_r_k (saved - cursor position). This text is referred to as the - _r_e_g_i_o_n. - ccooppyy--rreeggiioonn--aass--kkiillll - Copy the text in the region to the kill buffer. - ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. The - word boundaries are the same as bbaacckkwwaarrdd--wwoorrdd. - ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. - The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. - yyaannkk ((CC--yy)) - Yank the top of the kill ring into the buffer at - point. - yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only - works following yyaannkk or yyaannkk--ppoopp. - - NNuummeerriicc AArrgguummeennttss - ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulat- - ing, or start a new argument. M-- starts a nega- - tive argument. - uunniivveerrssaall--aarrgguummeenntt - This is another way to specify an argument. If - this command is followed by one or more digits, - optionally with a leading minus sign, those digits - define the argument. If the command is followed by - digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the - numeric argument, but is otherwise ignored. As a - special case, if this command is immediately fol- - lowed by a character that is neither a digit or - minus sign, the argument count for the next command - is multiplied by four. The argument count is ini- - tially one, so executing this function the first - time makes the argument count four, a second time - makes the argument count sixteen, and so on. - - CCoommpplleettiinngg - ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before - point. The actual completion performed is applica- - tion-specific. BBaasshh, for instance, attempts com- - pletion treating the text as a variable (if the - text begins with $$), username (if the text begins - with ~~), hostname (if the text begins with @@), or - command (including aliases and functions) in turn. - If none of these produces a match, filename comple- - tion is attempted. GGddbb, on the other hand, allows - completion of program functions and variables, and - only attempts filename completion under certain - circumstances. - ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) - List the possible completions of the text before - point. - iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point - that would have been generated by ppoossssiibbllee--ccoommppllee-- - ttiioonnss. - mmeennuu--ccoommpplleettee - Similar to ccoommpplleettee, but replaces the word to be - completed with a single match from the list of pos- - sible completions. Repeated execution of mmeennuu--ccoomm-- - pplleettee steps through the list of possible comple- - tions, inserting each match in turn. At the end of - the list of completions, the bell is rung (subject - to the setting of 00aanndd tthhee oorriiggiinnaall tteexxtt iiss - rreessttoorreedd.. AAnn aarrgguummeenntt ooff _n mmoovveess _n ppoossiittiioonnss ffoorr-- - wwaarrdd iinn tthhee lliisstt ooff mmaattcchheess;; aa nneeggaattiivvee aarrgguummeenntt - mmaayy bbee uusseedd ttoo mmoovvee bbaacckkwwaarrdd tthhrroouugghh tthhee lliisstt.. - TThhiiss ccoommmmaanndd iiss iinntteennddeedd ttoo bbee bboouunndd ttoo TTAABB,, bbuutt iiss - uunnbboouunndd bbyy ddeeffaauulltt.. - ddeelleettee--cchhaarr--oorr--lliisstt - Deletes the character under the cursor if not at - the beginning or end of the line (like ddeelleettee-- - cchhaarr). If at the end of the line, behaves identi- - cally to ppoossssiibbllee--ccoommpplleettiioonnss. - - KKeeyybbooaarrdd MMaaccrrooss - ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current - keyboard macro. - eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) - Stop saving the characters typed into the current - keyboard macro and store the definition. - ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by mak- - ing the characters in the macro appear as if typed - at the keyboard. - - MMiisscceellllaanneeoouuss - rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) - Read in the contents of the _i_n_p_u_t_r_c file, and - incorporate any bindings or variable assignments - found there. - aabboorrtt ((CC--gg)) - Abort the current editing command and ring the ter- - minal's bell (subject to the setting of - bbeellll--ssttyyllee). - ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) - If the metafied character _x is lowercase, run the - command that is bound to the corresponding upper- - case character. - pprreeffiixx--mmeettaa ((EESSCC)) - Metafy the next character typed. EESSCC ff is equiva- - lent to MMeettaa--ff. - uunnddoo ((CC--__,, CC--xx CC--uu)) - Incremental undo, separately remembered for each - line. - rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like - executing the uunnddoo command enough times to return - the line to its initial state. - ttiillddee--eexxppaanndd ((MM--&&)) - Perform tilde expansion on the current word. - sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>)) - Set the mark to the point. If a numeric argument - is supplied, the mark is set to that position. - eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor - position is set to the saved position, and the old - cursor position is saved as the mark. - cchhaarraacctteerr--sseeaarrcchh ((CC--]])) - A character is read and point is moved to the next - occurrence of that character. A negative count - searches for previous occurrences. - cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) - A character is read and point is moved to the pre- - vious occurrence of that character. A negative - count searches for subsequent occurrences. - iinnsseerrtt--ccoommmmeenntt ((MM--##)) - Without a numeric argument, the value of the read- - line ccoommmmeenntt--bbeeggiinn variable is inserted at the - beginning of the current line. If a numeric argu- - ment is supplied, this command acts as a toggle: - if the characters at the beginning of the line do - not match the value of ccoommmmeenntt--bbeeggiinn, the value is - inserted, otherwise the characters in ccoommmmeenntt--bbeeggiinn - are deleted from the beginning of the line. In - either case, the line is accepted as if a newline - had been typed. The default value of ccoommmmeenntt--bbeeggiinn - makes the current line a shell comment. If a - numeric argument causes the comment character to be - removed, the line will be executed by the shell. - dduummpp--ffuunnccttiioonnss - Print all of the functions and their key bindings - to the readline output stream. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - dduummpp--vvaarriiaabblleess - Print all of the settable variables and their val- - ues to the readline output stream. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - dduummpp--mmaaccrrooss - Print all of the readline key sequences bound to - macros and the strings they ouput. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee)) - When in vvii command mode, this causes a switch to - eemmaaccss editing mode. - vvii--eeddiittiinngg--mmooddee ((MM--CC--jj)) - When in eemmaaccss editing mode, this causes a switch to - vvii editing mode. - -DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS - The following is a list of the default emacs and vi bind- - ings. Characters with the eighth bit set are written as - M-<character>, and are referred to as _m_e_t_a_f_i_e_d characters. - The printable ASCII characters not mentioned in the list - of emacs standard bindings are bound to the sseellff--iinnsseerrtt - function, which just inserts the given character into the - input line. In vi insertion mode, all characters not - specifically mentioned are bound to sseellff--iinnsseerrtt. Charac- - ters assigned to signal generation by _s_t_t_y(1) or the ter- - minal driver, such as C-Z or C-C, retain that function. - Upper and lower case metafied characters are bound to the - same function in the emacs mode meta keymap. The remain- - ing characters are unbound, which causes readline to ring - the bell (subject to the setting of the bbeellll--ssttyyllee vari- - able). - - EEmmaaccss MMooddee - Emacs Standard bindings - - "C-@" set-mark - "C-A" beginning-of-line - "C-B" backward-char - "C-D" delete-char - "C-E" end-of-line - "C-F" forward-char - "C-G" abort - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-]" character-search - "C-_" undo - " " to "/" self-insert - "0" to "9" self-insert - ":" to "~" self-insert - "C-?" backward-delete-char - - Emacs Meta bindings - - "M-C-G" abort - "M-C-H" backward-kill-word - "M-C-I" tab-insert - "M-C-J" vi-editing-mode - "M-C-M" vi-editing-mode - "M-C-R" revert-line - "M-C-Y" yank-nth-arg - "M-C-[" complete - "M-C-]" character-search-backward - "M-space" set-mark - "M-#" insert-comment - "M-&" tilde-expand - "M-*" insert-completions - "M--" digit-argument - "M-." yank-last-arg - "M-0" digit-argument - "M-1" digit-argument - "M-2" digit-argument - "M-3" digit-argument - "M-4" digit-argument - "M-5" digit-argument - "M-6" digit-argument - "M-7" digit-argument - "M-8" digit-argument - "M-9" digit-argument - "M-<" beginning-of-history - "M-=" possible-completions - "M->" end-of-history - "M-?" possible-completions - "M-B" backward-word - "M-C" capitalize-word - "M-D" kill-word - "M-F" forward-word - "M-L" downcase-word - "M-N" non-incremental-forward-search-history - "M-P" non-incremental-reverse-search-history - "M-R" revert-line - "M-T" transpose-words - "M-U" upcase-word - "M-Y" yank-pop - "M-\" delete-horizontal-space - "M-~" tilde-expand - "M-C-?" backward-kill-word - "M-_" yank-last-arg - - Emacs Control-X bindings - - "C-XC-G" abort - "C-XC-R" re-read-init-file - "C-XC-U" undo - "C-XC-X" exchange-point-and-mark - "C-X(" start-kbd-macro - "C-X)" end-kbd-macro - "C-XE" call-last-kbd-macro - "C-XC-?" backward-kill-line - - - VVII MMooddee bbiinnddiinnggss - VI Insert Mode functions - - "C-D" vi-eof-maybe - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-M" accept-line - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-[" vi-movement-mode - "C-_" undo - " " to "~" self-insert - "C-?" backward-delete-char - - VI Command Mode functions - - "C-D" vi-eof-maybe - "C-E" emacs-editing-mode - "C-G" abort - "C-H" backward-char - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-_" vi-undo - " " forward-char - "#" insert-comment - "$" end-of-line - "%" vi-match - "&" vi-tilde-expand - "*" vi-complete - "+" next-history - "," vi-char-search - "-" previous-history - "." vi-redo - "/" vi-search - "0" beginning-of-line - "1" to "9" vi-arg-digit - ";" vi-char-search - "=" vi-complete - "?" vi-search - "A" vi-append-eol - "B" vi-prev-word - "C" vi-change-to - "D" vi-delete-to - "E" vi-end-word - "F" vi-char-search - "G" vi-fetch-history - "I" vi-insert-beg - "N" vi-search-again - "P" vi-put - "R" vi-replace - "S" vi-subst - "T" vi-char-search - "U" revert-line - "W" vi-next-word - "X" backward-delete-char - "Y" vi-yank-to - "\" vi-complete - "^" vi-first-print - "_" vi-yank-arg - "`" vi-goto-mark - "a" vi-append-mode - "b" vi-prev-word - "c" vi-change-to - "d" vi-delete-to - "e" vi-end-word - "f" vi-char-search - "h" backward-char - "i" vi-insertion-mode - "j" next-history - "k" prev-history - "l" forward-char - "m" vi-set-mark - "n" vi-search-again - "p" vi-put - "r" vi-change-char - "s" vi-subst - "t" vi-char-search - "u" vi-undo - "w" vi-next-word - "x" vi-delete - "y" vi-yank-to - "|" vi-column - "~" vi-change-case - -SSEEEE AALLSSOO - _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _b_a_s_h(1) - -FFIILLEESS - _~_/_._i_n_p_u_t_r_c - Individual rreeaaddlliinnee initialization file - -AAUUTTHHOORRSS - Brian Fox, Free Software Foundation - bfox@gnu.org - - Chet Ramey, Case Western Reserve University - chet@ins.CWRU.Edu - -BBUUGG RREEPPOORRTTSS - If you find a bug in rreeaaddlliinnee,, you should report it. But - first, you should make sure that it really is a bug, and - that it appears in the latest version of the rreeaaddlliinnee - library that you have. - - Once you have determined that a bug actually exists, mail - a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, - you are welcome to mail that as well! Suggestions and - `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_- - _l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup - ggnnuu..bbaasshh..bbuugg. - - Comments and bug reports concerning this manual page - should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. - -BBUUGGSS - It's too big and too slow. - - - -GNU Readline 4.3 2002 January 22 READLINE(3) diff --git a/readline-4.3.orig/doc/readline.3 b/readline-4.3.orig/doc/readline.3 deleted file mode 100644 index afd6ba2..0000000 --- a/readline-4.3.orig/doc/readline.3 +++ /dev/null @@ -1,1272 +0,0 @@ -.\" -.\" MAN PAGE COMMENTS to -.\" -.\" Chet Ramey -.\" Information Network Services -.\" Case Western Reserve University -.\" chet@ins.CWRU.Edu -.\" -.\" Last Change: Tue Jan 22 09:18:25 EST 2002 -.\" -.TH READLINE 3 "2002 January 22" "GNU Readline 4.3" -.\" -.\" File Name macro. This used to be `.PN', for Path Name, -.\" but Sun doesn't seem to like that very much. -.\" -.de FN -\fI\|\\$1\|\fP -.. -.SH NAME -readline \- get a line from a user with editing -.SH SYNOPSIS -.LP -.nf -.ft B -#include <stdio.h> -#include <readline/readline.h> -#include <readline/history.h> -.ft -.fi -.LP -.nf -\fIchar *\fP -.br -\fBreadline\fP (\fIconst char *prompt\fP); -.fi -.SH COPYRIGHT -.if n Readline is Copyright (C) 1989\-2002 by the Free Software Foundation, Inc. -.if t Readline is Copyright \(co 1989\-2002 by the Free Software Foundation, Inc. -.SH DESCRIPTION -.LP -.B readline -will read a line from the terminal -and return it, using -.B prompt -as a prompt. If -.B prompt -is \fBNULL\fP or the empty string, no prompt is issued. -The line returned is allocated with -.IR malloc (3); -the caller must free it when finished. The line returned -has the final newline removed, so only the text of the line -remains. -.LP -.B readline -offers editing capabilities while the user is entering the -line. -By default, the line editing commands -are similar to those of emacs. -A vi\-style line editing interface is also available. -.LP -This manual page describes only the most basic use of \fBreadline\fP. -Much more functionality is available; see -\fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP -for additional information. -.SH RETURN VALUE -.LP -.B readline -returns the text of the line read. A blank line -returns the empty string. If -.B EOF -is encountered while reading a line, and the line is empty, -.B NULL -is returned. If an -.B EOF -is read with a non\-empty line, it is -treated as a newline. -.SH NOTATION -.LP -An emacs-style notation is used to denote -keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n -means Control\-N. Similarly, -.I meta -keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards -without a -.I meta -key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key -then the -.I x -key. This makes ESC the \fImeta prefix\fP. -The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, -or press the Escape key -then hold the Control key while pressing the -.I x -key.) -.PP -Readline commands may be given numeric -.IR arguments , -which normally act as a repeat count. Sometimes, however, it is the -sign of the argument that is significant. Passing a negative argument -to a command that acts in the forward direction (e.g., \fBkill\-line\fP) -causes that command to act in a backward direction. Commands whose -behavior with arguments deviates from this are noted. -.PP -When a command is described as \fIkilling\fP text, the text -deleted is saved for possible future retrieval -(\fIyanking\fP). The killed text is saved in a -\fIkill ring\fP. Consecutive kills cause the text to be -accumulated into one unit, which can be yanked all at once. -Commands which do not kill text separate the chunks of text -on the kill ring. -.SH INITIALIZATION FILE -.LP -Readline is customized by putting commands in an initialization -file (the \fIinputrc\fP file). -The name of this file is taken from the value of the -.B INPUTRC -environment variable. If that variable is unset, the default is -.IR ~/.inputrc . -When a program which uses the readline library starts up, the -init file is read, and the key bindings and variables are set. -There are only a few basic constructs allowed in the -readline init file. Blank lines are ignored. -Lines beginning with a \fB#\fP are comments. -Lines beginning with a \fB$\fP indicate conditional constructs. -Other lines denote key bindings and variable settings. -Each program using this library may add its own commands -and bindings. -.PP -For example, placing -.RS -.PP -M\-Control\-u: universal\-argument -.RE -or -.RS -C\-Meta\-u: universal\-argument -.RE -.sp -into the -.I inputrc -would make M\-C\-u execute the readline command -.IR universal\-argument . -.PP -The following symbolic character names are recognized while -processing key bindings: -.IR DEL , -.IR ESC , -.IR ESCAPE , -.IR LFD , -.IR NEWLINE , -.IR RET , -.IR RETURN , -.IR RUBOUT , -.IR SPACE , -.IR SPC , -and -.IR TAB . -.PP -In addition to command names, readline allows keys to be bound -to a string that is inserted when the key is pressed (a \fImacro\fP). -.PP -.SS Key Bindings -.PP -The syntax for controlling key bindings in the -.I inputrc -file is simple. All that is required is the name of the -command or the text of a macro and a key sequence to which -it should be bound. The name may be specified in one of two ways: -as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP -prefixes, or as a key sequence. -.PP -When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP, -.I keyname -is the name of a key spelled out in English. For example: -.sp -.RS -Control\-u: universal\-argument -.br -Meta\-Rubout: backward\-kill\-word -.br -Control\-o: "> output" -.RE -.LP -In the above example, -.I C\-u -is bound to the function -.BR universal\-argument , -.I M-DEL -is bound to the function -.BR backward\-kill\-word , -and -.I C\-o -is bound to run the macro -expressed on the right hand side (that is, to insert the text -.if t \f(CW> output\fP -.if n ``> output'' -into the line). -.PP -In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, -.B keyseq -differs from -.B keyname -above in that strings denoting -an entire key sequence may be specified by placing the sequence -within double quotes. Some GNU Emacs style key escapes can be -used, as in the following example, but the symbolic character names -are not recognized. -.sp -.RS -"\eC\-u": universal\-argument -.br -"\eC\-x\eC\-r": re\-read\-init\-file -.br -"\ee[11~": "Function Key 1" -.RE -.PP -In this example, -.I C-u -is again bound to the function -.BR universal\-argument . -.I "C-x C-r" -is bound to the function -.BR re\-read\-init\-file , -and -.I "ESC [ 1 1 ~" -is bound to insert the text -.if t \f(CWFunction Key 1\fP. -.if n ``Function Key 1''. -.PP -The full set of GNU Emacs style escape sequences available when specifying -key sequences is -.RS -.PD 0 -.TP -.B \eC\- -control prefix -.TP -.B \eM\- -meta prefix -.TP -.B \ee -an escape character -.TP -.B \e\e -backslash -.TP -.B \e" -literal ", a double quote -.TP -.B \e' -literal ', a single quote -.RE -.PD -.PP -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: -.RS -.PD 0 -.TP -.B \ea -alert (bell) -.TP -.B \eb -backspace -.TP -.B \ed -delete -.TP -.B \ef -form feed -.TP -.B \en -newline -.TP -.B \er -carriage return -.TP -.B \et -horizontal tab -.TP -.B \ev -vertical tab -.TP -.B \e\fInnn\fP -the eight-bit character whose value is the octal value \fInnn\fP -(one to three digits) -.TP -.B \ex\fIHH\fP -the eight-bit character whose value is the hexadecimal value \fIHH\fP -(one or two hex digits) -.RE -.PD -.PP -When entering the text of a macro, single or double quotes should -be used to indicate a macro definition. Unquoted text -is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including " and '. -.PP -.B Bash -allows the current readline key bindings to be displayed or modified -with the -.B bind -builtin command. The editing mode may be switched during interactive -use by using the -.B \-o -option to the -.B set -builtin command. Other programs using this library provide -similar mechanisms. The -.I inputrc -file may be edited and re-read if a program does not provide -any other means to incorporate new bindings. -.SS Variables -.PP -Readline has variables that can be used to further customize its -behavior. A variable may be set in the -.I inputrc -file with a statement of the form -.RS -.PP -\fBset\fP \fIvariable\-name\fP \fIvalue\fP -.RE -.PP -Except where noted, readline variables can take the values -.B On -or -.B Off -(without regard to case). -The variables and their default values are: -.PP -.PD 0 -.TP -.B bell\-style (audible) -Controls what happens when readline wants to ring the terminal bell. -If set to \fBnone\fP, readline never rings the bell. If set to -\fBvisible\fP, readline uses a visible bell if one is available. -If set to \fBaudible\fP, readline attempts to ring the terminal's bell. -.TP -.B comment\-begin (``#'') -The string that is inserted in \fBvi\fP mode when the -.B insert\-comment -command is executed. -This command is bound to -.B M\-# -in emacs mode and to -.B # -in vi command mode. -.TP -.B completion\-ignore\-case (Off) -If set to \fBOn\fP, readline performs filename matching and completion -in a case\-insensitive fashion. -.TP -.B completion\-query\-items (100) -This determines when the user is queried about viewing -the number of possible completions -generated by the \fBpossible\-completions\fP command. -It may be set to any integer value greater than or equal to -zero. If the number of possible completions is greater than -or equal to the value of this variable, the user is asked whether -or not he wishes to view them; otherwise they are simply listed -on the terminal. -.TP -.B convert\-meta (On) -If set to \fBOn\fP, readline will convert characters with the -eighth bit set to an ASCII key sequence -by stripping the eighth bit and prefixing it with an -escape character (in effect, using escape as the \fImeta prefix\fP). -.TP -.B disable\-completion (Off) -If set to \fBOn\fP, readline will inhibit word completion. Completion -characters will be inserted into the line as if they had been -mapped to \fBself-insert\fP. -.TP -.B editing\-mode (emacs) -Controls whether readline begins with a set of key bindings similar -to emacs or vi. -.B editing\-mode -can be set to either -.B emacs -or -.BR vi . -.TP -.B enable\-keypad (Off) -When set to \fBOn\fP, readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. -.TP -.B expand\-tilde (Off) -If set to \fBon\fP, tilde expansion is performed when readline -attempts word completion. -.TP -.B history-preserve-point -If set to \fBon\fP, the history code attempts to place point at the -same location on each history line retrived with \fBprevious-history\fP -or \fBnext-history\fP. -.TP -.B horizontal\-scroll\-mode (Off) -When set to \fBOn\fP, makes readline use a single line for display, -scrolling the input horizontally on a single screen line when it -becomes longer than the screen width rather than wrapping to a new line. -.TP -.B input\-meta (Off) -If set to \fBOn\fP, readline will enable eight-bit input (that is, -it will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The name -.B meta\-flag -is a synonym for this variable. -.TP -.B isearch\-terminators (``C\-[ C\-J'') -The string of characters that should terminate an incremental -search without subsequently executing the character as a command. -If this variable has not been given a value, the characters -\fIESC\fP and \fIC\-J\fP will terminate an incremental search. -.TP -.B keymap (emacs) -Set the current readline keymap. The set of legal keymap names is -\fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, -vi-command\fP, and -.IR vi-insert . -\fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is -equivalent to \fIemacs-standard\fP. The default value is -.IR emacs . -The value of -.B editing\-mode -also affects the default keymap. -.TP -.B mark\-directories (On) -If set to \fBOn\fP, completed directory names have a slash -appended. -.TP -.B mark\-modified\-lines (Off) -If set to \fBOn\fP, history lines that have been modified are displayed -with a preceding asterisk (\fB*\fP). -.TP -.B mark\-symlinked\-directories (Off) -If set to \fBOn\fP, completed names which are symbolic links to directories -have a slash appended (subject to the value of -\fBmark\-directories\fP). -.TP -.B match\-hidden\-files (On) -This variable, when set to \fBOn\fP, causes readline to match files whose -names begin with a `.' (hidden files) when performing filename -completion, unless the leading `.' is -supplied by the user in the filename to be completed. -.TP -.B output\-meta (Off) -If set to \fBOn\fP, readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. -.TP -.B page\-completions (On) -If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager -to display a screenful of possible completions at a time. -.TP -.B print\-completions\-horizontally (Off) -If set to \fBOn\fP, readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -.TP -.B show\-all\-if\-ambiguous (Off) -This alters the default behavior of the completion functions. If -set to -.BR on , -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -.TP -.B visible\-stats (Off) -If set to \fBOn\fP, a character denoting a file's type as reported -by \fIstat\fP(2) is appended to the filename when listing possible -completions. -.PD -.SS Conditional Constructs -.PP -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. -.IP \fB$if\fP -The -.B $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. -.RS -.IP \fBmode\fP -The \fBmode=\fP form of the \fB$if\fP directive is used to test -whether readline is in emacs or vi mode. -This may be used in conjunction -with the \fBset keymap\fP command, for instance, to set bindings in -the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if -readline is starting out in emacs mode. -.IP \fBterm\fP -The \fBterm=\fP 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 -.B = -is tested against the full name of the terminal and the portion -of the terminal name before the first \fB\-\fP. This allows -.I sun -to match both -.I sun -and -.IR sun\-cmd , -for instance. -.IP \fBapplication\fP -The \fBapplication\fP construct is used to include -application-specific settings. Each program using the readline -library sets the \fIapplication name\fP, and an initialization -file can test for a particular value. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: -.sp 1 -.RS -.nf -\fB$if\fP Bash -# Quote the current or previous word -"\eC-xq": "\eeb\e"\eef\e"" -\fB$endif\fP -.fi -.RE -.RE -.IP \fB$endif\fP -This command, as seen in the previous example, terminates an -\fB$if\fP command. -.IP \fB$else\fP -Commands in this branch of the \fB$if\fP directive are executed if -the test fails. -.IP \fB$include\fP -This directive takes a single filename as an argument and reads commands -and bindings from that file. For example, the following directive -would read \fI/etc/inputrc\fP: -.sp 1 -.RS -.nf -\fB$include\fP \^ \fI/etc/inputrc\fP -.fi -.RE -.SH SEARCHING -.PP -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: -.I incremental -and -.IR non-incremental . -.PP -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 -\fBC\-r\fP. Typing \fBC\-s\fP searches forward through the history. -The characters present in the value of the \fBisearch-terminators\fP -variable are used to terminate an incremental search. -If that variable has not been assigned a value the \fIEscape\fP and -\fBC\-J\fP characters will terminate an incremental search. -\fBC\-G\fP 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. -.PP -To find other matching entries in the history list, type \fBC\-s\fP or -\fBC\-r\fP as appropriate. -This will search backward or forward in the history for the next -line matching the search string typed so far. -Any other key sequence bound to a readline command will terminate -the search and execute that command. -For instance, a newline will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. -.PP -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. -.SH EDITING COMMANDS -.PP -The following is a list of the names of the commands and the default -key sequences to which they are bound. -Command names without an accompanying key sequence are unbound by default. -.PP -In the following descriptions, \fIpoint\fP refers to the current cursor -position, and \fImark\fP refers to a cursor position saved by the -\fBset\-mark\fP command. -The text between the point and mark is referred to as the \fIregion\fP. -.SS Commands for Moving -.PP -.PD 0 -.TP -.B beginning\-of\-line (C\-a) -Move to the start of the current line. -.TP -.B end\-of\-line (C\-e) -Move to the end of the line. -.TP -.B forward\-char (C\-f) -Move forward a character. -.TP -.B backward\-char (C\-b) -Move back a character. -.TP -.B forward\-word (M\-f) -Move forward to the end of the next word. Words are composed of -alphanumeric characters (letters and digits). -.TP -.B backward\-word (M\-b) -Move back to the start of the current or previous word. Words are -composed of alphanumeric characters (letters and digits). -.TP -.B clear\-screen (C\-l) -Clear the screen leaving the current line at the top of the screen. -With an argument, refresh the current line without clearing the -screen. -.TP -.B redraw\-current\-line -Refresh the current line. -.PD -.SS Commands for Manipulating the History -.PP -.PD 0 -.TP -.B accept\-line (Newline, Return) -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -\fBadd_history()\fP. -If the line is a modified history line, the history line is restored to its original state. -.TP -.B previous\-history (C\-p) -Fetch the previous command from the history list, moving back in -the list. -.TP -.B next\-history (C\-n) -Fetch the next command from the history list, moving forward in the -list. -.TP -.B beginning\-of\-history (M\-<) -Move to the first line in the history. -.TP -.B end\-of\-history (M\->) -Move to the end of the input history, i.e., the line currently being -entered. -.TP -.B reverse\-search\-history (C\-r) -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. -.TP -.B forward\-search\-history (C\-s) -Search forward starting at the current line and moving `down' through -the history as necessary. This is an incremental search. -.TP -.B non\-incremental\-reverse\-search\-history (M\-p) -Search backward through the history starting at the current line -using a non-incremental search for a string supplied by the user. -.TP -.B non\-incremental\-forward\-search\-history (M\-n) -Search forward through the history using a non-incremental search -for a string supplied by the user. -.TP -.B history\-search\-forward -Search forward through the history for the string of characters -between the start of the current line and the current cursor -position (the \fIpoint\fP). -This is a non-incremental search. -.TP -.B history\-search\-backward -Search backward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -.TP -.B yank\-nth\-arg (M\-C\-y) -Insert the first argument to the previous command (usually -the second word on the previous line) at point. -With an argument -.IR n , -insert the \fIn\fPth word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the \fIn\fPth word from the end of the previous command. -.TP -.B -yank\-last\-arg (M\-.\^, M\-_\^) -Insert the last argument to the previous command (the last word of -the previous history entry). With an argument, -behave exactly like \fByank\-nth\-arg\fP. -Successive calls to \fByank\-last\-arg\fP move back through the history -list, inserting the last argument of each line in turn. -.PD -.SS Commands for Changing Text -.PP -.PD 0 -.TP -.B delete\-char (C\-d) -Delete the character at point. If point is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to \fBdelete\-char\fP, then return -.SM -.BR EOF . -.TP -.B backward\-delete\-char (Rubout) -Delete the character behind the cursor. When given a numeric argument, -save the deleted text on the kill ring. -.TP -.B forward\-backward\-delete\-char -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. -.TP -.B quoted\-insert (C\-q, C\-v) -Add the next character that you type to the line verbatim. This is -how to insert characters like \fBC\-q\fP, for example. -.TP -.B tab\-insert (M-TAB) -Insert a tab character. -.TP -.B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) -Insert the character typed. -.TP -.B transpose\-chars (C\-t) -Drag the character before point forward over the character at point, -moving point forward as well. -If point is at the end of the line, then this transposes -the two characters before point. -Negative arguments have no effect. -.TP -.B transpose\-words (M\-t) -Drag the word before point past the word after point, -moving point over that word as well. -If point is at the end of the line, this transposes -the last two words on the line. -.TP -.B upcase\-word (M\-u) -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move point. -.TP -.B downcase\-word (M\-l) -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move point. -.TP -.B capitalize\-word (M\-c) -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move point. -.TP -.B overwrite\-mode -Toggle overwrite mode. With an explicit positive numeric argument, -switches to overwrite mode. With an explicit non-positive numeric -argument, switches to insert mode. This command affects only -\fBemacs\fP mode; \fBvi\fP mode does overwrite differently. -Each call to \fIreadline()\fP starts in insert mode. -In overwrite mode, characters bound to \fBself\-insert\fP replace -the text at point rather than pushing the text to the right. -Characters bound to \fBbackward\-delete\-char\fP replace the character -before point with a space. By default, this command is unbound. -.PD -.SS Killing and Yanking -.PP -.PD 0 -.TP -.B kill\-line (C\-k) -Kill the text from point to the end of the line. -.TP -.B backward\-kill\-line (C\-x Rubout) -Kill backward to the beginning of the line. -.TP -.B unix\-line\-discard (C\-u) -Kill backward from point to the beginning of the line. -The killed text is saved on the kill-ring. -.\" There is no real difference between this and backward-kill-line -.TP -.B kill\-whole\-line -Kill all characters on the current line, no matter where point is. -.TP -.B kill\-word (M\-d) -Kill from point the end of the current word, or if between -words, to the end of the next word. Word boundaries are the same as -those used by \fBforward\-word\fP. -.TP -.B backward\-kill\-word (M\-Rubout) -Kill the word behind point. -Word boundaries are the same as those used by \fBbackward\-word\fP. -.TP -.B unix\-word\-rubout (C\-w) -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. -.TP -.B delete\-horizontal\-space (M\-\e) -Delete all spaces and tabs around point. -.TP -.B kill\-region -Kill the text between the point and \fImark\fP (saved cursor position). -This text is referred to as the \fIregion\fP. -.TP -.B copy\-region\-as\-kill -Copy the text in the region to the kill buffer. -.TP -.B copy\-backward\-word -Copy the word before point to the kill buffer. -The word boundaries are the same as \fBbackward\-word\fP. -.TP -.B copy\-forward\-word -Copy the word following point to the kill buffer. -The word boundaries are the same as \fBforward\-word\fP. -.TP -.B yank (C\-y) -Yank the top of the kill ring into the buffer at point. -.TP -.B yank\-pop (M\-y) -Rotate the kill ring, and yank the new top. Only works following -.B yank -or -.BR yank\-pop . -.PD -.SS Numeric Arguments -.PP -.PD 0 -.TP -.B digit\-argument (M\-0, M\-1, ..., M\-\-) -Add this digit to the argument already accumulating, or start a new -argument. M\-\- starts a negative argument. -.TP -.B universal\-argument -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing -.B 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. -.PD -.SS Completing -.PP -.PD 0 -.TP -.B complete (TAB) -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -.BR Bash , -for instance, attempts completion treating the text as a variable -(if the text begins with \fB$\fP), username (if the text begins with -\fB~\fP), hostname (if the text begins with \fB@\fP), or -command (including aliases and functions) in turn. If none -of these produces a match, filename completion is attempted. -.BR Gdb , -on the other hand, -allows completion of program functions and variables, and -only attempts filename completion under certain circumstances. -.TP -.B possible\-completions (M\-?) -List the possible completions of the text before point. -.TP -.B insert\-completions (M\-*) -Insert all completions of the text before point -that would have been generated by -\fBpossible\-completions\fP. -.TP -.B menu\-complete -Similar to \fBcomplete\fP, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of \fBmenu\-complete\fP steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung -(subject to the setting of \Bbell\-style\fP) -and the original text is restored. -An argument of \fIn\fP moves \fIn\fP 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 \fBTAB\fP, but is unbound -by default. -.TP -.B delete\-char\-or\-list -Deletes the character under the cursor if not at the beginning or -end of the line (like \fBdelete-char\fP). -If at the end of the line, behaves identically to -\fBpossible-completions\fP. -.PD -.SS Keyboard Macros -.PP -.PD 0 -.TP -.B start\-kbd\-macro (C\-x (\^) -Begin saving the characters typed into the current keyboard macro. -.TP -.B end\-kbd\-macro (C\-x )\^) -Stop saving the characters typed into the current keyboard macro -and store the definition. -.TP -.B call\-last\-kbd\-macro (C\-x e) -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. -.PD -.SS Miscellaneous -.PP -.PD 0 -.TP -.B re\-read\-init\-file (C\-x C\-r) -Read in the contents of the \fIinputrc\fP file, and incorporate -any bindings or variable assignments found there. -.TP -.B abort (C\-g) -Abort the current editing command and -ring the terminal's bell (subject to the setting of -.BR bell\-style ). -.TP -.B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...) -If the metafied character \fIx\fP is lowercase, run the command -that is bound to the corresponding uppercase character. -.TP -.B prefix\-meta (ESC) -Metafy the next character typed. -.SM -.B ESC -.B f -is equivalent to -.BR Meta\-f . -.TP -.B undo (C\-_, C\-x C\-u) -Incremental undo, separately remembered for each line. -.TP -.B revert\-line (M\-r) -Undo all changes made to this line. This is like executing the -.B undo -command enough times to return the line to its initial state. -.TP -.B tilde\-expand (M\-&) -Perform tilde expansion on the current word. -.TP -.B set\-mark (C\-@, M\-<space>) -Set the mark to the point. If a -numeric argument is supplied, the mark is set to that position. -.TP -.B exchange\-point\-and\-mark (C\-x C\-x) -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. -.TP -.B character\-search (C\-]) -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. -.TP -.B character\-search\-backward (M\-C\-]) -A character is read and point is moved to the previous occurrence of that -character. A negative count searches for subsequent occurrences. -.TP -.B insert\-comment (M\-#) -Without a numeric argument, the value of the readline -.B comment\-begin -variable is inserted at the beginning of the current line. -If a numeric argument is supplied, this command acts as a toggle: if -the characters at the beginning of the line do not match the value -of \fBcomment\-begin\fP, the value is inserted, otherwise -the characters in \fBcomment-begin\fP are deleted from the beginning of -the line. -In either case, the line is accepted as if a newline had been typed. -The default value of -.B comment\-begin -makes the current line a shell comment. -If a numeric argument causes the comment character to be removed, the line -will be executed by the shell. -.TP -.B dump\-functions -Print all of the functions and their key bindings to the -readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an \fIinputrc\fP file. -.TP -.B dump\-variables -Print all of the settable variables and their values to the -readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an \fIinputrc\fP file. -.TP -.B dump\-macros -Print all of the readline key sequences bound to macros and the -strings they ouput. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an \fIinputrc\fP file. -.TP -.B emacs\-editing\-mode (C\-e) -When in -.B vi -command mode, this causes a switch to -.B emacs -editing mode. -.TP -.B vi\-editing\-mode (M\-C\-j) -When in -.B emacs -editing mode, this causes a switch to -.B vi -editing mode. -.PD -.SH DEFAULT KEY BINDINGS -.LP -The following is a list of the default emacs and vi bindings. -Characters with the eighth bit set are written as M\-<character>, and -are referred to as -.I metafied -characters. -The printable ASCII characters not mentioned in the list of emacs -standard bindings are bound to the -.B self\-insert -function, which just inserts the given character into the input line. -In vi insertion mode, all characters not specifically mentioned are -bound to -.BR self\-insert . -Characters assigned to signal generation by -.IR stty (1) -or the terminal driver, such as C-Z or C-C, -retain that function. -Upper and lower case metafied characters are bound to the same function in -the emacs mode meta keymap. -The remaining characters are unbound, which causes readline -to ring the bell (subject to the setting of the -.B bell\-style -variable). -.SS Emacs Mode -.RS +.6i -.nf -.ta 2.5i -.sp -Emacs Standard bindings -.sp -"C-@" set-mark -"C-A" beginning-of-line -"C-B" backward-char -"C-D" delete-char -"C-E" end-of-line -"C-F" forward-char -"C-G" abort -"C-H" backward-delete-char -"C-I" complete -"C-J" accept-line -"C-K" kill-line -"C-L" clear-screen -"C-M" accept-line -"C-N" next-history -"C-P" previous-history -"C-Q" quoted-insert -"C-R" reverse-search-history -"C-S" forward-search-history -"C-T" transpose-chars -"C-U" unix-line-discard -"C-V" quoted-insert -"C-W" unix-word-rubout -"C-Y" yank -"C-]" character-search -"C-_" undo -"\^ " to "/" self-insert -"0" to "9" self-insert -":" to "~" self-insert -"C-?" backward-delete-char -.PP -Emacs Meta bindings -.sp -"M-C-G" abort -"M-C-H" backward-kill-word -"M-C-I" tab-insert -"M-C-J" vi-editing-mode -"M-C-M" vi-editing-mode -"M-C-R" revert-line -"M-C-Y" yank-nth-arg -"M-C-[" complete -"M-C-]" character-search-backward -"M-space" set-mark -"M-#" insert-comment -"M-&" tilde-expand -"M-*" insert-completions -"M--" digit-argument -"M-." yank-last-arg -"M-0" digit-argument -"M-1" digit-argument -"M-2" digit-argument -"M-3" digit-argument -"M-4" digit-argument -"M-5" digit-argument -"M-6" digit-argument -"M-7" digit-argument -"M-8" digit-argument -"M-9" digit-argument -"M-<" beginning-of-history -"M-=" possible-completions -"M->" end-of-history -"M-?" possible-completions -"M-B" backward-word -"M-C" capitalize-word -"M-D" kill-word -"M-F" forward-word -"M-L" downcase-word -"M-N" non-incremental-forward-search-history -"M-P" non-incremental-reverse-search-history -"M-R" revert-line -"M-T" transpose-words -"M-U" upcase-word -"M-Y" yank-pop -"M-\e" delete-horizontal-space -"M-~" tilde-expand -"M-C-?" backward-kill-word -"M-_" yank-last-arg -.PP -Emacs Control-X bindings -.sp -"C-XC-G" abort -"C-XC-R" re-read-init-file -"C-XC-U" undo -"C-XC-X" exchange-point-and-mark -"C-X(" start-kbd-macro -"C-X)" end-kbd-macro -"C-XE" call-last-kbd-macro -"C-XC-?" backward-kill-line -.sp -.RE -.SS VI Mode bindings -.RS +.6i -.nf -.ta 2.5i -.sp -.PP -VI Insert Mode functions -.sp -"C-D" vi-eof-maybe -"C-H" backward-delete-char -"C-I" complete -"C-J" accept-line -"C-M" accept-line -"C-R" reverse-search-history -"C-S" forward-search-history -"C-T" transpose-chars -"C-U" unix-line-discard -"C-V" quoted-insert -"C-W" unix-word-rubout -"C-Y" yank -"C-[" vi-movement-mode -"C-_" undo -"\^ " to "~" self-insert -"C-?" backward-delete-char -.PP -VI Command Mode functions -.sp -"C-D" vi-eof-maybe -"C-E" emacs-editing-mode -"C-G" abort -"C-H" backward-char -"C-J" accept-line -"C-K" kill-line -"C-L" clear-screen -"C-M" accept-line -"C-N" next-history -"C-P" previous-history -"C-Q" quoted-insert -"C-R" reverse-search-history -"C-S" forward-search-history -"C-T" transpose-chars -"C-U" unix-line-discard -"C-V" quoted-insert -"C-W" unix-word-rubout -"C-Y" yank -"C-_" vi-undo -"\^ " forward-char -"#" insert-comment -"$" end-of-line -"%" vi-match -"&" vi-tilde-expand -"*" vi-complete -"+" next-history -"," vi-char-search -"-" previous-history -"." vi-redo -"/" vi-search -"0" beginning-of-line -"1" to "9" vi-arg-digit -";" vi-char-search -"=" vi-complete -"?" vi-search -"A" vi-append-eol -"B" vi-prev-word -"C" vi-change-to -"D" vi-delete-to -"E" vi-end-word -"F" vi-char-search -"G" vi-fetch-history -"I" vi-insert-beg -"N" vi-search-again -"P" vi-put -"R" vi-replace -"S" vi-subst -"T" vi-char-search -"U" revert-line -"W" vi-next-word -"X" backward-delete-char -"Y" vi-yank-to -"\e" vi-complete -"^" vi-first-print -"_" vi-yank-arg -"`" vi-goto-mark -"a" vi-append-mode -"b" vi-prev-word -"c" vi-change-to -"d" vi-delete-to -"e" vi-end-word -"f" vi-char-search -"h" backward-char -"i" vi-insertion-mode -"j" next-history -"k" prev-history -"l" forward-char -"m" vi-set-mark -"n" vi-search-again -"p" vi-put -"r" vi-change-char -"s" vi-subst -"t" vi-char-search -"u" vi-undo -"w" vi-next-word -"x" vi-delete -"y" vi-yank-to -"|" vi-column -"~" vi-change-case -.RE -.SH "SEE ALSO" -.PD 0 -.TP -\fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey -.TP -\fIThe Gnu History Library\fP, Brian Fox and Chet Ramey -.TP -\fIbash\fP(1) -.PD -.SH FILES -.PD 0 -.TP -.FN ~/.inputrc -Individual \fBreadline\fP initialization file -.PD -.SH AUTHORS -Brian Fox, Free Software Foundation -.br -bfox@gnu.org -.PP -Chet Ramey, Case Western Reserve University -.br -chet@ins.CWRU.Edu -.SH BUG REPORTS -If you find a bug in -.B readline, -you should report it. But first, you should -make sure that it really is a bug, and that it appears in the latest -version of the -.B readline -library that you have. -.PP -Once you have determined that a bug actually exists, mail a -bug report to \fIbug\-readline\fP@\fIgnu.org\fP. -If you have a fix, you are welcome to mail that -as well! Suggestions and `philosophical' bug reports may be mailed -to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet -newsgroup -.BR gnu.bash.bug . -.PP -Comments and bug reports concerning -this manual page should be directed to -.IR chet@ins.CWRU.Edu . -.SH BUGS -.PP -It's too big and too slow. diff --git a/readline-4.3.orig/doc/readline.dvi b/readline-4.3.orig/doc/readline.dvi Binary files differdeleted file mode 100644 index 3c1c30f..0000000 --- a/readline-4.3.orig/doc/readline.dvi +++ /dev/null diff --git a/readline-4.3.orig/doc/readline.html b/readline-4.3.orig/doc/readline.html deleted file mode 100644 index 42485f5..0000000 --- a/readline-4.3.orig/doc/readline.html +++ /dev/null @@ -1,5908 +0,0 @@ -<HTML> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on June, 27 2002 by texi2html 1.64 --> -<!-- -Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) - Karl Berry <karl@freefriends.org> - Olaf Bachmann <obachman@mathematik.uni-kl.de> - and many others. -Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> -Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> - ---> -<HEAD> -<TITLE>GNU Readline Library: </TITLE> - -<META NAME="description" CONTENT="GNU Readline Library: "> -<META NAME="keywords" CONTENT="GNU Readline Library: "> -<META NAME="resource-type" CONTENT="document"> -<META NAME="distribution" CONTENT="global"> -<META NAME="Generator" CONTENT="texi2html 1.64"> - -</HEAD> - -<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> - -<A NAME="SEC_Top"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>GNU Readline Library</H1></P><P> - -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. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC1">1. Command Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC23">2. Programming with GNU Readline</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline Programmer's Manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC49">Concept Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of concepts described in this manual.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC50">Function and Variable Index</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Index of externally visible functions - and variables.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<HR SIZE=1> -<A NAME="SEC1"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<A NAME="Command Line Editing"></A> -<H1> 1. Command Line Editing </H1> -<!--docid::SEC1::--> -<P> - -This chapter describes the basic features of the GNU -command line editing interface. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands - available for binding</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC22">1.5 Readline vi Mode</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline - behave like the vi editor.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Introduction and Notation"></A> -<HR SIZE="6"> -<A NAME="SEC2"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.1 Introduction to Line Editing </H2> -<!--docid::SEC2::--> -<P> - -The following paragraphs describe the notation used to represent -keystrokes. -</P><P> - -The text <KBD>C-k</KBD> is read as `Control-K' and describes the character -produced when the <KBD>k</KBD> key is pressed while the Control key -is depressed. -</P><P> - -The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD> -key is pressed. -The Meta key is labeled <KBD>ALT</KBD> on many keyboards. -On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of -the space bar), the <KBD>ALT</KBD> on the left side is generally set to -work as a Meta key. -The <KBD>ALT</KBD> 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. -</P><P> - -If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as -a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> -<EM>first</EM>, and then typing <KBD>k</KBD>. -Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key. -</P><P> - -The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the -character produced by <EM>metafying</EM> <KBD>C-k</KBD>. -</P><P> - -In addition, several keys have their own names. Specifically, -<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all -stand for themselves when seen in this text, or in an init file -(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). -If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will -produce the desired character. -The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on -some keyboards. -</P><P> - -<A NAME="Readline Interaction"></A> -<HR SIZE="6"> -<A NAME="SEC3"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC2"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.2 Readline Interaction </H2> -<!--docid::SEC3::--> -<P> - -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 <KBD>RET</KBD>. You do not have to be at the -end of the line to press <KBD>RET</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC7">1.2.4 Readline Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Readline Bare Essentials"></A> -<HR SIZE="6"> -<A NAME="SEC4"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.1 Readline Bare Essentials </H3> -<!--docid::SEC4::--> -<P> - -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. -</P><P> - -Sometimes you may mistype a character, and -not notice the error until you have typed several other characters. In -that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then -correct your mistake. Afterwards, you can move the cursor to the right -with <KBD>C-f</KBD>. -</P><P> - -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. -</P><P> - -<DL COMPACT> -<DT><KBD>C-b</KBD> -<DD>Move back one character. -<DT><KBD>C-f</KBD> -<DD>Move forward one character. -<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD> -<DD>Delete the character to the left of the cursor. -<DT><KBD>C-d</KBD> -<DD>Delete the character underneath the cursor. -<DT>Printing characters -<DD>Insert the character into the line at the cursor. -<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD> -<DD>Undo the last editing command. You can undo all the way back to an -empty line. -</DL> -<P> - -(Depending on your configuration, the <KBD>Backspace</KBD> key be set to -delete the character to the left of the cursor and the <KBD>DEL</KBD> key set -to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather -than the character to the left of the cursor.) -</P><P> - -<A NAME="Readline Movement Commands"></A> -<HR SIZE="6"> -<A NAME="SEC5"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC4"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.2 Readline Movement Commands </H3> -<!--docid::SEC5::--> -<P> - -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 <KBD>C-b</KBD>, <KBD>C-f</KBD>, -<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly -about the line. -</P><P> - -<DL COMPACT> -<DT><KBD>C-a</KBD> -<DD>Move to the start of the line. -<DT><KBD>C-e</KBD> -<DD>Move to the end of the line. -<DT><KBD>M-f</KBD> -<DD>Move forward a word, where a word is composed of letters and digits. -<DT><KBD>M-b</KBD> -<DD>Move backward a word. -<DT><KBD>C-l</KBD> -<DD>Clear the screen, reprinting the current line at the top. -</DL> -<P> - -Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. -</P><P> - -<A NAME="Readline Killing Commands"></A> -<HR SIZE="6"> -<A NAME="SEC6"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC5"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.3 Readline Killing Commands </H3> -<!--docid::SEC6::--> -<P> - -<A NAME="IDX1"></A> -<A NAME="IDX2"></A> -</P><P> - -<EM>Killing</EM> text means to delete the text from the line, but to save -it away for later use, usually by <EM>yanking</EM> (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) -</P><P> - -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. -</P><P> - -When you use a kill command, the text is saved in a <EM>kill-ring</EM>. -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. -<A NAME="IDX3"></A> -</P><P> - -Here is the list of commands for killing text. -</P><P> - -<DL COMPACT> -<DT><KBD>C-k</KBD> -<DD>Kill the text from the current cursor position to the end of the line. -<P> - -<DT><KBD>M-d</KBD> -<DD>Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by <KBD>M-f</KBD>. -<P> - -<DT><KBD>M-<KBD>DEL</KBD></KBD> -<DD>Kill from the cursor the start of the current word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by <KBD>M-b</KBD>. -<P> - -<DT><KBD>C-w</KBD> -<DD>Kill from the cursor to the previous whitespace. This is different than -<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ. -<P> - -</DL> -<P> - -Here is how to <EM>yank</EM> the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. -</P><P> - -<DL COMPACT> -<DT><KBD>C-y</KBD> -<DD>Yank the most recently killed text back into the buffer at the cursor. -<P> - -<DT><KBD>M-y</KBD> -<DD>Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>. -</DL> -<P> - -<A NAME="Readline Arguments"></A> -<HR SIZE="6"> -<A NAME="SEC7"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC6"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.4 Readline Arguments </H3> -<!--docid::SEC7::--> -<P> - -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the <I>sign</I> 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 <SAMP>`M-- C-k'</SAMP>. -</P><P> - -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 (<SAMP>`-'</SAMP>), 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 <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>, -which will delete the next ten characters on the input line. -</P><P> - -<A NAME="Searching"></A> -<HR SIZE="6"> -<A NAME="SEC8"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC7"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.5 Searching for Commands in the History </H3> -<!--docid::SEC8::--> -<P> - -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>. -</P><P> - -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 -<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. -The characters present in the value of the <CODE>isearch-terminators</CODE> variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the <KBD>ESC</KBD> and -<KBD>C-J</KBD> characters will terminate an incremental search. -<KBD>C-g</KBD> 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. -</P><P> - -To find other matching entries in the history list, type <KBD>C-r</KBD> or -<KBD>C-s</KBD> 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 <KBD>RET</KBD> will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. -</P><P> - -Readline remembers the last incremental search string. If two -<KBD>C-r</KBD>s are typed without any intervening characters defining a new -search string, any remembered search string is used. -</P><P> - -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. -</P><P> - -<A NAME="Readline Init File"></A> -<HR SIZE="6"> -<A NAME="SEC9"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC8"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.3 Readline Init File </H2> -<!--docid::SEC9::--> -<P> - -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 <EM>inputrc</EM> file, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If -that variable is unset, the default is <TT>`~/.inputrc'</TT>. -</P><P> - -When a program which uses the Readline library starts up, the -init file is read, and the key bindings are set. -</P><P> - -In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus -incorporating any changes that you might have made to it. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR> -</TABLE> - -<br> -<TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR> -</TABLE> - -<br> -<TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC12">1.3.3 Sample Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Readline Init File Syntax"></A> -<HR SIZE="6"> -<A NAME="SEC10"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.1 Readline Init File Syntax </H3> -<!--docid::SEC10::--> -<P> - -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a <SAMP>`#'</SAMP> are comments. -Lines beginning with a <SAMP>`$'</SAMP> indicate conditional -constructs (see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. -</P><P> - -<DL COMPACT> -<DT>Variable Settings -<DD>You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the <CODE>set</CODE> command within the init file. -The syntax is simple: -<P> - -<TABLE><tr><td> </td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR> -</pre></td></tr></table></P><P> - -Here, for example, is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>set editing-mode vi -</pre></td></tr></table></P><P> - -Variable names and values, where appropriate, are recognized without regard -to case. -</P><P> - -A great deal of run-time behavior is changeable with the following -variables. -</P><P> - -<A NAME="IDX4"></A> -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD><A NAME="IDX5"></A> -Controls what happens when Readline wants to ring the terminal bell. -If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to -<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available. -If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring -the terminal's bell. -<P> - -<DT><CODE>comment-begin</CODE> -<DD><A NAME="IDX6"></A> -The string to insert at the beginning of the line when the -<CODE>insert-comment</CODE> command is executed. The default value -is <CODE>"#"</CODE>. -<P> - -<DT><CODE>completion-ignore-case</CODE> -<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>completion-query-items</CODE> -<DD><A NAME="IDX7"></A> -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -The default limit is <CODE>100</CODE>. -<P> - -<DT><CODE>convert-meta</CODE> -<DD><A NAME="IDX8"></A> -If set to <SAMP>`on'</SAMP>, Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an <KBD>ESC</KBD> character, converting them to a -meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. -<P> - -<DT><CODE>disable-completion</CODE> -<DD><A NAME="IDX9"></A> -If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>editing-mode</CODE> -<DD><A NAME="IDX10"></A> -The <CODE>editing-mode</CODE> 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 <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>. -<P> - -<DT><CODE>enable-keypad</CODE> -<DD><A NAME="IDX11"></A> -When set to <SAMP>`on'</SAMP>, Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>expand-tilde</CODE> -<DD><A NAME="IDX12"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. -<P> - -<A NAME="IDX13"></A> -If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the -same location on each history line retrived with <CODE>previous-history</CODE> -or <CODE>next-history</CODE>. -</P><P> - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD><A NAME="IDX14"></A> -This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it -to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>input-meta</CODE> -<DD><A NAME="IDX15"></A> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. -<P> - -<DT><CODE>isearch-terminators</CODE> -<DD><A NAME="IDX17"></A> -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A>). -If this variable has not been given a value, the characters <KBD>ESC</KBD> and -<KBD>C-J</KBD> will terminate an incremental search. -<P> - -<DT><CODE>keymap</CODE> -<DD><A NAME="IDX18"></A> -Sets Readline's idea of the current keymap for key binding commands. -Acceptable <CODE>keymap</CODE> names are -<CODE>emacs</CODE>, -<CODE>emacs-standard</CODE>, -<CODE>emacs-meta</CODE>, -<CODE>emacs-ctlx</CODE>, -<CODE>vi</CODE>, -<CODE>vi-move</CODE>, -<CODE>vi-command</CODE>, and -<CODE>vi-insert</CODE>. -<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is -equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>. -The value of the <CODE>editing-mode</CODE> variable also affects the -default keymap. -<P> - -<DT><CODE>mark-directories</CODE> -<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash -appended. The default is <SAMP>`on'</SAMP>. -<P> - -<DT><CODE>mark-modified-lines</CODE> -<DD><A NAME="IDX19"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an -asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified. -This variable is <SAMP>`off'</SAMP> by default. -<P> - -<DT><CODE>mark-symlinked-directories</CODE> -<DD><A NAME="IDX20"></A> -If set to <SAMP>`on'</SAMP>, completed names which are symbolic links -to directories have a slash appended (subject to the value of -<CODE>mark-directories</CODE>). -The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>match-hidden-files</CODE> -<DD><A NAME="IDX21"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose -names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename -completion, unless the leading <SAMP>`.'</SAMP> is -supplied by the user in the filename to be completed. -This variable is <SAMP>`on'</SAMP> by default. -<P> - -<DT><CODE>output-meta</CODE> -<DD><A NAME="IDX22"></A> -If set to <SAMP>`on'</SAMP>, Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>page-completions</CODE> -<DD><A NAME="IDX23"></A> -If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager -to display a screenful of possible completions at a time. -This variable is <SAMP>`on'</SAMP> by default. -<P> - -<DT><CODE>print-completions-horizontally</CODE> -<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>show-all-if-ambiguous</CODE> -<DD><A NAME="IDX24"></A> -This alters the default behavior of the completion functions. If -set to <SAMP>`on'</SAMP>, -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>visible-stats</CODE> -<DD><A NAME="IDX25"></A> -If set to <SAMP>`on'</SAMP>, a character denoting a file's type -is appended to the filename when listing possible -completions. The default is <SAMP>`off'</SAMP>. -<P> - -</DL> -<P> - -<DT>Key Bindings -<DD>The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. -<P> - -Once you know the name of the command, simply place on a line -in the init file the name of the key -you wish to bind the command to, a colon, and then the name of the -command. The name of the key -can be expressed in different ways, depending on what you find most -comfortable. -</P><P> - -In addition to command names, readline allows keys to be bound -to a string that is inserted when the key is pressed (a <VAR>macro</VAR>). -</P><P> - -<DL COMPACT> -<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD><VAR>keyname</VAR> is the name of a key spelled out in English. For example: -<TABLE><tr><td> </td><td class=example><pre>Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</pre></td></tr></table><P> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE>, -<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</CODE>, and -<KBD>C-o</KBD> is bound to run the macro -expressed on the right hand side (that is, to insert the text -<SAMP>`> output'</SAMP> into the line). -</P><P> - -A number of symbolic character names are recognized while -processing this key binding syntax: -<VAR>DEL</VAR>, -<VAR>ESC</VAR>, -<VAR>ESCAPE</VAR>, -<VAR>LFD</VAR>, -<VAR>NEWLINE</VAR>, -<VAR>RET</VAR>, -<VAR>RETURN</VAR>, -<VAR>RUBOUT</VAR>, -<VAR>SPACE</VAR>, -<VAR>SPC</VAR>, -and -<VAR>TAB</VAR>. -</P><P> - -<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. -<P> - -<TABLE><tr><td> </td><td class=example><pre>"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</pre></td></tr></table></P><P> - -In the above example, <KBD>C-u</KBD> is again bound to the function -<CODE>universal-argument</CODE> (just as it was in the first example), -<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>, -and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert -the text <SAMP>`Function Key 1'</SAMP>. -</P><P> - -</DL> -<P> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: -</P><P> - -<DL COMPACT> -<DT><CODE><KBD>\C-</KBD></CODE> -<DD>control prefix -<DT><CODE><KBD>\M-</KBD></CODE> -<DD>meta prefix -<DT><CODE><KBD>\e</KBD></CODE> -<DD>an escape character -<DT><CODE><KBD>\\</KBD></CODE> -<DD>backslash -<DT><CODE><KBD>\"</KBD></CODE> -<DD><KBD>"</KBD>, a double quotation mark -<DT><CODE><KBD>\'</KBD></CODE> -<DD><KBD>'</KBD>, a single quote or apostrophe -</DL> -<P> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: -</P><P> - -<DL COMPACT> -<DT><CODE>\a</CODE> -<DD>alert (bell) -<DT><CODE>\b</CODE> -<DD>backspace -<DT><CODE>\d</CODE> -<DD>delete -<DT><CODE>\f</CODE> -<DD>form feed -<DT><CODE>\n</CODE> -<DD>newline -<DT><CODE>\r</CODE> -<DD>carriage return -<DT><CODE>\t</CODE> -<DD>horizontal tab -<DT><CODE>\v</CODE> -<DD>vertical tab -<DT><CODE>\<VAR>nnn</VAR></CODE> -<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>HH</VAR></CODE> -<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR> -(one or two hex digits) -</DL> -<P> - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>. -For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: -<TABLE><tr><td> </td><td class=example><pre>"\C-x\\": "\\" -</pre></td></tr></table></P><P> - -</DL> -<P> - -<A NAME="Conditional Init Constructs"></A> -<HR SIZE="6"> -<A NAME="SEC11"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC10"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.2 Conditional Init Constructs </H3> -<!--docid::SEC11::--> -<P> - -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. -</P><P> - -<DL COMPACT> -<DT><CODE>$if</CODE> -<DD>The <CODE>$if</CODE> 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. -<P> - -<DL COMPACT> -<DT><CODE>mode</CODE> -<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test -whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode. -This may be used in conjunction -with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in -the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if -Readline is starting out in <CODE>emacs</CODE> mode. -<P> - -<DT><CODE>term</CODE> -<DD>The <CODE>term=</CODE> 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 -<SAMP>`='</SAMP> is tested against both the full name of the terminal and -the portion of the terminal name before the first <SAMP>`-'</SAMP>. This -allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>, -for instance. -<P> - -<DT><CODE>application</CODE> -<DD>The <VAR>application</VAR> construct is used to include -application-specific settings. Each program using the Readline -library sets the <VAR>application name</VAR>, and you can test for -a particular value. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: -<TABLE><tr><td> </td><td class=example><pre>$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</pre></td></tr></table></DL> -<P> - -<DT><CODE>$endif</CODE> -<DD>This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. -<P> - -<DT><CODE>$else</CODE> -<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. -<P> - -<DT><CODE>$include</CODE> -<DD>This directive takes a single filename as an argument and reads commands -and bindings from that file. -For example, the following directive reads from <TT>`/etc/inputrc'</TT>: -<TABLE><tr><td> </td><td class=example><pre>$include /etc/inputrc -</pre></td></tr></table></DL> -<P> - -<A NAME="Sample Init File"></A> -<HR SIZE="6"> -<A NAME="SEC12"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC11"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.3 Sample Init File </H3> -<!--docid::SEC12::--> -<P> - -Here is an example of an <VAR>inputrc</VAR> file. This illustrates key -binding, variable assignment, and conditional syntax. -</P><P> - -<TABLE><tr><td> </td><td class=example><pre># 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 -</pre></td></tr></table></P><P> - -<A NAME="Bindable Readline Commands"></A> -<HR SIZE="6"> -<A NAME="SEC13"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC12"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.4 Bindable Readline Commands </H2> -<!--docid::SEC13::--> -<P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -This section describes Readline commands that may be bound to key -sequences. -Command names without an accompanying key sequence are unbound by default. -</P><P> - -In the following descriptions, <EM>point</EM> refers to the current cursor -position, and <EM>mark</EM> refers to a cursor position saved by the -<CODE>set-mark</CODE> command. -The text between the point and mark is referred to as the <EM>region</EM>. -</P><P> - -<A NAME="Commands For Moving"></A> -<HR SIZE="6"> -<A NAME="SEC14"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.1 Commands For Moving </H3> -<!--docid::SEC14::--> -<DL COMPACT> -<A NAME="IDX26"></A> -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD><A NAME="IDX27"></A> -Move to the start of the current line. -<P> - -<A NAME="IDX28"></A> -<DT><CODE>end-of-line (C-e)</CODE> -<DD><A NAME="IDX29"></A> -Move to the end of the line. -<P> - -<A NAME="IDX30"></A> -<DT><CODE>forward-char (C-f)</CODE> -<DD><A NAME="IDX31"></A> -Move forward a character. -<P> - -<A NAME="IDX32"></A> -<DT><CODE>backward-char (C-b)</CODE> -<DD><A NAME="IDX33"></A> -Move back a character. -<P> - -<A NAME="IDX34"></A> -<DT><CODE>forward-word (M-f)</CODE> -<DD><A NAME="IDX35"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. -<P> - -<A NAME="IDX36"></A> -<DT><CODE>backward-word (M-b)</CODE> -<DD><A NAME="IDX37"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. -<P> - -<A NAME="IDX38"></A> -<DT><CODE>clear-screen (C-l)</CODE> -<DD><A NAME="IDX39"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. -<P> - -<A NAME="IDX40"></A> -<DT><CODE>redraw-current-line ()</CODE> -<DD><A NAME="IDX41"></A> -Refresh the current line. By default, this is unbound. -<P> - -</DL> -<P> - -<A NAME="Commands For History"></A> -<HR SIZE="6"> -<A NAME="SEC15"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC14"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.2 Commands For Manipulating The History </H3> -<!--docid::SEC15::--> -<P> - -<DL COMPACT> -<A NAME="IDX42"></A> -<DT><CODE>accept-line (Newline or Return)</CODE> -<DD><A NAME="IDX43"></A> -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -<CODE>add_history()</CODE>. -If this line is a modified history line, the history line is restored -to its original state. -<P> - -<A NAME="IDX44"></A> -<DT><CODE>previous-history (C-p)</CODE> -<DD><A NAME="IDX45"></A> -Move `back' through the history list, fetching the previous command. -<P> - -<A NAME="IDX46"></A> -<DT><CODE>next-history (C-n)</CODE> -<DD><A NAME="IDX47"></A> -Move `forward' through the history list, fetching the next command. -<P> - -<A NAME="IDX48"></A> -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD><A NAME="IDX49"></A> -Move to the first line in the history. -<P> - -<A NAME="IDX50"></A> -<DT><CODE>end-of-history (M->)</CODE> -<DD><A NAME="IDX51"></A> -Move to the end of the input history, i.e., the line currently -being entered. -<P> - -<A NAME="IDX52"></A> -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD><A NAME="IDX53"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. -<P> - -<A NAME="IDX54"></A> -<DT><CODE>forward-search-history (C-s)</CODE> -<DD><A NAME="IDX55"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. -<P> - -<A NAME="IDX56"></A> -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD><A NAME="IDX57"></A> -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. -<P> - -<A NAME="IDX58"></A> -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD><A NAME="IDX59"></A> -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. -<P> - -<A NAME="IDX60"></A> -<DT><CODE>history-search-forward ()</CODE> -<DD><A NAME="IDX61"></A> -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. -<P> - -<A NAME="IDX62"></A> -<DT><CODE>history-search-backward ()</CODE> -<DD><A NAME="IDX63"></A> -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. -<P> - -<A NAME="IDX64"></A> -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD><A NAME="IDX65"></A> -Insert the first argument to the previous command (usually -the second word on the previous line) at point. -With an argument <VAR>n</VAR>, -insert the <VAR>n</VAR>th word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the <VAR>n</VAR>th word from the end of the previous command. -<P> - -<A NAME="IDX66"></A> -<DT><CODE>yank-last-arg (M-. or M-_)</CODE> -<DD><A NAME="IDX67"></A> -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like <CODE>yank-nth-arg</CODE>. -Successive calls to <CODE>yank-last-arg</CODE> move back through the history -list, inserting the last argument of each line in turn. -<P> - -</DL> -<P> - -<A NAME="Commands For Text"></A> -<HR SIZE="6"> -<A NAME="SEC16"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC15"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.3 Commands For Changing Text </H3> -<!--docid::SEC16::--> -<P> - -<DL COMPACT> -<A NAME="IDX68"></A> -<DT><CODE>delete-char (C-d)</CODE> -<DD><A NAME="IDX69"></A> -Delete the character at point. If point is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return EOF. -<P> - -<A NAME="IDX70"></A> -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD><A NAME="IDX71"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. -<P> - -<A NAME="IDX72"></A> -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD><A NAME="IDX73"></A> -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. -<P> - -<A NAME="IDX74"></A> -<DT><CODE>quoted-insert (C-q or C-v)</CODE> -<DD><A NAME="IDX75"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. -<P> - -<A NAME="IDX76"></A> -<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX77"></A> -Insert a tab character. -<P> - -<A NAME="IDX78"></A> -<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE> -<DD><A NAME="IDX79"></A> -Insert yourself. -<P> - -<A NAME="IDX80"></A> -<DT><CODE>transpose-chars (C-t)</CODE> -<DD><A NAME="IDX81"></A> -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. -<P> - -<A NAME="IDX82"></A> -<DT><CODE>transpose-words (M-t)</CODE> -<DD><A NAME="IDX83"></A> -Drag the word before point past the word after point, -moving point past that word as well. -If the insertion point is at the end of the line, this transposes -the last two words on the line. -<P> - -<A NAME="IDX84"></A> -<DT><CODE>upcase-word (M-u)</CODE> -<DD><A NAME="IDX85"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. -<P> - -<A NAME="IDX86"></A> -<DT><CODE>downcase-word (M-l)</CODE> -<DD><A NAME="IDX87"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. -<P> - -<A NAME="IDX88"></A> -<DT><CODE>capitalize-word (M-c)</CODE> -<DD><A NAME="IDX89"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. -<P> - -<A NAME="IDX90"></A> -<DT><CODE>overwrite-mode ()</CODE> -<DD><A NAME="IDX91"></A> -Toggle overwrite mode. With an explicit positive numeric argument, -switches to overwrite mode. With an explicit non-positive numeric -argument, switches to insert mode. This command affects only -<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently. -Each call to <CODE>readline()</CODE> starts in insert mode. -<P> - -In overwrite mode, characters bound to <CODE>self-insert</CODE> replace -the text at point rather than pushing the text to the right. -Characters bound to <CODE>backward-delete-char</CODE> replace the character -before point with a space. -</P><P> - -By default, this command is unbound. -</P><P> - -</DL> -<P> - -<A NAME="Commands For Killing"></A> -<HR SIZE="6"> -<A NAME="SEC17"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC16"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.4 Killing And Yanking </H3> -<!--docid::SEC17::--> -<P> - -<DL COMPACT> - -<A NAME="IDX92"></A> -<DT><CODE>kill-line (C-k)</CODE> -<DD><A NAME="IDX93"></A> -Kill the text from point to the end of the line. -<P> - -<A NAME="IDX94"></A> -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD><A NAME="IDX95"></A> -Kill backward to the beginning of the line. -<P> - -<A NAME="IDX96"></A> -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD><A NAME="IDX97"></A> -Kill backward from the cursor to the beginning of the current line. -<P> - -<A NAME="IDX98"></A> -<DT><CODE>kill-whole-line ()</CODE> -<DD><A NAME="IDX99"></A> -Kill all characters on the current line, no matter where point is. -By default, this is unbound. -<P> - -<A NAME="IDX100"></A> -<DT><CODE>kill-word (M-d)</CODE> -<DD><A NAME="IDX101"></A> -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as <CODE>forward-word</CODE>. -<P> - -<A NAME="IDX102"></A> -<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE> -<DD><A NAME="IDX103"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. -<P> - -<A NAME="IDX104"></A> -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD><A NAME="IDX105"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. -<P> - -<A NAME="IDX106"></A> -<DT><CODE>delete-horizontal-space ()</CODE> -<DD><A NAME="IDX107"></A> -Delete all spaces and tabs around point. By default, this is unbound. -<P> - -<A NAME="IDX108"></A> -<DT><CODE>kill-region ()</CODE> -<DD><A NAME="IDX109"></A> -Kill the text in the current region. -By default, this command is unbound. -<P> - -<A NAME="IDX110"></A> -<DT><CODE>copy-region-as-kill ()</CODE> -<DD><A NAME="IDX111"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. -<P> - -<A NAME="IDX112"></A> -<DT><CODE>copy-backward-word ()</CODE> -<DD><A NAME="IDX113"></A> -Copy the word before point to the kill buffer. -The word boundaries are the same as <CODE>backward-word</CODE>. -By default, this command is unbound. -<P> - -<A NAME="IDX114"></A> -<DT><CODE>copy-forward-word ()</CODE> -<DD><A NAME="IDX115"></A> -Copy the word following point to the kill buffer. -The word boundaries are the same as <CODE>forward-word</CODE>. -By default, this command is unbound. -<P> - -<A NAME="IDX116"></A> -<DT><CODE>yank (C-y)</CODE> -<DD><A NAME="IDX117"></A> -Yank the top of the kill ring into the buffer at point. -<P> - -<A NAME="IDX118"></A> -<DT><CODE>yank-pop (M-y)</CODE> -<DD><A NAME="IDX119"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. -</DL> -<P> - -<A NAME="Numeric Arguments"></A> -<HR SIZE="6"> -<A NAME="SEC18"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC17"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.5 Specifying Numeric Arguments </H3> -<!--docid::SEC18::--> -<DL COMPACT> - -<A NAME="IDX120"></A> -<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> -<DD><A NAME="IDX121"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. -<P> - -<A NAME="IDX122"></A> -<DT><CODE>universal-argument ()</CODE> -<DD><A NAME="IDX123"></A> -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing <CODE>universal-argument</CODE> -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. -</DL> -<P> - -<A NAME="Commands For Completion"></A> -<HR SIZE="6"> -<A NAME="SEC19"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC18"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.6 Letting Readline Type For You </H3> -<!--docid::SEC19::--> -<P> - -<DL COMPACT> -<A NAME="IDX124"></A> -<DT><CODE>complete (<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX125"></A> -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -The default is filename completion. -<P> - -<A NAME="IDX126"></A> -<DT><CODE>possible-completions (M-?)</CODE> -<DD><A NAME="IDX127"></A> -List the possible completions of the text before point. -<P> - -<A NAME="IDX128"></A> -<DT><CODE>insert-completions (M-*)</CODE> -<DD><A NAME="IDX129"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. -<P> - -<A NAME="IDX130"></A> -<DT><CODE>menu-complete ()</CODE> -<DD><A NAME="IDX131"></A> -Similar to <CODE>complete</CODE>, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of <CODE>menu-complete</CODE> steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung -(subject to the setting of <CODE>bell-style</CODE>) -and the original text is restored. -An argument of <VAR>n</VAR> moves <VAR>n</VAR> 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 <KBD>TAB</KBD>, but is unbound -by default. -<P> - -<A NAME="IDX132"></A> -<DT><CODE>delete-char-or-list ()</CODE> -<DD><A NAME="IDX133"></A> -Deletes the character under the cursor if not at the beginning or -end of the line (like <CODE>delete-char</CODE>). -If at the end of the line, behaves identically to -<CODE>possible-completions</CODE>. -This command is unbound by default. -<P> - -</DL> -<P> - -<A NAME="Keyboard Macros"></A> -<HR SIZE="6"> -<A NAME="SEC20"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC19"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.7 Keyboard Macros </H3> -<!--docid::SEC20::--> -<DL COMPACT> - -<A NAME="IDX134"></A> -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD><A NAME="IDX135"></A> -Begin saving the characters typed into the current keyboard macro. -<P> - -<A NAME="IDX136"></A> -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD><A NAME="IDX137"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. -<P> - -<A NAME="IDX138"></A> -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD><A NAME="IDX139"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. -<P> - -</DL> -<P> - -<A NAME="Miscellaneous Commands"></A> -<HR SIZE="6"> -<A NAME="SEC21"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC20"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.8 Some Miscellaneous Commands </H3> -<!--docid::SEC21::--> -<DL COMPACT> - -<A NAME="IDX140"></A> -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD><A NAME="IDX141"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. -<P> - -<A NAME="IDX142"></A> -<DT><CODE>abort (C-g)</CODE> -<DD><A NAME="IDX143"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). -<P> - -<A NAME="IDX144"></A> -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> -<DD><A NAME="IDX145"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. -<P> - -<A NAME="IDX146"></A> -<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> -<DD><A NAME="IDX147"></A> -Metafy the next character typed. This is for keyboards -without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing -<KBD>M-f</KBD>. -<P> - -<A NAME="IDX148"></A> -<DT><CODE>undo (C-_ or C-x C-u)</CODE> -<DD><A NAME="IDX149"></A> -Incremental undo, separately remembered for each line. -<P> - -<A NAME="IDX150"></A> -<DT><CODE>revert-line (M-r)</CODE> -<DD><A NAME="IDX151"></A> -Undo all changes made to this line. This is like executing the <CODE>undo</CODE> -command enough times to get back to the beginning. -<P> - -<A NAME="IDX152"></A> -<DT><CODE>tilde-expand (M-~)</CODE> -<DD><A NAME="IDX153"></A> -Perform tilde expansion on the current word. -<P> - -<A NAME="IDX154"></A> -<DT><CODE>set-mark (C-@)</CODE> -<DD><A NAME="IDX155"></A> -Set the mark to the point. If a -numeric argument is supplied, the mark is set to that position. -<P> - -<A NAME="IDX156"></A> -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD><A NAME="IDX157"></A> -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. -<P> - -<A NAME="IDX158"></A> -<DT><CODE>character-search (C-])</CODE> -<DD><A NAME="IDX159"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. -<P> - -<A NAME="IDX160"></A> -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD><A NAME="IDX161"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. -<P> - -<A NAME="IDX162"></A> -<DT><CODE>insert-comment (M-#)</CODE> -<DD><A NAME="IDX163"></A> -Without a numeric argument, the value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line. -If a numeric argument is supplied, this command acts as a toggle: if -the characters at the beginning of the line do not match the value -of <CODE>comment-begin</CODE>, the value is inserted, otherwise -the characters in <CODE>comment-begin</CODE> are deleted from the beginning of -the line. -In either case, the line is accepted as if a newline had been typed. -<P> - -<A NAME="IDX164"></A> -<DT><CODE>dump-functions ()</CODE> -<DD><A NAME="IDX165"></A> -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX166"></A> -<DT><CODE>dump-variables ()</CODE> -<DD><A NAME="IDX167"></A> -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX168"></A> -<DT><CODE>dump-macros ()</CODE> -<DD><A NAME="IDX169"></A> -Print all of the Readline key sequences bound to macros and the -strings they output. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX170"></A> -<DT><CODE>emacs-editing-mode (C-e)</CODE> -<DD><A NAME="IDX171"></A> -When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> -editing mode. -<P> - -<A NAME="IDX172"></A> -<DT><CODE>vi-editing-mode (M-C-j)</CODE> -<DD><A NAME="IDX173"></A> -When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> -editing mode. -<P> - -</DL> -<P> - -<A NAME="Readline vi Mode"></A> -<HR SIZE="6"> -<A NAME="SEC22"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC21"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.5 Readline vi Mode </H2> -<!--docid::SEC22::--> -<P> - -While the Readline library does not have a full set of <CODE>vi</CODE> -editing functions, it does contain enough to allow simple editing -of the line. The Readline <CODE>vi</CODE> mode behaves as specified in -the POSIX 1003.2 standard. -</P><P> - -In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> -editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode -when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode). -The Readline default is <CODE>emacs</CODE> mode. -</P><P> - -When you enter a line in <CODE>vi</CODE> mode, you are already placed in -`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD> -switches you into `command' mode, where you can edit the text of the -line with the standard <CODE>vi</CODE> movement keys, move to previous -history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and -so forth. -</P><P> - -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. -</P><P> - -Copyright (C) 1988-2002 Free Software Foundation, Inc. -</P><P> - -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. -</P><P> - -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. -</P><P> - -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. -</P><P> - -<A NAME="Programming with GNU Readline"></A> -<HR SIZE="6"> -<A NAME="SEC23"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC22"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> 2. Programming with GNU Readline </H1> -<!--docid::SEC23::--> -<P> - -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. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Using the default behavior of Readline.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC25">2.2 Custom Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Adding your own functions to Readline.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables accessible to custom - functions.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions which Readline supplies to - aid in writing your own custom - functions.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How Readline behaves when it receives signals.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC44">2.6 Custom Completers</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Supplanting or supplementing Readline's - completion functions.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Basic Behavior"></A> -<HR SIZE="6"> -<A NAME="SEC24"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.1 Basic Behavior </H2> -<!--docid::SEC24::--> -<P> - -Many programs provide a command line interface, such as <CODE>mail</CODE>, -<CODE>ftp</CODE>, and <CODE>sh</CODE>. 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()</CODE> or <CODE>fgets()</CODE>. -</P><P> - -<A NAME="IDX174"></A> -<A NAME="IDX175"></A> -</P><P> - -The function <CODE>readline()</CODE> prints a prompt <VAR>prompt</VAR> -and then reads and returns a single line of text from the user. -If <VAR>prompt</VAR> is <CODE>NULL</CODE> or the empty string, no prompt is displayed. -The line <CODE>readline</CODE> returns is allocated with <CODE>malloc()</CODE>; -the caller should <CODE>free()</CODE> the line when it has finished with it. -The declaration for <CODE>readline</CODE> in ANSI C is -</P><P> - -<TABLE><tr><td> </td><td class=example><pre><CODE>char *readline (const char *<VAR>prompt</VAR>);</CODE> -</pre></td></tr></table></P><P> - -So, one might say -<TABLE><tr><td> </td><td class=example><pre><CODE>char *line = readline ("Enter a line: ");</CODE> -</pre></td></tr></table>in order to read a line of text from the user. -The line returned has the final newline removed, so only the -text remains. -</P><P> - -If <CODE>readline</CODE> encounters an <CODE>EOF</CODE> while reading the line, and the -line is empty at that point, then <CODE>(char *)NULL</CODE> is returned. -Otherwise, the line is ended just as if a newline had been typed. -</P><P> - -If you want the user to be able to get at the line later, (with -<KBD>C-p</KBD> for example), you must call <CODE>add_history()</CODE> to save the -line away in a <EM>history</EM> list of such lines. -</P><P> - -<TABLE><tr><td> </td><td class=example><pre><CODE>add_history (line)</CODE>; -</pre></td></tr></table></P><P> - -For full details on the GNU History Library, see the associated manual. -</P><P> - -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 <CODE>gets()</CODE> library -function, and has the advantage of no static buffer to overflow: -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>/* 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); -} -</pre></td></tr></table></P><P> - -This function gives the user the default behaviour of <KBD>TAB</KBD> -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the <KBD>TAB</KBD> key -with <CODE>rl_bind_key()</CODE>. -</P><P> - -<TABLE><tr><td> </td><td class=example><pre><CODE>int rl_bind_key (int <VAR>key</VAR>, rl_command_func_t *<VAR>function</VAR>);</CODE> -</pre></td></tr></table></P><P> - -<CODE>rl_bind_key()</CODE> takes two arguments: <VAR>key</VAR> is the character that -you want to bind, and <VAR>function</VAR> is the address of the function to -call when <VAR>key</VAR> is pressed. Binding <KBD>TAB</KBD> to <CODE>rl_insert()</CODE> -makes <KBD>TAB</KBD> insert itself. -<CODE>rl_bind_key()</CODE> returns non-zero if <VAR>key</VAR> is not a valid -ASCII character code (between 0 and 255). -</P><P> - -Thus, to disable the default <KBD>TAB</KBD> behavior, the following suffices: -<TABLE><tr><td> </td><td class=example><pre><CODE>rl_bind_key ('\t', rl_insert);</CODE> -</pre></td></tr></table></P><P> - -This code should be executed once at the start of your program; you -might write a function called <CODE>initialize_readline()</CODE> which -performs this and other desired initializations, such as installing -custom completers (see section <A HREF="readline.html#SEC44">2.6 Custom Completers</A>). -</P><P> - -<A NAME="Custom Functions"></A> -<HR SIZE="6"> -<A NAME="SEC25"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC24"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.2 Custom Functions </H2> -<!--docid::SEC25::--> -<P> - -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. -</P><P> - -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 <CODE><readline/readline.h></CODE> -in any file that uses Readline's features. Since some of the definitions -in <CODE>readline.h</CODE> use the <CODE>stdio</CODE> library, the file -<CODE><stdio.h></CODE> should be included before <CODE>readline.h</CODE>. -</P><P> - -<CODE>readline.h</CODE> defines a C preprocessor variable that should -be treated as an integer, <CODE>RL_READLINE_VERSION</CODE>, which may -be used to conditionally compile application code depending on -the installed Readline version. The value is a hexadecimal -encoding of the major and minor version numbers of the library, -of the form 0x<VAR>MMmm</VAR>. <VAR>MM</VAR> is the two-digit major -version number; <VAR>mm</VAR> is the two-digit minor version number. -For Readline 4.2, for example, the value of -<CODE>RL_READLINE_VERSION</CODE> would be <CODE>0x0402</CODE>. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">C declarations to make code readable.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC27">2.2.2 Writing a New Function</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables and calling conventions.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Readline Typedefs"></A> -<HR SIZE="6"> -<A NAME="SEC26"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.2.1 Readline Typedefs </H3> -<!--docid::SEC26::--> -<P> - -For readabilty, we declare a number of new object types, all pointers -to functions. -</P><P> - -The reason for declaring these new types is to make it easier to write -code describing pointers to C functions with appropriately prototyped -arguments and return values. -</P><P> - -For instance, say we want to declare a variable <VAR>func</VAR> as a pointer -to a function which takes two <CODE>int</CODE> arguments and returns an -<CODE>int</CODE> (this is the type of all of the Readline bindable functions). -Instead of the classic C declaration -</P><P> - -<CODE>int (*func)();</CODE> -</P><P> - -or the ANSI-C style declaration -</P><P> - -<CODE>int (*func)(int, int);</CODE> -</P><P> - -we may write -</P><P> - -<CODE>rl_command_func_t *func;</CODE> -</P><P> - -The full list of function pointer types available is -</P><P> - -<DL COMPACT> -<DT><CODE>typedef int rl_command_func_t (int, int);</CODE> -<DD><P> - -<DT><CODE>typedef char *rl_compentry_func_t (const char *, int);</CODE> -<DD><P> - -<DT><CODE>typedef char **rl_completion_func_t (const char *, int, int);</CODE> -<DD><P> - -<DT><CODE>typedef char *rl_quote_func_t (char *, int, char *);</CODE> -<DD><P> - -<DT><CODE>typedef char *rl_dequote_func_t (char *, int);</CODE> -<DD><P> - -<DT><CODE>typedef int rl_compignore_func_t (char **);</CODE> -<DD><P> - -<DT><CODE>typedef void rl_compdisp_func_t (char **, int, int);</CODE> -<DD><P> - -<DT><CODE>typedef int rl_hook_func_t (void);</CODE> -<DD><P> - -<DT><CODE>typedef int rl_getc_func_t (FILE *);</CODE> -<DD><P> - -<DT><CODE>typedef int rl_linebuf_func_t (char *, int);</CODE> -<DD><P> - -<DT><CODE>typedef int rl_intfunc_t (int);</CODE> -<DD><DT><CODE>#define rl_ivoidfunc_t rl_hook_func_t</CODE> -<DD><DT><CODE>typedef int rl_icpfunc_t (char *);</CODE> -<DD><DT><CODE>typedef int rl_icppfunc_t (char **);</CODE> -<DD><P> - -<DT><CODE>typedef void rl_voidfunc_t (void);</CODE> -<DD><DT><CODE>typedef void rl_vintfunc_t (int);</CODE> -<DD><DT><CODE>typedef void rl_vcpfunc_t (char *);</CODE> -<DD><DT><CODE>typedef void rl_vcppfunc_t (char **);</CODE> -<DD><P> - -</DL> -<P> - -<A NAME="Function Writing"></A> -<HR SIZE="6"> -<A NAME="SEC27"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC26"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC25"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.2.2 Writing a New Function </H3> -<!--docid::SEC27::--> -<P> - -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. -</P><P> - -The calling sequence for a command <CODE>foo</CODE> looks like -</P><P> - -<TABLE><tr><td> </td><td class=example><pre><CODE>int foo (int count, int key)</CODE> -</pre></td></tr></table></P><P> - -where <VAR>count</VAR> is the numeric argument (or 1 if defaulted) and -<VAR>key</VAR> is the key that invoked this function. -</P><P> - -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. -</P><P> - -A command function should return 0 if its action completes successfully, -and a non-zero value if some error occurs. -</P><P> - -<A NAME="Readline Variables"></A> -<HR SIZE="6"> -<A NAME="SEC28"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC27"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.3 Readline Variables </H2> -<!--docid::SEC28::--> -<P> - -These variables are available to function writers. -</P><P> - -<A NAME="IDX176"></A> -<DL> -<DT><U>Variable:</U> char * <B>rl_line_buffer</B> -<DD>This is the line gathered so far. You are welcome to modify the -contents of the line, but see <A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A>. The -function <CODE>rl_extend_line_buffer</CODE> is available to increase -the memory allocated to <CODE>rl_line_buffer</CODE>. -</DL> -</P><P> - -<A NAME="IDX177"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_point</B> -<DD>The offset of the current cursor position in <CODE>rl_line_buffer</CODE> -(the <EM>point</EM>). -</DL> -</P><P> - -<A NAME="IDX178"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_end</B> -<DD>The number of characters present in <CODE>rl_line_buffer</CODE>. When -<CODE>rl_point</CODE> is at the end of the line, <CODE>rl_point</CODE> and -<CODE>rl_end</CODE> are equal. -</DL> -</P><P> - -<A NAME="IDX179"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_mark</B> -<DD>The <VAR>mark</VAR> (saved position) in the current line. If set, the mark -and point define a <EM>region</EM>. -</DL> -</P><P> - -<A NAME="IDX180"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_done</B> -<DD>Setting this to a non-zero value causes Readline to return the current -line immediately. -</DL> -</P><P> - -<A NAME="IDX181"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_num_chars_to_read</B> -<DD>Setting this to a positive value before calling <CODE>readline()</CODE> causes -Readline to return after accepting that many characters, rather -than reading up to a character bound to <CODE>accept-line</CODE>. -</DL> -</P><P> - -<A NAME="IDX182"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_pending_input</B> -<DD>Setting this to a value makes it the next keystroke read. This is a -way to stuff a single character into the input stream. -</DL> -</P><P> - -<A NAME="IDX183"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_dispatching</B> -<DD>Set to a non-zero value if a function is being called from a key binding; -zero otherwise. Application functions can test this to discover whether -they were called directly or by Readline's dispatching mechanism. -</DL> -</P><P> - -<A NAME="IDX184"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_erase_empty_line</B> -<DD>Setting this to a non-zero value causes Readline to completely erase -the current line, including any prompt, any time a newline is typed as -the only character on an otherwise-empty line. The cursor is moved to -the beginning of the newly-blank line. -</DL> -</P><P> - -<A NAME="IDX185"></A> -<DL> -<DT><U>Variable:</U> char * <B>rl_prompt</B> -<DD>The prompt Readline uses. This is set from the argument to -<CODE>readline()</CODE>, and should not be assigned to directly. -The <CODE>rl_set_prompt()</CODE> function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>) may -be used to modify the prompt string after calling <CODE>readline()</CODE>. -</DL> -</P><P> - -<A NAME="IDX186"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_already_prompted</B> -<DD>If an application wishes to display the prompt itself, rather than have -Readline do it the first time <CODE>readline()</CODE> 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 <CODE>readline()</CODE> so -the redisplay functions can update the display properly. -The calling application is responsible for managing the value; Readline -never sets it. -</DL> -</P><P> - -<A NAME="IDX187"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_library_version</B> -<DD>The version number of this revision of the library. -</DL> -</P><P> - -<A NAME="IDX188"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_readline_version</B> -<DD>An integer encoding the current version of the library. The encoding is -of the form 0x<VAR>MMmm</VAR>, where <VAR>MM</VAR> is the two-digit major version -number, and <VAR>mm</VAR> is the two-digit minor version number. -For example, for Readline-4.2, <CODE>rl_readline_version</CODE> would have the -value 0x0402. -</DL> -</P><P> - -<A NAME="IDX189"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_gnu_readline_p</B> -<DD>Always set to 1, denoting that this is GNU readline rather than some -emulation. -</DL> -</P><P> - -<A NAME="IDX190"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_terminal_name</B> -<DD>The terminal type, used for initialization. If not set by the application, -Readline sets this to the value of the <CODE>TERM</CODE> environment variable -the first time it is called. -</DL> -</P><P> - -<A NAME="IDX191"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_readline_name</B> -<DD>This variable is set to a unique name by each application using Readline. -The value allows conditional parsing of the inputrc file -(see section <A HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A>). -</DL> -</P><P> - -<A NAME="IDX192"></A> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_instream</B> -<DD>The stdio stream from which Readline reads input. -If <CODE>NULL</CODE>, Readline defaults to <VAR>stdin</VAR>. -</DL> -</P><P> - -<A NAME="IDX193"></A> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_outstream</B> -<DD>The stdio stream to which Readline performs output. -If <CODE>NULL</CODE>, Readline defaults to <VAR>stdout</VAR>. -</DL> -</P><P> - -<A NAME="IDX194"></A> -<DL> -<DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B> -<DD>The address of the last command function Readline executed. May be used to -test whether or not a function is being executed twice in succession, for -example. -</DL> -</P><P> - -<A NAME="IDX195"></A> -<DL> -<DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B> -<DD>If non-zero, this is the address of a function to call just -before <CODE>readline</CODE> prints the first prompt. -</DL> -</P><P> - -<A NAME="IDX196"></A> -<DL> -<DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B> -<DD>If non-zero, this is the address of a function to call after -the first prompt has been printed and just before <CODE>readline</CODE> -starts reading input characters. -</DL> -</P><P> - -<A NAME="IDX197"></A> -<DL> -<DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B> -<DD>If non-zero, this is the address of a function to call periodically -when Readline is waiting for terminal input. -By default, this will be called at most ten times a second if there -is no keyboard input. -</DL> -</P><P> - -<A NAME="IDX198"></A> -<DL> -<DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B> -<DD>If non-zero, Readline will call indirectly through this pointer -to get a character from the input stream. By default, it is set to -<CODE>rl_getc</CODE>, the default Readline character input function -(see section <A HREF="readline.html#SEC37">2.4.8 Character Input</A>). -</DL> -</P><P> - -<A NAME="IDX199"></A> -<DL> -<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B> -<DD>If non-zero, Readline will call indirectly through this pointer -to update the display with the current contents of the editing buffer. -By default, it is set to <CODE>rl_redisplay</CODE>, the default Readline -redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A>). -</DL> -</P><P> - -<A NAME="IDX200"></A> -<DL> -<DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B> -<DD>If non-zero, Readline will call indirectly through this pointer -to initialize the terminal. The function takes a single argument, an -<CODE>int</CODE> flag that says whether or not to use eight-bit characters. -By default, this is set to <CODE>rl_prep_terminal</CODE> -(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>). -</DL> -</P><P> - -<A NAME="IDX201"></A> -<DL> -<DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B> -<DD>If non-zero, Readline will call indirectly through this pointer -to reset the terminal. This function should undo the effects of -<CODE>rl_prep_term_function</CODE>. -By default, this is set to <CODE>rl_deprep_terminal</CODE> -(see section <A HREF="readline.html#SEC38">2.4.9 Terminal Management</A>). -</DL> -</P><P> - -<A NAME="IDX202"></A> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> -<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the -currently executing readline function was found. -</DL> -</P><P> - -<A NAME="IDX203"></A> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B> -<DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the -last key binding occurred. -</DL> -</P><P> - -<A NAME="IDX204"></A> -<DL> -<DT><U>Variable:</U> char * <B>rl_executing_macro</B> -<DD>This variable is set to the text of any currently-executing macro. -</DL> -</P><P> - -<A NAME="IDX205"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_readline_state</B> -<DD>A variable with bit values that encapsulate the current Readline state. -A bit is set with the <CODE>RL_SETSTATE</CODE> macro, and unset with the -<CODE>RL_UNSETSTATE</CODE> macro. Use the <CODE>RL_ISSTATE</CODE> macro to test -whether a particular state bit is set. Current state bits include: -</P><P> - -<DL COMPACT> -<DT><CODE>RL_STATE_NONE</CODE> -<DD>Readline has not yet been called, nor has it begun to intialize. -<DT><CODE>RL_STATE_INITIALIZING</CODE> -<DD>Readline is initializing its internal data structures. -<DT><CODE>RL_STATE_INITIALIZED</CODE> -<DD>Readline has completed its initialization. -<DT><CODE>RL_STATE_TERMPREPPED</CODE> -<DD>Readline has modified the terminal modes to do its own input and redisplay. -<DT><CODE>RL_STATE_READCMD</CODE> -<DD>Readline is reading a command from the keyboard. -<DT><CODE>RL_STATE_METANEXT</CODE> -<DD>Readline is reading more input after reading the meta-prefix character. -<DT><CODE>RL_STATE_DISPATCHING</CODE> -<DD>Readline is dispatching to a command. -<DT><CODE>RL_STATE_MOREINPUT</CODE> -<DD>Readline is reading more input while executing an editing command. -<DT><CODE>RL_STATE_ISEARCH</CODE> -<DD>Readline is performing an incremental history search. -<DT><CODE>RL_STATE_NSEARCH</CODE> -<DD>Readline is performing a non-incremental history search. -<DT><CODE>RL_STATE_SEARCH</CODE> -<DD>Readline is searching backward or forward through the history for a string. -<DT><CODE>RL_STATE_NUMERICARG</CODE> -<DD>Readline is reading a numeric argument. -<DT><CODE>RL_STATE_MACROINPUT</CODE> -<DD>Readline is currently getting its input from a previously-defined keyboard -macro. -<DT><CODE>RL_STATE_MACRODEF</CODE> -<DD>Readline is currently reading characters defining a keyboard macro. -<DT><CODE>RL_STATE_OVERWRITE</CODE> -<DD>Readline is in overwrite mode. -<DT><CODE>RL_STATE_COMPLETING</CODE> -<DD>Readline is performing word completion. -<DT><CODE>RL_STATE_SIGHANDLER</CODE> -<DD>Readline is currently executing the readline signal handler. -<DT><CODE>RL_STATE_UNDOING</CODE> -<DD>Readline is performing an undo. -<DT><CODE>RL_STATE_DONE</CODE> -<DD>Readline has read a key sequence bound to <CODE>accept-line</CODE> -and is about to return the line to the caller. -</DL> -<P> - -</DL> -</P><P> - -<A NAME="IDX206"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_explicit_arg</B> -<DD>Set to a non-zero value if an explicit numeric argument was specified by -the user. Only valid in a bindable command function. -</DL> -</P><P> - -<A NAME="IDX207"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_numeric_arg</B> -<DD>Set to the value of any numeric argument explicitly specified by the user -before executing the current Readline function. Only valid in a bindable -command function. -</DL> -</P><P> - -<A NAME="IDX208"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_editing_mode</B> -<DD>Set to a value denoting Readline's current editing mode. A value of -<VAR>1</VAR> means Readline is currently in emacs mode; <VAR>0</VAR> -means that vi mode is active. -</DL> -</P><P> - -<A NAME="Readline Convenience Functions"></A> -<HR SIZE="6"> -<A NAME="SEC29"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC28"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.4 Readline Convenience Functions </H2> -<!--docid::SEC29::--> -<P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to give a function you write a name.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Making keymaps.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Changing Keymaps.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Translate function names to - key sequences.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to make your functions undoable.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to control line display.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to modify <CODE>rl_line_buffer</CODE>.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to read keyboard input.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions to manage terminal settings.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Generally useful functions and hooks.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions that don't fall into any category.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Using Readline in a `callback' fashion.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC42">2.4.13 A Readline Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example Readline function.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Function Naming"></A> -<HR SIZE="6"> -<A NAME="SEC30"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.1 Naming a Function </H3> -<!--docid::SEC30::--> -<P> - -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 -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>Meta-Rubout: backward-kill-word -</pre></td></tr></table></P><P> - -This binds the keystroke <KBD>Meta-Rubout</KBD> to the function -<EM>descriptively</EM> named <CODE>backward-kill-word</CODE>. You, as the -programmer, should bind the functions you write to descriptive names as -well. Readline provides a function for doing that: -</P><P> - -<A NAME="IDX209"></A> -<DL> -<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I> -<DD>Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be -the function that gets called. If <VAR>key</VAR> is not -1, then bind it to -<VAR>function</VAR> using <CODE>rl_bind_key()</CODE>. -</DL> -</P><P> - -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. -</P><P> - -<A NAME="Keymaps"></A> -<HR SIZE="6"> -<A NAME="SEC31"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC30"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.2 Selecting a Keymap </H3> -<!--docid::SEC31::--> -<P> - -Key bindings take place on a <EM>keymap</EM>. 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. -</P><P> - -<A NAME="IDX210"></A> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I> -<DD>Returns a new, empty keymap. The space for the keymap is allocated with -<CODE>malloc()</CODE>; the caller should free it by calling -<CODE>rl_discard_keymap()</CODE> when done. -</DL> -</P><P> - -<A NAME="IDX211"></A> -<DL> -<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I> -<DD>Return a new keymap which is a copy of <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX212"></A> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I> -<DD>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. -</DL> -</P><P> - -<A NAME="IDX213"></A> -<DL> -<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I> -<DD>Free the storage associated with <VAR>keymap</VAR>. -</DL> -</P><P> - -Readline has several internal keymaps. These functions allow you to -change which keymap is active. -</P><P> - -<A NAME="IDX214"></A> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I> -<DD>Returns the currently active keymap. -</DL> -</P><P> - -<A NAME="IDX215"></A> -<DL> -<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I> -<DD>Makes <VAR>keymap</VAR> the currently active keymap. -</DL> -</P><P> - -<A NAME="IDX216"></A> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I> -<DD>Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would -be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). -</DL> -</P><P> - -<A NAME="IDX217"></A> -<DL> -<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> -<DD>Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would -be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). -</DL> -</P><P> - -<A NAME="Binding Keys"></A> -<HR SIZE="6"> -<A NAME="SEC32"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.3 Binding Keys </H3> -<!--docid::SEC32::--> -<P> - -Key sequences are associate with functions through the keymap. -Readline has several internal keymaps: <CODE>emacs_standard_keymap</CODE>, -<CODE>emacs_meta_keymap</CODE>, <CODE>emacs_ctlx_keymap</CODE>, -<CODE>vi_movement_keymap</CODE>, and <CODE>vi_insertion_keymap</CODE>. -<CODE>emacs_standard_keymap</CODE> is the default, and the examples in -this manual assume that. -</P><P> - -Since <CODE>readline()</CODE> 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 <CODE>readline()</CODE> will be overridden. -An alternate mechanism is to install custom key bindings in an -initialization function assigned to the <CODE>rl_startup_hook</CODE> variable -(see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>). -</P><P> - -These functions manage key bindings. -</P><P> - -<A NAME="IDX218"></A> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I> -<DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap. -Returns non-zero in the case of an invalid <VAR>key</VAR>. -</DL> -</P><P> - -<A NAME="IDX219"></A> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I> -<DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. Returns non-zero in the case -of an invalid <VAR>key</VAR>. -</DL> -</P><P> - -<A NAME="IDX220"></A> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I> -<DD>Bind <VAR>key</VAR> to the null function in the currently active keymap. -Returns non-zero in case of error. -</DL> -</P><P> - -<A NAME="IDX221"></A> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I> -<DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>. -Returns non-zero in case of error. -</DL> -</P><P> - -<A NAME="IDX222"></A> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> -<DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX223"></A> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I> -<DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX224"></A> -<DL> -<DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I> -<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function -<VAR>function</VAR>. This makes new keymaps as -necessary. The initial keymap in which to do bindings is <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX225"></A> -<DL> -<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I> -<DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary -pointer <VAR>data</VAR>. <VAR>type</VAR> says what kind of data is pointed to by -<VAR>data</VAR>; this can be a function (<CODE>ISFUNC</CODE>), a macro -(<CODE>ISMACR</CODE>), or a keymap (<CODE>ISKMAP</CODE>). This makes new keymaps as -necessary. The initial keymap in which to do bindings is <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX226"></A> -<DL> -<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I> -<DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and -perform any key bindings and variable assignments found -(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). -</DL> -</P><P> - -<A NAME="IDX227"></A> -<DL> -<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I> -<DD>Read keybindings and variable assignments from <VAR>filename</VAR> -(see section <A HREF="readline.html#SEC9">1.3 Readline Init File</A>). -</DL> -</P><P> - -<A NAME="Associating Function Names and Bindings"></A> -<HR SIZE="6"> -<A NAME="SEC33"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC32"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.4 Associating Function Names and Bindings </H3> -<!--docid::SEC33::--> -<P> - -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. You may also -associate a new function name with an arbitrary function. -</P><P> - -<A NAME="IDX228"></A> -<DL> -<DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I> -<DD>Return the function with name <VAR>name</VAR>. -</DL> -</P><P> - -<A NAME="IDX229"></A> -<DL> -<DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I> -<DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>. -If <VAR>map</VAR> is <CODE>NULL</CODE>, the current keymap is used. If <VAR>type</VAR> is -not <CODE>NULL</CODE>, the type of the object is returned in the <CODE>int</CODE> variable -it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>). -</DL> -</P><P> - -<A NAME="IDX230"></A> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I> -<DD>Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the current keymap. -</DL> -</P><P> - -<A NAME="IDX231"></A> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I> -<DD>Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>. -</DL> -</P><P> - -<A NAME="IDX232"></A> -<DL> -<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I> -<DD>Print the readline function names and the key sequences currently -bound to them to <CODE>rl_outstream</CODE>. If <VAR>readable</VAR> is non-zero, -the list is formatted in such a way that it can be made part of an -<CODE>inputrc</CODE> file and re-read. -</DL> -</P><P> - -<A NAME="IDX233"></A> -<DL> -<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I> -<DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. -</DL> -</P><P> - -<A NAME="IDX234"></A> -<DL> -<DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I> -<DD>Return a NULL terminated array of known function names. The array is -sorted. The array itself is allocated, but not the strings inside. You -should <CODE>free()</CODE> the array when you are done, but not the pointers. -</DL> -</P><P> - -<A NAME="IDX235"></A> -<DL> -<DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I> -<DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make -<VAR>function</VAR> the function to be called when <VAR>name</VAR> is invoked. -</DL> -</P><P> - -<A NAME="Allowing Undoing"></A> -<HR SIZE="6"> -<A NAME="SEC34"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC33"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.5 Allowing Undoing </H3> -<!--docid::SEC34::--> -<P> - -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. -</P><P> - -If your function simply inserts text once, or deletes text once, and -uses <CODE>rl_insert_text()</CODE> or <CODE>rl_delete_text()</CODE> to do it, then -undoing is already done for you automatically. -</P><P> - -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 <CODE>rl_begin_undo_group()</CODE> and -<CODE>rl_end_undo_group()</CODE>. -</P><P> - -The types of events that can be undone are: -</P><P> - -<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; -</FONT></pre></td></tr></table></P><P> - -Notice that <CODE>UNDO_DELETE</CODE> means to insert some text, and -<CODE>UNDO_INSERT</CODE> means to delete some text. That is, the undo code -tells what to undo, not how to undo it. <CODE>UNDO_BEGIN</CODE> and -<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group()</CODE> and -<CODE>rl_end_undo_group()</CODE>. -</P><P> - -<A NAME="IDX236"></A> -<DL> -<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I> -<DD>Begins saving undo information in a group construct. The undo -information usually comes from calls to <CODE>rl_insert_text()</CODE> and -<CODE>rl_delete_text()</CODE>, but could be the result of calls to -<CODE>rl_add_undo()</CODE>. -</DL> -</P><P> - -<A NAME="IDX237"></A> -<DL> -<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I> -<DD>Closes the current undo group started with <CODE>rl_begin_undo_group -()</CODE>. There should be one call to <CODE>rl_end_undo_group()</CODE> -for each call to <CODE>rl_begin_undo_group()</CODE>. -</DL> -</P><P> - -<A NAME="IDX238"></A> -<DL> -<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I> -<DD>Remember how to undo an event (according to <VAR>what</VAR>). The affected -text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VAR>. -</DL> -</P><P> - -<A NAME="IDX239"></A> -<DL> -<DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I> -<DD>Free the existing undo list. -</DL> -</P><P> - -<A NAME="IDX240"></A> -<DL> -<DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I> -<DD>Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was -nothing to undo, non-zero if something was undone. -</DL> -</P><P> - -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g., change its case), call <CODE>rl_modifying()</CODE> -once, just before you modify the text. You must supply the indices of -the text range that you are going to modify. -</P><P> - -<A NAME="IDX241"></A> -<DL> -<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I> -<DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a -single undo unit. It is assumed that you will subsequently modify -that text. -</DL> -</P><P> - -<A NAME="Redisplay"></A> -<HR SIZE="6"> -<A NAME="SEC35"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC34"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.6 Redisplay </H3> -<!--docid::SEC35::--> -<P> - -<A NAME="IDX242"></A> -<DL> -<DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I> -<DD>Change what's displayed on the screen to reflect the current contents -of <CODE>rl_line_buffer</CODE>. -</DL> -</P><P> - -<A NAME="IDX243"></A> -<DL> -<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I> -<DD>Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -</DL> -</P><P> - -<A NAME="IDX244"></A> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I> -<DD>Tell the update functions that we have moved onto a new (empty) line, -usually after ouputting a newline. -</DL> -</P><P> - -<A NAME="IDX245"></A> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I> -<DD>Tell the update functions that we have moved onto a new line, with -<VAR>rl_prompt</VAR> already displayed. -This could be used by applications that want to output the prompt string -themselves, but still need Readline to know the prompt string length for -redisplay. -It should be used after setting <VAR>rl_already_prompted</VAR>. -</DL> -</P><P> - -<A NAME="IDX246"></A> -<DL> -<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I> -<DD>Reset the display state to a clean state and redisplay the current line -starting on a new line. -</DL> -</P><P> - -<A NAME="IDX247"></A> -<DL> -<DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I> -<DD>Move the cursor to the start of the next screen line. -</DL> -</P><P> - -<A NAME="IDX248"></A> -<DL> -<DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I> -<DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>. -If Readline has not been set to display meta characters directly, this -will convert meta characters to a meta-prefixed key sequence. -This is intended for use by applications which wish to do their own -redisplay. -</DL> -</P><P> - -<A NAME="IDX249"></A> -<DL> -<DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I> -<DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>, -possibly containing conversion specifications such as <SAMP>`%d'</SAMP>, and -any additional arguments necessary to satisfy the conversion specifications. -The resulting string is displayed in the <EM>echo area</EM>. The echo area -is also used to display numeric arguments and search strings. -</DL> -</P><P> - -<A NAME="IDX250"></A> -<DL> -<DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I> -<DD>Clear the message in the echo area. -</DL> -</P><P> - -<A NAME="IDX251"></A> -<DL> -<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I> -<DD>Save the local Readline prompt display state in preparation for -displaying a new message in the message area with <CODE>rl_message()</CODE>. -</DL> -</P><P> - -<A NAME="IDX252"></A> -<DL> -<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I> -<DD>Restore the local Readline prompt display state saved by the most -recent call to <CODE>rl_save_prompt</CODE>. -</DL> -</P><P> - -<A NAME="IDX253"></A> -<DL> -<DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I> -<DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the -local Readline prompt redisplay variables. -This function is called by <CODE>readline()</CODE>. It may also be called to -expand the primary prompt if the <CODE>rl_on_new_line_with_prompt()</CODE> -function or <CODE>rl_already_prompted</CODE> variable is used. -It returns the number of visible characters on the last line of the -(possibly multi-line) prompt. -</DL> -</P><P> - -<A NAME="IDX254"></A> -<DL> -<DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I> -<DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay. This calls -<CODE>rl_expand_prompt()</CODE> to expand the prompt and sets <CODE>rl_prompt</CODE> -to the result. -</DL> -</P><P> - -<A NAME="Modifying Text"></A> -<HR SIZE="6"> -<A NAME="SEC36"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC35"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.7 Modifying Text </H3> -<!--docid::SEC36::--> -<P> - -<A NAME="IDX255"></A> -<DL> -<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I> -<DD>Insert <VAR>text</VAR> into the line at the current cursor position. -Returns the number of characters inserted. -</DL> -</P><P> - -<A NAME="IDX256"></A> -<DL> -<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I> -<DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line. -Returns the number of characters deleted. -</DL> -</P><P> - -<A NAME="IDX257"></A> -<DL> -<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I> -<DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in -the current line. -</DL> -</P><P> - -<A NAME="IDX258"></A> -<DL> -<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I> -<DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line -to the kill ring, appending or prepending to the last kill if the -last command was a kill command. The text is deleted. -If <VAR>start</VAR> is less than <VAR>end</VAR>, -the text is appended, otherwise prepended. If the last command was -not a kill, a new kill ring slot is used. -</DL> -</P><P> - -<A NAME="IDX259"></A> -<DL> -<DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I> -<DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked -by a key bound to a macro. Not especially useful; use -<CODE>rl_insert_text()</CODE> instead. -</DL> -</P><P> - -<A NAME="Character Input"></A> -<HR SIZE="6"> -<A NAME="SEC37"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC36"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.8 Character Input </H3> -<!--docid::SEC37::--> -<P> - -<A NAME="IDX260"></A> -<DL> -<DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I> -<DD>Return the next character available from Readline's current input stream. -This handles input inserted into -the input stream via <VAR>rl_pending_input</VAR> (see section <A HREF="readline.html#SEC28">2.3 Readline Variables</A>) -and <CODE>rl_stuff_char()</CODE>, macros, and characters read from the keyboard. -While waiting for input, this function will call any function assigned to -the <CODE>rl_event_hook</CODE> variable. -</DL> -</P><P> - -<A NAME="IDX261"></A> -<DL> -<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I> -<DD>Return the next character available from <VAR>stream</VAR>, which is assumed to -be the keyboard. -</DL> -</P><P> - -<A NAME="IDX262"></A> -<DL> -<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I> -<DD>Insert <VAR>c</VAR> into the Readline input stream. It will be "read" -before Readline attempts to read characters from the terminal with -<CODE>rl_read_key()</CODE>. Up to 512 characters may be pushed back. -<CODE>rl_stuff_char</CODE> returns 1 if the character was successfully inserted; -0 otherwise. -</DL> -</P><P> - -<A NAME="IDX263"></A> -<DL> -<DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I> -<DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE> -is called. This sets <VAR>rl_pending_input</VAR>. -</DL> -</P><P> - -<A NAME="IDX264"></A> -<DL> -<DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I> -<DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any -previous call to <CODE>rl_execute_next()</CODE>. This works only if the -pending input has not already been read with <CODE>rl_read_key()</CODE>. -</DL> -</P><P> - -<A NAME="IDX265"></A> -<DL> -<DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I> -<DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will -wait for <VAR>u</VAR> microseconds for input before calling any function -assigned to <CODE>rl_event_hook</CODE>. The default waiting period is -one-tenth of a second. Returns the old timeout value. -</DL> -</P><P> - -<A NAME="Terminal Management"></A> -<HR SIZE="6"> -<A NAME="SEC38"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC37"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.9 Terminal Management </H3> -<!--docid::SEC38::--> -<P> - -<A NAME="IDX266"></A> -<DL> -<DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I> -<DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE> -can read a single character at a time from the keyboard. -The <VAR>meta_flag</VAR> argument should be non-zero if Readline should -read eight-bit input. -</DL> -</P><P> - -<A NAME="IDX267"></A> -<DL> -<DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I> -<DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in -the state in which it was before the most recent call to -<CODE>rl_prep_terminal()</CODE>. -</DL> -</P><P> - -<A NAME="IDX268"></A> -<DL> -<DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I> -<DD>Read the operating system's terminal editing characters (as would be displayed -by <CODE>stty</CODE>) to their Readline equivalents. The bindings are performed -in <VAR>kmap</VAR>. -</DL> -</P><P> - -<A NAME="IDX269"></A> -<DL> -<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I> -<DD>Reinitialize Readline's idea of the terminal settings using -<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>). -If <VAR>terminal_name</VAR> is <CODE>NULL</CODE>, the value of the <CODE>TERM</CODE> -environment variable is used. -</DL> -</P><P> - -<A NAME="Utility Functions"></A> -<HR SIZE="6"> -<A NAME="SEC39"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC38"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.10 Utility Functions </H3> -<!--docid::SEC39::--> -<P> - -<A NAME="IDX270"></A> -<DL> -<DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I> -<DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>. -The point and mark are preserved, if possible. -If <VAR>clear_undo</VAR> is non-zero, the undo list associated with the -current line is cleared. -</DL> -</P><P> - -<A NAME="IDX271"></A> -<DL> -<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I> -<DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR> -characters, possibly reallocating it if necessary. -</DL> -</P><P> - -<A NAME="IDX272"></A> -<DL> -<DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I> -<DD>Initialize or re-initialize Readline's internal state. -It's not strictly necessary to call this; <CODE>readline()</CODE> calls it before -reading any input. -</DL> -</P><P> - -<A NAME="IDX273"></A> -<DL> -<DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I> -<DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. -</DL> -</P><P> - -<A NAME="IDX274"></A> -<DL> -<DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I> -<DD>Return 1 if <VAR>c</VAR> is an alphabetic character. -</DL> -</P><P> - -<A NAME="IDX275"></A> -<DL> -<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I> -<DD>A convenience function for displaying a list of strings in -columnar format on Readline's output stream. <CODE>matches</CODE> is the list -of strings, in argv format, such as a list of completion matches. -<CODE>len</CODE> is the number of strings in <CODE>matches</CODE>, and <CODE>max</CODE> -is the length of the longest string in <CODE>matches</CODE>. This function uses -the setting of <CODE>print-completions-horizontally</CODE> to select how the -matches are displayed (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>). -</DL> -</P><P> - -The following are implemented as macros, defined in <CODE>chardefs.h</CODE>. -Applications should refrain from using them. -</P><P> - -<A NAME="IDX276"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I> -<DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character. -</DL> -</P><P> - -<A NAME="IDX277"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I> -<DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character. -</DL> -</P><P> - -<A NAME="IDX278"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I> -<DD>Return 1 if <VAR>c</VAR> is a numeric character. -</DL> -</P><P> - -<A NAME="IDX279"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I> -<DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding -uppercase character. -</DL> -</P><P> - -<A NAME="IDX280"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I> -<DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding -lowercase character. -</DL> -</P><P> - -<A NAME="IDX281"></A> -<DL> -<DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I> -<DD>If <VAR>c</VAR> is a number, return the value it represents. -</DL> -</P><P> - -<A NAME="Miscellaneous Functions"></A> -<HR SIZE="6"> -<A NAME="SEC40"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC39"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.11 Miscellaneous Functions </H3> -<!--docid::SEC40::--> -<P> - -<A NAME="IDX282"></A> -<DL> -<DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I> -<DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>. -The binding is performed in <VAR>map</VAR>. When <VAR>keyseq</VAR> is invoked, the -<VAR>macro</VAR> will be inserted into the line. This function is deprecated; -use <CODE>rl_generic_bind()</CODE> instead. -</DL> -</P><P> - -<A NAME="IDX283"></A> -<DL> -<DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I> -<DD>Print the key sequences bound to macros and their values, using -the current keymap, to <CODE>rl_outstream</CODE>. -If <VAR>readable</VAR> is non-zero, the list is formatted in such a way -that it can be made part of an <CODE>inputrc</CODE> file and re-read. -</DL> -</P><P> - -<A NAME="IDX284"></A> -<DL> -<DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I> -<DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>. -This behaves as if the readline command -<SAMP>`set <VAR>variable</VAR> <VAR>value</VAR>'</SAMP> had been executed in an <CODE>inputrc</CODE> -file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A>). -</DL> -</P><P> - -<A NAME="IDX285"></A> -<DL> -<DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I> -<DD>Print the readline variable names and their current values -to <CODE>rl_outstream</CODE>. -If <VAR>readable</VAR> is non-zero, the list is formatted in such a way -that it can be made part of an <CODE>inputrc</CODE> file and re-read. -</DL> -</P><P> - -<A NAME="IDX286"></A> -<DL> -<DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I> -<DD>Set the time interval (in microseconds) that Readline waits when showing -a balancing character when <CODE>blink-matching-paren</CODE> has been enabled. -</DL> -</P><P> - -<A NAME="IDX287"></A> -<DL> -<DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I> -<DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>. -Readline fetches the termcap entry for the current terminal name and -uses those capabilities to move around the screen line and perform other -terminal-specific operations, like erasing a line. Readline does not -use all of a terminal's capabilities, and this function will return -values for only those capabilities Readline uses. -</DL> -</P><P> - -<A NAME="Alternate Interface"></A> -<HR SIZE="6"> -<A NAME="SEC41"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC40"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.12 Alternate Interface </H3> -<!--docid::SEC41::--> -<P> - -An alternate interface is available to plain <CODE>readline()</CODE>. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to <CODE>select()</CODE> -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. -</P><P> - -<A NAME="IDX288"></A> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I> -<DD>Set up the terminal for readline I/O and display the initial -expanded value of <VAR>prompt</VAR>. Save the value of <VAR>lhandler</VAR> to -use as a function to call when a complete line of input has been entered. -The function takes the text of the line as an argument. -</DL> -</P><P> - -<A NAME="IDX289"></A> -<DL> -<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I> -<DD>Whenever an application determines that keyboard input is available, it -should call <CODE>rl_callback_read_char()</CODE>, which will read the next -character from the current input source. -If that character completes the line, <CODE>rl_callback_read_char</CODE> will -invoke the <VAR>lhandler</VAR> function saved by <CODE>rl_callback_handler_install</CODE> -to process the line. -Before calling the <VAR>lhandler</VAR> function, the terminal settings are -reset to the values they had before calling -<CODE>rl_callback_handler_install</CODE>. -If the <VAR>lhandler</VAR> function returns, -the terminal settings are modified for Readline's use again. -<CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a -<CODE>NULL</CODE> line. -</DL> -</P><P> - -<A NAME="IDX290"></A> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I> -<DD>Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -If the <VAR>lhandler</VAR> installed by <CODE>rl_callback_handler_install</CODE> -does not exit the program, either this function or the function referred -to by the value of <CODE>rl_deprep_term_function</CODE> should be called before -the program exits to reset the terminal settings. -</DL> -</P><P> - -<A NAME="A Readline Example"></A> -<HR SIZE="6"> -<A NAME="SEC42"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC41"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC31"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC29"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.4.13 A Readline Example </H3> -<!--docid::SEC42::--> -<P> - -Here is a function which changes lowercase characters to their uppercase -equivalents, and uppercase characters to lowercase. If -this function was bound to <SAMP>`M-c'</SAMP>, then typing <SAMP>`M-c'</SAMP> would -change the case of the character under point. Typing <SAMP>`M-1 0 M-c'</SAMP> -would change the case of the following 10 characters, leaving the cursor on -the last character changed. -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>/* 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 (_rl_uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); - else if (_rl_lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_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); -} -</pre></td></tr></table></P><P> - -<A NAME="Readline Signal Handling"></A> -<HR SIZE="6"> -<A NAME="SEC43"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC42"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.5 Readline Signal Handling </H2> -<!--docid::SEC43::--> -<P> - -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 such a signal is received in order to -restore the terminal to a sane state, or provide application writers with -functions to do so manually. -</P><P> - -Readline contains an internal signal handler that is installed for a -number of signals (<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, -<CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>). -When one of these signals is received, the signal handler -will reset the terminal attributes to those that were in effect before -<CODE>readline()</CODE> was called, reset the signal handling to what it was -before <CODE>readline()</CODE> 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 <CODE>SIGINT</CODE> is received, the Readline signal handler performs -some additional work, which will cause any partially-entered line to be -aborted (see the description of <CODE>rl_free_line_state()</CODE> below). -</P><P> - -There is an additional Readline signal handler, for <CODE>SIGWINCH</CODE>, which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an <CODE>xterm</CODE>). The Readline <CODE>SIGWINCH</CODE> -handler updates Readline's internal screen size information, and then calls -any <CODE>SIGWINCH</CODE> signal handler the calling application has installed. -Readline calls the application's <CODE>SIGWINCH</CODE> 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 <CODE>longjmp</CODE> back to a main processing loop), it <EM>must</EM> -call <CODE>rl_cleanup_after_signal()</CODE> (described below), to restore the -terminal state. -</P><P> - -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 <CODE>readline()</CODE>, not in -a signal handler, so Readline's internal signal state is not corrupted. -</P><P> - -<A NAME="IDX291"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_signals</B> -<DD>If this variable is non-zero, Readline will install signal handlers for -<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, -<CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>. -</P><P> - -The default value of <CODE>rl_catch_signals</CODE> is 1. -</DL> -</P><P> - -<A NAME="IDX292"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B> -<DD>If this variable is non-zero, Readline will install a signal handler for -<CODE>SIGWINCH</CODE>. -</P><P> - -The default value of <CODE>rl_catch_sigwinch</CODE> is 1. -</DL> -</P><P> - -If an application does not wish to have Readline catch any signals, or -to handle signals other than those Readline catches (<CODE>SIGHUP</CODE>, -for example), -Readline provides convenience functions to do the necessary terminal -and internal state cleanup upon receipt of a signal. -</P><P> - -<A NAME="IDX293"></A> -<DL> -<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I> -<DD>This function will reset the state of the terminal to what it was before -<CODE>readline()</CODE> was called, and remove the Readline signal handlers for -all signals, depending on the values of <CODE>rl_catch_signals</CODE> and -<CODE>rl_catch_sigwinch</CODE>. -</DL> -</P><P> - -<A NAME="IDX294"></A> -<DL> -<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I> -<DD>This will free any partial state associated with the current input line -(undo information, any partial history entry, any partially-entered -keyboard macro, and any partially-entered numeric argument). This -should be called before <CODE>rl_cleanup_after_signal()</CODE>. The -Readline signal handler for <CODE>SIGINT</CODE> calls this to abort the -current input line. -</DL> -</P><P> - -<A NAME="IDX295"></A> -<DL> -<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I> -<DD>This will reinitialize the terminal and reinstall any Readline signal -handlers, depending on the values of <CODE>rl_catch_signals</CODE> and -<CODE>rl_catch_sigwinch</CODE>. -</DL> -</P><P> - -If an application does not wish Readline to catch <CODE>SIGWINCH</CODE>, it may -call <CODE>rl_resize_terminal()</CODE> or <CODE>rl_set_screen_size()</CODE> to force -Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE> -is received. -</P><P> - -<A NAME="IDX296"></A> -<DL> -<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I> -<DD>Update Readline's internal screen size by reading values from the kernel. -</DL> -</P><P> - -<A NAME="IDX297"></A> -<DL> -<DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I> -<DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and -<VAR>cols</VAR> columns. -</DL> -</P><P> - -If an application does not want to install a <CODE>SIGWINCH</CODE> handler, but -is still interested in the screen dimensions, Readline's idea of the screen -size may be queried. -</P><P> - -<A NAME="IDX298"></A> -<DL> -<DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I> -<DD>Return Readline's idea of the terminal's size in the -variables pointed to by the arguments. -</DL> -</P><P> - -The following functions install and remove Readline's signal handlers. -</P><P> - -<A NAME="IDX299"></A> -<DL> -<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I> -<DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, -<CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, -<CODE>SIGTTOU</CODE>, and <CODE>SIGWINCH</CODE>, depending on the values of -<CODE>rl_catch_signals</CODE> and <CODE>rl_catch_sigwinch</CODE>. -</DL> -</P><P> - -<A NAME="IDX300"></A> -<DL> -<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I> -<DD>Remove all of the Readline signal handlers installed by -<CODE>rl_set_signals()</CODE>. -</DL> -</P><P> - -<A NAME="Custom Completers"></A> -<HR SIZE="6"> -<A NAME="SEC44"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC43"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC23"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 2.6 Custom Completers </H2> -<!--docid::SEC44::--> -<P> - -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. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The logic used to do completion.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Functions provided by Readline.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Variables which control completion.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example of writing completer subroutines.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="How Completing Works"></A> -<HR SIZE="6"> -<A NAME="SEC45"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.6.1 How Completing Works </H3> -<!--docid::SEC45::--> -<P> - -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. -</P><P> - -There are three major functions used to perform completion: -</P><P> - -<OL> -<LI> -The user-interface function <CODE>rl_complete()</CODE>. This function is -called with the same arguments as other bindable Readline functions: -<VAR>count</VAR> and <VAR>invoking_key</VAR>. -It isolates the word to be completed and calls -<CODE>rl_completion_matches()</CODE> 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. -<P> - -<LI> -The internal function <CODE>rl_completion_matches()</CODE> uses an -application-supplied <EM>generator</EM> function to generate the list of -possible matches, and then returns the array of these matches. -The caller should place the address of its generator function in -<CODE>rl_completion_entry_function</CODE>. -<P> - -<LI> -The generator function is called repeatedly from -<CODE>rl_completion_matches()</CODE>, returning a string each time. The -arguments to the generator function are <VAR>text</VAR> and <VAR>state</VAR>. -<VAR>text</VAR> is the partial word to be completed. <VAR>state</VAR> 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. The generator function returns -<CODE>(char *)NULL</CODE> to inform <CODE>rl_completion_matches()</CODE> that there are -no more possibilities left. Usually the generator function computes the -list of possible completions when <VAR>state</VAR> 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 <CODE>malloc()</CODE>; Readline -frees the strings when it has finished with them. -<P> - -</OL> -<P> - -<A NAME="IDX301"></A> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD>Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>rl_completion_matches()</CODE>). The default is to do filename completion. -</DL> -</P><P> - -<A NAME="IDX302"></A> -<DL> -<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> -<DD>This is a pointer to the generator function for -<CODE>rl_completion_matches()</CODE>. -If the value of <CODE>rl_completion_entry_function</CODE> is -<CODE>NULL</CODE> then the default filename generator -function, <CODE>rl_filename_completion_function()</CODE>, is used. -</DL> -</P><P> - -<A NAME="Completion Functions"></A> -<HR SIZE="6"> -<A NAME="SEC46"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC45"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.6.2 Completion Functions </H3> -<!--docid::SEC46::--> -<P> - -Here is the complete list of callable completion functions present in -Readline. -</P><P> - -<A NAME="IDX303"></A> -<DL> -<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I> -<DD>Complete the word at or before point. <VAR>what_to_do</VAR> says what to do -with the completion. A value of <SAMP>`?'</SAMP> means list the possible -completions. <SAMP>`TAB'</SAMP> means do standard completion. <SAMP>`*'</SAMP> means -insert all of the possible completions. <SAMP>`!'</SAMP> means to display -all of the possible completions, if there is more than one, as well as -performing partial completion. -</DL> -</P><P> - -<A NAME="IDX304"></A> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD>Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>rl_completion_matches()</CODE> and <CODE>rl_completion_entry_function</CODE>). -The default is to do filename -completion. This calls <CODE>rl_complete_internal()</CODE> with an -argument depending on <VAR>invoking_key</VAR>. -</DL> -</P><P> - -<A NAME="IDX305"></A> -<DL> -<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I> -<DD>List the possible completions. See description of <CODE>rl_complete -()</CODE>. This calls <CODE>rl_complete_internal()</CODE> with an argument of -<SAMP>`?'</SAMP>. -</DL> -</P><P> - -<A NAME="IDX306"></A> -<DL> -<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I> -<DD>Insert the list of possible completions into the line, deleting the -partially-completed word. See description of <CODE>rl_complete()</CODE>. -This calls <CODE>rl_complete_internal()</CODE> with an argument of <SAMP>`*'</SAMP>. -</DL> -</P><P> - -<A NAME="IDX307"></A> -<DL> -<DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I> -<DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE> -depending on whether <VAR>cfunc</VAR> was called twice in succession and -the value of the <CODE>show-all-if-ambiguous</CODE> variable. -Application-specific completion functions may use this function to present -the same interface as <CODE>rl_complete()</CODE>. -</DL> -</P><P> - -<A NAME="IDX308"></A> -<DL> -<DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I> -<DD>Returns an array of strings which is a list of completions for -<VAR>text</VAR>. If there are no completions, returns <CODE>NULL</CODE>. -The first entry in the returned array is the substitution for <VAR>text</VAR>. -The remaining entries are the possible completions. The array is -terminated with a <CODE>NULL</CODE> pointer. -</P><P> - -<VAR>entry_func</VAR> is a function of two args, and returns a -<CODE>char *</CODE>. The first argument is <VAR>text</VAR>. The second is a -state argument; it is zero on the first call, and non-zero on subsequent -calls. <VAR>entry_func</VAR> returns a <CODE>NULL</CODE> pointer to the caller -when there are no more matches. -</DL> -</P><P> - -<A NAME="IDX309"></A> -<DL> -<DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I> -<DD>A generator function for filename completion in the general case. -<VAR>text</VAR> is a partial filename. -The Bash source is a useful reference for writing custom -completion functions (the Bash completion functions call this and other -Readline functions). -</DL> -</P><P> - -<A NAME="IDX310"></A> -<DL> -<DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I> -<DD>A completion generator for usernames. <VAR>text</VAR> contains a partial -username preceded by a random character (usually <SAMP>`~'</SAMP>). As with all -completion generators, <VAR>state</VAR> is zero on the first call and non-zero -for subsequent calls. -</DL> -</P><P> - -<A NAME="Completion Variables"></A> -<HR SIZE="6"> -<A NAME="SEC47"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC46"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.6.3 Completion Variables </H3> -<!--docid::SEC47::--> -<P> - -<A NAME="IDX311"></A> -<DL> -<DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B> -<DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>. -<CODE>NULL</CODE> means to use <CODE>rl_filename_completion_function()</CODE>, the default -filename completer. -</DL> -</P><P> - -<A NAME="IDX312"></A> -<DL> -<DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B> -<DD>A pointer to an alternative function to create matches. -The function is called with <VAR>text</VAR>, <VAR>start</VAR>, and <VAR>end</VAR>. -<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> defining -the boundaries of <VAR>text</VAR>, which is a character string. -If this function exists and returns <CODE>NULL</CODE>, or if this variable is -set to <CODE>NULL</CODE>, then <CODE>rl_complete()</CODE> will call the value of -<CODE>rl_completion_entry_function</CODE> to generate matches, otherwise the -array of strings returned will be used. -If this function sets the <CODE>rl_attempted_completion_over</CODE> -variable to a non-zero value, Readline will not perform its default -completion even if this function returns no matches. -</DL> -</P><P> - -<A NAME="IDX313"></A> -<DL> -<DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B> -<DD>A pointer to a function that will quote a filename in an -application-specific fashion. This is called if filename completion is being -attempted and one of the characters in <CODE>rl_filename_quote_characters</CODE> -appears in a completed filename. The function is called with -<VAR>text</VAR>, <VAR>match_type</VAR>, and <VAR>quote_pointer</VAR>. The <VAR>text</VAR> -is the filename to be quoted. The <VAR>match_type</VAR> is either -<CODE>SINGLE_MATCH</CODE>, if there is only one completion match, or -<CODE>MULT_MATCH</CODE>. Some functions use this to decide whether or not to -insert a closing quote character. The <VAR>quote_pointer</VAR> is a pointer -to any opening quote character the user typed. Some functions choose -to reset this character. -</DL> -</P><P> - -<A NAME="IDX314"></A> -<DL> -<DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B> -<DD>A pointer to a function that will remove application-specific quoting -characters from a filename before completion is attempted, so those -characters do not interfere with matching the text against names in -the filesystem. It is called with <VAR>text</VAR>, the text of the word -to be dequoted, and <VAR>quote_char</VAR>, which is the quoting character -that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>). If -<VAR>quote_char</VAR> is zero, the filename was not in an embedded string. -</DL> -</P><P> - -<A NAME="IDX315"></A> -<DL> -<DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B> -<DD>A pointer to a function to call that determines whether or not a specific -character in the line buffer is quoted, according to whatever quoting -mechanism the program calling Readline uses. The function is called with -two arguments: <VAR>text</VAR>, the text of the line, and <VAR>index</VAR>, the -index of the character in the line. It is used to decide whether a -character found in <CODE>rl_completer_word_break_characters</CODE> should be -used to break words for the completer. -</DL> -</P><P> - -<A NAME="IDX316"></A> -<DL> -<DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B> -<DD>This function, if defined, is called by the completer when real filename -completion is done, after all the matching names have been generated. -It is passed a <CODE>NULL</CODE> terminated array of matches. -The first element (<CODE>matches[0]</CODE>) 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. -</DL> -</P><P> - -<A NAME="IDX317"></A> -<DL> -<DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B> -<DD>This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument, and may modify that string. -If the string is replaced with a new string, the old value should be freed. -Any modified directory name should have a trailing slash. -The modified value will be displayed as part of the completion, replacing -the directory portion of the pathname the user typed. -It returns an integer that should be non-zero if the function modifies -its directory argument. -It could be used to expand symbolic links or shell variables in pathnames. -</DL> -</P><P> - -<A NAME="IDX318"></A> -<DL> -<DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B> -<DD>If non-zero, then this is the address of a function to call when -completing a word would normally display the list of possible matches. -This function is called in lieu of Readline displaying the list. -It takes three arguments: -(<CODE>char **</CODE><VAR>matches</VAR>, <CODE>int</CODE> <VAR>num_matches</VAR>, <CODE>int</CODE> <VAR>max_length</VAR>) -where <VAR>matches</VAR> is the array of matching strings, -<VAR>num_matches</VAR> is the number of strings in that array, and -<VAR>max_length</VAR> is the length of the longest string in that array. -Readline provides a convenience function, <CODE>rl_display_match_list</CODE>, -that takes care of doing the display to Readline's output stream. That -function may be called from this hook. -</DL> -</P><P> - -<A NAME="IDX319"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B> -<DD>The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash: -<CODE>" \t\n\"\\'`@$><=;|&{("</CODE>. -</DL> -</P><P> - -<A NAME="IDX320"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B> -<DD>A list of quote characters which can cause a word break. -</DL> -</P><P> - -<A NAME="IDX321"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B> -<DD>The list of characters that signal a break between words for -<CODE>rl_complete_internal()</CODE>. The default list is the value of -<CODE>rl_basic_word_break_characters</CODE>. -</DL> -</P><P> - -<A NAME="IDX322"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B> -<DD>A list of characters which can be used to quote a substring of the line. -Completion occurs on the entire substring, and within the substring -<CODE>rl_completer_word_break_characters</CODE> are treated as any other character, -unless they also appear within this list. -</DL> -</P><P> - -<A NAME="IDX323"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B> -<DD>A list of characters that cause a filename to be quoted by the completer -when they appear in a completed filename. The default is the null string. -</DL> -</P><P> - -<A NAME="IDX324"></A> -<DL> -<DT><U>Variable:</U> const char * <B>rl_special_prefixes</B> -<DD>The list of characters that are word break characters, but should be -left in <VAR>text</VAR> when it is passed to the completion function. -Programs can use this to help determine what kind of completing to do. -For instance, Bash sets this variable to "$@" so that it can complete -shell variables and hostnames. -</DL> -</P><P> - -<A NAME="IDX325"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_query_items</B> -<DD>Up to this many items will be displayed in response to a -possible-completions call. After that, we ask the user if she is sure -she wants to see them all. The default value is 100. -</DL> -</P><P> - -<A NAME="IDX326"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_append_character</B> -<DD>When a single completion alternative matches at the end of the command -line, this character is appended to the inserted completion text. The -default is a space character (<SAMP>` '</SAMP>). Setting this to the null -character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically. -This can be changed in custom completion functions to -provide the "most sensible word separator character" according to -an application-specific command line syntax specification. -</DL> -</P><P> - -<A NAME="IDX327"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_suppress_append</B> -<DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to -matches at the end of the command line, as described above. It is -set to 0 before any application-specific completion function is called. -</DL> -</P><P> - -<A NAME="IDX328"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B> -<DD>If non-zero, a slash will be appended to completed filenames that are -symbolic links to directory names, subject to the value of the -user-settable <VAR>mark-directories</VAR> variable. -This variable exists so that application completion functions can -override the user's global preference (set via the -<VAR>mark-symlinked-directories</VAR> Readline variable) if appropriate. -This variable is set to the user's preference before any -application completion function is called, so unless that function -modifies the value, the user's preferences are honored. -</DL> -</P><P> - -<A NAME="IDX329"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B> -<DD>If non-zero, then duplicates in the matches are removed. -The default is 1. -</DL> -</P><P> - -<A NAME="IDX330"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B> -<DD>Non-zero means that the results of the matches are to be treated as -filenames. This is <EM>always</EM> zero on entry, and can only be changed -within a completion entry generator function. If it is set to a non-zero -value, directory names have a slash appended and Readline attempts to -quote completed filenames if they contain any characters in -<CODE>rl_filename_quote_characters</CODE> and <CODE>rl_filename_quoting_desired</CODE> -is set to a non-zero value. -</DL> -</P><P> - -<A NAME="IDX331"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B> -<DD>Non-zero means that the results of the matches are to be quoted using -double quotes (or an application-specific quoting mechanism) if the -completed filename contains any characters in -<CODE>rl_filename_quote_chars</CODE>. This is <EM>always</EM> 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 <CODE>rl_filename_quoting_function</CODE>. -</DL> -</P><P> - -<A NAME="IDX332"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_attempted_completion_over</B> -<DD>If an application-specific completion function assigned to -<CODE>rl_attempted_completion_function</CODE> sets this variable to a non-zero -value, Readline will not perform its default filename completion even -if the application's completion function returns no matches. -It should be set only by an application's completion function. -</DL> -</P><P> - -<A NAME="IDX333"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_type</B> -<DD>Set to a character describing the type of completion Readline is currently -attempting; see the description of <CODE>rl_complete_internal()</CODE> -(see section <A HREF="readline.html#SEC46">2.6.2 Completion Functions</A>) for the list of characters. -</DL> -</P><P> - -<A NAME="IDX334"></A> -<DL> -<DT><U>Variable:</U> int <B>rl_inhibit_completion</B> -<DD>If this variable is non-zero, completion is inhibited. The completion -character will be inserted as any other bound to <CODE>self-insert</CODE>. -</DL> -</P><P> - -<A NAME="A Short Completion Example"></A> -<HR SIZE="6"> -<A NAME="SEC48"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC47"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC44"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 2.6.4 A Short Completion Example </H3> -<!--docid::SEC48::--> -<P> - -Here is a small application demonstrating the use of the GNU Readline -library. It is called <CODE>fileman</CODE>, and the source code resides in -<TT>`examples/fileman.c'</TT>. This sample application provides -completion of command names, line editing features, and access to the -history list. -</P><P> - -<TABLE><tr><td> </td><td class=smallexample><FONT SIZE=-1><pre>/* 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 *xmalloc (); - -/* The names of functions that actually do the manipulation. */ -int com_list __P((char *)); -int com_view __P((char *)); -int com_rename __P((char *)); -int com_stat __P((char *)); -int com_pwd __P((char *)); -int com_delete __P((char *)); -int com_help __P((char *)); -int com_cd __P((char *)); -int com_quit __P((char *)); - -/* A structure which contains information on the commands this program - can understand. */ - -typedef struct { - char *name; /* User printable name of the function. */ - rl_icpfunc_t *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, (rl_icpfunc_t *)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 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 __P((const char *, int)); -char **fileman_completion __P((const char *, int, int)); - -/* 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 = 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. Returnthe array of matches, or NULL if there aren't any. */ -char ** -fileman_completion (text, start, end) - const 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 = rl_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) - const 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 = getcwd (dir, sizeof(dir) - 1); - 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.\n" - caller); - fprintf (stderr, "Write it yourself.\n"); -} - -/* 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); -} -</FONT></pre></td></tr></table></P><P> - -<A NAME="Concept Index"></A> -<HR SIZE="6"> -<A NAME="SEC49"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC48"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC50"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> Concept Index </H1> -<!--docid::SEC49::--> -<table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A> - -<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A> - -<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A> - -<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A> - -</td></tr></table><br><P></P> -<TABLE border=0> -<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_C"></A>C</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">command editing</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_E"></A>E</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="readline.html#SEC9">1.3 Readline Init File</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC3">interaction, readline</A></TD><TD valign=top><A HREF="readline.html#SEC3">1.2 Readline Interaction</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_K"></A>K</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX3">kill ring</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX1">killing text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_N"></A>N</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">notation, readline</A></TD><TD valign=top><A HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_R"></A>R</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX175">readline, function</A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_V"></A>V</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX4">variables, readline</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="cp_Y"></A>Y</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX2">yanking text</A></TD><TD valign=top><A HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#cp_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="readline.html#cp_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="readline.html#cp_I" style="text-decoration:none"><b>I</b></A> - -<A HREF="readline.html#cp_K" style="text-decoration:none"><b>K</b></A> - -<A HREF="readline.html#cp_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="readline.html#cp_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="readline.html#cp_V" style="text-decoration:none"><b>V</b></A> - -<A HREF="readline.html#cp_Y" style="text-decoration:none"><b>Y</b></A> - -</td></tr></table><br><P> - -<A NAME="Function and Variable Index"></A> -<HR SIZE="6"> -<A NAME="SEC50"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1> Function and Variable Index </H1> -<!--docid::SEC50::--> -<table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A> - -<BR> -<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A> - -<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A> - -<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A> - -<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A> - -<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A> - -<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A> - -<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A> - -<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A> - -<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A> - -<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A> - -<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A> - -<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A> - -<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A> - -<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A> - -<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A> - -</td></tr></table><br><P></P> -<TABLE border=0> -<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX142"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX143"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX42"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX43"><CODE>accept-line (Newline or Return)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_B"></A>B</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX32"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX33"><CODE>backward-char (C-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX70"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX71"><CODE>backward-delete-char (Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX94"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX95"><CODE>backward-kill-line (C-x Rubout)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX102"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX103"><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX36"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX37"><CODE>backward-word (M-b)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX48"><CODE>beginning-of-history (M-&#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX49"><CODE>beginning-of-history (M-&#60;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX26"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX27"><CODE>beginning-of-line (C-a)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX5">bell-style</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_C"></A>C</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX138"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX139"><CODE>call-last-kbd-macro (C-x e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX88"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX89"><CODE>capitalize-word (M-c)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX158"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX159"><CODE>character-search (C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX160"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX161"><CODE>character-search-backward (M-C-])</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX38"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX39"><CODE>clear-screen (C-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX6">comment-begin</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX124"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX125"><CODE>complete (<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX7">completion-query-items</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX8">convert-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX112"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX113"><CODE>copy-backward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX114"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX115"><CODE>copy-forward-word ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX110"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX111"><CODE>copy-region-as-kill ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_D"></A>D</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX68"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX69"><CODE>delete-char (C-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX132"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX133"><CODE>delete-char-or-list ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX106"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX107"><CODE>delete-horizontal-space ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX120"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX121"><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX9">disable-completion</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX144"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX145"><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX86"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX87"><CODE>downcase-word (M-l)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX164"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX165"><CODE>dump-functions ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX168"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX169"><CODE>dump-macros ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX166"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX167"><CODE>dump-variables ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_E"></A>E</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX10">editing-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX170"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX171"><CODE>emacs-editing-mode (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX11">enable-keypad</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX136"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX137"><CODE>end-kbd-macro (C-x ))</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX50"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX51"><CODE>end-of-history (M-&#62;)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX28"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX29"><CODE>end-of-line (C-e)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX156"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX157"><CODE>exchange-point-and-mark (C-x C-x)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX12">expand-tilde</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_F"></A>F</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX72"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX73"><CODE>forward-backward-delete-char ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX30"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX31"><CODE>forward-char (C-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX54"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX55"><CODE>forward-search-history (C-s)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX34"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX35"><CODE>forward-word (M-f)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_H"></A>H</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX13">history-preserve-point</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX62"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX63"><CODE>history-search-backward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX60"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX61"><CODE>history-search-forward ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX14">horizontal-scroll-mode</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_I"></A>I</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX15">input-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX162"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX163"><CODE>insert-comment (M-#)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX128"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX129"><CODE>insert-completions (M-*)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX17">isearch-terminators</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_K"></A>K</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX18">keymap</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX92"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX93"><CODE>kill-line (C-k)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX108"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX109"><CODE>kill-region ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX98"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX99"><CODE>kill-whole-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX100"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX101"><CODE>kill-word (M-d)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_M"></A>M</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX19">mark-modified-lines</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX20">mark-symlinked-directories</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX21">match-hidden-files</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX130"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX131"><CODE>menu-complete ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX16">meta-flag</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_N"></A>N</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX46"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX47"><CODE>next-history (C-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX58"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX59"><CODE>non-incremental-forward-search-history (M-n)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX56"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX57"><CODE>non-incremental-reverse-search-history (M-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_O"></A>O</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX22">output-meta</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX90"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX91"><CODE>overwrite-mode ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_P"></A>P</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX23">page-completions</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX126"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX127"><CODE>possible-completions (M-?)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX147"><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX44"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX45"><CODE>previous-history (C-p)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_Q"></A>Q</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX74"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX75"><CODE>quoted-insert (C-q or C-v)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_R"></A>R</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX140"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX141"><CODE>re-read-init-file (C-x C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX174"><CODE>readline</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC24">2.1 Basic Behavior</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX40"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX41"><CODE>redraw-current-line ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC14">1.4.1 Commands For Moving</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX52"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX53"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX150"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX151"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC30">2.4.1 Naming a Function</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_already_prompted</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_binding_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC41">2.4.12 Alternate Interface</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291">rl_catch_signals</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_completion_append_character</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC45">2.6.1 How Completing Works</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311">rl_completion_entry_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_completion_query_items</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completion_type</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_deprep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_dispatching</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_done</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_editing_mode</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX178">rl_end</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_erase_empty_line</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_event_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_executing_keymap</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_executing_macro</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_explicit_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_getc_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_inhibit_completion</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_instream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_last_func</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_library_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX176">rl_line_buffer</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX179">rl_mark</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_numeric_arg</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_outstream</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_pending_input</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX177">rl_point</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_pre_input_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_prep_term_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_prompt</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC36">2.4.7 Modifying Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_readline_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_readline_state</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_readline_version</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_redisplay_function</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC39">2.4.10 Utility Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC43">2.5 Readline Signal Handling</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC35">2.4.6 Redisplay</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_special_prefixes</A></TD><TD valign=top><A HREF="readline.html#SEC47">2.6.3 Completion Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_startup_hook</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC37">2.4.8 Character Input</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_terminal_name</A></TD><TD valign=top><A HREF="readline.html#SEC28">2.3 Readline Variables</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC38">2.4.9 Terminal Management</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC32">2.4.3 Binding Keys</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC46">2.6.2 Completion Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX78"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX79"><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>set-mark (C-@)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX24">show-all-if-ambiguous</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX134"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX135"><CODE>start-kbd-macro (C-x ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_T"></A>T</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX76"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX77"><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX152"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX153"><CODE>tilde-expand (M-~)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX81"><CODE>transpose-chars (C-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX82"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX83"><CODE>transpose-words (M-t)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_U"></A>U</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX148"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX149"><CODE>undo (C-_ or C-x C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX122"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX123"><CODE>universal-argument ()</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX96"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX97"><CODE>unix-line-discard (C-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX104"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX105"><CODE>unix-word-rubout (C-w)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX84"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX85"><CODE>upcase-word (M-u)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_V"></A>V</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX172"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX173"><CODE>vi-editing-mode (M-C-j)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX25">visible-stats</A></TD><TD valign=top><A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -<TR><TH><A NAME="fn_Y"></A>Y</TH><TD></TD><TD></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX116"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX117"><CODE>yank (C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX66"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX67"><CODE>yank-last-arg (M-. or M-_)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX64"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX65"><CODE>yank-nth-arg (M-C-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX118"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX119"><CODE>yank-pop (M-y)</CODE></A></TD><TD valign=top><A HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A></TD></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -</TABLE><P></P><table><tr><th valign=top>Jump to: </th><td><A HREF="readline.html#fn__" style="text-decoration:none"><b>_</b></A> - -<BR> -<A HREF="readline.html#fn_A" style="text-decoration:none"><b>A</b></A> - -<A HREF="readline.html#fn_B" style="text-decoration:none"><b>B</b></A> - -<A HREF="readline.html#fn_C" style="text-decoration:none"><b>C</b></A> - -<A HREF="readline.html#fn_D" style="text-decoration:none"><b>D</b></A> - -<A HREF="readline.html#fn_E" style="text-decoration:none"><b>E</b></A> - -<A HREF="readline.html#fn_F" style="text-decoration:none"><b>F</b></A> - -<A HREF="readline.html#fn_H" style="text-decoration:none"><b>H</b></A> - -<A HREF="readline.html#fn_I" style="text-decoration:none"><b>I</b></A> - -<A HREF="readline.html#fn_K" style="text-decoration:none"><b>K</b></A> - -<A HREF="readline.html#fn_M" style="text-decoration:none"><b>M</b></A> - -<A HREF="readline.html#fn_N" style="text-decoration:none"><b>N</b></A> - -<A HREF="readline.html#fn_O" style="text-decoration:none"><b>O</b></A> - -<A HREF="readline.html#fn_P" style="text-decoration:none"><b>P</b></A> - -<A HREF="readline.html#fn_Q" style="text-decoration:none"><b>Q</b></A> - -<A HREF="readline.html#fn_R" style="text-decoration:none"><b>R</b></A> - -<A HREF="readline.html#fn_S" style="text-decoration:none"><b>S</b></A> - -<A HREF="readline.html#fn_T" style="text-decoration:none"><b>T</b></A> - -<A HREF="readline.html#fn_U" style="text-decoration:none"><b>U</b></A> - -<A HREF="readline.html#fn_V" style="text-decoration:none"><b>V</b></A> - -<A HREF="readline.html#fn_Y" style="text-decoration:none"><b>Y</b></A> - -</td></tr></table><br><P> - -<HR SIZE="6"> -<A NAME="SEC_Contents"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Table of Contents</H1> -<UL> -<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A> -<BR> -<UL> -<A NAME="TOC2" HREF="readline.html#SEC2">1.1 Introduction to Line Editing</A> -<BR> -<A NAME="TOC3" HREF="readline.html#SEC3">1.2 Readline Interaction</A> -<BR> -<UL> -<A NAME="TOC4" HREF="readline.html#SEC4">1.2.1 Readline Bare Essentials</A> -<BR> -<A NAME="TOC5" HREF="readline.html#SEC5">1.2.2 Readline Movement Commands</A> -<BR> -<A NAME="TOC6" HREF="readline.html#SEC6">1.2.3 Readline Killing Commands</A> -<BR> -<A NAME="TOC7" HREF="readline.html#SEC7">1.2.4 Readline Arguments</A> -<BR> -<A NAME="TOC8" HREF="readline.html#SEC8">1.2.5 Searching for Commands in the History</A> -<BR> -</UL> -<A NAME="TOC9" HREF="readline.html#SEC9">1.3 Readline Init File</A> -<BR> -<UL> -<A NAME="TOC10" HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax</A> -<BR> -<A NAME="TOC11" HREF="readline.html#SEC11">1.3.2 Conditional Init Constructs</A> -<BR> -<A NAME="TOC12" HREF="readline.html#SEC12">1.3.3 Sample Init File</A> -<BR> -</UL> -<A NAME="TOC13" HREF="readline.html#SEC13">1.4 Bindable Readline Commands</A> -<BR> -<UL> -<A NAME="TOC14" HREF="readline.html#SEC14">1.4.1 Commands For Moving</A> -<BR> -<A NAME="TOC15" HREF="readline.html#SEC15">1.4.2 Commands For Manipulating The History</A> -<BR> -<A NAME="TOC16" HREF="readline.html#SEC16">1.4.3 Commands For Changing Text</A> -<BR> -<A NAME="TOC17" HREF="readline.html#SEC17">1.4.4 Killing And Yanking</A> -<BR> -<A NAME="TOC18" HREF="readline.html#SEC18">1.4.5 Specifying Numeric Arguments</A> -<BR> -<A NAME="TOC19" HREF="readline.html#SEC19">1.4.6 Letting Readline Type For You</A> -<BR> -<A NAME="TOC20" HREF="readline.html#SEC20">1.4.7 Keyboard Macros</A> -<BR> -<A NAME="TOC21" HREF="readline.html#SEC21">1.4.8 Some Miscellaneous Commands</A> -<BR> -</UL> -<A NAME="TOC22" HREF="readline.html#SEC22">1.5 Readline vi Mode</A> -<BR> -</UL> -<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A> -<BR> -<UL> -<A NAME="TOC24" HREF="readline.html#SEC24">2.1 Basic Behavior</A> -<BR> -<A NAME="TOC25" HREF="readline.html#SEC25">2.2 Custom Functions</A> -<BR> -<UL> -<A NAME="TOC26" HREF="readline.html#SEC26">2.2.1 Readline Typedefs</A> -<BR> -<A NAME="TOC27" HREF="readline.html#SEC27">2.2.2 Writing a New Function</A> -<BR> -</UL> -<A NAME="TOC28" HREF="readline.html#SEC28">2.3 Readline Variables</A> -<BR> -<A NAME="TOC29" HREF="readline.html#SEC29">2.4 Readline Convenience Functions</A> -<BR> -<UL> -<A NAME="TOC30" HREF="readline.html#SEC30">2.4.1 Naming a Function</A> -<BR> -<A NAME="TOC31" HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A> -<BR> -<A NAME="TOC32" HREF="readline.html#SEC32">2.4.3 Binding Keys</A> -<BR> -<A NAME="TOC33" HREF="readline.html#SEC33">2.4.4 Associating Function Names and Bindings</A> -<BR> -<A NAME="TOC34" HREF="readline.html#SEC34">2.4.5 Allowing Undoing</A> -<BR> -<A NAME="TOC35" HREF="readline.html#SEC35">2.4.6 Redisplay</A> -<BR> -<A NAME="TOC36" HREF="readline.html#SEC36">2.4.7 Modifying Text</A> -<BR> -<A NAME="TOC37" HREF="readline.html#SEC37">2.4.8 Character Input</A> -<BR> -<A NAME="TOC38" HREF="readline.html#SEC38">2.4.9 Terminal Management</A> -<BR> -<A NAME="TOC39" HREF="readline.html#SEC39">2.4.10 Utility Functions</A> -<BR> -<A NAME="TOC40" HREF="readline.html#SEC40">2.4.11 Miscellaneous Functions</A> -<BR> -<A NAME="TOC41" HREF="readline.html#SEC41">2.4.12 Alternate Interface</A> -<BR> -<A NAME="TOC42" HREF="readline.html#SEC42">2.4.13 A Readline Example</A> -<BR> -</UL> -<A NAME="TOC43" HREF="readline.html#SEC43">2.5 Readline Signal Handling</A> -<BR> -<A NAME="TOC44" HREF="readline.html#SEC44">2.6 Custom Completers</A> -<BR> -<UL> -<A NAME="TOC45" HREF="readline.html#SEC45">2.6.1 How Completing Works</A> -<BR> -<A NAME="TOC46" HREF="readline.html#SEC46">2.6.2 Completion Functions</A> -<BR> -<A NAME="TOC47" HREF="readline.html#SEC47">2.6.3 Completion Variables</A> -<BR> -<A NAME="TOC48" HREF="readline.html#SEC48">2.6.4 A Short Completion Example</A> -<BR> -</UL> -</UL> -<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A> -<BR> -<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A> -<BR> -</UL> -<HR SIZE=1> -<A NAME="SEC_OVERVIEW"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Short Table of Contents</H1> -<BLOCKQUOTE> -<A NAME="TOC1" HREF="readline.html#SEC1">1. Command Line Editing</A> -<BR> -<A NAME="TOC23" HREF="readline.html#SEC23">2. Programming with GNU Readline</A> -<BR> -<A NAME="TOC49" HREF="readline.html#SEC49">Concept Index</A> -<BR> -<A NAME="TOC50" HREF="readline.html#SEC50">Function and Variable Index</A> -<BR> - -</BLOCKQUOTE> -<HR SIZE=1> -<A NAME="SEC_About"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC49">Index</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> -<P></P> -The buttons in the navigation panels have the following meaning: -<P></P> -<table border = "1"> -<TR> -<TH> Button </TH> -<TH> Name </TH> -<TH> Go to </TH> -<TH> From 1.2.3 go to</TH> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ < ] </TD> -<TD ALIGN="CENTER"> -Back -</TD> -<TD> -previous section in reading order -</TD> -<TD> -1.2.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ > ] </TD> -<TD ALIGN="CENTER"> -Forward -</TD> -<TD> -next section in reading order -</TD> -<TD> -1.2.4 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ << ] </TD> -<TD ALIGN="CENTER"> -FastBack -</TD> -<TD> -previous or up-and-previous section -</TD> -<TD> -1.1 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ Up ] </TD> -<TD ALIGN="CENTER"> -Up -</TD> -<TD> -up section -</TD> -<TD> -1.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ >> ] </TD> -<TD ALIGN="CENTER"> -FastForward -</TD> -<TD> -next or up-and-next section -</TD> -<TD> -1.3 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Top] </TD> -<TD ALIGN="CENTER"> -Top -</TD> -<TD> -cover (top) of document -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Contents] </TD> -<TD ALIGN="CENTER"> -Contents -</TD> -<TD> -table of contents -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Index] </TD> -<TD ALIGN="CENTER"> -Index -</TD> -<TD> -concept index -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ ? ] </TD> -<TD ALIGN="CENTER"> -About -</TD> -<TD> -this page -</TD> -<TD> - -</TD> -</TR> -</TABLE> -<P></P> -where the <STRONG> Example </STRONG> assumes that the current position -is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of -the following structure: -<UL> -<LI> 1. Section One </LI> -<UL> -<LI>1.1 Subsection One-One</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.2 Subsection One-Two</LI> -<UL> -<LI>1.2.1 Subsubsection One-Two-One -</LI><LI>1.2.2 Subsubsection One-Two-Two -</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> -<== Current Position </STRONG> -</LI><LI>1.2.4 Subsubsection One-Two-Four -</LI></UL> -<LI>1.3 Subsection One-Three</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.4 Subsection One-Four</LI> -</UL> -</UL> - -<HR SIZE=1> -<BR> -<FONT SIZE="-1"> -This document was generated -by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> - -</BODY> -</HTML> diff --git a/readline-4.3.orig/doc/readline.info b/readline-4.3.orig/doc/readline.info deleted file mode 100644 index 57dbdfa..0000000 --- a/readline-4.3.orig/doc/readline.info +++ /dev/null @@ -1,3638 +0,0 @@ -This is readline.info, produced by makeinfo version 4.1 from -/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-2002 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 `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 (*note 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. - - -File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <RET>. You do not have to be at the end of -the line to press <RET>; the entire line is accepted regardless of the -location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may 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. - -`C-b' - Move back one character. - -`C-f' - Move forward one character. - -<DEL> or <Backspace> - Delete the character to the left of the cursor. - -`C-d' - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -`C-_' or `C-x C-u' - Undo the last editing command. You can undo all the way back to an - empty line. - -(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.) - - -File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to `C-b', `C-f', `C-d', and -<DEL>. Here are some commands for moving more rapidly about the line. - -`C-a' - Move to the start of the line. - -`C-e' - Move to the end of the line. - -`M-f' - Move forward a word, where a word is composed of letters and - digits. - -`M-b' - Move backward a word. - -`C-l' - Clear the screen, reprinting the current line at the top. - - Notice how `C-f' moves forward a character, while `M-f' moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`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. - -`C-k' - Kill the text from the current cursor position to the end of the - line. - -`M-d' - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by `M-f'. - -`M-<DEL>' - Kill from the cursor the start of the current word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by `M-b'. - -`C-w' - Kill from the cursor to the previous whitespace. This is - different than `M-<DEL>' because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -`C-y' - Yank the most recently killed text back into the buffer at the - cursor. - -`M-y' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `C-y' or `M-y'. - - -File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' 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', which -will delete the next ten characters on the input line. - - -File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -"incremental" and "non-incremental". - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. 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. A movement command will terminate the search, make the -last line found the current line, and begin editing. - - Readline remembers the last incremental search string. If two -`C-r's are typed without any intervening characters defining a new -search string, any remembered search string is used. - - 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. - - -File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible 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. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. The syntax is simple: - - set VARIABLE VALUE - - Here, for example, is how to change from the default Emacs-like - key binding to use `vi' line editing commands: - - set editing-mode vi - - Variable names and values, where appropriate, are recognized - without regard to case. - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. This variable must be set to an integer value - greater than or equal to 0. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an <ESC> character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which 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' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - If set to `on', the history code attempts to place point at - the same location on each history line retrived with - `previous-history' or `next-history'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not clear the eighth bit in the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::). If this variable has not been - given a value, the characters <ESC> and `C-J' will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `mark-symlinked-directories' - If set to `on', completed names which are symbolic links to - directories have a slash appended (subject to the value of - `mark-directories'). The default is `off'. - - `match-hidden-files' - This variable, when set to `on', causes Readline to match - files whose names begin with a `.' (hidden files) when - performing filename completion, unless the leading `.' is - supplied by the user in the filename to be completed. This - variable is `on' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `page-completions' - If set to `on', Readline uses an internal `more'-like pager - to display a screenful of possible completions at a time. - This variable is `on' by default. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place on a line in - the init file the name of the key you wish to bind the command to, - a colon, and then the name of the command. The name of the key - can be expressed in different ways, depending on what you find most - comfortable. - - In addition to command names, readline allows keys to be bound to - a string that is inserted when the key is pressed (a MACRO). - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, `C-u' is bound to the function - `universal-argument', `M-DEL' is bound to the function - `backward-kill-word', 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). - - A number of symbolic character names are recognized while - processing this key binding syntax: DEL, ESC, ESCAPE, LFD, - NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, `C-u' is again bound to the function - `universal-argument' (just as it was in the first example), - `C-x C-r' is bound to the function `re-read-init-file', and - `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function - Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the eight-bit character whose value is the octal value NNN - (one to three digits) - - `\xHH' - the eight-bit character whose value is the hexadecimal value - HH (one or two hex digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against 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' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for a particular value. This could be used to bind key - sequences to functions useful for a specific program. For - instance, the following command adds a key sequence that - quotes the current or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. For example, the following - directive reads from `/etc/inputrc': - $include /etc/inputrc - - -File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an INPUTRC file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the GNU Readline library. Existing - # programs include FTP, Bash, and GDB. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # 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 - - -File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. 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". - - -File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline or Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, it may be added to the history list for future recall - with `add_history()'. If this line is a modified history line, - the history line is restored to its original state. - -`previous-history (C-p)' - Move `back' through the history list, fetching the previous - command. - -`next-history (C-n)' - Move `forward' through the history list, fetching the next command. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line) at point. With an argument N, - insert the Nth word from the previous command (the words in the - previous command begin with word 0). A negative argument inserts - the Nth word from the end of the previous command. - -`yank-last-arg (M-. or M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character at point. If point is at the beginning of - the line, there are no characters in the line, and the last - character typed was not bound to `delete-char', then return EOF. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q or C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like `C-q', for example. - -`tab-insert (M-<TAB>)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. If the insertion point is at the end of - the line, this transposes the last two words on the line. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - -`overwrite-mode ()' - Toggle overwrite mode. With an explicit positive numeric argument, - switches to overwrite mode. With an explicit non-positive numeric - argument, switches to insert mode. This command affects only - `emacs' mode; `vi' mode does overwrite differently. Each call to - `readline()' starts in insert mode. - - In overwrite mode, characters bound to `self-insert' replace the - text at point rather than pushing the text to the right. - Characters bound to `backward-delete-char' replace the character - before point with a space. - - By default, this command is unbound. - - -File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter where point is. - By default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-<DEL>)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at point. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `yank' or `yank-pop'. - - -File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. `M--' starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (<TAB>)' - Attempt to perform completion on the text before point. The - actual completion performed is application-specific. The default - is filename completion. - -`possible-completions (M-?)' - List the possible completions of the text before point. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `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 (subject to the setting of - `bell-style') 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 ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta (<ESC>)' - Metafy the next character typed. This is for keyboards without a - meta key. Typing `<ESC> f' is equivalent to typing `M-f'. - -`undo (C-_ or C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the point. If a numeric argument is supplied, the - mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - Without a numeric argument, the value of the `comment-begin' - variable is inserted at the beginning of the current line. If a - numeric argument is supplied, this command acts as a toggle: if - the characters at the beginning of the line do not match the value - of `comment-begin', the value is inserted, otherwise the - characters in `comment-begin' are deleted from the beginning of - the line. In either case, the line is accepted as if a newline - had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they output. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`emacs-editing-mode (C-e)' - When in `vi' command mode, this causes a switch to `emacs' editing - mode. - -`vi-editing-mode (M-C-j)' - When in `emacs' editing mode, this causes a switch to `vi' editing - mode. - - -File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command `M-C-j' (bound to emacs-editing-mode when in -`vi' mode and to vi-editing-mode in `emacs' mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - This document describes the GNU Readline Library, a utility for -aiding in the consitency of user interface across discrete programs -that need to provide a command line interface. - - Copyright (C) 1988-2002 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: readline.info, Node: Programming with GNU Readline, Next: Concept Index, Prev: Command Line Editing, Up: Top - -Programming with GNU Readline -***************************** - - This chapter describes the interface between the GNU Readline -Library and other programs. If you are a programmer, and you wish to -include the features found in GNU Readline such as completion, line -editing, and interactive history manipulation in your own programs, -this section is for you. - -* Menu: - -* Basic Behavior:: Using the default behavior of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Readline Variables:: Variables accessible to custom - functions. -* Readline Convenience Functions:: Functions which Readline supplies to - aid in writing your own custom - functions. -* Readline Signal Handling:: How Readline behaves when it receives signals. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. - - -File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline - -Basic Behavior -============== - - Many programs provide a command line interface, such as `mail', -`ftp', and `sh'. For such programs, the default behaviour of Readline -is sufficient. This section describes how to use Readline in the -simplest way possible, perhaps to replace calls in your code to -`gets()' or `fgets()'. - - The function `readline()' prints a prompt PROMPT and then reads and -returns a single line of text from the user. If PROMPT is `NULL' or -the empty string, no prompt is displayed. The line `readline' returns -is allocated with `malloc()'; the caller should `free()' the line when -it has finished with it. The declaration for `readline' in ANSI C is - - `char *readline (const 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, rl_command_func_t *FUNCTION);' - - `rl_bind_key()' takes two arguments: KEY is the character that you -want to bind, and FUNCTION is the address of the function to call when -KEY is pressed. Binding <TAB> to `rl_insert()' makes <TAB> insert -itself. `rl_bind_key()' returns non-zero if KEY is not a valid ASCII -character code (between 0 and 255). - - Thus, to disable the default <TAB> behavior, the following suffices: - `rl_bind_key ('\t', rl_insert);' - - This code should be executed once at the start of your program; you -might write a function called `initialize_readline()' which performs -this and other desired initializations, such as installing custom -completers (*note Custom Completers::). - - -File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline - -Custom Functions -================ - - Readline provides many functions for manipulating the text of the -line, but it isn't possible to anticipate the needs of all programs. -This section describes the various functions and variables defined -within the Readline library which allow a user program to add -customized functionality to Readline. - - 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'. - - `readline.h' defines a C preprocessor variable that should be -treated as an integer, `RL_READLINE_VERSION', which may be used to -conditionally compile application code depending on the installed -Readline version. The value is a hexadecimal encoding of the major and -minor version numbers of the library, of the form 0xMMMM. MM is the -two-digit major version number; MM is the two-digit minor version -number. For Readline 4.2, for example, the value of -`RL_READLINE_VERSION' would be `0x0402'. - -* Menu: - -* Readline Typedefs:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. - - -File: readline.info, Node: Readline Typedefs, Next: Function Writing, Up: Custom Functions - -Readline Typedefs ------------------ - - For readabilty, we declare a number of new object types, all pointers -to functions. - - The reason for declaring these new types is to make it easier to -write code describing pointers to C functions with appropriately -prototyped arguments and return values. - - For instance, say we want to declare a variable FUNC as a pointer to -a function which takes two `int' arguments and returns an `int' (this -is the type of all of the Readline bindable functions). Instead of the -classic C declaration - - `int (*func)();' - -or the ANSI-C style declaration - - `int (*func)(int, int);' - -we may write - - `rl_command_func_t *func;' - - The full list of function pointer types available is - -`typedef int rl_command_func_t (int, int);' - -`typedef char *rl_compentry_func_t (const char *, int);' - -`typedef char **rl_completion_func_t (const char *, int, int);' - -`typedef char *rl_quote_func_t (char *, int, char *);' - -`typedef char *rl_dequote_func_t (char *, int);' - -`typedef int rl_compignore_func_t (char **);' - -`typedef void rl_compdisp_func_t (char **, int, int);' - -`typedef int rl_hook_func_t (void);' - -`typedef int rl_getc_func_t (FILE *);' - -`typedef int rl_linebuf_func_t (char *, int);' - -`typedef int rl_intfunc_t (int);' - -`#define rl_ivoidfunc_t rl_hook_func_t' - -`typedef int rl_icpfunc_t (char *);' - -`typedef int rl_icppfunc_t (char **);' - -`typedef void rl_voidfunc_t (void);' - -`typedef void rl_vintfunc_t (int);' - -`typedef void rl_vcpfunc_t (char *);' - -`typedef void rl_vcppfunc_t (char **);' - -File: readline.info, Node: Function Writing, Prev: Readline Typedefs, Up: Custom Functions - -Writing a New Function ----------------------- - - In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - - The calling sequence for a command `foo' looks like - - `int 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. - - A command function should return 0 if its action completes -successfully, and a non-zero value if some error occurs. - - -File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline - -Readline Variables -================== - - These variables are available to function writers. - - - Variable: char * rl_line_buffer - This is the line gathered so far. You are welcome to modify the - contents of the line, but see *Note Allowing Undoing::. The - function `rl_extend_line_buffer' is available to increase the - memory allocated to `rl_line_buffer'. - - - Variable: int rl_point - The offset of the current cursor position in `rl_line_buffer' (the - _point_). - - - Variable: int rl_end - The number of characters present in `rl_line_buffer'. When - `rl_point' is at the end of the line, `rl_point' and `rl_end' are - equal. - - - Variable: int rl_mark - The MARK (saved position) in the current line. If set, the mark - and point define a _region_. - - - Variable: int rl_done - Setting this to a non-zero value causes Readline to return the - current line immediately. - - - Variable: int rl_num_chars_to_read - Setting this to a positive value before calling `readline()' causes - Readline to return after accepting that many characters, rather - than reading up to a character bound to `accept-line'. - - - Variable: int rl_pending_input - Setting this to a value makes it the next keystroke read. This is - a way to stuff a single character into the input stream. - - - Variable: int rl_dispatching - Set to a non-zero value if a function is being called from a key - binding; zero otherwise. Application functions can test this to - discover whether they were called directly or by Readline's - dispatching mechanism. - - - Variable: int rl_erase_empty_line - Setting this to a non-zero value causes Readline to completely - erase the current line, including any prompt, any time a newline - is typed as the only character on an otherwise-empty line. The - cursor is moved to the beginning of the newly-blank line. - - - Variable: char * rl_prompt - The prompt Readline uses. This is set from the argument to - `readline()', and should not be assigned to directly. The - `rl_set_prompt()' function (*note Redisplay::) may be used to - modify the prompt string after calling `readline()'. - - - Variable: int rl_already_prompted - If an application wishes to display the prompt itself, rather than - have Readline do it the first time `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. - - - Variable: const char * rl_library_version - The version number of this revision of the library. - - - Variable: int rl_readline_version - An integer encoding the current version of the library. The - encoding is of the form 0xMMMM, where MM is the two-digit major - version number, and MM is the two-digit minor version number. For - example, for Readline-4.2, `rl_readline_version' would have the - value 0x0402. - - - Variable: int rl_gnu_readline_p - Always set to 1, denoting that this is GNU readline rather than - some emulation. - - - Variable: const char * rl_terminal_name - The terminal type, used for initialization. If not set by the - application, Readline sets this to the value of the `TERM' - environment variable the first time it is called. - - - Variable: const char * rl_readline_name - This variable is set to a unique name by each application using - Readline. The value allows conditional parsing of the inputrc file - (*note Conditional Init Constructs::). - - - Variable: FILE * rl_instream - The stdio stream from which Readline reads input. If `NULL', - Readline defaults to STDIN. - - - Variable: FILE * rl_outstream - The stdio stream to which Readline performs output. If `NULL', - Readline defaults to STDOUT. - - - Variable: rl_command_func_t * rl_last_func - The address of the last command function Readline executed. May - be used to test whether or not a function is being executed twice - in succession, for example. - - - Variable: rl_hook_func_t * rl_startup_hook - If non-zero, this is the address of a function to call just before - `readline' prints the first prompt. - - - Variable: rl_hook_func_t * rl_pre_input_hook - If non-zero, this is the address of a function to call after the - first prompt has been printed and just before `readline' starts - reading input characters. - - - Variable: rl_hook_func_t * rl_event_hook - If non-zero, this is the address of a function to call periodically - when Readline is waiting for terminal input. By default, this - will be called at most ten times a second if there is no keyboard - input. - - - Variable: rl_getc_func_t * rl_getc_function - If non-zero, Readline will call indirectly through this pointer to - get a character from the input stream. By default, it is set to - `rl_getc', the default Readline character input function (*note - Character Input::). - - - Variable: rl_voidfunc_t * rl_redisplay_function - If non-zero, Readline will call indirectly through this pointer to - update the display with the current contents of the editing buffer. - By default, it is set to `rl_redisplay', the default Readline - redisplay function (*note Redisplay::). - - - Variable: rl_vintfunc_t * rl_prep_term_function - If non-zero, Readline will call indirectly through this pointer to - initialize the terminal. The function takes a single argument, an - `int' flag that says whether or not to use eight-bit characters. - By default, this is set to `rl_prep_terminal' (*note Terminal - Management::). - - - Variable: rl_voidfunc_t * rl_deprep_term_function - If non-zero, Readline will call indirectly through this pointer to - reset the terminal. This function should undo the effects of - `rl_prep_term_function'. By default, this is set to - `rl_deprep_terminal' (*note Terminal Management::). - - - Variable: Keymap rl_executing_keymap - This variable is set to the keymap (*note Keymaps::) in which the - currently executing readline function was found. - - - Variable: Keymap rl_binding_keymap - This variable is set to the keymap (*note Keymaps::) in which the - last key binding occurred. - - - Variable: char * rl_executing_macro - This variable is set to the text of any currently-executing macro. - - - Variable: int rl_readline_state - A variable with bit values that encapsulate the current Readline - state. A bit is set with the `RL_SETSTATE' macro, and unset with - the `RL_UNSETSTATE' macro. Use the `RL_ISSTATE' macro to test - whether a particular state bit is set. Current state bits include: - - `RL_STATE_NONE' - Readline has not yet been called, nor has it begun to - intialize. - - `RL_STATE_INITIALIZING' - Readline is initializing its internal data structures. - - `RL_STATE_INITIALIZED' - Readline has completed its initialization. - - `RL_STATE_TERMPREPPED' - Readline has modified the terminal modes to do its own input - and redisplay. - - `RL_STATE_READCMD' - Readline is reading a command from the keyboard. - - `RL_STATE_METANEXT' - Readline is reading more input after reading the meta-prefix - character. - - `RL_STATE_DISPATCHING' - Readline is dispatching to a command. - - `RL_STATE_MOREINPUT' - Readline is reading more input while executing an editing - command. - - `RL_STATE_ISEARCH' - Readline is performing an incremental history search. - - `RL_STATE_NSEARCH' - Readline is performing a non-incremental history search. - - `RL_STATE_SEARCH' - Readline is searching backward or forward through the history - for a string. - - `RL_STATE_NUMERICARG' - Readline is reading a numeric argument. - - `RL_STATE_MACROINPUT' - Readline is currently getting its input from a - previously-defined keyboard macro. - - `RL_STATE_MACRODEF' - Readline is currently reading characters defining a keyboard - macro. - - `RL_STATE_OVERWRITE' - Readline is in overwrite mode. - - `RL_STATE_COMPLETING' - Readline is performing word completion. - - `RL_STATE_SIGHANDLER' - Readline is currently executing the readline signal handler. - - `RL_STATE_UNDOING' - Readline is performing an undo. - - `RL_STATE_DONE' - Readline has read a key sequence bound to `accept-line' and - is about to return the line to the caller. - - - - Variable: int rl_explicit_arg - Set to a non-zero value if an explicit numeric argument was - specified by the user. Only valid in a bindable command function. - - - Variable: int rl_numeric_arg - Set to the value of any numeric argument explicitly specified by - the user before executing the current Readline function. Only - valid in a bindable command function. - - - Variable: int rl_editing_mode - Set to a value denoting Readline's current editing mode. A value - of 1 means Readline is currently in emacs mode; 0 means that vi - mode is active. - - -File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline - -Readline Convenience Functions -============================== - -* Menu: - -* Function Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Associating Function Names and Bindings:: Translate function names to - key sequences. -* Allowing Undoing:: How to make your functions undoable. -* Redisplay:: Functions to control line display. -* Modifying Text:: Functions to modify `rl_line_buffer'. -* Character Input:: Functions to read keyboard input. -* Terminal Management:: Functions to manage terminal settings. -* Utility Functions:: Generally useful functions and hooks. -* Miscellaneous Functions:: Functions that don't fall into any category. -* Alternate Interface:: Using Readline in a `callback' fashion. -* A Readline Example:: An example Readline function. - - -File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions - -Naming a Function ------------------ - - The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - - Meta-Rubout: backward-kill-word - - This binds the keystroke <Meta-Rubout> to the function -_descriptively_ named `backward-kill-word'. You, as the programmer, -should bind the functions you write to descriptive names as well. -Readline provides a function for doing that: - - - Function: int rl_add_defun (const char *name, rl_command_func_t - *function, int key) - Add NAME to the list of named functions. Make FUNCTION be the - function that gets called. If KEY is not -1, then bind it to - FUNCTION using `rl_bind_key()'. - - Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other than adding a -function to Readline, you may need to use the underlying functions -described below. - - -File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions - -Selecting a Keymap ------------------- - - Key bindings take place on a "keymap". The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - - - Function: Keymap rl_make_bare_keymap (void) - Returns a new, empty keymap. The space for the keymap is - allocated with `malloc()'; the caller should free it by calling - `rl_discard_keymap()' when done. - - - Function: Keymap rl_copy_keymap (Keymap map) - Return a new keymap which is a copy of MAP. - - - Function: Keymap rl_make_keymap (void) - Return a new keymap with the printing characters bound to - rl_insert, the lowercase Meta characters bound to run their - equivalents, and the Meta digits bound to produce numeric - arguments. - - - Function: void rl_discard_keymap (Keymap keymap) - Free the storage associated with KEYMAP. - - Readline has several internal keymaps. These functions allow you to -change which keymap is active. - - - Function: Keymap rl_get_keymap (void) - Returns the currently active keymap. - - - Function: void rl_set_keymap (Keymap keymap) - Makes KEYMAP the currently active keymap. - - - Function: Keymap rl_get_keymap_by_name (const char *name) - Return the keymap matching NAME. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::). - - - Function: char * rl_get_keymap_name (Keymap keymap) - Return the name matching KEYMAP. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::). - - -File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions - -Binding Keys ------------- - - Key sequences are associate 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 -(*note Readline Variables::). - - These functions manage key bindings. - - - Function: int rl_bind_key (int key, rl_command_func_t *function) - Binds KEY to FUNCTION in the currently active keymap. Returns - non-zero in the case of an invalid KEY. - - - Function: int rl_bind_key_in_map (int key, rl_command_func_t - *function, Keymap map) - Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an - invalid KEY. - - - Function: int rl_unbind_key (int key) - Bind KEY to the null function in the currently active keymap. - Returns non-zero in case of error. - - - Function: int rl_unbind_key_in_map (int key, Keymap map) - Bind KEY to the null function in MAP. Returns non-zero in case of - error. - - - Function: int rl_unbind_function_in_map (rl_command_func_t - *function, Keymap map) - Unbind all keys that execute FUNCTION in MAP. - - - Function: int rl_unbind_command_in_map (const char *command, Keymap - map) - Unbind all keys that are bound to COMMAND in MAP. - - - Function: int rl_set_key (const char *keyseq, rl_command_func_t - *function, Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - function FUNCTION. This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_generic_bind (int type, const char *keyseq, char - *data, Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - arbitrary pointer DATA. TYPE says what kind of data is pointed to - by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or - a keymap (`ISKMAP'). This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_parse_and_bind (char *line) - Parse LINE as if it had been read from the `inputrc' file and - perform any key bindings and variable assignments found (*note - Readline Init File::). - - - Function: int rl_read_init_file (const char *filename) - Read keybindings and variable assignments from FILENAME (*note - Readline Init File::). - - -File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions - -Associating Function Names and Bindings ---------------------------------------- - - These functions allow you to find out what keys invoke named -functions and the functions invoked by a particular key sequence. You -may also associate a new function name with an arbitrary function. - - - Function: rl_command_func_t * rl_named_function (const char *name) - Return the function with name NAME. - - - Function: rl_command_func_t * rl_function_of_keyseq (const char - *keyseq, Keymap map, int *type) - Return the function invoked by KEYSEQ in keymap MAP. If MAP is - `NULL', the current keymap is used. If TYPE is not `NULL', the - type of the object is returned in the `int' variable it points to - (one of `ISFUNC', `ISKMAP', or `ISMACR'). - - - Function: char ** rl_invoking_keyseqs (rl_command_func_t *function) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the current keymap. - - - Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t - *function, Keymap map) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the keymap MAP. - - - Function: void rl_function_dumper (int readable) - Print the readline function names and the key sequences currently - bound to them to `rl_outstream'. If READABLE is non-zero, the - list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: void rl_list_funmap_names (void) - Print the names of all bindable Readline functions to - `rl_outstream'. - - - Function: const char ** rl_funmap_names (void) - Return a NULL terminated array of known function names. The array - is sorted. The array itself is allocated, but not the strings - inside. You should `free()' the array when you are done, but not - the pointers. - - - Function: int rl_add_funmap_entry (const char *name, - rl_command_func_t *function) - Add NAME to the list of bindable Readline command names, and make - FUNCTION the function to be called when NAME is invoked. - - -File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions - -Allowing Undoing ----------------- - - Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try something if -you know you can undo it. - - 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 -what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are tags -added by `rl_begin_undo_group()' and `rl_end_undo_group()'. - - - Function: int rl_begin_undo_group (void) - Begins saving undo information in a group construct. The undo - information usually comes from calls to `rl_insert_text()' and - `rl_delete_text()', but could be the result of calls to - `rl_add_undo()'. - - - Function: int rl_end_undo_group (void) - Closes the current undo group started with `rl_begin_undo_group - ()'. There should be one call to `rl_end_undo_group()' for each - call to `rl_begin_undo_group()'. - - - Function: void rl_add_undo (enum undo_code what, int start, int end, - char *text) - Remember how to undo an event (according to WHAT). The affected - text runs from START to END, and encompasses TEXT. - - - Function: void rl_free_undo_list (void) - Free the existing undo list. - - - Function: int rl_do_undo (void) - Undo the first thing on the undo list. Returns `0' if there was - nothing to undo, non-zero if something was undone. - - Finally, if you neither insert nor delete text, but directly modify -the existing text (e.g., change its case), call `rl_modifying()' once, -just before you modify the text. You must supply the indices of the -text range that you are going to modify. - - - Function: int rl_modifying (int start, int end) - Tell Readline to save the text between START and END as a single - undo unit. It is assumed that you will subsequently modify that - text. - - -File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions - -Redisplay ---------- - - - Function: void rl_redisplay (void) - Change what's displayed on the screen to reflect the current - contents of `rl_line_buffer'. - - - Function: int rl_forced_update_display (void) - Force the line to be updated and redisplayed, whether or not - Readline thinks the screen display is correct. - - - Function: int rl_on_new_line (void) - Tell the update functions that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - Function: int rl_on_new_line_with_prompt (void) - Tell the update functions that we have moved onto a new line, with - RL_PROMPT already displayed. This could be used by applications - that want to output the prompt string themselves, but still need - Readline to know the prompt string length for redisplay. It - should be used after setting RL_ALREADY_PROMPTED. - - - Function: int rl_reset_line_state (void) - Reset the display state to a clean state and redisplay the current - line starting on a new line. - - - Function: int rl_crlf (void) - Move the cursor to the start of the next screen line. - - - Function: int rl_show_char (int c) - Display character C on `rl_outstream'. If Readline has not been - set to display meta characters directly, this will convert meta - characters to a meta-prefixed key sequence. This is intended for - use by applications which wish to do their own redisplay. - - - Function: int rl_message (const char *, ...) - The arguments are a format string as would be supplied to `printf', - possibly containing conversion specifications such as `%d', and - any additional arguments necessary to satisfy the conversion - specifications. The resulting string is displayed in the "echo - area". The echo area is also used to display numeric arguments - and search strings. - - - Function: int rl_clear_message (void) - Clear the message in the echo area. - - - Function: void rl_save_prompt (void) - Save the local Readline prompt display state in preparation for - displaying a new message in the message area with `rl_message()'. - - - Function: void rl_restore_prompt (void) - Restore the local Readline prompt display state saved by the most - recent call to `rl_save_prompt'. - - - Function: int rl_expand_prompt (char *prompt) - Expand any special character sequences in PROMPT and set up the - local Readline prompt redisplay variables. This function is - called by `readline()'. It may also be called to expand the - primary prompt if the `rl_on_new_line_with_prompt()' function or - `rl_already_prompted' variable is used. It returns the number of - visible characters on the last line of the (possibly multi-line) - prompt. - - - Function: int rl_set_prompt (const char *prompt) - Make Readline use PROMPT for subsequent redisplay. This calls - `rl_expand_prompt()' to expand the prompt and sets `rl_prompt' to - the result. - - -File: readline.info, Node: Modifying Text, Next: Character Input, Prev: Redisplay, Up: Readline Convenience Functions - -Modifying Text --------------- - - - Function: int rl_insert_text (const char *text) - Insert TEXT into the line at the current cursor position. Returns - the number of characters inserted. - - - Function: int rl_delete_text (int start, int end) - Delete the text between START and END in the current line. - Returns the number of characters deleted. - - - Function: char * rl_copy_text (int start, int end) - Return a copy of the text between START and END in the current - line. - - - Function: int rl_kill_text (int start, int end) - Copy the text between START and END in the current line to the - kill ring, appending or prepending to the last kill if the last - command was a kill command. The text is deleted. If START is - less than END, the text is appended, otherwise prepended. If the - last command was not a kill, a new kill ring slot is used. - - - Function: int rl_push_macro_input (char *macro) - Cause MACRO to be inserted into the line, as if it had been invoked - by a key bound to a macro. Not especially useful; use - `rl_insert_text()' instead. - - -File: readline.info, Node: Character Input, Next: Terminal Management, Prev: Modifying Text, Up: Readline Convenience Functions - -Character Input ---------------- - - - Function: int rl_read_key (void) - Return the next character available from Readline's current input - stream. This handles input inserted into the input stream via - RL_PENDING_INPUT (*note Readline Variables::) and - `rl_stuff_char()', macros, and characters read from the keyboard. - While waiting for input, this function will call any function - assigned to the `rl_event_hook' variable. - - - Function: int rl_getc (FILE *stream) - Return the next character available from STREAM, which is assumed - to be the keyboard. - - - Function: int rl_stuff_char (int c) - Insert C into the Readline input stream. It will be "read" before - Readline attempts to read characters from the terminal with - `rl_read_key()'. Up to 512 characters may be pushed back. - `rl_stuff_char' returns 1 if the character was successfully - inserted; 0 otherwise. - - - Function: int rl_execute_next (int c) - Make C be the next command to be executed when `rl_read_key()' is - called. This sets RL_PENDING_INPUT. - - - Function: int rl_clear_pending_input (void) - Unset RL_PENDING_INPUT, effectively negating the effect of any - previous call to `rl_execute_next()'. This works only if the - pending input has not already been read with `rl_read_key()'. - - - Function: int rl_set_keyboard_input_timeout (int u) - While waiting for keyboard input in `rl_read_key()', Readline will - wait for U microseconds for input before calling any function - assigned to `rl_event_hook'. The default waiting period is - one-tenth of a second. Returns the old timeout value. - - -File: readline.info, Node: Terminal Management, Next: Utility Functions, Prev: Character Input, Up: Readline Convenience Functions - -Terminal Management -------------------- - - - Function: void rl_prep_terminal (int meta_flag) - Modify the terminal settings for Readline's use, so `readline()' - can read a single character at a time from the keyboard. The - META_FLAG argument should be non-zero if Readline should read - eight-bit input. - - - Function: void rl_deprep_terminal (void) - Undo the effects of `rl_prep_terminal()', leaving the terminal in - the state in which it was before the most recent call to - `rl_prep_terminal()'. - - - Function: void rl_tty_set_default_bindings (Keymap kmap) - Read the operating system's terminal editing characters (as would - be displayed by `stty') to their Readline equivalents. The - bindings are performed in KMAP. - - - Function: int rl_reset_terminal (const char *terminal_name) - Reinitialize Readline's idea of the terminal settings using - TERMINAL_NAME as the terminal type (e.g., `vt100'). If - TERMINAL_NAME is `NULL', the value of the `TERM' environment - variable is used. - - -File: readline.info, Node: Utility Functions, Next: Miscellaneous Functions, Prev: Terminal Management, Up: Readline Convenience Functions - -Utility Functions ------------------ - - - Function: void rl_replace_line (const char *text, int clear_undo) - Replace the contents of `rl_line_buffer' with TEXT. The point and - mark are preserved, if possible. If CLEAR_UNDO is non-zero, the - undo list associated with the current line is cleared. - - - Function: int rl_extend_line_buffer (int len) - Ensure that `rl_line_buffer' has enough space to hold LEN - characters, possibly reallocating it if necessary. - - - Function: int rl_initialize (void) - Initialize or re-initialize Readline's internal state. It's not - strictly necessary to call this; `readline()' calls it before - reading any input. - - - Function: int rl_ding (void) - Ring the terminal bell, obeying the setting of `bell-style'. - - - Function: int rl_alphabetic (int c) - Return 1 if C is an alphabetic character. - - - Function: void rl_display_match_list (char **matches, int len, int - max) - A convenience function for displaying a list of strings in - columnar format on Readline's output stream. `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 (*note Readline Init File Syntax::). - - The following are implemented as macros, defined in `chardefs.h'. -Applications should refrain from using them. - - - Function: int _rl_uppercase_p (int c) - Return 1 if C is an uppercase alphabetic character. - - - Function: int _rl_lowercase_p (int c) - Return 1 if C is a lowercase alphabetic character. - - - Function: int _rl_digit_p (int c) - Return 1 if C is a numeric character. - - - Function: int _rl_to_upper (int c) - If C is a lowercase alphabetic character, return the corresponding - uppercase character. - - - Function: int _rl_to_lower (int c) - If C is an uppercase alphabetic character, return the corresponding - lowercase character. - - - Function: int _rl_digit_value (int c) - If C is a number, return the value it represents. - - -File: readline.info, Node: Miscellaneous Functions, Next: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions - -Miscellaneous Functions ------------------------ - - - Function: int rl_macro_bind (const char *keyseq, const char *macro, - Keymap map) - Bind the key sequence KEYSEQ to invoke the macro MACRO. The - binding is performed in MAP. When KEYSEQ is invoked, the MACRO - will be inserted into the line. This function is deprecated; use - `rl_generic_bind()' instead. - - - Function: void rl_macro_dumper (int readable) - Print the key sequences bound to macros and their values, using - the current keymap, to `rl_outstream'. If READABLE is non-zero, - the list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: int rl_variable_bind (const char *variable, const char - *value) - Make the Readline variable VARIABLE have VALUE. This behaves as - if the readline command `set VARIABLE VALUE' had been executed in - an `inputrc' file (*note Readline Init File Syntax::). - - - Function: void rl_variable_dumper (int readable) - Print the readline variable names and their current values to - `rl_outstream'. If READABLE is non-zero, the list is formatted in - such a way that it can be made part of an `inputrc' file and - re-read. - - - Function: int rl_set_paren_blink_timeout (int u) - Set the time interval (in microseconds) that Readline waits when - showing a balancing character when `blink-matching-paren' has been - enabled. - - - Function: char * rl_get_termcap (const char *cap) - Retrieve the string value of the termcap capability CAP. Readline - fetches the termcap entry for the current terminal name and uses - those capabilities to move around the screen line and perform other - terminal-specific operations, like erasing a line. Readline does - not use all of a terminal's capabilities, and this function will - return values for only those capabilities Readline uses. - - -File: readline.info, Node: Alternate Interface, Next: A Readline Example, Prev: Miscellaneous Functions, Up: Readline Convenience Functions - -Alternate Interface -------------------- - - An alternate interface is available to plain `readline()'. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to `select()' on -various file descriptors. To accomodate this need, readline can also -be invoked as a `callback' function from an event loop. There are -functions available to make this easy. - - - Function: void rl_callback_handler_install (const char *prompt, - rl_vcpfunc_t *lhandler) - Set up the terminal for readline I/O and display the initial - expanded value of PROMPT. Save the value of LHANDLER to use as a - function to call when a complete line of input has been entered. - The function takes the text of the line as an argument. - - - Function: void rl_callback_read_char (void) - Whenever an application determines that keyboard input is - available, it should call `rl_callback_read_char()', which will - read the next character from the current input source. If that - character completes the line, `rl_callback_read_char' will invoke - the LHANDLER function saved by `rl_callback_handler_install' to - process the line. Before calling the LHANDLER function, the - terminal settings are reset to the values they had before calling - `rl_callback_handler_install'. If the LHANDLER function returns, - the terminal settings are modified for Readline's use again. - `EOF' is indicated by calling LHANDLER with a `NULL' line. - - - Function: void rl_callback_handler_remove (void) - Restore the terminal to its initial state and remove the line - handler. This may be called from within a callback as well as - independently. If the LHANDLER installed by - `rl_callback_handler_install' does not exit the program, either - this function or the function referred to by the value of - `rl_deprep_term_function' should be called before the program - exits to reset the terminal settings. - - -File: readline.info, Node: A Readline Example, Prev: Alternate Interface, Up: Readline Convenience Functions - -A Readline Example ------------------- - - Here is a function which changes lowercase characters to their -uppercase equivalents, and uppercase characters to lowercase. If this -function was bound to `M-c', then typing `M-c' would change the case of -the character under point. Typing `M-1 0 M-c' would change the case of -the following 10 characters, leaving the cursor on the last character -changed. - - /* Invert the case of the COUNT following characters. */ - int - invert_case_line (count, key) - int count, key; - { - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, - so it will save the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (_rl_uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); - else if (_rl_lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); - } - - -File: readline.info, Node: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline - -Readline Signal Handling -======================== - - 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 such a signal is -received in order 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()' below). - - 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 information, 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. - - - Variable: int rl_catch_signals - If this variable is non-zero, Readline will install signal - handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', `SIGTSTP', - `SIGTTIN', and `SIGTTOU'. - - The default value of `rl_catch_signals' is 1. - - - Variable: int rl_catch_sigwinch - If this variable is non-zero, Readline will install a signal - handler for `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. - - - Function: void rl_cleanup_after_signal (void) - This function will reset the state of the terminal to what it was - before `readline()' was called, and remove the Readline signal - handlers for all signals, depending on the values of - `rl_catch_signals' and `rl_catch_sigwinch'. - - - Function: void rl_free_line_state (void) - This will free any partial state associated with the current input - line (undo information, any partial history entry, any - partially-entered keyboard macro, and any partially-entered - numeric argument). This should be called before - `rl_cleanup_after_signal()'. The Readline signal handler for - `SIGINT' calls this to abort the current input line. - - - Function: void rl_reset_after_signal (void) - This will reinitialize the terminal and reinstall any Readline - signal handlers, depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - If an application does not wish Readline to catch `SIGWINCH', it may -call `rl_resize_terminal()' or `rl_set_screen_size()' to force Readline -to update its idea of the terminal size when a `SIGWINCH' is received. - - - Function: void rl_resize_terminal (void) - Update Readline's internal screen size by reading values from the - kernel. - - - Function: void rl_set_screen_size (int rows, int cols) - Set Readline's idea of the terminal size to ROWS rows and COLS - columns. - - If an application does not want to install a `SIGWINCH' handler, but -is still interested in the screen dimensions, Readline's idea of the -screen size may be queried. - - - Function: void rl_get_screen_size (int *rows, int *cols) - Return Readline's idea of the terminal's size in the variables - pointed to by the arguments. - - The following functions install and remove Readline's signal -handlers. - - - Function: int rl_set_signals (void) - Install Readline's signal handler for `SIGINT', `SIGQUIT', - `SIGTERM', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU', and - `SIGWINCH', depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - - Function: int rl_clear_signals (void) - Remove all of the Readline signal handlers installed by - `rl_set_signals()'. - - -File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, Up: Programming with GNU Readline - -Custom Completers -================= - - Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. The following -sections describe how your program and Readline cooperate to provide -this service. - -* Menu: - -* How Completing Works:: The logic used to do completion. -* Completion Functions:: Functions provided by Readline. -* Completion Variables:: Variables which control completion. -* A Short Completion Example:: An example of writing completer subroutines. - - -File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers - -How Completing Works --------------------- - - In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately expand a -partial word without knowing all of the possible words which make sense -in that context. The Readline library provides the user interface to -completion, and two of the most common completion functions: filename -and username. For completing other types of text, you must write your -own completion function. This section describes exactly what such -functions must do, and provides an example. - - There are three major functions used to perform completion: - - 1. The user-interface function `rl_complete()'. This function is - called with the same arguments as other bindable Readline - functions: COUNT and INVOKING_KEY. It isolates the word to be - completed and calls `rl_completion_matches()' to generate a list - of possible completions. It then either lists the possible - completions, inserts the possible completions, or actually - performs the completion, depending on which behavior is desired. - - 2. The internal function `rl_completion_matches()' uses an - application-supplied "generator" function to generate the list of - possible matches, and then returns the array of these matches. - The caller should place the address of its generator function in - `rl_completion_entry_function'. - - 3. The generator function is called repeatedly from - `rl_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. The generator function returns `(char *)NULL' to - inform `rl_completion_matches()' that there are no more - possibilities left. Usually the generator function computes the - list of possible completions when STATE is zero, and returns them - one at a time on subsequent calls. Each string the generator - function returns as a match must be allocated with `malloc()'; - Readline frees the strings when it has finished with them. - - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `rl_completion_matches()'). The default is to do filename - completion. - - - Variable: rl_compentry_func_t * rl_completion_entry_function - This is a pointer to the generator function for - `rl_completion_matches()'. If the value of - `rl_completion_entry_function' is `NULL' then the default filename - generator function, `rl_filename_completion_function()', is used. - - -File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers - -Completion Functions --------------------- - - Here is the complete list of callable completion functions present in -Readline. - - - Function: int rl_complete_internal (int what_to_do) - Complete the word at or before point. WHAT_TO_DO says what to do - with the completion. A value of `?' means list the possible - completions. `TAB' means do standard completion. `*' means - insert all of the possible completions. `!' means to display all - of the possible completions, if there is more than one, as well as - performing partial completion. - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `rl_completion_matches()' and `rl_completion_entry_function'). - The default is to do filename completion. This calls - `rl_complete_internal()' with an argument depending on - INVOKING_KEY. - - - Function: int rl_possible_completions (int count, int invoking_key) - List the possible completions. See description of `rl_complete - ()'. This calls `rl_complete_internal()' with an argument of `?'. - - - Function: int rl_insert_completions (int count, int invoking_key) - Insert the list of possible completions into the line, deleting the - partially-completed word. See description of `rl_complete()'. - This calls `rl_complete_internal()' with an argument of `*'. - - - Function: int rl_completion_mode (rl_command_func_t *cfunc) - Returns the apppriate value to pass to `rl_complete_internal()' - depending on whether CFUNC was called twice in succession and the - value of the `show-all-if-ambiguous' variable. - Application-specific completion functions may use this function to - present the same interface as `rl_complete()'. - - - Function: char ** rl_completion_matches (const char *text, - rl_compentry_func_t *entry_func) - Returns an array of strings which is a list of completions for - TEXT. If there are no completions, returns `NULL'. The first - entry in the returned array is the substitution for TEXT. The - remaining entries are the possible completions. The array is - terminated with a `NULL' pointer. - - ENTRY_FUNC is a function of two args, and returns a `char *'. The - first argument is TEXT. The second is a state argument; it is - zero on the first call, and non-zero on subsequent calls. - ENTRY_FUNC returns a `NULL' pointer to the caller when there are - no more matches. - - - Function: char * rl_filename_completion_function (const char *text, - int state) - A generator function for filename completion in the general case. - TEXT is a partial filename. The Bash source is a useful reference - for writing custom completion functions (the Bash completion - functions call this and other Readline functions). - - - Function: char * rl_username_completion_function (const char *text, - int state) - A completion generator for usernames. TEXT contains a partial - username preceded by a random character (usually `~'). As with all - completion generators, STATE is zero on the first call and non-zero - for subsequent calls. - - -File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers - -Completion Variables --------------------- - - - Variable: rl_compentry_func_t * rl_completion_entry_function - A pointer to the generator function for `rl_completion_matches()'. - `NULL' means to use `rl_filename_completion_function()', the - default filename completer. - - - Variable: rl_completion_func_t * rl_attempted_completion_function - A pointer to an alternative function to create matches. The - function is called with TEXT, START, and END. START and END are - indices in `rl_line_buffer' defining the boundaries of TEXT, which - is a character string. 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. If - this function sets the `rl_attempted_completion_over' variable to - a non-zero value, Readline will not perform its default completion - even if this function returns no matches. - - - Variable: rl_quote_func_t * rl_filename_quoting_function - A pointer to a function that will quote a filename in an - application-specific fashion. This is called if filename - completion is being attempted and one of the characters in - `rl_filename_quote_characters' appears in a completed filename. - The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. - The TEXT is the filename to be quoted. The MATCH_TYPE is either - `SINGLE_MATCH', if there is only one completion match, or - `MULT_MATCH'. Some functions use this to decide whether or not to - insert a closing quote character. The QUOTE_POINTER is a pointer - to any opening quote character the user typed. Some functions - choose to reset this character. - - - Variable: rl_dequote_func_t * rl_filename_dequoting_function - A pointer to a function that will remove application-specific - quoting characters from a filename before completion is attempted, - so those characters do not interfere with matching the text - against names in the filesystem. It is called with TEXT, the text - of the word to be dequoted, and QUOTE_CHAR, which is the quoting - character that delimits the filename (usually `'' or `"'). If - QUOTE_CHAR is zero, the filename was not in an embedded string. - - - Variable: rl_linebuf_func_t * rl_char_is_quoted_p - A pointer to a function to call that determines whether or not a - specific character in the line buffer is quoted, according to - whatever quoting mechanism the program calling Readline uses. The - function is called with two arguments: TEXT, the text of the line, - and INDEX, the index of the character in the line. It is used to - decide whether a character found in - `rl_completer_word_break_characters' should be used to break words - for the completer. - - - Variable: rl_compignore_func_t * rl_ignore_some_completions_function - This function, if defined, is called by the completer when real - filename completion is done, after all the matching names have - been generated. It is passed a `NULL' terminated array of matches. - The first element (`matches[0]') is the maximal substring common - to all matches. This function can re-arrange the list of matches - as required, but each element deleted from the array must be freed. - - - Variable: rl_icppfunc_t * rl_directory_completion_hook - This function, if defined, is allowed to modify the directory - portion of filenames Readline completes. It is called with the - address of a string (the current directory name) as an argument, - and may modify that string. If the string is replaced with a new - string, the old value should be freed. Any modified directory - name should have a trailing slash. The modified value will be - displayed as part of the completion, replacing the directory - portion of the pathname the user typed. It returns an integer - that should be non-zero if the function modifies its directory - argument. It could be used to expand symbolic links or shell - variables in pathnames. - - - Variable: rl_compdisp_func_t * rl_completion_display_matches_hook - If non-zero, then this is the address of a function to call when - completing a word would normally display the list of possible - matches. This function is called in lieu of Readline displaying - the list. It takes three arguments: (`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. - - - Variable: const char * rl_basic_word_break_characters - The basic list of characters that signal a break between words for - the completer routine. The default value of this variable is the - characters which break words for completion in Bash: `" - \t\n\"\\'`@$><=;|&{("'. - - - Variable: const char * rl_basic_quote_characters - A list of quote characters which can cause a word break. - - - Variable: const char * rl_completer_word_break_characters - The list of characters that signal a break between words for - `rl_complete_internal()'. The default list is the value of - `rl_basic_word_break_characters'. - - - Variable: const char * rl_completer_quote_characters - A list of characters which can be used to quote a substring of the - line. Completion occurs on the entire substring, and within the - substring `rl_completer_word_break_characters' are treated as any - other character, unless they also appear within this list. - - - Variable: const char * rl_filename_quote_characters - A list of characters that cause a filename to be quoted by the - completer when they appear in a completed filename. The default - is the null string. - - - Variable: const char * rl_special_prefixes - The list of characters that are word break characters, but should - be left in TEXT when it is passed to the completion function. - Programs can use this to help determine what kind of completing to - do. For instance, Bash sets this variable to "$@" so that it can - complete shell variables and hostnames. - - - Variable: int rl_completion_query_items - Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she is - sure she wants to see them all. The default value is 100. - - - Variable: int rl_completion_append_character - When a single completion alternative matches at the end of the - command line, this character is appended to the inserted - completion text. The default is a space character (` '). Setting - this to the null character (`\0') prevents anything being appended - automatically. This can be changed in custom completion functions - to provide the "most sensible word separator character" according - to an application-specific command line syntax specification. - - - Variable: int rl_completion_suppress_append - If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to - matches at the end of the command line, as described above. It is - set to 0 before any application-specific completion function is - called. - - - Variable: int rl_completion_mark_symlink_dirs - If non-zero, a slash will be appended to completed filenames that - are symbolic links to directory names, subject to the value of the - user-settable MARK-DIRECTORIES variable. This variable exists so - that application completion functions can override the user's - global preference (set via the MARK-SYMLINKED-DIRECTORIES Readline - variable) if appropriate. This variable is set to the user's - preference before any application completion function is called, - so unless that function modifies the value, the user's preferences - are honored. - - - Variable: int rl_ignore_completion_duplicates - If non-zero, then duplicates in the matches are removed. The - default is 1. - - - Variable: int rl_filename_completion_desired - Non-zero means that the results of the matches are to be treated as - filenames. This is _always_ zero on entry, and can only be changed - within a completion entry generator function. If it is set to a - non-zero value, directory names have a slash appended and Readline - attempts to quote completed filenames if they contain any - characters in `rl_filename_quote_characters' and - `rl_filename_quoting_desired' is set to a non-zero value. - - - Variable: int rl_filename_quoting_desired - Non-zero means that the results of the matches are to be quoted - using double quotes (or an application-specific quoting mechanism) - if the completed filename contains any characters in - `rl_filename_quote_chars'. This is _always_ non-zero on entry, - and can only be changed within a completion entry generator - function. The quoting is effected via a call to the function - pointed to by `rl_filename_quoting_function'. - - - Variable: int rl_attempted_completion_over - If an application-specific completion function assigned to - `rl_attempted_completion_function' sets this variable to a non-zero - value, Readline will not perform its default filename completion - even if the application's completion function returns no matches. - It should be set only by an application's completion function. - - - Variable: int rl_completion_type - Set to a character describing the type of completion Readline is - currently attempting; see the description of - `rl_complete_internal()' (*note Completion Functions::) for the - list of characters. - - - Variable: int rl_inhibit_completion - If this variable is non-zero, completion is inhibited. The - completion character will be inserted as any other bound to - `self-insert'. - - -File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers - -A Short Completion Example --------------------------- - - Here is a small application demonstrating the use of the GNU Readline -library. It is called `fileman', and the source code resides in -`examples/fileman.c'. This sample application provides completion of -command names, line editing features, and access to the history list. - - /* fileman.c -- A tiny application which demonstrates how to use the - GNU Readline library. This application interactively allows users - to manipulate files and their modes. */ - - #include <stdio.h> - #include <sys/types.h> - #include <sys/file.h> - #include <sys/stat.h> - #include <sys/errno.h> - - #include <readline/readline.h> - #include <readline/history.h> - - extern char *xmalloc (); - - /* The names of functions that actually do the manipulation. */ - int com_list __P((char *)); - int com_view __P((char *)); - int com_rename __P((char *)); - int com_stat __P((char *)); - int com_pwd __P((char *)); - int com_delete __P((char *)); - int com_help __P((char *)); - int com_cd __P((char *)); - int com_quit __P((char *)); - - /* A structure which contains information on the commands this program - can understand. */ - - typedef struct { - char *name; /* User printable name of the function. */ - rl_icpfunc_t *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, (rl_icpfunc_t *)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 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 __P((const char *, int)); - char **fileman_completion __P((const char *, int, int)); - - /* 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 = 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. Returnthe array of matches, or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - const 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 = rl_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) - const 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 = getcwd (dir, sizeof(dir) - 1); - 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.\n" - caller); - fprintf (stderr, "Write it yourself.\n"); - } - - /* Return non-zero if ARG is a valid argument for CALLER, - else print an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; - { - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); - } - - -File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top - -Concept Index -************* - -* Menu: - -* command editing: Readline Bare Essentials. -* editing command lines: Readline Bare Essentials. -* initialization file, readline: Readline Init File. -* interaction, readline: Readline Interaction. -* kill ring: Readline Killing Commands. -* killing text: Readline Killing Commands. -* notation, readline: Readline Bare Essentials. -* readline, function: Basic Behavior. -* variables, readline: Readline Init File Syntax. -* yanking text: Readline Killing Commands. - - -File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* _rl_digit_p: Utility Functions. -* _rl_digit_value: Utility Functions. -* _rl_lowercase_p: Utility Functions. -* _rl_to_lower: Utility Functions. -* _rl_to_upper: Utility Functions. -* _rl_uppercase_p: Utility Functions. -* abort (C-g): Miscellaneous Commands. -* accept-line (Newline or Return): Commands For History. -* backward-char (C-b): Commands For Moving. -* backward-delete-char (Rubout): Commands For Text. -* backward-kill-line (C-x Rubout): Commands For Killing. -* backward-kill-word (M-<DEL>): Commands For Killing. -* backward-word (M-b): Commands For Moving. -* beginning-of-history (M-<): Commands For History. -* beginning-of-line (C-a): Commands For Moving. -* bell-style: Readline Init File Syntax. -* call-last-kbd-macro (C-x e): Keyboard Macros. -* capitalize-word (M-c): Commands For Text. -* character-search (C-]): Miscellaneous Commands. -* character-search-backward (M-C-]): Miscellaneous Commands. -* clear-screen (C-l): Commands For Moving. -* comment-begin: Readline Init File Syntax. -* complete (<TAB>): Commands For Completion. -* completion-query-items: Readline Init File Syntax. -* convert-meta: Readline Init File Syntax. -* copy-backward-word (): Commands For Killing. -* copy-forward-word (): Commands For Killing. -* copy-region-as-kill (): Commands For Killing. -* delete-char (C-d): Commands For Text. -* delete-char-or-list (): Commands For Completion. -* delete-horizontal-space (): Commands For Killing. -* digit-argument (M-0, M-1, ... M--): Numeric Arguments. -* disable-completion: Readline Init File Syntax. -* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. -* downcase-word (M-l): Commands For Text. -* dump-functions (): Miscellaneous Commands. -* dump-macros (): Miscellaneous Commands. -* dump-variables (): Miscellaneous Commands. -* editing-mode: Readline Init File Syntax. -* enable-keypad: Readline Init File Syntax. -* end-kbd-macro (C-x )): Keyboard Macros. -* end-of-history (M->): Commands For History. -* end-of-line (C-e): Commands For Moving. -* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. -* expand-tilde: Readline Init File Syntax. -* forward-backward-delete-char (): Commands For Text. -* forward-char (C-f): Commands For Moving. -* forward-search-history (C-s): Commands For History. -* forward-word (M-f): Commands For Moving. -* history-preserve-point: Readline Init File Syntax. -* history-search-backward (): Commands For History. -* history-search-forward (): Commands For History. -* horizontal-scroll-mode: Readline Init File Syntax. -* input-meta: Readline Init File Syntax. -* insert-comment (M-#): Miscellaneous Commands. -* insert-completions (M-*): Commands For Completion. -* isearch-terminators: Readline Init File Syntax. -* keymap: Readline Init File Syntax. -* kill-line (C-k): Commands For Killing. -* kill-region (): Commands For Killing. -* kill-whole-line (): Commands For Killing. -* kill-word (M-d): Commands For Killing. -* mark-modified-lines: Readline Init File Syntax. -* mark-symlinked-directories: Readline Init File Syntax. -* match-hidden-files: Readline Init File Syntax. -* menu-complete (): Commands For Completion. -* meta-flag: Readline Init File Syntax. -* next-history (C-n): Commands For History. -* non-incremental-forward-search-history (M-n): Commands For History. -* non-incremental-reverse-search-history (M-p): Commands For History. -* output-meta: Readline Init File Syntax. -* overwrite-mode (): Commands For Text. -* page-completions: Readline Init File Syntax. -* possible-completions (M-?): Commands For Completion. -* prefix-meta (<ESC>): Miscellaneous Commands. -* previous-history (C-p): Commands For History. -* quoted-insert (C-q or C-v): Commands For Text. -* re-read-init-file (C-x C-r): Miscellaneous Commands. -* readline: Basic Behavior. -* redraw-current-line (): Commands For Moving. -* reverse-search-history (C-r): Commands For History. -* revert-line (M-r): Miscellaneous Commands. -* rl_add_defun: Function Naming. -* rl_add_funmap_entry: Associating Function Names and Bindings. -* rl_add_undo: Allowing Undoing. -* rl_alphabetic: Utility Functions. -* rl_already_prompted: Readline Variables. -* rl_attempted_completion_function: Completion Variables. -* rl_attempted_completion_over: Completion Variables. -* rl_basic_quote_characters: Completion Variables. -* rl_basic_word_break_characters: Completion Variables. -* rl_begin_undo_group: Allowing Undoing. -* rl_bind_key: Binding Keys. -* rl_bind_key_in_map: Binding Keys. -* rl_binding_keymap: Readline Variables. -* rl_callback_handler_install: Alternate Interface. -* rl_callback_handler_remove: Alternate Interface. -* rl_callback_read_char: Alternate Interface. -* rl_catch_signals: Readline Signal Handling. -* rl_catch_sigwinch: Readline Signal Handling. -* rl_char_is_quoted_p: Completion Variables. -* rl_cleanup_after_signal: Readline Signal Handling. -* rl_clear_message: Redisplay. -* rl_clear_pending_input: Character Input. -* rl_clear_signals: Readline Signal Handling. -* rl_complete <1>: How Completing Works. -* rl_complete: Completion Functions. -* rl_complete_internal: Completion Functions. -* rl_completer_quote_characters: Completion Variables. -* rl_completer_word_break_characters: Completion Variables. -* rl_completion_append_character: Completion Variables. -* rl_completion_display_matches_hook: Completion Variables. -* rl_completion_entry_function <1>: Completion Variables. -* rl_completion_entry_function: How Completing Works. -* rl_completion_mark_symlink_dirs: Completion Variables. -* rl_completion_matches: Completion Functions. -* rl_completion_mode: Completion Functions. -* rl_completion_query_items: Completion Variables. -* rl_completion_suppress_append: Completion Variables. -* rl_completion_type: Completion Variables. -* rl_copy_keymap: Keymaps. -* rl_copy_text: Modifying Text. -* rl_crlf: Redisplay. -* rl_delete_text: Modifying Text. -* rl_deprep_term_function: Readline Variables. -* rl_deprep_terminal: Terminal Management. -* rl_ding: Utility Functions. -* rl_directory_completion_hook: Completion Variables. -* rl_discard_keymap: Keymaps. -* rl_dispatching: Readline Variables. -* rl_display_match_list: Utility Functions. -* rl_do_undo: Allowing Undoing. -* rl_done: Readline Variables. -* rl_editing_mode: Readline Variables. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_erase_empty_line: Readline Variables. -* rl_event_hook: Readline Variables. -* rl_execute_next: Character Input. -* rl_executing_keymap: Readline Variables. -* rl_executing_macro: Readline Variables. -* rl_expand_prompt: Redisplay. -* rl_explicit_arg: Readline Variables. -* rl_extend_line_buffer: Utility Functions. -* rl_filename_completion_desired: Completion Variables. -* rl_filename_completion_function: Completion Functions. -* rl_filename_dequoting_function: Completion Variables. -* rl_filename_quote_characters: Completion Variables. -* rl_filename_quoting_desired: Completion Variables. -* rl_filename_quoting_function: Completion Variables. -* rl_forced_update_display: Redisplay. -* rl_free_line_state: Readline Signal Handling. -* rl_free_undo_list: Allowing Undoing. -* rl_function_dumper: Associating Function Names and Bindings. -* rl_function_of_keyseq: Associating Function Names and Bindings. -* rl_funmap_names: Associating Function Names and Bindings. -* rl_generic_bind: Binding Keys. -* rl_get_keymap: Keymaps. -* rl_get_keymap_by_name: Keymaps. -* rl_get_keymap_name: Keymaps. -* rl_get_screen_size: Readline Signal Handling. -* rl_get_termcap: Miscellaneous Functions. -* rl_getc: Character Input. -* rl_getc_function: Readline Variables. -* rl_gnu_readline_p: Readline Variables. -* rl_ignore_completion_duplicates: Completion Variables. -* rl_ignore_some_completions_function: Completion Variables. -* rl_inhibit_completion: Completion Variables. -* rl_initialize: Utility Functions. -* rl_insert_completions: Completion Functions. -* rl_insert_text: Modifying Text. -* rl_instream: Readline Variables. -* rl_invoking_keyseqs: Associating Function Names and Bindings. -* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. -* rl_kill_text: Modifying Text. -* rl_last_func: Readline Variables. -* rl_library_version: Readline Variables. -* rl_line_buffer: Readline Variables. -* rl_list_funmap_names: Associating Function Names and Bindings. -* rl_macro_bind: Miscellaneous Functions. -* rl_macro_dumper: Miscellaneous Functions. -* rl_make_bare_keymap: Keymaps. -* rl_make_keymap: Keymaps. -* rl_mark: Readline Variables. -* rl_message: Redisplay. -* rl_modifying: Allowing Undoing. -* rl_named_function: Associating Function Names and Bindings. -* rl_num_chars_to_read: Readline Variables. -* rl_numeric_arg: Readline Variables. -* rl_on_new_line: Redisplay. -* rl_on_new_line_with_prompt: Redisplay. -* rl_outstream: Readline Variables. -* rl_parse_and_bind: Binding Keys. -* rl_pending_input: Readline Variables. -* rl_point: Readline Variables. -* rl_possible_completions: Completion Functions. -* rl_pre_input_hook: Readline Variables. -* rl_prep_term_function: Readline Variables. -* rl_prep_terminal: Terminal Management. -* rl_prompt: Readline Variables. -* rl_push_macro_input: Modifying Text. -* rl_read_init_file: Binding Keys. -* rl_read_key: Character Input. -* rl_readline_name: Readline Variables. -* rl_readline_state: Readline Variables. -* rl_readline_version: Readline Variables. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_replace_line: Utility Functions. -* rl_reset_after_signal: Readline Signal Handling. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Terminal Management. -* rl_resize_terminal: Readline Signal Handling. -* rl_restore_prompt: Redisplay. -* rl_save_prompt: Redisplay. -* rl_set_key: Binding Keys. -* rl_set_keyboard_input_timeout: Character Input. -* rl_set_keymap: Keymaps. -* rl_set_paren_blink_timeout: Miscellaneous Functions. -* rl_set_prompt: Redisplay. -* rl_set_screen_size: Readline Signal Handling. -* rl_set_signals: Readline Signal Handling. -* rl_show_char: Redisplay. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Character Input. -* rl_terminal_name: Readline Variables. -* rl_tty_set_default_bindings: Terminal Management. -* rl_unbind_command_in_map: Binding Keys. -* rl_unbind_function_in_map: Binding Keys. -* rl_unbind_key: Binding Keys. -* rl_unbind_key_in_map: Binding Keys. -* rl_username_completion_function: Completion Functions. -* rl_variable_bind: Miscellaneous Functions. -* rl_variable_dumper: Miscellaneous Functions. -* self-insert (a, b, A, 1, !, ...): Commands For Text. -* set-mark (C-@): Miscellaneous Commands. -* show-all-if-ambiguous: Readline Init File Syntax. -* start-kbd-macro (C-x (): Keyboard Macros. -* transpose-chars (C-t): Commands For Text. -* transpose-words (M-t): Commands For Text. -* undo (C-_ or C-x C-u): Miscellaneous Commands. -* universal-argument (): Numeric Arguments. -* unix-line-discard (C-u): Commands For Killing. -* unix-word-rubout (C-w): Commands For Killing. -* upcase-word (M-u): Commands For Text. -* visible-stats: Readline Init File Syntax. -* yank (C-y): Commands For Killing. -* yank-last-arg (M-. or M-_): Commands For History. -* yank-nth-arg (M-C-y): Commands For History. -* yank-pop (M-y): Commands For Killing. - - - -Tag Table: -Node: Top1164 -Node: Command Line Editing1763 -Node: Introduction and Notation2414 -Node: Readline Interaction4032 -Node: Readline Bare Essentials5219 -Node: Readline Movement Commands7000 -Node: Readline Killing Commands7957 -Node: Readline Arguments9866 -Node: Searching10902 -Node: Readline Init File13045 -Node: Readline Init File Syntax14106 -Node: Conditional Init Constructs24989 -Node: Sample Init File27514 -Node: Bindable Readline Commands30698 -Node: Commands For Moving31748 -Node: Commands For History32597 -Node: Commands For Text35455 -Node: Commands For Killing38169 -Node: Numeric Arguments40120 -Node: Commands For Completion41248 -Node: Keyboard Macros42780 -Node: Miscellaneous Commands43339 -Node: Readline vi Mode46688 -Node: Programming with GNU Readline48506 -Node: Basic Behavior49474 -Node: Custom Functions52904 -Node: Readline Typedefs54382 -Node: Function Writing56011 -Node: Readline Variables57219 -Node: Readline Convenience Functions66642 -Node: Function Naming67624 -Node: Keymaps68876 -Node: Binding Keys70632 -Node: Associating Function Names and Bindings73558 -Node: Allowing Undoing75803 -Node: Redisplay78338 -Node: Modifying Text81409 -Node: Character Input82638 -Node: Terminal Management84418 -Node: Utility Functions85593 -Node: Miscellaneous Functions87932 -Node: Alternate Interface89996 -Node: A Readline Example92141 -Node: Readline Signal Handling94078 -Node: Custom Completers99681 -Node: How Completing Works100396 -Node: Completion Functions103394 -Node: Completion Variables106778 -Node: A Short Completion Example117049 -Node: Concept Index129602 -Node: Function and Variable Index130424 - -End Tag Table diff --git a/readline-4.3.orig/doc/readline.ps b/readline-4.3.orig/doc/readline.ps deleted file mode 100644 index 21ca2ca..0000000 --- a/readline-4.3.orig/doc/readline.ps +++ /dev/null @@ -1,5200 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: readline.dvi -%%Pages: 66 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o readline.ps readline.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2002.06.27:1354 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi) -@start -%DVIPSBitmapFont: Fa cmbxti10 14.4 1 -/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmsl9 9 1 -/Fb 1 121 df<383FC7E038078380EB0200EA038413C8EA01D8EA00F05B7F1201133812 -02487EEA081E123838FC3FC013107F8F14>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmsltt10 9 4 -/Fc 4 78 df<EAFFFC13FE13FC0F037C8C14>45 D<EA01E0EA07F8EA0E3CEA1C1CEA180E -12381270A312E0A4131CA31338A21370EA70E01271EA3F80EA1F000F177C9614>48 -D<134013E0EA01C01203120F123D12111201EA0380A6EA0700A6120EEAFFE0A20B177B96 -14>I<381F81F813C1380FC3E0EA0EC213C6A213CE13CC381CCDC013DD13D9A213F1A238 -38E3801303A53870070038FC0FC0A215177F9614>77 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt9 9 47 -/Fd 47 127 df<126012F0AD12601200A4126012F0A212600417789614>33 -D<EA071CA5B51280A27E380E3800A7387FFF80B5FCA2381C7000A511177F9614>35 -D<EA01801203EA06005A121C121812385AA35AA91270A37E1218121C120C7EEA03801201 -091D799914>40 D<128012C01260123012381218121C120EA31207A9120EA3121C121812 -381230126012C01280081D7C9914>I<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2 -EA3FF8EA7FFCEAF39EEA638CEA0380A30F107E9214>I<127012F812FCA2127C120C1218 -123012E012C0060A798414>44 D<EAFFFEA30F037E8C14>I<127012F8A3127005057984 -14>I<1203A25A5A123F12F712471207AEEA7FF0A20C177C9614>49 -D<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F80EA03 -C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA03E0EA -01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F157E95 -14>62 D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A41300C7 -FCA41203EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC1271EA -731E1277EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F177E96 -14>I<EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2487EA2 -38FE3F80A211177F9614>I<3801F180EA07FFEA0E1FEA1C071238EA7003A348C7FCA738 -700380A338380700121CEA0E0EEA07FCEA01F011177F9614>67 D<38FC1F80A2007C1300 -EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80A211177F9614>77 -D<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4133E12FEA21117 -7F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA51480EB1DC0A238 -FE0F80EB070012177F9614>82 D<EAFFE0A21200B3A712FFA20B1D7F9914>93 -D<EAFFFEA30F037E7E14>95 D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C -1C127012E0A3EA707C383FFF80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA -1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I< -EA03F8EA0FFEEA1C0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F0 -0F107E8F14>I<137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301E -EA383E381FEFC0EA07CF12177F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2 -EAFFFEA2EAE00012601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA -038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA -383B38301800EA701CA3EA3018EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA70 -0F38E00380A438700700EA3C1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1D -FEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA212 -07ACEAFFF8A20D187C9714>I<136013F0A213601300A4EA1FF0A2EA0070B2EA40E0EAE0 -C0EA7F80EA3F000C207E9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0 -A2EA1E70EA1C38133C131C7F38FF1F80A21117809614>I<EAFF80A21203B3EAFFFEA20F -177E9614>I<EAFB8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78 -EAFDFEEA1F86EA1E07121CAA38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701C -A2EAE00EA6EA701CEA783CEA3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07 -EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218 -808F14>I<EA03E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7 -EA0007A6EB3FE0A213187F8F14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EA -FFF0A211107F8F14>I<EA0FD8EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA00 -1CEA600612E012F0EAF81CEAFFF8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E -00A8130EA3131CEA07F8EA01F00F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03 -E71310808F14>I<38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA31110 -7F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811 -107F8F14>I<EA7E3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E78133848 -7E38FE3F80A211107F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370 -A25B1201A25BA3485A12730077C7FC127E123C11187F8F14>I<EA3FFF5AEA700E131C13 -38EA007013E0EA01C0EA0380EA0700120EEA1C0712381270B5FCA210107F8F14>I<EA1C -10EA3F38EAE7E0EA41C00D047D9614>126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmti9 9 1 -/Fe 1 47 df<1230127812F0126005047C830C>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr9 9 39 -/Ff 39 123 df<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA1C03AE38FF -8FF0141A809915>12 D<EBFF80EA0383EA0603120E121CA6B5FCEA1C03AE38FF9FF0141A -809915>I<126012F0A212701210A31220A21240A2040B7D830B>44 -D<EAFFC0A20A0280880D>I<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA -6006A2EA700EEA300CEA381CEA1C38EA07E010187F9713>48 D<12035AB4FC1207B3A2EA -7FF80D187D9713>I<EA0F80EA1060EA2030EA4038EA803CEAC01C12E01240EA003C1338 -A21370136013C0EA018013001202EA040412081210EA3008EA3FF8127F12FF0E187E9713 ->I<EA07E0EA1838EA201CEA601EEA700EEA201E1200131CA213381370EA07E0EA003813 -1C130E130FA212E0A212C0EA400EEA601CEA1838EA07E010187F9713>I<1318A2133813 -7813F813B8EA01381202A212041208121812101220124012C0B5FCEA0038A6EA03FF1018 -7F9713>I<EA3018EA3FF013E01380EA2000A5EA2FC0EA3060EA2030EA00381318131CA2 -124012E0A2EA8018EA40381330EA30E0EA0F800E187E9713>I<EA01F8EA0704EA0C06EA -180E123013001270126012E0EAE3E0EAE418EAE80CEAF00EEAE0061307A31260A2EA7006 -EA300EEA180CEA0C38EA07E010187F9713>I<1240EA7FFF13FEA2EA4004EA80081310A2 -EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>I<EA07E0EA1818 -EA300CEA20061260A21270EA780CEA3E18EA1F30EA07C0EA03E0EA0CF8EA307CEA601E13 -0FEAC0071303A3EA6002EA2004EA1818EA07E010187F9713>I<EA07E0EA1C30EA3018EA -700CEA600EEAE006A21307A31260EA700FEA3017EA1827EA07C7EA00071306130E130C12 -701318EA6030EA3060EA0F8010187F9713>I<EA1FC0EA38707FEA101C1200A2EA03FCEA -1E1C1238127012E01480A2133CEA705F381F8F0011107F8F13>97 -D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C01480381E0300EA1906 -EA10F8131A809915>I<EA07F8EA1C1C1238EA700813005AA612701304EA3808EA1C18EA -07E00E107F8F11>I<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C5A -EA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA600C12E0EAFFFCEAE000 -A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA01F0EA0718EA0E38EA1C101300 -A6EAFFC0EA1C00AEEAFF800D1A80990C>I<EA0FCF3818718038303000EA7038A4EA3030 -6C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA6006EA381CEA07E011 -187F8F13>I<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I<1218 -123CA212181200A612FC121CAE12FF081A80990A>I<12FC121CA9EB1FC0EB0F00130C5B -13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A809914>107 -D<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0A2001C1301 -AB39FF9FE7F81D107F8F20>I<EAFC7CEA1D87381E0380A2121CAB38FF9FF01410808F15> -I<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA700EEA381CEA1C38EA07E010 -107F8F13>I<EAFCFCEA1D07381E0380381C01C0A2EB00E0A6EB01C01480381E0300EA1D -06EA1CF890C7FCA6B47E1317808F15>I<EA03E1EA0C13EA180BEA300FEA700712E0A612 -70A26C5AEA1C37EA07C7EA0007A6EB3FE013177F8F14>I<EAFC78EA1D9CEA1E1C1308EA -1C00ABEAFF800E10808F0F>I<EA1F20EA60E0EA402012C0A2EAF000127FEA3FC0EA1FE0 -EA00F0EA8070133012C01320EAF040EA8F800C107F8F0F>I<1208A41218A21238EAFFC0 -EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC1F80EA1C03AB1307120CEA0E -0B3803F3F01410808F15>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2 -EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C0700003C1306381C0C04130E380E16 -081317A238072310149013A33803C1A014E0380180C0A319107F8F1C>I<38FE3F80383C -1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181CEA381E38FC3FC0 -12107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C -5AA248C7FCA212E112E212E4127811177F8F14>I<EAFFF8EAE07012C0EA80E0EA81C0A2 -EA0380EA0700A2EA0E04121CA2EA380812701338EAFFF80E107F8F11>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmss10 10.95 2 -/Fg 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmbx10 12 27 -/Fh 27 123 df<90380FF83F90397FFDFFC03A01FC1FE3E03903F03FC7EA07E0D80FC013 -87ED83C091381F8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 -D<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2ECFF80B6FCA2 -380FC01FB2397FF8FFF0A21C237FA220>I<EA07FE381FFF80383F07E06D7E130180121E -1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA7C02EA7E0C391FF87F803807E03F1916 -7E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF03EEBC01F9038800F8015C0140715E0A7 -15C0A2140F15809038C01F00381E707E381C3FFC38180FE01B237EA220>I<EBFF800007 -13E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E13186C133038 -0FC0603807FFC0C6130015167E9519>I<49B4FCA2EB003FAB13FE3807FFBF380FC1FF48 -C67E003E7F127E127CA212FCA7127C127E123E6C5B380F81FF3907FF3FE0EA01FC1B237E -A220>I<13FE3807FF80380F83C0381E01E0383E00F0127E007C13F8147812FCB512F8A2 -00FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0C6130015167E951A>I<EB1F80 -EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC000A6EAFFFEA2EA0FC0B2EA7FFCA21423 -7EA212>I<9038FE0F803903FF9FC0380F83E3381F01F3391E00F000003E7FA5001E5BEA -1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C381FFFE014FC6C13FF7E001F1480 -397C001FC00078130F00F81307A3007CEB0F806CEB1F00381F807E6CB45A000113E01A21 -7F951D>I<B47EA2121FABEB83F0EB8FFCEB987EEBA03EEBC03FA21380AE39FFF1FFE0A2 -1B237DA220>I<121E123FEA7F80A4EA3F00121EC7FCA6EAFF80A2121FB2EAFFF0A20C24 -7EA30F>I<B47EA2121FABECFF80A2EC3C00143014E0EB81C00183C7FC1386139E13BE13 -FFEBDF80EB8FC01307806D7E6D7E130080147E39FFE1FFC0A21A237EA21E>107 -D<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F803F890390FFE0FFE3A1F183F -183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0A22C167D9531>I<38 -FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B167D9520>I<13FF00 -0713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C133E007E137E003E137C -6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBFFC381FF07EEBC01F90 -38800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEBBFFCEB8FE00180C7FC -A8EAFFF0A21B207E9520>I<EBFE033807FF07380FC1CF381F00DF48137F007E7FA2127C -12FCA7127EA2003E5B6C5BEA0FC13807FF3FEA00FC1300A8903801FFE0A21B207E951E> -I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8A214167E9518>I<38 -07F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C7E6C1380120738003F -C0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E9517>I<487EA41203A2 -1207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FEEA01F811207F9F16> -I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B167D9520>I<39FFF01F -E0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0EB -7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FCA23A1F807C00E0D80F -C014C08001E013010007017F1380A2D803F0EB0300ECCF8301F81387D801F913C61487D8 -00FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026167F9529>I<39FFF0 -7FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7FC7F6D7E497EEB37E0 -EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B167F951E>I<39FFF0 -1FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0 -EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305BEA69C0EA7F80001FC8 -FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E0138038C03F005B137EC6 -5A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA7E03B5FCA214167E95 -19>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmtt10 12 29 -/Fi 29 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<B512F8A3381C0038A51400 -A2130EA3EA1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69 -D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012 -FF127F161E7F9D1A>I<B51280A33801C000B3A6B51280A3111E7C9D1A>73 -D<387F03F838FF87FC387F03F8381C01E0EB03C01480EB07005B131E131C5B13785B7F12 -1DEA1FDC139C130EEA1E0F7F001C13801303EB01C0A2EB00E0A21470007F13FC38FF81FE -387F00FC171E7F9D1A>75 D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E -7F9D1A>I<387FFFC0B512E0A26C13C013047D7E1A>95 D<EA1FF0EA3FFC487EEA780FEA -300738000380A2137FEA07FF121FEA3F83EA7803127012E0A3EA7007EA780F383FFFFCEA -1FFDEA07F016157D941A>97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB00 -38120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>I< -EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E381F -01F0380FFFE0000313C03800FE0014157D941A>I<EB1FC0A31301A6EA01F1EA07FDEA0F -FFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1 -161E7E9D1A>I<EA01F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0 -A300E0C7FC1270A2007813707E381F01F0380FFFE0000313803800FE0014157D941A>I< -EB07E0EB1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF8048 -13C06C1380151E7F9D1A>I<3801F87C3807FFFE5A381E078C381C0380383801C0A5381C -0380EA1E07381FFF005BEA39F80038C7FCA27E381FFF8014E04813F83878007C0070131C -48130EA40070131C0078133C003E13F8381FFFF0000713C00001130017217F941A>I<12 -FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D -1A>I<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A> -I<12FEA3120EA6EB0FFCEB1FFEEB0FFCEB03C0EB0780EB0F00131E5B5B13FC120F13DE13 -8F380E07801303EB01C014E0EB00F038FFE3FE14FF14FE181E7F9D1A>107 -D<EAFFE0A31200B3A6B512E0A3131E7D9D1A>I<387CE0E038FFFBF8EA7FFF381F1F1CEA -1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>I<EAFE3EEBFF80B512 -C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>I<EA01F0EA07FCEA1FFF -383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0EA7803383C0780EA3E0F -381FFF00EA07FCEA01F013157D941A>I<EAFE3EEBFF80B512E0380FC1F0EB8070EB0038 -120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E1380EB3E0090C7FCA8EAFFE0A316 -207F941A>I<3801F8E0EA07FEEA0FFFEA1E07EA3C03EA78011270EAE000A613011270EA -7803123CEA1E0FEA0FFFEA07FCEA01F0C7FCA8EB0FFEA317207E941A>I<387F81F838FF -8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>I<3807FB -80EA1FFF127FEA7807EAE003A30078C7FCEA7FC0EA1FFCEA07FE38003F801307386001C0 -12E0A2EAF00338FC0780B51200EAEFFEEAE3F812157C941A>I<487E1203A6387FFFE0B5 -FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F9B1A>I<38FE0FE0A3EA0E -00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387FC7FC00FF13FE007F13FC380E -00E0A3380701C0A338038380A33801C700A3EA00EEA3137CA2133817157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7 -A213E61366136E133CA31338A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F -941A>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 13.14 52 -/Fj 52 122 df<123C127E12FFA4127E123C08087C8711>46 D<EB7F803803FFF03807E1 -F8380F807C48487E48133F003E7F007E1480A400FE14C0AD007E1480A46CEB3F00A26C13 -3E6C6C5A3807E1F86CB45A38007F801A237EA21F>48 D<131C133C13FC12FFA21200B3AA -387FFFFCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12 -FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B -1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F> -I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB -03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FE -A214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A2 -14F81301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A1218 -5A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEB -FFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FC -C7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE -0018237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F005AA200 -7E133C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4003E137E -123F6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C003FB512 -C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133C -A25BA213F8A41201A66C5A13601A257DA41F>I<EBFF80000313E0380F01F8381C007C48 -133C141E1278A2127C127E387F803C13E0383FF878381FFDF0EBFFC07E000313E014F800 -0F13FCEA1E1F383C07FEEA7803EB00FF48133F141F140FA3140E1278141C6C1338381F80 -F03807FFE00001130018237DA21F>I<13FF000313C0380F83E0381F00F04813F8007E13 -7CA2147E12FEA3147FA4127E14FF123EEA3F01001F137FEA0FFEEA03FCC7FC147EA2123C -007E13FCA214F814F0EA7C01383003E0381C0F80380FFF00EA03F818237DA21F>I<141C -A2143EA3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F140301 -1C7FEB1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C712 -0FA2486E7ED8FFF090B51280A229257EA42E>65 D<B612E015FC3903F0007FED3F80ED1F -C0ED0FE0A216F0A21507150FA216E0151F16C0ED7F80913801FE0090B512F815FF9039F0 -003FC0ED0FE0ED07F016F8150316FCA616F81507ED0FF0ED1FE0ED7FC0B7120015F82625 -7EA42C>I<9138FF8008010FEBF01890393FC03C789039FE0006F8D801F8130348481301 -4848130048481478121F48481438A2007F151890C8FCA2481500A97E16187F123FA26C6C -1430120F6C6C14606C6C14C06C6CEB0180D800FEEB070090383FC01E90380FFFF8010013 -C025257DA42C>I<B7FCA23903F8007FED0F8015071503A21501A3ED00C01406A21600A2 -140E141EEBFFFEA2EBF81E140E1406A21660A291C7FC16C0A415011503A2ED0F80153FB7 -FCA223257EA428>69 D<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C -5C90B5FCA2EBF80F8080A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F8 -0003F800AF90B6FCA29038F80003B0B500E0B512E0A22B257EA430>72 -D<B512E0A23803F800B3AFB512E0A213257EA417>I<B539E007FF80A2D803F8C7EA7800 -16605E4B5A0307C7FC150E15185D5D5DEC03804AC8FC140E141F4A7E147FECDFC09038FB -8FE09038FF0FF0EBFC07496C7E816E7E1400157F82153F6F7E6F7E8215076F7E82B539E0 -3FFFC0A22A257EA430>75 D<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E -157CEC03FCB6FCA220257EA425>I<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D14 -06A26D6C130CA26D6C1318A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A29138 -7E0300A3EC3F06A2EC1F8CA2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A23525 -7EA43A>I<D8FFF8903807FFE07FD803FE9038003C006D14187F6D7E6D7E806D7E6D7E13 -036D7E6D7E80EC7F80EC3FC0141FEC0FE015F0EC07F8EC03FC1401EC00FE157F1698ED3F -D8ED1FF8150F15071503A2150115001678486C1438D8FFFC1418A22B257EA430>I<B67E -15F83903F801FEEC007F6F7E6F7EA282A55EA24B5A4BC7FCEC01FE90B512F815C09038F8 -03F06E7E6E7E157EA2157FA482A31760ED3FC017C0ED1FE1B539E00FFF80923801FE002B -257EA42E>82 D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A2 -7E91C7FCB4FCEA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC -0FE01407A200C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B -257DA422>I<007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C16 -0C5AA4C71400B3A390B512FEA226247EA32B>I<B539E00FFFC0A2D803F8C7EA78001630 -B3A700015D7F00005D137C6D495A6D0107C7FC90380FE03E903803FFF89038007FC02A25 -7EA42F>I<B5398001FFE0A2D807F8C7EA1C0000031518A26D1438000115306D14700000 -15607F6D5C80013F495AA2ECC003011F91C7FC6E5A010F130614F001075BA26D6C5AA2EC -FC3801011330ECFE700100136014FF6E5AA26E5AA36EC8FCA2140EA22B257FA42E>I<B5 -3B81FFFE01FFF0A23D07F0001FC0000F007013066C6C010F5CA26F7E6C6C5EA26D496C13 -38000017304B7E017F01195CA291388030FE013F5E829139C0607F01011F5E03E0138190 -280FE0C03F83C7FCA29139F1801FC3010715C617E69139FB000FEE010315EC02FF14FC6D -486D5AA24A130301005DA24A130102785CA202306D5A3C257FA43F>I<B539C001FFE0A2 -D807F8C7EA1C006C6C141816386C6C14306C6C5C16E06D6C5B6D6C485A1503D91FE090C7 -FC90380FF006150E903807F80C6D6C5A15386D6C5A903800FF6015E06E5A6E5AAE90380F -FFFCA22B257FA42E>89 D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1F -FE3803FE7EEA0FC0EA1F00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B -187E971E>97 D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2 -EC01F8A215FCA815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E26 -7FA522>I<EB7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F -6C130CEA1F80EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC13 -7F3803FFCF380FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380F -C0EF3903FFCFFC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048 -137C127E147E12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803 -FFE038007F8017187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400 -A7B5FCA2EA0FC0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F -01393E00F800007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA2123812 -3C383FFFE06C13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00 -381F807E3807FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0F -C013D89038D007E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4 -EA1F80EA0F00C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FACEC -1FF0A2EC0780EC0E005C14305CEBC1C0EBC38013C713DFEBFFC0EBE7E0EBC3F0138180EB -80FC147E80A2EC1F80EC0FC039FFF83FF8A21D267FA520>107 D<EAFFC0A2120FB3B0EA -FFFCA20E267EA511>I<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A -9007E803F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE9038 -83FF80390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F -803803FFF03807C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F -00A2381F807E6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC0 -9038F007E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F -809038CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7C -EB90FC13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C -07EA7001EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC0 -01A212E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A3120312 -07120F121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218 ->I<39FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E97 -22>I<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13 -FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<3BFFF9FF -E0FF80A23B1FC03F001C00000F6D13181580D807E05CA29039F03FC07000030137136015 -E02601F8635BA29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA201 -1E133CA3010C131829187F972C>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C -6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F39 -07003F8048131F39FFC07FF8A21D187F9720>I<39FFF80FF8A2390FC001C015803907E0 -0300A26D5A00031306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D -5AA26DC7FCA21306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmsl10 10.95 48 -/Fk 48 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380 -70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12 -D<EB03F4EB1C1CEB383C137013E01438EA01C0A538038070387FFFF038038070A4380700 -E0A6380E01C0A6381C0380001E13C038FF9FF016207E9F19>I<EAFFF0A20C027E8A0F> -45 D<137EEA01C338030180000713C0EA0E0014E05AA2EA3C0112381278A538F003C0A5 -1480130712E01400A2130E1260EA701CEA3038EA3870EA0FC0131F7C9D17>48 -D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B -9D17>I<1408140C141C143CA2147C147E149EA2EB011EA21302801304A21308A2011013 -8014071320A2EB7FFF90384007C0EB8003A2EA0100A21202EC01E01206001F130339FF80 -1FFE1F207F9F22>65 D<0007B5FC3900F803C090387801E0EC00F04913F8A515F03801E0 -01EC03E015C0EC0F809038FFFE009038E00F803903C003C0EC01E015F0A21400A2485A14 -01A215E01403EC07C0390F000F80EC3E00B512F01D1F7E9E20>I<ECFE02903807018690 -381C004E0170133E49131E4848131C4848130C120748C7FC5A121E003E1408003C140012 -7CA45AA4127815101520A27E1540001C14806CEB01006C13023803800C3800E030EB3FC0 -1F217C9F21>I<0007B57E3900F801E0903878007081497F151E150E150FA348481480A6 -484814005DA3151E153E4848133C5DA25D4A5A4A5A260F000FC7FC143CB512F0211F7E9E -23>I<0007B512FC3900F8007C0178131C150C5B1504A414043901E00800A31438EBFFF8 -EBE0383803C010A4EC00081510485AA21520A2156015C0380F00011407B612801E1F7E9E -1F>I<0007B512F83900F800780178133815185B1508A53901E00800A314181438EBFFF8 -3803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<3A07FF83FFC03A00F8 -007C000178133CA2495BA648485BA490B5FCEBE0004848485AA64848485AA64848485A01 -807F39FFF07FF8221F7E9E22>72 D<3807FF803800F8001378A25BA6485AA6485AA6485A -A648C7FC7FEAFFF0111F7E9E10>I<3A07FF803FE03A00F8001F000178130C5D4913205D -5D4AC7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E -141F48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75 -D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780A25C1402140614 -0E380F001E147CB512FC191F7E9E1C>I<D807F8EC7FE00000ED7C00017814BCA2019C49 -5AA21502A2018E13041508D8010E5C1510A26D1320A215400002EC41E09038038081EC81 -01A21482A23A0401C403C0A214C8A2EB00F0000C13E04B5A001E01C07FD8FFC0EB7FFC2B -1F7E9E2A>I<D807F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83 -C0D801035BEB01E0A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A214 -01000C5C001E1300B47E221F7E9E22>I<EB01FCEB0E0790383801C090387000E0484813 -F048481378485A153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01 -F0007C14E01403003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F80 -1F217C9F23>I<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC -01E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807 -FFFE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00 -EBFFF03803C03880141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078C -C7EA01F020207E9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C0006130412 -0EA3000F1300A27FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA2004013 -38A3143000601370146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512 -F0383C078000301430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383F -FFE01C1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A648 -5BA600705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFF -F07FF81FF03B1F000FC007C0001E903907800380001FED01006C1502140F5EEC17C00213 -5B142301805C000713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C4 -15F2EBC80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87 -D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313 -1EEB2E2038784F40381F878014147D9317>97 D<1207123F120F7EA2120EA65A137CEA1D -83381E0180001C13C0EB00E05A14F0A5387001E0A214C013031480EB0700EAE80EEACC38 -EA83E014207B9F19>I<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5B -EA70026C5AEA1C18EA07E011147D9314>I<1438EB01F8EB00781438A21470A614E013FC -EA0382EA0601121CEA3C00383801C0127812F0A438E00380A412F0EA700738380F00381C -37803807C7E015207D9F19>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00 -F0C7FCA25AA46C5AEA7002EA3004EA1C18EA07E011147D9314>I<EB07C0EB1C60EB30F0 -1360EBE0E0EBC0001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F -9F0E>I<140EEB3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB87 -00EA04FC48C7FCA21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0 -381C0700EA07FC181F809417>I<13E0120712011200A2485AA6485AEB8F80EB90E013A0 -EBC0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014207E9F19>I< -EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA65A121EEA -FF800B1F7F9E0C>I<13E0120712011200A2485AA6485AEB81FCEB80F014C0EB81801400 -EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F -18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B -207F9F0C>I<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB00 -70A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F -90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014 -147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0 -130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C -6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90 -C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C0038 -13C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4 -131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120E -A65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13 -F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I< -1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C -9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F -9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075B -A25BEA039013A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C03 -0060148015401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB -80F0A26C485A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0 -C0EBE180EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03 -E038FE07FC18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B14301420 -5C13705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8 -FC12E61278191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmti10 10.95 20 -/Fl 20 122 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5 -12E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801701310EC0E20A313609038E0 -0640EC038091C7FC5BA21201EA3180127948C8FC1262123C1D29829F1A>12 -D<127012F8A212F012E005057B840E>46 D<EBF180380389C038070780EA0E03121C123C -383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C80380F070013147C9317> -97 D<137EEA01C138030080EA0E07121E001C1300003CC7FC5AA35AA45B12701302EA30 -0CEA1830EA07C011147C9315>99 D<1478EB03F8EB0070A414E0A4EB01C0A213F1EA0389 -38070780EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C38308C -80380F070015207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA780CEA7FF0EA -78005AA4EA7001A21302EA380CEA1830EA07C010147C9315>I<EB3C60EBE2703801C1E0 -EA0380EA07005A380E01C0121EA3383C0380A4EB0700A2EA1C0F1317EA0C2EEA03CEEA00 -0EA25BA21230EA7838485AEA60E0EA3F80141D7E9315>103 D<13C0EA01E0A213C0C7FC -A7120E12131223EA4380EA4700A21287120EA35AA3EA38401380A21270EA31001232121C -0B1F7C9E0E>105 D<EA03C0121FEA0380A4EA0700A4120EA45AA45AA45AA3127112E2A4 -126412380A207C9F0C>108 D<391C0F80F0392630C318394740640C903880680EEB0070 -A2008E495A120EA34848485AA3ED70803A3803807100A215E115623970070064D8300313 -3821147C9325>I<381C0F80382630C0384740601380EB0070A2008E13E0120EA3381C01 -C0A3EB038400381388A2EB0708EB031000701330383001C016147C931A>I<137CEA01C3 -38030180000E13C0121E001C13E0123C1278A338F003C0A3EB07801400EA700F130EEA30 -18EA1870EA07C013147C9317>I<3801C1E0380262183804741C1378EB701EA2EA08E012 -00A33801C03CA3143838038078147014E0EBC1C038072380EB1E0090C7FCA2120EA45AA2 -B47E171D809317>I<EA1C1EEA266138278380EA47871307EB0300008EC7FC120EA35AA4 -5AA45A123011147C9313>114 D<13FCEA0302EA0601EA0C03130713061300EA0F8013F0 -EA07F8EA03FCEA003E130E1270EAF00CA2EAE008EA4010EA2060EA1F8010147D9313>I< -EA018013C0EA0380A4EA0700A2EAFFF0EA0700120EA45AA45AA31320EA7040A21380A2EA -3100121E0C1C7C9B0F>I<000E13C0001313E0382301C0EA4381EA4701A238870380120E -A3381C0700A31410EB0E201218A2381C1E40EA0C263807C38014147C9318>I<380E0380 -EA1307002313C0EA4383EA4701130000871380120EA3381C0100A31302A25BA25BEA0E30 -EA03C012147C9315>I<000EEBC1C0001313E3392301C3E0384381C1384701C015603987 -038040120EA3391C070080A3EC0100A21306EB0F02000C5B380E13083803E1F01B147C93 -1E>I<000E13C0001313E0382301C0EA4381EA4701A238870380120EA3381C0700A4130E -1218A2EA1C1EEA0C3CEA07DCEA001CA25B12F05BEAE060485AEA4380003EC7FC131D7C93 -16>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr8 8 29 -/Fm 29 118 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0 -381FFF8014C0381C00E0147014301438A4147014E0EB01C0B5120015177F9619>I<EBFC -1038038330380E00B0481370481330123000701310126012E01400A51410126012700030 -132012386C13406C138038038300EA00FC14177E9619>I<B5FC381C01C0EB00E0143014 -381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512 -E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214 -3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C -0C1304A390C7FCA6EAFFC014177F9617>I<EAFFC0001CC7FCAD1420A31460A2144014C0 -1303B5FC13177F9616>76 D<00FEEB03F8001E14C000171305A338138009A23811C011A3 -3810E021A2EB7041A3EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<EAFF -FE381C0380EB00C014601470A4146014C0EB0380381FFE00001CC7FCAAB47E14177F9618 ->80 D<EAFFFC381C0380EB00C014E01470A414E014C0EB0380381FFE00381C0780EB01C0 -EB00E0A514E1A2147238FF803C18177F961A>82 D<EA0FC4EA302CEA601CEA400CEAC004 -A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C130E13061280A3EAC004EAE008EAD810 -EA87E00F177E9614>I<387FFFF83860381800401308A200801304A300001300AF3803FF -8016177F9619>I<12FCA212C0B3AB12FCA206217D980A>91 D<EA3FC0EA70601330EA20 -381200EA03F8EA1E3812301270EAE039A21379EA70FFEA1F1E100E7F8D12>97 -D<12F81238A8EA39F0EA3E0CEA380613077F1480A414005B1306EA361CEA21F011177F96 -14>I<EA07F0EA18381230EA7010EA600012E0A41260EA70081230EA1830EA07C00D0E7F -8D10>I<EA0FC0EA1860EA3030EA7038EAE018EAFFF8EAE000A31260EA7008EA3010EA18 -30EA07C00D0E7F8D10>101 D<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE300 -12E7127C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0 -123813F01378133CA2EAFE7F10177F9613>I<EAF8F8EA3B1CEA3C0E1238AA38FE3F8011 -0E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5EA701CEA3018EA1830EA07 -C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A414005B130EEA3E1CEA39F00038 -C7FCA512FE11147F8D14>I<EAF9E0EA3A70123CEA38201300A9B4FC0C0E7F8D0E>114 -D<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80EA1FC0EA01E0EA8060A212C0EAE0C0EA9F -000B0E7F8D0E>I<1208A31218A21238EAFFC0EA3800A71340A4EA1C80EA0F000A147F93 -0E>I<EAF83EEA380EAA131EEA1C2E3807CF80110E7F8D14>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmsy9 9 2 -/Fn 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmsltt10 10.95 29 -/Fo 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3 -C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA -7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203 -120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I<EB3E18EBFFB8 -4813F8EA07C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338 -380780383C0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3807FFC014E014F03801C0F814 -78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013 -07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000 -A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18 -1C7F9B18>I<EB1FF8EB3FFCEB1FF8EB01C0A4EB0380A6EB0700A6130EA2124012E06C5A -EAE03CEAFFF86C5AEA1FC0161C7C9B18>74 D<EA07FC487E6C5AEA01C0A4485AA648C7FC -A6120E14301470A4B512E0A3141C7E9B18>76 D<3907E01F80000FEB3FC0000714803903 -B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6 -5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12 -1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<387FFFC0B512E0A26C13C013047E7F18>95 D<EA03FC48B4FC4813801303380601C012 -00A2137FEA07FF121FEA3F813878038012F012E0A21307EA701F387FFFF0EA3FFBEA0FE1 -14147D9318>97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012 -38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I<EB07E0 -A31300A4EB01C0EA01F1EA07FDEA0FFFEA1E0FEA3C0738780380127012E0A4EB0700A25B -5B6C5AEA787F383FFFC0381FEFE0380F87C0131C7C9B18>100 D<13F8EA07FE487E381F -0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F -FE6C5AEA07F012147B9318>I<EB01F8EB07FC131FEB1E3CEB38181400A25B381FFFF05A -7E38007000A25BA6485AA6EA7FFE12FF127F161C7E9B18>I<EB1E1F90387FFF8090B5FC -3901E1E3003803C0E01380EA0700A3495AA238038780EA07FF49C7FCEA0E7890C8FCA26C -B47E4813E0487F383C007848133812705AA2147800705B387C03E0383FFFC0000F90C7FC -EA03FC191F809318>I<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6 -EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106 -D<EA07E0120F12071200A4485AEBC7FEA3EBC1E0EBC3C038038780EB8F00139E13BC13FE -13EEEA07CF1387EB0780130314C01301387FC7F838FFE7FC387FC7F8171C7F9B18>I<EA -0FFCA3EA001CA45BA65BA65BA6B5128014C01480121C7D9B18>I<13FCEA03FF000F1380 -EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F -FC6C5AEA07E013147C9318>111 D<EBF8C0EA03FDEA0FFFEA1F0FEA3C07387803801270 -12E0A4EB0700A25BA26C5AEA787FEA3FFEEA1FEEEA078EEA000EA35BA43801FF80A3121E -7C9318>113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA -FFFC7F5B17147E9318>I<EBFE603807FFE05AEA1F01121C003813C0EA3C00001F1300EA -0FF8EA07FE3800FF801307383001C01270A238780380EA7C07B51200EAEFFEEA63F81314 -7D9318>I<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF -E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013 -E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119 -D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC -EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F -F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13 -78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmcsc10 10.95 12 -/Fp 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807 -FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97 -D<EB7E083803819838070078000C1338001C13185A00781308127000F01300A700701308 -127812386C1310120C000713603803818038007E0015177E961B>99 -D<B512C0EA1C011300144014601420A213081400A21318EA1FF8EA1C1813081410A21300 -14301420A21460EB01E0B5FC14177E9619>101 D<B512C0EA1C011300144014601420A2 -13081400A21318EA1FF8EA1C181308A390C7FCA6EAFFC013177E9618>I<EB7E08380381 -9838070078000C1338001C13185A00781308127000F01300A5EB03FEEB00381270127812 -387E120C1207380380D838007F0817177E961D>I<EAFF80EA1C00B3A3EAFF8009177E96 -0E>105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13 -0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700 -70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D> -I<EAFFFCEA1C07EB03C0130114E0A414C01303EB0700EA1FFC001CC7FCAAB47E13177E96 -19>I<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA -001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9615>115 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F -133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF -18177F961C>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmbx12 17.28 34 -/Fq 34 121 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF000 -7CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215 -F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49 -131C485A48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28>I<913A03FF80018002 -3FEBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C812 -7F4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127F -A27FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93F -C05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A> -67 D<B812F0A3C6903880003FEE07F816031600A21778A21738A3171C1507A31700A25D -5D5D91B5FCA3EC803F818181A21707A392C7120EA4171EA2173CA2177C17FC1601160716 -3FB812F8A330317EB035>69 D<B812E0A3C6903880007FEE0FF016031601A21600A21770 -A31738A21507A21700A35D5D5D91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB0 -33>I<DA03FF1303027FEBF00749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03 -FF49487F4848C87E485A0007824848815B001F82A2484881A2127FA24992C7FC12FFAA03 -07B512F8127F7FDB00011300123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8 -497ED907FFEB3E3F01019038FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B61280A3 -C6EB8000B3B3A7B61280A319317EB01E>73 D<B67EA3000190C9FCB3A9EE0380A4160717 -00A25EA35E5E5E5E4B5A150FB7FCA329317DB030>76 D<B56C49B512C08080C66D903900 -03E0006E6E5AEBEFFC13E780EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E -16806E13C0ED7FE0ED3FF0151F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1 -EE1FF9EE0FFD160717FF828282177F173FA2171F170F486C1507B500E014031701A23A31 -7EB03F>78 D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FF -A717FEA2EE07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB0 -37>80 D<B77E16F816FEC690398003FF809238007FE0EE1FF0707EA283160783A65F160F -5F4C5A4C5A4C5ADB03FFC8FC91B512F816E091388007F8ED01FC6F7E167F83707EA283A5 -83A4F0038017F8161F1900706C5AB6398003FE0E933801FFFC9338001FF039317EB03C> -82 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A348 -1603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<B6D88003B51280A3C60180C73807 -C000715AB3AE137F4DC7FC80013F150EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF801F -C0023FB55A020F49C8FC020013E039317EB03E>I<B500FC91B5FCA3000390C8EA03C06C -17806E14076C170080017F150EA26E141E013F151C6E143C011F153880010F5D8001075D -A26E130101035D6E13036D5D15806D4AC7FCA26F5A027F130EEDE01E023F131CEDF03C02 -1F133815F8020F5BA2EDFCF002075B15FF6E5BA26E5BA26E90C8FCA3157EA2153CA23831 -7EB03D>I<EBFFF0000313FF390F803F809038C00FE0486C6C7EA26E7ED80FC07FEA0780 -C7FCA414FF131FEBFFE33803FC03EA0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F80 -0D393FC01DFE3A1FE078FFF03907FFE07FC6EB803F24207E9F27>97 -D<EA01F812FFA3120F1207ADEC3FE0ECFFFC9038FBE07F9039FF001F8049EB0FC04914E0 -49EB07F016F8A2ED03FCA316FEA816FCA3ED07F8A216F06DEB0FE06D14C001E7EB3F8090 -39C3C0FE00903880FFF89038003FC027327EB12D>I<EB0FFF017F13C03901FC01F03803 -F0033907E007F8120FEA1FC0003FEB03F0EC01E04848C7FCA312FFA8127FA36C6C131CA2 -001F14386C7E000714703903F001E03901FC07C039007FFF00EB0FF81E207D9F24>I<ED -0FC0EC07FFA3EC007F153FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F48 -48133F123FA2485AA312FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01 -FC0F3FFE38007FFEEB0FF027327DB12D>I<EB0FFC90387FFF803901FC0FC03903F003E0 -3907E001F0000F14F8391FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7 -FCA4127FA36C6C1307121F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807 -FE0020207E9F25>I<EB01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC -1203EC07E0EC018091C7FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>I<EA01F812FFA3120F1207ADEC07F8EC3FFEEC783F02C013 -809039F9801FC0EBFB0001FE14E05BA35BB3B500C3B5FCA328327DB12D>I<EA03C0487E -487E487EA46C5A6C5A6C5AC8FCA9EA01F8127FA31207B3A7B51280A311337DB217>I<EA -01F812FFA3120F1207B3B3A6B512C0A312327DB117>108 D<2703F007F8EB1FE000FFD9 -3FFEEBFFF8913A783F01E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602 -F8148001FC5CA3495CB3B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFE -EC783F02C013803A0FF1801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F -2D>I<EB07FC90387FFFC03901FC07F03903F001F848486C7E4848137E001F147F003F15 -8049133F007F15C0A300FF15E0A8007F15C0A36C6CEB7F80A2001F15006C6C13FE00075C -3903F803F83901FE0FF039007FFFC0D907FCC7FC23207E9F28>I<3901F83FE000FFEBFF -FC9038FBE07F9039FF003F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216 -FEA816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC -3FC091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF3 -0FF0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 -D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0 -6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13 -1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201 -12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB -07F0192E7FAD1F>I<D801F8EB07E000FFEB03FFA3000FEB003F0007141FB3153FA20003 -147FA26C6CEBDFF03A00FE039FFF90387FFF1FEB0FFC28207D9F2D>I<B53A1FFFE03FF8 -A33C0FF000FE0007806D150300076EEB0700816D5D00039138FF800EA26C6C486D5A15DF -01FF153C6C9039038FE038A2D97F876D5A150702C714F0D93FCF6D5AECCE03D91FFEEBF9 -C09138FC01FD16FF010F5D4A7EA26D486DC7FCA20103147E4A133EA26D48131C35207E9F -3A>119 D<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B -90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF0 -8190380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FC -A328207F9F2B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmsy10 10.95 1 -/Fr 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01 -800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15 -306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0 -D900FEC7FC272B7DA02E>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmbx12 14.4 55 -/Fs 55 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F130048EB0F -8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A24814E0A4 -127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B277DA622 ->I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC6485AA249 -5A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822>I<EB -7F803801FFF000077F380FC0FC381F803E48487E007E1480A2140F00FE14C0A315E0A500 -7E131FA26C133F6C132F380F80CF3807FF8F0001130FEA0008010013C0A3EC1F80123E12 -7FEC3F00143E147E007E5B383E03F8381FFFE06C1380D801FEC7FC1B277DA622>57 -D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A2 -49486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F0804913030001 -81491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001F -E0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00 -EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B7 -12E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F -9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9FC -5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF0 -07C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC00 -1FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217 -C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A339 -03FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC -0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297E -A82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403 -A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003 -903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880 -485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E -6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F0 -0FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I< -B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F0016 -1E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE7 -9038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80 -B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A215 -07A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D00 -03EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F813 -0EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380 -A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FF -FCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180138014 -7F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F -16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>I< -ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148 -486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C -14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC01 -0013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA7 -16FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<EC -FFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E4848 -6D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C -14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090 -263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F5A -6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E -4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA2 -1503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E000 -0F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFC -EBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E013 -03A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825 ->I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A2481501 -A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA00 -01ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC -2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B01 -7F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301 -015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA23029 -7FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13 -016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E -17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035B -A2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E -141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D6C -130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7FC -6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89 -D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA -0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21 ->97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F89038E0 -00FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C0FE090380FFF8039 -0E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A248133E -007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C3801FF -F838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807F03F380FC00F381F -8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FFE73800 -7F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F130048EB0F80127E15 -C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003803907C007003803 -F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207 -143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<9038FF80F00003EBE3 -F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E6C137C -380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C14F012 -1F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512003800 -7FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EBE80701 -F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1F -C0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3 -B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D8 -0FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A333 -1B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213 -E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0 -393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F -803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE039 -0FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038 -F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FF -C1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmtt10 10.95 91 -/Ft 91 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<EA3803387C0780A2EAEE0F1400A25B131EA213 -3EEA7C3CA2EA387CEA0078A213F85B12015BA212035BA21207EB8380EB87C0120FEB0EE0 -A2121F121EA2123E383C07C0A23818038013247E9F18>I<EA01C0EA07E0487EEA0E7048 -7EA4EB73F813F313E3380FC1C0EBC38013831303381F0700EA3F87EA7B8EEA71CEEAE1FC -12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C7F9B18>I<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EA -FDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A41114 -7D9718>I<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C -0738380380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C07 -00EA1F1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12 -431203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003 -C0EAE00138F000E0A21260C7FCA2EB01C0A21303EB0780EB0F00131E5B5B5B485AEA07C0 -485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003C0EA0001EB00E0A2126012 -F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C7E9B18>I<137E48B4FC00 -071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC38FE078038F803 -C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5AEA01F8131C7E9B -18>I<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13F05BA2485AA3485A -A448C7FCA7131D7E9C18>I<EA03F8EA0FFE487E383E0F80EA3803387001C0A438380380 -EA3C07381FFF00EA07FC487EEA1F1F383C0780387001C000F013E0EAE000A4387001C0EA -7803383E0F80381FFF006C5AEA03F8131C7E9B18>I<1230127812FCA2127812301200A8 -1230127812FCA2127812300614779318>58 D<1218123C127EA2123C12181200A8121812 -3C127EA2123E121E120E121C123C127812F01260071A789318>I<14C0EB03E01307EB1F -C0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E01303EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4 -387FFFC0B512E0A26C13C0130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A -126013187E9918>I<EA0FF0EA3FFC48B4FCEA700F38F00380A2EA600738000F00133E5B -EA01F05B485AA55BC8FCA5EA0380487EA36C5A111C7D9B18>I<137CEA01FEEA07FF380F -8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1EAE380A638E1C1C0127113E338 -70FF8038387F00EA3C1C381E00E0EA0F833807FFC00001138038007E00131C7E9B18>I< -137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E03381C01C0A338 -7F07F000FF13F8007F13F0151C7F9B18>I<EA7FFCB5FC6C1380381C03C01301EB00E0A4 -130114C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E01303387FFFC0B5 -1280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07FFEA0F07EA1E03EA3C01EA38005AA2 -14005AA8127014E0A27E123C381E01C0EA0F073807FF803803FE00EA00F8131C7E9B18> -I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114 -C01303EB0F80387FFF00485AEA7FF8141C7F9B18>I<B512F0A3381C0070A41400A2130E -A3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F0A3381C0070A4 -1400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0A3141C7E9B18>I<3801F1C0EA03FD -EA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F130F387001C0A2130312 -38A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F07F038FF8FF8387F07F0 -381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>I<EA7FFFB5 -12806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<3801FFC0A338000E00B3 -12F0A2133CEA7FFCEA3FF0EA0FC0121C7D9B18>I<387F07F038FF87F8387F07F0381C03 -C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380 -A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>I<EAFFC0A3001CC7FCB114E0A5B5 -FCA3131C7E9B18>I<38FC01F8EAFE03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A2 -13F81370A21300A638FE03F8A3151C7F9B18>I<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>I<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000B0EAF0010070 -13C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E0 -13001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA -0FFE383FFF804813C0EA7803EA700100F013E0EAE000AE1370A2EAF079387039C0EA783F -EA7FFF6C1380380FFE00EA000FEB0780A2EB03C01301A213227E9B18>I<EA7FF8EAFFFE -6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB0380A5149CA3 -387F01F8EAFF81387F00F0161C7F9B18>I<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A3 -90C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2126012E0130100 -F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E07038A40000 -1300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F01380783C03803 -FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03383C01E0001C13C0A3EA1E -03000E1380A438070700A4EA038EA4EA018C13DCA3EA00D813F8A21370151C7F9B18>I< -38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2001913C0A3138CA2EA1D8DA31305 -000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0139F130F380E0700120FEA070E13 -8EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138EEA070F7F000E138013 -03001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03F8EAFF07EAFE03381C -01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC48 -7E6C5A151C7F9B18>I<383FFFE05AA2387001C01303EB07801400C65A131E131C133C5B -137013F0485A5B1203485A90C7FC5A001E13E0121C123C5A1270B5FCA3131C7E9B18>I< -EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>I<126012F0A27E1278127C123CA2123E12 -1E121F7EA27F12077F1203A27F12017F12007F1378A2137C133C133E131EA2131F7F1480 -1307A2EB030011247D9F18>I<EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>I<387FFFC0 -B512E0A26C13C013047E7F18>95 D<1206121E123E12381270A212E0A312F812FC127CA2 -1238070E789E18>I<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F -03127812E0A3EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>I<127E12FE127E12 -0EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFF -C0000E138038063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FC -A25AA61270EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F -131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA -3C1F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F383807 -80EA7003A238E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA -01F812147D9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801 -C000AEEA7FFFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C -0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338 -A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA513 -3EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18> -I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338 -137CA313381300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C -18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA -0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>I<EAFFC0A31201B3A4B51280A311 -1C7D9B18>I<38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB -3E3E1714809318>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38 -FFE7FE387FC7FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E0 -00E0A5EAF001007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I< -EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EB -FFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1F -FFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA00 -03A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0 -005BA290C7FCA9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7 -FCEA7FE0EA1FFCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F01114 -7D9318>I<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380 -EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE -3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700 -A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0 -A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318> -I<387F8FF0139F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA03 -9E138EEA0707000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13 -F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC13 -78A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA23870 -01E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A3 -14147F9318>I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E01200AB -1378EB7FE0131F130713247E9F18>I<126012F0B3B012600424769F18>I<127CB4FC13C0 -1203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18 ->I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmr10 10.95 77 -/Fu 77 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07 -00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I<EA7038 -EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008A2EA2010EA40200F0E7F9F17>34 -D<1340A2EA03F0EA0C4EEA10413820408012600040134038C041C01343A238E04180EB40 -001270127CEA3FC0EA1FF86C7EEA03FEEA007FEB4F801343EB41C0A2EAF040A312801480 -EA404100201300EA3042EA0C4CEA03F0EA0040A312257EA117>36 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<144014C0EB0180A3EB0300 -A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35AA2122D -7EA117>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78 -0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>I<13801203120F12F31203B3A6EA -07C0EA7FFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF803 -A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380EA -3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F1200 -1400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F013801240 -EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E138EA2EA -010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17> -I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003A214C0 -A3127012F0A200E013801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<137CEA -0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EA -F807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17 ->I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B -1201A41203A76C5A131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260A31270 -38780300123EEA3F06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007EB01C0 -12C01300A31480EA600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18 -487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E338000380 -A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012F8A312 -701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A212 -781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB20 -78A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E0 -39FF801FFE1F207F9F22>65 D<B512E0380F0078141EA2801580A515005C141E147CEBFF -F0EB007C141FEC0F80EC07C0140315E0A515C014071580EC0F00143EB512F01B1F7E9E20 ->I<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A15 -10127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E003 -00EB380CEB0FF01C217E9F21>I<B512F83807801EEC0780EC03C0EC01E0EC00F0157015 -78A2153CA3153EA8153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F -9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF130113 -001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B6128038078007 -1401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE1A -1F7F9E1E>I<90380FE02090387818609038E004E03803800238070001481300001E1460 -A25A1520127C127800F81400A7EC7FFCEC03E000781301127C123CA27EA27E7E38038002 -3900E00460903878182090380FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5FC -EB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<39FFF0 -07FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21E01341 -EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23>75 -D<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>I<B4 -6CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A29038 -0E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A> -I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03 -C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22 ->I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14 -F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C0 -6C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80 -EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<B512 -E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814 -3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA80 -40A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80 -A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA -01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010 -20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33 -E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13 -C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212 -1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F -9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61 -80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0 -EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC -121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200 -1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF -8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070 -13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180 -14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC -A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270 -12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18 -EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000 -127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F -9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F -9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8 -383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3 -132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807 -04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F -9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013 -7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I< -38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8 -A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260 -EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006 -130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fv cmbx12 20.736 14 -/Fv 14 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3170FA3171FA2173F177F -17FF5E04071300163FB9FCA4323B7DBA3A>76 D<B500F00207B512E0808080D8007F9239 -0007E0006E6F5A81017B7F81137901787F6E7E6E7E81141F6E7E6E7F6E7F82806E7F6F7E -6F7E826F7E816F13806F13C017E06F13F081EE7FF8EE3FFC17FEEE1FFF827013837013C3 -18E37013F382EF7FFBEF3FFFA283838383A28383187F183FA201FC161FB500FC150F1807 -1803A2433B7CBA4C>78 D<B712F8EEFFC017F817FE3B007FF0001FFF040313C004007F71 -7E717EA284171FA284A660A2173F604D5A604C485A4C5BDC1FFEC8FC91B612F817C0A291 -39F0007FF0EE1FF8707E707E707E8482A284A584A5F101E0A27013F0A2F103C0EF7FF8B6 -00F890393FFC078094381FFE0F0507B51200050113FCCBEA1FF0433C7CBA48>82 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<EE3F80ED -3FFFA4150181B0ECFF80010F13F0013F13FC9038FFC03F3901FE000F4848130348487F48 -487F121F485AA2127F5BA312FFA9127FA36C7EA2121F6C6C5B6C6C5B00035CD801FE011F -13C02700FF807E13FE90387FFFF8010F13E0010113002F3C7DBB36>100 -D<49B47E010F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0 -485A003F15F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F00 -0F15F06C6C13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013 -C025267DA52C>I<EA01E0EA07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA4 -12071203B3AAB512F0A4143D7DBC1A>105 D<13FE12FFA412071203B3B3AEB512F8A415 -3C7DBB1A>108 D<D801FCEBFF8000FF010313F0020F7F91381E03FC91383801FE000701 -607F0003497E01FD15805C01FFC7FCA35BB3A4B5D8F83F13FEA42F267CA536>110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E137C017F14786E13F801 -3F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391C7FC6E5A6D131E15BE -6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C141E0008133E007F133C -147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA1FFCEA07F02E377EA5 -33>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fv(GNU)33 b(Readline)h(Library)p 75 -709 1800 17 v 936 757 a Fu(Edition)17 b(4.3,)c(for)i -Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.3.)1643 811 -y(Marc)o(h)e(2002)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f -(GNU)g(Readline)h(Library)l(,)f(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h -(the)f(consistency)75 271 y(of)h(user)g(in)o(terface)h(across)e -(discrete)i(programs)e(that)h(need)h(to)e(pro)o(vide)i(a)f(command)g -(line)i(in)o(terface.)75 339 y(Published)g(b)o(y)f(the)f(F)l(ree)g -(Soft)o(w)o(are)f(F)l(oundation)75 394 y(59)h(T)l(emple)h(Place,)f -(Suite)i(330,)75 448 y(Boston,)d(MA)h(02111)f(USA)75 -516 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g -(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o -(vided)h(the)75 570 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q -(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)75 -638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g -(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h(man)o(ual)g -(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,) -g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g(deriv)o(ed)g(w)o -(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g(of)g(a)f(p)q -(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fr(\015)h Fu(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 149 y Fq(1)41 b(Command)28 b(Line)e(Editing)137 -271 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fp(gnu)g Fu(command)g(line)i(editing)f(in)o(terface.)75 -403 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -501 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -569 y(The)h(text)f Fo(C-k)h Fu(is)g(read)g(as)f(`Con)o(trol-K')g(and)h -(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831 -567 y Fn(h)p 1844 541 19 2 v 1844 569 a Fm(k)p 1844 577 -V 1860 567 a Fn(i)75 624 y Fu(k)o(ey)d(is)h(pressed)g(while)g(the)f -(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g -Fo(M-k)f Fu(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -745 y Fn(h)p 942 719 V 942 747 a Fm(k)p 942 755 V 958 -745 a Fn(i)987 747 y Fu(k)o(ey)g(is)h(pressed.)20 b(The)15 -b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Fn(h)p 1791 -719 72 2 v 1791 747 a Fm(AL)m(T)p 1791 755 V 1860 745 -a Fn(i)75 802 y Fu(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 800 y Fn(h)p 1225 774 V 1225 802 a Fm(AL)m(T)p 1225 -810 V 1294 800 a Fn(i)1322 802 y Fu(\(usually)i(to)e(either)i(side)g -(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Fn(h)p -400 829 V 400 857 a Fm(AL)m(T)p 400 865 V 469 855 a Fn(i)499 -857 y Fu(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Fn(h)p -1709 829 V 1709 857 a Fm(AL)m(T)p 1709 865 V 1778 855 -a Fn(i)1808 857 y Fu(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1033 y Fn(h)p 706 1007 V 706 1035 a Fm(AL)m(T)p 706 1043 -V 775 1033 a Fn(i)801 1035 y Fu(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping) -809 1088 y Fn(h)p 822 1062 70 2 v 822 1090 a Fm(ESC)p -822 1098 V 888 1088 a Fn(i)915 1090 y Fl(\014rst)p Fu(,)g(and)g(then)h -(t)o(yping)1339 1088 y Fn(h)p 1351 1062 19 2 v 1351 1090 -a Fm(k)p 1351 1098 V 1368 1088 a Fn(i)1383 1090 y Fu(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j -Fk(metafying)k Fu(the)425 1143 y Fn(h)p 437 1117 V 437 -1145 a Fm(k)p 437 1153 V 454 1143 a Fn(i)484 1145 y Fu(k)o(ey)l(.)137 -1214 y(The)i(text)e Fo(M-C-k)h Fu(is)h(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75 -1268 y Fk(metafying)e Fo(C-k)p Fu(.)137 1337 y(In)g(addition,)h(sev)o -(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1335 y Fn(h)p 1396 1309 -73 2 v 1396 1337 a Fm(DEL)p 1396 1345 V 1467 1335 a Fn(i)1482 -1337 y Fu(,)1514 1335 y Fn(h)p 1526 1309 70 2 v 1526 -1337 a Fm(ESC)p 1526 1345 V 1593 1335 a Fn(i)1608 1337 -y Fu(,)1640 1335 y Fn(h)p 1652 1309 72 2 v 1652 1337 -a Fm(LFD)p 1652 1345 V 1722 1335 a Fn(i)1737 1337 y Fu(,)1768 -1335 y Fn(h)p 1780 1309 70 2 v 1780 1337 a Fm(SPC)p 1780 -1345 V 1847 1335 a Fn(i)1862 1337 y Fu(,)75 1390 y Fn(h)p -87 1364 76 2 v 87 1392 a Fm(RET)p 87 1399 V 160 1390 -a Fn(i)175 1392 y Fu(,)23 b(and)306 1390 y Fn(h)p 318 -1364 74 2 v 318 1392 a Fm(T)m(AB)p 318 1399 V 390 1390 -a Fn(i)427 1392 y Fu(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1447 y(Section)d(1.3)f([Readline)h(Init)g(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1445 y Fn(h)p 1456 1419 72 2 v 1456 1447 a Fm(LFD)p 1456 -1454 V 1526 1445 a Fn(i)1560 1447 y Fu(k)o(ey)l(,)h(t)o(yping)1802 -1445 y Fn(h)p 1814 1419 49 2 v 1814 1447 a Fm(C-j)p 1814 -1454 V 1860 1445 a Fn(i)75 1501 y Fu(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1499 y Fn(h)p 886 1473 76 2 -v 886 1501 a Fm(RET)p 886 1509 V 959 1499 a Fn(i)989 -1501 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499 -y Fn(h)p 1397 1473 109 2 v 1397 1501 a Fm(Return)p 1397 -1509 V 1503 1499 a Fn(i)1533 1501 y Fu(or)1588 1499 y -Fn(h)p 1600 1473 86 2 v 1600 1501 a Fm(En)o(ter)p 1600 -1509 V 1684 1499 a Fn(i)1714 1501 y Fu(on)f(some)75 1556 -y(k)o(eyb)q(oards.)75 1688 y Fs(1.2)33 b(Readline)23 -b(In)n(teraction)137 1786 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)i(library)f -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2058 y Fn(h)p 1172 2032 76 -2 v 1172 2060 a Fm(RET)p 1172 2068 V 1245 2058 a Fn(i)1260 -2060 y Fu(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f -(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563 -2113 y Fn(h)p 575 2087 V 575 2115 a Fm(RET)p 575 2122 -V 648 2113 a Fn(i)663 2115 y Fu(;)i(the)f(en)o(tire)h(line)g(is)g -(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75 -2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fj(1.2.1)30 -b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fu(In)12 -b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h -(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f -(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h -(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23 -b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h -(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h -(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560 -y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f -(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t) -o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19 -b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fo(C-b)f -Fu(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75 -2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13 -b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g -(with)g Fo(C-f)p Fu(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)h(Library)137 -149 y(When)h(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 449 y Fo(C-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o -(haracter.)75 530 y Fo(C-f)168 b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h -(c)o(haracter.)75 608 y Fn(h)p 87 582 73 2 v 87 610 a -Fm(DEL)p 87 618 V 158 608 a Fn(i)188 610 y Fu(or)244 -608 y Fn(h)p 256 582 159 2 v 256 610 a Fm(Bac)o(kspace)p -256 618 V 412 608 a Fn(i)315 665 y Fu(Delete)h(the)f(c)o(haracter)g(to) -f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fo(C-d)168 -b Fu(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -961 y Fo(C-_)g Fu(or)f Fo(C-x)h(C-u)315 1015 y Fu(Undo)i(the)g(last)f -(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o -(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75 -1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863 -1149 y Fn(h)p 875 1123 V 875 1151 a Fm(Bac)o(kspace)p -875 1159 V 1032 1149 a Fn(i)1063 1151 y Fu(k)o(ey)g(b)q(e)h(set)f(to)f -(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h -(cursor)f(and)g(the)596 1204 y Fn(h)p 608 1178 73 2 v -608 1206 a Fm(DEL)p 608 1213 V 679 1204 a Fn(i)710 1206 -y Fu(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h -(the)g(cursor,)f(lik)o(e)75 1260 y Fo(C-d)p Fu(,)e(rather)h(than)g(the) -g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75 -1374 y Fj(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 -1471 y Fu(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fo(C-b)p -Fu(,)h Fo(C-f)p Fu(,)f Fo(C-d)p Fu(,)g(and)522 1578 y -Fn(h)p 534 1552 V 534 1580 a Fm(DEL)p 534 1588 V 605 -1578 a Fn(i)619 1580 y Fu(.)23 b(Here)16 b(are)g(some)f(commands)h(for) -f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635 -y(line.)75 1716 y Fo(C-a)168 b Fu(Mo)o(v)o(e)14 b(to)h(the)g(start)f -(of)h(the)g(line.)75 1796 y Fo(C-e)168 b Fu(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fo(M-f)168 -b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h -(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957 -y Fo(M-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2037 y Fo(C-l)168 b Fu(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f -(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f -Fo(C-f)g Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i -Fo(M-f)e Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18 -b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75 -2341 y Fj(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2438 y Fk(Killing)26 b Fu(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fk(y)o(anking)22 -b Fu(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fk(kill-ring)p Fu(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 458 y Fo(C-k)168 -b Fu(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y -Fo(M-d)168 b Fu(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f -Fo(M-f)p Fu(.)75 668 y Fo(M-)123 666 y Fn(h)p 135 640 -73 2 v 135 668 a Fm(DEL)p 135 675 V 206 666 a Fn(i)315 -668 y Fu(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o -(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315 -723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19 -b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315 -777 y Fo(M-b)p Fu(.)75 855 y Fo(C-w)168 b Fu(Kill)18 -b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22 -b(This)16 b(is)g(di\013eren)o(t)g(than)f Fo(M-)1777 853 -y Fn(h)p 1789 827 V 1789 855 a Fm(DEL)p 1789 863 V 1860 -853 a Fn(i)315 910 y Fu(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h -(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fk(y)o(ank)j -Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21 -b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d -(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fo(C-y)168 -b Fu(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g -(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198 -y Fo(M-y)168 b Fu(Rotate)16 b(the)h(kill-ring,)j(and)d(y)o(ank)g(the)h -(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f(this)h(if)f(the)h(prior) -315 1252 y(command)d(is)h Fo(C-y)f Fu(or)f Fo(M-y)p Fu(.)75 -1361 y Fj(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457 -y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g -(Readline)h(commands.)20 b(Sometimes)15 b(the)g(argumen)o(t)e(acts)75 -1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f -(the)g Fl(sign)j Fu(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o -(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t) -f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g -(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o -(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o -(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g -(t)o(yp)q(e)g(`)p Ft(M--)f(C-k)p Fu('.)137 1742 y(The)h(general)f(w)o -(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is) -h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797 -y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a) -g(min)o(us)g(sign)g(\(`)p Ft(-)p Fu('\),)d(then)j(the)f(sign)h(of)f -(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31 -b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h -(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75 -1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g -(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f -Fo(C-d)75 1961 y Fu(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f -(could)i(t)o(yp)q(e)f(`)p Ft(M-1)14 b(0)h(C-d)p Fu(',)k(whic)o(h)g -(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14 -b(on)i(the)f(input)h(line.)75 2125 y Fj(1.2.5)30 b(Searc)n(hing)21 -b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fu(Readline)d(pro)o -(vides)e(commands)g(for)g(searc)o(hing)g(through)g(the)g(command)g -(history)g(for)g(lines)i(con-)75 2275 y(taining)e(a)f(sp)q(eci\014ed)i -(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20 -b Fk(incremen)o(tal)e Fu(and)e Fk(non-incremen)o(tal)p -Fu(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f -(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.) -19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g -(string)f(is)h(t)o(yp)q(ed,)h(Readline)g(displa)o(ys)f(the)g(next)g(en) -o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12 -b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g -(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75 -2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l -(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g -(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fo(C-r)p -Fu(.)k(T)o(yping)d Fo(C-s)e Fu(searc)o(hes)h(forw)o(ard)e(through)h -(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75 -2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Ft(isearch-terminators)d -Fu(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q -(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Fn(h)p -1301 2642 70 2 v 1301 2670 a Fm(ESC)p 1301 2678 V 1368 -2668 a Fn(i)1402 2670 y Fu(and)e Fo(C-J)f Fu(c)o(haracters)g(will)p -eop -%%Page: 4 6 -4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)h(Library)75 -149 y(terminate)21 b(an)g(incremen)o(tal)i(searc)o(h.)37 -b Fo(C-g)21 b Fu(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f -(and)g(restore)g(the)75 204 y(original)16 b(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i -(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o -(yp)q(e)f Fo(C-r)g Fu(or)g Fo(C-s)g Fu(as)h(appropriate.)k(This)75 -380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i -(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g -(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30 -b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline) -h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10 -b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063 -487 y Fn(h)p 1076 461 76 2 v 1076 489 a Fm(RET)p 1076 -497 V 1149 487 a Fn(i)1174 489 y Fu(will)g(terminate)f(the)g(searc)o(h) -f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g -(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f -(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g -(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g -(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen) -o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f -Fo(C-r)p Fu(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o -(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f -(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75 -774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the) -f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o -(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22 -b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f -(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15 -b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fs(1.3)33 b(Readline)23 -b(Init)h(File)137 1169 y Fu(Although)f(the)g(Readline)h(library)f -(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g -(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e -(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 -b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15 -b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e -Fk(inputrc)k Fu(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 -1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g -(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g -(v)m(ariable)75 1388 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h -(is)g(unset,)f(the)g(default)h(is)g(`)p Ft(~/.inputrc)p -Fu('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline) -h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g -(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574 -y(In)f(addition,)h(the)e Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g -(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 -1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 -1737 y Fj(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 -1832 y Fu(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w) -o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18 -b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d -(a)h(`)p Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22 -b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75 -1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f -([Conditional)h(Init)h(Constructs],)e(page)h(9\).)k(Other)c(lines)75 -1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75 -2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g -(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h -(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f -(the)g Ft(set)g Fu(command)f(within)i(the)f(init)h(\014le.)26 -b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300 -y Ft(set)23 b Fk(v)m(ariable)28 b(v)m(alue)315 2366 y -Fu(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f -(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315 -2421 y(use)g Ft(vi)e Fu(line)j(editing)g(commands:)435 -2484 y Ft(set)23 b(editing-mode)g(vi)315 2549 y Fu(V)l(ariable)c(names) -e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without) -e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g -(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o -(wing)f(v)m(ariables.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 149 y Ft(bell-style)555 204 y Fu(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f -(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Ft(none)p Fu(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 314 y(`)p Ft(visible)p Fu(',)c(Readline)i(uses)g -(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 369 y(`)p Ft(audible)p Fu(')g(\(the)h -(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555 -423 y(b)q(ell.)315 504 y Ft(comment-begin)555 559 y Fu(The)c(string)f -(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g -Ft(insert-)555 614 y(comment)f Fu(command)h(is)h(executed.)21 -b(The)15 b(default)h(v)m(alue)g(is)g Ft("#")p Fu(.)315 -694 y Ft(completion-ignore-case)555 749 y Fu(If)e(set)f(to)g(`)p -Ft(on)p Fu(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f -(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k -(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)315 -884 y Ft(completion-query-items)555 939 y Fu(The)d(n)o(um)o(b)q(er)h -(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f -(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i -(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21 -b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f -(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to) -f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20 -b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger) -h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d -(default)f(limit)i(is)f Ft(100)p Fu(.)315 1294 y Ft(convert-meta)555 -1348 y Fu(If)11 b(set)g(to)g(`)p Ft(on)p Fu(',)f(Readline)i(will)h(con) -o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555 -1403 y(to)f(an)h Fp(asci)q(i)e Fu(k)o(ey)i(sequence)g(b)o(y)g -(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555 -1456 y Fn(h)p 567 1430 70 2 v 567 1458 a Fm(ESC)p 567 -1466 V 634 1456 a Fn(i)666 1458 y Fu(c)o(haracter,)k(con)o(v)o(erting)h -(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555 -1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)315 -1593 y Ft(disable-completion)555 1648 y Fu(If)k(set)f(to)f(`)p -Ft(On)p Fu(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30 -b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g -(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555 -1758 y(to)h Ft(self-insert)p Fu(.)j(The)d(default)h(is)g(`)p -Ft(off)p Fu('.)315 1838 y Ft(editing-mode)555 1893 y -Fu(The)f Ft(editing-mode)d Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h -(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20 -b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i -(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g -(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555 -2058 y(b)q(e)g(set)f(to)f(either)i(`)p Ft(emacs)p Fu(')e(or)h(`)p -Ft(vi)p Fu('.)315 2138 y Ft(enable-keypad)555 2193 y -Fu(When)d(set)f(to)h(`)p Ft(on)p Fu(',)e(Readline)j(will)h(try)d(to)g -(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h -(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g -(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p -Ft(off)p Fu('.)315 2383 y Ft(expand-tilde)555 2438 y -Fu(If)e(set)g(to)f(`)p Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q -(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g -(completion.)21 b(The)15 b(default)h(is)f(`)p Ft(off)p -Fu('.)555 2560 y(If)g(set)g(to)f(`)p Ft(on)p Fu(',)g(the)g(history)h -(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555 -2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g -(with)f Ft(previous-history)e Fu(or)555 2670 y Ft(next-history)p -Fu(.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)h(Library)315 -149 y Ft(horizontal-scroll-mode)555 204 y Fu(This)j(v)m(ariable)g(can)f -(b)q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p -Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p -Fu(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing) -f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i -(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g -(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g -(screen)h(line.)21 b(By)13 b(default,)h(this)555 423 -y(v)m(ariable)j(is)e(set)g(to)g(`)p Ft(off)p Fu('.)315 -506 y Ft(input-meta)555 560 y Fu(If)h(set)f(to)g(`)p -Ft(on)p Fu(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it) -g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c) -o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555 -670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20 -b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33 b(The)555 -725 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for)f(this)i(v) -m(ariable.)315 807 y Ft(isearch-terminators)555 862 y -Fu(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f -(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o -(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555 -971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40 -b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17 -b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247 -1024 y Fn(h)p 1259 998 70 2 v 1259 1026 a Fm(ESC)p 1259 -1034 V 1326 1024 a Fn(i)1357 1026 y Fu(and)g Fo(C-J)f -Fu(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315 -1163 y Ft(keymap)96 b Fu(Sets)19 b(Readline's)i(idea)f(of)f(the)g -(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 -1218 y(mands.)41 b(Acceptable)23 b Ft(keymap)f Fu(names)g(are)f -Ft(emacs)p Fu(,)i Ft(emacs-standard)p Fu(,)555 1273 y -Ft(emacs-meta)p Fu(,)49 b Ft(emacs-ctlx)p Fu(,)g Ft(vi)p -Fu(,)h Ft(vi-move)p Fu(,)f Ft(vi-command)p Fu(,)g(and)555 -1328 y Ft(vi-insert)p Fu(.)31 b Ft(vi)20 b Fu(is)g(equiv)m(alen)o(t)h -(to)e Ft(vi-command)p Fu(;)g Ft(emacs)g Fu(is)h(equiv)m(alen)o(t)555 -1382 y(to)15 b Ft(emacs-standard)p Fu(.)20 b(The)d(default)f(v)m(alue)h -(is)g Ft(emacs)p Fu(.)k(The)16 b(v)m(alue)h(of)f(the)555 -1437 y Ft(editing-mode)e Fu(v)m(ariable)i(also)f(a\013ects)g(the)g -(default)h(k)o(eymap.)315 1519 y Ft(mark-directories)555 -1574 y Fu(If)j(set)g(to)g(`)p Ft(on)p Fu(',)f(completed)i(directory)g -(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629 -y(The)15 b(default)h(is)g(`)p Ft(on)p Fu('.)315 1711 -y Ft(mark-modified-lines)555 1766 y Fu(This)j(v)m(ariable,)g(when)g -(set)e(to)h(`)p Ft(on)p Fu(',)f(causes)h(Readline)h(to)e(displa)o(y)i -(an)f(as-)555 1821 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g -(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q -(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p -Fu(')e(b)o(y)h(default.)315 1958 y Ft(mark-symlinked-directories)555 -2012 y Fu(If)23 b(set)f(to)f(`)p Ft(on)p Fu(',)i(completed)g(names)g -(whic)o(h)g(are)f(sym)o(b)q(olic)i(links)f(to)f(di-)555 -2067 y(rectories)h(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(\(sub)s(ject) -e(to)f(the)i(v)m(alue)g(of)f Ft(mark-)555 2122 y(directories)p -Fu(\).)18 b(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 -2204 y Ft(match-hidden-files)555 2259 y Fu(This)c(v)m(ariable,)h(when)e -(set)g(to)g(`)p Ft(on)p Fu(',)f(causes)h(Readline)i(to)d(matc)o(h)h -(\014les)h(whose)555 2314 y(names)22 b(b)q(egin)h(with)g(a)e(`)p -Ft(.)p Fu(')h(\(hidden)h(\014les\))g(when)f(p)q(erforming)h(\014lename) -555 2369 y(completion,)g(unless)f(the)f(leading)h(`)p -Ft(.)p Fu(')e(is)h(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555 -2423 y(\014lename)16 b(to)f(b)q(e)h(completed.)21 b(This)15 -b(v)m(ariable)i(is)f(`)p Ft(on)p Fu(')e(b)o(y)h(default.)315 -2506 y Ft(output-meta)555 2560 y Fu(If)j(set)f(to)g(`)p -Ft(on)p Fu(',)g(Readline)i(will)h(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 2615 y(set)g(directly)i(rather)d(than)h(as)g -(a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555 -2670 y(default)16 b(is)f(`)p Ft(off)p Fu('.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 149 y Ft(page-completions)555 204 y Fu(If)17 -b(set)g(to)f(`)p Ft(on)p Fu(',)g(Readline)i(uses)g(an)e(in)o(ternal)i -Ft(more)p Fu(-lik)o(e)g(pager)f(to)f(displa)o(y)555 259 -y(a)g(screenful)h(of)f(p)q(ossible)i(completions)f(at)f(a)g(time.)23 -b(This)17 b(v)m(ariable)g(is)g(`)p Ft(on)p Fu(')555 314 -y(b)o(y)e(default.)315 395 y Ft(print-completions-horizont)o(ally)555 -450 y Fu(If)d(set)g(to)f(`)p Ft(on)p Fu(',)h(Readline)h(will)g(displa)o -(y)h(completions)f(with)f(matc)o(hes)f(sorted)555 505 -y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e(than)g -(do)o(wn)h(the)g(screen.)555 560 y(The)15 b(default)h(is)g(`)p -Ft(off)p Fu('.)315 641 y Ft(show-all-if-ambiguous)555 -696 y Fu(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h -(completion)h(functions.)21 b(If)15 b(set)555 751 y(to)e(`)p -Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h -(p)q(ossible)i(completion)f(cause)555 806 y(the)20 b(matc)o(hes)f(to)f -(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q -(ell.)555 861 y(The)c(default)h(v)m(alue)h(is)e(`)p Ft(off)p -Fu('.)315 942 y Ft(visible-stats)555 997 y Fu(If)h(set)g(to)f(`)p -Ft(on)p Fu(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q -(e)f(is)g(app)q(ended)i(to)d(the)555 1052 y(\014lename)h(when)g -(listing)h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p -Ft(off)p Fu('.)75 1133 y(Key)h(Bindings)315 1188 y(The)21 -b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f -(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315 -1243 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f -(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315 -1298 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g -(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315 -1353 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q -(es.)315 1421 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g -(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315 -1476 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e -(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315 -1530 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g -(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315 -1585 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most) -e(comfortable.)315 1653 y(In)19 b(addition)g(to)e(command)h(names,)g -(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h -(string)315 1708 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h -(pressed)g(\(a)e Fk(macro)r Fu(\).)315 1790 y Fk(k)o(eyname)s -Fu(:)19 b Fk(function-name)g Fu(or)c Fk(macro)555 1845 -y(k)o(eyname)i Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out) -d(in)h(English.)21 b(F)l(or)13 b(example:)675 1910 y -Ft(Control-u:)22 b(universal-argument)675 1962 y(Meta-Rubout:)g -(backward-kill-word)675 2014 y(Control-o:)g(">)i(output")555 -2082 y Fu(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fo(C-u)e -Fu(is)h(b)q(ound)g(to)f(the)g(function)h Ft(universal-)555 -2137 y(argument)p Fu(,)e Fo(M-DEL)h Fu(is)g(b)q(ound)h(to)e(the)h -(function)h Ft(backward-kill-word)p Fu(,)555 2191 y(and)g -Fo(C-o)f Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g -(the)f(righ)o(t)h(hand)555 2246 y(side)c(\(that)e(is,)i(to)e(insert)i -(the)f(text)g(`)p Ft(>)f(output)p Fu(')g(in)o(to)i(the)f(line\).)555 -2314 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e -(names)g(are)g(recognized)i(while)g(pro-)555 2369 y(cessing)13 -b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fk(DEL)p -Fu(,)11 b Fk(ESC)p Fu(,)h Fk(ESCAPE)p Fu(,)f Fk(LFD)p -Fu(,)g Fk(NEW-)555 2424 y(LINE)p Fu(,)16 b Fk(RET)p Fu(,)e -Fk(RETURN)p Fu(,)f Fk(R)o(UBOUT)p Fu(,)i Fk(SP)l(A)o(CE)p -Fu(,)g Fk(SPC)p Fu(,)f(and)i Fk(T)l(AB)p Fu(.)315 2506 -y Ft(")p Fk(k)o(eyseq)q Ft(")p Fu(:)k Fk(function-name)e -Fu(or)d Fk(macro)555 2560 y(k)o(eyseq)i Fu(di\013ers)e(from)g -Fk(k)o(eyname)j Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g -(an)f(en-)555 2615 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q -(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 -2670 y(double)e(quotes.)j(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey) -g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)h(Library)555 -149 y(in)i(the)f(follo)o(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o -(haracter)d(names)h(are)f(not)555 204 y(recognized.)675 -270 y Ft("\\C-u":)23 b(universal-argument)675 322 y("\\C-x\\C-r":)f -(re-read-init-file)675 373 y("\\e[11~":)h("Function)f(Key)i(1")555 -442 y Fu(In)33 b(the)f(ab)q(o)o(v)o(e)g(example,)37 b -Fo(C-u)32 b Fu(is)h(again)f(b)q(ound)h(to)f(the)g(function)555 -497 y Ft(universal-argument)19 b Fu(\(just)j(as)f(it)h(w)o(as)f(in)i -(the)f(\014rst)f(example\),)j(`)p Fo(C-x)555 551 y(C-r)p -Fu(')c(is)h(b)q(ound)g(to)f(the)h(function)g Ft(re-read-init-file)p -Fu(,)f(and)g(`)1731 549 y Fn(h)p 1743 523 70 2 v 1743 -551 a Fm(ESC)p 1743 559 V 1810 549 a Fn(i)15 b(h)p 1852 -523 10 2 v 1852 551 a Fm([)p 1852 560 V 1860 549 a Fn(i)555 -604 y(h)p 567 578 18 2 v 567 606 a Fm(1)p 567 614 V 583 -604 a Fn(i)g(h)p 625 578 V 625 606 a Fm(1)p 625 614 V -640 604 a Fn(i)g(h)p 683 578 24 2 v 683 606 a Ft(~)p -683 614 V 704 604 a Fn(i)719 606 y Fu(')g(is)h(b)q(ound)g(to)e(insert)i -(the)f(text)g(`)p Ft(Function)f(Key)g(1)p Fu('.)315 688 -y(The)h(follo)o(wing)h Fp(gnu)e Fu(Emacs)h(st)o(yle)g(escap)q(e)h -(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315 -743 y(k)o(ey)g(sequences:)315 825 y Fo(\\C-)168 b Fu(con)o(trol)15 -b(pre\014x)315 907 y Fo(\\M-)168 b Fu(meta)15 b(pre\014x)315 -989 y Fo(\\e)192 b Fu(an)15 b(escap)q(e)h(c)o(haracter)315 -1071 y Fo(\\\\)192 b Fu(bac)o(kslash)315 1152 y Fo(\\)p -Ft(")555 1150 y Fn(h)p 567 1124 V 567 1152 a Ft(")p 567 -1160 V 589 1150 a Fn(i)604 1152 y Fu(,)15 b(a)f(double)j(quotation)e -(mark)315 1234 y Fo(\\')555 1232 y Fn(h)p 567 1206 10 -2 v 567 1234 a Fm(')p 567 1242 V 575 1232 a Fn(i)590 -1234 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 -1316 y(In)f(addition)h(to)f(the)f Fp(gnu)h Fu(Emacs)g(st)o(yle)f(escap) -q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315 -1371 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 1453 y -Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 1535 y Ft(\\b)192 -b Fu(bac)o(kspace)315 1617 y Ft(\\d)g Fu(delete)315 1699 -y Ft(\\f)g Fu(form)14 b(feed)315 1781 y Ft(\\n)192 b -Fu(newline)315 1862 y Ft(\\r)g Fu(carriage)15 b(return)315 -1944 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 2026 -y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 2108 y Ft(\\)p -Fk(nnn)141 b Fu(the)17 b(eigh)o(t-bit)h(c)o(haracter)f(whose)g(v)m -(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i Fk(nnn)f Fu(\(one)f(to)555 -2163 y(three)e(digits\))315 2245 y Ft(\\x)p Fk(HH)124 -b Fu(the)20 b(eigh)o(t-bit)g(c)o(haracter)f(whose)h(v)m(alue)h(is)f -(the)g(hexadecimal)h(v)m(alue)g Fk(HH)555 2300 y Fu(\(one)15 -b(or)g(t)o(w)o(o)f(hex)h(digits\))315 2382 y(When)k(en)o(tering)g(the)g -(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o(ust)f(b)q -(e)h(used)h(to)315 2436 y(indicate)12 b(a)f(macro)f(de\014nition.)20 -b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i -(name.)18 b(In)315 2491 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o -(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.) -20 b(Bac)o(kslash)315 2546 y(will)i(quote)d(an)o(y)h(other)g(c)o -(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p -Ft(")p Fu(')c(and)h(`)p Ft(')p Fu('.)34 b(F)l(or)315 -2601 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`) -p Fo(C-x)i Ft(\\)p Fu(')f(insert)g(a)g(single)h(`)p Ft(\\)p -Fu(')e(in)o(to)h(the)g(line:)435 2666 y Ft("\\C-x\\\\":)23 -b("\\\\")p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)75 149 y Fj(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -246 y Fu(Readline)f(implemen)o(ts)g(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -301 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g -(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f -(as)75 355 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g -(directiv)o(es)h(used.)75 435 y Ft($if)168 b Fu(The)16 -b Ft($if)f Fu(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g -(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 490 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315 545 -y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f -(are)h(required)i(to)d(isolate)i(it.)315 624 y Ft(mode)144 -b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h Ft($if)f -Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555 -679 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20 -b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555 -734 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Ft(emacs-)555 789 y(standard)d -Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)g(is)g -(starting)f(out)555 844 y(in)k Ft(emacs)f Fu(mo)q(de.)315 -923 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h -(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555 -978 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j -(output)e(b)o(y)g(the)g(terminal's)555 1033 y(function)13 -b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g -(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 1088 -y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q -(ortion)h(of)e(the)h(terminal)555 1142 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g -Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555 -1197 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 1277 y -Ft(application)555 1332 y Fu(The)d Fk(application)i Fu(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -1386 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i -(library)f(sets)f(the)g Fk(application)555 1441 y(name)p -Fu(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20 -b(This)12 b(could)h(b)q(e)f(used)h(to)555 1496 y(bind)18 -b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)g(sp)q -(eci\014c)i(program.)23 b(F)l(or)555 1551 y(instance,)17 -b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f -(quotes)555 1606 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j -(Bash:)675 1670 y Ft($if)23 b(Bash)675 1722 y(#)h(Quote)f(the)g -(current)g(or)h(previous)f(word)675 1774 y("\\C-xq":)g -("\\eb\\"\\ef\\"")675 1826 y($endif)75 1905 y($endif)96 -b Fu(This)16 b(command,)e(as)h(seen)h(in)g(the)f(previous)h(example,)g -(terminates)f(an)g Ft($if)f Fu(command.)75 1985 y Ft($else)120 -b Fu(Commands)15 b(in)h(this)f(branc)o(h)h(of)e(the)i -Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g(fails.)75 -2065 y Ft($include)48 b Fu(This)22 b(directiv)o(e)h(tak)o(es)e(a)h -(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f(commands) -315 2120 y(and)e(bindings)j(from)c(that)h(\014le.)33 -b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e -(from)315 2174 y(`)p Ft(/etc/inputrc)p Fu(':)435 2239 -y Ft($include)k(/etc/inputrc)75 2351 y Fj(1.3.3)30 b(Sample)20 -b(Init)h(File)137 2447 y Fu(Here)16 b(is)g(an)f(example)h(of)f(an)g -Fk(inputrc)k Fu(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i -(v)m(ariable)f(assignmen)o(t,)75 2502 y(and)f(conditional)i(syn)o(tax.) -p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)h(Library)195 -201 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(GNU) -f(Readline)g(library.)47 b(Existing)195 305 y(#)24 b(programs)e -(include)h(FTP,)h(Bash,)f(and)g(GDB.)195 357 y(#)195 -409 y(#)h(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h(C-x)f -(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h(comments.) -195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g(systemwide)g -(bindings)f(and)i(variable)195 616 y(#)g(assignments)e(from)h -(/etc/Inputrc)195 668 y($include)g(/etc/Inputrc)195 772 -y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)195 -928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195 -1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v -195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195 -1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g -(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195 -1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195 -1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g -(previous-history)195 1914 y("\\M-[B":)g(next-history)195 -1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g -(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195 -2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g -(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p -eop -%%Page: 11 13 -11 12 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 201 y Ft(C-q:)23 b(quoted-insert)195 305 y($endif)195 -409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h -(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g -(are)h(convenient)e(for)h(shell)h(interaction)195 616 -y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720 -y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 -772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)195 -824 y(#)g(insert)f(open)g(and)h(close)f(double)g(quotes)195 -876 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g(quote)195 -928 y("\\C-x\\"":)g("\\"\\"\\C-b")195 980 y(#)h(insert)f(a)g(backslash) -g(\(testing)g(backslash)g(escapes)195 1032 y(#)h(in)f(sequences)g(and)g -(macros\))195 1083 y("\\C-x\\\\":)g("\\\\")195 1135 y(#)h(Quote)f(the)g -(current)g(or)h(previous)f(word)195 1187 y("\\C-xq":)g -("\\eb\\"\\ef\\"")195 1239 y(#)h(Add)f(a)h(binding)f(to)g(refresh)g -(the)h(line,)f(which)g(is)h(unbound)195 1291 y("\\C-xr":)f -(redraw-current-line)195 1343 y(#)h(Edit)f(variable)g(on)g(current)g -(line.)195 1395 y("\\M-\\C-v":)f("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=) -o(")195 1447 y($endif)195 1550 y(#)i(use)f(a)h(visible)f(bell)g(if)h -(one)f(is)h(available)195 1602 y(set)f(bell-style)g(visible)195 -1706 y(#)h(don't)f(strip)g(characters)g(to)g(7)h(bits)f(when)h(reading) -195 1758 y(set)f(input-meta)g(on)195 1862 y(#)h(allow)f(iso-latin1)f -(characters)h(to)g(be)h(inserted)f(rather)195 1914 y(#)h(than)f -(converted)g(to)g(prefix-meta)g(sequences)195 1966 y(set)g -(convert-meta)g(off)195 2069 y(#)h(display)f(characters)f(with)h(the)h -(eighth)f(bit)g(set)h(directly)195 2121 y(#)g(rather)f(than)g(as)h -(meta-prefixed)e(characters)195 2173 y(set)h(output-meta)g(on)195 -2277 y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g -(completions)f(for)195 2329 y(#)i(a)f(word,)h(ask)f(the)h(user)f(if)g -(he)h(wants)f(to)h(see)f(all)h(of)f(them)195 2381 y(set)g -(completion-query-items)e(150)195 2484 y(#)j(For)f(FTP)195 -2536 y($if)g(Ftp)195 2588 y("\\C-xg":)g("get)g(\\M-?")195 -2640 y("\\C-xt":)g("put)g(\\M-?")p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Ft("\\M-.":)23 b(yank-last-arg)195 201 y($endif)75 -329 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -425 y Fu(This)17 b(section)f(describ)q(es)h(Readline)g(commands)f(that) -e(ma)o(y)h(b)q(e)i(b)q(ound)f(to)f(k)o(ey)h(sequences.)22 -b(Com-)75 480 y(mand)15 b(names)g(without)h(an)f(accompan)o(ying)g(k)o -(ey)g(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)f(default.)137 -547 y(In)f(the)f(follo)o(wing)h(descriptions,)h Fk(p)q(oin)o(t)f -Fu(refers)f(to)g(the)g(curren)o(t)g(cursor)f(p)q(osition,)j(and)e -Fk(mark)i Fu(refers)75 601 y(to)k(a)g(cursor)g(p)q(osition)h(sa)o(v)o -(ed)f(b)o(y)h(the)f Ft(set-mark)g Fu(command.)32 b(The)20 -b(text)f(b)q(et)o(w)o(een)g(the)h(p)q(oin)o(t)g(and)75 -656 y(mark)15 b(is)g(referred)h(to)e(as)h(the)g Fk(region)p -Fu(.)75 767 y Fj(1.4.1)30 b(Commands)21 b(F)-5 b(or)19 -b(Mo)n(ving)75 888 y Ft(beginning-of-line)13 b(\(C-a\))315 -942 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g(curren)o(t)g(line.) -75 1034 y Ft(end-of-line)f(\(C-e\))315 1088 y Fu(Mo)o(v)o(e)g(to)h(the) -g(end)h(of)f(the)g(line.)75 1179 y Ft(forward-char)f(\(C-f\))315 -1234 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)75 -1325 y Ft(backward-char)e(\(C-b\))315 1380 y Fu(Mo)o(v)o(e)h(bac)o(k)h -(a)g(c)o(haracter.)75 1471 y Ft(forward-word)f(\(M-f\))315 -1526 y Fu(Mo)o(v)o(e)g(forw)o(ard)g(to)g(the)i(end)g(of)e(the)h(next)h -(w)o(ord.)j(W)l(ords)c(are)f(comp)q(osed)i(of)f(letters)g(and)315 -1581 y(digits.)75 1672 y Ft(backward-word)e(\(M-b\))315 -1727 y Fu(Mo)o(v)o(e)j(bac)o(k)g(to)h(the)f(start)g(of)g(the)h(curren)o -(t)g(or)f(previous)i(w)o(ord.)24 b(W)l(ords)16 b(are)h(comp)q(osed)315 -1782 y(of)e(letters)g(and)g(digits.)75 1873 y Ft(clear-screen)f -(\(C-l\))315 1928 y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g -(curren)o(t)g(line,)i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g -(top)315 1982 y(of)i(the)g(screen.)75 2074 y Ft(redraw-current-line)e -(\(\))315 2128 y Fu(Refresh)i(the)g(curren)o(t)g(line.)22 -b(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2239 -y Fj(1.4.2)30 b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f -(History)75 2360 y Ft(accept-line)14 b(\(Newline)g(or)h(Return\))315 -2414 y Fu(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor) -f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315 -2469 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g -(future)g(recall)h(with)f Ft(add_history\(\))p Fu(.)k(If)d(this)315 -2524 y(line)g(is)f(a)e(mo)q(di\014ed)j(history)e(line,)i(the)e(history) -g(line)i(is)f(restored)e(to)h(its)g(original)i(state.)75 -2615 y Ft(previous-history)c(\(C-p\))315 2670 y Fu(Mo)o(v)o(e)h(`bac)o -(k')h(through)f(the)i(history)f(list,)g(fetc)o(hing)h(the)f(previous)h -(command.)p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 149 y Ft(next-history)14 b(\(C-n\))315 204 y -Fu(Mo)o(v)o(e)g(`forw)o(ard')f(through)i(the)h(history)f(list,)g(fetc)o -(hing)h(the)f(next)h(command.)75 307 y Ft(beginning-of-history)c -(\(M-<\))315 362 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f -(the)f(history)l(.)75 465 y Ft(end-of-history)e(\(M->\))315 -520 y Fu(Mo)o(v)o(e)h(to)h(the)g(end)h(of)f(the)g(input)h(history)l(,)f -(i.e.,)g(the)g(line)i(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 -624 y Ft(reverse-search-history)c(\(C-r\))315 678 y Fu(Searc)o(h)k(bac) -o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving) -h(`up')f(through)g(the)h(his-)315 733 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 836 -y Ft(forward-search-history)c(\(C-s\))315 891 y Fu(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 946 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 1049 -y Ft(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -1104 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o -(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -1159 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1214 -y(user.)75 1317 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1372 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1426 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1481 y(user.)75 1584 y Ft(history-search-forward)f(\(\))315 -1639 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1694 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1749 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1852 y Ft(history-search-backward)c(\(\))315 1907 y Fu(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1962 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -2016 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -2120 y Ft(yank-nth-arg)e(\(M-C-y\))315 2174 y Fu(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 2229 y(the)j(previous)h(line\))g(at)e -(p)q(oin)o(t.)21 b(With)15 b(an)g(argumen)o(t)f Fk(n)p -Fu(,)h(insert)g(the)g Fk(n)p Fu(th)g(w)o(ord)g(from)f(the)315 -2284 y(previous)g(command)g(\(the)f(w)o(ords)f(in)j(the)e(previous)i -(command)e(b)q(egin)i(with)e(w)o(ord)g(0\).)19 b(A)315 -2339 y(negativ)o(e)13 b(argumen)o(t)f(inserts)h(the)g -Fk(n)p Fu(th)g(w)o(ord)f(from)g(the)h(end)h(of)e(the)h(previous)g -(command.)75 2442 y Ft(yank-last-arg)g(\(M-.)i(or)g(M-_\))315 -2497 y Fu(Insert)j(last)f(argumen)o(t)g(to)g(the)g(previous)i(command)e -(\(the)g(last)h(w)o(ord)f(of)g(the)g(previous)315 2552 -y(history)e(en)o(try\).)20 b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v) -o(e)g(exactly)h(lik)o(e)g Ft(yank-nth-arg)p Fu(.)j(Succes-)315 -2606 y(siv)o(e)f(calls)g(to)f Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o -(k)g(through)g(the)g(history)g(list,)i(inserting)f(the)315 -2661 y(last)d(argumen)o(t)g(of)f(eac)o(h)i(line)g(in)g(turn.)p -eop -%%Page: 14 16 -14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fj(1.4.3)30 b(Commands)21 b(F)-5 b(or)19 b(Changing)i(T)-5 -b(ext)75 286 y Ft(delete-char)14 b(\(C-d\))315 341 y -Fu(Delete)20 b(the)g(c)o(haracter)e(at)h(p)q(oin)o(t.)33 -b(If)20 b(p)q(oin)o(t)g(is)g(at)e(the)i(b)q(eginning)i(of)d(the)g -(line,)j(there)315 396 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j -(and)e(the)f(last)h(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q -(ound)i(to)315 450 y Ft(delete-char)p Fu(,)13 b(then)j(return)f -Fp(eof)p Fu(.)75 552 y Ft(backward-delete-char)d(\(Rubout\))315 -607 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c -(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 -661 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -763 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315 -818 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h -(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315 -872 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h -(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315 -927 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 1029 -y Ft(quoted-insert)e(\(C-q)i(or)g(C-v\))315 1083 y Fu(Add)j(the)f(next) -g(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26 -b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 1138 -y(sequences)f(lik)o(e)h Fo(C-q)p Fu(,)d(for)h(example.)75 -1240 y Ft(tab-insert)f(\(M-)401 1238 y Fn(h)p 412 1212 -74 2 v 412 1240 a Fm(T)m(AB)p 412 1247 V 484 1238 a Fn(i)499 -1240 y Ft(\))315 1294 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 -1396 y Ft(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315 -1451 y Fu(Insert)g(y)o(ourself.)75 1552 y Ft(transpose-chars)e(\(C-t\)) -315 1607 y Fu(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e -(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315 -1662 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28 -b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e -(the)315 1716 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o -(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11 -b(argumen)o(ts)315 1771 y(ha)o(v)o(e)k(no)g(e\013ect.)75 -1873 y Ft(transpose-words)e(\(M-t\))315 1927 y Fu(Drag)i(the)h(w)o(ord) -g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o -(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1982 -y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e -(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the) -315 2037 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75 -2138 y Ft(upcase-word)f(\(M-u\))315 2193 y Fu(Upp)q(ercase)j(the)f -(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16 -b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 2248 -y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the) -i(cursor.)75 2349 y Ft(downcase-word)d(\(M-l\))315 2404 -y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o -(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase) -315 2459 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)75 2560 y Ft(capitalize-word)e(\(M-c\))315 -2615 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o -(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315 -2670 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 149 y Ft(overwrite-mode)13 b(\(\))315 204 y Fu(T)l(oggle)j(o)o -(v)o(erwrite)g(mo)q(de.)24 b(With)17 b(an)f(explicit)j(p)q(ositiv)o(e)f -(n)o(umeric)f(argumen)o(t,)f(switc)o(hes)315 259 y(to)10 -b(o)o(v)o(erwrite)g(mo)q(de.)19 b(With)11 b(an)g(explicit)i(non-p)q -(ositiv)o(e)f(n)o(umeric)g(argumen)o(t,)e(switc)o(hes)i(to)315 -314 y(insert)k(mo)q(de.)k(This)c(command)f(a\013ects)g(only)h -Ft(emacs)e Fu(mo)q(de;)h Ft(vi)g Fu(mo)q(de)h(do)q(es)g(o)o(v)o -(erwrite)315 369 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15 -b(call)h(to)f Ft(readline\(\))f Fu(starts)f(in)k(insert)e(mo)q(de.)315 -436 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f -Ft(self-insert)f Fu(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315 -491 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 -b(Characters)20 b(b)q(ound)i(to)e Ft(backward-)315 546 -y(delete-char)14 b Fu(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q -(oin)o(t)h(with)f(a)g(space.)315 614 y(By)g(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 729 y Fj(1.4.4)30 b(Killing)20 -b(And)h(Y)-5 b(anking)75 853 y Ft(kill-line)14 b(\(C-k\))315 -908 y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 1002 y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 -1057 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 1151 y Ft(unix-line-discard)e(\(C-u\))315 1205 -y Fu(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1299 y Ft(kill-whole-line) -e(\(\))315 1354 y Fu(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) -o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29 -b(By)19 b(default,)315 1409 y(this)d(is)f(un)o(b)q(ound.)75 -1503 y Ft(kill-word)f(\(M-d\))315 1558 y Fu(Kill)j(from)d(p)q(oin)o(t)h -(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o -(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1613 y(of)h(the)g(next)g(w)o -(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Ft(forward-word)p Fu(.)75 1707 y Ft(backward-kill-word)e(\(M-)592 -1705 y Fn(h)p 603 1679 73 2 v 603 1707 a Fm(DEL)p 603 -1714 V 674 1705 a Fn(i)689 1707 y Ft(\))315 1761 y Fu(Kill)k(the)d(w)o -(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f -(the)h(same)f(as)g Ft(backward-word)p Fu(.)75 1855 y -Ft(unix-word-rubout)f(\(C-w\))315 1910 y Fu(Kill)18 b(the)e(w)o(ord)f -(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g -(b)q(oundary)l(.)23 b(The)16 b(killed)315 1965 y(text)f(is)g(sa)o(v)o -(ed)g(on)g(the)h(kill-ring.)75 2059 y Ft(delete-horizontal-space)c -(\(\))315 2114 y Fu(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q -(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 -2208 y Ft(kill-region)e(\(\))315 2263 y Fu(Kill)j(the)f(text)e(in)i -(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 2357 y Ft(copy-region-as-kill)d(\(\))315 -2412 y Fu(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 2466 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 2560 y Ft(copy-backward-word)d(\(\))315 2615 -y Fu(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -2670 y(same)c(as)g Ft(backward-word)p Fu(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Ft(copy-forward-word)d(\(\))315 204 y Fu(Cop)o(y)i(the)h(w)o(ord) -e(follo)o(wing)j(p)q(oin)o(t)f(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o -(ord)f(b)q(oundaries)i(are)e(the)315 259 y(same)g(as)g -Ft(forward-word)p Fu(.)j(By)d(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 342 y Ft(yank)f(\(C-y\))315 397 y Fu(Y)l(ank)g(the)h(top)f -(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.) -75 481 y Ft(yank-pop)g(\(M-y\))315 535 y Fu(Rotate)i(the)h(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 590 y(command)d(is)h Ft(yank)e -Fu(or)h Ft(yank-pop)p Fu(.)75 693 y Fj(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 806 y Ft(digit-argument)13 -b(\()p Fo(M-0)p Ft(,)i Fo(M-1)p Ft(,)f(...)h Fo(M--)p -Ft(\))315 861 y Fu(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e -(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315 -915 y Fo(M--)h Fu(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75 -999 y Ft(universal-argument)e(\(\))315 1054 y Fu(This)g(is)h(another)e -(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -1108 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o -(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 -1163 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Ft(universal-argument)315 1218 -y Fu(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h -(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -1273 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) -f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 -1328 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h -(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -1382 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f -(executing)i(this)f(function)h(the)e(\014rst)h(time)315 -1437 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g -(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -1492 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1595 y Fj(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 1708 y Ft(complete)14 b(\()305 1706 y Fn(h)p -317 1680 74 2 v 317 1708 a Fm(T)m(AB)p 317 1715 V 389 -1706 a Fn(i)404 1708 y Ft(\))315 1762 y Fu(A)o(ttempt)c(to)h(p)q -(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 1817 y(p)q(erformed)j(is)h -(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1901 y Ft(possible-completions)c(\(M-?\))315 -1955 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(p)q(oin)o(t.)75 2039 y Ft(insert-completions)d(\(M-*\))315 -2093 y Fu(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) -q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -2148 y(b)o(y)f Ft(possible-completions)p Fu(.)75 2232 -y Ft(menu-complete)e(\(\))315 2286 y Fu(Similar)g(to)f -Ft(complete)p Fu(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 2341 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19 -b(execution)h(of)f Ft(menu-complete)315 2396 y Fu(steps)h(through)g -(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 2451 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f -(the)i(setting)315 2506 y(of)f Ft(bell-style)p Fu(\))e(and)i(the)g -(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g -Fk(n)i Fu(mo)o(v)o(es)e Fk(n)315 2560 y Fu(p)q(ositions)h(forw)o(ard)e -(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g -(ma)o(y)g(b)q(e)h(used)g(to)315 2615 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h -(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)315 2668 y Fn(h)p 327 2642 V 327 -2670 a Fm(T)m(AB)p 327 2678 V 399 2668 a Fn(i)414 2670 -y Fu(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)p -eop -%%Page: 17 19 -17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Ft(delete-char-or-list)13 b(\(\))315 204 -y Fu(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h(not)f -(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315 -259 y(\(lik)o(e)i Ft(delete-char)p Fu(\).)j(If)d(at)f(the)h(end)g(of)f -(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d -Ft(possible-)315 314 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 428 y Fj(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 551 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 -606 y Fu(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o -(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 699 -y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 754 y Fu(Stop)f(sa)o(ving)f(the)h -(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q -(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 809 y(de\014nition.)75 -902 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 957 y -Fu(Re-execute)k(the)g(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i(b)o -(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 1012 -y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o(eyb)q -(oard.)75 1126 y Fj(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -1249 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 1304 -y Fu(Read)d(in)g(the)g(con)o(ten)o(ts)g(of)f(the)h Fk(inputrc)k -Fu(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 1358 y(assignmen)o(ts)k(found)h(there.)75 -1452 y Ft(abort)e(\(C-g\))315 1507 y Fu(Ab)q(ort)f(the)g(curren)o(t)h -(editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s -(ject)e(to)g(the)315 1561 y(setting)i(of)g Ft(bell-style)p -Fu(\).)75 1655 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fk(x)p Ft(,)h(...\))315 1710 y Fu(If)f(the)g(meta\014ed)g(c)o(haracter) -f Fk(x)k Fu(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g -(b)q(ound)h(to)e(the)315 1764 y(corresp)q(onding)j(upp)q(ercase)g(c)o -(haracter.)75 1858 y Ft(prefix-meta)e(\()377 1856 y Fn(h)p -389 1830 70 2 v 389 1858 a Fm(ESC)p 389 1866 V 456 1856 -a Fn(i)471 1858 y Ft(\))315 1913 y Fu(Metafy)k(the)h(next)g(c)o -(haracter)f(t)o(yp)q(ed.)30 b(This)20 b(is)f(for)f(k)o(eyb)q(oards)h -(without)g(a)f(meta)g(k)o(ey)l(.)315 1968 y(T)o(yping)e(`)485 -1966 y Fn(h)p 496 1939 V 496 1968 a Fm(ESC)p 496 1975 -V 563 1966 a Fn(i)593 1968 y Ft(f)p Fu(')f(is)h(equiv)m(alen)o(t)h(to)d -(t)o(yping)i Fo(M-f)p Fu(.)75 2061 y Ft(undo)f(\(C-_)f(or)h(C-x)g -(C-u\))315 2116 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 2209 y Ft(revert-line)f(\(M-r\))315 -2264 y Fu(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26 -b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Ft(undo)f -Fu(command)315 2319 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 2412 y Ft(tilde-expand)f(\(M-~\))315 -2467 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 2560 y Ft(set-mark)f(\(C-@\))315 2615 y Fu(Set)i(the)h(mark)f -(to)f(the)i(p)q(oin)o(t.)24 b(If)17 b(a)f(n)o(umeric)h(argumen)o(t)f -(is)g(supplied,)j(the)e(mark)e(is)i(set)315 2670 y(to)e(that)f(p)q -(osition.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Ft(exchange-point-and-mark)c(\(C-x)j(C-x\))315 -204 y Fu(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k(The)c -(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o(v)o(ed) -315 259 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q(osition)h(is)g -(sa)o(v)o(ed)f(as)g(the)g(mark.)75 347 y Ft(character-search)e(\(C-]\)) -315 402 y Fu(A)f(c)o(haracter)g(is)h(read)g(and)f(p)q(oin)o(t)h(is)g -(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q(ccurrence)g(of)f(that)g(c)o -(haracter.)315 456 y(A)j(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f -(previous)i(o)q(ccurrences.)75 544 y Ft(character-search-backward)c -(\(M-C-]\))315 599 y Fu(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q -(oin)o(t)g(is)g(mo)o(v)o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of) -e(that)315 654 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o -(hes)g(for)f(subsequen)o(t)i(o)q(ccurrences.)75 741 y -Ft(insert-comment)d(\(M-#\))315 796 y Fu(Without)18 b(a)f(n)o(umeric)i -(argumen)o(t,)e(the)h(v)m(alue)h(of)f(the)f Ft(comment-begin)f -Fu(v)m(ariable)k(is)e(in-)315 851 y(serted)e(at)f(the)h(b)q(eginning)i -(of)d(the)h(curren)o(t)g(line.)23 b(If)16 b(a)g(n)o(umeric)h(argumen)o -(t)e(is)h(supplied,)315 906 y(this)j(command)f(acts)g(as)f(a)h(toggle:) -26 b(if)19 b(the)f(c)o(haracters)g(at)f(the)i(b)q(eginning)h(of)e(the)g -(line)315 960 y(do)d(not)g(matc)o(h)g(the)g(v)m(alue)i(of)e -Ft(comment-begin)p Fu(,)e(the)i(v)m(alue)i(is)f(inserted,)f(otherwise)h -(the)315 1015 y(c)o(haracters)j(in)i Ft(comment-begin)d -Fu(are)i(deleted)i(from)d(the)h(b)q(eginning)i(of)e(the)g(line.)36 -b(In)315 1070 y(either)16 b(case,)f(the)g(line)i(is)f(accepted)f(as)g -(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)75 1158 -y Ft(dump-functions)c(\(\))315 1213 y Fu(Prin)o(t)g(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)g -(output)f(stream.)315 1267 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i -(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o -(y)f(that)315 1322 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Fk(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1410 y Ft(dump-variables)e(\(\))315 -1465 y Fu(Prin)o(t)e(all)g(of)f(the)h(settable)g(v)m(ariables)h(and)f -(their)g(v)m(alues)h(to)e(the)h(Readline)h(output)e(stream.)315 -1519 y(If)16 b(a)g(n)o(umeric)g(argumen)o(t)f(is)i(supplied,)h(the)e -(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 -1574 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g Fk(inputrc)k -Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.) -75 1662 y Ft(dump-macros)f(\(\))315 1717 y Fu(Prin)o(t)j(all)h(of)e -(the)h(Readline)h(k)o(ey)f(sequences)h(b)q(ound)g(to)e(macros)g(and)h -(the)g(strings)g(they)315 1771 y(output.)26 b(If)18 b(a)f(n)o(umeric)h -(argumen)o(t)f(is)h(supplied,)i(the)d(output)g(is)h(formatted)e(in)j -(suc)o(h)e(a)315 1826 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g -(part)g(of)f(an)h Fk(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h -(un)o(b)q(ound)g(b)o(y)315 1881 y(default.)75 1969 y -Ft(emacs-editing-mode)d(\(C-e\))315 2024 y Fu(When)j(in)g -Ft(vi)e Fu(command)i(mo)q(de,)f(this)g(causes)h(a)f(switc)o(h)g(to)g -Ft(emacs)f Fu(editing)j(mo)q(de.)75 2111 y Ft(vi-editing-mode)c -(\(M-C-j\))315 2166 y Fu(When)j(in)g Ft(emacs)e Fu(editing)j(mo)q(de,)e -(this)g(causes)h(a)f(switc)o(h)g(to)g Ft(vi)f Fu(editing)j(mo)q(de.)75 -2290 y Fs(1.5)33 b(Readline)23 b(vi)h(Mo)r(de)137 2385 -y Fu(While)13 b(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o(e)f -(a)h(full)h(set)f(of)f Ft(vi)g Fu(editing)j(functions,)f(it)f(do)q(es)g -(con)o(tain)75 2440 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h -(of)d(the)i(line.)27 b(The)17 b(Readline)h Ft(vi)f Fu(mo)q(de)g(b)q -(eha)o(v)o(es)g(as)g(sp)q(eci\014ed)i(in)75 2495 y(the)c -Fp(posix)g Fu(1003.2)f(standard.)137 2560 y(In)h(order)g(to)f(switc)o -(h)g(in)o(teractiv)o(ely)i(b)q(et)o(w)o(een)f Ft(emacs)e -Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f(the)h(command)75 -2615 y Fo(M-C-j)j Fu(\(b)q(ound)i(to)e(emacs-editing-mo)q(de)j(when)e -(in)h Ft(vi)f Fu(mo)q(de)g(and)g(to)f(vi-editing-mo)q(de)k(in)e -Ft(emacs)75 2670 y Fu(mo)q(de\).)g(The)15 b(Readline)i(default)f(is)f -Ft(emacs)g Fu(mo)q(de.)p eop -%%Page: 19 21 -19 20 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(19)137 149 y(When)16 b(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e -Ft(vi)g Fu(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g -(`insertion')f(mo)q(de,)g(as)g(if)g(y)o(ou)75 204 y(had)e(t)o(yp)q(ed)h -(an)f(`)p Ft(i)p Fu('.)18 b(Pressing)608 202 y Fn(h)p -620 176 70 2 v 620 204 a Fm(ESC)p 620 212 V 687 202 a -Fn(i)715 204 y Fu(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q -(de,)i(where)f(y)o(ou)g(can)g(edit)h(the)75 259 y(text)i(of)h(the)g -(line)h(with)g(the)f(standard)f Ft(vi)h Fu(mo)o(v)o(emen)o(t)f(k)o -(eys,)g(mo)o(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 -314 y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop -%%Page: 20 22 -20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)h(Library)p -eop -%%Page: 21 23 -21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(21)75 149 y Fq(2)41 b(Programming)28 -b(with)e(GNU)i(Readline)137 267 y Fu(This)18 b(c)o(hapter)f(describ)q -(es)h(the)f(in)o(terface)g(b)q(et)o(w)o(een)h(the)f Fp(gnu)g -Fu(Readline)h(Library)f(and)g(other)g(pro-)75 322 y(grams.)h(If)11 -b(y)o(ou)g(are)g(a)g(programmer,)f(and)i(y)o(ou)f(wish)g(to)g(include)j -(the)d(features)g(found)g(in)i Fp(gnu)e Fu(Readline)75 -377 y(suc)o(h)h(as)f(completion,)h(line)h(editing,)g(and)f(in)o -(teractiv)o(e)g(history)f(manipulation)i(in)f(y)o(our)f(o)o(wn)g -(programs,)75 432 y(this)16 b(section)f(is)h(for)f(y)o(ou.)75 -561 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 658 y Fu(Man)o(y)15 -b(programs)f(pro)o(vide)i(a)f(command)g(line)i(in)o(terface,)e(suc)o(h) -h(as)f Ft(mail)p Fu(,)f Ft(ftp)p Fu(,)h(and)g Ft(sh)p -Fu(.)20 b(F)l(or)15 b(suc)o(h)75 713 y(programs,)e(the)h(default)h(b)q -(eha)o(viour)g(of)f(Readline)i(is)e(su\016cien)o(t.)21 -b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75 -768 y(Readline)k(in)h(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p)q -(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e -Ft(gets\(\))g Fu(or)75 822 y Ft(fgets\(\))p Fu(.)137 -890 y(The)h(function)g Ft(readline\(\))e Fu(prin)o(ts)h(a)g(prompt)g -Fk(prompt)h Fu(and)f(then)h(reads)f(and)h(returns)f(a)g(single)75 -945 y(line)i(of)e(text)g(from)f(the)i(user.)23 b(If)17 -b Fk(prompt)g Fu(is)g Ft(NULL)e Fu(or)h(the)h(empt)o(y)f(string,)g(no)g -(prompt)g(is)h(displa)o(y)o(ed.)75 1000 y(The)i(line)h -Ft(readline)d Fu(returns)i(is)g(allo)q(cated)g(with)g -Ft(malloc\(\))p Fu(;)g(the)g(caller)g(should)h Ft(free\(\))e -Fu(the)g(line)75 1054 y(when)e(it)f(has)g(\014nished)i(with)f(it.)k -(The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)195 -1119 y Ft(char)23 b(*readline)g(\(const)g(char)g(*)p -Fk(prompt)q Ft(\);)75 1187 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195 -1251 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);) -75 1319 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f -(the)i(user.)19 b(The)11 b(line)j(returned)d(has)h(the)f(\014nal)h -(newline)i(remo)o(v)o(ed,)75 1374 y(so)h(only)h(the)f(text)g(remains.) -137 1441 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g -Ft(EOF)g Fu(while)i(reading)f(the)f(line,)j(and)d(the)h(line)g(is)g -(empt)o(y)f(at)g(that)75 1496 y(p)q(oin)o(t,)15 b(then)g -Ft(\(char)f(*\)NULL)g Fu(is)h(returned.)21 b(Otherwise,)15 -b(the)g(line)h(is)f(ended)h(just)e(as)h(if)g(a)f(newline)j(had)75 -1551 y(b)q(een)f(t)o(yp)q(ed.)137 1618 y(If)d(y)o(ou)g(w)o(an)o(t)f -(the)h(user)g(to)f(b)q(e)i(able)g(to)e(get)g(at)h(the)g(line)h(later,)f -(\(with)1325 1616 y Fn(h)p 1338 1590 57 2 v 1338 1618 -a Fm(C-p)p 1338 1626 V 1392 1616 a Fn(i)1420 1618 y Fu(for)f -(example\),)i(y)o(ou)f(m)o(ust)75 1673 y(call)j Ft(add_history\(\))e -Fu(to)g(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)e -Fk(history)19 b Fu(list)d(of)f(suc)o(h)h(lines.)195 1738 -y Ft(add_history)22 b(\(line\);)75 1805 y Fu(F)l(or)15 -b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f -(asso)q(ciated)g(man)o(ual.)137 1873 y(It)h(is)g(preferable)h(to)e(a)o -(v)o(oid)g(sa)o(ving)h(empt)o(y)f(lines)i(on)f(the)g(history)f(list,)i -(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1928 y(burning)h(need)g(to) -e(reuse)h(a)g(blank)g(line.)22 b(Here)15 b(is)g(a)g(function)g(whic)o -(h)h(usefully)h(replaces)e(the)g(standard)75 1983 y Ft(gets\(\))f -Fu(library)i(function,)g(and)f(has)g(the)h(adv)m(an)o(tage)e(of)h(no)g -(static)g(bu\013er)g(to)g(o)o(v)o(er\015o)o(w:)195 2047 -y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/) -195 2099 y(static)g(char)g(*line_read)g(=)h(\(char)f(*\)NULL;)195 -2203 y(/*)h(Read)f(a)h(string,)f(and)g(return)g(a)h(pointer)f(to)g(it.) -267 2255 y(Returns)f(NULL)i(on)f(EOF.)h(*/)195 2307 y(char)f(*)195 -2359 y(rl_gets)g(\(\))195 2411 y({)243 2462 y(/*)g(If)h(the)f(buffer)g -(has)h(already)f(been)g(allocated,)314 2514 y(return)g(the)h(memory)f -(to)g(the)h(free)f(pool.)g(*/)243 2566 y(if)g(\(line_read\))290 -2618 y({)338 2670 y(free)g(\(line_read\);)p eop -%%Page: 22 24 -22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)h(Library)338 -149 y Ft(line_read)23 b(=)h(\(char)f(*\)NULL;)290 201 -y(})243 305 y(/*)g(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)243 -357 y(line_read)f(=)i(readline)f(\(""\);)243 461 y(/*)g(If)h(the)f -(line)h(has)f(any)h(text)f(in)g(it,)314 513 y(save)h(it)f(on)h(the)f -(history.)g(*/)243 565 y(if)g(\(line_read)g(&&)g(*line_read\))290 -616 y(add_history)g(\(line_read\);)243 720 y(return)g(\(line_read\);) -195 772 y(})137 848 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h -(the)g(default)h(b)q(eha)o(viour)g(of)1169 846 y Fn(h)p -1181 820 74 2 v 1181 848 a Fm(T)m(AB)p 1181 856 V 1253 -846 a Fn(i)1280 848 y Fu(completion:)19 b(completion)13 -b(on)f(\014le)75 903 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t) -f(Readline)j(to)d(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o -(hange)h(the)f(binding)75 958 y(of)g(the)205 956 y Fn(h)p -217 930 V 217 958 a Fm(T)m(AB)p 217 965 V 289 956 a Fn(i)319 -958 y Fu(k)o(ey)g(with)h Ft(rl_bind_key\(\))p Fu(.)195 -1031 y Ft(int)23 b(rl_bind_key)g(\(int)g Fk(k)o(ey)p -Ft(,)h(rl_command_func_t)d(*)p Fk(function)p Ft(\);)137 -1107 y(rl_bind_key\(\))15 b Fu(tak)o(es)h(t)o(w)o(o)g(argumen)o(ts:)22 -b Fk(k)o(ey)e Fu(is)e(the)e(c)o(haracter)g(that)g(y)o(ou)h(w)o(an)o(t)f -(to)g(bind,)i(and)75 1161 y Fk(function)h Fu(is)f(the)g(address)g(of)g -(the)g(function)g(to)g(call)h(when)f Fk(k)o(ey)k Fu(is)c(pressed.)29 -b(Binding)1628 1159 y Fn(h)p 1641 1133 V 1641 1161 a -Fm(T)m(AB)p 1641 1169 V 1712 1159 a Fn(i)1745 1161 y -Fu(to)17 b Ft(rl_)75 1216 y(insert\(\))f Fu(mak)o(es)422 -1214 y Fn(h)p 434 1188 V 434 1216 a Fm(T)m(AB)p 434 1224 -V 506 1214 a Fn(i)539 1216 y Fu(insert)i(itself.)28 b -Ft(rl_bind_key\(\))15 b Fu(returns)j(non-zero)g(if)g -Fk(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1271 y(ASCI)q(I)f(c)o -(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137 -1347 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1345 -y Fn(h)p 716 1319 V 716 1347 a Fm(T)m(AB)p 716 1354 V -787 1345 a Fn(i)817 1347 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h -(su\016ces:)195 1420 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137 -1496 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e -(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a) -g(func-)75 1551 y(tion)k(called)h Ft(initialize_readline\(\))13 -b Fu(whic)o(h)k(p)q(erforms)f(this)h(and)g(other)f(desired)h -(initializations,)75 1605 y(suc)o(h)f(as)e(installing)k(custom)c -(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h -(41\).)75 1756 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 -1861 y Fu(Readline)14 b(pro)o(vides)f(man)o(y)e(functions)i(for)f -(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q -(ossi-)75 1915 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h -(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h -(functions)g(and)75 1970 y(v)m(ariables)g(de\014ned)h(within)f(the)f -(Readline)i(library)e(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h -(add)g(customized)75 2025 y(functionalit)o(y)j(to)f(Readline.)137 -2101 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g -(Readline's)h(b)q(eha)o(vior,)h(or)d(using)i(an)o(y)f(func-)75 -2156 y(tionalit)o(y)23 b(Readline)h(pro)o(vides)g(in)f(other)g(co)q -(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75 -2211 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e -(uses)h(Readline's)g(features.)24 b(Since)19 b(some)d(of)g(the)h -(de\014-)75 2265 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g -Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft(<stdio.h>)f -Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2320 y Ft(readline.h)p -Fu(.)137 2396 y Ft(readline.h)14 b Fu(de\014nes)i(a)f(C)h(prepro)q -(cessor)f(v)m(ariable)i(that)d(should)i(b)q(e)g(treated)f(as)g(an)g(in) -o(teger,)g Ft(RL_)75 2451 y(READLINE_VERSION)p Fu(,)9 -b(whic)o(h)j(ma)o(y)f(b)q(e)g(used)h(to)e(conditionally)k(compile)e -(application)h(co)q(de)f(dep)q(ending)75 2506 y(on)17 -b(the)h(installed)h(Readline)g(v)o(ersion.)27 b(The)18 -b(v)m(alue)h(is)f(a)f(hexadecimal)i(enco)q(ding)g(of)e(the)h(ma)s(jor)e -(and)75 2560 y(minor)h(v)o(ersion)h(n)o(um)o(b)q(ers)f(of)g(the)g -(library)l(,)h(of)f(the)g(form)f(0x)p Fk(MMmm)p Fu(.)25 -b Fk(MM)c Fu(is)c(the)h(t)o(w)o(o-digit)e(ma)s(jor)75 -2615 y(v)o(ersion)f(n)o(um)o(b)q(er;)f Fk(mm)h Fu(is)g(the)f(t)o(w)o -(o-digit)g(minor)h(v)o(ersion)g(n)o(um)o(b)q(er.)20 b(F)l(or)14 -b(Readline)h(4.2,)f(for)f(example,)75 2670 y(the)i(v)m(alue)i(of)d -Ft(RL_READLINE_VERSION)f Fu(w)o(ould)j(b)q(e)f Ft(0x0402)p -Fu(.)p eop -%%Page: 23 25 -23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(23)75 149 y Fj(2.2.1)30 b(Readline)20 -b(T)n(yp)r(edefs)137 251 y Fu(F)l(or)15 b(readabilt)o(y)l(,)g(w)o(e)g -(declare)i(a)d(n)o(um)o(b)q(er)i(of)f(new)g(ob)s(ject)g(t)o(yp)q(es,)g -(all)h(p)q(oin)o(ters)f(to)g(functions.)137 324 y(The)j(reason)g(for)f -(declaring)i(these)f(new)g(t)o(yp)q(es)g(is)h(to)e(mak)o(e)g(it)h -(easier)h(to)e(write)h(co)q(de)g(describing)75 379 y(p)q(oin)o(ters)e -(to)e(C)h(functions)h(with)g(appropriately)f(protot)o(yp)q(ed)g -(argumen)o(ts)g(and)g(return)g(v)m(alues.)137 452 y(F)l(or)j(instance,) -i(sa)o(y)e(w)o(e)g(w)o(an)o(t)f(to)h(declare)h(a)f(v)m(ariable)i -Fk(func)i Fu(as)c(a)g(p)q(oin)o(ter)h(to)f(a)g(function)h(whic)o(h)75 -507 y(tak)o(es)12 b(t)o(w)o(o)g Ft(int)g Fu(argumen)o(ts)g(and)h -(returns)g(an)g Ft(int)f Fu(\(this)h(is)g(the)g(t)o(yp)q(e)g(of)g(all)g -(of)g(the)g(Readline)h(bindable)75 561 y(functions\).)20 -b(Instead)c(of)f(the)g(classic)h(C)f(declaration)137 -634 y Ft(int)g(\(*func\)\(\);)75 707 y Fu(or)g(the)g(ANSI-C)h(st)o(yle) -f(declaration)137 780 y Ft(int)g(\(*func\)\(int,)f(int\);)75 -853 y Fu(w)o(e)h(ma)o(y)f(write)137 926 y Ft(rl_command_func_t)f -(*func;)137 999 y Fu(The)j(full)g(list)g(of)f(function)h(p)q(oin)o(ter) -g(t)o(yp)q(es)f(a)o(v)m(ailable)i(is)75 1087 y Ft(typedef)d(int)h -(rl_command_func_t)e(\(int,)h(int\);)75 1157 y(typedef)g(char)h -(*rl_compentry_func_t)d(\(const)j(char)f(*,)h(int\);)75 -1227 y(typedef)f(char)h(**rl_completion_func_t)d(\(const)i(char)h(*,)g -(int,)f(int\);)75 1297 y(typedef)g(char)h(*rl_quote_func_t)e(\(char)h -(*,)h(int,)g(char)f(*\);)75 1367 y(typedef)g(char)h(*rl_dequote_func_t) -d(\(char)j(*,)g(int\);)75 1437 y(typedef)f(int)h(rl_compignore_func_t)d -(\(char)j(**\);)75 1507 y(typedef)f(void)h(rl_compdisp_func_t)d(\(char) -j(**,)g(int,)f(int\);)75 1577 y(typedef)g(int)h(rl_hook_func_t)e -(\(void\);)75 1647 y(typedef)h(int)h(rl_getc_func_t)e(\(FILE)i(*\);)75 -1717 y(typedef)f(int)h(rl_linebuf_func_t)e(\(char)h(*,)h(int\);)75 -1787 y(typedef)f(int)h(rl_intfunc_t)e(\(int\);)75 1857 -y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)75 1927 y(typedef)h(int)h -(rl_icpfunc_t)e(\(char)i(*\);)75 1997 y(typedef)f(int)h(rl_icppfunc_t)e -(\(char)i(**\);)75 2067 y(typedef)f(void)h(rl_voidfunc_t)e(\(void\);)75 -2137 y(typedef)h(void)h(rl_vintfunc_t)e(\(int\);)75 2208 -y(typedef)h(void)h(rl_vcpfunc_t)e(\(char)i(*\);)75 2278 -y(typedef)f(void)h(rl_vcppfunc_t)e(\(char)i(**\);)75 -2386 y Fj(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 -b(unction)137 2488 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g -(for)e(Readline,)i(y)o(ou)f(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o -(v)o(en)o(tions)75 2542 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h -(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d -(describ)q(e)k(the)d(curren)o(t)75 2597 y(state)c(of)h(the)g(line)i -(read)e(so)g(far.)137 2670 y(The)h(calling)h(sequence)f(for)f(a)f -(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)p eop -%%Page: 24 26 -24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Ft(int)23 b(foo)h(\(int)f(count,)g(int)h(key\))75 -221 y Fu(where)18 b Fk(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o -(t)e(\(or)h(1)f(if)i(defaulted\))f(and)g Fk(k)o(ey)k -Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v)o(ok)o(ed)75 276 -y(this)f(function.)137 348 y(It)c(is)g(completely)h(up)f(to)f(the)g -(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g(with)g(the)g(n)o -(umeric)g(argumen)o(t.)75 403 y(Some)20 b(functions)h(use)f(it)g(as)g -(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g(a)f(\015ag,)i(and)f(others)g -(to)f(c)o(ho)q(ose)h(alternate)75 457 y(b)q(eha)o(vior)i(\(refreshing)g -(the)g(curren)o(t)f(line)j(as)d(opp)q(osed)h(to)f(refreshing)i(the)e -(screen,)j(for)d(example\).)75 512 y(Some)c(c)o(ho)q(ose)f(to)g(ignore) -h(it.)24 b(In)18 b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o -(umeric)h(argumen)o(t)d(as)i(a)f(rep)q(eat)75 567 y(coun)o(t,)e(it)g -(should)h(b)q(e)f(able)h(to)e(do)h(something)h(useful)g(with)f(b)q(oth) -g(negativ)o(e)g(and)g(p)q(ositiv)o(e)h(argumen)o(ts.)75 -622 y(A)o(t)g(the)g(v)o(ery)g(least,)g(it)g(should)h(b)q(e)g(a)o(w)o -(are)e(that)h(it)g(can)g(b)q(e)h(passed)g(a)f(negativ)o(e)g(argumen)o -(t.)137 693 y(A)f(command)g(function)h(should)g(return)e(0)h(if)g(its)g -(action)h(completes)f(successfully)l(,)i(and)e(a)g(non-zero)75 -748 y(v)m(alue)i(if)g(some)f(error)f(o)q(ccurs.)75 888 -y Fs(2.3)33 b(Readline)23 b(V)-6 b(ariables)137 989 y -Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h -(writers.)1773 1120 y(V)l(ariable)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 1120 18 3 v 21 w(line)p 395 1120 V -23 w(bu\013er)195 1174 y Fu(This)d(is)g(the)g(line)h(gathered)f(so)f -(far.)20 b(Y)l(ou)c(are)f(w)o(elcome)h(to)f(mo)q(dify)h(the)g(con)o -(ten)o(ts)f(of)g(the)h(line,)195 1229 y(but)i(see)g(Section)h(2.4.5)d -([Allo)o(wing)i(Undoing],)h(page)e(32.)27 b(The)18 b(function)h -Ft(rl_extend_line_)195 1284 y(buffer)14 b Fu(is)i(a)o(v)m(ailable)h(to) -d(increase)j(the)e(memory)f(allo)q(cated)j(to)d Ft(rl_line_buffer)p -Fu(.)1773 1414 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p -215 1414 V 21 w(p)r(oin)n(t)195 1469 y Fu(The)15 b(o\013set)g(of)f(the) -i(curren)o(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d -Fu(\(the)i Fl(p)n(oint)t Fu(\).)1773 1600 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1600 V 21 w(end)195 1655 y -Fu(The)14 b(n)o(um)o(b)q(er)g(of)g(c)o(haracters)f(presen)o(t)h(in)h -Ft(rl_line_buffer)p Fu(.)i(When)e Ft(rl_point)e Fu(is)h(at)f(the)h(end) -195 1709 y(of)h(the)g(line,)i Ft(rl_point)d Fu(and)h -Ft(rl_end)f Fu(are)h(equal.)1773 1840 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1840 V 21 w(mark)195 1895 y -Fu(The)f Fk(mark)h Fu(\(sa)o(v)o(ed)e(p)q(osition\))h(in)g(the)g -(curren)o(t)f(line.)31 b(If)19 b(set,)g(the)f(mark)g(and)h(p)q(oin)o(t) -g(de\014ne)g(a)195 1950 y Fl(r)n(e)n(gion)p Fu(.)1773 -2080 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2080 -V 21 w(done)195 2135 y Fu(Setting)11 b(this)g(to)g(a)f(non-zero)h(v)m -(alue)h(causes)f(Readline)h(to)f(return)f(the)h(curren)o(t)g(line)h -(immediately)l(.)1773 2265 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 2265 V 21 w(n)n(um)p 347 2265 V 19 w(c)n(hars)p -496 2265 V 20 w(to)p 567 2265 V 21 w(read)195 2320 y -Fu(Setting)d(this)g(to)f(a)g(p)q(ositiv)o(e)h(v)m(alue)h(b)q(efore)f -(calling)h Ft(readline\(\))d Fu(causes)h(Readline)i(to)e(return)195 -2375 y(after)h(accepting)i(that)e(man)o(y)g(c)o(haracters,)h(rather)f -(than)h(reading)g(up)g(to)f(a)h(c)o(haracter)f(b)q(ound)195 -2430 y(to)e Ft(accept-line)p Fu(.)1773 2560 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 2560 V 21 w(p)r(ending)p 436 -2560 V 20 w(input)195 2615 y Fu(Setting)13 b(this)g(to)f(a)g(v)m(alue)i -(mak)o(es)e(it)h(the)f(next)h(k)o(eystrok)o(e)f(read.)19 -b(This)13 b(is)g(a)f(w)o(a)o(y)g(to)f(stu\013)h(a)h(single)195 -2670 y(c)o(haracter)h(in)o(to)i(the)f(input)h(stream.)p -eop -%%Page: 25 27 -25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(25)1773 149 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(dispatc)n(hing)195 204 -y Fu(Set)12 b(to)g(a)f(non-zero)i(v)m(alue)g(if)g(a)f(function)h(is)f -(b)q(eing)i(called)f(from)f(a)f(k)o(ey)h(binding;)j(zero)d(otherwise.) -195 259 y(Application)20 b(functions)e(can)g(test)g(this)g(to)f(disco)o -(v)o(er)h(whether)g(they)g(w)o(ere)g(called)h(directly)g(or)195 -314 y(b)o(y)c(Readline's)h(dispatc)o(hing)h(mec)o(hanism.)1773 -423 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 423 -V 21 w(erase)p 363 423 V 20 w(empt)n(y)p 540 423 V 20 -w(line)195 478 y Fu(Setting)j(this)h(to)e(a)h(non-zero)g(v)m(alue)h -(causes)f(Readline)i(to)d(completely)i(erase)f(the)g(curren)o(t)195 -533 y(line,)g(including)h(an)o(y)c(prompt,)h(an)o(y)g(time)g(a)f -(newline)j(is)e(t)o(yp)q(ed)g(as)f(the)h(only)g(c)o(haracter)f(on)195 -588 y(an)e(otherwise-empt)o(y)g(line.)31 b(The)18 b(cursor)g(is)h(mo)o -(v)o(ed)e(to)h(the)g(b)q(eginning)i(of)e(the)g(newly-blank)195 -643 y(line.)1773 752 y(V)l(ariable)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 752 V 21 w(prompt)195 807 y Fu(The)13 -b(prompt)g(Readline)h(uses.)20 b(This)13 b(is)h(set)f(from)f(the)h -(argumen)o(t)g(to)f Ft(readline\(\))p Fu(,)g(and)h(should)195 -862 y(not)g(b)q(e)h(assigned)g(to)f(directly)l(.)21 b(The)14 -b Ft(rl_set_prompt\(\))d Fu(function)j(\(see)g(Section)g(2.4.6)e -([Redis-)195 917 y(pla)o(y],)j(page)g(33\))f(ma)o(y)h(b)q(e)g(used)h -(to)f(mo)q(dify)h(the)f(prompt)g(string)g(after)f(calling)j -Ft(readline\(\))p Fu(.)1773 1026 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1026 V 21 w(already)p 419 1026 -V 21 w(prompted)195 1081 y Fu(If)e(an)g(application)i(wishes)f(to)f -(displa)o(y)h(the)f(prompt)g(itself,)h(rather)f(than)g(ha)o(v)o(e)g -(Readline)h(do)195 1136 y(it)e(the)f(\014rst)g(time)h -Ft(readline\(\))e Fu(is)i(called,)h(it)e(should)i(set)e(this)h(v)m -(ariable)g(to)f(a)g(non-zero)h(v)m(alue)195 1191 y(after)h(displa)o -(ying)j(the)e(prompt.)31 b(The)19 b(prompt)g(m)o(ust)f(also)h(b)q(e)h -(passed)f(as)f(the)h(argumen)o(t)g(to)195 1245 y Ft(readline\(\))c -Fu(so)h(the)h(redispla)o(y)g(functions)h(can)e(up)q(date)h(the)g -(displa)o(y)h(prop)q(erly)l(.)24 b(The)17 b(calling)195 -1300 y(application)g(is)f(resp)q(onsible)h(for)d(managing)h(the)h(v)m -(alue;)g(Readline)g(nev)o(er)g(sets)e(it.)1773 1410 y(V)l(ariable)-1861 -b Fi(const)20 b(char)g(*)f Fh(rl)p 436 1410 V 21 w(library)p -625 1410 V 21 w(v)n(ersion)195 1465 y Fu(The)c(v)o(ersion)h(n)o(um)o(b) -q(er)f(of)g(this)h(revision)g(of)f(the)g(library)l(.)1773 -1574 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1574 -V 21 w(readline)p 434 1574 V 22 w(v)n(ersion)195 1629 -y Fu(An)d(in)o(teger)h(enco)q(ding)g(the)f(curren)o(t)g(v)o(ersion)g -(of)g(the)g(library)l(.)27 b(The)17 b(enco)q(ding)h(is)g(of)f(the)g -(form)195 1684 y(0x)p Fk(MMmm)p Fu(,)g(where)i Fk(MM)j -Fu(is)d(the)f(t)o(w)o(o-digit)g(ma)s(jor)f(v)o(ersion)i(n)o(um)o(b)q -(er,)g(and)f Fk(mm)g Fu(is)h(the)f(t)o(w)o(o-)195 1738 -y(digit)i(minor)e(v)o(ersion)h(n)o(um)o(b)q(er.)31 b(F)l(or)18 -b(example,)i(for)e(Readline-4.2,)i Ft(rl_readline_version)195 -1793 y Fu(w)o(ould)c(ha)o(v)o(e)e(the)i(v)m(alue)g(0x0402.)1773 -1903 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1903 -V 21 w(gn)n(u)p 327 1903 V 20 w(readline)p 545 1903 V -22 w(p)195 1958 y Fu(Alw)o(a)o(ys)15 b(set)g(to)f(1,)h(denoting)h(that) -e(this)i(is)g Fp(gnu)f Fu(readline)h(rather)f(than)g(some)g(em)o -(ulation.)1773 2067 y(V)l(ariable)-1861 b Fi(const)20 -b(char)g(*)f Fh(rl)p 436 2067 V 21 w(terminal)p 668 2067 -V 21 w(name)195 2122 y Fu(The)14 b(terminal)h(t)o(yp)q(e,)f(used)h(for) -e(initialization.)23 b(If)14 b(not)f(set)h(b)o(y)g(the)g(application,)i -(Readline)f(sets)195 2177 y(this)h(to)e(the)h(v)m(alue)i(of)e(the)g -Ft(TERM)g Fu(en)o(vironmen)o(t)g(v)m(ariable)i(the)e(\014rst)g(time)g -(it)h(is)f(called.)1773 2286 y(V)l(ariable)-1861 b Fi(const)20 -b(char)g(*)f Fh(rl)p 436 2286 V 21 w(readline)p 655 2286 -V 22 w(name)195 2341 y Fu(This)d(v)m(ariable)h(is)f(set)g(to)f(a)g -(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.)23 -b(The)16 b(v)m(alue)195 2396 y(allo)o(ws)e(conditional)i(parsing)e(of)g -(the)g(inputrc)h(\014le)g(\(see)f(Section)h(1.3.2)d([Conditional)j -(Init)g(Con-)195 2451 y(structs],)f(page)h(9\).)1773 -2560 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286 -2560 V 21 w(instream)195 2615 y Fu(The)i(stdio)f(stream)g(from)g(whic)o -(h)h(Readline)h(reads)e(input.)37 b(If)21 b Ft(NULL)p -Fu(,)g(Readline)h(defaults)f(to)195 2670 y Fk(stdin)p -Fu(.)p eop -%%Page: 26 28 -26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)h(Library)1773 -149 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286 -149 18 3 v 21 w(outstream)195 204 y Fu(The)e(stdio)h(stream)e(to)h -(whic)o(h)h(Readline)g(p)q(erforms)f(output.)26 b(If)18 -b Ft(NULL)p Fu(,)e(Readline)j(defaults)f(to)195 259 y -Fk(stdout)p Fu(.)1773 381 y(V)l(ariable)-1861 b Fi(rl_command_func_t)22 -b(*)d Fh(rl)p 626 381 V 21 w(last)p 735 381 V 21 w(func)195 -436 y Fu(The)f(address)f(of)g(the)g(last)h(command)f(function)h -(Readline)h(executed.)27 b(Ma)o(y)17 b(b)q(e)h(used)g(to)f(test)195 -490 y(whether)e(or)g(not)g(a)g(function)h(is)f(b)q(eing)i(executed)f(t) -o(wice)g(in)g(succession,)g(for)e(example.)1773 612 y(V)l(ariable)-1861 -b Fi(rl_hook_func_t)21 b(*)e Fh(rl)p 547 612 V 22 w(startup)p -752 612 V 19 w(ho)r(ok)195 667 y Fu(If)e(non-zero,)h(this)g(is)f(the)h -(address)f(of)f(a)h(function)h(to)f(call)h(just)f(b)q(efore)g -Ft(readline)f Fu(prin)o(ts)i(the)195 722 y(\014rst)d(prompt.)1773 -844 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e -Fh(rl)p 547 844 V 22 w(pre)p 651 844 V 20 w(input)p 804 -844 V 21 w(ho)r(ok)195 898 y Fu(If)f(non-zero,)g(this)g(is)h(the)f -(address)f(of)h(a)f(function)i(to)e(call)i(after)e(the)h(\014rst)f -(prompt)g(has)h(b)q(een)195 953 y(prin)o(ted)e(and)f(just)g(b)q(efore)h -Ft(readline)e Fu(starts)g(reading)h(input)i(c)o(haracters.)1773 -1075 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e -Fh(rl)p 547 1075 V 22 w(ev)n(en)n(t)p 701 1075 V 22 w(ho)r(ok)195 -1130 y Fu(If)i(non-zero,)g(this)g(is)g(the)f(address)g(of)g(a)g -(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(Readline)g(is)195 -1184 y(w)o(aiting)15 b(for)f(terminal)h(input.)21 b(By)14 -b(default,)h(this)g(will)i(b)q(e)e(called)h(at)e(most)g(ten)g(times)h -(a)f(second)195 1239 y(if)i(there)f(is)h(no)f(k)o(eyb)q(oard)g(input.) -1773 1361 y(V)l(ariable)-1861 b Fi(rl_getc_func_t)21 -b(*)e Fh(rl)p 547 1361 V 22 w(getc)p 671 1361 V 21 w(function)195 -1416 y Fu(If)c(non-zero,)h(Readline)g(will)h(call)f(indirectly)i -(through)d(this)g(p)q(oin)o(ter)h(to)f(get)f(a)h(c)o(haracter)g(from) -195 1471 y(the)k(input)i(stream.)31 b(By)19 b(default,)h(it)g(is)g(set) -f(to)f Ft(rl_getc)p Fu(,)h(the)g(default)h(Readline)h(c)o(haracter)195 -1525 y(input)16 b(function)g(\(see)f(Section)h(2.4.8)e([Character)g -(Input],)h(page)g(34\).)1773 1647 y(V)l(ariable)-1861 -b Fi(rl_voidfunc_t)21 b(*)e Fh(rl)p 521 1647 V 21 w(redispla)n(y)p -765 1647 V 22 w(function)195 1702 y Fu(If)f(non-zero,)h(Readline)g -(will)h(call)f(indirectly)h(through)e(this)g(p)q(oin)o(ter)h(to)e(up)q -(date)i(the)f(displa)o(y)195 1757 y(with)c(the)f(curren)o(t)h(con)o -(ten)o(ts)f(of)g(the)g(editing)i(bu\013er.)k(By)14 b(default,)g(it)g -(is)g(set)f(to)g Ft(rl_redisplay)p Fu(,)195 1812 y(the)i(default)h -(Readline)h(redispla)o(y)f(function)g(\(see)f(Section)h(2.4.6)e -([Redispla)o(y],)h(page)g(33\).)1773 1933 y(V)l(ariable)-1861 -b Fi(rl_vintfunc_t)21 b(*)e Fh(rl)p 521 1933 V 21 w(prep)p -656 1933 V 21 w(term)p 798 1933 V 19 w(function)195 1988 -y Fu(If)12 b(non-zero,)h(Readline)g(will)h(call)f(indirectly)h(through) -e(this)g(p)q(oin)o(ter)h(to)e(initialize)k(the)e(terminal.)195 -2043 y(The)19 b(function)g(tak)o(es)f(a)g(single)i(argumen)o(t,)e(an)h -Ft(int)f Fu(\015ag)g(that)g(sa)o(ys)g(whether)g(or)h(not)f(to)g(use)195 -2098 y(eigh)o(t-bit)g(c)o(haracters.)25 b(By)17 b(default,)h(this)f(is) -h(set)e(to)h Ft(rl_prep_terminal)e Fu(\(see)i(Section)h(2.4.9)195 -2152 y([T)l(erminal)e(Managemen)o(t],)d(page)i(35\).)1773 -2274 y(V)l(ariable)-1861 b Fi(rl_voidfunc_t)21 b(*)e -Fh(rl)p 521 2274 V 21 w(deprep)p 714 2274 V 21 w(term)p -856 2274 V 19 w(function)195 2329 y Fu(If)g(non-zero,)g(Readline)g -(will)h(call)g(indirectly)g(through)e(this)h(p)q(oin)o(ter)f(to)g -(reset)g(the)h(terminal.)195 2384 y(This)f(function)g(should)h(undo)f -(the)f(e\013ects)h(of)f Ft(rl_prep_term_function)p Fu(.)24 -b(By)17 b(default,)i(this)195 2439 y(is)d(set)f(to)f -Ft(rl_deprep_terminal)f Fu(\(see)i(Section)h(2.4.9)e([T)l(erminal)i -(Managemen)o(t],)d(page)i(35\).)1773 2560 y(V)l(ariable)-1861 -b Fi(Keymap)20 b Fh(rl)p 293 2560 V 21 w(executing)p -551 2560 V 22 w(k)n(eymap)195 2615 y Fu(This)f(v)m(ariable)g(is)f(set)g -(to)g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h -(29\))f(in)i(whic)o(h)195 2670 y(the)c(curren)o(tly)h(executing)g -(readline)h(function)f(w)o(as)f(found.)p eop -%%Page: 27 29 -27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(27)1773 149 y(V)l(ariable)-1861 b Fi(Keymap)20 -b Fh(rl)p 293 149 18 3 v 21 w(binding)p 501 149 V 22 -w(k)n(eymap)195 204 y Fu(This)f(v)m(ariable)g(is)f(set)g(to)g(the)g(k)o -(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h(29\))f(in)i -(whic)o(h)195 259 y(the)c(last)g(k)o(ey)g(binding)j(o)q(ccurred.)1773 -383 y(V)l(ariable)-1861 b Fi(char)20 b(*)f Fh(rl)p 286 -383 V 21 w(executing)p 544 383 V 22 w(macro)195 438 y -Fu(This)d(v)m(ariable)g(is)g(set)f(to)g(the)g(text)g(of)f(an)o(y)h -(curren)o(tly-executing)i(macro.)1773 562 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 562 V 21 w(readline)p 434 562 -V 22 w(state)195 617 y Fu(A)d(v)m(ariable)i(with)e(bit)h(v)m(alues)h -(that)d(encapsulate)i(the)g(curren)o(t)f(Readline)h(state.)25 -b(A)18 b(bit)f(is)h(set)195 671 y(with)h(the)g Ft(RL_SETSTATE)f -Fu(macro,)h(and)g(unset)g(with)g(the)g Ft(RL_UNSETSTATE)e -Fu(macro.)31 b(Use)19 b(the)195 726 y Ft(RL_ISSTATE)e -Fu(macro)h(to)g(test)g(whether)h(a)f(particular)i(state)d(bit)j(is)f -(set.)30 b(Curren)o(t)18 b(state)g(bits)195 781 y(include:)195 -864 y Ft(RL_STATE_NONE)435 919 y Fu(Readline)e(has)g(not)e(y)o(et)h(b)q -(een)h(called,)h(nor)e(has)g(it)g(b)q(egun)h(to)f(in)o(tialize.)195 -1001 y Ft(RL_STATE_INITIALIZING)435 1056 y Fu(Readline)h(is)g -(initializi)q(ng)i(its)d(in)o(ternal)h(data)f(structures.)195 -1138 y Ft(RL_STATE_INITIALIZED)435 1192 y Fu(Readline)h(has)g -(completed)g(its)f(initialization.)195 1274 y Ft(RL_STATE_TERMPREPPED) -435 1329 y Fu(Readline)h(has)e(mo)q(di\014ed)i(the)e(terminal)h(mo)q -(des)g(to)e(do)i(its)f(o)o(wn)g(input)h(and)g(redis-)435 -1384 y(pla)o(y)l(.)195 1466 y Ft(RL_STATE_READCMD)435 -1521 y Fu(Readline)h(is)g(reading)g(a)f(command)g(from)f(the)i(k)o(eyb) -q(oard.)195 1603 y Ft(RL_STATE_METANEXT)435 1658 y Fu(Readline)g(is)g -(reading)g(more)f(input)h(after)e(reading)i(the)f(meta-pre\014x)h(c)o -(haracter.)195 1740 y Ft(RL_STATE_DISPATCHING)435 1794 -y Fu(Readline)g(is)g(dispatc)o(hing)h(to)d(a)h(command.)195 -1876 y Ft(RL_STATE_MOREINPUT)435 1931 y Fu(Readline)h(is)g(reading)g -(more)f(input)h(while)h(executing)f(an)f(editing)i(command.)195 -2013 y Ft(RL_STATE_ISEARCH)435 2068 y Fu(Readline)f(is)g(p)q(erforming) -g(an)f(incremen)o(tal)h(history)f(searc)o(h.)195 2150 -y Ft(RL_STATE_NSEARCH)435 2205 y Fu(Readline)h(is)g(p)q(erforming)g(a)f -(non-incremen)o(tal)h(history)g(searc)o(h.)195 2287 y -Ft(RL_STATE_SEARCH)435 2342 y Fu(Readline)11 b(is)g(searc)o(hing)g(bac) -o(kw)o(ard)e(or)h(forw)o(ard)f(through)h(the)g(history)g(for)f(a)h -(string.)195 2424 y Ft(RL_STATE_NUMERICARG)435 2478 y -Fu(Readline)16 b(is)g(reading)g(a)f(n)o(umeric)h(argumen)o(t.)195 -2560 y Ft(RL_STATE_MACROINPUT)435 2615 y Fu(Readline)d(is)g(curren)o -(tly)g(getting)f(its)g(input)h(from)e(a)h(previously-de\014ned)j(k)o -(eyb)q(oard)435 2670 y(macro.)p eop -%%Page: 28 30 -28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Ft(RL_STATE_MACRODEF)435 204 y Fu(Readline)g(is)g(curren)o(tly)g -(reading)g(c)o(haracters)e(de\014ning)j(a)e(k)o(eyb)q(oard)g(macro.)195 -286 y Ft(RL_STATE_OVERWRITE)435 341 y Fu(Readline)h(is)g(in)g(o)o(v)o -(erwrite)f(mo)q(de.)195 423 y Ft(RL_STATE_COMPLETING)435 -478 y Fu(Readline)h(is)g(p)q(erforming)g(w)o(ord)e(completion.)195 -560 y Ft(RL_STATE_SIGHANDLER)435 615 y Fu(Readline)i(is)g(curren)o(tly) -g(executing)g(the)f(readline)i(signal)f(handler.)195 -697 y Ft(RL_STATE_UNDOING)435 752 y Fu(Readline)g(is)g(p)q(erforming)g -(an)f(undo.)195 834 y Ft(RL_STATE_DONE)435 889 y Fu(Readline)g(has)f -(read)g(a)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e Ft(accept-line)f -Fu(and)i(is)h(ab)q(out)f(to)435 944 y(return)h(the)g(line)i(to)e(the)g -(caller.)1773 1068 y(V)l(ariable)-1861 b Fi(int)20 b -Fh(rl)p 215 1068 18 3 v 21 w(explicit)p 417 1068 V 24 -w(arg)195 1123 y Fu(Set)f(to)g(a)g(non-zero)h(v)m(alue)h(if)e(an)h -(explicit)h(n)o(umeric)g(argumen)o(t)d(w)o(as)h(sp)q(eci\014ed)i(b)o(y) -f(the)f(user.)195 1178 y(Only)d(v)m(alid)h(in)f(a)f(bindable)i(command) -f(function.)1773 1302 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 1302 V 21 w(n)n(umeric)p 437 1302 V 20 -w(arg)195 1357 y Fu(Set)j(to)f(the)g(v)m(alue)i(of)f(an)o(y)f(n)o -(umeric)h(argumen)o(t)f(explicitly)k(sp)q(eci\014ed)f(b)o(y)d(the)h -(user)g(b)q(efore)195 1412 y(executing)14 b(the)f(curren)o(t)g -(Readline)h(function.)20 b(Only)14 b(v)m(alid)h(in)f(a)f(bindable)i -(command)d(function.)1773 1536 y(V)l(ariable)-1861 b -Fi(int)20 b Fh(rl)p 215 1536 V 21 w(editing)p 407 1536 -V 22 w(mo)r(de)195 1591 y Fu(Set)13 b(to)f(a)g(v)m(alue)i(denoting)f -(Readline's)g(curren)o(t)g(editing)h(mo)q(de.)19 b(A)12 -b(v)m(alue)i(of)e Fk(1)k Fu(means)d(Readline)195 1646 -y(is)j(curren)o(tly)f(in)h(emacs)g(mo)q(de;)f Fk(0)j -Fu(means)d(that)g(vi)h(mo)q(de)f(is)h(activ)o(e.)75 1781 -y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6 -b(unctions)75 1927 y Fj(2.4.1)30 b(Naming)20 b(a)g(F)-5 -b(unction)137 2025 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e -(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)35 -b(This)20 b(is)75 2080 y(done)f(b)o(y)f(represen)o(ting)h(the)g -(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19 -b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 2135 y(descriptiv)o(e)e -(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14 -b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195 -2202 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 2272 -y Fu(This)21 b(binds)g(the)f(k)o(eystrok)o(e)661 2270 -y Fn(h)p 673 2244 209 2 v 673 2272 a Fm(Meta-Rub)q(out)p -673 2279 V 879 2270 a Fn(i)914 2272 y Fu(to)g(the)g(function)g -Fl(descriptively)k Fu(named)c Ft(backward-)75 2326 y(kill-word)p -Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f(should)i(bind)f(the)g -(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o(e)75 -2381 y(names)e(as)g(w)o(ell.)21 b(Readline)16 b(pro)o(vides)g(a)f -(function)h(for)e(doing)i(that:)1762 2506 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2506 18 3 v 21 w(add)p 328 -2506 V 20 w(defun)i Fg(\()p Ft(const)14 b(char)h(*name,)f -(rl_command_func_t)283 2560 y(*function,)f(int)i(key)p -Fg(\))195 2615 y Fu(Add)j Fk(name)i Fu(to)d(the)h(list)h(of)e(named)h -(functions.)28 b(Mak)o(e)17 b Fk(function)h Fu(b)q(e)g(the)g(function)h -(that)d(gets)195 2670 y(called.)21 b(If)16 b Fk(k)o(ey)j -Fu(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fk(function)i -Fu(using)g Ft(rl_bind_key\(\))p Fu(.)p eop -%%Page: 29 31 -29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(29)137 149 y(Using)16 b(this)f(function)h(alone)g(is)f -(su\016cien)o(t)h(for)f(most)f(applications.)21 b(It)15 -b(is)h(the)f(recommended)h(w)o(a)o(y)75 204 y(to)d(add)h(a)f(few)g -(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)i(has)e -(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75 -259 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e -(Readline,)i(y)o(ou)f(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75 -314 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 442 -y Fj(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 546 y Fu(Key)16 -b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fk(k)o(eymap)p -Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o -(een)g(the)f(k)o(eys)75 601 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h -(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o -(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 656 y(existing)i(k)o(eymaps,)f -(and)g(tell)h(Readline)h(whic)o(h)f(k)o(eymap)f(to)f(use.)1762 -797 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -797 18 3 v 21 w(mak)n(e)p 445 797 V 20 w(bare)p 575 797 -V 20 w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 851 y -Fu(Returns)12 b(a)f(new,)i(empt)o(y)f(k)o(eymap.)18 b(The)13 -b(space)f(for)f(the)i(k)o(eymap)e(is)i(allo)q(cated)g(with)f -Ft(malloc\(\))p Fu(;)195 906 y(the)j(caller)i(should)f(free)f(it)h(b)o -(y)f(calling)i Ft(rl_discard_keymap\(\))12 b Fu(when)k(done.)1762 -1047 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -1047 V 21 w(cop)n(y)p 428 1047 V 21 w(k)n(eymap)j Fg(\()p -Ft(Keymap)14 b(map)p Fg(\))195 1102 y Fu(Return)h(a)g(new)g(k)o(eymap)g -(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fk(map)p Fu(.)1762 -1243 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -1243 V 21 w(mak)n(e)p 445 1243 V 20 w(k)n(eymap)j Fg(\()p -Ft(void)p Fg(\))195 1298 y Fu(Return)16 b(a)f(new)i(k)o(eymap)e(with)i -(the)f(prin)o(ting)h(c)o(haracters)e(b)q(ound)i(to)e(rl)p -1457 1298 14 2 v 17 w(insert,)h(the)g(lo)o(w)o(ercase)195 -1353 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)f(equiv)m -(alen)o(ts,)j(and)d(the)h(Meta)e(digits)i(b)q(ound)g(to)f(pro)q(duce) -195 1407 y(n)o(umeric)16 b(argumen)o(ts.)1762 1548 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 1548 18 3 v 21 w(discard)p -441 1548 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p -Fg(\))195 1603 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fk(k)o(eymap)p Fu(.)137 1711 y(Readline)24 b(has)f(sev)o(eral)g(in)o -(ternal)g(k)o(eymaps.)42 b(These)23 b(functions)g(allo)o(w)g(y)o(ou)f -(to)g(c)o(hange)h(whic)o(h)75 1766 y(k)o(eymap)15 b(is)h(activ)o(e.) -1762 1907 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p -293 1907 V 21 w(get)p 391 1907 V 21 w(k)n(eymap)i Fg(\()p -Ft(void)p Fg(\))195 1962 y Fu(Returns)15 b(the)g(curren)o(tly)h(activ)o -(e)f(k)o(eymap.)1762 2103 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 2103 V 21 w(set)p 333 2103 V 21 w(k)n(eymap)i -Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 2158 y Fu(Mak)o(es)g -Fk(k)o(eymap)j Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762 -2298 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -2298 V 21 w(get)p 391 2298 V 21 w(k)n(eymap)p 605 2298 -V 20 w(b)n(y)p 685 2298 V 21 w(name)i Fg(\()p Ft(const)14 -b(char)g(*name)p Fg(\))195 2353 y Fu(Return)i(the)h(k)o(eymap)f(matc)o -(hing)h Fk(name)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 2408 y(keymap)e -Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g -(page)f(4\).)1762 2549 y(F)l(unction)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 2549 V 21 w(get)p 384 2549 V 21 w(k)n(eymap)p -598 2549 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p -Fg(\))195 2604 y Fu(Return)i(the)h(name)g(matc)o(hing)f -Fk(k)o(eymap)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 2659 y(keymap)e -Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)i(Init)g(File],)g -(page)f(4\).)p eop -%%Page: 30 32 -30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fj(2.4.3)30 b(Binding)20 b(Keys)137 244 y Fu(Key)13 -b(sequences)g(are)e(asso)q(ciate)h(with)h(functions)f(through)g(the)g -(k)o(eymap.)19 b(Readline)13 b(has)f(sev)o(eral)g(in-)75 -299 y(ternal)j(k)o(eymaps:)k Ft(emacs_standard_keymap)p -Fu(,)11 b Ft(emacs_meta_keymap)p Fu(,)h Ft(emacs_ctlx_keymap)p -Fu(,)g Ft(vi_)75 354 y(movement_keymap)p Fu(,)20 b(and)i -Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18 -b Fu(is)k(the)f(default,)75 408 y(and)15 b(the)h(examples)g(in)g(this)f -(man)o(ual)h(assume)f(that.)137 474 y(Since)h Ft(readline\(\))c -Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f -(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 529 -y(alw)o(a)o(ys)j(the)g(danger)g(that)g(a)g(custom)g(binding)i -(installed)g(b)q(efore)f(the)f(\014rst)g(call)i(to)d -Ft(readline\(\))g Fu(will)75 584 y(b)q(e)f(o)o(v)o(erridden.)19 -b(An)13 b(alternate)g(mec)o(hanism)h(is)f(to)f(install)i(custom)f(k)o -(ey)g(bindings)h(in)g(an)f(initialization)75 638 y(function)19 -b(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e -(Section)h(2.3)f([Readline)i(V)l(ariables],)75 693 y(page)15 -b(24\).)137 759 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1762 -868 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 868 -18 3 v 21 w(bind)p 347 868 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 -b(key,)h(rl_command_func_t)d(*function)p Fg(\))195 922 -y Fu(Binds)18 b Fk(k)o(ey)i Fu(to)c Fk(function)h Fu(in)h(the)e(curren) -o(tly)h(activ)o(e)g(k)o(eymap.)23 b(Returns)16 b(non-zero)h(in)g(the)g -(case)195 977 y(of)e(an)g(in)o(v)m(alid)i Fk(k)o(ey)p -Fu(.)1762 1086 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1086 V 21 w(bind)p 347 1086 V 21 w(k)n(ey)p 452 1086 -V 21 w(in)p 520 1086 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h -(rl_command_func_t)e(*function,)283 1141 y(Keymap)h(map)p -Fg(\))195 1196 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c Fk(function)h -Fu(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(the)f(case)g(of)g -(an)g(in)o(v)m(alid)j Fk(k)o(ey)p Fu(.)1762 1304 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1304 V 21 w(un)n(bind)p 409 -1304 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 b(key)p Fg(\))195 -1359 y Fu(Bind)19 b Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i(function)f(in)g -(the)f(curren)o(tly)g(activ)o(e)h(k)o(eymap.)28 b(Returns)18 -b(non-zero)g(in)195 1414 y(case)d(of)g(error.)1762 1523 -y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1523 V -21 w(un)n(bind)p 409 1523 V 21 w(k)n(ey)p 514 1523 V -21 w(in)p 582 1523 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f -(map)p Fg(\))195 1577 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i -(function)f(in)g Fk(map)p Fu(.)k(Returns)14 b(non-zero)i(in)g(case)f -(of)g(error.)1762 1686 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 1686 V 21 w(un)n(bind)p 409 1686 V 21 w(function)p -635 1686 V 21 w(in)p 703 1686 V 21 w(map)h Fg(\()p Ft -(rl_command_func_t)13 b(*function,)283 1741 y(Keymap)h(map)p -Fg(\))195 1796 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i -Fk(function)g Fu(in)g Fk(map)p Fu(.)1762 1905 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1905 V 21 w(un)n(bind)p 409 -1905 V 21 w(command)p 674 1905 V 17 w(in)p 738 1905 V -22 w(map)h Fg(\()p Ft(const)14 b(char)h(*command,)f(Keymap)283 -1959 y(map)p Fg(\))195 2014 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f -(are)h(b)q(ound)h(to)f Fk(command)i Fu(in)f Fk(map)p -Fu(.)1762 2123 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2123 V 21 w(set)p 307 2123 V 20 w(k)n(ey)k Fg(\()p -Ft(const)14 b(char)h(*keyseq,)f(rl_command_func_t)f(*function,)283 -2178 y(Keymap)h(map)p Fg(\))195 2232 y Fu(Bind)g(the)e(k)o(ey)h -(sequence)h(represen)o(ted)f(b)o(y)f(the)h(string)f Fk(k)o(eyseq)i -Fu(to)e(the)g(function)i Fk(function)p Fu(.)19 b(This)195 -2287 y(mak)o(es)13 b(new)g(k)o(eymaps)g(as)f(necessary)l(.)20 -b(The)13 b(initial)j(k)o(eymap)c(in)i(whic)o(h)g(to)f(do)g(bindings)i -(is)f Fk(map)p Fu(.)1762 2396 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 2396 V 21 w(generic)p 413 2396 V 21 w(bind)j -Fg(\()p Ft(int)15 b(type,)f(const)h(char)f(*keyseq,)g(char)h(*data,)283 -2451 y(Keymap)f(map)p Fg(\))195 2506 y Fu(Bind)h(the)e(k)o(ey)h -(sequence)h(represen)o(ted)e(b)o(y)h(the)g(string)f Fk(k)o(eyseq)i -Fu(to)d(the)i(arbitrary)f(p)q(oin)o(ter)h Fk(data)p Fu(.)195 -2560 y Fk(t)o(yp)q(e)j Fu(sa)o(ys)c(what)h(kind)h(of)f(data)g(is)g(p)q -(oin)o(ted)i(to)d(b)o(y)h Fk(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f -(function)h(\()p Ft(ISFUNC)p Fu(\),)d(a)195 2615 y(macro)i(\()p -Ft(ISMACR)p Fu(\),)f(or)h(a)h(k)o(eymap)f(\()p Ft(ISKMAP)p -Fu(\).)k(This)e(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.)20 -b(The)195 2670 y(initial)d(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g -(bindings)i(is)f Fk(map)p Fu(.)p eop -%%Page: 31 33 -31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(31)1762 149 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(parse)p 369 149 V 19 w(and)p -480 149 V 21 w(bind)j Fg(\()p Ft(char)14 b(*line)p Fg(\))195 -204 y Fu(P)o(arse)g Fk(line)19 b Fu(as)14 b(if)h(it)g(had)g(b)q(een)h -(read)f(from)f(the)g Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)f(an)o -(y)h(k)o(ey)f(bindings)195 259 y(and)h(v)m(ariable)i(assignmen)o(ts)e -(found)h(\(see)f(Section)h(1.3)e([Readline)i(Init)g(File],)g(page)f -(4\).)1762 359 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 359 V 21 w(read)p 346 359 V 20 w(init)p 450 359 V -22 w(\014le)k Fg(\()p Ft(const)14 b(char)h(*filename)p -Fg(\))195 414 y Fu(Read)g(k)o(eybindings)j(and)e(v)m(ariable)h -(assignmen)o(ts)f(from)f Fk(\014lename)k Fu(\(see)d(Section)g(1.3)f -([Readline)195 469 y(Init)h(File],)g(page)f(4\).)75 571 -y Fj(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20 -b(Names)h(and)f(Bindings)137 664 y Fu(These)11 b(functions)h(allo)o(w)e -(y)o(ou)h(to)f(\014nd)h(out)f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f(named) -h(functions)h(and)e(the)h(functions)75 718 y(in)o(v)o(ok)o(ed)j(b)o(y)g -(a)f(particular)h(k)o(ey)g(sequence.)21 b(Y)l(ou)14 b(ma)o(y)f(also)g -(asso)q(ciate)h(a)g(new)g(function)g(name)g(with)g(an)75 -773 y(arbitrary)h(function.)1762 873 y(F)l(unction)-1861 -b Fi(rl_command_func_t)22 b(*)d Fh(rl)p 626 873 V 21 -w(named)p 814 873 V 19 w(function)k Fg(\()p Ft(const)14 -b(char)h(*name)p Fg(\))195 928 y Fu(Return)g(the)g(function)h(with)g -(name)f Fk(name)p Fu(.)1762 1028 y(F)l(unction)-1861 -b Fi(rl_command_func_t)22 b(*)d Fh(rl)p 626 1028 V 21 -w(function)p 852 1028 V 21 w(of)p 920 1028 V 20 w(k)n(eyseq)24 -b Fg(\()p Ft(const)14 b(char)283 1083 y(*keyseq,)g(Keymap)g(map,)h(int) -f(*type)p Fg(\))195 1138 y Fu(Return)i(the)g(function)h(in)o(v)o(ok)o -(ed)g(b)o(y)f Fk(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fk(map)p -Fu(.)23 b(If)17 b Fk(map)g Fu(is)g Ft(NULL)p Fu(,)f(the)g(curren)o(t) -195 1193 y(k)o(eymap)i(is)h(used.)31 b(If)18 b Fk(t)o(yp)q(e)j -Fu(is)e(not)g Ft(NULL)p Fu(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject) -f(is)h(returned)g(in)g(the)f Ft(int)195 1247 y Fu(v)m(ariable)f(it)e(p) -q(oin)o(ts)h(to)e(\(one)h(of)g Ft(ISFUNC)p Fu(,)f Ft(ISKMAP)p -Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1762 1347 y(F)l(unction)-1861 -b Fi(char)20 b(**)f Fh(rl)p 312 1347 V 21 w(in)n(v)n(oking)p -541 1347 V 23 w(k)n(eyseqs)k Fg(\()p Ft(rl_command_func_t)13 -b(*function)p Fg(\))195 1402 y Fu(Return)i(an)h(arra)o(y)e(of)h -(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in) -o(v)o(ok)o(e)h Fk(function)g Fu(in)195 1457 y(the)f(curren)o(t)g(k)o -(eymap.)1762 1557 y(F)l(unction)-1861 b Fi(char)20 b(**)f -Fh(rl)p 312 1557 V 21 w(in)n(v)n(oking)p 541 1557 V 23 -w(k)n(eyseqs)p 750 1557 V 21 w(in)p 818 1557 V 22 w(map)i -Fg(\()p Ft(rl_command_func_t)283 1612 y(*function,)13 -b(Keymap)i(map)p Fg(\))195 1667 y Fu(Return)g(an)h(arra)o(y)e(of)h -(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in) -o(v)o(ok)o(e)h Fk(function)g Fu(in)195 1722 y(the)f(k)o(eymap)g -Fk(map)p Fu(.)1762 1822 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 1822 V 21 w(function)p 467 1822 V 21 w(dump)r(er)g -Fg(\()p Ft(int)15 b(readable)p Fg(\))195 1876 y Fu(Prin)o(t)g(the)f -(readline)j(function)e(names)g(and)f(the)h(k)o(ey)g(sequences)g(curren) -o(tly)g(b)q(ound)h(to)e(them)h(to)195 1931 y Ft(rl_outstream)p -Fu(.)j(If)c Fk(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)h -(formatted)d(in)j(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)195 -1986 y(b)q(e)i(made)f(part)g(of)f(an)i Ft(inputrc)e Fu(\014le)i(and)f -(re-read.)1762 2086 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 2086 V 21 w(list)p 337 2086 V 22 w(funmap)p -550 2086 V 18 w(names)h Fg(\()p Ft(void)p Fg(\))195 2141 -y Fu(Prin)o(t)15 b(the)g(names)h(of)e(all)j(bindable)g(Readline)f -(functions)g(to)f Ft(rl_outstream)p Fu(.)1762 2241 y(F)l(unction)-1861 -b Fi(const)20 b(char)g(**)f Fh(rl)p 462 2241 V 21 w(funmap)p -674 2241 V 18 w(names)i Fg(\()p Ft(void)p Fg(\))195 2296 -y Fu(Return)13 b(a)f(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g -(function)g(names.)20 b(The)13 b(arra)o(y)f(is)h(sorted.)19 -b(The)195 2351 y(arra)o(y)11 b(itself)j(is)f(allo)q(cated,)h(but)f(not) -f(the)h(strings)f(inside.)21 b(Y)l(ou)13 b(should)h Ft(free\(\))d -Fu(the)i(arra)o(y)e(when)195 2405 y(y)o(ou)k(are)g(done,)g(but)g(not)g -(the)g(p)q(oin)o(ters.)1762 2506 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(add)p 328 2506 -V 20 w(funmap)p 539 2506 V 18 w(en)n(try)j Fg(\()p Ft(const)14 -b(char)h(*name,)f(rl_command_func_t)283 2560 y(*function)p -Fg(\))195 2615 y Fu(Add)j Fk(name)i Fu(to)d(the)g(list)h(of)f(bindable) -j(Readline)f(command)e(names,)g(and)h(mak)o(e)f Fk(function)h -Fu(the)195 2670 y(function)f(to)f(b)q(e)g(called)i(when)f -Fk(name)i Fu(is)d(in)o(v)o(ok)o(ed.)p eop -%%Page: 32 34 -32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fj(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 251 -y Fu(Supp)q(orting)14 b(the)g(undo)f(command)g(is)h(a)f(painless)h -(thing,)g(and)f(mak)o(es)g(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75 -306 y(useful.)21 b(It)15 b(is)h(certainly)g(easy)f(to)g(try)f -(something)i(if)f(y)o(ou)g(kno)o(w)g(y)o(ou)g(can)g(undo)h(it.)137 -378 y(If)21 b(y)o(our)f(function)h(simply)h(inserts)f(text)e(once,)j -(or)e(deletes)h(text)f(once,)i(and)f(uses)f Ft(rl_insert_)75 -433 y(text\(\))13 b Fu(or)h Ft(rl_delete_text\(\))d Fu(to)j(do)f(it,)h -(then)h(undoing)g(is)f(already)g(done)h(for)e(y)o(ou)h(automatically)l -(.)137 506 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o -(ultiple)i(deletions,)g(or)e(an)o(y)g(com)o(bination)h(of)f(these)g(op) -q(erations,)75 560 y(y)o(ou)19 b(should)h(group)e(them)h(together)g(in) -o(to)g(one)g(op)q(eration.)31 b(This)20 b(is)f(done)h(with)f -Ft(rl_begin_undo_)75 615 y(group\(\))14 b Fu(and)i Ft -(rl_end_undo_group\(\))p Fu(.)137 688 y(The)g(t)o(yp)q(es)f(of)g(ev)o -(en)o(ts)g(that)f(can)h(b)q(e)h(undone)g(are:)195 757 -y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)e(UNDO_INSERT,)g -(UNDO_BEGIN,)g(UNDO_END)h(};)137 830 y Fu(Notice)16 b(that)e -Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g(some)g(text,)f(and)i -Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75 885 y(some)e(text.)19 -b(That)14 b(is,)g(the)g(undo)g(co)q(de)g(tells)h(what)e(to)h(undo,)g -(not)f(ho)o(w)g(to)g(undo)i(it.)k Ft(UNDO_BEGIN)13 b -Fu(and)75 939 y Ft(UNDO_END)h Fu(are)h(tags)f(added)i(b)o(y)f -Ft(rl_begin_undo_group\(\))d Fu(and)k Ft(rl_end_undo_group\(\))p -Fu(.)1762 1072 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1072 18 3 v 21 w(b)r(egin)p 372 1072 V 20 w(undo)p -517 1072 V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 1127 -y Fu(Begins)16 b(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g -(construct.)20 b(The)c(undo)g(information)g(usually)195 -1182 y(comes)21 b(from)f(calls)i(to)e Ft(rl_insert_text\(\))e -Fu(and)j Ft(rl_delete_text\(\))p Fu(,)f(but)h(could)g(b)q(e)h(the)195 -1237 y(result)16 b(of)e(calls)j(to)d Ft(rl_add_undo\(\))p -Fu(.)1762 1370 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1370 V 21 w(end)p 326 1370 V 20 w(undo)p 471 1370 -V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 1424 y Fu(Closes)15 -b(the)f(curren)o(t)h(undo)g(group)f(started)g(with)g -Ft(rl_begin_undo_group)f(\(\))p Fu(.)19 b(There)c(should)195 -1479 y(b)q(e)h(one)f(call)i(to)d Ft(rl_end_undo_group\(\))f -Fu(for)h(eac)o(h)h(call)i(to)d Ft(rl_begin_undo_group\(\))p -Fu(.)1762 1612 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p -241 1612 V 21 w(add)p 354 1612 V 20 w(undo)i Fg(\()p -Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)h(char)283 -1667 y(*text)p Fg(\))195 1722 y Fu(Remem)o(b)q(er)i(ho)o(w)f(to)h(undo) -g(an)g(ev)o(en)o(t)g(\(according)g(to)g Fk(what)q Fu(\).)24 -b(The)17 b(a\013ected)g(text)f(runs)i(from)195 1776 y -Fk(start)d Fu(to)g Fk(end)p Fu(,)g(and)g(encompasses)h -Fk(text)p Fu(.)1762 1909 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 1909 V 21 w(free)p 356 1909 V 20 w(undo)p -501 1909 V 20 w(list)k Fg(\()p Ft(void)p Fg(\))195 1964 -y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1762 -2097 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2097 -V 21 w(do)p 297 2097 V 20 w(undo)i Fg(\()p Ft(void)p -Fg(\))195 2152 y Fu(Undo)12 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h -(list.)19 b(Returns)11 b Ft(0)h Fu(if)g(there)f(w)o(as)g(nothing)h(to)e -(undo,)j(non-zero)195 2206 y(if)j(something)f(w)o(as)f(undone.)137 -2309 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i -(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,) -75 2364 y(c)o(hange)j(its)h(case\),)g(call)g Ft(rl_modifying\(\))e -Fu(once,)i(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f(text.)32 -b(Y)l(ou)20 b(m)o(ust)75 2419 y(supply)c(the)g(indices)h(of)e(the)g -(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)1762 -2552 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2552 -V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p -Fg(\))195 2606 y Fu(T)l(ell)22 b(Readline)f(to)e(sa)o(v)o(e)h(the)g -(text)g(b)q(et)o(w)o(een)g Fk(start)g Fu(and)g Fk(end)j -Fu(as)c(a)h(single)h(undo)g(unit.)35 b(It)20 b(is)195 -2661 y(assumed)15 b(that)g(y)o(ou)g(will)i(subsequen)o(tly)f(mo)q(dify) -g(that)e(text.)p eop -%%Page: 33 35 -33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(33)75 149 y Fj(2.4.6)30 b(Redispla)n(y)1762 -302 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 -302 18 3 v 21 w(redispla)n(y)k Fg(\()p Ft(void)p Fg(\))195 -356 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)g(screen)g(to) -f(re\015ect)i(the)f(curren)o(t)f(con)o(ten)o(ts)h(of)f -Ft(rl_line_)195 411 y(buffer)p Fu(.)1762 534 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 534 V 21 w(forced)p 390 534 -V 20 w(up)r(date)p 584 534 V 20 w(displa)n(y)k Fg(\()p -Ft(void)p Fg(\))195 589 y Fu(F)l(orce)c(the)g(line)h(to)e(b)q(e)i(up)q -(dated)f(and)g(redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)i -(thinks)g(the)195 644 y(screen)16 b(displa)o(y)g(is)g(correct.)1762 -767 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 767 -V 21 w(on)p 297 767 V 20 w(new)p 416 767 V 21 w(line)k -Fg(\()p Ft(void)p Fg(\))195 822 y Fu(T)l(ell)16 b(the)f(up)q(date)h -(functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h -(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 877 -y(ouputting)f(a)e(newline.)1762 1000 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1000 V 21 w(on)p 297 1000 V -20 w(new)p 416 1000 V 21 w(line)p 525 1000 V 22 w(with)p -657 1000 V 22 w(prompt)h Fg(\()p Ft(void)p Fg(\))195 -1055 y Fu(T)l(ell)14 b(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha) -o(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f -Fk(rl)p 1556 1055 14 2 v 17 w(prompt)g Fu(already)195 -1109 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f -(applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g -(string)195 1164 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)g(to) -e(kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21 -b(It)195 1219 y(should)16 b(b)q(e)g(used)g(after)e(setting)i -Fk(rl)p 795 1219 V 16 w(already)p 956 1219 V 17 w(prompted)p -Fu(.)1762 1342 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1342 18 3 v 21 w(reset)p 357 1342 V 20 w(line)p 465 -1342 V 23 w(state)j Fg(\()p Ft(void)p Fg(\))195 1397 -y Fu(Reset)17 b(the)g(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f -(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195 -1452 y(new)e(line.)1762 1575 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 1575 V 21 w(crlf)j Fg(\()p Ft(void)p Fg(\))195 -1630 y Fu(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g -(next)g(screen)h(line.)1762 1753 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1753 V 21 w(sho)n(w)p 359 1753 -V 20 w(c)n(har)j Fg(\()p Ft(int)14 b(c)p Fg(\))195 1807 -y Fu(Displa)o(y)j(c)o(haracter)e Fk(c)20 b Fu(on)c Ft(rl_outstream)p -Fu(.)21 b(If)c(Readline)g(has)f(not)g(b)q(een)i(set)e(to)f(displa)o(y)j -(meta)195 1862 y(c)o(haracters)12 b(directly)l(,)j(this)e(will)i(con)o -(v)o(ert)d(meta)h(c)o(haracters)f(to)g(a)h(meta-pre\014xed)g(k)o(ey)g -(sequence.)195 1917 y(This)j(is)f(in)o(tended)i(for)e(use)g(b)o(y)g -(applications)i(whic)o(h)f(wish)g(to)f(do)g(their)g(o)o(wn)g(redispla)o -(y)l(.)1762 2040 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2040 V 21 w(message)g Fg(\()p Ft(const)14 b(char)h(*,)g(...)p -Fg(\))195 2095 y Fu(The)c(argumen)o(ts)e(are)h(a)g(format)f(string)h -(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)c Ft(printf)p -Fu(,)h(p)q(ossibly)i(con)o(taining)195 2150 y(con)o(v)o(ersion)22 -b(sp)q(eci\014cations)i(suc)o(h)f(as)e(`)p Ft(\045d)p -Fu(',)i(and)f(an)o(y)g(additional)h(argumen)o(ts)e(necessary)i(to)195 -2205 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q(eci\014cations.)38 -b(The)21 b(resulting)h(string)e(is)i(displa)o(y)o(ed)g(in)f(the)g -Fk(ec)o(ho)195 2259 y(area)p Fu(.)e(The)d(ec)o(ho)f(area)g(is)g(also)g -(used)h(to)f(displa)o(y)h(n)o(umeric)g(argumen)o(ts)f(and)g(searc)o(h)g -(strings.)1762 2382 y(F)l(unction)-1861 b Fi(int)20 b -Fh(rl)p 215 2382 V 21 w(clear)p 354 2382 V 21 w(message)h -Fg(\()p Ft(void)p Fg(\))195 2437 y Fu(Clear)15 b(the)h(message)e(in)i -(the)g(ec)o(ho)f(area.)1762 2560 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2560 V 21 w(sa)n(v)n(e)p 365 -2560 V 21 w(prompt)h Fg(\()p Ft(void)p Fg(\))195 2615 -y Fu(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)h(prompt)e(displa)o(y)i -(state)e(in)h(preparation)f(for)g(displa)o(ying)j(a)d(new)195 -2670 y(message)15 b(in)h(the)f(message)g(area)f(with)i -Ft(rl_message\(\))p Fu(.)p eop -%%Page: 34 36 -34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)h(Library)1762 -149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149 -18 3 v 21 w(restore)p 436 149 V 20 w(prompt)g Fg(\()p -Ft(void)p Fg(\))195 204 y Fu(Restore)g(the)i(lo)q(cal)g(Readline)h -(prompt)e(displa)o(y)h(state)f(sa)o(v)o(ed)g(b)o(y)g(the)g(most)g -(recen)o(t)g(call)i(to)195 259 y Ft(rl_save_prompt)p -Fu(.)1762 369 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 369 V 21 w(expand)p 416 369 V 20 w(prompt)h Fg(\()p -Ft(char)14 b(*prompt)p Fg(\))195 423 y Fu(Expand)22 b(an)o(y)f(sp)q -(ecial)i(c)o(haracter)e(sequences)h(in)g Fk(prompt)g -Fu(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195 478 -y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18 -b(function)h(is)f(called)i(b)o(y)e Ft(readline\(\))p -Fu(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 533 y(called)12 -b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Ft -(rl_on_new_line_with_prompt\(\))d Fu(function)195 588 -y(or)12 b Ft(rl_already_prompted)e Fu(v)m(ariable)k(is)g(used.)19 -b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o -(haracters)195 643 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q(ossibly) -i(m)o(ulti-line\))g(prompt.)1762 752 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 752 V 21 w(set)p 307 752 V -20 w(prompt)h Fg(\()p Ft(const)14 b(char)h(*prompt)p -Fg(\))195 807 y Fu(Mak)o(e)e(Readline)i(use)e Fk(prompt)h -Fu(for)f(subsequen)o(t)h(redispla)o(y)l(.)21 b(This)14 -b(calls)g Ft(rl_expand_prompt\(\))195 862 y Fu(to)h(expand)g(the)h -(prompt)e(and)i(sets)f Ft(rl_prompt)f Fu(to)g(the)h(result.)75 -970 y Fj(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1762 -1108 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 -1108 V 21 w(insert)p 378 1108 V 21 w(text)k Fg(\()p Ft(const)14 -b(char)g(*text)p Fg(\))195 1163 y Fu(Insert)i Fk(text)g -Fu(in)o(to)g(the)g(line)h(at)f(the)g(curren)o(t)f(cursor)h(p)q -(osition.)22 b(Returns)16 b(the)g(n)o(um)o(b)q(er)g(of)f(c)o(har-)195 -1218 y(acters)g(inserted.)1762 1328 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1328 V 21 w(delete)p 383 1328 -V 22 w(text)k Fg(\()p Ft(int)14 b(start,)h(int)f(end)p -Fg(\))195 1382 y Fu(Delete)19 b(the)g(text)g(b)q(et)o(w)o(een)g -Fk(start)g Fu(and)g Fk(end)i Fu(in)f(the)f(curren)o(t)f(line.)33 -b(Returns)18 b(the)h(n)o(um)o(b)q(er)g(of)195 1437 y(c)o(haracters)14 -b(deleted.)1762 1547 y(F)l(unction)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 1547 V 21 w(cop)n(y)p 421 1547 V 21 -w(text)24 b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p -Fg(\))195 1602 y Fu(Return)g(a)g(cop)o(y)g(of)g(the)g(text)f(b)q(et)o -(w)o(een)i Fk(start)f Fu(and)g Fk(end)j Fu(in)e(the)f(curren)o(t)g -(line.)1762 1711 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1711 V 21 w(kill)p 311 1711 V 23 w(text)k Fg(\()p -Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 1766 y Fu(Cop)o(y)i(the)g -(text)f(b)q(et)o(w)o(een)i Fk(start)f Fu(and)g Fk(end)i -Fu(in)f(the)f(curren)o(t)g(line)i(to)e(the)g(kill)i(ring,)e(app)q -(ending)195 1821 y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e -(the)g(last)g(command)g(w)o(as)f(a)h(kill)i(command.)25 -b(The)17 b(text)f(is)195 1876 y(deleted.)26 b(If)17 b -Fk(start)g Fu(is)g(less)g(than)g Fk(end)p Fu(,)g(the)g(text)g(is)g(app) -q(ended,)h(otherwise)f(prep)q(ended.)27 b(If)17 b(the)195 -1930 y(last)e(command)g(w)o(as)g(not)f(a)h(kill,)i(a)e(new)g(kill)i -(ring)f(slot)f(is)h(used.)1762 2040 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2040 V 21 w(push)p 355 2040 -V 19 w(macro)p 529 2040 V 19 w(input)k Fg(\()p Ft(char)14 -b(*macro)p Fg(\))195 2095 y Fu(Cause)g Fk(macro)i Fu(to)d(b)q(e)i -(inserted)g(in)o(to)f(the)g(line,)i(as)e(if)g(it)h(had)f(b)q(een)h(in)o -(v)o(ok)o(ed)g(b)o(y)f(a)g(k)o(ey)g(b)q(ound)h(to)195 -2150 y(a)g(macro.)k(Not)c(esp)q(ecially)i(useful;)f(use)g -Ft(rl_insert_text\(\))d Fu(instead.)75 2257 y Fj(2.4.8)30 -b(Character)21 b(Input)1762 2396 y Fu(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2396 V 21 w(read)p 346 2396 -V 20 w(k)n(ey)k Fg(\()p Ft(void)p Fg(\))195 2451 y Fu(Return)14 -b(the)h(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e(Readline's)i -(curren)o(t)f(input)g(stream.)k(This)d(han-)195 2506 -y(dles)f(input)g(inserted)f(in)o(to)g(the)g(input)h(stream)e(via)h -Fk(rl)p 1117 2506 14 2 v 17 w(p)q(ending)p 1290 2506 -V 18 w(input)i Fu(\(see)e(Section)h(2.3)e([Read-)195 -2560 y(line)21 b(V)l(ariables],)g(page)f(24\))f(and)h -Ft(rl_stuff_char\(\))p Fu(,)e(macros,)h(and)h(c)o(haracters)f(read)h -(from)195 2615 y(the)d(k)o(eyb)q(oard.)25 b(While)19 -b(w)o(aiting)e(for)f(input,)j(this)e(function)h(will)h(call)f(an)o(y)e -(function)i(assigned)195 2670 y(to)d(the)g Ft(rl_event_hook)e -Fu(v)m(ariable.)p eop -%%Page: 35 37 -35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(35)1762 149 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(getc)j Fg(\()p Ft(FILE)14 -b(*stream)p Fg(\))195 204 y Fu(Return)c(the)h(next)g(c)o(haracter)f(a)o -(v)m(ailable)i(from)e Fk(stream)p Fu(,)g(whic)o(h)i(is)f(assumed)f(to)g -(b)q(e)i(the)e(k)o(eyb)q(oard.)1762 342 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 342 V 21 w(stu\013)p 346 342 -V 20 w(c)n(har)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 397 -y Fu(Insert)i Fk(c)i Fu(in)o(to)d(the)h(Readline)h(input)f(stream.)23 -b(It)16 b(will)i(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)f -(Readline)i(attempts)195 452 y(to)13 b(read)g(c)o(haracters)g(from)f -(the)i(terminal)g(with)g Ft(rl_read_key\(\))p Fu(.)j(Up)d(to)f(512)f(c) -o(haracters)h(ma)o(y)195 507 y(b)q(e)j(pushed)g(bac)o(k.)k -Ft(rl_stuff_char)14 b Fu(returns)h(1)g(if)h(the)f(c)o(haracter)g(w)o -(as)f(successfully)j(inserted;)195 562 y(0)e(otherwise.)1762 -700 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 700 -V 21 w(execute)p 423 700 V 22 w(next)j Fg(\()p Ft(int)15 -b(c)p Fg(\))195 754 y Fu(Mak)o(e)i Fk(c)k Fu(b)q(e)d(the)g(next)g -(command)g(to)f(b)q(e)i(executed)f(when)h Ft(rl_read_key\(\))d -Fu(is)i(called.)29 b(This)195 809 y(sets)15 b Fk(rl)p -317 809 14 2 v 17 w(p)q(ending)p 490 809 V 18 w(input)p -Fu(.)1762 947 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 947 18 3 v 21 w(clear)p 354 947 V 21 w(p)r(ending)p -575 947 V 21 w(input)j Fg(\()p Ft(void)p Fg(\))195 1002 -y Fu(Unset)f Fk(rl)p 365 1002 14 2 v 16 w(p)q(ending)p -537 1002 V 19 w(input)p Fu(,)h(e\013ectiv)o(ely)g(negating)e(the)h -(e\013ect)f(of)g(an)o(y)h(previous)g(call)h(to)d Ft(rl_)195 -1057 y(execute_next\(\))p Fu(.)29 b(This)19 b(w)o(orks)f(only)h(if)h -(the)e(p)q(ending)j(input)f(has)f(not)f(already)h(b)q(een)h(read)195 -1112 y(with)c Ft(rl_read_key\(\))p Fu(.)1762 1250 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1250 18 3 v 21 w(set)p 307 -1250 V 20 w(k)n(eyb)r(oard)p 558 1250 V 21 w(input)p -712 1250 V 21 w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195 -1305 y Fu(While)21 b(w)o(aiting)g(for)e(k)o(eyb)q(oard)h(input)h(in)g -Ft(rl_read_key\(\))p Fu(,)e(Readline)i(will)h(w)o(ait)e(for)f -Fk(u)h Fu(mi-)195 1360 y(croseconds)h(for)e(input)j(b)q(efore)f -(calling)h(an)o(y)e(function)h(assigned)g(to)f Ft(rl_event_hook)p -Fu(.)34 b(The)195 1414 y(default)16 b(w)o(aiting)f(p)q(erio)q(d)i(is)e -(one-ten)o(th)h(of)e(a)h(second.)21 b(Returns)14 b(the)i(old)f(timeout) -h(v)m(alue.)75 1540 y Fj(2.4.9)30 b(T)-5 b(erminal)20 -b(Managemen)n(t)1762 1708 y Fu(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 1708 V 21 w(prep)p 376 1708 V 20 w(terminal)j -Fg(\()p Ft(int)14 b(meta_flag)p Fg(\))195 1762 y Fu(Mo)q(dify)22 -b(the)f(terminal)h(settings)f(for)g(Readline's)h(use,)h(so)d -Ft(readline\(\))g Fu(can)i(read)f(a)g(single)195 1817 -y(c)o(haracter)15 b(at)g(a)g(time)i(from)d(the)i(k)o(eyb)q(oard.)22 -b(The)16 b Fk(meta)p 1192 1817 14 2 v 15 w(\015ag)k Fu(argumen)o(t)15 -b(should)h(b)q(e)h(non-zero)195 1872 y(if)f(Readline)g(should)g(read)f -(eigh)o(t-bit)i(input.)1762 2010 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2010 18 3 v 21 w(deprep)p -434 2010 V 20 w(terminal)j Fg(\()p Ft(void)p Fg(\))195 -2065 y Fu(Undo)16 b(the)g(e\013ects)f(of)h Ft(rl_prep_terminal\(\))p -Fu(,)d(lea)o(ving)k(the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h) -195 2120 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i -(to)d Ft(rl_prep_terminal\(\))p Fu(.)1762 2258 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2258 V 21 w(tt)n(y)p 334 2258 -V 22 w(set)p 427 2258 V 20 w(default)p 620 2258 V 21 -w(bindings)k Fg(\()p Ft(Keymap)14 b(kmap)p Fg(\))195 -2313 y Fu(Read)k(the)h(op)q(erating)f(system's)g(terminal)h(editing)h -(c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195 -2367 y Ft(stty)p Fu(\))14 b(to)h(their)h(Readline)g(equiv)m(alen)o(ts.) -22 b(The)15 b(bindings)i(are)e(p)q(erformed)g(in)h Fk(kmap)p -Fu(.)1762 2506 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2506 V 21 w(reset)p 357 2506 V 20 w(terminal)j Fg(\()p -Ft(const)15 b(char)f(*terminal_name)p Fg(\))195 2560 -y Fu(Reinitialize)h(Readline's)e(idea)g(of)f(the)g(terminal)h(settings) -g(using)g Fk(terminal)p 1491 2560 14 2 v 17 w(name)h -Fu(as)e(the)h(termi-)195 2615 y(nal)k(t)o(yp)q(e)f(\(e.g.,)f -Ft(vt100)p Fu(\).)21 b(If)c Fk(terminal)p 878 2615 V -17 w(name)i Fu(is)d Ft(NULL)p Fu(,)g(the)g(v)m(alue)h(of)f(the)g -Ft(TERM)g Fu(en)o(vironmen)o(t)195 2670 y(v)m(ariable)h(is)e(used.)p -eop -%%Page: 36 38 -36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fj(2.4.10)29 b(Utilit)n(y)22 b(F)-5 b(unctions)1762 -287 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 -287 18 3 v 21 w(replace)p 438 287 V 22 w(line)k Fg(\()p -Ft(const)14 b(char)h(*text,)f(int)h(clear_undo)p Fg(\))195 -342 y Fu(Replace)20 b(the)g(con)o(ten)o(ts)f(of)g Ft(rl_line_buffer)f -Fu(with)i Fk(text)p Fu(.)33 b(The)20 b(p)q(oin)o(t)g(and)g(mark)f(are)h -(pre-)195 397 y(serv)o(ed,)13 b(if)h(p)q(ossible.)21 -b(If)13 b Fk(clear)p 712 397 14 2 v 17 w(undo)j Fu(is)d(non-zero,)h -(the)f(undo)g(list)h(asso)q(ciated)g(with)f(the)g(curren)o(t)195 -452 y(line)k(is)f(cleared.)1762 561 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 561 18 3 v 21 w(extend)p 404 -561 V 21 w(line)p 513 561 V 22 w(bu\013er)j Fg(\()p Ft(int)15 -b(len)p Fg(\))195 616 y Fu(Ensure)g(that)g Ft(rl_line_buffer)e -Fu(has)i(enough)g(space)h(to)e(hold)i Fk(len)g Fu(c)o(haracters,)e(p)q -(ossibly)i(real-)195 670 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1762 -779 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 779 -V 21 w(initiali)q(z)q(e)26 b Fg(\()p Ft(void)p Fg(\))195 -834 y Fu(Initialize)21 b(or)d(re-initialize)k(Readline's)d(in)o(ternal) -h(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)195 -889 y(this;)d Ft(readline\(\))f Fu(calls)i(it)g(b)q(efore)f(reading)h -(an)o(y)f(input.)1762 998 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 998 V 21 w(ding)j Fg(\()p Ft(void)p Fg(\))195 -1053 y Fu(Ring)15 b(the)g(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g -(setting)f(of)g Ft(bell-style)p Fu(.)1762 1162 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1162 V 21 w(alphab)r(etic)k -Fg(\()p Ft(int)14 b(c)p Fg(\))195 1217 y Fu(Return)h(1)g(if)g -Fk(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1762 -1325 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1325 -V 21 w(displa)n(y)p 435 1325 V 22 w(matc)n(h)p 611 1325 -V 20 w(list)25 b Fg(\()p Ft(char)14 b(**matches,)g(int)g(len,)h(int)g -(max)p Fg(\))195 1380 y Fu(A)i(con)o(v)o(enience)i(function)f(for)f -(displa)o(ying)i(a)e(list)h(of)e(strings)h(in)i(columnar)e(format)f(on) -h(Read-)195 1435 y(line's)h(output)f(stream.)23 b Ft(matches)16 -b Fu(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h -(as)f(a)h(list)g(of)195 1490 y(completion)c(matc)o(hes.)19 -b Ft(len)11 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h -Ft(matches)p Fu(,)f(and)g Ft(max)g Fu(is)g(the)h(length)f(of)195 -1545 y(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)19 -b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Ft -(print-completions-)195 1599 y(horizontally)k Fu(to)i(select)h(ho)o(w)e -(the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d -([Readline)195 1654 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137 -1742 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f -(de\014ned)i(in)g Ft(chardefs.h)p Fu(.)k(Applications)d(should)75 -1796 y(refrain)d(from)g(using)h(them.)1762 1905 y(F)l(unction)-1861 -b Fi(int)p 176 1905 V 40 w Fh(rl)p 235 1905 V 21 w(upp)r(ercase)p -506 1905 V 20 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195 -1960 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q -(etic)f(c)o(haracter.)1762 2069 y(F)l(unction)-1861 b -Fi(int)p 176 2069 V 40 w Fh(rl)p 235 2069 V 21 w(lo)n(w)n(ercase)p -489 2069 V 23 w(p)22 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 -2124 y Fu(Return)g(1)g(if)g Fk(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g -(alphab)q(etic)i(c)o(haracter.)1762 2233 y(F)l(unction)-1861 -b Fi(int)p 176 2233 V 40 w Fh(rl)p 235 2233 V 21 w(digit)p -369 2233 V 22 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195 -2288 y Fu(Return)h(1)g(if)g Fk(c)j Fu(is)e(a)f(n)o(umeric)h(c)o -(haracter.)1762 2397 y(F)l(unction)-1861 b Fi(int)p 176 -2397 V 40 w Fh(rl)p 235 2397 V 21 w(to)p 307 2397 V 21 -w(upp)r(er)21 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 2451 -y Fu(If)d Fk(c)j Fu(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o -(haracter,)d(return)h(the)g(corresp)q(onding)h(upp)q(ercase)g(c)o -(haracter.)1762 2560 y(F)l(unction)-1861 b Fi(int)p 176 -2560 V 40 w Fh(rl)p 235 2560 V 21 w(to)p 307 2560 V 21 -w(lo)n(w)n(er)24 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 -2615 y Fu(If)g Fk(c)i Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o -(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o(ercase)f(c)o -(harac-)195 2670 y(ter.)p eop -%%Page: 37 39 -37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(37)1762 149 y(F)l(unction)-1861 b Fi(int)p -176 149 18 3 v 40 w Fh(rl)p 235 149 V 21 w(digit)p 369 -149 V 22 w(v)m(alue)24 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 -204 y Fu(If)g Fk(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g(the)h(v)m -(alue)g(it)g(represen)o(ts.)75 325 y Fj(2.4.11)29 b(Miscellaneous)22 -b(F)-5 b(unctions)1762 484 y Fu(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 484 V 21 w(macro)p 391 484 V 19 w(bind)j -Fg(\()p Ft(const)14 b(char)g(*keyseq,)h(const)f(char)h(*macro,)283 -539 y(Keymap)f(map)p Fg(\))195 593 y Fu(Bind)f(the)f(k)o(ey)f(sequence) -i Fk(k)o(eyseq)g Fu(to)e(in)o(v)o(ok)o(e)g(the)h(macro)f -Fk(macro)p Fu(.)18 b(The)12 b(binding)h(is)f(p)q(erformed)g(in)195 -648 y Fk(map)p Fu(.)19 b(When)14 b Fk(k)o(eyseq)h Fu(is)f(in)o(v)o(ok)o -(ed,)g(the)g Fk(macro)i Fu(will)f(b)q(e)f(inserted)h(in)o(to)f(the)g -(line.)21 b(This)14 b(function)195 703 y(is)i(deprecated;)f(use)h -Ft(rl_generic_bind\(\))d Fu(instead.)1762 833 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 833 V 21 w(macro)p 417 833 -V 19 w(dump)r(er)g Fg(\()p Ft(int)15 b(readable)p Fg(\))195 -888 y Fu(Prin)o(t)f(the)f(k)o(ey)h(sequences)g(b)q(ound)h(to)e(macros)g -(and)g(their)h(v)m(alues,)h(using)f(the)g(curren)o(t)g(k)o(eymap,)195 -943 y(to)h Ft(rl_outstream)p Fu(.)k(If)d Fk(readable)j -Fu(is)d(non-zero,)g(the)g(list)g(is)g(formatted)f(in)h(suc)o(h)g(a)f(w) -o(a)o(y)g(that)g(it)195 997 y(can)g(b)q(e)h(made)f(part)g(of)g(an)g -Ft(inputrc)f Fu(\014le)i(and)g(re-read.)1762 1127 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1127 V 21 w(v)m(ariable)p 431 -1127 V 22 w(bind)j Fg(\()p Ft(const)14 b(char)g(*variable,)g(const)h -(char)f(*value)p Fg(\))195 1182 y Fu(Mak)o(e)22 b(the)g(Readline)i(v)m -(ariable)g Fk(v)m(ariable)j Fu(ha)o(v)o(e)22 b Fk(v)m(alue)p -Fu(.)43 b(This)23 b(b)q(eha)o(v)o(es)g(as)f(if)h(the)f(readline)195 -1237 y(command)12 b(`)p Ft(set)j Fk(v)m(ariable)k(v)m(alue)s -Fu(')12 b(had)h(b)q(een)g(executed)h(in)f(an)f Ft(inputrc)g -Fu(\014le)h(\(see)f(Section)i(1.3.1)195 1292 y([Readline)i(Init)g(File) -h(Syn)o(tax],)d(page)h(4\).)1762 1422 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 1422 V 21 w(v)m(ariable)p -457 1422 V 22 w(dump)r(er)g Fg(\()p Ft(int)14 b(readable)p -Fg(\))195 1476 y Fu(Prin)o(t)g(the)h(readline)h(v)m(ariable)f(names)g -(and)f(their)h(curren)o(t)f(v)m(alues)i(to)d Ft(rl_outstream)p -Fu(.)18 b(If)d Fk(read-)195 1531 y(able)20 b Fu(is)e(non-zero,)f(the)g -(list)h(is)g(formatted)e(in)h(suc)o(h)h(a)e(w)o(a)o(y)g(that)h(it)g -(can)g(b)q(e)h(made)f(part)f(of)h(an)195 1586 y Ft(inputrc)d -Fu(\014le)i(and)g(re-read.)1762 1716 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1716 V 21 w(set)p 307 1716 -V 20 w(paren)p 469 1716 V 20 w(blink)p 613 1716 V 23 -w(timeout)i Fg(\()p Ft(int)15 b(u)p Fg(\))195 1771 y -Fu(Set)e(the)f(time)h(in)o(terv)m(al)h(\(in)f(microseconds\))g(that)f -(Readline)i(w)o(aits)e(when)h(sho)o(wing)f(a)h(balancing)195 -1826 y(c)o(haracter)h(when)i Ft(blink-matching-paren)d -Fu(has)i(b)q(een)h(enabled.)1762 1956 y(F)l(unction)-1861 -b Fi(char)20 b(*)f Fh(rl)p 286 1956 V 21 w(get)p 384 -1956 V 21 w(termcap)j Fg(\()p Ft(const)14 b(char)g(*cap)p -Fg(\))195 2010 y Fu(Retriev)o(e)f(the)h(string)f(v)m(alue)i(of)e(the)h -(termcap)f(capabilit)o(y)i Fk(cap)p Fu(.)k(Readline)c(fetc)o(hes)f(the) -f(termcap)195 2065 y(en)o(try)j(for)h(the)f(curren)o(t)h(terminal)h -(name)e(and)h(uses)g(those)g(capabilities)i(to)d(mo)o(v)o(e)g(around)h -(the)195 2120 y(screen)11 b(line)h(and)f(p)q(erform)f(other)g -(terminal-sp)q(eci\014c)k(op)q(erations,)d(lik)o(e)h(erasing)e(a)h -(line.)20 b(Readline)195 2175 y(do)q(es)e(not)f(use)h(all)g(of)f(a)g -(terminal's)h(capabilities,)i(and)e(this)g(function)g(will)h(return)f -(v)m(alues)h(for)195 2230 y(only)d(those)f(capabilities)i(Readline)g -(uses.)75 2350 y Fj(2.4.12)29 b(Alternate)21 b(In)n(terface)137 -2451 y Fu(An)i(alternate)f(in)o(terface)h(is)g(a)o(v)m(ailable)h(to)d -(plain)j Ft(readline\(\))p Fu(.)40 b(Some)22 b(applications)i(need)g -(to)75 2506 y(in)o(terlea)o(v)o(e)15 b(k)o(eyb)q(oard)f(I/O)h(with)g -(\014le,)h(device,)f(or)f(windo)o(w)h(system)f(I/O,)h(t)o(ypically)h(b) -o(y)e(using)h(a)g(main)75 2560 y(lo)q(op)f(to)g Ft(select\(\))e -Fu(on)i(v)m(arious)g(\014le)h(descriptors.)20 b(T)l(o)14 -b(accomo)q(date)f(this)h(need,)h(readline)g(can)f(also)g(b)q(e)75 -2615 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o(k')h(function)h(from)d -(an)i(ev)o(en)o(t)f(lo)q(op.)22 b(There)16 b(are)f(functions)h(a)o(v)m -(ailable)i(to)c(mak)o(e)75 2670 y(this)i(easy)l(.)p eop -%%Page: 38 40 -38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)h(Library)1762 -149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149 -18 3 v 21 w(callbac)n(k)p 458 149 V 23 w(handler)p 670 -149 V 21 w(install)25 b Fg(\()p Ft(const)14 b(char)h(*prompt,)283 -204 y(rl_vcpfunc_t)e(*lhandler)p Fg(\))195 259 y Fu(Set)f(up)h(the)g -(terminal)g(for)f(readline)i(I/O)f(and)f(displa)o(y)i(the)e(initial)j -(expanded)e(v)m(alue)h(of)e Fk(prompt)p Fu(.)195 314 -y(Sa)o(v)o(e)j(the)h(v)m(alue)h(of)f Fk(lhandler)21 b -Fu(to)15 b(use)h(as)f(a)h(function)h(to)e(call)i(when)f(a)g(complete)g -(line)i(of)d(input)195 369 y(has)g(b)q(een)h(en)o(tered.)21 -b(The)15 b(function)h(tak)o(es)e(the)i(text)e(of)h(the)g(line)i(as)e -(an)g(argumen)o(t.)1762 480 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 480 V 21 w(callbac)n(k)p 458 480 V 23 w(read)p -591 480 V 20 w(c)n(har)j Fg(\()p Ft(void)p Fg(\))195 -535 y Fu(Whenev)o(er)17 b(an)g(application)h(determines)g(that)e(k)o -(eyb)q(oard)h(input)h(is)f(a)o(v)m(ailable,)i(it)e(should)h(call)195 -590 y Ft(rl_callback_read_char\(\))p Fu(,)8 b(whic)o(h)k(will)g(read)f -(the)g(next)g(c)o(haracter)f(from)g(the)h(curren)o(t)g(input)195 -645 y(source.)38 b(If)21 b(that)g(c)o(haracter)f(completes)i(the)f -(line,)j Ft(rl_callback_read_char)18 b Fu(will)23 b(in)o(v)o(ok)o(e)195 -699 y(the)18 b Fk(lhandler)k Fu(function)d(sa)o(v)o(ed)e(b)o(y)h -Ft(rl_callback_handler_insta)o(ll)d Fu(to)i(pro)q(cess)h(the)g(line.) -195 754 y(Before)13 b(calling)i(the)f Fk(lhandler)k Fu(function,)c(the) -g(terminal)g(settings)f(are)g(reset)g(to)g(the)g(v)m(alues)i(they)195 -809 y(had)g(b)q(efore)g(calling)i Ft(rl_callback_handler_insta)o(ll)p -Fu(.)g(If)e(the)g Fk(lhandler)20 b Fu(function)15 b(returns,)195 -864 y(the)d(terminal)i(settings)e(are)g(mo)q(di\014ed)i(for)d -(Readline's)i(use)g(again.)19 b Ft(EOF)12 b Fu(is)h(indicated)h(b)o(y)e -(calling)195 919 y Fk(lhandler)20 b Fu(with)c(a)f Ft(NULL)f -Fu(line.)1762 1030 y(F)l(unction)-1861 b Fi(void)20 b -Fh(rl)p 241 1030 V 21 w(callbac)n(k)p 458 1030 V 23 w(handler)p -670 1030 V 21 w(remo)n(v)n(e)i Fg(\()p Ft(void)p Fg(\))195 -1085 y Fu(Restore)c(the)g(terminal)i(to)d(its)i(initial)i(state)d(and)g -(remo)o(v)o(e)g(the)h(line)h(handler.)31 b(This)19 b(ma)o(y)f(b)q(e)195 -1140 y(called)i(from)d(within)j(a)d(callbac)o(k)j(as)d(w)o(ell)i(as)f -(indep)q(enden)o(tly)m(.)31 b(If)19 b(the)f Fk(lhandler)23 -b Fu(installed)d(b)o(y)195 1195 y Ft(rl_callback_handler_instal)o(l)d -Fu(do)q(es)i(not)g(exit)h(the)g(program,)e(either)i(this)g(function)g -(or)195 1249 y(the)c(function)g(referred)g(to)f(b)o(y)h(the)g(v)m(alue) -h(of)e Ft(rl_deprep_term_function)d Fu(should)17 b(b)q(e)f(called)195 -1304 y(b)q(efore)f(the)h(program)e(exits)h(to)g(reset)g(the)g(terminal) -h(settings.)75 1413 y Fj(2.4.13)29 b(A)21 b(Readline)g(Example)137 -1508 y Fu(Here)f(is)g(a)f(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o -(ercase)h(c)o(haracters)e(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o -(ts,)75 1563 y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o -(ercase.)31 b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p -Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 1618 y(`)p Ft(M-c)p -Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g -(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p -Fu(')d(w)o(ould)i(c)o(hange)75 1673 y(the)h(case)g(of)g(the)h(follo)o -(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h -(last)f(c)o(haracter)f(c)o(hanged.)195 1736 y Ft(/*)24 -b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h -(*/)195 1788 y(int)195 1840 y(invert_case_line)f(\(count,)h(key\))314 -1892 y(int)h(count,)f(key;)195 1944 y({)243 1995 y(register)f(int)i -(start,)f(end,)g(i;)243 2099 y(start)g(=)h(rl_point;)243 -2203 y(if)f(\(rl_point)g(>=)h(rl_end\))290 2255 y(return)f(\(0\);)243 -2359 y(if)g(\(count)g(<)h(0\))290 2411 y({)338 2462 y(direction)f(=)h -(-1;)338 2514 y(count)f(=)h(-count;)290 2566 y(})243 -2618 y(else)290 2670 y(direction)f(=)h(1;)p eop -%%Page: 39 41 -39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(39)243 201 y Ft(/*)23 b(Find)h(the)f(end)h(of)f(the)h -(range)f(to)g(modify.)g(*/)243 253 y(end)g(=)h(start)f(+)h(\(count)f(*) -h(direction\);)243 357 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g -(*/)243 409 y(if)g(\(end)h(>)f(rl_end\))290 461 y(end)h(=)g(rl_end;)243 -513 y(else)f(if)h(\(end)f(<)h(0\))290 565 y(end)g(=)g(0;)243 -668 y(if)f(\(start)g(==)h(end\))290 720 y(return)f(\(0\);)243 -824 y(if)g(\(start)g(>)h(end\))290 876 y({)338 928 y(int)g(temp)f(=)h -(start;)338 980 y(start)f(=)h(end;)338 1032 y(end)g(=)f(temp;)290 -1083 y(})243 1187 y(/*)g(Tell)h(readline)e(that)i(we)f(are)h(modifying) -e(the)i(line,)314 1239 y(so)g(it)f(will)h(save)f(the)h(undo)f -(information.)f(*/)243 1291 y(rl_modifying)g(\(start,)h(end\);)243 -1395 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290 -1447 y({)338 1499 y(if)h(\(_rl_uppercase_p)d(\(rl_line_buffer[i]\)\)) -386 1550 y(rl_line_buffer[i])g(=)j(_rl_to_lower)e -(\(rl_line_buffer[i]\);)338 1602 y(else)h(if)h(\(_rl_lowercase_p)e -(\(rl_line_buffer[i]\)\))386 1654 y(rl_line_buffer[i])f(=)j -(_rl_to_upper)e(\(rl_line_buffer[i]\);)290 1706 y(})243 -1758 y(/*)h(Move)h(point)f(to)g(on)h(top)f(of)h(the)f(last)h(character) -e(changed.)h(*/)243 1810 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g -(end)f(-)h(1)g(:)f(start;)243 1862 y(return)g(\(0\);)195 -1914 y(})75 2057 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 -2159 y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f -(to)h(a)f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f -(on)75 2213 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34 -b(They)20 b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o -(ts,)f(lik)o(e)h(a)f(user)75 2268 y(pressing)c(the)f(in)o(terrupt)g(k)o -(ey)g(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q -(eing)g(brok)o(en.)k(There)15 b(is)75 2323 y(a)e(class)g(of)g(signals)h -(that)f(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h -(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 2378 -y(Since)i(Readline)f(c)o(hanges)g(the)f(terminal)h(attributes)f(when)h -(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75 -2433 y(pro)q(cessing)i(when)f(suc)o(h)g(a)g(signal)g(is)g(receiv)o(ed)h -(in)g(order)f(to)f(restore)g(the)h(terminal)g(to)f(a)h(sane)g(state,)e -(or)75 2487 y(pro)o(vide)k(application)h(writers)e(with)g(functions)h -(to)f(do)g(so)g(man)o(ually)l(.)137 2560 y(Readline)22 -b(con)o(tains)e(an)g(in)o(ternal)h(signal)g(handler)g(that)f(is)h -(installed)h(for)d(a)h(n)o(um)o(b)q(er)g(of)g(signals)75 -2615 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p -Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)g Ft(SIGTTIN)p -Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36 b(When)21 b(one)g(of)75 -2670 y(these)16 b(signals)h(is)f(receiv)o(ed,)h(the)f(signal)h(handler) -f(will)i(reset)e(the)g(terminal)g(attributes)g(to)f(those)h(that)p -eop -%%Page: 40 42 -40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)h(Library)75 -149 y(w)o(ere)d(in)i(e\013ect)e(b)q(efore)h Ft(readline\(\))e -Fu(w)o(as)h(called,)i(reset)f(the)f(signal)i(handling)g(to)e(what)g(it) -h(w)o(as)f(b)q(efore)75 204 y Ft(readline\(\))21 b Fu(w)o(as)h(called,) -j(and)e(resend)g(the)g(signal)g(to)f(the)h(calling)h(application.)44 -b(If)23 b(and)f(when)75 259 y(the)17 b(calling)i(application's)f -(signal)g(handler)g(returns,)f(Readline)h(will)h(reinitialize)h(the)d -(terminal)h(and)75 314 y(con)o(tin)o(ue)d(to)e(accept)i(input.)20 -b(When)15 b(a)e Ft(SIGINT)h Fu(is)g(receiv)o(ed,)h(the)g(Readline)g -(signal)g(handler)g(p)q(erforms)75 369 y(some)k(additional)i(w)o(ork,)e -(whic)o(h)h(will)h(cause)f(an)o(y)f(partially-en)o(tered)i(line)g(to)d -(b)q(e)i(ab)q(orted)g(\(see)f(the)75 423 y(description)e(of)d -Ft(rl_free_line_state\(\))f Fu(b)q(elo)o(w\).)137 488 -y(There)g(is)f(an)g(additional)i(Readline)g(signal)f(handler,)g(for)f -Ft(SIGWINCH)p Fu(,)f(whic)o(h)i(the)f(k)o(ernel)h(sends)g(to)e(a)75 -543 y(pro)q(cess)k(whenev)o(er)g(the)f(terminal's)h(size)g(c)o(hanges)f -(\(for)g(example,)h(if)g(a)f(user)h(resizes)g(an)f Ft(xterm)p -Fu(\).)19 b(The)75 598 y(Readline)g Ft(SIGWINCH)e Fu(handler)i(up)q -(dates)f(Readline's)h(in)o(ternal)f(screen)h(size)f(information,)h(and) -f(then)75 653 y(calls)g(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g -(the)f(calling)i(application)f(has)f(installed.)27 b(Readline)18 -b(calls)g(the)75 708 y(application's)h Ft(SIGWINCH)d -Fu(signal)j(handler)f(without)g(resetting)g(the)f(terminal)i(to)e(its)g -(original)i(state.)75 762 y(If)d(the)g(application's)h(signal)g -(handler)g(do)q(es)g(more)e(than)h(up)q(date)h(its)f(idea)h(of)e(the)h -(terminal)h(size)g(and)75 817 y(return)e(\(for)f(example,)h(a)f -Ft(longjmp)g Fu(bac)o(k)h(to)f(a)h(main)g(pro)q(cessing)g(lo)q(op\),)g -(it)g Fl(must)20 b Fu(call)c Ft(rl_cleanup_)75 872 y(after_signal\(\))d -Fu(\(describ)q(ed)k(b)q(elo)o(w\),)e(to)g(restore)f(the)h(terminal)h -(state.)137 937 y(Readline)g(pro)o(vides)f(t)o(w)o(o)e(v)m(ariables)i -(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g(whether)h -(or)e(not)75 992 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f -(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25 -b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 1047 y(applications)k(c)o -(hange)e(the)h(v)m(alues)g(of)f(these)h(v)m(ariables)g(only)g(when)g -(calling)h Ft(readline\(\))p Fu(,)d(not)h(in)h(a)75 1101 -y(signal)d(handler,)g(so)f(Readline's)h(in)o(ternal)g(signal)g(state)e -(is)i(not)f(corrupted.)1773 1208 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1208 18 3 v 21 w(catc)n(h)p -366 1208 V 22 w(signals)195 1262 y Fu(If)15 b(this)g(v)m(ariable)g(is)g -(non-zero,)g(Readline)h(will)g(install)f(signal)h(handlers)f(for)f -Ft(SIGINT)p Fu(,)f Ft(SIGQUIT)p Fu(,)195 1317 y Ft(SIGTERM)p -Fu(,)h Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)f Ft(SIGTTIN)p -Fu(,)h(and)i Ft(SIGTTOU)p Fu(.)195 1382 y(The)f(default)h(v)m(alue)h -(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1773 1488 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1488 V 21 w(catc)n(h)p 366 -1488 V 22 w(sigwinc)n(h)195 1543 y Fu(If)15 b(this)h(v)m(ariable)h(is)e -(non-zero,)g(Readline)i(will)g(install)f(a)f(signal)h(handler)h(for)d -Ft(SIGWINCH)p Fu(.)195 1608 y(The)h(default)h(v)m(alue)h(of)d -Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1694 y(If)g(an)f(application)j -(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)i(catc)o(h)f(an)o(y) -f(signals,)h(or)f(to)f(handle)j(signals)75 1749 y(other)i(than)g(those) -g(Readline)i(catc)o(hes)e(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h -(Readline)h(pro)o(vides)e(con)o(v)o(enience)75 1804 y(functions)d(to)f -(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o -(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1762 1910 -y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1910 V -21 w(clean)n(up)p 450 1910 V 22 w(after)p 590 1910 V -20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 1965 y Fu(This)18 -b(function)f(will)i(reset)e(the)g(state)f(of)g(the)h(terminal)h(to)e -(what)h(it)g(w)o(as)f(b)q(efore)h Ft(readline\(\))195 -2019 y Fu(w)o(as)d(called,)i(and)f(remo)o(v)o(e)f(the)g(Readline)i -(signal)g(handlers)g(for)e(all)h(signals,)g(dep)q(ending)i(on)e(the)195 -2074 y(v)m(alues)h(of)f Ft(rl_catch_signals)e Fu(and)i -Ft(rl_catch_sigwinch)p Fu(.)1762 2180 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2180 V 21 w(free)p 356 2180 -V 20 w(line)p 464 2180 V 23 w(state)j Fg(\()p Ft(void)p -Fg(\))195 2235 y Fu(This)d(will)h(free)f(an)o(y)f(partial)h(state)f -(asso)q(ciated)h(with)g(the)g(curren)o(t)f(input)i(line)g(\(undo)f -(infor-)195 2290 y(mation,)i(an)o(y)f(partial)h(history)f(en)o(try)l(,) -h(an)o(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)h(and)f(an)o -(y)195 2345 y(partially-en)o(tered)k(n)o(umeric)g(argumen)o(t\).)45 -b(This)24 b(should)h(b)q(e)g(called)g(b)q(efore)g Ft(rl_cleanup_)195 -2399 y(after_signal\(\))p Fu(.)36 b(The)22 b(Readline)h(signal)f -(handler)g(for)f Ft(SIGINT)f Fu(calls)j(this)e(to)g(ab)q(ort)g(the)195 -2454 y(curren)o(t)15 b(input)h(line.)1762 2560 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2560 V 21 w(reset)p 383 2560 -V 20 w(after)p 521 2560 V 21 w(signal)j Fg(\()p Ft(void)p -Fg(\))195 2615 y Fu(This)15 b(will)h(reinitialize)h(the)d(terminal)h -(and)g(reinstall)h(an)o(y)d(Readline)j(signal)f(handlers,)g(dep)q(end-) -195 2670 y(ing)h(on)f(the)g(v)m(alues)i(of)d Ft(rl_catch_signals)f -Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)p eop -%%Page: 41 43 -41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(41)137 149 y(If)20 b(an)g(application)h(do)q(es)f(not)g -(wish)g(Readline)h(to)e(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f -(call)h Ft(rl_resize_)75 204 y(terminal\(\))12 b Fu(or)h -Ft(rl_set_screen_size\(\))e Fu(to)i(force)g(Readline)i(to)e(up)q(date)h -(its)g(idea)g(of)g(the)f(terminal)75 259 y(size)j(when)g(a)f -Ft(SIGWINCH)f Fu(is)h(receiv)o(ed.)1762 360 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 360 18 3 v 21 w(resize)p 401 -360 V 22 w(terminal)j Fg(\()p Ft(void)p Fg(\))195 415 -y Fu(Up)q(date)16 b(Readline's)g(in)o(ternal)g(screen)f(size)i(b)o(y)e -(reading)g(v)m(alues)i(from)d(the)i(k)o(ernel.)1762 516 -y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 516 V -21 w(set)p 333 516 V 21 w(screen)p 510 516 V 20 w(size)k -Fg(\()p Ft(int)15 b(rows,)f(int)h(cols)p Fg(\))195 571 -y Fu(Set)g(Readline's)h(idea)g(of)f(the)g(terminal)h(size)g(to)f -Fk(ro)o(ws)h Fu(ro)o(ws)e(and)i Fk(cols)h Fu(columns.)137 -653 y(If)g(an)g(application)h(do)q(es)f(not)f(w)o(an)o(t)g(to)g -(install)i(a)f Ft(SIGWINCH)e Fu(handler,)j(but)f(is)g(still)h(in)o -(terested)f(in)75 708 y(the)e(screen)h(dimensions,)g(Readline's)h(idea) -e(of)g(the)h(screen)f(size)h(ma)o(y)f(b)q(e)h(queried.)1762 -809 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 809 -V 21 w(get)p 339 809 V 21 w(screen)p 516 809 V 20 w(size)k -Fg(\()p Ft(int)15 b(*rows,)f(int)h(*cols)p Fg(\))195 -864 y Fu(Return)g(Readline's)h(idea)f(of)g(the)g(terminal's)g(size)h -(in)g(the)f(v)m(ariables)i(p)q(oin)o(ted)f(to)e(b)o(y)h(the)g(argu-)195 -918 y(men)o(ts.)137 1001 y(The)h(follo)o(wing)g(functions)g(install)g -(and)g(remo)o(v)o(e)e(Readline's)i(signal)g(handlers.)1762 -1102 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1102 -V 21 w(set)p 307 1102 V 20 w(signals)j Fg(\()p Ft(void)p -Fg(\))195 1157 y Fu(Install)c(Readline's)f(signal)h(handler)f(for)f -Ft(SIGINT)p Fu(,)g Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p Fu(,)g -Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)195 1211 y Ft(SIGTTIN)p -Fu(,)11 b Ft(SIGTTOU)p Fu(,)g(and)h Ft(SIGWINCH)p Fu(,)e(dep)q(ending)k -(on)e(the)f(v)m(alues)i(of)e Ft(rl_catch_signals)f Fu(and)195 -1266 y Ft(rl_catch_sigwinch)p Fu(.)1762 1367 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1367 V 21 w(clear)p 354 1367 -V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1422 y Fu(Remo)o(v)o(e)14 -b(all)i(of)f(the)g(Readline)i(signal)f(handlers)g(installed)h(b)o(y)e -Ft(rl_set_signals\(\))p Fu(.)75 1541 y Fs(2.6)33 b(Custom)21 -b(Completers)137 1634 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h -(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g -(disam)o(biguating)75 1689 y(commands)i(and)f(data.)27 -b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can) -f(pro)o(vide)i(completion)g(for)75 1744 y(commands,)14 -b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g -(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75 -1798 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75 -1901 y Fj(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137 -1994 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i -(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m -(ailable.)75 2049 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f -(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g -(all)h(of)f(the)75 2104 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f -(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)h(library)f -(pro)o(vides)g(the)g(user)75 2158 y(in)o(terface)f(to)f(completion,)i -(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:) -23 b(\014lename)18 b(and)75 2213 y(username.)h(F)l(or)10 -b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f -(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75 -2268 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g -(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137 -2332 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q -(erform)g(completion:)100 2396 y(1.)29 b(The)22 b(user-in)o(terface)g -(function)h Ft(rl_complete\(\))p Fu(.)37 b(This)22 b(function)h(is)f -(called)h(with)f(the)g(same)165 2451 y(argumen)o(ts)17 -b(as)h(other)g(bindable)i(Readline)f(functions:)27 b -Fk(coun)o(t)19 b Fu(and)f Fk(in)o(v)o(oking)p 1556 2451 -14 2 v 17 w(k)o(ey)p Fu(.)28 b(It)19 b(isolates)165 2506 -y(the)g(w)o(ord)f(to)g(b)q(e)i(completed)f(and)g(calls)h -Ft(rl_completion_matches\(\))c Fu(to)i(generate)g(a)h(list)g(of)165 -2560 y(p)q(ossible)e(completions.)22 b(It)16 b(then)g(either)g(lists)g -(the)g(p)q(ossible)h(completions,)g(inserts)f(the)f(p)q(ossible)165 -2615 y(completions,)25 b(or)d(actually)i(p)q(erforms)e(the)g -(completion,)k(dep)q(ending)e(on)f(whic)o(h)g(b)q(eha)o(vior)g(is)165 -2670 y(desired.)p eop -%%Page: 42 44 -42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)h(Library)100 -149 y(2.)29 b(The)17 b(in)o(ternal)h(function)f Ft -(rl_completion_matches\(\))d Fu(uses)j(an)g(application-supplie)q(d)j -Fk(gener-)165 204 y(ator)h Fu(function)e(to)f(generate)g(the)h(list)g -(of)f(p)q(ossible)i(matc)o(hes,)f(and)f(then)h(returns)g(the)f(arra)o -(y)f(of)165 259 y(these)j(matc)o(hes.)32 b(The)20 b(caller)g(should)h -(place)f(the)g(address)f(of)h(its)f(generator)g(function)h(in)g -Ft(rl_)165 314 y(completion_entry_function)p Fu(.)100 -383 y(3.)29 b(The)12 b(generator)e(function)i(is)g(called)h(rep)q -(eatedly)g(from)e Ft(rl_completion_matches\(\))p Fu(,)d(returning)165 -438 y(a)16 b(string)g(eac)o(h)h(time.)24 b(The)17 b(argumen)o(ts)e(to)h -(the)g(generator)g(function)h(are)f Fk(text)h Fu(and)g -Fk(state)p Fu(.)22 b Fk(text)165 493 y Fu(is)17 b(the)f(partial)g(w)o -(ord)f(to)h(b)q(e)h(completed.)23 b Fk(state)18 b Fu(is)e(zero)g(the)g -(\014rst)g(time)g(the)g(function)h(is)g(called,)165 547 -y(allo)o(wing)23 b(the)f(generator)f(to)g(p)q(erform)h(an)o(y)g -(necessary)g(initialization,)k(and)c(a)g(p)q(ositiv)o(e)h(non-)165 -602 y(zero)14 b(in)o(teger)h(for)f(eac)o(h)h(subsequen)o(t)g(call.)21 -b(The)15 b(generator)e(function)j(returns)e Ft(\(char)h(*\)NULL)f -Fu(to)165 657 y(inform)19 b Ft(rl_completion_matches\(\))d -Fu(that)i(there)h(are)g(no)g(more)g(p)q(ossibilities)j(left.)32 -b(Usually)165 712 y(the)19 b(generator)g(function)h(computes)g(the)f -(list)h(of)f(p)q(ossible)i(completions)g(when)e Fk(state)j -Fu(is)d(zero,)165 767 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)g -(on)g(subsequen)o(t)g(calls.)20 b(Eac)o(h)13 b(string)f(the)h -(generator)f(function)165 821 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h -(b)q(e)g(allo)q(cated)h(with)g Ft(malloc\(\))p Fu(;)d(Readline)k(frees) -e(the)g(strings)f(when)165 876 y(it)g(has)h(\014nished)g(with)g(them.) -1762 1005 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 -1005 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 1059 y Fu(Complete)h(the)f(w)o(ord)g(at)f(or) -h(b)q(efore)h(p)q(oin)o(t.)21 b(Y)l(ou)15 b(ha)o(v)o(e)g(supplied)j -(the)d(function)i(that)d(do)q(es)i(the)195 1114 y(initial)23 -b(simple)f(matc)o(hing)e(selection)i(algorithm)f(\(see)f -Ft(rl_completion_matches\(\))p Fu(\).)33 b(The)195 1169 -y(default)16 b(is)f(to)g(do)g(\014lename)h(completion.)1773 -1298 y(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22 -b(*)d Fh(rl)p 678 1298 V 21 w(completion)p 973 1298 V -21 w(en)n(try)p 1126 1298 V 22 w(function)195 1352 y -Fu(This)i(is)f(a)g(p)q(oin)o(ter)g(to)f(the)h(generator)g(function)g -(for)g Ft(rl_completion_matches\(\))p Fu(.)31 b(If)20 -b(the)195 1407 y(v)m(alue)13 b(of)f Ft(rl_completion_entry_fun)o(ction) -d Fu(is)j Ft(NULL)f Fu(then)h(the)g(default)h(\014lename)g(generator) -195 1462 y(function,)j Ft(rl_filename_completion_f)o(unction)o(\(\))p -Fu(,)c(is)k(used.)75 1582 y Fj(2.6.2)30 b(Completion)20 -b(F)-5 b(unctions)137 1682 y Fu(Here)16 b(is)f(the)h(complete)g(list)g -(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.) -1762 1810 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 -1810 V 21 w(complete)p 460 1810 V 21 w(in)n(ternal)k -Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 1865 y Fu(Complete)k(the)g -(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)31 b Fk(what)p -1108 1865 14 2 v 16 w(to)p 1165 1865 V 16 w(do)21 b Fu(sa)o(ys)d(what)g -(to)g(do)h(with)g(the)g(com-)195 1920 y(pletion.)j(A)16 -b(v)m(alue)h(of)e(`)p Ft(?)p Fu(')g(means)g(list)i(the)e(p)q(ossible)j -(completions.)k(`)p Ft(TAB)p Fu(')14 b(means)i(do)f(standard)195 -1975 y(completion.)22 b(`)p Ft(*)p Fu(')15 b(means)g(insert)h(all)h(of) -e(the)h(p)q(ossible)h(completions.)22 b(`)p Ft(!)p Fu(')15 -b(means)g(to)g(displa)o(y)i(all)195 2029 y(of)g(the)g(p)q(ossible)i -(completions,)f(if)g(there)f(is)h(more)f(than)g(one,)g(as)g(w)o(ell)h -(as)f(p)q(erforming)h(partial)195 2084 y(completion.)1762 -2213 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2213 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 2268 y Fu(Complete)21 b(the)g(w)o(ord)e(at)h -(or)g(b)q(efore)h(p)q(oin)o(t.)37 b(Y)l(ou)21 b(ha)o(v)o(e)f(supplied)j -(the)d(function)i(that)e(do)q(es)195 2322 y(the)d(initial)h(simple)g -(matc)o(hing)f(selection)h(algorithm)e(\(see)g Ft -(rl_completion_matches\(\))e Fu(and)195 2377 y Ft -(rl_completion_entry_functi)o(on)p Fu(\).)25 b(The)18 -b(default)h(is)f(to)f(do)h(\014lename)h(completion.)29 -b(This)195 2432 y(calls)16 b Ft(rl_complete_internal\(\))c -Fu(with)k(an)f(argumen)o(t)f(dep)q(ending)k(on)d Fk(in)o(v)o(oking)p -1657 2432 14 2 v 17 w(k)o(ey)p Fu(.)1762 2560 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2560 18 3 v 21 w(p)r(ossible)p -433 2560 V 20 w(completions)j Fg(\()p Ft(int)15 b(count,)f(int)h -(invoking_key)p Fg(\))195 2615 y Fu(List)21 b(the)f(p)q(ossible)i -(completions.)36 b(See)21 b(description)h(of)e Ft(rl_complete)13 -b(\(\))p Fu(.)35 b(This)21 b(calls)g Ft(rl_)195 2670 -y(complete_internal\(\))13 b Fu(with)i(an)g(argumen)o(t)g(of)f(`)p -Ft(?)p Fu('.)p eop -%%Page: 43 45 -43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(43)1762 149 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(insert)p 378 149 V 21 w(completions)j -Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\))195 -204 y Fu(Insert)i(the)g(list)h(of)e(p)q(ossible)j(completions)e(in)o -(to)g(the)g(line,)i(deleting)f(the)f(partially-completed)195 -259 y(w)o(ord.)k(See)c(description)g(of)e Ft(rl_complete\(\))p -Fu(.)20 b(This)d(calls)g Ft(rl_complete_internal\(\))c -Fu(with)195 314 y(an)i(argumen)o(t)g(of)f(`)p Ft(*)p -Fu('.)1762 434 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 434 V 21 w(completion)p 510 434 V 21 w(mo)r(de)h -Fg(\()p Ft(rl_command_func_t)12 b(*cfunc)p Fg(\))195 -489 y Fu(Returns)25 b(the)g(apppriate)h(v)m(alue)g(to)f(pass)g(to)f -Ft(rl_complete_internal\(\))f Fu(dep)q(ending)k(on)195 -543 y(whether)22 b Fk(cfunc)j Fu(w)o(as)d(called)h(t)o(wice)f(in)h -(succession)g(and)f(the)g(v)m(alue)h(of)f(the)g Ft(show-all-if-)195 -598 y(ambiguous)14 b Fu(v)m(ariable.)21 b(Application-sp)q(ec)q(i\014c) -e(completion)d(functions)g(ma)o(y)f(use)g(this)h(function)195 -653 y(to)f(presen)o(t)g(the)g(same)g(in)o(terface)g(as)g -Ft(rl_complete\(\))p Fu(.)1762 773 y(F)l(unction)-1861 -b Fi(char)20 b(**)f Fh(rl)p 312 773 V 21 w(completion)p -607 773 V 21 w(matc)n(hes)j Fg(\()p Ft(const)15 b(char)f(*text,)283 -828 y(rl_compentry_func_t)e(*entry_func)p Fg(\))195 883 -y Fu(Returns)18 b(an)h(arra)o(y)f(of)g(strings)h(whic)o(h)h(is)g(a)e -(list)i(of)e(completions)i(for)f Fk(text)p Fu(.)30 b(If)19 -b(there)g(are)g(no)195 937 y(completions,)f(returns)g -Ft(NULL)p Fu(.)25 b(The)17 b(\014rst)g(en)o(try)g(in)h(the)f(returned)h -(arra)o(y)e(is)i(the)f(substitution)195 992 y(for)c Fk(text)p -Fu(.)18 b(The)c(remaining)g(en)o(tries)f(are)g(the)h(p)q(ossible)g -(completions.)21 b(The)13 b(arra)o(y)f(is)i(terminated)195 -1047 y(with)i(a)e Ft(NULL)h Fu(p)q(oin)o(ter.)195 1115 -y Fk(en)o(try)p 302 1115 14 2 v 16 w(func)h Fu(is)e(a)f(function)h(of)e -(t)o(w)o(o)g(args,)g(and)i(returns)f(a)f Ft(char)j(*)p -Fu(.)k(The)13 b(\014rst)g(argumen)o(t)f(is)i Fk(text)p -Fu(.)195 1170 y(The)f(second)g(is)f(a)h(state)e(argumen)o(t;)h(it)h(is) -g(zero)f(on)g(the)h(\014rst)f(call,)i(and)e(non-zero)h(on)f(subsequen)o -(t)195 1225 y(calls.)20 b Fk(en)o(try)p 420 1225 V 16 -w(func)15 b Fu(returns)e(a)e Ft(NULL)h Fu(p)q(oin)o(ter)h(to)e(the)i -(caller)g(when)g(there)f(are)g(no)g(more)g(matc)o(hes.)1762 -1345 y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286 -1345 18 3 v 21 w(\014lename)p 515 1345 V 20 w(completion)p -809 1345 V 21 w(function)k Fg(\()p Ft(const)15 b(char)f(*text,)h(int) -283 1400 y(state)p Fg(\))195 1454 y Fu(A)e(generator)f(function)h(for)g -(\014lename)h(completion)f(in)h(the)f(general)g(case.)19 -b Fk(text)14 b Fu(is)f(a)g(partial)g(\014le-)195 1509 -y(name.)20 b(The)15 b(Bash)f(source)h(is)g(a)g(useful)g(reference)h -(for)e(writing)h(custom)f(completion)i(functions)195 -1564 y(\(the)f(Bash)g(completion)i(functions)e(call)i(this)e(and)h -(other)f(Readline)h(functions\).)1762 1684 y(F)l(unction)-1861 -b Fi(char)20 b(*)f Fh(rl)p 286 1684 V 21 w(username)p -547 1684 V 19 w(completion)p 840 1684 V 21 w(function)k -Fg(\()p Ft(const)14 b(char)g(*text,)283 1739 y(int)g(state)p -Fg(\))195 1794 y Fu(A)g(completion)i(generator)d(for)h(usernames.)19 -b Fk(text)c Fu(con)o(tains)f(a)g(partial)h(username)f(preceded)i(b)o(y) -195 1848 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p -Ft(~)p Fu('\).)i(As)c(with)g(all)i(completion)f(generators,)e -Fk(state)j Fu(is)f(zero)f(on)195 1903 y(the)g(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)75 2017 y Fj(2.6.3)30 -b(Completion)20 b(V)-5 b(ariables)1773 2166 y Fu(V)l(ariable)-1861 -b Fi(rl_compentry_func_t)22 b(*)d Fh(rl)p 678 2166 V -21 w(completion)p 973 2166 V 21 w(en)n(try)p 1126 2166 -V 22 w(function)195 2221 y Fu(A)e(p)q(oin)o(ter)g(to)f(the)h(generator) -f(function)h(for)f Ft(rl_completion_matches\(\))p Fu(.)22 -b Ft(NULL)16 b Fu(means)h(to)195 2276 y(use)f Ft -(rl_filename_completion_)o(functio)o(n\(\))p Fu(,)c(the)j(default)h -(\014lename)g(completer.)1773 2396 y(V)l(ariable)-1861 -b Fi(rl_completion_func_t)22 b(*)d Fh(rl)p 704 2396 V -22 w(attempted)p 985 2396 V 20 w(completion)p 1279 2396 -V 21 w(function)195 2451 y Fu(A)e(p)q(oin)o(ter)h(to)f(an)g(alternativ) -o(e)h(function)g(to)f(create)g(matc)o(hes.)26 b(The)18 -b(function)g(is)g(called)h(with)195 2506 y Fk(text)p -Fu(,)11 b Fk(start)p Fu(,)g(and)h Fk(end)p Fu(.)19 b -Fk(start)11 b Fu(and)h Fk(end)i Fu(are)d(indices)i(in)g -Ft(rl_line_buffer)c Fu(de\014ning)k(the)f(b)q(ound-)195 -2560 y(aries)h(of)g Fk(text)p Fu(,)f(whic)o(h)i(is)g(a)e(c)o(haracter)h -(string.)19 b(If)13 b(this)g(function)h(exists)g(and)f(returns)g -Ft(NULL)p Fu(,)f(or)g(if)195 2615 y(this)f(v)m(ariable)i(is)e(set)g(to) -f Ft(NULL)p Fu(,)h(then)g Ft(rl_complete\(\))e Fu(will)k(call)f(the)f -(v)m(alue)h(of)f Ft(rl_completion_)195 2670 y(entry_function)h -Fu(to)i(generate)g(matc)o(hes,)f(otherwise)i(the)f(arra)o(y)f(of)h -(strings)g(returned)g(will)i(b)q(e)p eop -%%Page: 44 46 -44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)h(Library)195 -149 y(used.)j(If)12 b(this)f(function)h(sets)f(the)g -Ft(rl_attempted_completion_over)d Fu(v)m(ariable)k(to)f(a)g(non-zero) -195 204 y(v)m(alue,)18 b(Readline)h(will)f(not)f(p)q(erform)f(its)i -(default)f(completion)h(ev)o(en)f(if)h(this)f(function)h(returns)195 -259 y(no)d(matc)o(hes.)1773 380 y(V)l(ariable)-1861 b -Fi(rl_quote_func_t)21 b(*)f Fh(rl)p 574 380 18 3 v 21 -w(\014lename)p 803 380 V 20 w(quoting)p 1012 380 V 21 -w(function)195 434 y Fu(A)c(p)q(oin)o(ter)h(to)f(a)g(function)h(that)e -(will)j(quote)e(a)g(\014lename)i(in)f(an)f(application-sp)q(eci\014)q -(c)j(fashion.)195 489 y(This)h(is)g(called)i(if)e(\014lename)g -(completion)h(is)f(b)q(eing)h(attempted)e(and)h(one)g(of)f(the)h(c)o -(haracters)195 544 y(in)d Ft(rl_filename_quote_characters)c -Fu(app)q(ears)k(in)g(a)g(completed)g(\014lename.)25 b(The)17 -b(function)195 599 y(is)i(called)i(with)e Fk(text)p Fu(,)g -Fk(matc)o(h)p 722 599 14 2 v 16 w(t)o(yp)q(e)p Fu(,)g(and)g -Fk(quote)p 1059 599 V 17 w(p)q(oin)o(ter)p Fu(.)31 b(The)19 -b Fk(text)h Fu(is)f(the)g(\014lename)h(to)e(b)q(e)195 -654 y(quoted.)39 b(The)21 b Fk(matc)o(h)p 607 654 V 16 -w(t)o(yp)q(e)j Fu(is)e(either)g Ft(SINGLE_MATCH)p Fu(,)f(if)h(there)f -(is)h(only)g(one)g(completion)195 708 y(matc)o(h,)15 -b(or)g Ft(MULT_MATCH)p Fu(.)20 b(Some)c(functions)g(use)g(this)g(to)f -(decide)j(whether)e(or)f(not)g(to)g(insert)h(a)195 763 -y(closing)c(quote)e(c)o(haracter.)18 b(The)11 b Fk(quote)p -877 763 V 16 w(p)q(oin)o(ter)k Fu(is)c(a)f(p)q(oin)o(ter)i(to)e(an)o(y) -g(op)q(ening)i(quote)f(c)o(haracter)195 818 y(the)k(user)h(t)o(yp)q -(ed.)k(Some)15 b(functions)h(c)o(ho)q(ose)f(to)g(reset)g(this)g(c)o -(haracter.)1773 938 y(V)l(ariable)-1861 b Fi(rl_dequote_func_t)22 -b(*)d Fh(rl)p 626 938 18 3 v 21 w(\014lename)p 855 938 -V 20 w(dequoting)p 1122 938 V 21 w(function)195 993 y -Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(remo)o(v)o(e)e -(application-sp)q(eci\014)q(c)k(quoting)d(c)o(haracters)f(from)195 -1048 y(a)i(\014lename)h(b)q(efore)g(completion)g(is)g(attempted,)f(so)f -(those)h(c)o(haracters)g(do)g(not)g(in)o(terfere)h(with)195 -1103 y(matc)o(hing)i(the)g(text)g(against)f(names)h(in)h(the)f -(\014lesystem.)33 b(It)19 b(is)g(called)i(with)e Fk(text)p -Fu(,)g(the)g(text)195 1158 y(of)i(the)g(w)o(ord)g(to)g(b)q(e)h -(dequoted,)h(and)e Fk(quote)p 1009 1158 14 2 v 17 w(c)o(har)p -Fu(,)h(whic)o(h)g(is)g(the)f(quoting)h(c)o(haracter)f(that)195 -1212 y(delimits)d(the)e(\014lename)i(\(usually)f(`)p -Ft(')p Fu(')f(or)f(`)p Ft(")p Fu('\).)22 b(If)17 b Fk(quote)p -1187 1212 V 16 w(c)o(har)i Fu(is)e(zero,)f(the)g(\014lename)i(w)o(as)d -(not)195 1267 y(in)h(an)f(em)o(b)q(edded)i(string.)1773 -1388 y(V)l(ariable)-1861 b Fi(rl_linebuf_func_t)22 b(*)d -Fh(rl)p 626 1388 18 3 v 21 w(c)n(har)p 754 1388 V 21 -w(is)p 813 1388 V 21 w(quoted)p 1005 1388 V 21 w(p)195 -1443 y Fu(A)f(p)q(oin)o(ter)h(to)f(a)g(function)h(to)f(call)i(that)d -(determines)j(whether)e(or)g(not)g(a)g(sp)q(eci\014c)j(c)o(haracter)195 -1497 y(in)d(the)f(line)i(bu\013er)e(is)h(quoted,)g(according)f(to)g -(whatev)o(er)f(quoting)i(mec)o(hanism)g(the)f(program)195 -1552 y(calling)d(Readline)g(uses.)19 b(The)13 b(function)g(is)g(called) -h(with)f(t)o(w)o(o)e(argumen)o(ts:)17 b Fk(text)p Fu(,)12 -b(the)h(text)f(of)g(the)195 1607 y(line,)17 b(and)e Fk(index)p -Fu(,)i(the)e(index)i(of)e(the)g(c)o(haracter)g(in)h(the)g(line.)22 -b(It)15 b(is)h(used)g(to)f(decide)i(whether)e(a)195 1662 -y(c)o(haracter)f(found)i(in)g Ft(rl_completer_word_break_)o(charact)o -(ers)c Fu(should)k(b)q(e)g(used)g(to)e(break)195 1717 -y(w)o(ords)g(for)h(the)g(completer.)1773 1837 y(V)l(ariable)-1861 -b Fi(rl_compignore_func_t)22 b(*)d Fh(rl)p 704 1837 V -22 w(ignore)p 881 1837 V 20 w(some)p 1028 1837 V 19 w(completions)p -1344 1837 V 21 w(function)195 1892 y Fu(This)g(function,)i(if)e -(de\014ned,)i(is)e(called)h(b)o(y)f(the)g(completer)g(when)h(real)f -(\014lename)h(completion)195 1947 y(is)e(done,)f(after)f(all)i(the)f -(matc)o(hing)g(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)25 -b(It)17 b(is)h(passed)f(a)g Ft(NULL)f Fu(ter-)195 2001 -y(minated)g(arra)o(y)e(of)h(matc)o(hes.)20 b(The)c(\014rst)f(elemen)o -(t)h(\()p Ft(matches[0])p Fu(\))d(is)j(the)g(maximal)g(substring)195 -2056 y(common)e(to)g(all)h(matc)o(hes.)k(This)c(function)g(can)g -(re-arrange)f(the)g(list)h(of)f(matc)o(hes)g(as)g(required,)195 -2111 y(but)h(eac)o(h)h(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f -(m)o(ust)g(b)q(e)i(freed.)1773 2232 y(V)l(ariable)-1861 -b Fi(rl_icppfunc_t)21 b(*)e Fh(rl)p 521 2232 V 21 w(directory)p -769 2232 V 22 w(completion)p 1065 2232 V 21 w(ho)r(ok)195 -2286 y Fu(This)k(function,)i(if)e(de\014ned,)j(is)d(allo)o(w)o(ed)g(to) -f(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)f(\014lenames)195 -2341 y(Readline)e(completes.)29 b(It)19 b(is)f(called)i(with)f(the)f -(address)h(of)e(a)h(string)h(\(the)f(curren)o(t)g(directory)195 -2396 y(name\))g(as)g(an)h(argumen)o(t,)f(and)h(ma)o(y)f(mo)q(dify)h -(that)f(string.)30 b(If)19 b(the)f(string)h(is)g(replaced)h(with)195 -2451 y(a)g(new)g(string,)h(the)f(old)g(v)m(alue)h(should)g(b)q(e)g -(freed.)34 b(An)o(y)20 b(mo)q(di\014ed)i(directory)e(name)g(should)195 -2506 y(ha)o(v)o(e)14 b(a)g(trailing)i(slash.)k(The)15 -b(mo)q(di\014ed)h(v)m(alue)g(will)g(b)q(e)f(displa)o(y)o(ed)h(as)e -(part)g(of)h(the)f(completion,)195 2560 y(replacing)h(the)g(directory)f -(p)q(ortion)g(of)g(the)g(pathname)g(the)h(user)f(t)o(yp)q(ed.)20 -b(It)14 b(returns)g(an)g(in)o(teger)195 2615 y(that)i(should)h(b)q(e)g -(non-zero)g(if)g(the)g(function)g(mo)q(di\014es)h(its)e(directory)h -(argumen)o(t.)23 b(It)17 b(could)g(b)q(e)195 2670 y(used)f(to)e(expand) -i(sym)o(b)q(olic)h(links)f(or)f(shell)i(v)m(ariables)f(in)g(pathnames.) -p eop -%%Page: 45 47 -45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(45)1773 149 y(V)l(ariable)-1861 b Fi -(rl_compdisp_func_t)22 b(*)d Fh(rl)p 652 149 18 3 v 21 -w(completion)p 947 149 V 21 w(displa)n(y)p 1141 149 V -22 w(matc)n(hes)p 1366 149 V 21 w(ho)r(ok)195 204 y Fu(If)11 -b(non-zero,)h(then)f(this)h(is)f(the)g(address)g(of)g(a)g(function)g -(to)g(call)h(when)f(completing)i(a)d(w)o(ord)h(w)o(ould)195 -259 y(normally)h(displa)o(y)g(the)f(list)h(of)f(p)q(ossible)h(matc)o -(hes.)18 b(This)12 b(function)g(is)g(called)g(in)g(lieu)h(of)e -(Readline)195 314 y(displa)o(ying)21 b(the)d(list.)32 -b(It)19 b(tak)o(es)f(three)h(argumen)o(ts:)26 b(\()p -Ft(char)14 b(**)p Fk(matc)o(hes)p Fu(,)19 b Ft(int)f -Fk(n)o(um)p 1688 314 14 2 v 17 w(matc)o(hes)p Fu(,)195 -369 y Ft(int)13 b Fk(max)p 368 369 V 16 w(length)p Fu(\))i(where)f -Fk(matc)o(hes)h Fu(is)f(the)g(arra)o(y)f(of)g(matc)o(hing)h(strings,)g -Fk(n)o(um)p 1578 369 V 16 w(matc)o(hes)i Fu(is)e(the)195 -423 y(n)o(um)o(b)q(er)h(of)f(strings)h(in)h(that)e(arra)o(y)l(,)f(and)i -Fk(max)p 1012 423 V 16 w(length)h Fu(is)f(the)g(length)g(of)g(the)f -(longest)h(string)g(in)195 478 y(that)e(arra)o(y)l(.)19 -b(Readline)c(pro)o(vides)g(a)e(con)o(v)o(enience)j(function,)f -Ft(rl_display_match_list)p Fu(,)c(that)195 533 y(tak)o(es)17 -b(care)g(of)g(doing)h(the)f(displa)o(y)i(to)d(Readline's)j(output)e -(stream.)26 b(That)16 b(function)j(ma)o(y)d(b)q(e)195 -588 y(called)h(from)d(this)i(ho)q(ok.)1773 704 y(V)l(ariable)-1861 -b Fi(const)20 b(char)g(*)f Fh(rl)p 436 704 18 3 v 21 -w(basic)p 580 704 V 21 w(w)n(ord)p 725 704 V 21 w(break)p -886 704 V 20 w(c)n(haracters)195 759 y Fu(The)j(basic)h(list)g(of)f(c)o -(haracters)f(that)g(signal)i(a)f(break)g(b)q(et)o(w)o(een)g(w)o(ords)g -(for)f(the)h(completer)195 814 y(routine.)30 b(The)19 -b(default)g(v)m(alue)h(of)e(this)h(v)m(ariable)h(is)f(the)g(c)o -(haracters)f(whic)o(h)h(break)g(w)o(ords)f(for)195 869 -y(completion)e(in)g(Bash:)k Ft(")15 b(\\t\\n\\"\\\\'`@$><=;|&{\(")p -Fu(.)1773 985 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f -Fh(rl)p 436 985 V 21 w(basic)p 580 985 V 21 w(quote)p -740 985 V 21 w(c)n(haracters)195 1040 y Fu(A)c(list)h(of)f(quote)g(c)o -(haracters)f(whic)o(h)i(can)g(cause)f(a)g(w)o(ord)g(break.)1773 -1156 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 1156 V 21 w(completer)p 705 1156 V 21 w(w)n(ord)p -850 1156 V 20 w(break)p 1010 1156 V 20 w(c)n(haracters)195 -1211 y Fu(The)33 b(list)g(of)f(c)o(haracters)g(that)f(signal)j(a)e -(break)g(b)q(et)o(w)o(een)h(w)o(ords)f(for)g Ft(rl_complete_)195 -1266 y(internal\(\))p Fu(.)18 b(The)e(default)g(list)g(is)f(the)h(v)m -(alue)g(of)f Ft(rl_basic_word_break_chara)o(cters)p Fu(.)1773 -1382 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 1382 V 21 w(completer)p 705 1382 V 21 w(quote)p 865 -1382 V 20 w(c)n(haracters)195 1437 y Fu(A)e(list)h(of)e(c)o(haracters)g -(whic)o(h)i(can)f(b)q(e)g(used)h(to)e(quote)h(a)f(substring)h(of)g(the) -g(line.)26 b(Completion)195 1492 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire) -g(substring,)h(and)f(within)i(the)e(substring)g Ft -(rl_completer_word_break_)195 1547 y(characters)j Fu(are)h(treated)g -(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they)e(also)h(app)q -(ear)g(within)h(this)195 1601 y(list.)1773 1718 y(V)l(ariable)-1861 -b Fi(const)20 b(char)g(*)f Fh(rl)p 436 1718 V 21 w(\014lename)p -665 1718 V 20 w(quote)p 824 1718 V 21 w(c)n(haracters)195 -1773 y Fu(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g -(\014lename)h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f -(they)195 1828 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21 -b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1773 -1944 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 1944 V 21 w(sp)r(ecial)p 623 1944 V 22 w(pre\014xes)195 -1999 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f -(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h -Fk(text)f Fu(when)195 2054 y(it)f(is)f(passed)h(to)f(the)g(completion)h -(function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine) -h(what)195 2108 y(kind)i(of)e(completing)i(to)e(do.)19 -b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e -Ft(")p Fu($)p Ft(@")g Fu(so)g(that)g(it)h(can)195 2163 -y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1773 -2280 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2280 -V 21 w(completion)p 510 2280 V 21 w(query)p 673 2280 -V 21 w(items)195 2334 y Fu(Up)e(to)g(this)g(man)o(y)g(items)g(will)i(b) -q(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)e(a)h(p)q -(ossible-completions)j(call.)195 2389 y(After)14 b(that,)f(w)o(e)h(ask) -g(the)h(user)f(if)h(she)f(is)h(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h -(them)f(all.)20 b(The)15 b(default)g(v)m(alue)195 2444 -y(is)h(100.)1773 2560 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 2560 V 21 w(completion)p 510 2560 V 21 -w(app)r(end)p 715 2560 V 19 w(c)n(haracter)195 2615 y -Fu(When)d(a)f(single)i(completion)g(alternativ)o(e)f(matc)o(hes)f(at)g -(the)h(end)g(of)f(the)h(command)f(line,)j(this)195 2670 -y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g(inserted)i -(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g(c)o -(haracter)p eop -%%Page: 46 48 -46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)h(Library)195 -149 y(\(`)e('\).)19 b(Setting)14 b(this)f(to)g(the)g(n)o(ull)i(c)o -(haracter)e(\(`)p Ft(\\0)p Fu('\))e(prev)o(en)o(ts)i(an)o(ything)h(b)q -(eing)h(app)q(ended)f(auto-)195 204 y(matically)l(.)21 -b(This)15 b(can)f(b)q(e)h(c)o(hanged)g(in)g(custom)f(completion)i -(functions)f(to)f(pro)o(vide)h(the)f(\\most)195 259 y(sensible)i(w)o -(ord)c(separator)h(c)o(haracter")f(according)i(to)f(an)h -(application-sp)q(eci\014c)j(command)c(line)195 314 y(syn)o(tax)h(sp)q -(eci\014cation.)1773 423 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 423 18 3 v 21 w(completion)p 510 423 V -21 w(suppress)p 746 423 V 19 w(app)r(end)195 478 y Fu(If)e(non-zero,)g -Fk(rl)p 476 478 14 2 v 17 w(completion)p 709 478 V 18 -w(app)q(end)p 871 478 V 17 w(c)o(haracter)i Fu(is)f(not)e(app)q(ended)i -(to)e(matc)o(hes)g(at)h(the)f(end)195 533 y(of)c(the)h(command)g(line,) -h(as)f(describ)q(ed)h(ab)q(o)o(v)o(e.)k(It)14 b(is)h(set)e(to)g(0)h(b)q -(efore)g(an)o(y)f(application-sp)q(eci)q(\014c)195 588 -y(completion)j(function)g(is)g(called.)1773 697 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 697 18 3 v 21 w(completion)p -510 697 V 21 w(mark)p 662 697 V 19 w(symlink)p 875 697 -V 21 w(dirs)195 752 y Fu(If)c(non-zero,)g(a)g(slash)g(will)i(b)q(e)e -(app)q(ended)i(to)d(completed)i(\014lenames)g(that)e(are)g(sym)o(b)q -(olic)j(links)195 807 y(to)11 b(directory)i(names,)f(sub)s(ject)g(to)f -(the)i(v)m(alue)g(of)f(the)g(user-settable)g Fk(mark-directories)j -Fu(v)m(ariable.)195 862 y(This)i(v)m(ariable)h(exists)f(so)g(that)e -(application)k(completion)f(functions)f(can)g(o)o(v)o(erride)g(the)f -(user's)195 917 y(global)f(preference)g(\(set)e(via)h(the)g -Fk(mark-symlink)o(ed-directories)k Fu(Readline)e(v)m(ariable\))f(if)f -(appro-)195 971 y(priate.)20 b(This)15 b(v)m(ariable)g(is)g(set)f(to)f -(the)i(user's)e(preference)j(b)q(efore)e(an)o(y)g(application)i -(completion)195 1026 y(function)j(is)g(called,)h(so)e(unless)h(that)f -(function)h(mo)q(di\014es)g(the)f(v)m(alue,)i(the)e(user's)g -(preferences)195 1081 y(are)d(honored.)1773 1191 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1191 V 21 w(ignore)p 391 1191 -V 20 w(completion)p 685 1191 V 21 w(duplicates)195 1245 -y Fu(If)15 b(non-zero,)h(then)f(duplicates)i(in)f(the)f(matc)o(hes)g -(are)g(remo)o(v)o(ed.)k(The)d(default)g(is)f(1.)1773 -1355 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 1355 -V 21 w(\014lename)p 444 1355 V 20 w(completion)p 738 -1355 V 21 w(desired)195 1410 y Fu(Non-zero)c(means)g(that)f(the)h -(results)g(of)g(the)g(matc)o(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g -(\014lenames.)23 b(This)195 1465 y(is)14 b Fl(always)j -Fu(zero)c(on)g(en)o(try)l(,)g(and)h(can)f(only)h(b)q(e)g(c)o(hanged)f -(within)i(a)e(completion)h(en)o(try)f(generator)195 1519 -y(function.)38 b(If)21 b(it)g(is)g(set)g(to)f(a)g(non-zero)h(v)m(alue,) -i(directory)e(names)g(ha)o(v)o(e)g(a)f(slash)h(app)q(ended)195 -1574 y(and)d(Readline)h(attempts)d(to)h(quote)g(completed)i -(\014lenames)f(if)g(they)g(con)o(tain)g(an)o(y)f(c)o(haracters)195 -1629 y(in)f Ft(rl_filename_quote_character)o(s)d Fu(and)i -Ft(rl_filename_quoting_desired)d Fu(is)k(set)f(to)f(a)195 -1684 y(non-zero)h(v)m(alue.)1773 1793 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1793 V 21 w(\014lename)p 444 -1793 V 20 w(quoting)p 653 1793 V 21 w(desired)195 1848 -y Fu(Non-zero)14 b(means)g(that)f(the)i(results)f(of)g(the)g(matc)o -(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g(quotes)195 -1903 y(\(or)c(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o -(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y) -195 1958 y(c)o(haracters)i(in)i Ft(rl_filename_quote_chars)p -Fu(.)h(This)f(is)f Fl(always)k Fu(non-zero)d(on)f(en)o(try)l(,)f(and)i -(can)195 2012 y(only)c(b)q(e)g(c)o(hanged)g(within)h(a)f(completion)g -(en)o(try)g(generator)e(function.)20 b(The)12 b(quoting)g(is)g -(e\013ected)195 2067 y(via)j(a)g(call)i(to)d(the)i(function)g(p)q(oin)o -(ted)g(to)e(b)o(y)h Ft(rl_filename_quoting_function)p -Fu(.)1773 2177 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p -215 2177 V 21 w(attempted)p 495 2177 V 20 w(completion)p -789 2177 V 21 w(o)n(v)n(er)195 2232 y Fu(If)47 b(an)g(application-sp)q -(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g -Ft(rl_attempted_)195 2286 y(completion_function)24 b -Fu(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j -(Readline)e(will)g(not)195 2341 y(p)q(erform)15 b(its)g(default)g -(\014lename)h(completion)g(ev)o(en)f(if)g(the)g(application's)h -(completion)g(function)195 2396 y(returns)f(no)g(matc)o(hes.)20 -b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h -(completion)h(function.)1773 2506 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(completion)p 510 -2506 V 21 w(t)n(yp)r(e)195 2560 y Fu(Set)e(to)e(a)i(c)o(haracter)f -(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)g(is)f -(curren)o(tly)g(attempt-)195 2615 y(ing;)g(see)f(the)f(description)i -(of)f Ft(rl_complete_internal\(\))c Fu(\(see)k(Section)h(2.6.2)d -([Completion)195 2670 y(F)l(unctions],)g(page)g(42\))g(for)f(the)h -(list)h(of)f(c)o(haracters.)p eop -%%Page: 47 49 -47 48 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(47)1773 149 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(inhibit)p 399 149 V 23 -w(completion)195 204 y Fu(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f -(completion)i(is)e(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e -(will)j(b)q(e)195 259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to) -e Ft(self-insert)p Fu(.)75 371 y Fj(2.6.4)30 b(A)21 b(Short)f -(Completion)g(Example)137 467 y Fu(Here)11 b(is)f(a)g(small)h -(application)h(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)h -(library)l(.)19 b(It)11 b(is)f(called)75 522 y Ft(fileman)p -Fu(,)17 b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p -Ft(examples/fileman.c)p Fu('.)25 b(This)18 b(sample)g(application)75 -577 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i -(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p -eop -%%Page: 48 50 -48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h -(demonstrates)g(how)g(to)h(use)f(the)267 201 y(GNU)g(Readline)g -(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users) -267 253 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195 -357 y(#include)f(<stdio.h>)195 409 y(#include)g(<sys/types.h>)195 -461 y(#include)g(<sys/file.h>)195 513 y(#include)g(<sys/stat.h>)195 -565 y(#include)g(<sys/errno.h>)195 668 y(#include)g -(<readline/readline.h>)195 720 y(#include)g(<readline/history.h>)195 -824 y(extern)g(char)g(*xmalloc)g(\(\);)195 928 y(/*)h(The)f(names)g(of) -h(functions)e(that)i(actually)f(do)g(the)h(manipulation.)e(*/)195 -980 y(int)h(com_list)g(__P\(\(char)g(*\)\);)195 1032 -y(int)g(com_view)g(__P\(\(char)g(*\)\);)195 1083 y(int)g(com_rename)g -(__P\(\(char)g(*\)\);)195 1135 y(int)g(com_stat)g(__P\(\(char)g(*\)\);) -195 1187 y(int)g(com_pwd)g(__P\(\(char)g(*\)\);)195 1239 -y(int)g(com_delete)g(__P\(\(char)g(*\)\);)195 1291 y(int)g(com_help)g -(__P\(\(char)g(*\)\);)195 1343 y(int)g(com_cd)g(__P\(\(char)g(*\)\);) -195 1395 y(int)g(com_quit)g(__P\(\(char)g(*\)\);)195 -1499 y(/*)h(A)f(structure)g(which)g(contains)g(information)f(on)i(the)f -(commands)g(this)g(program)267 1550 y(can)g(understand.)f(*/)195 -1654 y(typedef)h(struct)g({)243 1706 y(char)g(*name;)g(/*)h(User)f -(printable)g(name)g(of)h(the)f(function.)g(*/)243 1758 -y(rl_icpfunc_t)f(*func;)h(/*)h(Function)e(to)i(call)f(to)h(do)f(the)h -(job.)f(*/)243 1810 y(char)g(*doc;)g(/*)h(Documentation)e(for)h(this)h -(function.)46 b(*/)195 1862 y(})24 b(COMMAND;)195 1966 -y(COMMAND)f(commands[])f(=)i({)243 2017 y({)f("cd",)h(com_cd,)f -("Change)f(to)i(directory)f(DIR")g(},)243 2069 y({)g("delete",)g -(com_delete,)f("Delete)h(FILE")h(},)243 2121 y({)f("help",)g(com_help,) -g("Display)g(this)g(text")g(},)243 2173 y({)g("?",)h(com_help,)e -("Synonym)h(for)h(`help'")f(},)243 2225 y({)g("list",)g(com_list,)g -("List)g(files)g(in)h(DIR")f(},)243 2277 y({)g("ls",)h(com_list,)e -("Synonym)h(for)g(`list'")g(},)243 2329 y({)g("pwd",)g(com_pwd,)g -("Print)g(the)h(current)f(working)g(directory")f(},)243 -2381 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243 -2433 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g -(},)243 2484 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g -(on)h(FILE")f(},)243 2536 y({)g("view",)g(com_view,)g("View)g(the)h -(contents)e(of)i(FILE")f(},)243 2588 y({)g(\(char)h(*\)NULL,)f -(\(rl_icpfunc_t)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 -2640 y(};)p eop -%%Page: 49 51 -49 50 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(49)195 201 y Ft(/*)24 b(Forward)e(declarations.)h(*/) -195 253 y(char)g(*stripwhite)g(\(\);)195 305 y(COMMAND)g(*find_command) -f(\(\);)195 409 y(/*)i(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f -(from)g(argv[0].)g(*/)195 461 y(char)g(*progname;)195 -565 y(/*)h(When)f(non-zero,)g(this)g(means)g(the)g(user)h(is)f(done)h -(using)f(this)g(program.)g(*/)195 616 y(int)g(done;)195 -720 y(char)g(*)195 772 y(dupstr)g(\(s\))314 824 y(int)h(s;)195 -876 y({)243 928 y(char)f(*r;)243 1032 y(r)g(=)h(xmalloc)f(\(strlen)g -(\(s\))g(+)h(1\);)243 1083 y(strcpy)f(\(r,)g(s\);)243 -1135 y(return)g(\(r\);)195 1187 y(})195 1291 y(main)g(\(argc,)g(argv\)) -314 1343 y(int)h(argc;)314 1395 y(char)g(**argv;)195 -1447 y({)243 1499 y(char)f(*line,)g(*s;)243 1602 y(progname)f(=)i -(argv[0];)243 1706 y(initialize_readline)d(\(\);)i(/*)h(Bind)f(our)h -(completer.)e(*/)243 1810 y(/*)h(Loop)h(reading)f(and)g(executing)g -(lines)g(until)g(the)g(user)h(quits.)f(*/)243 1862 y(for)g(\()h(;)g -(done)f(==)h(0;)f(\))290 1914 y({)338 1966 y(line)g(=)h(readline)f -(\("FileMan:)f("\);)338 2069 y(if)i(\(!line\))386 2121 -y(break;)338 2225 y(/*)g(Remove)f(leading)g(and)g(trailing)g -(whitespace)f(from)i(the)f(line.)410 2277 y(Then,)g(if)h(there)f(is)g -(anything)g(left,)g(add)h(it)f(to)h(the)f(history)g(list)410 -2329 y(and)g(execute)g(it.)h(*/)338 2381 y(s)g(=)g(stripwhite)e -(\(line\);)338 2484 y(if)i(\(*s\))386 2536 y({)434 2588 -y(add_history)e(\(s\);)434 2640 y(execute_line)g(\(s\);)p -eop -%%Page: 50 52 -50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)h(Library)386 -149 y Ft(})338 253 y(free)23 b(\(line\);)290 305 y(})243 -357 y(exit)g(\(0\);)195 409 y(})195 513 y(/*)h(Execute)e(a)i(command)f -(line.)g(*/)195 565 y(int)195 616 y(execute_line)f(\(line\))314 -668 y(char)i(*line;)195 720 y({)243 772 y(register)e(int)i(i;)243 -824 y(COMMAND)f(*command;)243 876 y(char)g(*word;)243 -980 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 1032 -y(i)g(=)h(0;)243 1083 y(while)f(\(line[i])g(&&)g(whitespace)g -(\(line[i]\)\))290 1135 y(i++;)243 1187 y(word)g(=)h(line)f(+)h(i;)243 -1291 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290 -1343 y(i++;)243 1447 y(if)g(\(line[i]\))290 1499 y(line[i++])g(=)h -('\\0';)243 1602 y(command)f(=)g(find_command)g(\(word\);)243 -1706 y(if)g(\(!command\))290 1758 y({)338 1810 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338 -1862 y(return)g(\(-1\);)290 1914 y(})243 2017 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)243 2069 y(while)f(\(whitespace)f -(\(line[i]\)\))290 2121 y(i++;)243 2225 y(word)h(=)h(line)f(+)h(i;)243 -2329 y(/*)f(Call)h(the)f(function.)g(*/)243 2381 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)195 2433 y(})195 -2536 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g -(and)h(return)f(a)g(pointer)g(to)h(that)267 2588 y(command.)46 -b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f -(name.)g(*/)195 2640 y(COMMAND)g(*)p eop -%%Page: 51 53 -51 52 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(51)195 149 y Ft(find_command)22 b(\(name\))314 -201 y(char)i(*name;)195 253 y({)243 305 y(register)e(int)i(i;)243 -409 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -461 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338 -513 y(return)g(\(&commands[i]\);)243 616 y(return)g(\(\(COMMAND)f -(*\)NULL\);)195 668 y(})195 772 y(/*)i(Strip)f(whitespace)f(from)i(the) -f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267 -824 y(into)g(STRING.)g(*/)195 876 y(char)g(*)195 928 -y(stripwhite)f(\(string\))314 980 y(char)i(*string;)195 -1032 y({)243 1083 y(register)e(char)i(*s,)f(*t;)243 1187 -y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290 -1239 y(;)243 1343 y(if)g(\(*s)h(==)f(0\))290 1395 y(return)g(\(s\);)243 -1499 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1550 -y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290 -1602 y(t--;)243 1654 y(*++t)h(=)h('\\0';)243 1758 y(return)f(s;)195 -1810 y(})195 1914 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 1966 y(/*)1575 -b(*/)195 2017 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)195 2069 y(/*)1575 b(*/)195 2121 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)195 2225 y(char)i(*command_generator)f -(__P\(\(const)g(char)i(*,)f(int\)\);)195 2277 y(char)g -(**fileman_completion)e(__P\(\(const)i(char)g(*,)h(int,)f(int\)\);)195 -2381 y(/*)h(Tell)f(the)g(GNU)h(Readline)f(library)f(how)i(to)g -(complete.)46 b(We)24 b(want)f(to)h(try)f(to)267 2433 -y(complete)f(on)i(command)f(names)g(if)h(this)f(is)h(the)f(first)g -(word)g(in)h(the)g(line,)f(or)267 2484 y(on)g(filenames)g(if)g(not.)h -(*/)195 2536 y(initialize_readline)d(\(\))195 2588 y({)243 -2640 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h(~/.inputrc)e -(file.)h(*/)p eop -%%Page: 52 54 -52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)h(Library)243 -149 y Ft(rl_readline_name)21 b(=)j("FileMan";)243 253 -y(/*)f(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)f(first.)g -(*/)243 305 y(rl_attempted_completion_)o(functio)o(n)e(=)j -(fileman_completion;)195 357 y(})195 461 y(/*)g(Attempt)e(to)i -(complete)f(on)g(the)h(contents)f(of)g(TEXT.)47 b(START)23 -b(and)h(END)267 513 y(bound)f(the)g(region)g(of)h(rl_line_buffer)e -(that)h(contains)g(the)g(word)h(to)267 565 y(complete.)46 -b(TEXT)23 b(is)h(the)f(word)h(to)f(complete.)47 b(We)23 -b(can)h(use)f(the)h(entire)267 616 y(contents)e(of)i(rl_line_buffer)e -(in)h(case)h(we)f(want)h(to)f(do)h(some)f(simple)267 -668 y(parsing.)46 b(Returnthe)23 b(array)g(of)h(matches,)e(or)i(NULL)f -(if)h(there)f(aren't)g(any.)g(*/)195 720 y(char)g(**)195 -772 y(fileman_completion)e(\(text,)i(start,)g(end\))314 -824 y(const)g(char)h(*text;)314 876 y(int)g(start,)f(end;)195 -928 y({)243 980 y(char)g(**matches;)243 1083 y(matches)g(=)g(\(char)h -(**\)NULL;)243 1187 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g -(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314 -1239 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h -(a)f(file)h(in)f(the)h(current)314 1291 y(directory.)f(*/)243 -1343 y(if)g(\(start)g(==)h(0\))290 1395 y(matches)f(=)h -(rl_completion_matches)d(\(text,)i(command_generator\);)243 -1499 y(return)g(\(matches\);)195 1550 y(})195 1654 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)267 1706 y(know)g(whether)g(to)g(start)h(from)f(scratch;)g -(without)g(any)g(state)267 1758 y(\(i.e.)g(STATE)g(==)h(0\),)f(then)g -(we)h(start)f(at)h(the)f(top)h(of)f(the)h(list.)f(*/)195 -1810 y(char)g(*)195 1862 y(command_generator)f(\(text,)h(state\))314 -1914 y(const)g(char)h(*text;)314 1966 y(int)g(state;)195 -2017 y({)243 2069 y(static)f(int)g(list_index,)g(len;)243 -2121 y(char)g(*name;)243 2225 y(/*)g(If)h(this)f(is)h(a)g(new)f(word)g -(to)h(complete,)f(initialize)f(now.)47 b(This)314 2277 -y(includes)23 b(saving)g(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)f -(and)314 2329 y(initializing)h(the)g(index)g(variable)g(to)h(0.)f(*/) -243 2381 y(if)g(\(!state\))290 2433 y({)338 2484 y(list_index)g(=)g(0;) -338 2536 y(len)h(=)f(strlen)g(\(text\);)290 2588 y(})p -eop -%%Page: 53 55 -53 54 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(53)243 149 y Ft(/*)23 b(Return)g(the)h(next)f(name)g -(which)h(partially)e(matches)h(from)g(the)314 201 y(command)g(list.)g -(*/)243 253 y(while)g(\(name)g(=)h(commands[list_index].name)o(\))290 -305 y({)338 357 y(list_index++;)338 461 y(if)g(\(strncmp)f(\(name,)g -(text,)g(len\))g(==)h(0\))386 513 y(return)f(\(dupstr\(name\)\);)290 -565 y(})243 668 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f -(NULL.)g(*/)243 720 y(return)g(\(\(char)g(*\)NULL\);)195 -772 y(})195 876 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 928 y(/*)1575 -b(*/)195 980 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 -1032 y(/*)1575 b(*/)195 1083 y(/*)24 b(***********************)o -(*******)o(********)o(*******)o(*******)o(********)o(****)d(*/)195 -1187 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47 -b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267 -1239 y(commands.)f(*/)195 1291 y(static)h(char)g(syscom[1024];)195 -1395 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195 -1447 y(com_list)g(\(arg\))314 1499 y(char)h(*arg;)195 -1550 y({)243 1602 y(if)f(\(!arg\))290 1654 y(arg)h(=)g("";)243 -1758 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243 -1810 y(return)g(\(system)g(\(syscom\)\);)195 1862 y(})195 -1966 y(com_view)g(\(arg\))314 2017 y(char)h(*arg;)195 -2069 y({)243 2121 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290 -2173 y(return)g(1;)243 2277 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)243 2329 y(return)g(\(system)g(\(syscom\)\);)195 -2381 y(})195 2484 y(com_rename)f(\(arg\))314 2536 y(char)i(*arg;)195 -2588 y({)243 2640 y(too_dangerous)e(\("rename"\);)p eop -%%Page: 54 56 -54 55 bop 75 -58 a Fu(54)1299 b(GNU)15 b(Readline)h(Library)243 -149 y Ft(return)23 b(\(1\);)195 201 y(})195 305 y(com_stat)g(\(arg\)) -314 357 y(char)h(*arg;)195 409 y({)243 461 y(struct)f(stat)g(finfo;)243 -565 y(if)g(\(!valid_argument)f(\("stat",)h(arg\)\))290 -616 y(return)g(\(1\);)243 720 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g -(-1\))290 772 y({)338 824 y(perror)g(\(arg\);)338 876 -y(return)g(\(1\);)290 928 y(})243 1032 y(printf)g(\("Statistics)f(for)h -(`\045s':\\n",)g(arg\);)243 1135 y(printf)g(\("\045s)g(has)h(\045d)f -(link\045s,)g(and)g(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,) -434 1187 y(finfo.st_nlink,)434 1239 y(\(finfo.st_nlink)e(==)j(1\))g(?)f -("")h(:)g("s",)434 1291 y(finfo.st_size,)434 1343 y(\(finfo.st_size)e -(==)h(1\))h(?)f("")h(:)g("s"\);)243 1395 y(printf)f(\("Inode)g(Last)g -(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243 -1447 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_atime\)\);)243 1499 y(printf)g(\(")95 b(Last)23 -b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243 -1550 y(return)g(\(0\);)195 1602 y(})195 1706 y(com_delete)f(\(arg\))314 -1758 y(char)i(*arg;)195 1810 y({)243 1862 y(too_dangerous)e -(\("delete"\);)243 1914 y(return)h(\(1\);)195 1966 y(})195 -2069 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f -(the)h(commands)f(if)g(ARG)h(is)267 2121 y(not)f(present.)g(*/)195 -2173 y(com_help)g(\(arg\))314 2225 y(char)h(*arg;)195 -2277 y({)243 2329 y(register)e(int)i(i;)243 2381 y(int)f(printed)g(=)h -(0;)243 2484 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -2536 y({)338 2588 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g -(commands[i].name\))f(==)i(0\)\))386 2640 y({)p eop -%%Page: 55 57 -55 56 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)843 b(55)434 149 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e -(commands[i].name,)h(commands[i].doc\);)434 201 y(printed++;)386 -253 y(})290 305 y(})243 409 y(if)h(\(!printed\))290 461 -y({)338 513 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 -b(Possibilties)22 b(are:\\n",)h(arg\);)338 616 y(for)h(\(i)f(=)h(0;)g -(commands[i].name;)d(i++\))386 668 y({)434 720 y(/*)i(Print)g(in)h(six) -f(columns.)g(*/)434 772 y(if)g(\(printed)g(==)h(6\))481 -824 y({)529 876 y(printed)f(=)h(0;)529 928 y(printf)f(\("\\n"\);)481 -980 y(})434 1083 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434 -1135 y(printed++;)386 1187 y(})338 1291 y(if)i(\(printed\))386 -1343 y(printf)f(\("\\n"\);)290 1395 y(})243 1447 y(return)g(\(0\);)195 -1499 y(})195 1602 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195 -1654 y(com_cd)f(\(arg\))314 1706 y(char)h(*arg;)195 1758 -y({)243 1810 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290 -1862 y({)338 1914 y(perror)g(\(arg\);)338 1966 y(return)g(1;)290 -2017 y(})243 2121 y(com_pwd)g(\(""\);)243 2173 y(return)g(\(0\);)195 -2225 y(})195 2329 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)195 2381 y(com_pwd)g(\(ignore\))314 -2433 y(char)h(*ignore;)195 2484 y({)243 2536 y(char)f(dir[1024],)g(*s;) -243 2640 y(s)g(=)h(getcwd)f(\(dir,)g(sizeof\(dir\))g(-)g(1\);)p -eop -%%Page: 56 58 -56 57 bop 75 -58 a Fu(56)1299 b(GNU)15 b(Readline)h(Library)243 -149 y Ft(if)23 b(\(s)h(==)f(0\))290 201 y({)338 253 y(printf)g -(\("Error)g(getting)g(pwd:)g(\045s\\n",)g(dir\);)338 -305 y(return)g(1;)290 357 y(})243 461 y(printf)g(\("Current)f -(directory)h(is)h(\045s\\n",)f(dir\);)243 513 y(return)g(0;)195 -565 y(})195 668 y(/*)h(The)f(user)g(wishes)g(to)h(quit)f(using)g(this)h -(program.)46 b(Just)24 b(set)f(DONE)267 720 y(non-zero.)f(*/)195 -772 y(com_quit)h(\(arg\))314 824 y(char)h(*arg;)195 876 -y({)243 928 y(done)f(=)h(1;)243 980 y(return)f(\(0\);)195 -1032 y(})195 1135 y(/*)h(Function)e(which)i(tells)f(you)g(that)g(you)h -(can't)f(do)h(this.)f(*/)195 1187 y(too_dangerous)f(\(caller\))314 -1239 y(char)i(*caller;)195 1291 y({)243 1343 y(fprintf)f(\(stderr,)457 -1395 y("\045s:)h(Too)f(dangerous)g(for)g(me)h(to)g(distribute.\\n")457 -1447 y(caller\);)243 1499 y(fprintf)f(\(stderr,)f("Write)h(it)h -(yourself.\\n"\);)195 1550 y(})195 1654 y(/*)g(Return)f(non-zero)f(if)i -(ARG)f(is)h(a)g(valid)f(argument)g(for)g(CALLER,)267 -1706 y(else)g(print)g(an)h(error)f(message)g(and)g(return)g(zero.)g(*/) -195 1758 y(int)195 1810 y(valid_argument)f(\(caller,)h(arg\))314 -1862 y(char)h(*caller,)e(*arg;)195 1914 y({)243 1966 -y(if)h(\(!arg)g(||)h(!*arg\))290 2017 y({)338 2069 y(fprintf)f -(\(stderr,)g("\045s:)g(Argument)g(required.\\n",)f(caller\);)338 -2121 y(return)h(\(0\);)290 2173 y(})243 2277 y(return)g(\(1\);)195 -2329 y(})p eop -%%Page: 57 59 -57 58 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(57)75 -149 y Fq(Concept)27 b(Index)75 321 y Fs(C)75 382 y Ff(command)14 -b(editing)e Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(1)75 511 y Fs(E)75 572 y Ff(editing)15 b(command)f(lines)f -Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Ff(1)75 702 y Fs(I)75 -763 y Ff(initiali)q(zati)q(on)16 b(\014le,)e(readline)t -Fe(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)17 b Ff(4)75 808 y(in)o(teraction,)e(readline)5 -b Fe(.)j(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(1)75 -938 y Fs(K)75 999 y Ff(kill)d(ring)8 b Fe(.)f(.)f(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 -b Ff(3)75 1044 y(killing)c(text)9 b Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(2)1012 321 -y Fs(N)1012 390 y Ff(notation,)15 b(readline)7 b Fe(.)h(.)e(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(1)1012 539 y Fs(R)1012 -608 y Ff(readline,)15 b(function)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)21 b Ff(21)1012 757 y Fs(V)1012 826 y Ff(v)n(ariables,)15 -b(readline)t Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)17 -b Ff(4)1012 976 y Fs(Y)1012 1044 y Ff(y)o(anking)e(text)t -Fe(.)7 b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 -b Ff(2)p eop -%%Page: 58 60 -58 59 bop 75 -58 a Fu(58)1299 b(GNU)15 b(Readline)h(Library)p -eop -%%Page: 59 61 -59 60 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(59)75 149 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)p 79 307 21 3 v 75 369 a Fd(_rl_digit_)o(p)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(36)75 415 y Fd(_rl_digit_)o(va)o(lue)6 b Fe(.)t(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)20 b Ff(37)75 462 y Fd(_rl_lowerc)o(as)o(e_p)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(36)75 -508 y Fd(_rl_to_low)o(er)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)22 b Ff(36)75 554 y Fd(_rl_to_upp)o(er)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(36)75 600 y Fd(_rl_upperc)o(as)o(e_p)6 b Fe(.)t(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)20 b Ff(36)75 733 y Fs(A)75 794 y -Fd(abort)11 b(\(C-g\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)17 b Ff(17)75 841 y Fd(accept-lin)o(e)10 -b(\(Newline)f(or)j(Return\))6 b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)19 b Ff(12)75 973 y Fs(B)75 1035 y Fd(backward-c)o(ha)o(r)10 -b(\(C-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(12)75 -1081 y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))e -Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(14)75 1127 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10 -b(\(C-x)h(Rubout\))e Fe(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Ff(15)75 1174 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10 -b(\(M-)501 1172 y Fn(h)p 512 1146 73 2 v 512 1174 a Fm(DEL)p -512 1181 V 583 1172 a Fn(i)598 1174 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Ff(15)75 1220 y -Fd(backward-w)o(or)o(d)10 b(\(M-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 -b Ff(12)75 1266 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 -b(\(M-<\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)25 b Ff(13)75 1312 y Fd(beginning-)o(of)o(-li)o(ne)9 -b(\(C-a\))c Fe(.)t(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(12)75 1359 y(b)q(ell-st)o(yle)7 -b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)20 b Ff(5)75 1490 y Fs(C)75 1552 y Fd(call-last-)o(kb)o(d-m) -o(ac)o(ro)9 b(\(C-x)j(e\))5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(17)75 1598 y Fd(capitalize)o(-w)o(ord)9 -b(\(M-c\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(14)75 1644 y Fd(character-)o(se) -o(arc)o(h)10 b(\(C-]\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(18)75 -1691 y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 -b(\(M-C-]\))e Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(18)75 1737 y Fd(clear-scre)o(en)9 b(\(C-l\))g Fe(.)t(.)d(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)21 b Ff(12)75 1783 y(commen)o(t-b)q(egin)9 -b Fe(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)21 -b Ff(5)75 1829 y Fd(complete)10 b(\()265 1827 y Fn(h)p -276 1801 74 2 v 276 1829 a Fm(T)m(AB)p 276 1837 V 348 -1827 a Fn(i)363 1829 y Fd(\))f Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -22 b Ff(16)75 1875 y(completion-query-i)q(tems)t Fe(.)9 -b(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(5)75 1922 y(con)o(v)o(ert-meta)10 -b Fe(.)c(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 -b Ff(5)75 1968 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 -b(\(\))c Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)75 2014 y Fd(copy-forwa)o(rd)o -(-wo)o(rd)9 b(\(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(16)75 -2060 y Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(15)75 2193 y Fs(D)75 2255 y Fd(delete-cha)o(r)10 -b(\(C-d\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(14)75 -2301 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(17)75 2347 y Fd(delete-hor)o(iz)o(ont)o(al)o -(-sp)o(ace)9 b(\(\))i Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)25 b Ff(15)75 2393 y Fd(digit-argu)o(me)o(nt)9 -b(\()p Fc(M-0)p Fd(,)i Fc(M-1)p Fd(,)h(...)f Fc(M--)p -Fd(\))c Fe(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(16)75 -2439 y(disable-comple)q(tion)9 b Fe(.)g(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)21 b Ff(5)75 2486 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9 -b(\(M-a,)i(M-b,)g(M-)p Fb(x)p Fd(,)h(...)o(\))159 2531 -y Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(17)75 2578 y Fd(downcase-w)o(or)o(d)10 -b(\(M-l\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(14)75 -2624 y Fd(dump-funct)o(io)o(ns)9 b(\(\))g Fe(.)d(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)22 b Ff(18)75 2670 y Fd(dump-macro)o(s)10 b(\(\))g -Fe(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(18)1012 -307 y Fd(dump-variab)o(le)o(s)10 b(\(\))e Fe(.)e(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)23 b Ff(18)1012 449 y Fs(E)1012 514 y Ff(editing-mo)q(de)12 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(5)1012 562 y Fd(emacs-editi)o(ng)o(-mo)o(de)9 b(\(C-e\))t -Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)18 b Ff(18)1012 610 y(enable-k)o(eypad)9 b Fe(.)g(.)d(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(5)1012 -658 y Fd(end-kbd-mac)o(ro)9 b(\(C-x)i(\)\))e Fe(.)e(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(17)1012 706 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))d -Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 754 y Fd(end-of-line)9 -b(\(C-e\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(12)1012 -802 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o(rk)9 b(\(C-x)j(C-x\))c -Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(18)1012 -850 y(expand-tilde)6 b Fe(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)19 b Ff(5)1012 991 y Fs(F)1012 1056 -y Fd(forward-bac)o(kw)o(ard)o(-d)o(ele)o(te)o(-ch)o(ar)9 -b(\(\))f Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(14)1012 1104 y Fd(forward-cha)o(r)10 b(\(C-f\))f -Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1152 y -Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))e -Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Ff(13)1012 1200 y Fd(forward-wor)o(d)10 b(\(M-f\))f -Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1334 y -Fs(H)1012 1400 y Ff(history-preserv)o(e-p)q(oi)q(n)o(t)8 -b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Ff(5)1012 1448 y -Fd(history-sea)o(rc)o(h-b)o(ac)o(kwa)o(rd)9 b(\(\))i -Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)25 -b Ff(13)1012 1496 y Fd(history-sea)o(rc)o(h-f)o(or)o(war)o(d)10 -b(\(\))s Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)17 b Ff(13)1012 1543 y(horizon)o(tal-scrol)q(l-mo)r(de)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(6)1012 1678 y -Fs(I)1012 1743 y Ff(input-meta)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 1791 -y Fd(insert-comm)o(en)o(t)10 b(\(M-#\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(18)1012 1839 y Fd(insert-comp)o(le)o(tio)o(ns)9 -b(\(M-*\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)18 b Ff(16)1012 1887 y(isearc)o(h-terminators)t -Fe(.)8 b(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)16 b Ff(6)1012 -2021 y Fs(K)1012 2087 y Ff(k)o(eymap)9 b Fe(.)e(.)f(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(6)1012 2135 y Fd(kill-line)10 b(\(C-k\))f Fe(.)d(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)24 b Ff(15)1012 2183 y Fd(kill-region)9 -b(\(\))i Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(15)1012 2231 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))g -Fe(.)c(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(15)1012 2278 y -Fd(kill-word)10 b(\(M-d\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -24 b Ff(15)1012 2413 y Fs(M)1012 2478 y Ff(mark-mo)q(di\014ed-li)q(nes) -8 b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 -2526 y(mark-symlink)o(ed-di)q(rectori)q(es)14 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)23 b Ff(6)1012 2574 y(matc)o(h-hidden-\014l)q(es)14 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)24 b Ff(6)1012 -2622 y Fd(menu-comple)o(te)9 b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)23 b Ff(16)1012 2670 y(meta-\015ag)t Fe(.)8 b(.)e(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 -b Ff(6)p eop -%%Page: 60 62 -60 61 bop 75 -58 a Fu(60)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fs(N)75 210 y Fd(next-histo)o(ry)9 b(\(C-n\))g -Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(13)75 256 y Fd(non-increm)o(en)o -(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o(st)o(ory)9 -b(\(M-n\))159 302 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(13)75 -347 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)o(ear)o(ch)o(-hi)o -(st)o(ory)9 b(\(M-p\))159 393 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(13)75 515 y Fs(O)75 576 y Ff(output-meta)5 b Fe(.)i(.)f(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(6)75 -622 y Fd(overwrite-)o(mo)o(de)9 b(\(\))g Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)22 b Ff(15)75 744 y Fs(P)75 805 y Ff(page-completions)14 -b Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 -b Ff(7)75 851 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)25 b Ff(16)75 897 y Fd(prefix-met)o(a)10 b(\()324 -895 y Fn(h)p 335 868 70 2 v 335 897 a Fm(ESC)p 335 904 -V 402 895 a Fn(i)417 897 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 -b Ff(17)75 942 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))c -Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(12)75 1072 y Fs(Q)75 1133 y Fd(quoted-ins)o(er)o -(t)10 b(\(C-q)h(or)h(C-v\))c Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(14)75 1263 y Fs(R)75 -1323 y Fd(re-read-in)o(it)o(-fi)o(le)9 b(\(C-x)i(C-r\))5 -b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 -b Ff(17)75 1369 y Fd(readline)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(21)75 -1415 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(12)75 1461 y Fd(reverse-se)o(ar)o(ch-)o(hi)o -(sto)o(ry)9 b(\(C-r\))g Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)23 b Ff(13)75 1506 y Fd(revert-lin)o(e)10 -b(\(M-r\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(17)75 -1552 y Fd(rl_add_def)o(un)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)22 b Ff(28)75 1598 y Fd(rl_add_fun)o(ma)o(p_e)o(nt)o(ry) -t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(31)75 1643 y Fd(rl_add_und)o(o)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(32)75 1689 y Fd(rl_alphabe)o(ti)o(c)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(36)75 1735 y Fd(rl_already)o(_p)o(rom)o -(pt)o(ed)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(25)75 -1781 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_f)o(unc)o(ti)o(on)t -Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(43)75 -1826 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_o)o(ver)6 -b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(46)75 1872 y Fd(rl_basic_q)o(uo)o(te_)o(ch)o(ara)o(cte)o(rs)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -22 b Ff(45)75 1918 y Fd(rl_basic_w)o(or)o(d_b)o(re)o(ak_)o(cha)o(ra)o -(cte)o(rs)5 b Fe(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 -b Ff(45)75 1964 y Fd(rl_begin_u)o(nd)o(o_g)o(ro)o(up)t -Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(32)75 2009 y Fd(rl_bind_ke)o(y)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(30)75 2055 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(30)75 2101 y -Fd(rl_binding)o(_k)o(eym)o(ap)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(27)75 2146 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7 -b Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(38)75 2192 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(38)75 2238 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(38)75 2284 y Fd(rl_catch_s)o(ig)o(nal)o(s)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(40)75 -2329 y Fd(rl_catch_s)o(ig)o(win)o(ch)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)19 b Ff(40)75 2375 y Fd(rl_char_is)o(_q)o(uot)o(ed)o(_p)t -Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(44)75 2421 y Fd(rl_cleanup)o(_a)o -(fte)o(r_)o(sig)o(nal)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(40)75 2467 y -Fd(rl_clear_m)o(es)o(sag)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Ff(33)75 2512 y Fd(rl_clear_p)o(en)o(din)o(g_)o(inp)o(ut)8 -b Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)24 b Ff(35)1012 149 y Fd(rl_clear_si)o(gn)o(als)6 -b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(41)1012 -196 y Fd(rl_complete)6 b Fe(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)24 b Ff(42)1012 242 y Fd(rl_complete)o(_i)o(nte)o(rn)o(al)s -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(42)1012 288 y Fd(rl_complete)o(r_)o -(quo)o(te)o(_ch)o(ar)o(act)o(ers)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)20 b Ff(45)1012 335 y Fd(rl_complete)o(r_)o(wor)o -(d_)o(bre)o(ak)o(_ch)o(ara)o(ct)o(ers)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.) -25 b Ff(45)1012 381 y Fd(rl_completi)o(on)o(_ap)o(pe)o(nd_)o(ch)o(ara)o -(cte)o(r)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(45)1012 427 y Fd(rl_completi)o(on)o(_di)o(sp)o(lay)o(_m)o(atc)o -(hes)o(_h)o(ook)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)25 b -Ff(45)1012 474 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s -Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(42,)c(43)1012 -520 y Fd(rl_completi)o(on)o(_ma)o(rk)o(_sy)o(ml)o(ink)o(_di)o(rs)t -Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Ff(46)1012 -566 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fe(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(43)1012 613 y Fd(rl_completi)o(on)o(_mo)o(de)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(43)1012 659 y Fd(rl_completi)o(on)o(_qu) -o(er)o(y_i)o(te)o(ms)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(45)1012 705 y Fd(rl_completi)o(on)o(_su) -o(pp)o(res)o(s_)o(app)o(end)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)20 b Ff(46)1012 752 y Fd(rl_completi)o(on)o(_ty)o(pe)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(46)1012 798 y -Fd(rl_copy_key)o(ma)o(p)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)21 b Ff(29)1012 844 y Fd(rl_copy_tex)o(t)6 b Fe(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(34)1012 891 y -Fd(rl_crlf)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(33)1012 937 y Fd(rl_delete_t)o(ex)o(t)8 -b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b -Ff(34)1012 983 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7 -b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)24 b Ff(26)1012 1030 y Fd(rl_deprep_t)o(er)o(min)o(al)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(35)1012 1076 -y Fd(rl_ding)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(36)1012 1122 y Fd(rl_director)o(y_)o -(com)o(pl)o(eti)o(on)o(_ho)o(ok)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(44)1012 1169 y Fd(rl_discard_)o(ke)o -(yma)o(p)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(29)1012 -1215 y Fd(rl_dispatch)o(in)o(g)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)21 b Ff(25)1012 1261 y Fd(rl_display_)o(ma)o(tch)o(_l)o -(ist)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)25 b Ff(36)1012 1308 y Fd(rl_do_undo)8 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Ff(32)1012 1354 y Fd(rl_done)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(24)1012 -1400 y Fd(rl_editing_)o(mo)o(de)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)21 b Ff(28)1012 1447 y Fd(rl_end)5 b Fe(.)t(.)h(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Ff(24)1012 1493 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b -Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(32)1012 1539 -y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Ff(25)1012 1586 y Fd(rl_event_ho)o(ok)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(26)1012 1632 y Fd(rl_execute_)o(ne)o -(xt)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(35)1012 1678 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(26)1012 1725 y Fd(rl_executin)o(g_) -o(mac)o(ro)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(27)1012 -1771 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)20 b Ff(34)1012 1817 y Fd(rl_explicit)o(_a)o(rg)7 -b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(28)1012 -1864 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fe(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(36)1012 1910 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o -(ire)o(d)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(46)1012 1956 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o -(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Ff(43)1012 2003 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o -(tio)o(n)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(44)1012 2049 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o -(rs)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(45)1012 2095 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o -(d)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Ff(46)1012 2142 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o -(on)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(44)1012 2188 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)23 b Ff(33)1012 2234 y Fd(rl_free_lin)o(e_)o(sta)o(te)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(40)1012 2281 -y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -19 b Ff(32)1012 2327 y Fd(rl_function)o(_d)o(ump)o(er)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(31)1012 2373 -y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(31)1012 2420 y Fd(rl_funmap_n)o(am)o(es)7 b Fe(.)s(.)f(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Ff(31)1012 2466 y Fd(rl_generic_)o(bi)o(nd)7 -b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(30)1012 -2512 y Fd(rl_get_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)22 b Ff(29)p eop -%%Page: 61 63 -61 62 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(61)75 149 y Fd(rl_get_key)o(ma)o(p_b)o(y_)o(nam)o(e)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(29)75 196 y Fd(rl_get_key)o(ma)o(p_n)o(am)o(e)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(29)75 242 y Fd(rl_get_scr)o(ee) -o(n_s)o(iz)o(e)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 -b Ff(41)75 288 y Fd(rl_get_ter)o(mc)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Ff(37)75 335 y Fd(rl_getc)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)17 b Ff(35)75 381 y Fd(rl_getc_fu)o(nc)o(tio)o(n)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(26)75 -427 y Fd(rl_gnu_rea)o(dl)o(ine)o(_p)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)19 b Ff(25)75 474 y Fd(rl_ignore_)o(co)o(mpl)o(et)o(ion)o(_du)o(pl) -o(ica)o(te)o(s)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 -b Ff(46)75 520 y Fd(rl_ignore_)o(so)o(me_)o(co)o(mpl)o(eti)o(on)o(s_f)o -(un)o(cti)o(on)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)24 b Ff(44)75 -566 y Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(47)75 613 y Fd(rl_initial)o(iz)o(e)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(36)75 659 y Fd(rl_insert_)o(co)o(mpl)o -(et)o(ion)o(s)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(43)75 705 y Fd(rl_insert_)o(te) -o(xt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(34)75 752 y Fd(rl_instrea)o(m)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(25)75 798 y Fd(rl_invokin)o(g_)o -(key)o(se)o(qs)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(31)75 -844 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(31)75 891 y Fd(rl_kill_te)o(xt)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(34)75 937 y Fd(rl_last_fu)o(nc)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(26)75 983 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(25)75 1030 y -Fd(rl_line_bu)o(ff)o(er)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)21 b Ff(24)75 1076 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s -Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(31)75 1122 y Fd(rl_macro_b)o(in)o(d)9 -b Fe(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(37)75 1169 y Fd(rl_macro_d)o(um)o(per)6 b Fe(.)t(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)20 b Ff(37)75 1215 y Fd(rl_make_ba)o(re)o(_ke)o(ym) -o(ap)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75 1261 -y Fd(rl_make_ke)o(ym)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)21 b Ff(29)75 1308 y Fd(rl_mark)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 -b Ff(24)75 1354 y Fd(rl_message)7 b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(33)75 1400 y Fd(rl_modifyi)o(ng)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(32)75 1447 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fe(.)s(.)i(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Ff(31)75 1493 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o -(ead)s Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(24)75 1539 y Fd(rl_numeric)o(_a) -o(rg)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(28)75 1586 y Fd(rl_on_new_)o(li)o(ne)8 b Fe(.)s(.)e(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(33)75 1632 y Fd(rl_on_new_)o(li)o(ne_)o -(wi)o(th_)o(pro)o(mp)o(t)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(33)75 1678 y Fd(rl_outstre)o(am)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(26)75 1725 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fe(.)s(.)i(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Ff(31)75 1771 y Fd(rl_pending)o(_i)o(npu)o(t)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(24)75 -1817 y Fd(rl_point)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(24)75 1864 y Fd(rl_possibl)o(e_)o -(com)o(pl)o(eti)o(ons)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(42)75 1910 y -Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(26)75 1956 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(26)75 2003 y Fd(rl_prep_te)o(rm)o(ina)o(l)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(35)75 -2049 y Fd(rl_prompt)8 b Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)24 b Ff(25)75 2095 y Fd(rl_push_ma)o(cr)o(o_i)o(np) -o(ut)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(34)75 2142 -y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -19 b Ff(31)75 2188 y Fd(rl_read_ke)o(y)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(34)75 2234 y -Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Ff(25)75 2281 y Fd(rl_readlin)o(e_)o(sta)o(te)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(27)75 2327 -y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 -b Ff(25)75 2373 y Fd(rl_redispl)o(ay)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(33)75 2420 y Fd(rl_redispl)o(ay)o(_fu)o -(nc)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(26)75 2466 y -Fd(rl_replace)o(_l)o(ine)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -20 b Ff(36)75 2512 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(40)1012 149 y Fd(rl_reset_li)o(ne)o(_st)o(at)o -(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(33)1012 195 -y Fd(rl_reset_te)o(rm)o(ina)o(l)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -19 b Ff(35)1012 241 y Fd(rl_resize_t)o(er)o(min)o(al)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(41)1012 287 y -Fd(rl_restore_)o(pr)o(omp)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 -b Ff(34)1012 333 y Fd(rl_save_pro)o(mp)o(t)8 b Fe(.)s(.)e(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)21 b Ff(33)1012 379 y Fd(rl_set_key)8 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Ff(30)1012 424 y Fd(rl_set_keyb)o(oa)o(rd_)o(in)o(put)o(_t)o(ime)o -(out)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 -b Ff(35)1012 470 y Fd(rl_set_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(29)1012 516 y Fd(rl_set_pare)o(n_)o -(bli)o(nk)o(_ti)o(me)o(out)7 b Fe(.)t(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(37)1012 562 y Fd(rl_set_prom)o(pt)8 -b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Ff(34)1012 608 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(41)1012 654 y Fd(rl_set_sign)o(al)o(s)8 -b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b -Ff(41)1012 700 y Fd(rl_show_cha)o(r)6 b Fe(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(33)1012 745 y Fd(rl_special_)o(pr)o -(efi)o(xe)o(s)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(45)1012 -791 y Fd(rl_startup_)o(ho)o(ok)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)21 b Ff(26)1012 837 y Fd(rl_stuff_ch)o(ar)8 b -Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Ff(35)1012 883 y Fd(rl_terminal)o(_n)o(ame)6 b Fe(.)s(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)20 b Ff(25)1012 929 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o -(_bi)o(nd)o(ing)o(s)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)21 b Ff(35)1012 975 y Fd(rl_unbind_c)o(om)o(man)o(d_)o -(in_)o(ma)o(p)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)23 b Ff(30)1012 1020 y Fd(rl_unbind_f)o(un)o(cti)o -(on)o(_in)o(_m)o(ap)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(30)1012 1066 y Fd(rl_unbind_k)o(ey)8 -b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Ff(30)1012 1112 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(30)1012 1158 y Fd(rl_username)o(_c)o -(omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)18 b Ff(43)1012 1204 y Fd(rl_variable)o(_b)o(ind)6 -b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(37)1012 -1250 y Fd(rl_variable)o(_d)o(ump)o(er)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)19 b Ff(37)1012 1380 y Fs(S)1012 1441 y Fd(self-insert)9 -b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1487 y Fd(set-mark)10 -b(\(C-@\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(17)1012 1533 y(sho)o(w-all-if-am)o(bigu)q(ous)14 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(7)1012 1579 -y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c Fe(.)d(.)i(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 -b Ff(17)1012 1701 y Fs(T)1012 1763 y Fd(tab-insert)9 -b(\(M-)1281 1761 y Fn(h)p 1292 1735 74 2 v 1292 1763 -a Fm(T)m(AB)p 1292 1770 V 1364 1761 a Fn(i)1379 1763 -y Fd(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(14)1012 1808 -y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(17)1012 1854 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d -Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1900 y Fd(transpose-w)o(or)o(ds)9 -b(\(M-t\))d Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 2030 y -Fs(U)1012 2092 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c -Fe(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)1012 2137 y Fd(universal-a)o(rg)o -(ume)o(nt)9 b(\(\))d Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(16)1012 -2183 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b -Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)18 b Ff(15)1012 2229 y Fd(unix-word-r)o(ub)o(out)9 -b(\(C-w\))d Fe(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)1012 2275 y Fd(upcase-word)9 -b(\(M-u\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(14)1012 -2405 y Fs(V)1012 2466 y Fd(vi-editing-)o(mo)o(de)9 b(\(M-C-j\))c -Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)18 b Ff(18)1012 2512 y(visible-stats)c Fe(.)6 -b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Ff(7)p eop -%%Page: 62 64 -62 63 bop 75 -58 a Fu(62)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fs(Y)75 242 y Fd(yank)11 b(\(C-y\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Ff(16)1012 -149 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c Fe(.)f(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(13)1012 196 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d -Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 242 y Fd(yank-pop)10 -b(\(M-y\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(16)p eop -%%Page: -1 65 --1 64 bop 1862 -58 a Fu(i)75 149 y Fq(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fs(1)67 b(Command)22 b(Line)i(Editing)d -Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fs(1)224 389 y Fu(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fu(1)224 444 y(1.2)45 b(Readline)16 b(In)o(teraction)8 -b Fl(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fu(1)374 499 y(1.2.1)44 b(Readline)16 -b(Bare)f(Essen)o(tials)f Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(1)374 553 y(1.2.2)44 b(Readline)16 b(Mo)o(v)o(emen)o(t)e(Commands) -7 b Fl(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fu(2)374 608 y(1.2.3)44 b(Readline)16 b(Killing)i(Commands) -11 b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 663 y(1.2.4)44 b(Readline)16 -b(Argumen)o(ts)c Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fu(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(3)224 773 y(1.3)45 b(Readline)16 b(Init)h(File)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fu(4)374 827 y(1.3.1)44 b(Readline)16 -b(Init)g(File)h(Syn)o(tax)7 b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fu(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fl(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fu(9)374 937 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fl(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fu(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)g(Commands) -6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fu(12)374 -1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1101 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fl(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1156 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fl(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(14)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fl(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(15)374 -1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fu(16)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)i(T)o(yp)q(e)e(F)l -(or)g(Y)l(ou)10 b Fl(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fu(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fu(17)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fu(17)224 1485 y(1.5)45 b(Readline)16 b(vi)g(Mo)q(de)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fu(18)75 1606 y Fs(2)67 b(Programming)23 -b(with)g(GNU)f(Readline)12 b Fa(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35 -b Fs(21)224 1675 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8 -b Fl(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(21)224 1729 y(2.2)45 -b(Custom)14 b(F)l(unctions)7 b Fl(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(22)374 -1784 y(2.2.1)44 b(Readline)16 b(T)o(yp)q(edefs)9 b Fl(.)g(.)e(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)g(.)f(.)h(.)24 b Fu(23)374 1839 y(2.2.2)44 -b(W)l(riting)16 b(a)e(New)i(F)l(unction)6 b Fl(.)i(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -21 b Fu(23)224 1894 y(2.3)45 b(Readline)16 b(V)l(ariables)g -Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g -(.)f(.)h(.)29 b Fu(24)224 1949 y(2.4)45 b(Readline)16 -b(Con)o(v)o(enience)h(F)l(unctions)7 b Fl(.)i(.)e(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -23 b Fu(28)374 2003 y(2.4.1)44 b(Naming)15 b(a)g(F)l(unction)e -Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Fu(28)374 -2058 y(2.4.2)44 b(Selecting)17 b(a)e(Keymap)6 b Fl(.)h(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)21 b Fu(29)374 2113 y(2.4.3)44 b(Binding)17 -b(Keys)5 b Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)20 b Fu(30)374 2168 y(2.4.4)44 b(Asso)q(ciating)16 -b(F)l(unction)g(Names)f(and)g(Bindings)8 b Fl(.)h(.)f(.)f(.)h(.)f(.)h -(.)23 b Fu(31)374 2222 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b -Fu(32)374 2277 y(2.4.6)44 b(Redispla)o(y)10 b Fl(.)e(.)g(.)g(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fu(33)374 2332 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7 -b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fu(34)374 2387 y(2.4.8)44 b(Character)14 b(Input)c -Fl(.)f(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25 -b Fu(34)374 2442 y(2.4.9)44 b(T)l(erminal)16 b(Managemen)o(t)11 -b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(35)374 2496 y(2.4.10)43 -b(Utilit)o(y)17 b(F)l(unctions)c Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)28 b Fu(36)374 2551 y(2.4.11)43 b(Miscellaneous)18 -b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fu(37)374 -2606 y(2.4.12)43 b(Alternate)16 b(In)o(terface)f Fl(.)7 -b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 b Fu(37)374 2661 -y(2.4.13)43 b(A)16 b(Readline)g(Example)9 b Fl(.)f(.)f(.)h(.)f(.)h(.)g -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)24 b Fu(38)p eop -%%Page: -2 66 --2 65 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)h(Library)224 -42 y(2.5)45 b(Readline)16 b(Signal)h(Handling)12 b Fl(.)c(.)g(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(39)224 96 -y(2.6)45 b(Custom)14 b(Completers)f Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fu(41)374 -151 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10 -b Fl(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(41)374 206 y(2.6.2)44 -b(Completion)16 b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -21 b Fu(42)374 261 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c -Fl(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(43)374 315 -y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b -Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)20 b Fu(47)75 437 y Fs(Concept)i(Index)10 b Fa(.)i(.)e(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(57)75 572 -y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9 -b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)32 b Fs(59)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline-4.3.orig/doc/readline_3.ps b/readline-4.3.orig/doc/readline_3.ps deleted file mode 100644 index 7d20e17..0000000 --- a/readline-4.3.orig/doc/readline_3.ps +++ /dev/null @@ -1,1294 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.17.2 -%%CreationDate: Thu Jun 27 13:54:44 2002 -%%DocumentNeededResources: font Times-Roman -%%+ font Times-Bold -%%+ font Times-Italic -%%+ font Courier -%%DocumentSuppliedResources: procset grops 1.17 2 -%%Pages: 14 -%%PageOrder: Ascend -%%Orientation: Portrait -%%EndComments -%%BeginProlog -%%BeginResource: procset grops 1.17 2 -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/MF{ -findfont -[5 2 roll -0 3 1 roll -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}bind def -/DA{ -newpath arcn stroke -}bind def -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -/DL{ -SN -moveto -SN -lineto stroke -}bind def -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -/FL{ -currentgray exch setgray fill setgray -}bind def -/BL/fill load def -/LW/setlinewidth load def -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -}bind def -/PEND{ -clear -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%IncludeResource: font Times-Roman -%%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Italic -%%IncludeResource: font Courier -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE -/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 -10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 -(readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS) -72 112.8 Q/F2 10/Times-Bold@0 SF(#include <stdio.h>)108 124.8 Q -(#include <r)108 136.8 Q(eadline/r)-.18 E(eadline.h>)-.18 E(#include <r) -108 148.8 Q(eadline/history)-.18 E(.h>)-.7 E/F3 10/Times-Italic@0 SF --.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0 -(\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT) -72 194.4 Q F0(Readline is Cop)108 206.4 Q -(yright \251 1989\2552002 by the Free Softw)-.1 E(are F)-.1 E -(oundation, Inc.)-.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S -(adline).18 E F0 .088 -(will read a line from the terminal and return it, using)2.588 F F2(pr) -2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr)2.587 -E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42 -(the empty string, no prompt is issued.)108 247.2 R .421 -(The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421 -(\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q -(The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15 -G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108 -276 S(adline).18 E F0(of)3.79 E 1.29 -(fers editing capabilities while the user is entering the line.)-.25 F -1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F -(mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G -(i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G -(ilable.).25 E .272 -(This manual page describes only the most basic use of)108 304.8 R F2 --.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272 -(uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25 -F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3 -(The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.) -2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.478 E F2 -.18(re)108 345.6 S -(adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.) --.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589 -F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283 -(while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2 -(NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF) -2.783 E F0 .283(is read with a non\255empty line, it)2.783 F -(is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.986(TA) --.438 G(TION)-.054 E F0 .181 -(An emacs-style notation is used to denote k)108 398.4 R -.15(ey)-.1 G -(strok).15 E 2.681(es. Control)-.1 F -.1(ke)2.681 G .18 -(ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.68(,e)C .18 -(.g., C\255n means)-2.68 F 2.625(Control\255N. Similarly)108 410.4 R(,) --.65 E F3(meta)2.625 E F0 -.1(ke)2.625 G .125(ys are denoted by M\255) --.05 F F3 -.1(ke)C(y)-.2 E F0 2.625(,s)C 2.625(oM)-2.625 G .125 -(\255x means Meta\255X.)-2.625 F .126(\(On k)5.126 F -.15(ey)-.1 G .126 -(boards without a).15 F F3(meta)108 422.4 Q F0 -.1(ke)3.309 G 2.109 -.65 -(y, M)-.05 H<ad>.65 E F3(x)A F0 .809(means ESC)3.309 F F3(x)3.309 E F0 -3.309(,i)C .809(.e., press the Escape k)-3.309 F 1.108 -.15(ey t)-.1 H -.808(hen the).15 F F3(x)3.308 E F0 -.1(ke)3.308 G 4.608 -.65(y. T)-.05 H -.808(his mak).65 F .808(es ESC the)-.1 F F3 .808(meta pr)3.308 F(e\214x) --.37 E F0(.)A .48(The combination M\255C\255)108 434.4 R F3(x)A F0 .48 -(means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o)C 2.98(rp)-2.98 G .48 -(ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48 -(hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E -(pressing the)108 446.4 Q F3(x)2.5 E F0 -.1(ke)2.5 G -.65(y.)-.05 G(\)) -.65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G 3.119 -(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w).27 G -.619(hich normally act as a repeat count.)-3.119 F(Sometimes,)5.619 E -(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti) -.4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 -(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) -.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 -(ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018 -(ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C -1.018(auses that command to act in a backw)-3.518 F 1.018 -(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q -(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted.)-.25 E -.811(When a command is described as)108 516 R F3(killing)3.311 E F0(te) -3.311 E .811(xt, the te)-.15 F .811(xt deleted is sa)-.15 F -.15(ve)-.2 -G 3.311(df).15 G .812(or possible future retrie)-3.311 F -.25(va)-.25 G -3.312(l\().25 G F3(yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029 -(killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G -2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E -.329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029 -(xt to be accumulated into one unit,)-.15 F .567(which can be yank)108 -540 R .567(ed all at once.)-.1 F .567(Commands which do not kill te) -5.567 F .567(xt separate the chunks of te)-.15 F .567(xt on the kill) --.15 F(ring.)108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-1.04 E F0 -.091(Readline is customized by putting commands in an initialization \ -\214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591 -(\214le\). The)2.591 F .091(name of this \214le)2.591 F 1.442(is tak)108 -592.8 R 1.443(en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC) -3.943 E F0(en)3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F -1.443(that v)3.943 F 1.443(ariable is unset, the def)-.25 F 1.443 -(ault is)-.1 F F3(~/.inputr)108 604.8 Q(c)-.37 E F0 5.359(.W).31 G .359 -(hen a program which uses the readline library starts up, the init \214\ -le is read, and the k)-5.359 F .658 -.15(ey b)-.1 H(ind-).15 E 1.083 -(ings and v)108 616.8 R 1.083(ariables are set.)-.25 F 1.083 -(There are only a fe)6.083 F 3.583(wb)-.25 G 1.083(asic constructs allo) --3.583 F 1.084(wed in the readline init \214le.)-.25 F(Blank)6.084 E -.737(lines are ignored.)108 628.8 R .737(Lines be)5.737 F .737 -(ginning with a)-.15 F F2(#)3.237 E F0 .737(are comments.)3.237 F .737 -(Lines be)5.737 F .737(ginning with a)-.15 F F2($)3.237 E F0 .736 -(indicate conditional)3.236 F 2.614(constructs. Other)108 640.8 R .114 -(lines denote k)2.614 F .414 -.15(ey b)-.1 H .115(indings and v).15 F -.115(ariable settings.)-.25 F .115 -(Each program using this library may add)5.115 F(its o)108 652.8 Q -(wn commands and bindings.)-.25 E -.15(Fo)108 669.6 S 2.5(re).15 G -(xample, placing)-2.65 E(M\255Control\255u: uni)144 686.4 Q -.15(ve)-.25 -G(rsal\255ar).15 E(gument)-.18 E(or)108 698.4 Q(C\255Meta\255u: uni)144 -710.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(GNU Readline 4.3) -72 768 Q(2002 January 22)126.24 E(1)195.95 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R -(into the)108 84 Q/F1 10/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0 -.1 -(wo)2.5 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G -(cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument) --.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795 -(wing symbolic character names are recognized while processing k)-.25 F -3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC) -5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,) -.28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5 -E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC) --.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5 -(TA)2.5 G(B).5 E F0(.).27 E .209 -(In addition to command names, readline allo)108 129.6 R .209(ws k)-.25 -F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 -(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) --.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2 -10/Times-Bold@0 SF -.25(Ke)87 163.2 S 2.5(yB).25 G(indings)-2.5 E F0 -.382(The syntax for controlling k)108 175.2 R .682 -.15(ey b)-.1 H .382 -(indings in the).15 F F1(inputr)2.882 E(c)-.37 E F0 .382 -(\214le is simple.)2.882 F .382(All that is required is the name of the) -5.382 F .382(command or the te)108 187.2 R .383(xt of a macro and a k) --.15 F .683 -.15(ey s)-.1 H .383 -(equence to which it should be bound. The name may be speci-).15 F .853 -(\214ed in one of tw)108 199.2 R 3.353(ow)-.1 G .853 -(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853 -(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr) -3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15 -(ey)-.1 G(sequence.)108 211.2 Q 1.766(When using the form)108 228 R F2 --.1(ke)4.266 G(yname).1 E F0(:)A F1(function-name).833 E F0(or)4.266 E -F1(macr)4.267 E(o)-.45 E F0(,)A F1 -.1(ke)4.267 G(yname)-.2 E F0 1.767 -(is the name of a k)4.267 F 2.067 -.15(ey s)-.1 H 1.767(pelled out in) -.15 F 2.5(English. F)108 240 R(or e)-.15 E(xample:)-.15 E -(Control\255u: uni)144 264 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 -E(Meta\255Rubout: backw)144 276 Q(ard\255kill\255w)-.1 E(ord)-.1 E -(Control\255o: "> output")144 288 Q .229(In the abo)108 304.8 R .529 --.15(ve ex)-.15 H(ample,).15 E F1(C\255u)2.729 E F0 .229 -(is bound to the function)2.729 F F2(uni)2.729 E -.1(ve)-.1 G -(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)2.729 E F0 .228 -(is bound to the function)2.729 F F2(backward\255kill\255w)108 316.8 Q -(ord)-.1 E F0 3.837(,a)C(nd)-3.837 E F1(C\255o)3.837 E F0 1.337 -(is bound to run the macro e)3.837 F 1.337 -(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 -328.8 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 -(into the line\).)2.5 E .056(In the second form,)108 345.6 R F2("k)2.556 -E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) -2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 -(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 -(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 -(denoting an entire k)108 357.6 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ -ay be speci\214ed by placing the sequence within double quotes.).15 F -(Some)6.284 E .386(GNU Emacs style k)108 369.6 R .686 -.15(ey e)-.1 H -.385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 -(xample, b)-.15 F .385(ut the symbolic character names)-.2 F -(are not recognized.)108 381.6 Q("\\C\255u": uni)144 405.6 Q -.15(ve) --.25 G(rsal\255ar).15 E(gument)-.18 E -("\\C\255x\\C\255r": re\255read\255init\255\214le)144 417.6 Q -("\\e[11~": "Function K)144 429.6 Q .3 -.15(ey 1)-.25 H(").15 E .237 -(In this e)108 446.4 R(xample,)-.15 E F1(C-u)2.737 E F0 .237(is ag)2.737 -F .238(ain bound to the function)-.05 F F2(uni)2.738 E -.1(ve)-.1 G -(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .238(C-x C-r)5.238 F F0 .238 -(is bound to the function)2.738 F F2 -.18(re)108 458.4 S<ad72>.18 E -(ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)2.5 E -F0(is bound to insert the te)2.5 E(xt)-.15 E F3(Function Key 1)2.5 E F0 -(.)A(The full set of GNU Emacs style escape sequences a)108 475.2 Q -.25 -(va)-.2 G(ilable when specifying k).25 E .3 -.15(ey s)-.1 H(equences is) -.15 E F2<5c43ad>144 487.2 Q F0(control pre\214x)20.3 E F2<5c4dad>144 -499.2 Q F0(meta pre\214x)18.08 E F2(\\e)144 511.2 Q F0 -(an escape character)28.78 E F2(\\\\)144 523.2 Q F0(backslash)30.44 E F2 -(\\")144 535.2 Q F0(literal ", a double quote)27.67 E F2(\\')144 547.2 Q -F0(literal ', a single quote)29.89 E(In addition to the GNU Emacs style\ - escape sequences, a second set of backslash escapes is a)108 564 Q -.25 -(va)-.2 G(ilable:).25 E F2(\\a)144 576 Q F0(alert \(bell\))28.22 E F2 -(\\b)144 588 Q F0(backspace)27.66 E F2(\\d)144 600 Q F0(delete)27.66 E -F2(\\f)144 612 Q F0(form feed)29.89 E F2(\\n)144 624 Q F0(ne)27.66 E -(wline)-.25 E F2(\\r)144 636 Q F0(carriage return)28.78 E F2(\\t)144 648 -Q F0(horizontal tab)29.89 E F2(\\v)144 660 Q F0 -.15(ve)28.22 G -(rtical tab).15 E F2(\\)144 672 Q F1(nnn)A F0 -(the eight-bit character whose v)18.22 E(alue is the octal v)-.25 E -(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 -684 Q F1(HH)A F0(the eight-bit character whose v)13.78 E(alue is the he) --.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0(\(one or tw)2.5 E -2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74(When entering the te) -108 700.8 R .74(xt of a macro, single or double quotes should be used t\ -o indicate a macro de\214nition.)-.15 F .089(Unquoted te)108 712.8 R -.089(xt is assumed to be a function name.)-.15 F .09(In the macro body) -5.089 F 2.59(,t)-.65 G .09(he backslash escapes described abo)-2.59 F --.15(ve)-.15 G(are e)108 724.8 Q 2.5(xpanded. Backslash)-.15 F -(will quote an)2.5 E 2.5(yo)-.15 G(ther character in the macro te)-2.5 E -(xt, including " and '.)-.15 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(2)195.95 E EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(Bash)108 84 Q F0(allo)2.93 E .43 -(ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429 -(indings to be displayed or modi\214ed with the).15 F F1(bind)2.929 E F0 --.2(bu)2.929 G .429(iltin command.).2 F 1.095 -(The editing mode may be switched during interacti)108 96 R 1.395 -.15 -(ve u)-.25 H 1.095(se by using the).15 F F1<ad6f>3.595 E F0 1.095 -(option to the)3.595 F F1(set)3.595 E F0 -.2(bu)3.595 G 1.095 -(iltin com-).2 F 3.097(mand. Other)108 108 R .597 -(programs using this library pro)3.097 F .597(vide similar mechanisms.) --.15 F(The)5.597 E/F2 10/Times-Italic@0 SF(inputr)3.097 E(c)-.37 E F0 -.596(\214le may be edited and)3.096 F(re-read if a program does not pro) -108 120 Q(vide an)-.15 E 2.5(yo)-.15 G(ther means to incorporate ne)-2.5 -E 2.5(wb)-.25 G(indings.)-2.5 E F1 -.92(Va)87 136.8 S(riables).92 E F0 -.043(Readline has v)108 148.8 R .044 -(ariables that can be used to further customize its beha)-.25 F(vior)-.2 -E 5.044(.A)-.55 G -.25(va)-2.5 G .044(riable may be set in the).25 F F2 -(inpu-)2.544 E(tr)108 160.8 Q(c)-.37 E F0 -(\214le with a statement of the form)2.5 E F1(set)144 177.6 Q F2 -(variable\255name value)2.5 E F0 .807(Except where noted, readline v)108 -194.4 R .807(ariables can tak)-.25 F 3.307(et)-.1 G .807(he v)-3.307 F -(alues)-.25 E F1(On)3.307 E F0(or)3.307 E F1(Off)3.307 E F0 .807 -(\(without re)3.307 F -.05(ga)-.15 G .807(rd to case\).).05 F .807 -(The v)5.807 F(ari-)-.25 E(ables and their def)108 206.4 Q(ault v)-.1 E -(alues are:)-.25 E F1(bell\255style \(audible\))108 223.2 Q F0 .01 -(Controls what happens when readline w)144 235.2 R .011 -(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) -2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E -.94(rings the bell.)144 247.2 R .94(If set to)5.94 F F1(visible)3.44 E -F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25 -(va)-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0 -(,)A(readline attempts to ring the terminal')144 259.2 Q 2.5(sb)-.55 G -(ell.)-2.5 E F1(comment\255begin \(`)108 271.2 Q(`#')-.63 E('\))-.63 E -F0 .062(The string that is inserted in)144 283.2 R F1(vi)2.562 E F0 .062 -(mode when the)2.562 F F1(insert\255comment)2.562 E F0 .062 -(command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562 -E(mand is bound to)144 295.2 Q F1(M\255#)2.5 E F0(in emacs mode and to) -2.5 E F1(#)2.5 E F0(in vi command mode.)2.5 E F1(completion\255ignor)108 -307.2 Q(e\255case \(Off\))-.18 E F0(If set to)144 319.2 Q F1(On)2.5 E F0 -2.5(,r)C(eadline performs \214lename matching and completion in a case\ -\255insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 -(completion\255query\255items \(100\))108 331.2 Q F0 .53 -(This determines when the user is queried about vie)144 343.2 R .529 -(wing the number of possible completions gen-)-.25 F .56(erated by the) -144 355.2 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F -.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) --.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 367.2 R -.783(If the number of possible completions is greater than or equal to \ -the v)5.783 F .782(alue of this)-.25 F -.25(va)144 379.2 S .237 -(riable, the user is ask).25 F .237(ed whether or not he wishes to vie) --.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G -.237(re simply listed)-2.737 F(on the terminal.)144 391.2 Q F1(con)108 -403.2 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to)144 415.2 -R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F -.15(ve)-.4 -G .613(rt characters with the eighth bit set to an ASCII k).15 F .912 --.15(ey s)-.1 H .612(equence by).15 F 1.315(stripping the eighth bit an\ -d pre\214xing it with an escape character \(in ef)144 427.2 R 1.316 -(fect, using escape as the)-.25 F F2(meta pr)144 439.2 Q(e\214x)-.37 E -F0(\).)A F1(disable\255completion \(Off\))108 451.2 Q F0 .038(If set to) -144 463.2 R F1(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w) --2.538 F .038(ord completion.)-.1 F .038 -(Completion characters will be inserted into the)5.038 F(line as if the) -144 475.2 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E -F0(.)A F1(editing\255mode \(emacs\))108 487.2 Q F0 .215 -(Controls whether readline be)144 499.2 R .215(gins with a set of k)-.15 -F .515 -.15(ey b)-.1 H .216(indings similar to emacs or vi.).15 F F1 -(editing\255mode)5.216 E F0(can be set to either)144 511.2 Q F1(emacs) -2.5 E F0(or)2.5 E F1(vi)2.5 E F0(.)A F1(enable\255k)108 523.2 Q -(eypad \(Off\))-.1 E F0 .893(When set to)144 535.2 R F1(On)3.393 E F0 -3.393(,r)C .893(eadline will try to enable the application k)-3.393 F --.15(ey)-.1 G .893(pad when it is called.).15 F .892(Some sys-)5.893 F -(tems need this to enable the arro)144 547.2 Q 2.5(wk)-.25 G -.15(ey) --2.6 G(s.).15 E F1(expand\255tilde \(Off\))108 559.2 Q F0(If set to)144 -571.2 Q F1(on)2.5 E F0 2.5(,t)C(ilde e)-2.5 E -(xpansion is performed when readline attempts w)-.15 E(ord completion.) --.1 E F1(history-pr)108 583.2 Q(eser)-.18 E -.1(ve)-.1 G(-point).1 E F0 -1.492(If set to)144 595.2 R F1(on)3.992 E F0 3.992(,t)C 1.493(he histor\ -y code attempts to place point at the same location on each history lin\ -e)-3.992 F(retri)144 607.2 Q -.15(ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1 -(pr)2.5 E -.15(ev)-.18 G(ious-history).15 E F0(or)2.5 E F1(next-history) -2.5 E F0(.)A F1(horizontal\255scr)108 619.2 Q(oll\255mode \(Off\))-.18 E -F0 .449(When set to)144 631.2 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E -.448(es readline use a single line for display)-.1 F 2.948(,s)-.65 G -.448(crolling the input horizontally on a)-2.948 F 1.194(single screen \ -line when it becomes longer than the screen width rather than wrapping \ -to a ne)144 643.2 R(w)-.25 E(line.)144 655.2 Q F1(input\255meta \(Off\)) -108 667.2 Q F0 .367(If set to)144 679.2 R F1(On)2.867 E F0 2.867(,r)C -.367(eadline will enable eight-bit input \(that is, it will not clear t\ -he eighth bit in the char)-2.867 F(-)-.2 E .956(acters it reads\), re) -144 691.2 R -.05(ga)-.15 G .956 -(rdless of what the terminal claims it can support.).05 F .957(The name) -5.956 F F1(meta\255\215ag)3.457 E F0 .957(is a)3.457 F(synon)144 703.2 Q -(ym for this v)-.15 E(ariable.)-.25 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(3)195.95 E EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(isear)108 84 Q(ch\255terminators \(`)-.18 E -(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439(The string of characters tha\ -t should terminate an incremental search without subsequently e)144 96 R --.15(xe)-.15 G(cut-).15 E .934(ing the character as a command.)144 108 R -.935(If this v)5.935 F .935(ariable has not been gi)-.25 F -.15(ve)-.25 -G 3.435(nav).15 G .935(alue, the characters)-3.685 F/F2 10 -/Times-Italic@0 SF(ESC)3.435 E F0(and)144 120 Q F2(C\255J)2.5 E F0 -(will terminate an incremental search.)2.5 E F1 -.1(ke)108 132 S -(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 144 R -.15 -(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05(ga)-.15 G -4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F2 2.323 -(emacs, emacs-standar)4.823 F(d,)-.37 E .808 -(emacs-meta, emacs-ctlx, vi, vi-mo)144 156 R(ve)-.1 E 3.308(,v)-.1 G -(i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.) -.68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .809(lent to) -.25 F F2(vi-command)3.309 E F0(;)A F2(emacs)144 168 Q F0 .697(is equi) -3.197 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d) --.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697 -(alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F -.697(alue of)-.25 F F1(editing\255mode)3.196 E F0(also af)144 180 Q -(fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F1 -(mark\255dir)108 192 Q(ectories \(On\))-.18 E F0(If set to)144 204 Q F1 -(On)2.5 E F0 2.5(,c)C(ompleted directory names ha)-2.5 E .3 -.15(ve a s) --.2 H(lash appended.).15 E F1(mark\255modi\214ed\255lines \(Off\))108 -216 Q F0(If set to)144 228 Q F1(On)2.5 E F0 2.5(,h)C -(istory lines that ha)-2.5 E .3 -.15(ve b)-.2 H -(een modi\214ed are displayed with a preceding asterisk \().15 E F1(*)A -F0(\).)A F1(mark\255symlink)108 240 Q(ed\255dir)-.1 E(ectories \(Off\)) --.18 E F0 .175(If set to)144 252 R F1(On)2.675 E F0 2.675(,c)C .175 -(ompleted names which are symbolic links to directories ha)-2.675 F .475 --.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 264 -Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1 -(match\255hidden\255\214les \(On\))108 276 Q F0 .193(This v)144 288 R -.193(ariable, when set to)-.25 F F1(On)2.693 E F0 2.693(,c)C .192 -(auses readline to match \214les whose names be)-2.693 F .192 -(gin with a `.)-.15 F 2.692('\()-.7 G(hidden)-2.692 E 1.023 -(\214les\) when performing \214lename completion, unless the leading `.) -144 300 R 3.523('i)-.7 G 3.523(ss)-3.523 G 1.024 -(upplied by the user in the)-3.523 F(\214lename to be completed.)144 312 -Q F1(output\255meta \(Off\))108 324 Q F0 .507(If set to)144 336 R F1(On) -3.007 E F0 3.007(,r)C .507(eadline will display characters with the eig\ -hth bit set directly rather than as a meta-)-3.007 F(pre\214x)144 348 Q -(ed escape sequence.)-.15 E F1(page\255completions \(On\))108 360 Q F0 -.808(If set to)144 372 R F1(On)3.308 E F0 3.308(,r)C .808 -(eadline uses an internal)-3.308 F F2(mor)3.308 E(e)-.37 E F0(-lik)A -3.308(ep)-.1 G .808(ager to display a screenful of possible comple-) --3.308 F(tions at a time.)144 384 Q F1 -(print\255completions\255horizontally \(Off\))108 396 Q F0 1.319 -(If set to)144 408 R F1(On)3.819 E F0 3.819(,r)C 1.318(eadline will dis\ -play completions with matches sorted horizontally in alphabetical)-3.819 -F(order)144 420 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25 -E F1(sho)108 432 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .477 -(This alters the def)144 444 R .477(ault beha)-.1 F .477 -(vior of the completion functions.)-.2 F .478(If set to)5.478 F F1(on) -2.978 E F0 2.978(,w)C .478(ords which ha)-3.078 F .778 -.15(ve m)-.2 H -(ore).15 E 1.264(than one possible completion cause the matches to be l\ -isted immediately instead of ringing the)144 456 R(bell.)144 468 Q F1 -(visible\255stats \(Off\))108 480 Q F0 .846(If set to)144 492 R F1(On) -3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 -(st)-.55 G .846(ype as reported by)-3.346 F F2(stat)3.346 E F0 .846 -(\(2\) is appended to the \214lename)B -(when listing possible completions.)144 504 Q F1(Conditional Constructs) -87 520.8 Q F0 .05(Readline implements a f)108 532.8 R .05(acility simil\ -ar in spirit to the conditional compilation features of the C preproces\ -sor)-.1 F .096(which allo)108 544.8 R .096(ws k)-.25 F .396 -.15(ey b) --.1 H .096(indings and v).15 F .096 -(ariable settings to be performed as the result of tests.)-.25 F .097 -(There are four parser)5.096 F(directi)108 556.8 Q -.15(ve)-.25 G 2.5 -(su).15 G(sed.)-2.5 E F1($if)108 573.6 Q F0(The)24.89 E F1($if)2.963 E -F0 .463(construct allo)2.963 F .462(ws bindings to be made based on the\ - editing mode, the terminal being used,)-.25 F .477 -(or the application using readline.)144 585.6 R .477(The te)5.477 F .477 -(xt of the test e)-.15 F .477 -(xtends to the end of the line; no characters)-.15 F -(are required to isolate it.)144 597.6 Q F1(mode)144 614.4 Q F0(The) -12.67 E F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0 -(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 -(sed to test whether readline is in emacs or vi)-3.711 F 3.065 -(mode. This)180 626.4 R .565(may be used in conjunction with the)3.065 F -F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) -3.065 F .03(set bindings in the)180 638.4 R F2(emacs-standar)2.529 E(d) --.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029 -(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 650.4 -Q F1(term)144 667.2 Q F0(The)15.46 E F1(term=)3.196 E F0 .696 -(form may be used to include terminal-speci\214c k)3.196 F .996 -.15 -(ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 679.2 R -.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 -(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 -(wo)3.154 G .654(rd on the right side of).1 F(the)180 691.2 Q F1(=)3.003 -E F0 .503(is tested ag)3.003 F .504(ainst the full name of the terminal\ - and the portion of the terminal name)-.05 F(before the \214rst)180 -703.2 Q F1<ad>2.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.5 E F0 -(to match both)2.5 E F2(sun)2.5 E F0(and)2.5 E F2(sun\255cmd)2.5 E F0 -2.5(,f).77 G(or instance.)-2.5 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(4)195.95 E EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(application)144 84 Q F0(The)180 96 Q F1(application) -3.003 E F0 .503 -(construct is used to include application-speci\214c settings.)3.003 F -.503(Each program)5.503 F .114(using the readline library sets the)180 -108 R/F2 10/Times-Italic@0 SF .114(application name)2.614 F F0 2.614(,a) -C .114(nd an initialization \214le can test for a)-2.614 F .501 -(particular v)180 120 R 3.001(alue. This)-.25 F .501 -(could be used to bind k)3.001 F .801 -.15(ey s)-.1 H .5 -(equences to functions useful for a spe-).15 F .396(ci\214c program.)180 -132 R -.15(Fo)5.396 G 2.896(ri).15 G .396(nstance, the follo)-2.896 F -.396(wing command adds a k)-.25 F .696 -.15(ey s)-.1 H .397 -(equence that quotes the).15 F(current or pre)180 144 Q(vious w)-.25 E -(ord in Bash:)-.1 E F1($if)180 168 Q F0(Bash)2.5 E 2.5(#Q)180 180 S -(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E -("\\C-xq": "\\eb\\"\\ef\\"")180 192 Q F1($endif)180 204 Q($endif)108 -220.8 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E -(xample, terminates an)-.15 E F1($if)2.5 E F0(command.)2.5 E F1($else) -108 237.6 Q F0(Commands in this branch of the)15.45 E F1($if)2.5 E F0 -(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G -(cuted if the test f).15 E(ails.)-.1 E F1($include)108 254.4 Q F0 .357 -(This directi)144 266.4 R .657 -.15(ve t)-.25 H(ak).15 E .357 -(es a single \214lename as an ar)-.1 F .356 -(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) -144 278.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 --.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A F1 -($include)144 302.4 Q F2(/etc/inputr)5.833 E(c)-.37 E/F3 10.95 -/Times-Bold@0 SF(SEARCHING)72 319.2 Q F0 1.003(Readline pro)108 331.2 R -1.003(vides commands for searching through the command history for line\ -s containing a speci\214ed)-.15 F 2.5(string. There)108 343.2 R(are tw) -2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.5 E(emental)-.37 E F0 -(and)2.5 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 E .698 -(Incremental searches be)108 360 R .698 -(gin before the user has \214nished typing the search string.)-.15 F -.697(As each character of the)5.697 F .112 -(search string is typed, readline displays the ne)108 372 R .112 -(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 -E 5.113(.A)-.55 G(n)-5.113 E .545 -(incremental search requires only as man)108 384 R 3.045(yc)-.15 G .544 -(haracters as needed to \214nd the desired history entry)-3.045 F 5.544 -(.T)-.65 G 3.044(os)-6.344 G(earch)-3.044 E(backw)108 396 Q .18 -(ard in the history for a particular string, type)-.1 F F1(C\255r)2.681 -E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.681 E F0 .181(searches forw) -2.681 F .181(ard through the history)-.1 F(.)-.65 E .354 -(The characters present in the v)108 408 R .354(alue of the)-.25 F F1 -(isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354 -(riable are used to terminate an incremen-).25 F .6(tal search.)108 420 -R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F .6 -(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6 -(characters will terminate an)3.1 F .123(incremental search.)108 432 R -F1(C\255G)5.123 E F0 .123 -(will abort an incremental search and restore the original line.)2.623 F -.122(When the search is)5.122 F(terminated, the history entry containin\ -g the search string becomes the current line.)108 444 Q 2.406 -.8 -(To \214)108 460.8 T .806 -(nd other matching entries in the history list, type).8 F F1(C\255s) -3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F -.807(This will search back-)5.806 F -.1(wa)108 472.8 S 1.309(rd or forw) -.1 F 1.309(ard in the history for the ne)-.1 F 1.309 -(xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A) --.55 G 1.609 -.15(ny o)-6.309 H 1.308(ther k).15 F -.15(ey)-.1 G .317 -(sequence bound to a readline command will terminate the search and e) -108 484.8 R -.15(xe)-.15 G .318(cute that command.).15 F -.15(Fo)5.318 G -2.818(ri).15 G(nstance,)-2.818 E 3.481(an)108 496.8 S -.25(ew)-3.481 G -.981(line will terminate the search and accept the line, thereby e).25 F --.15(xe)-.15 G .98(cuting the command from the history).15 F 3.061 -(list. A)108 508.8 R(mo)3.061 E -.15(ve)-.15 G .562 -(ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562 -(he last line found the current line, and be)-3.062 F(gin)-.15 E -(editing.)108 520.8 Q .567(Non-incremental searches read the entire sea\ -rch string before starting to search for matching history lines.)108 -537.6 R(The search string may be typed by the user or be part of the co\ -ntents of the current line.)108 549.6 Q F3(EDITING COMMANDS)72 566.4 Q -F0 1.391(The follo)108 578.4 R 1.391 -(wing is a list of the names of the commands and the def)-.25 F 1.391 -(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F -3.892(ya)-.15 G(re)-3.892 E 2.5(bound. Command)108 590.4 R -(names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H -(equence are unbound by def).15 E(ault.)-.1 E .055(In the follo)108 -607.2 R .055(wing descriptions,)-.25 F F2(point)2.555 E F0 .055 -(refers to the current cursor position, and)2.555 F F2(mark)2.555 E F0 -.054(refers to a cursor position)2.554 F(sa)108 619.2 Q -.15(ve)-.2 G -2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5 -(command. The)2.5 F(te)2.5 E -(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) -2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 636 Q(or Mo)-.25 E(ving)-.1 E -(beginning\255of\255line \(C\255a\))108 648 Q F0(Mo)144 660 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 -(end\255of\255line \(C\255e\))108 672 Q F0(Mo)144 684 Q .3 -.15(ve t) --.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 696 S -(rward\255char \(C\255f\)).25 E F0(Mo)144 708 Q .3 -.15(ve f)-.15 H(orw) -.15 E(ard a character)-.1 E(.)-.55 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(5)195.95 E EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(backward\255char \(C\255b\))108 84 Q F0(Mo)144 96 Q .3 --.15(ve b)-.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 108 S -(rward\255w).25 E(ord \(M\255f\))-.1 E F0(Mo)144 120 Q .822 -.15(ve f) --.15 H(orw).15 E .522(ard to the end of the ne)-.1 F .523(xt w)-.15 F -3.023(ord. W)-.1 F .523 -(ords are composed of alphanumeric characters \(let-)-.8 F -(ters and digits\).)144 132 Q F1(backward\255w)108 144 Q(ord \(M\255b\)) --.1 E F0(Mo)144 156 Q 1.71 -.15(ve b)-.15 H 1.41 -(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 -(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F -(characters \(letters and digits\).)144 168 Q F1(clear\255scr)108 180 Q -(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 192 R .993 -(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G -.993(th an ar).4 F .993(gument, refresh the)-.18 F -(current line without clearing the screen.)144 204 Q F1 -.18(re)108 216 -S(draw\255curr).18 E(ent\255line)-.18 E F0(Refresh the current line.)144 -228 Q F1(Commands f)87 244.8 Q(or Manipulating the History)-.25 E -(accept\255line \(Newline, Retur)108 256.8 Q(n\))-.15 E F0 .365 -(Accept the line re)144 268.8 R -.05(ga)-.15 G .364 -(rdless of where the cursor is.).05 F .364(If this line is non-empty) -5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .364(ay be added to the)-2.864 -F .74(history list for future recall with)144 280.8 R F1 -(add_history\(\))3.24 E F0 5.741(.I)C 3.241(ft)-5.741 G .741 -(he line is a modi\214ed history line, the history)-3.241 F -(line is restored to its original state.)144 292.8 Q F1(pr)108 304.8 Q --.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0(Fetch the pre)144 -316.8 Q(vious command from the history list, mo)-.25 E -(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 328.8 Q -F0(Fetch the ne)144 340.8 Q(xt command from the history list, mo)-.15 E -(ving forw)-.15 E(ard in the list.)-.1 E F1 -(beginning\255of\255history \(M\255<\))108 352.8 Q F0(Mo)144 364.8 Q .3 --.15(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.) --.65 E F1(end\255of\255history \(M\255>\))108 376.8 Q F0(Mo)144 388.8 Q -.3 -.15(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5 -(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18 -(re v)108 400.8 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 -1.471(Search backw)144 412.8 R 1.471 -(ard starting at the current line and mo)-.1 F 1.47 -(ving `up' through the history as necessary)-.15 F(.)-.65 E -(This is an incremental search.)144 424.8 Q F1 -.25(fo)108 436.8 S -(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131 -(Search forw)144 448.8 R 1.131(ard starting at the current line and mo) --.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary) --.25 F(.)-.65 E(This is an incremental search.)144 460.8 Q F1 -(non\255incr)108 472.8 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H -(rse\255sear).15 E(ch\255history \(M\255p\))-.18 E F0 .165(Search backw) -144 484.8 R .164(ard through the history starting at the current line u\ -sing a non-incremental search for)-.1 F 2.5(as)144 496.8 S -(tring supplied by the user)-2.5 E(.)-.55 E F1(non\255incr)108 508.8 Q -(emental\255f)-.18 E(orward\255sear)-.25 E(ch\255history \(M\255n\))-.18 -E F0 1.353(Search forw)144 520.8 R 1.354(ard through the history using \ -a non-incremental search for a string supplied by the)-.1 F(user)144 -532.8 Q(.)-.55 E F1(history\255sear)108 544.8 Q(ch\255f)-.18 E(orward) --.25 E F0 .249(Search forw)144 556.8 R .249(ard through the history for\ - the string of characters between the start of the current line)-.1 F -(and the current cursor position \(the)144 568.8 Q/F2 10/Times-Italic@0 -SF(point)2.5 E F0 2.5(\). This)B(is a non-incremental search.)2.5 E F1 -(history\255sear)108 580.8 Q(ch\255backward)-.18 E F0 .95(Search backw) -144 592.8 R .951(ard through the history for the string of characters b\ -etween the start of the current)-.1 F(line and the point.)144 604.8 Q -(This is a non-incremental search.)5 E F1(yank\255nth\255ar)108 616.8 Q -2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 -628.8 R .622(gument to the pre)-.18 F .622 -(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F -.622(vious line\))-.25 F .794(at point.)144 640.8 R -.4(Wi)5.794 G .794 -(th an ar).4 F(gument)-.18 E F2(n)3.294 E F0 3.294(,i).24 G .794 -(nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794(ord from the pre) --.1 F .794(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144 -652.8 Q .292(vious command be)-.25 F .292(gin with w)-.15 F .291 -(ord 0\).)-.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 --.15(ve a)-.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E -F0 .291(th w)B .291(ord from the end of)-.1 F(the pre)144 664.8 Q -(vious command.)-.25 E F1(yank\255last\255ar)108 676.8 Q 2.5(g\()-.1 G --1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.307 -(Insert the last ar)144 688.8 R 1.307(gument to the pre)-.18 F 1.307 -(vious command \(the last w)-.25 F 1.308(ord of the pre)-.1 F 1.308 -(vious history entry\).)-.25 F -.4(Wi)144 700.8 S .736(th an ar).4 F -.736(gument, beha)-.18 F 1.036 -.15(ve ex)-.2 H .736(actly lik).15 F(e) --.1 E F1(yank\255nth\255ar)3.235 E(g)-.1 E F0 5.735(.S)C(uccessi)-5.735 -E 1.035 -.15(ve c)-.25 H .735(alls to).15 F F1(yank\255last\255ar)3.235 -E(g)-.1 E F0(mo)3.235 E -.15(ve)-.15 G -(back through the history list, inserting the last ar)144 712.8 Q -(gument of each line in turn.)-.18 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(6)195.95 E EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(Commands f)87 84 Q(or Changing T)-.25 E(ext)-.92 E -(delete\255char \(C\255d\))108 96 Q F0 .357 -(Delete the character at point.)144 108 R .358(If point is at the be) -5.358 F .358(ginning of the line, there are no characters in the)-.15 F -(line, and the last character typed w)144 120 Q(as not bound to)-.1 E F1 -(delete\255char)2.5 E F0 2.5(,t)C(hen return)-2.5 E/F2 9/Times-Bold@0 SF -(EOF)2.5 E/F3 9/Times-Roman@0 SF(.)A F1 -(backward\255delete\255char \(Rubout\))108 132 Q F0 .553 -(Delete the character behind the cursor)144 144 R 5.553(.W)-.55 G .553 -(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F -.552(gument, sa)-.18 F .852 -.15(ve t)-.2 H .552(he deleted te).15 F -.552(xt on)-.15 F(the kill ring.)144 156 Q F1 -.25(fo)108 168 S -(rward\255backward\255delete\255char).25 E F0 .473 -(Delete the character under the cursor)144 180 R 2.973(,u)-.4 G .474 -(nless the cursor is at the end of the line, in which case the)-2.973 F -(character behind the cursor is deleted.)144 192 Q F1 -(quoted\255insert \(C\255q, C\255v\))108 204 Q F0 1.229(Add the ne)144 -216 R 1.228(xt character that you type to the line v)-.15 F 3.728 -(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.728(wt)-.25 G 3.728(oi) --3.728 G 1.228(nsert characters lik)-3.728 F(e)-.1 E F1(C\255q)144 228 Q -F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 240 Q -(AB\))-.9 E F0(Insert a tab character)144 252 Q(.)-.55 E F1 -(self\255insert \(a, b, A, 1, !, ...\))108 264 Q F0 -(Insert the character typed.)144 276 Q F1(transpose\255chars \(C\255t\)) -108 288 Q F0 .321(Drag the character before point forw)144 300 R .321 -(ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321 -(he character at point, mo)-2.821 F .322(ving point forw)-.15 F .322 -(ard as well.)-.1 F 1.182 -(If point is at the end of the line, then this transposes the tw)144 312 -R 3.682(oc)-.1 G 1.182(haracters before point.)-3.682 F(Ne)6.182 E -.05 -(ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 324 Q(guments ha)-.18 E .3 --.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F1 -(transpose\255w)108 336 Q(ords \(M\255t\))-.1 E F0 .023(Drag the w)144 -348 R .023(ord before point past the w)-.1 F .023(ord after point, mo) --.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.524(rt).15 G .024(hat w) --2.524 F .024(ord as well.)-.1 F .024(If point)5.024 F -(is at the end of the line, this transposes the last tw)144 360 Q 2.5 -(ow)-.1 G(ords on the line.)-2.6 E F1(upcase\255w)108 372 Q -(ord \(M\255u\))-.1 E F0 1.699(Uppercase the current \(or follo)144 384 -R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) --.15 G(ti).05 E 1.998 -.15(ve a)-.25 H -.18(rg).15 G 1.698 -(ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 396 S(rd, b).1 E -(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(do)108 408 Q -(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 420 Q 1.647 -(wercase the current \(or follo)-.25 F 1.647(wing\) w)-.25 F 4.147 -(ord. W)-.1 F 1.648(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.948 -.15 -(ve a)-.25 H -.18(rg).15 G 1.648(ument, lo).18 F 1.648(wercase the pre) --.25 F(vious)-.25 E -.1(wo)144 432 S(rd, b).1 E(ut do not mo)-.2 E .3 --.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w)108 444 Q -(ord \(M\255c\))-.1 E F0 1.975(Capitalize the current \(or follo)144 456 -R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) --.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.974 -(ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 468 S(rd, b).1 -E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1 -.1(ove)108 480 -S(rwrite\255mode).1 E F0 -.8(To)144 492 S .437(ggle o).8 F -.15(ve)-.15 -G .437(rwrite mode.).15 F -.4(Wi)5.437 G .437(th an e).4 F .437 -(xplicit positi)-.15 F .738 -.15(ve n)-.25 H .438(umeric ar).15 F .438 -(gument, switches to o)-.18 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4 -(Wi)144 504 S .781(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 --.15(ve n)-.25 H .781(umeric ar).15 F .781 -(gument, switches to insert mode.)-.18 F .78(This command af)5.781 F -(fects)-.25 E(only)144 516 Q F1(emacs)4.394 E F0(mode;)4.394 E F1(vi) -4.394 E F0 1.894(mode does o)4.394 F -.15(ve)-.15 G 1.894(rwrite dif).15 -F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F4 10 -/Times-Italic@0 SF -.37(re)4.395 G(adline\(\)).37 E F0 1.895 -(starts in insert)4.395 F 3.969(mode. In)144 528 R -.15(ove)3.969 G -1.469(rwrite mode, characters bound to).15 F F1(self\255insert)3.969 E -F0 1.468(replace the te)3.969 F 1.468(xt at point rather than)-.15 F -.957(pushing the te)144 540 R .957(xt to the right.)-.15 F .958 -(Characters bound to)5.957 F F1(backward\255delete\255char)3.458 E F0 -.958(replace the character)3.458 F(before point with a space.)144 552 Q -(By def)5 E(ault, this command is unbound.)-.1 E F1(Killing and Y)87 -568.8 Q(anking)-.85 E(kill\255line \(C\255k\))108 580.8 Q F0 -(Kill the te)144 592.8 Q(xt from point to the end of the line.)-.15 E F1 -(backward\255kill\255line \(C\255x Rubout\))108 604.8 Q F0(Kill backw) -144 616.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 -(unix\255line\255discard \(C\255u\))108 628.8 Q F0(Kill backw)144 640.8 -Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E -(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) --2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 652.8 Q F0 -(Kill all characters on the current line, no matter where point is.)144 -664.8 Q F1(kill\255w)108 676.8 Q(ord \(M\255d\))-.1 E F0 1.308 -(Kill from point the end of the current w)144 688.8 R 1.308 -(ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.307 -(xt w)-.15 F(ord.)-.1 E -.8(Wo)144 700.8 S -(rd boundaries are the same as those used by).8 E F1 -.25(fo)2.5 G -(rward\255w).25 E(ord)-.1 E F0(.)A(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(7)195.95 E EP -%%Page: 8 8 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(backward\255kill\255w)108 84 Q(ord \(M\255Rubout\))-.1 -E F0(Kill the w)144 96 Q(ord behind point.)-.1 E -.8(Wo)5 G -(rd boundaries are the same as those used by).8 E F1(backward\255w)2.5 E -(ord)-.1 E F0(.)A F1(unix\255w)108 108 Q(ord\255rubout \(C\255w\))-.1 E -F0 .364(Kill the w)144 120 R .364 -(ord behind point, using white space as a w)-.1 F .365(ord boundary)-.1 -F 5.365(.T)-.65 G .365(he killed te)-5.365 F .365(xt is sa)-.15 F -.15 -(ve)-.2 G 2.865(do).15 G 2.865(nt)-2.865 G(he)-2.865 E(kill-ring.)144 -132 Q F1(delete\255horizontal\255space \(M\255\\\))108 144 Q F0 -(Delete all spaces and tabs around point.)144 156 Q F1(kill\255r)108 168 -Q(egion)-.18 E F0 1.13(Kill the te)144 180 R 1.13 -(xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0 -(\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F -1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144 -192 S(gion)-.03 E F0(.)A F1(copy\255r)108 204 Q(egion\255as\255kill)-.18 -E F0(Cop)144 216 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E -(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 -(copy\255backward\255w)108 228 Q(ord)-.1 E F0(Cop)144 240 Q 4.8(yt)-.1 G -2.3(he w)-4.8 F 2.3(ord before point to the kill b)-.1 F(uf)-.2 E(fer) --.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.301 -(ord boundaries are the same as)-.1 F F1(back-)4.801 E(ward\255w)144 252 -Q(ord)-.1 E F0(.)A F1(copy\255f)108 264 Q(orward\255w)-.25 E(ord)-.1 E -F0(Cop)144 276 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1 -F 2.008(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.007(.T) --.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F1 --.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 288 Q(ord)-.1 E F0(.)A F1 -(yank \(C\255y\))108 300 Q F0 -1(Ya)144 312 S -(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 -E F1(yank\255pop \(M\255y\))108 324 Q F0 -(Rotate the kill ring, and yank the ne)144 336 Q 2.5(wt)-.25 G 2.5 -(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E -F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 352.8 Q -(guments)-.1 E(digit\255ar)108 364.8 Q -(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .641 -(Add this digit to the ar)144 376.8 R .641 -(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18 -(rg)-3.141 G 3.142(ument. M\255\255).18 F .642(starts a ne)3.142 F(g-) --.15 E(ati)144 388.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1 -(uni)108 400.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .779 -(This is another w)144 412.8 R .779(ay to specify an ar)-.1 F 3.279 -(gument. If)-.18 F .779(this command is follo)3.279 F .778 -(wed by one or more digits,)-.25 F 1.376 -(optionally with a leading minus sign, those digits de\214ne the ar)144 -424.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 -436.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) -3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 -(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) --.2 F(-)-.2 E .898(wise ignored.)144 448.8 R .898 -(As a special case, if this command is immediately follo)5.898 F .898 -(wed by a character that is)-.25 F .243 -(neither a digit or minus sign, the ar)144 460.8 R .243 -(gument count for the ne)-.18 F .243(xt command is multiplied by four) --.15 F 5.242(.T)-.55 G(he)-5.242 E(ar)144 472.8 Q .378 -(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 -(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F -.378(gument count)-.18 F(four)144 484.8 Q 2.5(,as)-.4 G(econd time mak) --2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 -(Completing)87 501.6 Q(complete \(T)108 513.6 Q(AB\))-.9 E F0 1.909 -(Attempt to perform completion on the te)144 525.6 R 1.908 -(xt before point.)-.15 F 1.908(The actual completion performed is)6.908 -F(application-speci\214c.)144 537.6 Q F1(Bash)5.517 E F0 3.017(,f)C .518 -(or instance, attempts completion treating the te)-3.017 F .518 -(xt as a v)-.15 F .518(ariable \(if the)-.25 F(te)144 549.6 Q .657 -(xt be)-.15 F .657(gins with)-.15 F F1($)3.156 E F0 .656 -(\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1 -(~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656 -(gins with)-.15 F F1(@)3.156 E F0 .656(\), or)B .929 -(command \(including aliases and functions\) in turn.)144 561.6 R .93 -(If none of these produces a match, \214lename)5.929 F 1.274 -(completion is attempted.)144 573.6 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773 -(nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273 -(ws completion of program functions and)-.25 F -.25(va)144 585.6 S(riab\ -les, and only attempts \214lename completion under certain circumstance\ -s.).25 E F1(possible\255completions \(M\255?\))108 597.6 Q F0 -(List the possible completions of the te)144 609.6 Q(xt before point.) --.15 E F1(insert\255completions \(M\255*\))108 621.6 Q F0 .783 -(Insert all completions of the te)144 633.6 R .783 -(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H -.783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144 -645.6 Q F0(.)A F1(menu\255complete)108 657.6 Q F0 .929(Similar to)144 -669.6 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629 -F .929(ord to be completed with a single match from the list of)-.1 F -1.193(possible completions.)144 681.6 R 1.193(Repeated e)6.193 F -.15 -(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194 -(steps through the list of possible)3.694 F .829 -(completions, inserting each match in turn.)144 693.6 R .828 -(At the end of the list of completions, the bell is rung)5.828 F .965 -(\(subject to the setting of)144 705.6 R F1 .965 -(0and the original text is r)3.465 F(estor)-.18 E 3.465(ed. An)-.18 F -(ar)3.465 E .966(gument of)-.1 F F2(n)3.466 E F1(mo)3.466 E -.1(ve)-.1 G -(s).1 E F2(n)3.466 E F1(posi-)3.466 E 1.249(tions f)144 717.6 R 1.249 -(orward in the list of matches; a negati)-.25 F 1.449 -.1(ve a)-.1 H -.1 -(rg).1 G 1.248(ument may be used to mo).1 F 1.448 -.1(ve b)-.1 H -(ackward).1 E(thr)144 729.6 Q(ough the list.)-.18 E -(This command is intended to be bound to T)5 E(AB, b)-.9 E -(ut is unbound by default.)-.2 E F0(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(8)195.95 E EP -%%Page: 9 9 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(delete\255char\255or\255list)108 84 Q F0 .373 -(Deletes the character under the cursor if not at the be)144 96 R .374 -(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char)2.874 E -F0(\).)A(If at the end of the line, beha)144 108 Q -.15(ve)-.2 G 2.5(si) -.15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A F1 -.25 -(Ke)87 124.8 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)108 -136.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 148.8 Q -(gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15 -(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 160.8 Q 2.5(o\() --.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 172.8 Q -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro and store the de\214nition.).15 E F1 -(call\255last\255kbd\255macr)108 184.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 -E F0(Re-e)144 196.8 Q -.15(xe)-.15 G 1(cute the last k).15 F -.15(ey)-.1 -G .999(board macro de\214ned, by making the characters in the macro app\ -ear as if).15 F(typed at the k)144 208.8 Q -.15(ey)-.1 G(board.).15 E F1 -(Miscellaneous)87 225.6 Q -.18(re)108 237.6 S<ad72>.18 E -(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776 -(Read in the contents of the)144 249.6 R/F2 10/Times-Italic@0 SF(inputr) -4.276 E(c)-.37 E F0 1.777(\214le, and incorporate an)4.276 F 4.277(yb) --.15 G 1.777(indings or v)-4.277 F 1.777(ariable assignments)-.25 F -(found there.)144 261.6 Q F1(abort \(C\255g\))108 273.6 Q F0 3.249 -(Abort the current editing command and ring the terminal')144 285.6 R -5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1 -(bell\255style)144 297.6 Q F0(\).)A F1(do\255upper)108 309.6 Q -(case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.) -C(..\))-2.5 E F0 1.755(If the meta\214ed character)144 321.6 R F2(x) -4.255 E F0 1.755(is lo)4.255 F 1.756 -(wercase, run the command that is bound to the corresponding)-.25 F -(uppercase character)144 333.6 Q(.)-.55 E F1(pr)108 345.6 Q -(e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 357.6 Q -(xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0 -(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1 -(undo \(C\255_, C\255x C\255u\))108 369.6 Q F0 -(Incremental undo, separately remembered for each line.)144 381.6 Q F1 --2.29 -.18(re v)108 393.6 T(ert\255line \(M\255r\)).08 E F0 1.095 -(Undo all changes made to this line.)144 405.6 R 1.095(This is lik)6.095 -F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E -F0 1.095(command enough times to)3.595 F -(return the line to its initial state.)144 417.6 Q F1 -(tilde\255expand \(M\255&\))108 429.6 Q F0(Perform tilde e)144 441.6 Q -(xpansion on the current w)-.15 E(ord.)-.1 E F1 -(set\255mark \(C\255@, M\255<space>\))108 453.6 Q F0 -(Set the mark to the point.)144 465.6 Q(If a numeric ar)5 E -(gument is supplied, the mark is set to that position.)-.18 E F1 -(exchange\255point\255and\255mark \(C\255x C\255x\))108 477.6 Q F0(Sw) -144 489.6 Q .282(ap the point with the mark.)-.1 F .283 -(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G -2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) -144 501.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 -(character\255sear)108 513.6 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 -525.6 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G -3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 -(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 -(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) -144 537.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 549.6 Q -(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 561.6 S 1.043 -(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G -3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 -(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E --.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G -(count searches for subsequent occurrences.)144 573.6 Q F1 -(insert\255comment \(M\255#\))108 585.6 Q F0 -.4(Wi)144 597.6 S .481 -(thout a numeric ar).4 F .481(gument, the v)-.18 F .481 -(alue of the readline)-.25 F F1(comment\255begin)2.981 E F0 -.25(va) -2.981 G .48(riable is inserted at the).25 F(be)144 609.6 Q .097 -(ginning of the current line.)-.15 F .098(If a numeric ar)5.097 F .098 -(gument is supplied, this command acts as a toggle:)-.18 F(if)5.098 E -.322(the characters at the be)144 621.6 R .321 -(ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 -(comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is) --.25 F 1.013(inserted, otherwise the characters in)144 633.6 R F1 -(comment-begin)3.514 E F0 1.014(are deleted from the be)3.514 F 1.014 -(ginning of the line.)-.15 F 1.469 -(In either case, the line is accepted as if a ne)144 645.6 R 1.468 -(wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F -1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 657.6 Q F0(mak) -2.982 E .483(es the current line a shell comment.)-.1 F .483 -(If a numeric ar)5.483 F .483(gument causes the comment)-.18 F -(character to be remo)144 669.6 Q -.15(ve)-.15 G(d, the line will be e) -.15 E -.15(xe)-.15 G(cuted by the shell.).15 E F1(dump\255functions)108 -681.6 Q F0 .627(Print all of the functions and their k)144 693.6 R .927 --.15(ey b)-.1 H .626(indings to the readline output stream.).15 F .626 -(If a numeric ar)5.626 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 705.6 Q -(ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0 -(\214le.)2.5 E(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(9) -195.95 E EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(dump\255v)108 84 Q(ariables)-.1 E F0 .283 -(Print all of the settable v)144 96 R .283(ariables and their v)-.25 F -.283(alues to the readline output stream.)-.25 F .283(If a numeric ar) -5.283 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 108 Q -(ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) -2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255macr)108 120 Q(os)-.18 E F0 -.756(Print all of the readline k)144 132 R 1.056 -.15(ey s)-.1 H .756 -(equences bound to macros and the strings the).15 F 3.256(yo)-.15 G -3.256(uput. If)-3.256 F 3.255(an)3.255 G(umeric)-3.255 E(ar)144 144 Q -.528(gument is supplied, the output is formatted in such a w)-.18 F .528 -(ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0 -(\214le.)144 156 Q F1(emacs\255editing\255mode \(C\255e\))108 168 Q F0 -(When in)144 180 Q F1(vi)2.5 E F0(command mode, this causes a switch to) -2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1 -(vi\255editing\255mode \(M\255C\255j\))108 192 Q F0(When in)144 204 Q F1 -(emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E -F0(editing mode.)2.5 E/F3 10.95/Times-Bold@0 SF(DEF)72 220.8 Q -.548(AU) --.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .065(The follo) -108 232.8 R .065(wing is a list of the def)-.25 F .065 -(ault emacs and vi bindings.)-.1 F .064 -(Characters with the eighth bit set are written as)5.064 F .615 -(M\255<character>, and are referred to as)108 244.8 R F2(meta\214ed) -3.115 E F0 3.115(characters. The)3.115 F .616 -(printable ASCII characters not mentioned)3.116 F 1.116 -(in the list of emacs standard bindings are bound to the)108 256.8 R F1 -(self\255insert)3.615 E F0 1.115(function, which just inserts the gi) -3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108 -268.8 R .945(In vi insertion mode, all characters not speci\214cally me\ -ntioned are bound to)5.945 F F1(self\255insert)108 280.8 Q F0 5.359(.C)C -.359(haracters assigned to signal generation by)-5.359 F F2(stty)2.859 E -F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s) -.15 H .358(uch as C-Z or C-C,).4 F .187(retain that function.)108 292.8 -R .187(Upper and lo)5.187 F .188(wer case meta\214ed characters are bou\ -nd to the same function in the emacs)-.25 F .305(mode meta k)108 304.8 R --.15(ey)-.1 G 2.805(map. The).15 F .305(remaining characters are unboun\ -d, which causes readline to ring the bell \(subject)2.805 F -(to the setting of the)108 316.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5 -G(riable\).).25 E F1(Emacs Mode)87 333.6 Q F0(Emacs Standard bindings) -151.2 345.6 Q 2.5("C-@" set-mark)151.2 369.6 R 2.5("C-A" be)151.2 381.6 -R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 393.6 R(ard-char)-.1 E -2.5("C-D" delete-char)151.2 405.6 R 2.5("C-E" end-of-line)151.2 417.6 R -2.5("C-F" forw)151.2 429.6 R(ard-char)-.1 E 2.5("C-G" abort)151.2 441.6 -R 2.5("C-H" backw)151.2 453.6 R(ard-delete-char)-.1 E 2.5 -("C-I" complete)151.2 465.6 R 2.5("C-J" accept-line)151.2 477.6 R 2.5 -("C-K" kill-line)151.2 489.6 R 2.5("C-L" clear)151.2 501.6 R(-screen)-.2 -E 2.5("C-M" accept-line)151.2 513.6 R 2.5("C-N" ne)151.2 525.6 R -(xt-history)-.15 E 2.5("C-P" pre)151.2 537.6 R(vious-history)-.25 E 2.5 -("C-Q" quoted-insert)151.2 549.6 R 2.5("C-R" re)151.2 561.6 R -.15(ve) --.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 573.6 R -(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 585.6 R 2.5 -("C-U" unix-line-discard)151.2 597.6 R 2.5("C-V" quoted-insert)151.2 -609.6 R 2.5("C-W" unix-w)151.2 621.6 R(ord-rubout)-.1 E 2.5("C-Y" yank) -151.2 633.6 R 2.5("C-]" character)151.2 645.6 R(-search)-.2 E 2.5 -("C-_" undo)151.2 657.6 R 3.333("")151.2 669.6 S(to "/")-.833 E -(self-insert)5 E 2.5("0" to)151.2 681.6 R 2.5("9" self-insert)2.5 F 2.5 -(":" to)151.2 693.6 R 2.5("~" self-insert)2.5 F 2.5("C-?" backw)151.2 -705.6 R(ard-delete-char)-.1 E(Emacs Meta bindings)151.2 722.4 Q -(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(10)190.95 E EP -%%Page: 11 11 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("M-C-G" abort)151.2 84 R 2.5("M-C-H" backw)151.2 96 R(ard-kill-w)-.1 E -(ord)-.1 E 2.5("M-C-I" tab-insert)151.2 108 R 2.5 -("M-C-J" vi-editing-mode)151.2 120 R 2.5("M-C-M" vi-editing-mode)151.2 -132 R 2.5("M-C-R" re)151.2 144 R -.15(ve)-.25 G(rt-line).15 E 2.5 -("M-C-Y" yank-nth-ar)151.2 156 R(g)-.18 E 2.5("M-C-[" complete)151.2 168 -R 2.5("M-C-]" character)151.2 180 R(-search-backw)-.2 E(ard)-.1 E 2.5 -("M-space" set-mark)151.2 192 R 2.5("M-#" insert-comment)151.2 204 R 2.5 -("M-&" tilde-e)151.2 216 R(xpand)-.15 E 2.5("M-*" insert-completions) -151.2 228 R 2.5("M--" digit-ar)151.2 240 R(gument)-.18 E 2.5 -("M-." yank-last-ar)151.2 252 R(g)-.18 E 2.5("M-0" digit-ar)151.2 264 R -(gument)-.18 E 2.5("M-1" digit-ar)151.2 276 R(gument)-.18 E 2.5 -("M-2" digit-ar)151.2 288 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 300 R -(gument)-.18 E 2.5("M-4" digit-ar)151.2 312 R(gument)-.18 E 2.5 -("M-5" digit-ar)151.2 324 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 336 R -(gument)-.18 E 2.5("M-7" digit-ar)151.2 348 R(gument)-.18 E 2.5 -("M-8" digit-ar)151.2 360 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 372 R -(gument)-.18 E 2.5("M-<" be)151.2 384 R(ginning-of-history)-.15 E 2.5 -("M-=" possible-completions)151.2 396 R 2.5("M->" end-of-history)151.2 -408 R 2.5("M-?" possible-completions)151.2 420 R 2.5("M-B" backw)151.2 -432 R(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 444 R(ord)-.1 E -2.5("M-D" kill-w)151.2 456 R(ord)-.1 E 2.5("M-F" forw)151.2 468 R(ard-w) --.1 E(ord)-.1 E 2.5("M-L" do)151.2 480 R(wncase-w)-.25 E(ord)-.1 E 2.5 -("M-N" non-incremental-forw)151.2 492 R(ard-search-history)-.1 E 2.5 -("M-P" non-incremental-re)151.2 504 R -.15(ve)-.25 G(rse-search-history) -.15 E 2.5("M-R" re)151.2 516 R -.15(ve)-.25 G(rt-line).15 E 2.5 -("M-T" transpose-w)151.2 528 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 540 R -(ord)-.1 E 2.5("M-Y" yank-pop)151.2 552 R 2.5 -("M-\\" delete-horizontal-space)151.2 564 R 2.5("M-~" tilde-e)151.2 576 -R(xpand)-.15 E 2.5("M-C-?" backw)151.2 588 R(ard-kill-w)-.1 E(ord)-.1 E -2.5("M-_" yank-last-ar)151.2 600 R(g)-.18 E(Emacs Control-X bindings) -151.2 616.8 Q 2.5("C-XC-G" abort)151.2 640.8 R 2.5 -("C-XC-R" re-read-init-\214le)151.2 652.8 R 2.5("C-XC-U" undo)151.2 -664.8 R 2.5("C-XC-X" e)151.2 676.8 R(xchange-point-and-mark)-.15 E 2.5 -("C-X\(" start-kbd-macro)151.2 688.8 R 2.5("C-X\)" end-kbd-macro)151.2 -700.8 R 2.5("C-XE" call-last-kbd-macro)151.2 712.8 R 2.5("C-XC-?" backw) -151.2 724.8 R(ard-kill-line)-.1 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(11)190.95 E EP -%%Page: 12 12 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(VI Mode bindings)87 84 Q F0(VI Insert Mode functions) -151.2 96 Q 2.5("C-D" vi-eof-maybe)151.2 120 R 2.5("C-H" backw)151.2 132 -R(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 144 R 2.5 -("C-J" accept-line)151.2 156 R 2.5("C-M" accept-line)151.2 168 R 2.5 -("C-R" re)151.2 180 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 -("C-S" forw)151.2 192 R(ard-search-history)-.1 E 2.5 -("C-T" transpose-chars)151.2 204 R 2.5("C-U" unix-line-discard)151.2 216 -R 2.5("C-V" quoted-insert)151.2 228 R 2.5("C-W" unix-w)151.2 240 R -(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 252 R 2.5("C-[" vi-mo)151.2 264 R --.15(ve)-.15 G(ment-mode).15 E 2.5("C-_" undo)151.2 276 R 3.333("")151.2 -288 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw)151.2 300 R -(ard-delete-char)-.1 E(VI Command Mode functions)151.2 316.8 Q 2.5 -("C-D" vi-eof-maybe)151.2 340.8 R 2.5("C-E" emacs-editing-mode)151.2 -352.8 R 2.5("C-G" abort)151.2 364.8 R 2.5("C-H" backw)151.2 376.8 R -(ard-char)-.1 E 2.5("C-J" accept-line)151.2 388.8 R 2.5("C-K" kill-line) -151.2 400.8 R 2.5("C-L" clear)151.2 412.8 R(-screen)-.2 E 2.5 -("C-M" accept-line)151.2 424.8 R 2.5("C-N" ne)151.2 436.8 R(xt-history) --.15 E 2.5("C-P" pre)151.2 448.8 R(vious-history)-.25 E 2.5 -("C-Q" quoted-insert)151.2 460.8 R 2.5("C-R" re)151.2 472.8 R -.15(ve) --.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 484.8 R -(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 496.8 R 2.5 -("C-U" unix-line-discard)151.2 508.8 R 2.5("C-V" quoted-insert)151.2 -520.8 R 2.5("C-W" unix-w)151.2 532.8 R(ord-rubout)-.1 E 2.5("C-Y" yank) -151.2 544.8 R 2.5("C-_" vi-undo)151.2 556.8 R -4.166 3.333("" f)151.2 -568.8 T(orw)-3.333 E(ard-char)-.1 E 2.5("#" insert-comment)151.2 580.8 R -2.5("$" end-of-line)151.2 592.8 R 2.5("%" vi-match)151.2 604.8 R 2.5 -("&" vi-tilde-e)151.2 616.8 R(xpand)-.15 E 2.5("*" vi-complete)151.2 -628.8 R 2.5("+" ne)151.2 640.8 R(xt-history)-.15 E 2.5("," vi-char)151.2 -652.8 R(-search)-.2 E 2.5("-" pre)151.2 664.8 R(vious-history)-.25 E 2.5 -("." vi-redo)151.2 676.8 R 2.5("/" vi-search)151.2 688.8 R 2.5("0" be) -151.2 700.8 R(ginning-of-line)-.15 E("1" to "9")151.2 712.8 Q(vi-ar)5 E -(g-digit)-.18 E 2.5(";" vi-char)151.2 724.8 R(-search)-.2 E -(GNU Readline 4.3)72 768 Q(2002 January 22)126.24 E(12)190.95 E EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("=" vi-complete)151.2 84 R 2.5("?" vi-search)151.2 96 R 2.5 -("A" vi-append-eol)151.2 108 R 2.5("B" vi-pre)151.2 120 R(v-w)-.25 E -(ord)-.1 E 2.5("C" vi-change-to)151.2 132 R 2.5("D" vi-delete-to)151.2 -144 R 2.5("E" vi-end-w)151.2 156 R(ord)-.1 E 2.5("F" vi-char)151.2 168 R -(-search)-.2 E 2.5("G" vi-fetch-history)151.2 180 R 2.5 -("I" vi-insert-be)151.2 192 R(g)-.15 E 2.5("N" vi-search-ag)151.2 204 R -(ain)-.05 E 2.5("P" vi-put)151.2 216 R 2.5("R" vi-replace)151.2 228 R -2.5("S" vi-subst)151.2 240 R 2.5("T" vi-char)151.2 252 R(-search)-.2 E -2.5("U" re)151.2 264 R -.15(ve)-.25 G(rt-line).15 E 2.5("W" vi-ne)151.2 -276 R(xt-w)-.15 E(ord)-.1 E 2.5("X" backw)151.2 288 R(ard-delete-char) --.1 E 2.5("Y" vi-yank-to)151.2 300 R 2.5("\\" vi-complete)151.2 312 R -2.5("^" vi-\214rst-print)151.2 324 R 2.5("_" vi-yank-ar)151.2 336 R(g) --.18 E 2.5("`" vi-goto-mark)151.2 348 R 2.5("a" vi-append-mode)151.2 360 -R 2.5("b" vi-pre)151.2 372 R(v-w)-.25 E(ord)-.1 E 2.5("c" vi-change-to) -151.2 384 R 2.5("d" vi-delete-to)151.2 396 R 2.5("e" vi-end-w)151.2 408 -R(ord)-.1 E 2.5("f" vi-char)151.2 420 R(-search)-.2 E 2.5("h" backw) -151.2 432 R(ard-char)-.1 E 2.5("i" vi-insertion-mode)151.2 444 R 2.5 -("j" ne)151.2 456 R(xt-history)-.15 E 2.5("k" pre)151.2 468 R(v-history) --.25 E 2.5("l" forw)151.2 480 R(ard-char)-.1 E 2.5("m" vi-set-mark)151.2 -492 R 2.5("n" vi-search-ag)151.2 504 R(ain)-.05 E 2.5("p" vi-put)151.2 -516 R 2.5("r" vi-change-char)151.2 528 R 2.5("s" vi-subst)151.2 540 R -2.5("t" vi-char)151.2 552 R(-search)-.2 E 2.5("u" vi-undo)151.2 564 R -2.5("w" vi-ne)151.2 576 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 -588 R 2.5("y" vi-yank-to)151.2 600 R 2.5("|" vi-column)151.2 612 R 2.5 -("~" vi-change-case)151.2 624 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 -640.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 652.8 Q(ary) --.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2 -(The Gnu History Libr)108 664.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E -(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 676.8 Q F0(\(1\))A F1 -(FILES)72 693.6 Q F2(~/.inputr)109.666 705.6 Q(c)-.37 E F0(Indi)144 -717.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E -F0(initialization \214le)2.5 E(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(13)190.95 E EP -%%Page: 14 14 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 -10.95/Times-Bold@0 SF -.548(AU)72 84 S(THORS).548 E F0(Brian F)108 96 Q -(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 108 -Q(g)-.18 E(Chet Rame)108 124.8 Q 1.3 -.65(y, C)-.15 H(ase W).65 E -(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E -(chet@ins.CWR)108 136.8 Q(U.Edu)-.4 E F1 -.11(BU)72 153.6 S 2.738(GR).11 -G(EPOR)-2.738 E(TS)-.438 E F0 .69(If you \214nd a b)108 165.6 R .69 -(ug in)-.2 F/F2 10/Times-Bold@0 SF -.18(re)3.19 G(adline,).18 E F0 .69 -(you should report it.)3.19 F .691(But \214rst, you should mak)5.69 F -3.191(es)-.1 G .691(ure that it really is a b)-3.191 F(ug,)-.2 E -(and that it appears in the latest v)108 177.6 Q(ersion of the)-.15 E F2 --.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.) -.15 E .705(Once you ha)108 194.4 R 1.005 -.15(ve d)-.2 H .705 -(etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b) --.15 F .704(ug report to)-.2 F/F3 10/Times-Italic@0 SF -.2(bu)3.204 G -(g\255r).2 E(eadline)-.37 E F0(@)A F3(gnu.or)A(g)-.37 E F0 5.704(.I)C -3.204(fy)-5.704 G(ou)-3.204 E(ha)108 206.4 Q 1.809 -.15(ve a \214)-.2 H -1.509(x, you are welcome to mail that as well!).15 F 1.51 -(Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F -(mailed to)108 218.4 Q F3 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F3 -(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2 -(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 235.2 Q -(ug reports concerning this manual page should be directed to)-.2 E F3 --.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E F1 --.11(BU)72 252 S(GS).11 E F0(It')108 264 Q 2.5(st)-.55 G -(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 4.3)72 768 Q -(2002 January 22)126.24 E(14)190.95 E EP -%%Trailer -end -%%EOF diff --git a/readline-4.3.orig/doc/rlman.texinfo b/readline-4.3.orig/doc/rlman.texinfo deleted file mode 100644 index 1ffebad..0000000 --- a/readline-4.3.orig/doc/rlman.texinfo +++ /dev/null @@ -1,108 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename readline.info -@settitle GNU Readline Library -@comment %**end of header (This is for running Texinfo on a region.) -@synindex vr fn -@setchapternewpage odd - -@include manvers.texinfo - -@ifinfo -@dircategory Libraries -@direntry -* Readline: (readline). The GNU readline library API -@end direntry - -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-2002 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 Free Software Foundation. -@end ifinfo - -@titlepage -@title GNU Readline Library -@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. -@subtitle @value{UPDATE-MONTH} -@author Brian Fox, Free Software Foundation -@author Chet Ramey, Case Western Reserve University - -@page -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. - -@vskip 0pt plus 1filll -Copyright @copyright{} 1988-2002 Free Software Foundation, Inc. -@end titlepage - -@ifinfo -@node Top -@top 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. -@end menu -@end ifinfo - -@include rluser.texinfo -@include rltech.texinfo - -@node Concept Index -@unnumbered Concept Index -@printindex cp - -@node Function and Variable Index -@unnumbered Function and Variable Index -@printindex fn - -@contents -@bye diff --git a/readline-4.3.orig/doc/rltech.texinfo b/readline-4.3.orig/doc/rltech.texinfo deleted file mode 100644 index 037e824..0000000 --- a/readline-4.3.orig/doc/rltech.texinfo +++ /dev/null @@ -1,2165 +0,0 @@ -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename rltech.info -@comment %**end of header (This is for running Texinfo on a region.) -@setchapternewpage odd - -@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-2002 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 - -@node Programming with GNU Readline -@chapter Programming with GNU Readline - -This chapter describes the interface between the @sc{gnu} Readline Library and -other programs. If you are a programmer, and you wish to include the -features found in @sc{gnu} Readline -such as completion, line editing, and interactive history manipulation -in your own programs, this section is for you. - -@menu -* Basic Behavior:: Using the default behavior of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Readline Variables:: Variables accessible to custom - functions. -* Readline Convenience Functions:: Functions which Readline supplies to - aid in writing your own custom - functions. -* Readline Signal Handling:: How Readline behaves when it receives signals. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. -@end menu - -@node Basic Behavior -@section Basic Behavior - -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()} or @code{fgets()}. - -@findex readline -@cindex readline, function - -The function @code{readline()} prints a prompt @var{prompt} -and then reads and returns a single line of text from the user. -If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed. -The line @code{readline} returns is allocated with @code{malloc()}; -the caller should @code{free()} the line when it has finished with it. -The declaration for @code{readline} in ANSI C is - -@example -@code{char *readline (const char *@var{prompt});} -@end example - -@noindent -So, one might say -@example -@code{char *line = readline ("Enter a line: ");} -@end example -@noindent -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 @code{readline} encounters an @code{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 had been 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 - -@noindent -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 @code{gets()} library -function, and has the advantage of no static buffer to overflow: - -@example -/* 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); -@} -@end example - -This function 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()}. - -@example -@code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});} -@end example - -@code{rl_bind_key()} takes two arguments: @var{key} is the character that -you want to bind, and @var{function} is the address of the function to -call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert()} -makes @key{TAB} insert itself. -@code{rl_bind_key()} returns non-zero if @var{key} is not a valid -ASCII character code (between 0 and 255). - -Thus, to disable the default @key{TAB} behavior, the following suffices: -@example -@code{rl_bind_key ('\t', rl_insert);} -@end example - -This code should be executed once at the start of your program; you -might write a function called @code{initialize_readline()} which -performs this and other desired initializations, such as installing -custom completers (@pxref{Custom Completers}). - -@node Custom Functions -@section Custom Functions - -Readline provides many functions for manipulating the text of -the line, but it isn't possible to anticipate the needs of all -programs. This section describes the various functions and variables -defined within the Readline library which allow a user program to add -customized functionality to Readline. - -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 @code{<readline/readline.h>} -in any file that uses Readline's features. Since some of the definitions -in @code{readline.h} use the @code{stdio} library, the file -@code{<stdio.h>} should be included before @code{readline.h}. - -@code{readline.h} defines a C preprocessor variable that should -be treated as an integer, @code{RL_READLINE_VERSION}, which may -be used to conditionally compile application code depending on -the installed Readline version. The value is a hexadecimal -encoding of the major and minor version numbers of the library, -of the form 0x@var{MMmm}. @var{MM} is the two-digit major -version number; @var{mm} is the two-digit minor version number. -For Readline 4.2, for example, the value of -@code{RL_READLINE_VERSION} would be @code{0x0402}. - -@menu -* Readline Typedefs:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. -@end menu - -@node Readline Typedefs -@subsection Readline Typedefs - -For readabilty, we declare a number of new object types, all pointers -to functions. - -The reason for declaring these new types is to make it easier to write -code describing pointers to C functions with appropriately prototyped -arguments and return values. - -For instance, say we want to declare a variable @var{func} as a pointer -to a function which takes two @code{int} arguments and returns an -@code{int} (this is the type of all of the Readline bindable functions). -Instead of the classic C declaration - -@code{int (*func)();} - -@noindent -or the ANSI-C style declaration - -@code{int (*func)(int, int);} - -@noindent -we may write - -@code{rl_command_func_t *func;} - -The full list of function pointer types available is - -@table @code -@item typedef int rl_command_func_t (int, int); - -@item typedef char *rl_compentry_func_t (const char *, int); - -@item typedef char **rl_completion_func_t (const char *, int, int); - -@item typedef char *rl_quote_func_t (char *, int, char *); - -@item typedef char *rl_dequote_func_t (char *, int); - -@item typedef int rl_compignore_func_t (char **); - -@item typedef void rl_compdisp_func_t (char **, int, int); - -@item typedef int rl_hook_func_t (void); - -@item typedef int rl_getc_func_t (FILE *); - -@item typedef int rl_linebuf_func_t (char *, int); - -@item typedef int rl_intfunc_t (int); -@item #define rl_ivoidfunc_t rl_hook_func_t -@item typedef int rl_icpfunc_t (char *); -@item typedef int rl_icppfunc_t (char **); - -@item typedef void rl_voidfunc_t (void); -@item typedef void rl_vintfunc_t (int); -@item typedef void rl_vcpfunc_t (char *); -@item typedef void rl_vcppfunc_t (char **); - -@end table - -@node Function Writing -@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 read so far. - -The calling sequence for a command @code{foo} looks like - -@example -@code{int foo (int count, int key)} -@end example - -@noindent -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, 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. - -A command function should return 0 if its action completes successfully, -and a non-zero value if some error occurs. - -@node Readline Variables -@section Readline Variables - -These variables are available to function writers. - -@deftypevar {char *} rl_line_buffer -This is the line gathered so far. You are welcome to modify the -contents of the line, but see @ref{Allowing Undoing}. The -function @code{rl_extend_line_buffer} is available to increase -the memory allocated to @code{rl_line_buffer}. -@end deftypevar - -@deftypevar int rl_point -The offset of the current cursor position in @code{rl_line_buffer} -(the @emph{point}). -@end deftypevar - -@deftypevar int rl_end -The number of characters present in @code{rl_line_buffer}. When -@code{rl_point} is at the end of the line, @code{rl_point} and -@code{rl_end} are equal. -@end deftypevar - -@deftypevar int rl_mark -The @var{mark} (saved position) in the current line. If set, the mark -and point define a @emph{region}. -@end deftypevar - -@deftypevar int rl_done -Setting this to a non-zero value causes Readline to return the current -line immediately. -@end deftypevar - -@deftypevar int rl_num_chars_to_read -Setting this to a positive value before calling @code{readline()} causes -Readline to return after accepting that many characters, rather -than reading up to a character bound to @code{accept-line}. -@end deftypevar - -@deftypevar int rl_pending_input -Setting this to a value makes it the next keystroke read. This is a -way to stuff a single character into the input stream. -@end deftypevar - -@deftypevar int rl_dispatching -Set to a non-zero value if a function is being called from a key binding; -zero otherwise. Application functions can test this to discover whether -they were called directly or by Readline's dispatching mechanism. -@end deftypevar - -@deftypevar int rl_erase_empty_line -Setting this to a non-zero value causes Readline to completely erase -the current line, including any prompt, any time a newline is typed as -the only character on an otherwise-empty line. The cursor is moved to -the beginning of the newly-blank line. -@end deftypevar - -@deftypevar {char *} rl_prompt -The prompt Readline uses. This is set from the argument to -@code{readline()}, and should not be assigned to directly. -The @code{rl_set_prompt()} function (@pxref{Redisplay}) may -be used to modify the prompt string after calling @code{readline()}. -@end deftypevar - -@deftypevar int rl_already_prompted -If an application wishes to display the prompt itself, rather than have -Readline do it the first time @code{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 @code{readline()} so -the redisplay functions can update the display properly. -The calling application is responsible for managing the value; Readline -never sets it. -@end deftypevar - -@deftypevar {const char *} rl_library_version -The version number of this revision of the library. -@end deftypevar - -@deftypevar int rl_readline_version -An integer encoding the current version of the library. The encoding is -of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version -number, and @var{mm} is the two-digit minor version number. -For example, for Readline-4.2, @code{rl_readline_version} would have the -value 0x0402. -@end deftypevar - -@deftypevar {int} rl_gnu_readline_p -Always set to 1, denoting that this is @sc{gnu} readline rather than some -emulation. -@end deftypevar - -@deftypevar {const char *} rl_terminal_name -The terminal type, used for initialization. If not set by the application, -Readline sets this to the value of the @env{TERM} environment variable -the first time it is called. -@end deftypevar - -@deftypevar {const char *} rl_readline_name -This variable is set to a unique name by each application using Readline. -The value allows conditional parsing of the inputrc file -(@pxref{Conditional Init Constructs}). -@end deftypevar - -@deftypevar {FILE *} rl_instream -The stdio stream from which Readline reads input. -If @code{NULL}, Readline defaults to @var{stdin}. -@end deftypevar - -@deftypevar {FILE *} rl_outstream -The stdio stream to which Readline performs output. -If @code{NULL}, Readline defaults to @var{stdout}. -@end deftypevar - -@deftypevar {rl_command_func_t *} rl_last_func -The address of the last command function Readline executed. May be used to -test whether or not a function is being executed twice in succession, for -example. -@end deftypevar - -@deftypevar {rl_hook_func_t *} rl_startup_hook -If non-zero, this is the address of a function to call just -before @code{readline} prints the first prompt. -@end deftypevar - -@deftypevar {rl_hook_func_t *} rl_pre_input_hook -If non-zero, this is the address of a function to call after -the first prompt has been printed and just before @code{readline} -starts reading input characters. -@end deftypevar - -@deftypevar {rl_hook_func_t *} rl_event_hook -If non-zero, this is the address of a function to call periodically -when Readline is waiting for terminal input. -By default, this will be called at most ten times a second if there -is no keyboard input. -@end deftypevar - -@deftypevar {rl_getc_func_t *} rl_getc_function -If non-zero, Readline will call indirectly through this pointer -to get a character from the input stream. By default, it is set to -@code{rl_getc}, the default Readline character input function -(@pxref{Character Input}). -@end deftypevar - -@deftypevar {rl_voidfunc_t *} rl_redisplay_function -If non-zero, Readline will call indirectly through this pointer -to update the display with the current contents of the editing buffer. -By default, it is set to @code{rl_redisplay}, the default Readline -redisplay function (@pxref{Redisplay}). -@end deftypevar - -@deftypevar {rl_vintfunc_t *} rl_prep_term_function -If non-zero, Readline will call indirectly through this pointer -to initialize the terminal. The function takes a single argument, an -@code{int} flag that says whether or not to use eight-bit characters. -By default, this is set to @code{rl_prep_terminal} -(@pxref{Terminal Management}). -@end deftypevar - -@deftypevar {rl_voidfunc_t *} rl_deprep_term_function -If non-zero, Readline will call indirectly through this pointer -to reset the terminal. This function should undo the effects of -@code{rl_prep_term_function}. -By default, this is set to @code{rl_deprep_terminal} -(@pxref{Terminal Management}). -@end deftypevar - -@deftypevar {Keymap} rl_executing_keymap -This variable is set to the keymap (@pxref{Keymaps}) in which the -currently executing readline function was found. -@end deftypevar - -@deftypevar {Keymap} rl_binding_keymap -This variable is set to the keymap (@pxref{Keymaps}) in which the -last key binding occurred. -@end deftypevar - -@deftypevar {char *} rl_executing_macro -This variable is set to the text of any currently-executing macro. -@end deftypevar - -@deftypevar {int} rl_readline_state -A variable with bit values that encapsulate the current Readline state. -A bit is set with the @code{RL_SETSTATE} macro, and unset with the -@code{RL_UNSETSTATE} macro. Use the @code{RL_ISSTATE} macro to test -whether a particular state bit is set. Current state bits include: - -@table @code -@item RL_STATE_NONE -Readline has not yet been called, nor has it begun to intialize. -@item RL_STATE_INITIALIZING -Readline is initializing its internal data structures. -@item RL_STATE_INITIALIZED -Readline has completed its initialization. -@item RL_STATE_TERMPREPPED -Readline has modified the terminal modes to do its own input and redisplay. -@item RL_STATE_READCMD -Readline is reading a command from the keyboard. -@item RL_STATE_METANEXT -Readline is reading more input after reading the meta-prefix character. -@item RL_STATE_DISPATCHING -Readline is dispatching to a command. -@item RL_STATE_MOREINPUT -Readline is reading more input while executing an editing command. -@item RL_STATE_ISEARCH -Readline is performing an incremental history search. -@item RL_STATE_NSEARCH -Readline is performing a non-incremental history search. -@item RL_STATE_SEARCH -Readline is searching backward or forward through the history for a string. -@item RL_STATE_NUMERICARG -Readline is reading a numeric argument. -@item RL_STATE_MACROINPUT -Readline is currently getting its input from a previously-defined keyboard -macro. -@item RL_STATE_MACRODEF -Readline is currently reading characters defining a keyboard macro. -@item RL_STATE_OVERWRITE -Readline is in overwrite mode. -@item RL_STATE_COMPLETING -Readline is performing word completion. -@item RL_STATE_SIGHANDLER -Readline is currently executing the readline signal handler. -@item RL_STATE_UNDOING -Readline is performing an undo. -@item RL_STATE_DONE -Readline has read a key sequence bound to @code{accept-line} -and is about to return the line to the caller. -@end table - -@end deftypevar - -@deftypevar {int} rl_explicit_arg -Set to a non-zero value if an explicit numeric argument was specified by -the user. Only valid in a bindable command function. -@end deftypevar - -@deftypevar {int} rl_numeric_arg -Set to the value of any numeric argument explicitly specified by the user -before executing the current Readline function. Only valid in a bindable -command function. -@end deftypevar - -@deftypevar {int} rl_editing_mode -Set to a value denoting Readline's current editing mode. A value of -@var{1} means Readline is currently in emacs mode; @var{0} -means that vi mode is active. -@end deftypevar - - -@node Readline Convenience Functions -@section Readline Convenience Functions - -@menu -* Function Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Associating Function Names and Bindings:: Translate function names to - key sequences. -* Allowing Undoing:: How to make your functions undoable. -* Redisplay:: Functions to control line display. -* Modifying Text:: Functions to modify @code{rl_line_buffer}. -* Character Input:: Functions to read keyboard input. -* Terminal Management:: Functions to manage terminal settings. -* Utility Functions:: Generally useful functions and hooks. -* Miscellaneous Functions:: Functions that don't fall into any category. -* Alternate Interface:: Using Readline in a `callback' fashion. -* A Readline Example:: An example Readline function. -@end menu - -@node Function Naming -@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 the keystroke @key{Meta-Rubout} to the function -@emph{descriptively} named @code{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: - -@deftypefun int rl_add_defun (const char *name, rl_command_func_t *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 deftypefun - -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. - -@node Keymaps -@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. - -@deftypefun Keymap rl_make_bare_keymap (void) -Returns a new, empty keymap. The space for the keymap is allocated with -@code{malloc()}; the caller should free it by calling -@code{rl_discard_keymap()} when done. -@end deftypefun - -@deftypefun Keymap rl_copy_keymap (Keymap map) -Return a new keymap which is a copy of @var{map}. -@end deftypefun - -@deftypefun Keymap rl_make_keymap (void) -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 deftypefun - -@deftypefun void rl_discard_keymap (Keymap keymap) -Free the storage associated with @var{keymap}. -@end deftypefun - -Readline has several internal keymaps. These functions allow you to -change which keymap is active. - -@deftypefun Keymap rl_get_keymap (void) -Returns the currently active keymap. -@end deftypefun - -@deftypefun void rl_set_keymap (Keymap keymap) -Makes @var{keymap} the currently active keymap. -@end deftypefun - -@deftypefun Keymap rl_get_keymap_by_name (const char *name) -Return the keymap matching @var{name}. @var{name} is one which would -be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). -@end deftypefun - -@deftypefun {char *} rl_get_keymap_name (Keymap keymap) -Return the name matching @var{keymap}. @var{name} is one which would -be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). -@end deftypefun - -@node Binding Keys -@subsection Binding Keys - -Key sequences are associate with functions through the keymap. -Readline has several internal keymaps: @code{emacs_standard_keymap}, -@code{emacs_meta_keymap}, @code{emacs_ctlx_keymap}, -@code{vi_movement_keymap}, and @code{vi_insertion_keymap}. -@code{emacs_standard_keymap} is the default, and the examples in -this manual assume that. - -Since @code{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 @code{readline()} will be overridden. -An alternate mechanism is to install custom key bindings in an -initialization function assigned to the @code{rl_startup_hook} variable -(@pxref{Readline Variables}). - -These functions manage key bindings. - -@deftypefun int rl_bind_key (int key, rl_command_func_t *function) -Binds @var{key} to @var{function} in the currently active keymap. -Returns non-zero in the case of an invalid @var{key}. -@end deftypefun - -@deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) -Bind @var{key} to @var{function} in @var{map}. Returns non-zero in the case -of an invalid @var{key}. -@end deftypefun - -@deftypefun int rl_unbind_key (int key) -Bind @var{key} to the null function in the currently active keymap. -Returns non-zero in case of error. -@end deftypefun - -@deftypefun int rl_unbind_key_in_map (int key, Keymap map) -Bind @var{key} to the null function in @var{map}. -Returns non-zero in case of error. -@end deftypefun - -@deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) -Unbind all keys that execute @var{function} in @var{map}. -@end deftypefun - -@deftypefun int rl_unbind_command_in_map (const char *command, Keymap map) -Unbind all keys that are bound to @var{command} in @var{map}. -@end deftypefun - -@deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) -Bind the key sequence represented by the string @var{keyseq} to the function -@var{function}. This makes new keymaps as -necessary. The initial keymap in which to do bindings is @var{map}. -@end deftypefun - -@deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) -Bind the key sequence represented by the string @var{keyseq} to the arbitrary -pointer @var{data}. @var{type} says what kind of data is pointed to by -@var{data}; this can be a function (@code{ISFUNC}), a macro -(@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as -necessary. The initial keymap in which to do bindings is @var{map}. -@end deftypefun - -@deftypefun int rl_parse_and_bind (char *line) -Parse @var{line} as if it had been read from the @code{inputrc} file and -perform any key bindings and variable assignments found -(@pxref{Readline Init File}). -@end deftypefun - -@deftypefun int rl_read_init_file (const char *filename) -Read keybindings and variable assignments from @var{filename} -(@pxref{Readline Init File}). -@end deftypefun - -@node Associating Function Names and Bindings -@subsection Associating Function Names and Bindings - -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. You may also -associate a new function name with an arbitrary function. - -@deftypefun {rl_command_func_t *} rl_named_function (const char *name) -Return the function with name @var{name}. -@end deftypefun - -@deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) -Return the function invoked by @var{keyseq} in keymap @var{map}. -If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is -not @code{NULL}, the type of the object is returned in the @code{int} variable -it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}). -@end deftypefun - -@deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function) -Return an array of strings representing the key sequences used to -invoke @var{function} in the current keymap. -@end deftypefun - -@deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) -Return an array of strings representing the key sequences used to -invoke @var{function} in the keymap @var{map}. -@end deftypefun - -@deftypefun void rl_function_dumper (int readable) -Print the readline function names and the key sequences currently -bound to them to @code{rl_outstream}. If @var{readable} is non-zero, -the list is formatted in such a way that it can be made part of an -@code{inputrc} file and re-read. -@end deftypefun - -@deftypefun void rl_list_funmap_names (void) -Print the names of all bindable Readline functions to @code{rl_outstream}. -@end deftypefun - -@deftypefun {const char **} rl_funmap_names (void) -Return a NULL terminated array of known function names. The array is -sorted. The array itself is allocated, but not the strings inside. You -should @code{free()} the array when you are done, but not the pointers. -@end deftypefun - -@deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function) -Add @var{name} to the list of bindable Readline command names, and make -@var{function} the function to be called when @var{name} is invoked. -@end deftypefun - -@node Allowing Undoing -@subsection Allowing Undoing - -Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try -something if you know you can undo it. - -If your function simply inserts text once, or deletes text once, and -uses @code{rl_insert_text()} or @code{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 @code{rl_begin_undo_group()} and -@code{rl_end_undo_group()}. - -The types of events that can be undone are: - -@smallexample -enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; -@end smallexample - -Notice that @code{UNDO_DELETE} means to insert some text, and -@code{UNDO_INSERT} means to delete some text. That is, the undo code -tells what to undo, not how to undo it. @code{UNDO_BEGIN} and -@code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and -@code{rl_end_undo_group()}. - -@deftypefun int rl_begin_undo_group (void) -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 could be the result of calls to -@code{rl_add_undo()}. -@end deftypefun - -@deftypefun int rl_end_undo_group (void) -Closes the current undo group started with @code{rl_begin_undo_group -()}. There should be one call to @code{rl_end_undo_group()} -for each call to @code{rl_begin_undo_group()}. -@end deftypefun - -@deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text) -Remember how to undo an event (according to @var{what}). The affected -text runs from @var{start} to @var{end}, and encompasses @var{text}. -@end deftypefun - -@deftypefun void rl_free_undo_list (void) -Free the existing undo list. -@end deftypefun - -@deftypefun int rl_do_undo (void) -Undo the first thing on the undo list. Returns @code{0} if there was -nothing to undo, non-zero if something was undone. -@end deftypefun - -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g., change its case), 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. - -@deftypefun int 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 you will subsequently modify -that text. -@end deftypefun - -@node Redisplay -@subsection Redisplay - -@deftypefun void rl_redisplay (void) -Change what's displayed on the screen to reflect the current contents -of @code{rl_line_buffer}. -@end deftypefun - -@deftypefun int rl_forced_update_display (void) -Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -@end deftypefun - -@deftypefun int rl_on_new_line (void) -Tell the update functions that we have moved onto a new (empty) line, -usually after ouputting a newline. -@end deftypefun - -@deftypefun int rl_on_new_line_with_prompt (void) -Tell the update functions that we have moved onto a new line, with -@var{rl_prompt} already displayed. -This could be used by applications that want to output the prompt string -themselves, but still need Readline to know the prompt string length for -redisplay. -It should be used after setting @var{rl_already_prompted}. -@end deftypefun - -@deftypefun int rl_reset_line_state (void) -Reset the display state to a clean state and redisplay the current line -starting on a new line. -@end deftypefun - -@deftypefun int rl_crlf (void) -Move the cursor to the start of the next screen line. -@end deftypefun - -@deftypefun int rl_show_char (int c) -Display character @var{c} on @code{rl_outstream}. -If Readline has not been set to display meta characters directly, this -will convert meta characters to a meta-prefixed key sequence. -This is intended for use by applications which wish to do their own -redisplay. -@end deftypefun - -@deftypefun int rl_message (const char *, @dots{}) -The arguments are a format string as would be supplied to @code{printf}, -possibly containing conversion specifications such as @samp{%d}, and -any additional arguments necessary to satisfy the conversion specifications. -The resulting string is displayed in the @dfn{echo area}. The echo area -is also used to display numeric arguments and search strings. -@end deftypefun - -@deftypefun int rl_clear_message (void) -Clear the message in the echo area. -@end deftypefun - -@deftypefun void rl_save_prompt (void) -Save the local Readline prompt display state in preparation for -displaying a new message in the message area with @code{rl_message()}. -@end deftypefun - -@deftypefun void rl_restore_prompt (void) -Restore the local Readline prompt display state saved by the most -recent call to @code{rl_save_prompt}. -@end deftypefun - -@deftypefun int rl_expand_prompt (char *prompt) -Expand any special character sequences in @var{prompt} and set up the -local Readline prompt redisplay variables. -This function is called by @code{readline()}. It may also be called to -expand the primary prompt if the @code{rl_on_new_line_with_prompt()} -function or @code{rl_already_prompted} variable is used. -It returns the number of visible characters on the last line of the -(possibly multi-line) prompt. -@end deftypefun - -@deftypefun int rl_set_prompt (const char *prompt) -Make Readline use @var{prompt} for subsequent redisplay. This calls -@code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt} -to the result. -@end deftypefun - -@node Modifying Text -@subsection Modifying Text - -@deftypefun int rl_insert_text (const char *text) -Insert @var{text} into the line at the current cursor position. -Returns the number of characters inserted. -@end deftypefun - -@deftypefun int rl_delete_text (int start, int end) -Delete the text between @var{start} and @var{end} in the current line. -Returns the number of characters deleted. -@end deftypefun - -@deftypefun {char *} rl_copy_text (int start, int end) -Return a copy of the text between @var{start} and @var{end} in -the current line. -@end deftypefun - -@deftypefun int rl_kill_text (int start, int end) -Copy the text between @var{start} and @var{end} in the current line -to the kill ring, appending or prepending to the last kill if the -last command was a kill command. The text is deleted. -If @var{start} is less than @var{end}, -the text is appended, otherwise prepended. If the last command was -not a kill, a new kill ring slot is used. -@end deftypefun - -@deftypefun int rl_push_macro_input (char *macro) -Cause @var{macro} to be inserted into the line, as if it had been invoked -by a key bound to a macro. Not especially useful; use -@code{rl_insert_text()} instead. -@end deftypefun - -@node Character Input -@subsection Character Input - -@deftypefun int rl_read_key (void) -Return the next character available from Readline's current input stream. -This handles input inserted into -the input stream via @var{rl_pending_input} (@pxref{Readline Variables}) -and @code{rl_stuff_char()}, macros, and characters read from the keyboard. -While waiting for input, this function will call any function assigned to -the @code{rl_event_hook} variable. -@end deftypefun - -@deftypefun int rl_getc (FILE *stream) -Return the next character available from @var{stream}, which is assumed to -be the keyboard. -@end deftypefun - -@deftypefun int rl_stuff_char (int c) -Insert @var{c} into the Readline input stream. It will be "read" -before Readline attempts to read characters from the terminal with -@code{rl_read_key()}. Up to 512 characters may be pushed back. -@code{rl_stuff_char} returns 1 if the character was successfully inserted; -0 otherwise. -@end deftypefun - -@deftypefun int rl_execute_next (int c) -Make @var{c} be the next command to be executed when @code{rl_read_key()} -is called. This sets @var{rl_pending_input}. -@end deftypefun - -@deftypefun int rl_clear_pending_input (void) -Unset @var{rl_pending_input}, effectively negating the effect of any -previous call to @code{rl_execute_next()}. This works only if the -pending input has not already been read with @code{rl_read_key()}. -@end deftypefun - -@deftypefun int rl_set_keyboard_input_timeout (int u) -While waiting for keyboard input in @code{rl_read_key()}, Readline will -wait for @var{u} microseconds for input before calling any function -assigned to @code{rl_event_hook}. The default waiting period is -one-tenth of a second. Returns the old timeout value. -@end deftypefun - -@node Terminal Management -@subsection Terminal Management - -@deftypefun void rl_prep_terminal (int meta_flag) -Modify the terminal settings for Readline's use, so @code{readline()} -can read a single character at a time from the keyboard. -The @var{meta_flag} argument should be non-zero if Readline should -read eight-bit input. -@end deftypefun - -@deftypefun void rl_deprep_terminal (void) -Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in -the state in which it was before the most recent call to -@code{rl_prep_terminal()}. -@end deftypefun - -@deftypefun void rl_tty_set_default_bindings (Keymap kmap) -Read the operating system's terminal editing characters (as would be displayed -by @code{stty}) to their Readline equivalents. The bindings are performed -in @var{kmap}. -@end deftypefun - -@deftypefun int rl_reset_terminal (const char *terminal_name) -Reinitialize Readline's idea of the terminal settings using -@var{terminal_name} as the terminal type (e.g., @code{vt100}). -If @var{terminal_name} is @code{NULL}, the value of the @code{TERM} -environment variable is used. -@end deftypefun - -@node Utility Functions -@subsection Utility Functions - -@deftypefun void rl_replace_line (const char *text, int clear_undo) -Replace the contents of @code{rl_line_buffer} with @var{text}. -The point and mark are preserved, if possible. -If @var{clear_undo} is non-zero, the undo list associated with the -current line is cleared. -@end deftypefun - -@deftypefun int rl_extend_line_buffer (int len) -Ensure that @code{rl_line_buffer} has enough space to hold @var{len} -characters, possibly reallocating it if necessary. -@end deftypefun - -@deftypefun int rl_initialize (void) -Initialize or re-initialize Readline's internal state. -It's not strictly necessary to call this; @code{readline()} calls it before -reading any input. -@end deftypefun - -@deftypefun int rl_ding (void) -Ring the terminal bell, obeying the setting of @code{bell-style}. -@end deftypefun - -@deftypefun int rl_alphabetic (int c) -Return 1 if @var{c} is an alphabetic character. -@end deftypefun - -@deftypefun void rl_display_match_list (char **matches, int len, int max) -A convenience function for displaying a list of strings in -columnar format on Readline's output stream. @code{matches} is the list -of strings, in argv format, such as a list of completion matches. -@code{len} is the number of strings in @code{matches}, and @code{max} -is the length of the longest string in @code{matches}. This function uses -the setting of @code{print-completions-horizontally} to select how the -matches are displayed (@pxref{Readline Init File Syntax}). -@end deftypefun - -The following are implemented as macros, defined in @code{chardefs.h}. -Applications should refrain from using them. - -@deftypefun int _rl_uppercase_p (int c) -Return 1 if @var{c} is an uppercase alphabetic character. -@end deftypefun - -@deftypefun int _rl_lowercase_p (int c) -Return 1 if @var{c} is a lowercase alphabetic character. -@end deftypefun - -@deftypefun int _rl_digit_p (int c) -Return 1 if @var{c} is a numeric character. -@end deftypefun - -@deftypefun int _rl_to_upper (int c) -If @var{c} is a lowercase alphabetic character, return the corresponding -uppercase character. -@end deftypefun - -@deftypefun int _rl_to_lower (int c) -If @var{c} is an uppercase alphabetic character, return the corresponding -lowercase character. -@end deftypefun - -@deftypefun int _rl_digit_value (int c) -If @var{c} is a number, return the value it represents. -@end deftypefun - -@node Miscellaneous Functions -@subsection Miscellaneous Functions - -@deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) -Bind the key sequence @var{keyseq} to invoke the macro @var{macro}. -The binding is performed in @var{map}. When @var{keyseq} is invoked, the -@var{macro} will be inserted into the line. This function is deprecated; -use @code{rl_generic_bind()} instead. -@end deftypefun - -@deftypefun void rl_macro_dumper (int readable) -Print the key sequences bound to macros and their values, using -the current keymap, to @code{rl_outstream}. -If @var{readable} is non-zero, the list is formatted in such a way -that it can be made part of an @code{inputrc} file and re-read. -@end deftypefun - -@deftypefun int rl_variable_bind (const char *variable, const char *value) -Make the Readline variable @var{variable} have @var{value}. -This behaves as if the readline command -@samp{set @var{variable} @var{value}} had been executed in an @code{inputrc} -file (@pxref{Readline Init File Syntax}). -@end deftypefun - -@deftypefun void rl_variable_dumper (int readable) -Print the readline variable names and their current values -to @code{rl_outstream}. -If @var{readable} is non-zero, the list is formatted in such a way -that it can be made part of an @code{inputrc} file and re-read. -@end deftypefun - -@deftypefun int rl_set_paren_blink_timeout (int u) -Set the time interval (in microseconds) that Readline waits when showing -a balancing character when @code{blink-matching-paren} has been enabled. -@end deftypefun - -@deftypefun {char *} rl_get_termcap (const char *cap) -Retrieve the string value of the termcap capability @var{cap}. -Readline fetches the termcap entry for the current terminal name and -uses those capabilities to move around the screen line and perform other -terminal-specific operations, like erasing a line. Readline does not -use all of a terminal's capabilities, and this function will return -values for only those capabilities Readline uses. -@end deftypefun - -@node Alternate Interface -@subsection Alternate Interface - -An alternate interface is available to plain @code{readline()}. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to @code{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. - -@deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) -Set up the terminal for readline I/O and display the initial -expanded value of @var{prompt}. Save the value of @var{lhandler} to -use as a function to call when a complete line of input has been entered. -The function takes the text of the line as an argument. -@end deftypefun - -@deftypefun void rl_callback_read_char (void) -Whenever an application determines that keyboard input is available, it -should call @code{rl_callback_read_char()}, which will read the next -character from the current input source. -If that character completes the line, @code{rl_callback_read_char} will -invoke the @var{lhandler} function saved by @code{rl_callback_handler_install} -to process the line. -Before calling the @var{lhandler} function, the terminal settings are -reset to the values they had before calling -@code{rl_callback_handler_install}. -If the @var{lhandler} function returns, -the terminal settings are modified for Readline's use again. -@code{EOF} is indicated by calling @var{lhandler} with a -@code{NULL} line. -@end deftypefun - -@deftypefun void rl_callback_handler_remove (void) -Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -If the @var{lhandler} installed by @code{rl_callback_handler_install} -does not exit the program, either this function or the function referred -to by the value of @code{rl_deprep_term_function} should be called before -the program exits to reset the terminal settings. -@end deftypefun - -@node A Readline Example -@subsection A Readline Example - -Here is a function which changes lowercase characters to their uppercase -equivalents, and uppercase characters to lowercase. If -this function was bound to @samp{M-c}, then typing @samp{M-c} would -change the case of the character under point. Typing @samp{M-1 0 M-c} -would change the case of the following 10 characters, leaving the cursor on -the last character changed. - -@example -/* 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 (_rl_uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); - else if (_rl_lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_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); -@} -@end example - -@node Readline Signal Handling -@section Readline Signal Handling - -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 such a signal is received in order 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 (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, -@code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}). -When one of these signals is received, the signal handler -will reset the terminal attributes to those that were in effect before -@code{readline()} was called, reset the signal handling to what it was -before @code{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 @code{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 @code{rl_free_line_state()} below). - -There is an additional Readline signal handler, for @code{SIGWINCH}, which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH} -handler updates Readline's internal screen size information, and then calls -any @code{SIGWINCH} signal handler the calling application has installed. -Readline calls the application's @code{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 @code{longjmp} back to a main processing loop), it @emph{must} -call @code{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 @code{readline()}, not in -a signal handler, so Readline's internal signal state is not corrupted. - -@deftypevar int rl_catch_signals -If this variable is non-zero, Readline will install signal handlers for -@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGALRM}, -@code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}. - -The default value of @code{rl_catch_signals} is 1. -@end deftypevar - -@deftypevar int rl_catch_sigwinch -If this variable is non-zero, Readline will install a signal handler for -@code{SIGWINCH}. - -The default value of @code{rl_catch_sigwinch} is 1. -@end deftypevar - -If an application does not wish to have Readline catch any signals, or -to handle signals other than those Readline catches (@code{SIGHUP}, -for example), -Readline provides convenience functions to do the necessary terminal -and internal state cleanup upon receipt of a signal. - -@deftypefun void rl_cleanup_after_signal (void) -This function will reset the state of the terminal to what it was before -@code{readline()} was called, and remove the Readline signal handlers for -all signals, depending on the values of @code{rl_catch_signals} and -@code{rl_catch_sigwinch}. -@end deftypefun - -@deftypefun void rl_free_line_state (void) -This will free any partial state associated with the current input line -(undo information, any partial history entry, any partially-entered -keyboard macro, and any partially-entered numeric argument). This -should be called before @code{rl_cleanup_after_signal()}. The -Readline signal handler for @code{SIGINT} calls this to abort the -current input line. -@end deftypefun - -@deftypefun void rl_reset_after_signal (void) -This will reinitialize the terminal and reinstall any Readline signal -handlers, depending on the values of @code{rl_catch_signals} and -@code{rl_catch_sigwinch}. -@end deftypefun - -If an application does not wish Readline to catch @code{SIGWINCH}, it may -call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force -Readline to update its idea of the terminal size when a @code{SIGWINCH} -is received. - -@deftypefun void rl_resize_terminal (void) -Update Readline's internal screen size by reading values from the kernel. -@end deftypefun - -@deftypefun void rl_set_screen_size (int rows, int cols) -Set Readline's idea of the terminal size to @var{rows} rows and -@var{cols} columns. -@end deftypefun - -If an application does not want to install a @code{SIGWINCH} handler, but -is still interested in the screen dimensions, Readline's idea of the screen -size may be queried. - -@deftypefun void rl_get_screen_size (int *rows, int *cols) -Return Readline's idea of the terminal's size in the -variables pointed to by the arguments. -@end deftypefun - -The following functions install and remove Readline's signal handlers. - -@deftypefun int rl_set_signals (void) -Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT}, -@code{SIGTERM}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, -@code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of -@code{rl_catch_signals} and @code{rl_catch_sigwinch}. -@end deftypefun - -@deftypefun int rl_clear_signals (void) -Remove all of the Readline signal handlers installed by -@code{rl_set_signals()}. -@end deftypefun - -@node Custom Completers -@section Custom Completers - -Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. -The following sections describe how your program and Readline -cooperate to provide this service. - -@menu -* How Completing Works:: The logic used to do completion. -* Completion Functions:: Functions provided by Readline. -* Completion Variables:: Variables which control completion. -* A Short Completion Example:: An example of writing completer subroutines. -@end menu - -@node How Completing Works -@subsection How Completing Works - -In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately -expand a partial word without knowing all of the possible words -which make sense in that context. The Readline library provides -the user interface to completion, and two of the most common -completion functions: filename and username. For completing other types -of text, you must write your own completion function. This section -describes exactly what such functions must do, and provides an example. - -There are three major functions used to perform completion: - -@enumerate -@item -The user-interface function @code{rl_complete()}. This function is -called with the same arguments as other bindable Readline functions: -@var{count} and @var{invoking_key}. -It isolates the word to be completed and calls -@code{rl_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. - -@item -The internal function @code{rl_completion_matches()} uses an -application-supplied @dfn{generator} function to generate the list of -possible matches, and then returns the array of these matches. -The caller should place the address of its generator function in -@code{rl_completion_entry_function}. - -@item -The generator function is called repeatedly from -@code{rl_completion_matches()}, returning a string each time. The -arguments to the generator function are @var{text} and @var{state}. -@var{text} is the partial word to be completed. @var{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. The generator function returns -@code{(char *)NULL} to inform @code{rl_completion_matches()} that there are -no more possibilities left. Usually the generator function computes the -list of possible completions when @var{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 @code{malloc()}; Readline -frees the strings when it has finished with them. - -@end enumerate - -@deftypefun int rl_complete (int ignore, int invoking_key) -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -@code{rl_completion_matches()}). The default is to do filename completion. -@end deftypefun - -@deftypevar {rl_compentry_func_t *} rl_completion_entry_function -This is a pointer to the generator function for -@code{rl_completion_matches()}. -If the value of @code{rl_completion_entry_function} is -@code{NULL} then the default filename generator -function, @code{rl_filename_completion_function()}, is used. -@end deftypevar - -@node Completion Functions -@subsection Completion Functions - -Here is the complete list of callable completion functions present in -Readline. - -@deftypefun int rl_complete_internal (int what_to_do) -Complete the word at or before point. @var{what_to_do} says what to do -with the completion. A value of @samp{?} means list the possible -completions. @samp{TAB} means do standard completion. @samp{*} means -insert all of the possible completions. @samp{!} means to display -all of the possible completions, if there is more than one, as well as -performing partial completion. -@end deftypefun - -@deftypefun int rl_complete (int ignore, int invoking_key) -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -@code{rl_completion_matches()} and @code{rl_completion_entry_function}). -The default is to do filename -completion. This calls @code{rl_complete_internal()} with an -argument depending on @var{invoking_key}. -@end deftypefun - -@deftypefun int rl_possible_completions (int count, int invoking_key) -List the possible completions. See description of @code{rl_complete -()}. This calls @code{rl_complete_internal()} with an argument of -@samp{?}. -@end deftypefun - -@deftypefun int rl_insert_completions (int count, int invoking_key) -Insert the list of possible completions into the line, deleting the -partially-completed word. See description of @code{rl_complete()}. -This calls @code{rl_complete_internal()} with an argument of @samp{*}. -@end deftypefun - -@deftypefun int rl_completion_mode (rl_command_func_t *cfunc) -Returns the apppriate value to pass to @code{rl_complete_internal()} -depending on whether @var{cfunc} was called twice in succession and -the value of the @code{show-all-if-ambiguous} variable. -Application-specific completion functions may use this function to present -the same interface as @code{rl_complete()}. -@end deftypefun - -@deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) -Returns an array of strings which is a list of completions for -@var{text}. If there are no completions, returns @code{NULL}. -The first entry in the returned array is the substitution for @var{text}. -The remaining entries are the possible completions. The array is -terminated with a @code{NULL} pointer. - -@var{entry_func} is a function of two args, and returns a -@code{char *}. The first argument is @var{text}. The second is a -state argument; it is zero on the first call, and non-zero on subsequent -calls. @var{entry_func} returns a @code{NULL} pointer to the caller -when there are no more matches. -@end deftypefun - -@deftypefun {char *} rl_filename_completion_function (const char *text, int state) -A generator function for filename completion in the general case. -@var{text} is a partial filename. -The Bash source is a useful reference for writing custom -completion functions (the Bash completion functions call this and other -Readline functions). -@end deftypefun - -@deftypefun {char *} rl_username_completion_function (const char *text, int state) -A completion generator for usernames. @var{text} contains a partial -username preceded by a random character (usually @samp{~}). As with all -completion generators, @var{state} is zero on the first call and non-zero -for subsequent calls. -@end deftypefun - -@node Completion Variables -@subsection Completion Variables - -@deftypevar {rl_compentry_func_t *} rl_completion_entry_function -A pointer to the generator function for @code{rl_completion_matches()}. -@code{NULL} means to use @code{rl_filename_completion_function()}, the default -filename completer. -@end deftypevar - -@deftypevar {rl_completion_func_t *} rl_attempted_completion_function -A pointer to an alternative function to create matches. -The function is called with @var{text}, @var{start}, and @var{end}. -@var{start} and @var{end} are indices in @code{rl_line_buffer} defining -the boundaries of @var{text}, which is a character string. -If this function exists and returns @code{NULL}, or if this variable is -set to @code{NULL}, then @code{rl_complete()} will call the value of -@code{rl_completion_entry_function} to generate matches, otherwise the -array of strings returned will be used. -If this function sets the @code{rl_attempted_completion_over} -variable to a non-zero value, Readline will not perform its default -completion even if this function returns no matches. -@end deftypevar - -@deftypevar {rl_quote_func_t *} rl_filename_quoting_function -A pointer to a function that will quote a filename in an -application-specific fashion. This is called if filename completion is being -attempted and one of the characters in @code{rl_filename_quote_characters} -appears in a completed filename. The function is called with -@var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text} -is the filename to be quoted. The @var{match_type} is either -@code{SINGLE_MATCH}, if there is only one completion match, or -@code{MULT_MATCH}. Some functions use this to decide whether or not to -insert a closing quote character. The @var{quote_pointer} is a pointer -to any opening quote character the user typed. Some functions choose -to reset this character. -@end deftypevar - -@deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function -A pointer to a function that will remove application-specific quoting -characters from a filename before completion is attempted, so those -characters do not interfere with matching the text against names in -the filesystem. It is called with @var{text}, the text of the word -to be dequoted, and @var{quote_char}, which is the quoting character -that delimits the filename (usually @samp{'} or @samp{"}). If -@var{quote_char} is zero, the filename was not in an embedded string. -@end deftypevar - -@deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p -A pointer to a function to call that determines whether or not a specific -character in the line buffer is quoted, according to whatever quoting -mechanism the program calling Readline uses. The function is called with -two arguments: @var{text}, the text of the line, and @var{index}, the -index of the character in the line. It is used to decide whether a -character found in @code{rl_completer_word_break_characters} should be -used to break words for the completer. -@end deftypevar - -@deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function -This function, if defined, is called by the completer when real filename -completion is done, after all the matching names have been generated. -It is passed a @code{NULL} terminated array of matches. -The first element (@code{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. -@end deftypevar - -@deftypevar {rl_icppfunc_t *} rl_directory_completion_hook -This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument, and may modify that string. -If the string is replaced with a new string, the old value should be freed. -Any modified directory name should have a trailing slash. -The modified value will be displayed as part of the completion, replacing -the directory portion of the pathname the user typed. -It returns an integer that should be non-zero if the function modifies -its directory argument. -It could be used to expand symbolic links or shell variables in pathnames. -@end deftypevar - -@deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook -If non-zero, then this is the address of a function to call when -completing a word would normally display the list of possible matches. -This function is called in lieu of Readline displaying the list. -It takes three arguments: -(@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length}) -where @var{matches} is the array of matching strings, -@var{num_matches} is the number of strings in that array, and -@var{max_length} is the length of the longest string in that array. -Readline provides a convenience function, @code{rl_display_match_list}, -that takes care of doing the display to Readline's output stream. That -function may be called from this hook. -@end deftypevar - -@deftypevar {const char *} rl_basic_word_break_characters -The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash: -@code{" \t\n\"\\'`@@$><=;|&@{("}. -@end deftypevar - -@deftypevar {const char *} rl_basic_quote_characters -A list of quote characters which can cause a word break. -@end deftypevar - -@deftypevar {const char *} rl_completer_word_break_characters -The list of characters that signal a break between words for -@code{rl_complete_internal()}. The default list is the value of -@code{rl_basic_word_break_characters}. -@end deftypevar - -@deftypevar {const char *} rl_completer_quote_characters -A list of characters which can be used to quote a substring of the line. -Completion occurs on the entire substring, and within the substring -@code{rl_completer_word_break_characters} are treated as any other character, -unless they also appear within this list. -@end deftypevar - -@deftypevar {const char *} rl_filename_quote_characters -A list of characters that cause a filename to be quoted by the completer -when they appear in a completed filename. The default is the null string. -@end deftypevar - -@deftypevar {const char *} rl_special_prefixes -The list of characters that are word break characters, but should be -left in @var{text} when it is passed to the completion function. -Programs can use this to help determine what kind of completing to do. -For instance, Bash sets this variable to "$@@" so that it can complete -shell variables and hostnames. -@end deftypevar - -@deftypevar int rl_completion_query_items -Up to this many items will be displayed in response to a -possible-completions call. After that, we ask the user if she is sure -she wants to see them all. The default value is 100. -@end deftypevar - -@deftypevar {int} rl_completion_append_character -When a single completion alternative matches at the end of the command -line, this character is appended to the inserted completion text. The -default is a space character (@samp{ }). Setting this to the null -character (@samp{\0}) prevents anything being appended automatically. -This can be changed in custom completion functions to -provide the ``most sensible word separator character'' according to -an application-specific command line syntax specification. -@end deftypevar - -@deftypevar int rl_completion_suppress_append -If non-zero, @var{rl_completion_append_character} is not appended to -matches at the end of the command line, as described above. It is -set to 0 before any application-specific completion function is called. -@end deftypevar - -@deftypevar int rl_completion_mark_symlink_dirs -If non-zero, a slash will be appended to completed filenames that are -symbolic links to directory names, subject to the value of the -user-settable @var{mark-directories} variable. -This variable exists so that application completion functions can -override the user's global preference (set via the -@var{mark-symlinked-directories} Readline variable) if appropriate. -This variable is set to the user's preference before any -application completion function is called, so unless that function -modifies the value, the user's preferences are honored. -@end deftypevar - -@deftypevar int rl_ignore_completion_duplicates -If non-zero, then duplicates in the matches are removed. -The default is 1. -@end deftypevar - -@deftypevar int rl_filename_completion_desired -Non-zero means that the results of the matches are to be treated as -filenames. This is @emph{always} zero on entry, and can only be changed -within a completion entry generator function. If it is set to a non-zero -value, directory names have a slash appended and Readline attempts to -quote completed filenames if they contain any characters in -@code{rl_filename_quote_characters} and @code{rl_filename_quoting_desired} -is set to a non-zero value. -@end deftypevar - -@deftypevar int rl_filename_quoting_desired -Non-zero means that the results of the matches are to be quoted using -double quotes (or an application-specific quoting mechanism) if the -completed filename contains any characters in -@code{rl_filename_quote_chars}. This is @emph{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 @code{rl_filename_quoting_function}. -@end deftypevar - -@deftypevar int rl_attempted_completion_over -If an application-specific completion function assigned to -@code{rl_attempted_completion_function} sets this variable to a non-zero -value, Readline will not perform its default filename completion even -if the application's completion function returns no matches. -It should be set only by an application's completion function. -@end deftypevar - -@deftypevar int rl_completion_type -Set to a character describing the type of completion Readline is currently -attempting; see the description of @code{rl_complete_internal()} -(@pxref{Completion Functions}) for the list of characters. -@end deftypevar - -@deftypevar int rl_inhibit_completion -If this variable is non-zero, completion is inhibited. The completion -character will be inserted as any other bound to @code{self-insert}. -@end deftypevar - -@node A Short Completion Example -@subsection A Short Completion Example - -Here is a small application demonstrating the use of the GNU Readline -library. It is called @code{fileman}, and the source code resides in -@file{examples/fileman.c}. This sample application provides -completion of command names, line editing features, and access to the -history list. - -@page -@smallexample -/* 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 *xmalloc (); - -/* The names of functions that actually do the manipulation. */ -int com_list __P((char *)); -int com_view __P((char *)); -int com_rename __P((char *)); -int com_stat __P((char *)); -int com_pwd __P((char *)); -int com_delete __P((char *)); -int com_help __P((char *)); -int com_cd __P((char *)); -int com_quit __P((char *)); - -/* A structure which contains information on the commands this program - can understand. */ - -typedef struct @{ - char *name; /* User printable name of the function. */ - rl_icpfunc_t *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, (rl_icpfunc_t *)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 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 __P((const char *, int)); -char **fileman_completion __P((const char *, int, int)); - -/* 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 = 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. Returnthe array of matches, or NULL if there aren't any. */ -char ** -fileman_completion (text, start, end) - const 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 = rl_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) - const 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 = getcwd (dir, sizeof(dir) - 1); - 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.\n" - caller); - fprintf (stderr, "Write it yourself.\n"); -@} - -/* 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); -@} -@end smallexample diff --git a/readline-4.3.orig/doc/rluser.texinfo b/readline-4.3.orig/doc/rluser.texinfo deleted file mode 100644 index 94f851e..0000000 --- a/readline-4.3.orig/doc/rluser.texinfo +++ /dev/null @@ -1,1796 +0,0 @@ -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename rluser.info -@comment %**end of header (This is for running Texinfo on a region.) -@setchapternewpage odd - -@ignore -This file documents the end user interface to the GNU command line -editing features. It is to be an appendix to manuals for programs which -use these features. There is a document entitled "readline.texinfo" -which contains both end-user and programmer documentation for the -GNU Readline Library. - -Copyright (C) 1988-2002 Free Software Foundation, Inc. - -Authored by Brian Fox and Chet Ramey. - -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). - -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 also that the -GNU Copyright statement is available to the distributee, and 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. -@end ignore - -@comment If you are including this manual as an appendix, then set the -@comment variable readline-appendix. - -@ifclear BashFeatures -@defcodeindex bt -@end ifclear - -@node Command Line Editing -@chapter Command Line Editing - -This chapter describes the basic features of the @sc{gnu} -command line editing interface. -@ifset BashFeatures -Command line editing is provided by the Readline library, which is -used by several different programs, including Bash. -@end ifset - -@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. -@ifset BashFeatures -* Programmable Completion:: How to specify the possible completions for - a specific command. -* Programmable Completion Builtins:: Builtin commands to specify how to - complete arguments for a particular command. -@end ifset -@end menu - -@node Introduction and Notation -@section Introduction to Line Editing - -The following paragraphs describe the notation used to represent -keystrokes. - -The text @kbd{C-k} is read as `Control-K' and describes the character -produced when the @key{k} key is pressed while the Control key -is depressed. - -The text @kbd{M-k} is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the @key{k} -key is pressed. -The Meta key is labeled @key{ALT} on many keyboards. -On keyboards with two keys labeled @key{ALT} (usually to either side of -the space bar), the @key{ALT} on the left side is generally set to -work as a Meta key. -The @key{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 @key{ALT} key, or another key working as -a Meta key, the identical keystroke can be generated by typing @key{ESC} -@emph{first}, and then typing @key{k}. -Either process is known as @dfn{metafying} the @key{k} key. - -The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the -character produced by @dfn{metafying} @kbd{C-k}. - -In addition, several keys have their own names. Specifically, -@key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all -stand for themselves when seen in this text, or in an init file -(@pxref{Readline Init File}). -If your keyboard lacks a @key{LFD} key, typing @key{C-j} will -produce the desired character. -The @key{RET} key may be labeled @key{Return} or @key{Enter} on -some keyboards. - -@node Readline Interaction -@section Readline Interaction -@cindex interaction, readline - -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 @key{RET}. You do not have to be at the -end of the line to press @key{RET}; the entire line is accepted -regardless of the location of the cursor within the line. - -@menu -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. -@end menu - -@node Readline Bare Essentials -@subsection Readline Bare Essentials -@cindex notation, readline -@cindex command editing -@cindex editing command lines - -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 @kbd{C-b} to move the cursor to the left, and then -correct your mistake. Afterwards, you can move the cursor to the right -with @kbd{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. - -@table @asis -@item @kbd{C-b} -Move back one character. -@item @kbd{C-f} -Move forward one character. -@item @key{DEL} or @key{Backspace} -Delete the character to the left of the cursor. -@item @kbd{C-d} -Delete the character underneath the cursor. -@item @w{Printing characters} -Insert the character into the line at the cursor. -@item @kbd{C-_} or @kbd{C-x C-u} -Undo the last editing command. You can undo all the way back to an -empty line. -@end table - -@noindent -(Depending on your configuration, the @key{Backspace} key be set to -delete the character to the left of the cursor and the @key{DEL} key set -to delete the character underneath the cursor, like @kbd{C-d}, rather -than the character to the left of the cursor.) - -@node Readline Movement Commands -@subsection Readline Movement Commands - - -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 @kbd{C-b}, @kbd{C-f}, -@kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly -about the line. - -@table @kbd -@item C-a -Move to the start of the line. -@item C-e -Move to the end of the line. -@item M-f -Move forward a word, where a word is composed of letters and digits. -@item M-b -Move backward a word. -@item C-l -Clear the screen, reprinting the current line at the top. -@end table - -Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - -@node Readline Killing Commands -@subsection Readline Killing Commands - -@cindex killing text -@cindex yanking text - -@dfn{Killing} text means to delete the text from the line, but to save -it away for later use, usually by @dfn{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 @dfn{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. -@cindex kill ring - -Here is the list of commands for killing text. - -@table @kbd -@item C-k -Kill the text from the current cursor position to the end of the line. - -@item M-d -Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by @kbd{M-f}. - -@item M-@key{DEL} -Kill from the cursor the start of the current word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by @kbd{M-b}. - -@item C-w -Kill from the cursor to the previous whitespace. This is different than -@kbd{M-@key{DEL}} because the word boundaries differ. - -@end table - -Here is how to @dfn{yank} the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -@table @kbd -@item C-y -Yank the most recently killed text back into the buffer at the cursor. - -@item M-y -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is @kbd{C-y} or @kbd{M-y}. -@end table - -@node Readline Arguments -@subsection Readline Arguments - -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the @i{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 @samp{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 (@samp{-}), 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 @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}, -which will delete the next ten characters on the input line. - -@node Searching -@subsection Searching for Commands in the History - -Readline provides commands for searching through the command history -@ifset BashFeatures -(@pxref{Bash History Facilities}) -@end ifset -for lines containing a specified string. -There are two search modes: @dfn{incremental} and @dfn{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 -@kbd{C-r}. Typing @kbd{C-s} searches forward through the history. -The characters present in the value of the @code{isearch-terminators} variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the @key{ESC} and -@kbd{C-J} characters will terminate an incremental search. -@kbd{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 @kbd{C-r} or -@kbd{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 @key{RET} will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. - -Readline remembers the last incremental search string. If two -@kbd{C-r}s are typed without any intervening characters defining a new -search string, any remembered search string is used. - -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. - -@node Readline Init File -@section Readline Init File -@cindex initialization file, readline - -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 @dfn{inputrc} file, conventionally in his home directory. -The name of this -@ifset BashFeatures -file is taken from the value of the shell variable @env{INPUTRC}. If -@end ifset -@ifclear BashFeatures -file is taken from the value of the environment variable @env{INPUTRC}. If -@end ifclear -that variable is unset, the default is @file{~/.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 @code{C-x C-r} command re-reads this init file, thus -incorporating any changes that you might have made to it. - -@menu -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. -@end menu - -@node Readline Init File Syntax -@subsection Readline Init File Syntax - -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a @samp{#} are comments. -Lines beginning with a @samp{$} indicate conditional -constructs (@pxref{Conditional Init Constructs}). Other lines -denote variable settings and key bindings. - -@table @asis -@item Variable Settings -You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the @code{set} command within the init file. -The syntax is simple: - -@example -set @var{variable} @var{value} -@end example - -@noindent -Here, for example, is how to -change from the default Emacs-like key binding to use -@code{vi} line editing commands: - -@example -set editing-mode vi -@end example - -Variable names and values, where appropriate, are recognized without regard -to case. - -@ifset BashFeatures -The @w{@code{bind -V}} command lists the current Readline variable names -and values. @xref{Bash Builtins}. -@end ifset - -A great deal of run-time behavior is changeable with the following -variables. - -@cindex variables, readline -@table @code - -@item bell-style -@vindex bell-style -Controls what happens when Readline wants to ring the terminal bell. -If set to @samp{none}, Readline never rings the bell. If set to -@samp{visible}, Readline uses a visible bell if one is available. -If set to @samp{audible} (the default), Readline attempts to ring -the terminal's bell. - -@item comment-begin -@vindex comment-begin -The string to insert at the beginning of the line when the -@code{insert-comment} command is executed. The default value -is @code{"#"}. - -@item completion-ignore-case -If set to @samp{on}, Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is @samp{off}. - -@item completion-query-items -@vindex completion-query-items -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -The default limit is @code{100}. - -@item convert-meta -@vindex convert-meta -If set to @samp{on}, Readline will convert characters with the -eighth bit set to an @sc{ascii} key sequence by stripping the eighth -bit and prefixing an @key{ESC} character, converting them to a -meta-prefixed key sequence. The default value is @samp{on}. - -@item disable-completion -@vindex disable-completion -If set to @samp{On}, Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to @code{self-insert}. The default is @samp{off}. - -@item editing-mode -@vindex editing-mode -The @code{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 @samp{emacs} or @samp{vi}. - -@item enable-keypad -@vindex enable-keypad -When set to @samp{on}, Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is @samp{off}. - -@item expand-tilde -@vindex expand-tilde -If set to @samp{on}, tilde expansion is performed when Readline -attempts word completion. The default is @samp{off}. - -@vindex history-preserve-point -If set to @samp{on}, the history code attempts to place point at the -same location on each history line retrived with @code{previous-history} -or @code{next-history}. - -@item horizontal-scroll-mode -@vindex horizontal-scroll-mode -This variable can be set to either @samp{on} or @samp{off}. Setting it -to @samp{on} means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to @samp{off}. - -@item input-meta -@vindex input-meta -@vindex meta-flag -If set to @samp{on}, Readline will enable eight-bit input (it -will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The -default value is @samp{off}. The name @code{meta-flag} is a -synonym for this variable. - -@item isearch-terminators -@vindex isearch-terminators -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (@pxref{Searching}). -If this variable has not been given a value, the characters @key{ESC} and -@kbd{C-J} will terminate an incremental search. - -@item keymap -@vindex keymap -Sets Readline's idea of the current keymap for key binding commands. -Acceptable @code{keymap} names are -@code{emacs}, -@code{emacs-standard}, -@code{emacs-meta}, -@code{emacs-ctlx}, -@code{vi}, -@code{vi-move}, -@code{vi-command}, and -@code{vi-insert}. -@code{vi} is equivalent to @code{vi-command}; @code{emacs} is -equivalent to @code{emacs-standard}. The default value is @code{emacs}. -The value of the @code{editing-mode} variable also affects the -default keymap. - -@item mark-directories -If set to @samp{on}, completed directory names have a slash -appended. The default is @samp{on}. - -@item mark-modified-lines -@vindex mark-modified-lines -This variable, when set to @samp{on}, causes Readline to display an -asterisk (@samp{*}) at the start of history lines which have been modified. -This variable is @samp{off} by default. - -@item mark-symlinked-directories -@vindex mark-symlinked-directories -If set to @samp{on}, completed names which are symbolic links -to directories have a slash appended (subject to the value of -@code{mark-directories}). -The default is @samp{off}. - -@item match-hidden-files -@vindex match-hidden-files -This variable, when set to @samp{on}, causes Readline to match files whose -names begin with a @samp{.} (hidden files) when performing filename -completion, unless the leading @samp{.} is -supplied by the user in the filename to be completed. -This variable is @samp{on} by default. - -@item output-meta -@vindex output-meta -If set to @samp{on}, Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is @samp{off}. - -@item page-completions -@vindex page-completions -If set to @samp{on}, Readline uses an internal @code{more}-like pager -to display a screenful of possible completions at a time. -This variable is @samp{on} by default. - -@item print-completions-horizontally -If set to @samp{on}, Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is @samp{off}. - -@item show-all-if-ambiguous -@vindex show-all-if-ambiguous -This alters the default behavior of the completion functions. If -set to @samp{on}, -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is @samp{off}. - -@item visible-stats -@vindex visible-stats -If set to @samp{on}, a character denoting a file's type -is appended to the filename when listing possible -completions. The default is @samp{off}. - -@end table - -@item Key Bindings -The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. - -Once you know the name of the command, simply place on a line -in the init file the name of the key -you wish to bind the command to, a colon, and then the name of the -command. The name of the key -can be expressed in different ways, depending on what you find most -comfortable. - -In addition to command names, readline allows keys to be bound -to a string that is inserted when the key is pressed (a @var{macro}). - -@ifset BashFeatures -The @w{@code{bind -p}} command displays Readline function names and -bindings in a format that can put directly into an initialization file. -@xref{Bash Builtins}. -@end ifset - -@table @asis -@item @w{@var{keyname}: @var{function-name} or @var{macro}} -@var{keyname} is the name of a key spelled out in English. For example: -@example -Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -@end example - -In the above example, @kbd{C-u} is bound to the function -@code{universal-argument}, -@kbd{M-DEL} is bound to the function @code{backward-kill-word}, and -@kbd{C-o} is bound to run the macro -expressed on the right hand side (that is, to insert the text -@samp{> output} into the line). - -A number of symbolic character names are recognized while -processing this key binding syntax: -@var{DEL}, -@var{ESC}, -@var{ESCAPE}, -@var{LFD}, -@var{NEWLINE}, -@var{RET}, -@var{RETURN}, -@var{RUBOUT}, -@var{SPACE}, -@var{SPC}, -and -@var{TAB}. - -@item @w{"@var{keyseq}": @var{function-name} or @var{macro}} -@var{keyseq} differs from @var{keyname} above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some @sc{gnu} Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - -@example -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -@end example - -In the above example, @kbd{C-u} is again bound to the function -@code{universal-argument} (just as it was in the first example), -@samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file}, -and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert -the text @samp{Function Key 1}. - -@end table - -The following @sc{gnu} Emacs style escape sequences are available when -specifying key sequences: - -@table @code -@item @kbd{\C-} -control prefix -@item @kbd{\M-} -meta prefix -@item @kbd{\e} -an escape character -@item @kbd{\\} -backslash -@item @kbd{\"} -@key{"}, a double quotation mark -@item @kbd{\'} -@key{'}, a single quote or apostrophe -@end table - -In addition to the @sc{gnu} Emacs style escape sequences, a second -set of backslash escapes is available: - -@table @code -@item \a -alert (bell) -@item \b -backspace -@item \d -delete -@item \f -form feed -@item \n -newline -@item \r -carriage return -@item \t -horizontal tab -@item \v -vertical tab -@item \@var{nnn} -the eight-bit character whose value is the octal value @var{nnn} -(one to three digits) -@item \x@var{HH} -the eight-bit character whose value is the hexadecimal value @var{HH} -(one or two hex digits) -@end table - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including @samp{"} and @samp{'}. -For example, the following binding will make @samp{@kbd{C-x} \} -insert a single @samp{\} into the line: -@example -"\C-x\\": "\\" -@end example - -@end table - -@node Conditional Init Constructs -@subsection Conditional Init Constructs - -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are four parser directives used. - -@table @code -@item $if -The @code{$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. - -@table @code -@item mode -The @code{mode=} form of the @code{$if} directive is used to test -whether Readline is in @code{emacs} or @code{vi} mode. -This may be used in conjunction -with the @samp{set keymap} command, for instance, to set bindings in -the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if -Readline is starting out in @code{emacs} mode. - -@item term -The @code{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 -@samp{=} is tested against both the full name of the terminal and -the portion of the terminal name before the first @samp{-}. This -allows @code{sun} to match both @code{sun} and @code{sun-cmd}, -for instance. - -@item application -The @var{application} construct is used to include -application-specific settings. Each program using the Readline -library sets the @var{application name}, and you can test for -a particular value. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: -@example -$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -@end example -@end table - -@item $endif -This command, as seen in the previous example, terminates an -@code{$if} command. - -@item $else -Commands in this branch of the @code{$if} directive are executed if -the test fails. - -@item $include -This directive takes a single filename as an argument and reads commands -and bindings from that file. -For example, the following directive reads from @file{/etc/inputrc}: -@example -$include /etc/inputrc -@end example -@end table - -@node Sample Init File -@subsection Sample Init File - -Here is an example of an @var{inputrc} file. This illustrates key -binding, variable assignment, and conditional syntax. - -@example -@page -# 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 -@end example - -@node Bindable Readline Commands -@section Bindable Readline Commands - -@menu -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. -@end menu - -This section describes Readline commands that may be bound to key -sequences. -@ifset BashFeatures -You can list your key bindings by executing -@w{@code{bind -P}} or, for a more terse format, suitable for an -@var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.) -@end ifset -Command names without an accompanying key sequence are unbound by default. - -In the following descriptions, @dfn{point} refers to the current cursor -position, and @dfn{mark} refers to a cursor position saved by the -@code{set-mark} command. -The text between the point and mark is referred to as the @dfn{region}. - -@node Commands For Moving -@subsection Commands For Moving -@ftable @code -@item beginning-of-line (C-a) -Move to the start of the current line. - -@item end-of-line (C-e) -Move to the end of the line. - -@item forward-char (C-f) -Move forward a character. - -@item backward-char (C-b) -Move back a character. - -@item forward-word (M-f) -Move forward to the end of the next word. Words are composed of -letters and digits. - -@item backward-word (M-b) -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -@item clear-screen (C-l) -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -@item redraw-current-line () -Refresh the current line. By default, this is unbound. - -@end ftable - -@node Commands For History -@subsection Commands For Manipulating The History - -@ftable @code -@item accept-line (Newline or Return) -@ifset BashFeatures -Accept the line regardless of where the cursor is. -If this line is -non-empty, add it to the history list according to the setting of -the @env{HISTCONTROL} and @env{HISTIGNORE} variables. -If this line is a modified history line, then restore the history line -to its original state. -@end ifset -@ifclear BashFeatures -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -@code{add_history()}. -If this line is a modified history line, the history line is restored -to its original state. -@end ifclear - -@item previous-history (C-p) -Move `back' through the history list, fetching the previous command. - -@item next-history (C-n) -Move `forward' through the history list, fetching the next command. - -@item beginning-of-history (M-<) -Move to the first line in the history. - -@item end-of-history (M->) -Move to the end of the input history, i.e., the line currently -being entered. - -@item reverse-search-history (C-r) -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -@item forward-search-history (C-s) -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -@item non-incremental-reverse-search-history (M-p) -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -@item non-incremental-forward-search-history (M-n) -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -@item history-search-forward () -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. - -@item history-search-backward () -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -@item yank-nth-arg (M-C-y) -Insert the first argument to the previous command (usually -the second word on the previous line) at point. -With an argument @var{n}, -insert the @var{n}th word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the @var{n}th word from the end of the previous command. - -@item yank-last-arg (M-. or M-_) -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like @code{yank-nth-arg}. -Successive calls to @code{yank-last-arg} move back through the history -list, inserting the last argument of each line in turn. - -@end ftable - -@node Commands For Text -@subsection Commands For Changing Text - -@ftable @code -@item delete-char (C-d) -Delete the character at point. If point is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to @code{delete-char}, then -return @sc{eof}. - -@item backward-delete-char (Rubout) -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -@item forward-backward-delete-char () -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. - -@item quoted-insert (C-q or C-v) -Add the next character typed to the line verbatim. This is -how to insert key sequences like @kbd{C-q}, for example. - -@ifclear BashFeatures -@item tab-insert (M-@key{TAB}) -Insert a tab character. -@end ifclear - -@item self-insert (a, b, A, 1, !, @dots{}) -Insert yourself. - -@item transpose-chars (C-t) -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. - -@item transpose-words (M-t) -Drag the word before point past the word after point, -moving point past that word as well. -If the insertion point is at the end of the line, this transposes -the last two words on the line. - -@item upcase-word (M-u) -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -@item downcase-word (M-l) -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -@item capitalize-word (M-c) -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -@item overwrite-mode () -Toggle overwrite mode. With an explicit positive numeric argument, -switches to overwrite mode. With an explicit non-positive numeric -argument, switches to insert mode. This command affects only -@code{emacs} mode; @code{vi} mode does overwrite differently. -Each call to @code{readline()} starts in insert mode. - -In overwrite mode, characters bound to @code{self-insert} replace -the text at point rather than pushing the text to the right. -Characters bound to @code{backward-delete-char} replace the character -before point with a space. - -By default, this command is unbound. - -@end ftable - -@node Commands For Killing -@subsection Killing And Yanking - -@ftable @code - -@item kill-line (C-k) -Kill the text from point to the end of the line. - -@item backward-kill-line (C-x Rubout) -Kill backward to the beginning of the line. - -@item unix-line-discard (C-u) -Kill backward from the cursor to the beginning of the current line. - -@item kill-whole-line () -Kill all characters on the current line, no matter where point is. -By default, this is unbound. - -@item kill-word (M-d) -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as @code{forward-word}. - -@item backward-kill-word (M-@key{DEL}) -Kill the word behind point. -Word boundaries are the same as @code{backward-word}. - -@item unix-word-rubout (C-w) -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -@item delete-horizontal-space () -Delete all spaces and tabs around point. By default, this is unbound. - -@item kill-region () -Kill the text in the current region. -By default, this command is unbound. - -@item copy-region-as-kill () -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -@item copy-backward-word () -Copy the word before point to the kill buffer. -The word boundaries are the same as @code{backward-word}. -By default, this command is unbound. - -@item copy-forward-word () -Copy the word following point to the kill buffer. -The word boundaries are the same as @code{forward-word}. -By default, this command is unbound. - -@item yank (C-y) -Yank the top of the kill ring into the buffer at point. - -@item yank-pop (M-y) -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is @code{yank} or @code{yank-pop}. -@end ftable - -@node Numeric Arguments -@subsection Specifying Numeric Arguments -@ftable @code - -@item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--}) -Add this digit to the argument already accumulating, or start a new -argument. @kbd{M--} starts a negative argument. - -@item universal-argument () -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing @code{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. -@end ftable - -@node Commands For Completion -@subsection Letting Readline Type For You - -@ftable @code -@item complete (@key{TAB}) -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -@ifset BashFeatures -Bash attempts completion treating the text as a variable (if the -text begins with @samp{$}), username (if the text begins with -@samp{~}), hostname (if the text begins with @samp{@@}), or -command (including aliases and functions) in turn. If none -of these produces a match, filename completion is attempted. -@end ifset -@ifclear BashFeatures -The default is filename completion. -@end ifclear - -@item possible-completions (M-?) -List the possible completions of the text before point. - -@item insert-completions (M-*) -Insert all completions of the text before point that would have -been generated by @code{possible-completions}. - -@item menu-complete () -Similar to @code{complete}, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of @code{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 -(subject to the setting of @code{bell-style}) -and the original text is restored. -An argument of @var{n} moves @var{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 @key{TAB}, but is unbound -by default. - -@item delete-char-or-list () -Deletes the character under the cursor if not at the beginning or -end of the line (like @code{delete-char}). -If at the end of the line, behaves identically to -@code{possible-completions}. -This command is unbound by default. - -@ifset BashFeatures -@item complete-filename (M-/) -Attempt filename completion on the text before point. - -@item possible-filename-completions (C-x /) -List the possible completions of the text before point, -treating it as a filename. - -@item complete-username (M-~) -Attempt completion on the text before point, treating -it as a username. - -@item possible-username-completions (C-x ~) -List the possible completions of the text before point, -treating it as a username. - -@item complete-variable (M-$) -Attempt completion on the text before point, treating -it as a shell variable. - -@item possible-variable-completions (C-x $) -List the possible completions of the text before point, -treating it as a shell variable. - -@item complete-hostname (M-@@) -Attempt completion on the text before point, treating -it as a hostname. - -@item possible-hostname-completions (C-x @@) -List the possible completions of the text before point, -treating it as a hostname. - -@item complete-command (M-!) -Attempt completion on the text before point, treating -it as a command name. Command completion attempts to -match the text against aliases, reserved words, shell -functions, shell builtins, and finally executable filenames, -in that order. - -@item possible-command-completions (C-x !) -List the possible completions of the text before point, -treating it as a command name. - -@item dynamic-complete-history (M-@key{TAB}) -Attempt completion on the text before point, comparing -the text against lines from the history list for possible -completion matches. - -@item complete-into-braces (M-@{) -Perform filename completion and insert the list of possible completions -enclosed within braces so the list is available to the shell -(@pxref{Brace Expansion}). - -@end ifset -@end ftable - -@node Keyboard Macros -@subsection Keyboard Macros -@ftable @code - -@item start-kbd-macro (C-x () -Begin saving the characters typed into the current keyboard macro. - -@item end-kbd-macro (C-x )) -Stop saving the characters typed into the current keyboard macro -and save the definition. - -@item call-last-kbd-macro (C-x e) -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -@end ftable - -@node Miscellaneous Commands -@subsection Some Miscellaneous Commands -@ftable @code - -@item re-read-init-file (C-x C-r) -Read in the contents of the @var{inputrc} file, and incorporate -any bindings or variable assignments found there. - -@item abort (C-g) -Abort the current editing command and -ring the terminal's bell (subject to the setting of -@code{bell-style}). - -@item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{}) -If the metafied character @var{x} is lowercase, run the command -that is bound to the corresponding uppercase character. - -@item prefix-meta (@key{ESC}) -Metafy the next character typed. This is for keyboards -without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing -@kbd{M-f}. - -@item undo (C-_ or C-x C-u) -Incremental undo, separately remembered for each line. - -@item revert-line (M-r) -Undo all changes made to this line. This is like executing the @code{undo} -command enough times to get back to the beginning. - -@ifset BashFeatures -@item tilde-expand (M-&) -@end ifset -@ifclear BashFeatures -@item tilde-expand (M-~) -@end ifclear -Perform tilde expansion on the current word. - -@item set-mark (C-@@) -Set the mark to the point. If a -numeric argument is supplied, the mark is set to that position. - -@item exchange-point-and-mark (C-x C-x) -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -@item character-search (C-]) -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -@item character-search-backward (M-C-]) -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -@item insert-comment (M-#) -Without a numeric argument, the value of the @code{comment-begin} -variable is inserted at the beginning of the current line. -If a numeric argument is supplied, this command acts as a toggle: if -the characters at the beginning of the line do not match the value -of @code{comment-begin}, the value is inserted, otherwise -the characters in @code{comment-begin} are deleted from the beginning of -the line. -In either case, the line is accepted as if a newline had been typed. -@ifset BashFeatures -The default value of @code{comment-begin} causes this command -to make the current line a shell comment. -If a numeric argument causes the comment character to be removed, the line -will be executed by the shell. -@end ifset - -@item dump-functions () -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an @var{inputrc} file. This command is unbound by default. - -@item dump-variables () -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an @var{inputrc} file. This command is unbound by default. - -@item dump-macros () -Print all of the Readline key sequences bound to macros and the -strings they output. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an @var{inputrc} file. This command is unbound by default. - -@ifset BashFeatures -@item glob-complete-word (M-g) -The word before point is treated as a pattern for pathname expansion, -with an asterisk implicitly appended. This pattern is used to -generate a list of matching file names for possible completions. - -@item glob-expand-word (C-x *) -The word before point is treated as a pattern for pathname expansion, -and the list of matching file names is inserted, replacing the word. -If a numeric argument is supplied, a @samp{*} is appended before -pathname expansion. - -@item glob-list-expansions (C-x g) -The list of expansions that would have been generated by -@code{glob-expand-word} is displayed, and the line is redrawn. -If a numeric argument is supplied, a @samp{*} is appended before -pathname expansion. - -@item display-shell-version (C-x C-v) -Display version information about the current instance of Bash. - -@item shell-expand-line (M-C-e) -Expand the line as the shell does. -This performs alias and history expansion as well as all of the shell -word expansions (@pxref{Shell Expansions}). - -@item history-expand-line (M-^) -Perform history expansion on the current line. - -@item magic-space () -Perform history expansion on the current line and insert a space -(@pxref{History Interaction}). - -@item alias-expand-line () -Perform alias expansion on the current line (@pxref{Aliases}). - -@item history-and-alias-expand-line () -Perform history and alias expansion on the current line. - -@item insert-last-argument (M-. or M-_) -A synonym for @code{yank-last-arg}. - -@item operate-and-get-next (C-o) -Accept the current line for execution and fetch the next line -relative to the current line from the history for editing. Any -argument is ignored. - -@item edit-and-execute-command (C-xC-e) -Invoke an editor on the current command line, and execute the result as shell -commands. -Bash attempts to invoke -@code{$FCEDIT}, @code{$EDITOR}, and @code{emacs} -as the editor, in that order. - -@end ifset - -@ifclear BashFeatures -@item emacs-editing-mode (C-e) -When in @code{vi} command mode, this causes a switch to @code{emacs} -editing mode. - -@item vi-editing-mode (M-C-j) -When in @code{emacs} editing mode, this causes a switch to @code{vi} -editing mode. - -@end ifclear - -@end ftable - -@node Readline vi Mode -@section Readline vi Mode - -While the Readline library does not have a full set of @code{vi} -editing functions, it does contain enough to allow simple editing -of the line. The Readline @code{vi} mode behaves as specified in -the @sc{posix} 1003.2 standard. - -@ifset BashFeatures -In order to switch interactively between @code{emacs} and @code{vi} -editing modes, use the @samp{set -o emacs} and @samp{set -o vi} -commands (@pxref{The Set Builtin}). -@end ifset -@ifclear BashFeatures -In order to switch interactively between @code{emacs} and @code{vi} -editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode -when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode). -@end ifclear -The Readline default is @code{emacs} mode. - -When you enter a line in @code{vi} mode, you are already placed in -`insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC} -switches you into `command' mode, where you can edit the text of the -line with the standard @code{vi} movement keys, move to previous -history lines with @samp{k} and subsequent lines with @samp{j}, and -so forth. - -@ifset BashFeatures -@node Programmable Completion -@section Programmable Completion -@cindex programmable completion - -When word completion is attempted for an argument to a command for -which a completion specification (a @var{compspec}) has been defined -using the @code{complete} builtin (@pxref{Programmable Completion Builtins}), -the programmable completion facilities are invoked. - -First, the command name is identified. -If a compspec has been defined for that command, the -compspec is used to generate the list of possible completions for the word. -If the command word is a full pathname, a compspec for the full -pathname is searched for first. -If no compspec is found for the full pathname, an attempt is made to -find a compspec for the portion following the final slash. - -Once a compspec has been found, it is used to generate the list of -matching words. -If a compspec is not found, the default Bash completion -described above (@pxref{Commands For Completion}) is performed. - -First, the actions specified by the compspec are used. -Only matches which are prefixed by the word being completed are -returned. -When the @option{-f} or @option{-d} option is used for filename or -directory name completion, the shell variable @env{FIGNORE} is -used to filter the matches. -@xref{Bash Variables}, for a description of @env{FIGNORE}. - -Any completions specified by a filename expansion pattern to the -@option{-G} option are generated next. -The words generated by the pattern need not match the word being completed. -The @env{GLOBIGNORE} shell variable is not used to filter the matches, -but the @env{FIGNORE} shell variable is used. - -Next, the string specified as the argument to the @option{-W} option -is considered. -The string is first split using the characters in the @env{IFS} -special variable as delimiters. -Shell quoting is honored. -Each word is then expanded using -brace expansion, tilde expansion, parameter and variable expansion, -command substitution, arithmetic expansion, and pathname expansion, -as described above (@pxref{Shell Expansions}). -The results are split using the rules described above -(@pxref{Word Splitting}). -The results of the expansion are prefix-matched against the word being -completed, and the matching words become the possible completions. - -After these matches have been generated, any shell function or command -specified with the @option{-F} and @option{-C} options is invoked. -When the command or function is invoked, the @env{COMP_LINE} and -@env{COMP_POINT} variables are assigned values as described above -(@pxref{Bash Variables}). -If a shell function is being invoked, the @env{COMP_WORDS} and -@env{COMP_CWORD} variables are also set. -When the function or command is invoked, the first argument is the -name of the command whose arguments are being completed, the -second argument is the word being completed, and the third argument -is the word preceding the word being completed on the current command line. -No filtering of the generated completions against the word being completed -is performed; the function or command has complete freedom in generating -the matches. - -Any function specified with @option{-F} is invoked first. -The function may use any of the shell facilities, including the -@code{compgen} builtin described below -(@pxref{Programmable Completion Builtins}), to generate the matches. -It must put the possible completions in the @env{COMPREPLY} array -variable. - -Next, any command specified with the @option{-C} option is invoked -in an environment equivalent to command substitution. -It should print a list of completions, one per line, to -the standard output. -Backslash may be used to escape a newline, if necessary. - -After all of the possible completions are generated, any filter -specified with the @option{-X} option is applied to the list. -The filter is a pattern as used for pathname expansion; a @samp{&} -in the pattern is replaced with the text of the word being completed. -A literal @samp{&} may be escaped with a backslash; the backslash -is removed before attempting a match. -Any completion that matches the pattern will be removed from the list. -A leading @samp{!} negates the pattern; in this case any completion -not matching the pattern will be removed. - -Finally, any prefix and suffix specified with the @option{-P} and @option{-S} -options are added to each member of the completion list, and the result is -returned to the Readline completion code as the list of possible -completions. - -If the previously-applied actions do not generate any matches, and the -@option{-o dirnames} option was supplied to @code{complete} when the -compspec was defined, directory name completion is attempted. - -By default, if a compspec is found, whatever it generates is returned to -the completion code as the full set of possible completions. -The default Bash completions are not attempted, and the Readline default -of filename completion is disabled. -If the @option{-o default} option was supplied to @code{complete} when the -compspec was defined, Readline's default completion will be performed -if the compspec generates no matches. - -When a compspec indicates that directory name completion is desired, -the programmable completion functions force Readline to append a slash -to completed names which are symbolic links to directories, subject to -the value of the @var{mark-directories} Readline variable, regardless -of the setting of the @var{mark-symlinked-directories} Readline variable. - -@node Programmable Completion Builtins -@section Programmable Completion Builtins -@cindex completion builtins - -Two builtin commands are available to manipulate the programmable completion -facilities. - -@table @code -@item compgen -@btindex compgen -@example -@code{compgen [@var{option}] [@var{word}]} -@end example - -Generate possible completion matches for @var{word} according to -the @var{option}s, which may be any option accepted by the -@code{complete} -builtin with the exception of @option{-p} and @option{-r}, and write -the matches to the standard output. -When using the @option{-F} or @option{-C} options, the various shell variables -set by the programmable completion facilities, while available, will not -have useful values. - -The matches will be generated in the same way as if the programmable -completion code had generated them directly from a completion specification -with the same flags. -If @var{word} is specified, only those completions matching @var{word} -will be displayed. - -The return value is true unless an invalid option is supplied, or no -matches were generated. - -@item complete -@btindex complete -@example -@code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] -[-P @var{prefix}] [-S @var{suffix}] [-X @var{filterpat}] [-F @var{function}] -[-C @var{command}] @var{name} [@var{name} @dots{}]} -@code{complete -pr [@var{name} @dots{}]} -@end example - -Specify how arguments to each @var{name} should be completed. -If the @option{-p} option is supplied, or if no options are supplied, existing -completion specifications are printed in a way that allows them to be -reused as input. -The @option{-r} option removes a completion specification for -each @var{name}, or, if no @var{name}s are supplied, all -completion specifications. - -The process of applying these completion specifications when word completion -is attempted is described above (@pxref{Programmable Completion}). - -Other options, if specified, have the following meanings. -The arguments to the @option{-G}, @option{-W}, and @option{-X} options -(and, if necessary, the @option{-P} and @option{-S} options) -should be quoted to protect them from expansion before the -@code{complete} builtin is invoked. - - -@table @code -@item -o @var{comp-option} -The @var{comp-option} controls several aspects of the compspec's behavior -beyond the simple generation of completions. -@var{comp-option} may be one of: - -@table @code - -@item default -Use Readline's default filename completion if the compspec generates -no matches. - -@item dirnames -Perform directory name completion if the compspec generates no matches. - -@item filenames -Tell Readline that the compspec generates filenames, so it can perform any -filename\-specific processing (like adding a slash to directory names or -suppressing trailing spaces). This option is intended to be used with -shell functions specified with @option{-F}. - -@item nospace -Tell Readline not to append a space (the default) to words completed at -the end of the line. -@end table - -@item -A @var{action} -The @var{action} may be one of the following to generate a list of possible -completions: - -@table @code -@item alias -Alias names. May also be specified as @option{-a}. - -@item arrayvar -Array variable names. - -@item binding -Readline key binding names (@pxref{Bindable Readline Commands}). - -@item builtin -Names of shell builtin commands. May also be specified as @option{-b}. - -@item command -Command names. May also be specified as @option{-c}. - -@item directory -Directory names. May also be specified as @option{-d}. - -@item disabled -Names of disabled shell builtins. - -@item enabled -Names of enabled shell builtins. - -@item export -Names of exported shell variables. May also be specified as @option{-e}. - -@item file -File names. May also be specified as @option{-f}. - -@item function -Names of shell functions. - -@item group -Group names. May also be specified as @option{-g}. - -@item helptopic -Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}). - -@item hostname -Hostnames, as taken from the file specified by the -@env{HOSTFILE} shell variable (@pxref{Bash Variables}). - -@item job -Job names, if job control is active. May also be specified as @option{-j}. - -@item keyword -Shell reserved words. May also be specified as @option{-k}. - -@item running -Names of running jobs, if job control is active. - -@item service -Service names. May also be specified as @option{-s}. - -@item setopt -Valid arguments for the @option{-o} option to the @code{set} builtin -(@pxref{The Set Builtin}). - -@item shopt -Shell option names as accepted by the @code{shopt} builtin -(@pxref{Bash Builtins}). - -@item signal -Signal names. - -@item stopped -Names of stopped jobs, if job control is active. - -@item user -User names. May also be specified as @option{-u}. - -@item variable -Names of all shell variables. May also be specified as @option{-v}. -@end table - -@item -G @var{globpat} -The filename expansion pattern @var{globpat} is expanded to generate -the possible completions. - -@item -W @var{wordlist} -The @var{wordlist} is split using the characters in the -@env{IFS} special variable as delimiters, and each resultant word -is expanded. -The possible completions are the members of the resultant list which -match the word being completed. - -@item -C @var{command} -@var{command} is executed in a subshell environment, and its output is -used as the possible completions. - -@item -F @var{function} -The shell function @var{function} is executed in the current shell -environment. -When it finishes, the possible completions are retrieved from the value -of the @env{COMPREPLY} array variable. - -@item -X @var{filterpat} -@var{filterpat} is a pattern as used for filename expansion. -It is applied to the list of possible completions generated by the -preceding options and arguments, and each completion matching -@var{filterpat} is removed from the list. -A leading @samp{!} in @var{filterpat} negates the pattern; in this -case, any completion not matching @var{filterpat} is removed. - -@item -P @var{prefix} -@var{prefix} is added at the beginning of each possible completion -after all other options have been applied. - -@item -S @var{suffix} -@var{suffix} is appended to each possible completion -after all other options have been applied. -@end table - -The return value is true unless an invalid option is supplied, an option -other than @option{-p} or @option{-r} is supplied without a @var{name} -argument, an attempt is made to remove a completion specification for -a @var{name} for which no specification exists, or -an error occurs adding a completion specification. - -@end table -@end ifset diff --git a/readline-4.3.orig/doc/rluserman.dvi b/readline-4.3.orig/doc/rluserman.dvi Binary files differdeleted file mode 100644 index a2339aa..0000000 --- a/readline-4.3.orig/doc/rluserman.dvi +++ /dev/null diff --git a/readline-4.3.orig/doc/rluserman.html b/readline-4.3.orig/doc/rluserman.html deleted file mode 100644 index ac8bfbd..0000000 --- a/readline-4.3.orig/doc/rluserman.html +++ /dev/null @@ -1,2184 +0,0 @@ -<HTML> -<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> -<!-- Created on June, 27 2002 by texi2html 1.64 --> -<!-- -Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) - Karl Berry <karl@freefriends.org> - Olaf Bachmann <obachman@mathematik.uni-kl.de> - and many others. -Maintained by: Olaf Bachmann <obachman@mathematik.uni-kl.de> -Send bugs and suggestions to <texi2html@mathematik.uni-kl.de> - ---> -<HEAD> -<TITLE>GNU Readline Library: </TITLE> - -<META NAME="description" CONTENT="GNU Readline Library: "> -<META NAME="keywords" CONTENT="GNU Readline Library: "> -<META NAME="resource-type" CONTENT="document"> -<META NAME="distribution" CONTENT="global"> -<META NAME="Generator" CONTENT="texi2html 1.64"> - -</HEAD> - -<BODY LANG="" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"> - -<A NAME="SEC_Top"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>GNU Readline Library</H1></P><P> - -This document describes the end user interface of 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. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC1">1. Command Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">GNU Readline User's Manual.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<HR SIZE=1> -<A NAME="SEC1"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<A NAME="Command Line Editing"></A> -<H1> 1. Command Line Editing </H1> -<!--docid::SEC1::--> -<P> - -This chapter describes the basic features of the GNU -command line editing interface. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Notation used in this text.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC3">1.2 Readline Interaction</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The minimum set of commands for editing a line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC9">1.3 Readline Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Customizing Readline from a user's view.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A description of most of the Readline commands - available for binding</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">A short description of how to make Readline - behave like the vi editor.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Introduction and Notation"></A> -<HR SIZE="6"> -<A NAME="SEC2"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.1 Introduction to Line Editing </H2> -<!--docid::SEC2::--> -<P> - -The following paragraphs describe the notation used to represent -keystrokes. -</P><P> - -The text <KBD>C-k</KBD> is read as `Control-K' and describes the character -produced when the <KBD>k</KBD> key is pressed while the Control key -is depressed. -</P><P> - -The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD> -key is pressed. -The Meta key is labeled <KBD>ALT</KBD> on many keyboards. -On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of -the space bar), the <KBD>ALT</KBD> on the left side is generally set to -work as a Meta key. -The <KBD>ALT</KBD> 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. -</P><P> - -If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as -a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> -<EM>first</EM>, and then typing <KBD>k</KBD>. -Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key. -</P><P> - -The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the -character produced by <EM>metafying</EM> <KBD>C-k</KBD>. -</P><P> - -In addition, several keys have their own names. Specifically, -<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all -stand for themselves when seen in this text, or in an init file -(see section <A HREF="rluserman.html#SEC9">1.3 Readline Init File</A>). -If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will -produce the desired character. -The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on -some keyboards. -</P><P> - -<A NAME="Readline Interaction"></A> -<HR SIZE="6"> -<A NAME="SEC3"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC2"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.2 Readline Interaction </H2> -<!--docid::SEC3::--> -<P> - -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 <KBD>RET</KBD>. You do not have to be at the -end of the line to press <KBD>RET</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">The least you need to know about Readline.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the input line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">How to delete text, and how to get it back!</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Giving numeric arguments to commands.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Searching through previous lines.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Readline Bare Essentials"></A> -<HR SIZE="6"> -<A NAME="SEC4"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.1 Readline Bare Essentials </H3> -<!--docid::SEC4::--> -<P> - -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. -</P><P> - -Sometimes you may mistype a character, and -not notice the error until you have typed several other characters. In -that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then -correct your mistake. Afterwards, you can move the cursor to the right -with <KBD>C-f</KBD>. -</P><P> - -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. -</P><P> - -<DL COMPACT> -<DT><KBD>C-b</KBD> -<DD>Move back one character. -<DT><KBD>C-f</KBD> -<DD>Move forward one character. -<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD> -<DD>Delete the character to the left of the cursor. -<DT><KBD>C-d</KBD> -<DD>Delete the character underneath the cursor. -<DT>Printing characters -<DD>Insert the character into the line at the cursor. -<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD> -<DD>Undo the last editing command. You can undo all the way back to an -empty line. -</DL> -<P> - -(Depending on your configuration, the <KBD>Backspace</KBD> key be set to -delete the character to the left of the cursor and the <KBD>DEL</KBD> key set -to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather -than the character to the left of the cursor.) -</P><P> - -<A NAME="Readline Movement Commands"></A> -<HR SIZE="6"> -<A NAME="SEC5"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC4"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.2 Readline Movement Commands </H3> -<!--docid::SEC5::--> -<P> - -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 <KBD>C-b</KBD>, <KBD>C-f</KBD>, -<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly -about the line. -</P><P> - -<DL COMPACT> -<DT><KBD>C-a</KBD> -<DD>Move to the start of the line. -<DT><KBD>C-e</KBD> -<DD>Move to the end of the line. -<DT><KBD>M-f</KBD> -<DD>Move forward a word, where a word is composed of letters and digits. -<DT><KBD>M-b</KBD> -<DD>Move backward a word. -<DT><KBD>C-l</KBD> -<DD>Clear the screen, reprinting the current line at the top. -</DL> -<P> - -Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. -</P><P> - -<A NAME="Readline Killing Commands"></A> -<HR SIZE="6"> -<A NAME="SEC6"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC5"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.3 Readline Killing Commands </H3> -<!--docid::SEC6::--> -<P> - -<A NAME="IDX1"></A> -<A NAME="IDX2"></A> -</P><P> - -<EM>Killing</EM> text means to delete the text from the line, but to save -it away for later use, usually by <EM>yanking</EM> (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) -</P><P> - -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. -</P><P> - -When you use a kill command, the text is saved in a <EM>kill-ring</EM>. -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. -<A NAME="IDX3"></A> -</P><P> - -Here is the list of commands for killing text. -</P><P> - -<DL COMPACT> -<DT><KBD>C-k</KBD> -<DD>Kill the text from the current cursor position to the end of the line. -<P> - -<DT><KBD>M-d</KBD> -<DD>Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by <KBD>M-f</KBD>. -<P> - -<DT><KBD>M-<KBD>DEL</KBD></KBD> -<DD>Kill from the cursor the start of the current word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by <KBD>M-b</KBD>. -<P> - -<DT><KBD>C-w</KBD> -<DD>Kill from the cursor to the previous whitespace. This is different than -<KBD>M-<KBD>DEL</KBD></KBD> because the word boundaries differ. -<P> - -</DL> -<P> - -Here is how to <EM>yank</EM> the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. -</P><P> - -<DL COMPACT> -<DT><KBD>C-y</KBD> -<DD>Yank the most recently killed text back into the buffer at the cursor. -<P> - -<DT><KBD>M-y</KBD> -<DD>Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>. -</DL> -<P> - -<A NAME="Readline Arguments"></A> -<HR SIZE="6"> -<A NAME="SEC7"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC6"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.4 Readline Arguments </H3> -<!--docid::SEC7::--> -<P> - -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the <I>sign</I> 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 <SAMP>`M-- C-k'</SAMP>. -</P><P> - -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 (<SAMP>`-'</SAMP>), 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 <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>, -which will delete the next ten characters on the input line. -</P><P> - -<A NAME="Searching"></A> -<HR SIZE="6"> -<A NAME="SEC8"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC7"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC3"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.2.5 Searching for Commands in the History </H3> -<!--docid::SEC8::--> -<P> - -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <EM>incremental</EM> and <EM>non-incremental</EM>. -</P><P> - -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 -<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. -The characters present in the value of the <CODE>isearch-terminators</CODE> variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the <KBD>ESC</KBD> and -<KBD>C-J</KBD> characters will terminate an incremental search. -<KBD>C-g</KBD> 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. -</P><P> - -To find other matching entries in the history list, type <KBD>C-r</KBD> or -<KBD>C-s</KBD> 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 <KBD>RET</KBD> will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. -</P><P> - -Readline remembers the last incremental search string. If two -<KBD>C-r</KBD>s are typed without any intervening characters defining a new -search string, any remembered search string is used. -</P><P> - -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. -</P><P> - -<A NAME="Readline Init File"></A> -<HR SIZE="6"> -<A NAME="SEC9"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC8"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.3 Readline Init File </H2> -<!--docid::SEC9::--> -<P> - -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 <EM>inputrc</EM> file, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If -that variable is unset, the default is <TT>`~/.inputrc'</TT>. -</P><P> - -When a program which uses the Readline library starts up, the -init file is read, and the key bindings are set. -</P><P> - -In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus -incorporating any changes that you might have made to it. -</P><P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Syntax for the commands in the inputrc file.</TD></TR> -</TABLE> - -<br> -<TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Conditional key bindings in the inputrc file.</TD></TR> -</TABLE> - -<br> -<TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">An example inputrc file.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -<A NAME="Readline Init File Syntax"></A> -<HR SIZE="6"> -<A NAME="SEC10"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.1 Readline Init File Syntax </H3> -<!--docid::SEC10::--> -<P> - -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a <SAMP>`#'</SAMP> are comments. -Lines beginning with a <SAMP>`$'</SAMP> indicate conditional -constructs (see section <A HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. -</P><P> - -<DL COMPACT> -<DT>Variable Settings -<DD>You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the <CODE>set</CODE> command within the init file. -The syntax is simple: -<P> - -<TABLE><tr><td> </td><td class=example><pre>set <VAR>variable</VAR> <VAR>value</VAR> -</pre></td></tr></table></P><P> - -Here, for example, is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: -</P><P> - -<TABLE><tr><td> </td><td class=example><pre>set editing-mode vi -</pre></td></tr></table></P><P> - -Variable names and values, where appropriate, are recognized without regard -to case. -</P><P> - -A great deal of run-time behavior is changeable with the following -variables. -</P><P> - -<A NAME="IDX4"></A> -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD><A NAME="IDX5"></A> -Controls what happens when Readline wants to ring the terminal bell. -If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to -<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available. -If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring -the terminal's bell. -<P> - -<DT><CODE>comment-begin</CODE> -<DD><A NAME="IDX6"></A> -The string to insert at the beginning of the line when the -<CODE>insert-comment</CODE> command is executed. The default value -is <CODE>"#"</CODE>. -<P> - -<DT><CODE>completion-ignore-case</CODE> -<DD>If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>completion-query-items</CODE> -<DD><A NAME="IDX7"></A> -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -The default limit is <CODE>100</CODE>. -<P> - -<DT><CODE>convert-meta</CODE> -<DD><A NAME="IDX8"></A> -If set to <SAMP>`on'</SAMP>, Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an <KBD>ESC</KBD> character, converting them to a -meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. -<P> - -<DT><CODE>disable-completion</CODE> -<DD><A NAME="IDX9"></A> -If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>editing-mode</CODE> -<DD><A NAME="IDX10"></A> -The <CODE>editing-mode</CODE> 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 <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>. -<P> - -<DT><CODE>enable-keypad</CODE> -<DD><A NAME="IDX11"></A> -When set to <SAMP>`on'</SAMP>, Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>expand-tilde</CODE> -<DD><A NAME="IDX12"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. -<P> - -<A NAME="IDX13"></A> -If set to <SAMP>`on'</SAMP>, the history code attempts to place point at the -same location on each history line retrived with <CODE>previous-history</CODE> -or <CODE>next-history</CODE>. -</P><P> - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD><A NAME="IDX14"></A> -This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it -to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>input-meta</CODE> -<DD><A NAME="IDX15"></A> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. -<P> - -<DT><CODE>isearch-terminators</CODE> -<DD><A NAME="IDX17"></A> -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A>). -If this variable has not been given a value, the characters <KBD>ESC</KBD> and -<KBD>C-J</KBD> will terminate an incremental search. -<P> - -<DT><CODE>keymap</CODE> -<DD><A NAME="IDX18"></A> -Sets Readline's idea of the current keymap for key binding commands. -Acceptable <CODE>keymap</CODE> names are -<CODE>emacs</CODE>, -<CODE>emacs-standard</CODE>, -<CODE>emacs-meta</CODE>, -<CODE>emacs-ctlx</CODE>, -<CODE>vi</CODE>, -<CODE>vi-move</CODE>, -<CODE>vi-command</CODE>, and -<CODE>vi-insert</CODE>. -<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is -equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>. -The value of the <CODE>editing-mode</CODE> variable also affects the -default keymap. -<P> - -<DT><CODE>mark-directories</CODE> -<DD>If set to <SAMP>`on'</SAMP>, completed directory names have a slash -appended. The default is <SAMP>`on'</SAMP>. -<P> - -<DT><CODE>mark-modified-lines</CODE> -<DD><A NAME="IDX19"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an -asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified. -This variable is <SAMP>`off'</SAMP> by default. -<P> - -<DT><CODE>mark-symlinked-directories</CODE> -<DD><A NAME="IDX20"></A> -If set to <SAMP>`on'</SAMP>, completed names which are symbolic links -to directories have a slash appended (subject to the value of -<CODE>mark-directories</CODE>). -The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>match-hidden-files</CODE> -<DD><A NAME="IDX21"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to match files whose -names begin with a <SAMP>`.'</SAMP> (hidden files) when performing filename -completion, unless the leading <SAMP>`.'</SAMP> is -supplied by the user in the filename to be completed. -This variable is <SAMP>`on'</SAMP> by default. -<P> - -<DT><CODE>output-meta</CODE> -<DD><A NAME="IDX22"></A> -If set to <SAMP>`on'</SAMP>, Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>page-completions</CODE> -<DD><A NAME="IDX23"></A> -If set to <SAMP>`on'</SAMP>, Readline uses an internal <CODE>more</CODE>-like pager -to display a screenful of possible completions at a time. -This variable is <SAMP>`on'</SAMP> by default. -<P> - -<DT><CODE>print-completions-horizontally</CODE> -<DD>If set to <SAMP>`on'</SAMP>, Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>show-all-if-ambiguous</CODE> -<DD><A NAME="IDX24"></A> -This alters the default behavior of the completion functions. If -set to <SAMP>`on'</SAMP>, -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is <SAMP>`off'</SAMP>. -<P> - -<DT><CODE>visible-stats</CODE> -<DD><A NAME="IDX25"></A> -If set to <SAMP>`on'</SAMP>, a character denoting a file's type -is appended to the filename when listing possible -completions. The default is <SAMP>`off'</SAMP>. -<P> - -</DL> -<P> - -<DT>Key Bindings -<DD>The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. -<P> - -Once you know the name of the command, simply place on a line -in the init file the name of the key -you wish to bind the command to, a colon, and then the name of the -command. The name of the key -can be expressed in different ways, depending on what you find most -comfortable. -</P><P> - -In addition to command names, readline allows keys to be bound -to a string that is inserted when the key is pressed (a <VAR>macro</VAR>). -</P><P> - -<DL COMPACT> -<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD><VAR>keyname</VAR> is the name of a key spelled out in English. For example: -<TABLE><tr><td> </td><td class=example><pre>Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</pre></td></tr></table><P> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE>, -<KBD>M-DEL</KBD> is bound to the function <CODE>backward-kill-word</CODE>, and -<KBD>C-o</KBD> is bound to run the macro -expressed on the right hand side (that is, to insert the text -<SAMP>`> output'</SAMP> into the line). -</P><P> - -A number of symbolic character names are recognized while -processing this key binding syntax: -<VAR>DEL</VAR>, -<VAR>ESC</VAR>, -<VAR>ESCAPE</VAR>, -<VAR>LFD</VAR>, -<VAR>NEWLINE</VAR>, -<VAR>RET</VAR>, -<VAR>RETURN</VAR>, -<VAR>RUBOUT</VAR>, -<VAR>SPACE</VAR>, -<VAR>SPC</VAR>, -and -<VAR>TAB</VAR>. -</P><P> - -<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD><VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. -<P> - -<TABLE><tr><td> </td><td class=example><pre>"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</pre></td></tr></table></P><P> - -In the above example, <KBD>C-u</KBD> is again bound to the function -<CODE>universal-argument</CODE> (just as it was in the first example), -<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>, -and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert -the text <SAMP>`Function Key 1'</SAMP>. -</P><P> - -</DL> -<P> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: -</P><P> - -<DL COMPACT> -<DT><CODE><KBD>\C-</KBD></CODE> -<DD>control prefix -<DT><CODE><KBD>\M-</KBD></CODE> -<DD>meta prefix -<DT><CODE><KBD>\e</KBD></CODE> -<DD>an escape character -<DT><CODE><KBD>\\</KBD></CODE> -<DD>backslash -<DT><CODE><KBD>\"</KBD></CODE> -<DD><KBD>"</KBD>, a double quotation mark -<DT><CODE><KBD>\'</KBD></CODE> -<DD><KBD>'</KBD>, a single quote or apostrophe -</DL> -<P> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: -</P><P> - -<DL COMPACT> -<DT><CODE>\a</CODE> -<DD>alert (bell) -<DT><CODE>\b</CODE> -<DD>backspace -<DT><CODE>\d</CODE> -<DD>delete -<DT><CODE>\f</CODE> -<DD>form feed -<DT><CODE>\n</CODE> -<DD>newline -<DT><CODE>\r</CODE> -<DD>carriage return -<DT><CODE>\t</CODE> -<DD>horizontal tab -<DT><CODE>\v</CODE> -<DD>vertical tab -<DT><CODE>\<VAR>nnn</VAR></CODE> -<DD>the eight-bit character whose value is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>HH</VAR></CODE> -<DD>the eight-bit character whose value is the hexadecimal value <VAR>HH</VAR> -(one or two hex digits) -</DL> -<P> - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>. -For example, the following binding will make <SAMP>`<KBD>C-x</KBD> \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: -<TABLE><tr><td> </td><td class=example><pre>"\C-x\\": "\\" -</pre></td></tr></table></P><P> - -</DL> -<P> - -<A NAME="Conditional Init Constructs"></A> -<HR SIZE="6"> -<A NAME="SEC11"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC10"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.2 Conditional Init Constructs </H3> -<!--docid::SEC11::--> -<P> - -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. -</P><P> - -<DL COMPACT> -<DT><CODE>$if</CODE> -<DD>The <CODE>$if</CODE> 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. -<P> - -<DL COMPACT> -<DT><CODE>mode</CODE> -<DD>The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test -whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode. -This may be used in conjunction -with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in -the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if -Readline is starting out in <CODE>emacs</CODE> mode. -<P> - -<DT><CODE>term</CODE> -<DD>The <CODE>term=</CODE> 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 -<SAMP>`='</SAMP> is tested against both the full name of the terminal and -the portion of the terminal name before the first <SAMP>`-'</SAMP>. This -allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>, -for instance. -<P> - -<DT><CODE>application</CODE> -<DD>The <VAR>application</VAR> construct is used to include -application-specific settings. Each program using the Readline -library sets the <VAR>application name</VAR>, and you can test for -a particular value. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: -<TABLE><tr><td> </td><td class=example><pre>$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</pre></td></tr></table></DL> -<P> - -<DT><CODE>$endif</CODE> -<DD>This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. -<P> - -<DT><CODE>$else</CODE> -<DD>Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. -<P> - -<DT><CODE>$include</CODE> -<DD>This directive takes a single filename as an argument and reads commands -and bindings from that file. -For example, the following directive reads from <TT>`/etc/inputrc'</TT>: -<TABLE><tr><td> </td><td class=example><pre>$include /etc/inputrc -</pre></td></tr></table></DL> -<P> - -<A NAME="Sample Init File"></A> -<HR SIZE="6"> -<A NAME="SEC12"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC11"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC9"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.3.3 Sample Init File </H3> -<!--docid::SEC12::--> -<P> - -Here is an example of an <VAR>inputrc</VAR> file. This illustrates key -binding, variable assignment, and conditional syntax. -</P><P> - -<TABLE><tr><td> </td><td class=example><pre># 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 -</pre></td></tr></table></P><P> - -<A NAME="Bindable Readline Commands"></A> -<HR SIZE="6"> -<A NAME="SEC13"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC12"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.4 Bindable Readline Commands </H2> -<!--docid::SEC13::--> -<P> - -<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Moving about the line.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting at previous lines.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for changing text.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Commands for killing and yanking.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Specifying numeric arguments, repeat counts.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Getting Readline to do the typing for you.</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Saving and re-executing typed characters</TD></TR> -<TR><TD ALIGN="left" VALIGN="TOP"><A HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">Other miscellaneous commands.</TD></TR> -</TABLE></BLOCKQUOTE> -<P> - -This section describes Readline commands that may be bound to key -sequences. -Command names without an accompanying key sequence are unbound by default. -</P><P> - -In the following descriptions, <EM>point</EM> refers to the current cursor -position, and <EM>mark</EM> refers to a cursor position saved by the -<CODE>set-mark</CODE> command. -The text between the point and mark is referred to as the <EM>region</EM>. -</P><P> - -<A NAME="Commands For Moving"></A> -<HR SIZE="6"> -<A NAME="SEC14"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.1 Commands For Moving </H3> -<!--docid::SEC14::--> -<DL COMPACT> -<A NAME="IDX26"></A> -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD><A NAME="IDX27"></A> -Move to the start of the current line. -<P> - -<A NAME="IDX28"></A> -<DT><CODE>end-of-line (C-e)</CODE> -<DD><A NAME="IDX29"></A> -Move to the end of the line. -<P> - -<A NAME="IDX30"></A> -<DT><CODE>forward-char (C-f)</CODE> -<DD><A NAME="IDX31"></A> -Move forward a character. -<P> - -<A NAME="IDX32"></A> -<DT><CODE>backward-char (C-b)</CODE> -<DD><A NAME="IDX33"></A> -Move back a character. -<P> - -<A NAME="IDX34"></A> -<DT><CODE>forward-word (M-f)</CODE> -<DD><A NAME="IDX35"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. -<P> - -<A NAME="IDX36"></A> -<DT><CODE>backward-word (M-b)</CODE> -<DD><A NAME="IDX37"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. -<P> - -<A NAME="IDX38"></A> -<DT><CODE>clear-screen (C-l)</CODE> -<DD><A NAME="IDX39"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. -<P> - -<A NAME="IDX40"></A> -<DT><CODE>redraw-current-line ()</CODE> -<DD><A NAME="IDX41"></A> -Refresh the current line. By default, this is unbound. -<P> - -</DL> -<P> - -<A NAME="Commands For History"></A> -<HR SIZE="6"> -<A NAME="SEC15"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC14"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.2 Commands For Manipulating The History </H3> -<!--docid::SEC15::--> -<P> - -<DL COMPACT> -<A NAME="IDX42"></A> -<DT><CODE>accept-line (Newline or Return)</CODE> -<DD><A NAME="IDX43"></A> -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -<CODE>add_history()</CODE>. -If this line is a modified history line, the history line is restored -to its original state. -<P> - -<A NAME="IDX44"></A> -<DT><CODE>previous-history (C-p)</CODE> -<DD><A NAME="IDX45"></A> -Move `back' through the history list, fetching the previous command. -<P> - -<A NAME="IDX46"></A> -<DT><CODE>next-history (C-n)</CODE> -<DD><A NAME="IDX47"></A> -Move `forward' through the history list, fetching the next command. -<P> - -<A NAME="IDX48"></A> -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD><A NAME="IDX49"></A> -Move to the first line in the history. -<P> - -<A NAME="IDX50"></A> -<DT><CODE>end-of-history (M->)</CODE> -<DD><A NAME="IDX51"></A> -Move to the end of the input history, i.e., the line currently -being entered. -<P> - -<A NAME="IDX52"></A> -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD><A NAME="IDX53"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. -<P> - -<A NAME="IDX54"></A> -<DT><CODE>forward-search-history (C-s)</CODE> -<DD><A NAME="IDX55"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. -<P> - -<A NAME="IDX56"></A> -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD><A NAME="IDX57"></A> -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. -<P> - -<A NAME="IDX58"></A> -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD><A NAME="IDX59"></A> -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. -<P> - -<A NAME="IDX60"></A> -<DT><CODE>history-search-forward ()</CODE> -<DD><A NAME="IDX61"></A> -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. -<P> - -<A NAME="IDX62"></A> -<DT><CODE>history-search-backward ()</CODE> -<DD><A NAME="IDX63"></A> -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. -<P> - -<A NAME="IDX64"></A> -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD><A NAME="IDX65"></A> -Insert the first argument to the previous command (usually -the second word on the previous line) at point. -With an argument <VAR>n</VAR>, -insert the <VAR>n</VAR>th word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the <VAR>n</VAR>th word from the end of the previous command. -<P> - -<A NAME="IDX66"></A> -<DT><CODE>yank-last-arg (M-. or M-_)</CODE> -<DD><A NAME="IDX67"></A> -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like <CODE>yank-nth-arg</CODE>. -Successive calls to <CODE>yank-last-arg</CODE> move back through the history -list, inserting the last argument of each line in turn. -<P> - -</DL> -<P> - -<A NAME="Commands For Text"></A> -<HR SIZE="6"> -<A NAME="SEC16"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC15"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.3 Commands For Changing Text </H3> -<!--docid::SEC16::--> -<P> - -<DL COMPACT> -<A NAME="IDX68"></A> -<DT><CODE>delete-char (C-d)</CODE> -<DD><A NAME="IDX69"></A> -Delete the character at point. If point is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return EOF. -<P> - -<A NAME="IDX70"></A> -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD><A NAME="IDX71"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. -<P> - -<A NAME="IDX72"></A> -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD><A NAME="IDX73"></A> -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. -<P> - -<A NAME="IDX74"></A> -<DT><CODE>quoted-insert (C-q or C-v)</CODE> -<DD><A NAME="IDX75"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. -<P> - -<A NAME="IDX76"></A> -<DT><CODE>tab-insert (M-<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX77"></A> -Insert a tab character. -<P> - -<A NAME="IDX78"></A> -<DT><CODE>self-insert (a, b, A, 1, !, <small>...</small>)</CODE> -<DD><A NAME="IDX79"></A> -Insert yourself. -<P> - -<A NAME="IDX80"></A> -<DT><CODE>transpose-chars (C-t)</CODE> -<DD><A NAME="IDX81"></A> -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. -<P> - -<A NAME="IDX82"></A> -<DT><CODE>transpose-words (M-t)</CODE> -<DD><A NAME="IDX83"></A> -Drag the word before point past the word after point, -moving point past that word as well. -If the insertion point is at the end of the line, this transposes -the last two words on the line. -<P> - -<A NAME="IDX84"></A> -<DT><CODE>upcase-word (M-u)</CODE> -<DD><A NAME="IDX85"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. -<P> - -<A NAME="IDX86"></A> -<DT><CODE>downcase-word (M-l)</CODE> -<DD><A NAME="IDX87"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. -<P> - -<A NAME="IDX88"></A> -<DT><CODE>capitalize-word (M-c)</CODE> -<DD><A NAME="IDX89"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. -<P> - -<A NAME="IDX90"></A> -<DT><CODE>overwrite-mode ()</CODE> -<DD><A NAME="IDX91"></A> -Toggle overwrite mode. With an explicit positive numeric argument, -switches to overwrite mode. With an explicit non-positive numeric -argument, switches to insert mode. This command affects only -<CODE>emacs</CODE> mode; <CODE>vi</CODE> mode does overwrite differently. -Each call to <CODE>readline()</CODE> starts in insert mode. -<P> - -In overwrite mode, characters bound to <CODE>self-insert</CODE> replace -the text at point rather than pushing the text to the right. -Characters bound to <CODE>backward-delete-char</CODE> replace the character -before point with a space. -</P><P> - -By default, this command is unbound. -</P><P> - -</DL> -<P> - -<A NAME="Commands For Killing"></A> -<HR SIZE="6"> -<A NAME="SEC17"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC16"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.4 Killing And Yanking </H3> -<!--docid::SEC17::--> -<P> - -<DL COMPACT> - -<A NAME="IDX92"></A> -<DT><CODE>kill-line (C-k)</CODE> -<DD><A NAME="IDX93"></A> -Kill the text from point to the end of the line. -<P> - -<A NAME="IDX94"></A> -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD><A NAME="IDX95"></A> -Kill backward to the beginning of the line. -<P> - -<A NAME="IDX96"></A> -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD><A NAME="IDX97"></A> -Kill backward from the cursor to the beginning of the current line. -<P> - -<A NAME="IDX98"></A> -<DT><CODE>kill-whole-line ()</CODE> -<DD><A NAME="IDX99"></A> -Kill all characters on the current line, no matter where point is. -By default, this is unbound. -<P> - -<A NAME="IDX100"></A> -<DT><CODE>kill-word (M-d)</CODE> -<DD><A NAME="IDX101"></A> -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as <CODE>forward-word</CODE>. -<P> - -<A NAME="IDX102"></A> -<DT><CODE>backward-kill-word (M-<KBD>DEL</KBD>)</CODE> -<DD><A NAME="IDX103"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. -<P> - -<A NAME="IDX104"></A> -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD><A NAME="IDX105"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. -<P> - -<A NAME="IDX106"></A> -<DT><CODE>delete-horizontal-space ()</CODE> -<DD><A NAME="IDX107"></A> -Delete all spaces and tabs around point. By default, this is unbound. -<P> - -<A NAME="IDX108"></A> -<DT><CODE>kill-region ()</CODE> -<DD><A NAME="IDX109"></A> -Kill the text in the current region. -By default, this command is unbound. -<P> - -<A NAME="IDX110"></A> -<DT><CODE>copy-region-as-kill ()</CODE> -<DD><A NAME="IDX111"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. -<P> - -<A NAME="IDX112"></A> -<DT><CODE>copy-backward-word ()</CODE> -<DD><A NAME="IDX113"></A> -Copy the word before point to the kill buffer. -The word boundaries are the same as <CODE>backward-word</CODE>. -By default, this command is unbound. -<P> - -<A NAME="IDX114"></A> -<DT><CODE>copy-forward-word ()</CODE> -<DD><A NAME="IDX115"></A> -Copy the word following point to the kill buffer. -The word boundaries are the same as <CODE>forward-word</CODE>. -By default, this command is unbound. -<P> - -<A NAME="IDX116"></A> -<DT><CODE>yank (C-y)</CODE> -<DD><A NAME="IDX117"></A> -Yank the top of the kill ring into the buffer at point. -<P> - -<A NAME="IDX118"></A> -<DT><CODE>yank-pop (M-y)</CODE> -<DD><A NAME="IDX119"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <CODE>yank</CODE> or <CODE>yank-pop</CODE>. -</DL> -<P> - -<A NAME="Numeric Arguments"></A> -<HR SIZE="6"> -<A NAME="SEC18"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC17"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.5 Specifying Numeric Arguments </H3> -<!--docid::SEC18::--> -<DL COMPACT> - -<A NAME="IDX120"></A> -<DT><CODE>digit-argument (<KBD>M-0</KBD>, <KBD>M-1</KBD>, <small>...</small> <KBD>M--</KBD>)</CODE> -<DD><A NAME="IDX121"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. -<P> - -<A NAME="IDX122"></A> -<DT><CODE>universal-argument ()</CODE> -<DD><A NAME="IDX123"></A> -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing <CODE>universal-argument</CODE> -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. -</DL> -<P> - -<A NAME="Commands For Completion"></A> -<HR SIZE="6"> -<A NAME="SEC19"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC18"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.6 Letting Readline Type For You </H3> -<!--docid::SEC19::--> -<P> - -<DL COMPACT> -<A NAME="IDX124"></A> -<DT><CODE>complete (<KBD>TAB</KBD>)</CODE> -<DD><A NAME="IDX125"></A> -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -The default is filename completion. -<P> - -<A NAME="IDX126"></A> -<DT><CODE>possible-completions (M-?)</CODE> -<DD><A NAME="IDX127"></A> -List the possible completions of the text before point. -<P> - -<A NAME="IDX128"></A> -<DT><CODE>insert-completions (M-*)</CODE> -<DD><A NAME="IDX129"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. -<P> - -<A NAME="IDX130"></A> -<DT><CODE>menu-complete ()</CODE> -<DD><A NAME="IDX131"></A> -Similar to <CODE>complete</CODE>, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of <CODE>menu-complete</CODE> steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung -(subject to the setting of <CODE>bell-style</CODE>) -and the original text is restored. -An argument of <VAR>n</VAR> moves <VAR>n</VAR> 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 <KBD>TAB</KBD>, but is unbound -by default. -<P> - -<A NAME="IDX132"></A> -<DT><CODE>delete-char-or-list ()</CODE> -<DD><A NAME="IDX133"></A> -Deletes the character under the cursor if not at the beginning or -end of the line (like <CODE>delete-char</CODE>). -If at the end of the line, behaves identically to -<CODE>possible-completions</CODE>. -This command is unbound by default. -<P> - -</DL> -<P> - -<A NAME="Keyboard Macros"></A> -<HR SIZE="6"> -<A NAME="SEC20"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC19"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.7 Keyboard Macros </H3> -<!--docid::SEC20::--> -<DL COMPACT> - -<A NAME="IDX134"></A> -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD><A NAME="IDX135"></A> -Begin saving the characters typed into the current keyboard macro. -<P> - -<A NAME="IDX136"></A> -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD><A NAME="IDX137"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. -<P> - -<A NAME="IDX138"></A> -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD><A NAME="IDX139"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. -<P> - -</DL> -<P> - -<A NAME="Miscellaneous Commands"></A> -<HR SIZE="6"> -<A NAME="SEC21"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC20"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> > </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> << </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC13"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC22"> >> </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H3> 1.4.8 Some Miscellaneous Commands </H3> -<!--docid::SEC21::--> -<DL COMPACT> - -<A NAME="IDX140"></A> -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD><A NAME="IDX141"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. -<P> - -<A NAME="IDX142"></A> -<DT><CODE>abort (C-g)</CODE> -<DD><A NAME="IDX143"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). -<P> - -<A NAME="IDX144"></A> -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, <small>...</small>)</CODE> -<DD><A NAME="IDX145"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. -<P> - -<A NAME="IDX146"></A> -<DT><CODE>prefix-meta (<KBD>ESC</KBD>)</CODE> -<DD><A NAME="IDX147"></A> -Metafy the next character typed. This is for keyboards -without a meta key. Typing <SAMP>`<KBD>ESC</KBD> f'</SAMP> is equivalent to typing -<KBD>M-f</KBD>. -<P> - -<A NAME="IDX148"></A> -<DT><CODE>undo (C-_ or C-x C-u)</CODE> -<DD><A NAME="IDX149"></A> -Incremental undo, separately remembered for each line. -<P> - -<A NAME="IDX150"></A> -<DT><CODE>revert-line (M-r)</CODE> -<DD><A NAME="IDX151"></A> -Undo all changes made to this line. This is like executing the <CODE>undo</CODE> -command enough times to get back to the beginning. -<P> - -<A NAME="IDX152"></A> -<DT><CODE>tilde-expand (M-~)</CODE> -<DD><A NAME="IDX153"></A> -Perform tilde expansion on the current word. -<P> - -<A NAME="IDX154"></A> -<DT><CODE>set-mark (C-@)</CODE> -<DD><A NAME="IDX155"></A> -Set the mark to the point. If a -numeric argument is supplied, the mark is set to that position. -<P> - -<A NAME="IDX156"></A> -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD><A NAME="IDX157"></A> -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. -<P> - -<A NAME="IDX158"></A> -<DT><CODE>character-search (C-])</CODE> -<DD><A NAME="IDX159"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. -<P> - -<A NAME="IDX160"></A> -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD><A NAME="IDX161"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. -<P> - -<A NAME="IDX162"></A> -<DT><CODE>insert-comment (M-#)</CODE> -<DD><A NAME="IDX163"></A> -Without a numeric argument, the value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line. -If a numeric argument is supplied, this command acts as a toggle: if -the characters at the beginning of the line do not match the value -of <CODE>comment-begin</CODE>, the value is inserted, otherwise -the characters in <CODE>comment-begin</CODE> are deleted from the beginning of -the line. -In either case, the line is accepted as if a newline had been typed. -<P> - -<A NAME="IDX164"></A> -<DT><CODE>dump-functions ()</CODE> -<DD><A NAME="IDX165"></A> -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX166"></A> -<DT><CODE>dump-variables ()</CODE> -<DD><A NAME="IDX167"></A> -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX168"></A> -<DT><CODE>dump-macros ()</CODE> -<DD><A NAME="IDX169"></A> -Print all of the Readline key sequences bound to macros and the -strings they output. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. -<P> - -<A NAME="IDX170"></A> -<DT><CODE>emacs-editing-mode (C-e)</CODE> -<DD><A NAME="IDX171"></A> -When in <CODE>vi</CODE> command mode, this causes a switch to <CODE>emacs</CODE> -editing mode. -<P> - -<A NAME="IDX172"></A> -<DT><CODE>vi-editing-mode (M-C-j)</CODE> -<DD><A NAME="IDX173"></A> -When in <CODE>emacs</CODE> editing mode, this causes a switch to <CODE>vi</CODE> -editing mode. -<P> - -</DL> -<P> - -<A NAME="Readline vi Mode"></A> -<HR SIZE="6"> -<A NAME="SEC22"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC21"> < </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ > ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[ << ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC1"> Up </A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[ >> ]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT"> <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H2> 1.5 Readline vi Mode </H2> -<!--docid::SEC22::--> -<P> - -While the Readline library does not have a full set of <CODE>vi</CODE> -editing functions, it does contain enough to allow simple editing -of the line. The Readline <CODE>vi</CODE> mode behaves as specified in -the POSIX 1003.2 standard. -</P><P> - -In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> -editing modes, use the command <KBD>M-C-j</KBD> (bound to emacs-editing-mode -when in <CODE>vi</CODE> mode and to vi-editing-mode in <CODE>emacs</CODE> mode). -The Readline default is <CODE>emacs</CODE> mode. -</P><P> - -When you enter a line in <CODE>vi</CODE> mode, you are already placed in -`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD> -switches you into `command' mode, where you can edit the text of the -line with the standard <CODE>vi</CODE> movement keys, move to previous -history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and -so forth. -</P><P> - -<HR SIZE="6"> -<A NAME="SEC_Contents"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Table of Contents</H1> -<UL> -<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A> -<BR> -<UL> -<A NAME="TOC2" HREF="rluserman.html#SEC2">1.1 Introduction to Line Editing</A> -<BR> -<A NAME="TOC3" HREF="rluserman.html#SEC3">1.2 Readline Interaction</A> -<BR> -<UL> -<A NAME="TOC4" HREF="rluserman.html#SEC4">1.2.1 Readline Bare Essentials</A> -<BR> -<A NAME="TOC5" HREF="rluserman.html#SEC5">1.2.2 Readline Movement Commands</A> -<BR> -<A NAME="TOC6" HREF="rluserman.html#SEC6">1.2.3 Readline Killing Commands</A> -<BR> -<A NAME="TOC7" HREF="rluserman.html#SEC7">1.2.4 Readline Arguments</A> -<BR> -<A NAME="TOC8" HREF="rluserman.html#SEC8">1.2.5 Searching for Commands in the History</A> -<BR> -</UL> -<A NAME="TOC9" HREF="rluserman.html#SEC9">1.3 Readline Init File</A> -<BR> -<UL> -<A NAME="TOC10" HREF="rluserman.html#SEC10">1.3.1 Readline Init File Syntax</A> -<BR> -<A NAME="TOC11" HREF="rluserman.html#SEC11">1.3.2 Conditional Init Constructs</A> -<BR> -<A NAME="TOC12" HREF="rluserman.html#SEC12">1.3.3 Sample Init File</A> -<BR> -</UL> -<A NAME="TOC13" HREF="rluserman.html#SEC13">1.4 Bindable Readline Commands</A> -<BR> -<UL> -<A NAME="TOC14" HREF="rluserman.html#SEC14">1.4.1 Commands For Moving</A> -<BR> -<A NAME="TOC15" HREF="rluserman.html#SEC15">1.4.2 Commands For Manipulating The History</A> -<BR> -<A NAME="TOC16" HREF="rluserman.html#SEC16">1.4.3 Commands For Changing Text</A> -<BR> -<A NAME="TOC17" HREF="rluserman.html#SEC17">1.4.4 Killing And Yanking</A> -<BR> -<A NAME="TOC18" HREF="rluserman.html#SEC18">1.4.5 Specifying Numeric Arguments</A> -<BR> -<A NAME="TOC19" HREF="rluserman.html#SEC19">1.4.6 Letting Readline Type For You</A> -<BR> -<A NAME="TOC20" HREF="rluserman.html#SEC20">1.4.7 Keyboard Macros</A> -<BR> -<A NAME="TOC21" HREF="rluserman.html#SEC21">1.4.8 Some Miscellaneous Commands</A> -<BR> -</UL> -<A NAME="TOC22" HREF="rluserman.html#SEC22">1.5 Readline vi Mode</A> -<BR> -</UL> -</UL> -<HR SIZE=1> -<A NAME="SEC_OVERVIEW"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>Short Table of Contents</H1> -<BLOCKQUOTE> -<A NAME="TOC1" HREF="rluserman.html#SEC1">1. Command Line Editing</A> -<BR> - -</BLOCKQUOTE> -<HR SIZE=1> -<A NAME="SEC_About"></A> -<TABLE CELLPADDING=1 CELLSPACING=1 BORDER=0> -<TR><TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Top">Top</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_Contents">Contents</A>]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[Index]</TD> -<TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD> -</TR></TABLE> -<H1>About this document</H1> -This document was generated by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> -<P></P> -The buttons in the navigation panels have the following meaning: -<P></P> -<table border = "1"> -<TR> -<TH> Button </TH> -<TH> Name </TH> -<TH> Go to </TH> -<TH> From 1.2.3 go to</TH> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ < ] </TD> -<TD ALIGN="CENTER"> -Back -</TD> -<TD> -previous section in reading order -</TD> -<TD> -1.2.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ > ] </TD> -<TD ALIGN="CENTER"> -Forward -</TD> -<TD> -next section in reading order -</TD> -<TD> -1.2.4 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ << ] </TD> -<TD ALIGN="CENTER"> -FastBack -</TD> -<TD> -previous or up-and-previous section -</TD> -<TD> -1.1 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ Up ] </TD> -<TD ALIGN="CENTER"> -Up -</TD> -<TD> -up section -</TD> -<TD> -1.2 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ >> ] </TD> -<TD ALIGN="CENTER"> -FastForward -</TD> -<TD> -next or up-and-next section -</TD> -<TD> -1.3 -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Top] </TD> -<TD ALIGN="CENTER"> -Top -</TD> -<TD> -cover (top) of document -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Contents] </TD> -<TD ALIGN="CENTER"> -Contents -</TD> -<TD> -table of contents -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [Index] </TD> -<TD ALIGN="CENTER"> -Index -</TD> -<TD> -concept index -</TD> -<TD> - -</TD> -</TR> -<TR> -<TD ALIGN="CENTER"> - [ ? ] </TD> -<TD ALIGN="CENTER"> -About -</TD> -<TD> -this page -</TD> -<TD> - -</TD> -</TR> -</TABLE> -<P></P> -where the <STRONG> Example </STRONG> assumes that the current position -is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of -the following structure: -<UL> -<LI> 1. Section One </LI> -<UL> -<LI>1.1 Subsection One-One</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.2 Subsection One-Two</LI> -<UL> -<LI>1.2.1 Subsubsection One-Two-One -</LI><LI>1.2.2 Subsubsection One-Two-Two -</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> -<== Current Position </STRONG> -</LI><LI>1.2.4 Subsubsection One-Two-Four -</LI></UL> -<LI>1.3 Subsection One-Three</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.4 Subsection One-Four</LI> -</UL> -</UL> - -<HR SIZE=1> -<BR> -<FONT SIZE="-1"> -This document was generated -by <I>Chet Ramey</I> on <I>June, 27 2002</I> -using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html -"><I>texi2html</I></A> - -</BODY> -</HTML> diff --git a/readline-4.3.orig/doc/rluserman.info b/readline-4.3.orig/doc/rluserman.info deleted file mode 100644 index 3fccbd4..0000000 --- a/readline-4.3.orig/doc/rluserman.info +++ /dev/null @@ -1,1260 +0,0 @@ -This is rluserman.info, produced by makeinfo version 4.1 from -/usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* RLuserman: (rluserman). The GNU readline library User's Manual. -END-INFO-DIR-ENTRY - - This document describes the end user interface of 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-2002 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: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the end user interface of 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. - - -File: rluserman.info, Node: Command Line Editing, 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: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text `C-k' is read as `Control-K' and describes the character -produced when the <k> key is pressed while the Control key is depressed. - - The text `M-k' is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <k> -key is pressed. 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 (*note 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. - - -File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <RET>. You do not have to be at the end of -the line to press <RET>; the entire line is accepted regardless of the -location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may 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. - -`C-b' - Move back one character. - -`C-f' - Move forward one character. - -<DEL> or <Backspace> - Delete the character to the left of the cursor. - -`C-d' - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -`C-_' or `C-x C-u' - Undo the last editing command. You can undo all the way back to an - empty line. - -(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.) - - -File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to `C-b', `C-f', `C-d', and -<DEL>. Here are some commands for moving more rapidly about the line. - -`C-a' - Move to the start of the line. - -`C-e' - Move to the end of the line. - -`M-f' - Move forward a word, where a word is composed of letters and - digits. - -`M-b' - Move backward a word. - -`C-l' - Clear the screen, reprinting the current line at the top. - - Notice how `C-f' moves forward a character, while `M-f' moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`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. - -`C-k' - Kill the text from the current cursor position to the end of the - line. - -`M-d' - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by `M-f'. - -`M-<DEL>' - Kill from the cursor the start of the current word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by `M-b'. - -`C-w' - Kill from the cursor to the previous whitespace. This is - different than `M-<DEL>' because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -`C-y' - Yank the most recently killed text back into the buffer at the - cursor. - -`M-y' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `C-y' or `M-y'. - - -File: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' 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', which -will delete the next ten characters on the input line. - - -File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -"incremental" and "non-incremental". - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. 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. A movement command will terminate the search, make the -last line found the current line, and begin editing. - - Readline remembers the last incremental search string. If two -`C-r's are typed without any intervening characters defining a new -search string, any remembered search string is used. - - 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. - - -File: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible 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. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. The syntax is simple: - - set VARIABLE VALUE - - Here, for example, is how to change from the default Emacs-like - key binding to use `vi' line editing commands: - - set editing-mode vi - - Variable names and values, where appropriate, are recognized - without regard to case. - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. This variable must be set to an integer value - greater than or equal to 0. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an <ESC> character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which 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' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - If set to `on', the history code attempts to place point at - the same location on each history line retrived with - `previous-history' or `next-history'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not clear the eighth bit in the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::). If this variable has not been - given a value, the characters <ESC> and `C-J' will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `mark-symlinked-directories' - If set to `on', completed names which are symbolic links to - directories have a slash appended (subject to the value of - `mark-directories'). The default is `off'. - - `match-hidden-files' - This variable, when set to `on', causes Readline to match - files whose names begin with a `.' (hidden files) when - performing filename completion, unless the leading `.' is - supplied by the user in the filename to be completed. This - variable is `on' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `page-completions' - If set to `on', Readline uses an internal `more'-like pager - to display a screenful of possible completions at a time. - This variable is `on' by default. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place on a line in - the init file the name of the key you wish to bind the command to, - a colon, and then the name of the command. The name of the key - can be expressed in different ways, depending on what you find most - comfortable. - - In addition to command names, readline allows keys to be bound to - a string that is inserted when the key is pressed (a MACRO). - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, `C-u' is bound to the function - `universal-argument', `M-DEL' is bound to the function - `backward-kill-word', 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). - - A number of symbolic character names are recognized while - processing this key binding syntax: DEL, ESC, ESCAPE, LFD, - NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, `C-u' is again bound to the function - `universal-argument' (just as it was in the first example), - `C-x C-r' is bound to the function `re-read-init-file', and - `<ESC> <[> <1> <1> <~>' is bound to insert the text `Function - Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the eight-bit character whose value is the octal value NNN - (one to three digits) - - `\xHH' - the eight-bit character whose value is the hexadecimal value - HH (one or two hex digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against 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' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for a particular value. This could be used to bind key - sequences to functions useful for a specific program. For - instance, the following command adds a key sequence that - quotes the current or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. For example, the following - directive reads from `/etc/inputrc': - $include /etc/inputrc - - -File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an INPUTRC file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the GNU Readline library. Existing - # programs include FTP, Bash, and GDB. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # 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 - - -File: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. 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". - - -File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline or Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, it may be added to the history list for future recall - with `add_history()'. If this line is a modified history line, - the history line is restored to its original state. - -`previous-history (C-p)' - Move `back' through the history list, fetching the previous - command. - -`next-history (C-n)' - Move `forward' through the history list, fetching the next command. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line) at point. With an argument N, - insert the Nth word from the previous command (the words in the - previous command begin with word 0). A negative argument inserts - the Nth word from the end of the previous command. - -`yank-last-arg (M-. or M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character at point. If point is at the beginning of - the line, there are no characters in the line, and the last - character typed was not bound to `delete-char', then return EOF. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q or C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like `C-q', for example. - -`tab-insert (M-<TAB>)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. If the insertion point is at the end of - the line, this transposes the last two words on the line. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - -`overwrite-mode ()' - Toggle overwrite mode. With an explicit positive numeric argument, - switches to overwrite mode. With an explicit non-positive numeric - argument, switches to insert mode. This command affects only - `emacs' mode; `vi' mode does overwrite differently. Each call to - `readline()' starts in insert mode. - - In overwrite mode, characters bound to `self-insert' replace the - text at point rather than pushing the text to the right. - Characters bound to `backward-delete-char' replace the character - before point with a space. - - By default, this command is unbound. - - -File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter where point is. - By default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-<DEL>)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at point. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `yank' or `yank-pop'. - - -File: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. `M--' starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (<TAB>)' - Attempt to perform completion on the text before point. The - actual completion performed is application-specific. The default - is filename completion. - -`possible-completions (M-?)' - List the possible completions of the text before point. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `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 (subject to the setting of - `bell-style') 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 ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta (<ESC>)' - Metafy the next character typed. This is for keyboards without a - meta key. Typing `<ESC> f' is equivalent to typing `M-f'. - -`undo (C-_ or C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the point. If a numeric argument is supplied, the - mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - Without a numeric argument, the value of the `comment-begin' - variable is inserted at the beginning of the current line. If a - numeric argument is supplied, this command acts as a toggle: if - the characters at the beginning of the line do not match the value - of `comment-begin', the value is inserted, otherwise the - characters in `comment-begin' are deleted from the beginning of - the line. In either case, the line is accepted as if a newline - had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they output. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`emacs-editing-mode (C-e)' - When in `vi' command mode, this causes a switch to `emacs' editing - mode. - -`vi-editing-mode (M-C-j)' - When in `emacs' editing mode, this causes a switch to `vi' editing - mode. - - -File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command `M-C-j' (bound to emacs-editing-mode when in -`vi' mode and to vi-editing-mode in `emacs' 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. - - - -Tag Table: -Node: Top1208 -Node: Command Line Editing1604 -Node: Introduction and Notation2218 -Node: Readline Interaction3837 -Node: Readline Bare Essentials5025 -Node: Readline Movement Commands6807 -Node: Readline Killing Commands7765 -Node: Readline Arguments9675 -Node: Searching10712 -Node: Readline Init File12856 -Node: Readline Init File Syntax13918 -Node: Conditional Init Constructs24802 -Node: Sample Init File27328 -Node: Bindable Readline Commands30513 -Node: Commands For Moving31564 -Node: Commands For History32414 -Node: Commands For Text35273 -Node: Commands For Killing37988 -Node: Numeric Arguments39940 -Node: Commands For Completion41069 -Node: Keyboard Macros42602 -Node: Miscellaneous Commands43162 -Node: Readline vi Mode46512 - -End Tag Table diff --git a/readline-4.3.orig/doc/rluserman.ps b/readline-4.3.orig/doc/rluserman.ps deleted file mode 100644 index b46417a..0000000 --- a/readline-4.3.orig/doc/rluserman.ps +++ /dev/null @@ -1,2001 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software -%%Title: rluserman.dvi -%%Pages: 24 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o rluserman.ps rluserman.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2002.06.27:1354 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (rluserman.dvi) -@start -%DVIPSBitmapFont: Fa cmbxti10 14.4 1 -/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbx12 13.14 46 -/Fb 46 122 df<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA212 -00B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC38 -7C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F -00131E5B1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA21823 -7DA21F>I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C010000 -13FCA2EB03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210 -127C12FEA214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14 -381478A214F81301130313071306130C131C13381330136013E0EA01C01380EA03005A12 -0E5A12185A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C00 -1F137CEBFFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8 -000813FCC7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FF -C03801FE0018237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F -005AA2007E133C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4 -003E137E123F6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C -003FB512C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA2 -5BA2133CA25BA213F8A41201A66C5A13601A257DA41F>I<EBFF80000313E0380F01F838 -1C007C48133C141E1278A2127C127E387F803C13E0383FF878381FFDF0EBFFC07E000313 -E014F8000F13FCEA1E1F383C07FEEA7803EB00FF48133F141F140FA3140E1278141C6C13 -38381F80F03807FFE00001130018237DA21F>I<141CA2143EA3147FA24A7EA39038019F -C0A29038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FC -A29039E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229 -257EA42E>65 D<B612E015FC3903F0007FED3F80ED1FC0ED0FE0A216F0A21507150FA216 -E0151F16C0ED7F80913801FE0090B512F815FF9039F0003FC0ED0FE0ED07F016F8150316 -FCA616F81507ED0FF0ED1FE0ED7FC0B7120015F826257EA42C>I<9138FF8008010FEBF0 -1890393FC03C789039FE0006F8D801F81303484813014848130048481478121F48481438 -A2007F151890C8FCA2481500A97E16187F123FA26C6C1430120F6C6C14606C6C14C06C6C -EB0180D800FEEB070090383FC01E90380FFFF8010013C025257DA42C>I<B7FCA23903F8 -007FED0F8015071503A21501A3ED00C01406A21600A2140E141EEBFFFEA2EBF81E140E14 -06A21660A291C7FC16C0A415011503A2ED0F80153FB7FCA223257EA428>69 -D<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C5C90B5FCA2EBF80F80 -80A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F80003F800AF90B6FCA2 -9038F80003B0B500E0B512E0A22B257EA430>72 D<B512E0A23803F800B3AFB512E0A213 -257EA417>I<B539E007FF80A2D803F8C7EA780016605E4B5A0307C7FC150E15185D5D5D -EC03804AC8FC140E141F4A7E147FECDFC09038FB8FE09038FF0FF0EBFC07496C7E816E7E -1400157F82153F6F7E6F7E8215076F7E82B539E03FFFC0A22A257EA430>75 -D<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E157CEC03FCB6FCA220257E -A425>I<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D1406A26D6C130CA26D6C1318 -A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A291387E0300A3EC3F06A2EC1F8C -A2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A235257EA43A>I<D8FFF8903807 -FFE07FD803FE9038003C006D14187F6D7E6D7E806D7E6D7E13036D7E6D7E80EC7F80EC3F -C0141FEC0FE015F0EC07F8EC03FC1401EC00FE157F1698ED3FD8ED1FF8150F15071503A2 -150115001678486C1438D8FFFC1418A22B257EA430>I<B67E15F83903F801FEEC007F6F -7E6F7EA282A55EA24B5A4BC7FCEC01FE90B512F815C09038F803F06E7E6E7E157EA2157F -A482A31760ED3FC017C0ED1FE1B539E00FFF80923801FE002B257EA42E>82 -D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>I< -007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C160C5AA4C71400 -B3A390B512FEA226247EA32B>I<B539C001FFE0A2D807F8C7EA1C006C6C141816386C6C -14306C6C5C16E06D6C5B6D6C485A1503D91FE090C7FC90380FF006150E903807F80C6D6C -5A15386D6C5A903800FF6015E06E5A6E5AAE90380FFFFCA22B257FA42E>89 -D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1FFE3803FE7EEA0FC0EA1F -00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B187E971E>97 -D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2EC01F8A215FC -A815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E267FA522>I<EB -7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F6C130CEA1F80 -EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC137F3803FFCF38 -0FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380FC0EF3903FFCF -FC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400A7B5FCA2EA0F -C0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0FC013D89038D0 -07E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FACEC1FF0A2EC0780 -EC0E005C14305CEBC1C0EBC38013C713DFEBFFC0EBE7E0EBC3F0138180EB80FC147E80A2 -EC1F80EC0FC039FFF83FF8A21D267FA520>107 D<EAFFC0A2120FB3B0EAFFFCA20E267E -A511>I<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E803F001 -A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80390F8E -0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F803803FFF038 -07C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F00A2381F807E -6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC09038F007E001 -C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038CFFF00 -EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC13B013 -A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA7001EAF0 -00A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212E014C0 -EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F121FB5 -12C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39FFC07F -E0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I<39FFF8 -0FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00005B13FE -EB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A2390FC00F -003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EB -E0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmsl10 10.95 40 -/Fc 40 122 df<EAFFF0A20C027E8A0F>45 D<1408140C141C143CA2147C147E149EA2EB -011EA21302801304A21308A20110138014071320A2EB7FFF90384007C0EB8003A2EA0100 -A21202EC01E01206001F130339FF801FFE1F207F9F22>65 D<0007B5FC3900F803C09038 -7801E0EC00F04913F8A515F03801E001EC03E015C0EC0F809038FFFE009038E00F803903 -C003C0EC01E015F0A21400A2485A1401A215E01403EC07C0390F000F80EC3E00B512F01D -1F7E9E20>I<ECFE02903807018690381C004E0170133E49131E4848131C4848130C1207 -48C7FC5A121E003E1408003C1400127CA45AA4127815101520A27E1540001C14806CEB01 -006C13023803800C3800E030EB3FC01F217C9F21>I<0007B57E3900F801E09038780070 -81497F151E150E150FA348481480A6484814005DA3151E153E4848133C5DA25D4A5A4A5A -260F000FC7FC143CB512F0211F7E9E23>I<0007B512FC3900F8007C0178131C150C5B15 -04A414043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A21560 -15C0380F00011407B612801E1F7E9E1F>I<0007B512F83900F800780178133815185B15 -08A53901E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D -1F7E9E1E>I<3A07FF83FFC03A00F8007C000178133CA2495BA648485BA490B5FCEBE000 -4848485AA64848485AA64848485A01807F39FFF07FF8221F7E9E22>72 -D<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10> -I<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C1460 -14F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381380F -00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A25BA6485AA648 -5AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E9E1C>I<D807 -F8EB7FC0D8007CEB1F00150C015E1304019E5B138FA2EB8780A2EB83C0D801035BEB01E0 -A2EB00F0A2147800025C143CA2141EA2140F485CEC07C0A21403A21401000C5C001E1300 -B47E221F7E9E22>78 D<EB01FCEB0E0790383801C090387000E0484813F048481378485A -153C48C7FC5A001E143E123E123C127CA448147CA3157815F81278EC01F0007C14E01403 -003C14C0001CEB0780001EEB0F006C131E380780383801C0E038007F801F217C9F23>I< -0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01E0EC03C0EC0F -00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FFFE3900F80780 -90387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C038 -80141E140EA2140F48485AA51501D80F0013029038800F8239FFF8078CC7EA01F020207E -9E22>82 D<EB1F82EB7066EBC01E3801800EEA030048130C00061304120EA3000F1300A2 -7FEA07F013FF6C13C06C13E038003FF0EB03F813001478143CA200401338A31430006013 -70146000F013C038E8018038C60300EA81FC17217E9F19>I<003FB512F0383C07800030 -1430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21 ->I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600705BA25C -A200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F -000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B142301805C00 -0713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4 -EA01F015F85B5D5B15605B000014402C207A9E2F>87 D<EA07F8EA0C0CEA1E061307121C -1200A313FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F87801414 -7D9317>97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14 -F0A5387001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA03 -83380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D -9314>I<13F8EA070EEA0E07381C038012381278127012F0B5FC00F0C7FCA25AA46C5AEA -7002EA3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0 -001201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB -3E11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FC -A21218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC -181F809417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6 -120EA65A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB -80F014C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07 -C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A612 -0EA65A121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB -80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E93 -26>I<38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380 -001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012 -F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3 -E03807EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C380740 -70EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA07 -02381E01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA -07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300 -EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301 -EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA -87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2 -EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4 -131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0001C13C01480121E380E -01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15147C9318>I<381FF0FF -3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E134E1387EA0107 -380203801204380C01C0383C03E038FE07FC18147F9318>120 D<390FF83F803901E00E -00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C13381318 -1310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmti10 10.95 8 -/Fd 8 117 df<EC3FE0ECE010903801803801031378A290380700301500A3130EA390B5 -12E0EB0E0090381C01C0A4EC03801338A3EC0700A2137801701310EC0E20A313609038E0 -0640EC038091C7FC5BA21201EA3180127948C8FC1262123C1D29829F1A>12 -D<127012F8A212F012E005057B840E>46 D<EB3C60EBE2703801C1E0EA0380EA07005A38 -0E01C0121EA3383C0380A4EB0700A2EA1C0F1317EA0C2EEA03CEEA000EA25BA21230EA78 -38485AEA60E0EA3F80141D7E9315>103 D<13C0EA01E0A213C0C7FCA7120E12131223EA -4380EA4700A21287120EA35AA3EA38401380A21270EA31001232121C0B1F7C9E0E>105 -D<381C0F80382630C0384740601380EB0070A2008E13E0120EA3381C01C0A3EB03840038 -1388A2EB0708EB031000701330383001C016147C931A>110 D<EA1C1EEA266138278380 -EA47871307EB0300008EC7FC120EA35AA45AA45A123011147C9313>114 -D<13FCEA0302EA0601EA0C03130713061300EA0F8013F0EA07F8EA03FCEA003E130E1270 -EAF00CA2EAE008EA4010EA2060EA1F8010147D9313>I<EA018013C0EA0380A4EA0700A2 -EAFFF0EA0700120EA45AA45AA31320EA7040A21380A2EA3100121E0C1C7C9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr8 8 26 -/Fe 26 118 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0 -381FFF8014C0381C00E0147014301438A4147014E0EB01C0B5120015177F9619>I<EBFC -1038038330380E00B0481370481330123000701310126012E01400A51410126012700030 -132012386C13406C138038038300EA00FC14177E9619>I<B5FC381C01C0EB00E0143014 -381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512 -E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214 -3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C -0C1304A390C7FCA6EAFFC014177F9617>I<EAFFC0001CC7FCAD1420A31460A2144014C0 -1303B5FC13177F9616>76 D<EAFFFE381C0380EB00C014601470A4146014C0EB0380381F -FE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470A414E014C0 -EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F961A>82 -D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA001C -130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038180040 -1308A200801304A300001300AF3803FF8016177F9619>I<12FCA212C0B3AB12FCA20621 -7D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379EA -70FFEA1F1E100E7F8D12>97 D<EA07F0EA18381230EA7010EA600012E0A41260EA700812 -30EA1830EA07C00D0E7F8D10>99 D<EA0FC0EA1860EA3030EA7038EAE018EAFFF8EAE000 -A31260EA7008EA3010EA1830EA07C00D0E7F8D10>101 D<1203EA0780A2EA0300C7FCA5 -EA1F801203AF1243EAE30012E7127C091D82960B>106 D<12F81238A8133E1338133013 -4013801239EA3FC0EA39E0123813F01378133CA2EAFE7F10177F9613>I<EAF8F8EA3B1C -EA3C0E1238AA38FE3F80110E7F8D14>110 D<EAF9F0EA3E1CEA380613077F1480A41400 -5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>112 D<EAF9E0EA3A70123CEA3820 -1300A9B4FC0C0E7F8D0E>114 D<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80EA1FC0EA -01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0EA3800A7 -1340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80110E7F8D -14>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmsy9 9 2 -/Ff 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmsltt10 10.95 29 -/Fg 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3 -C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA -7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203 -120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I<EB3E18EBFFB8 -4813F8EA07C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338 -380780383C0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3807FFC014E014F03801C0F814 -78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013 -07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000 -A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18 -1C7F9B18>I<EB1FF8EB3FFCEB1FF8EB01C0A4EB0380A6EB0700A6130EA2124012E06C5A -EAE03CEAFFF86C5AEA1FC0161C7C9B18>74 D<EA07FC487E6C5AEA01C0A4485AA648C7FC -A6120E14301470A4B512E0A3141C7E9B18>76 D<3907E01F80000FEB3FC0000714803903 -B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6 -5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12 -1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<387FFFC0B512E0A26C13C013047E7F18>95 D<EA03FC48B4FC4813801303380601C012 -00A2137FEA07FF121FEA3F813878038012F012E0A21307EA701F387FFFF0EA3FFBEA0FE1 -14147D9318>97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012 -38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I<EB07E0 -A31300A4EB01C0EA01F1EA07FDEA0FFFEA1E0FEA3C0738780380127012E0A4EB0700A25B -5B6C5AEA787F383FFFC0381FEFE0380F87C0131C7C9B18>100 D<13F8EA07FE487E381F -0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F -FE6C5AEA07F012147B9318>I<EB01F8EB07FC131FEB1E3CEB38181400A25B381FFFF05A -7E38007000A25BA6485AA6EA7FFE12FF127F161C7E9B18>I<EB1E1F90387FFF8090B5FC -3901E1E3003803C0E01380EA0700A3495AA238038780EA07FF49C7FCEA0E7890C8FCA26C -B47E4813E0487F383C007848133812705AA2147800705B387C03E0383FFFC0000F90C7FC -EA03FC191F809318>I<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6 -EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106 -D<EA07E0120F12071200A4485AEBC7FEA3EBC1E0EBC3C038038780EB8F00139E13BC13FE -13EEEA07CF1387EB0780130314C01301387FC7F838FFE7FC387FC7F8171C7F9B18>I<EA -0FFCA3EA001CA45BA65BA65BA6B5128014C01480121C7D9B18>I<13FCEA03FF000F1380 -EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F -FC6C5AEA07E013147C9318>111 D<EBF8C0EA03FDEA0FFFEA1F0FEA3C07387803801270 -12E0A4EB0700A25BA26C5AEA787FEA3FFEEA1FEEEA078EEA000EA35BA43801FF80A3121E -7C9318>113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA -FFFC7F5B17147E9318>I<EBFE603807FFE05AEA1F01121C003813C0EA3C00001F1300EA -0FF8EA07FE3800FF801307383001C01270A238780380EA7C07B51200EAEFFEEA63F81314 -7D9318>I<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF -E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013 -E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119 -D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC -EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F -F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13 -78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmcsc10 10.95 12 -/Fh 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807 -FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97 -D<EB7E083803819838070078000C1338001C13185A00781308127000F01300A700701308 -127812386C1310120C000713603803818038007E0015177E961B>99 -D<B512C0EA1C011300144014601420A213081400A21318EA1FF8EA1C1813081410A21300 -14301420A21460EB01E0B5FC14177E9619>101 D<B512C0EA1C011300144014601420A2 -13081400A21318EA1FF8EA1C181308A390C7FCA6EAFFC013177E9618>I<EB7E08380381 -9838070078000C1338001C13185A00781308127000F01300A5EB03FEEB00381270127812 -387E120C1207380380D838007F0817177E961D>I<EAFF80EA1C00B3A3EAFF8009177E96 -0E>105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13 -0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700 -70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D> -I<EAFFFCEA1C07EB03C0130114E0A414C01303EB0700EA1FFC001CC7FCAAB47E13177E96 -19>I<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FCEA -001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9615>115 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F -133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF -18177F961C>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 17.28 18 -/Fi 18 117 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB -079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607A248 -5A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D15 -0E0003161E6C6C151C6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7 -FCD9003F13F80203138031317CB03A>67 D<B812F0A3C6903880003FEE07F816031600A2 -1778A21738A3171C1507A31700A25D5D5D91B5FCA3EC803F818181A21707A392C7120EA4 -171EA2173CA2177C17FC16011607163FB812F8A330317EB035>69 -D<B67EA3000190C9FCB3A9EE0380A416071700A25EA35E5E5E5E4B5A150FB7FCA329317D -B030>76 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780 -A3481603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<EBFFF0000313FF390F803F80 -9038C00FE0486C6C7EA26E7ED80FC07FEA0780C7FCA414FF131FEBFFE33803FC03EA0FF0 -EA1FC0123FEA7F80A2EAFF00A31407A2387F800D393FC01DFE3A1FE078FFF03907FFE07F -C6EB803F24207E9F27>97 D<EA01F812FFA3120F1207ADEC3FE0ECFFFC9038FBE07F9039 -FF001F8049EB0FC04914E049EB07F016F8A2ED03FCA316FEA816FCA3ED07F8A216F06DEB -0FE06D14C001E7EB3F809039C3C0FE00903880FFF89038003FC027327EB12D>I<ED0FC0 -EC07FFA3EC007F153FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F484813 -3F123FA2485AA312FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01FC0F -3FFE38007FFEEB0FF027327DB12D>100 D<EB0FFC90387FFF803901FC0FC03903F003E0 -3907E001F0000F14F8391FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7 -FCA4127FA36C6C1307121F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807 -FE0020207E9F25>I<EB01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC -1203EC07E0EC018091C7FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>I<EA03C0487E487E487EA46C5A6C5A6C5AC8FCA9EA01F812 -7FA31207B3A7B51280A311337DB217>105 D<EA01F812FFA3120F1207B3B3A6B512C0A3 -12327DB117>108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01E0FC02C09038 -8300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3B500C3B5380F -FFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1801FC03807F3 -0001F614E013FCA35BB3B500C3B5FCA328207D9F2D>I<EB07FC90387FFFC03901FC07F0 -3903F001F848486C7E4848137E001F147F003F158049133F007F15C0A300FF15E0A8007F -15C0A36C6CEB7F80A2001F15006C6C13FE00075C3903F803F83901FE0FF039007FFFC0D9 -07FCC7FC23207E9F28>I<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90 -C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA003F01001380143F0060131F00 -E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C07F8019207D9F20>115 -D<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7FCB0EC0380A712 -01EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsy10 10.95 1 -/Fj 1 14 df<14FE903807FFC090381F01F0903878003C01E0130ED80180130348C7EA01 -800006EC00C0481560A2481530481518A248150CA4481506A90060150CA46C1518A26C15 -306C1560A26C15C06CEC01806C6CEB0300D800E0130E0178133C90381F01F0903807FFC0 -D900FEC7FC272B7DA02E>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmbx12 14.4 39 -/Fk 39 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<B612F815FF16C03A03F8001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED -07F0150FED1FC0EDFF8090B5EAFE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216 -FFA616FE1501ED03FC1507ED1FF8B712E016C0EDFE0028297DA830>66 -D<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484814 -7F4848143F4848141F485A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E -6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE0090 -38007FF028297CA831>I<B712E0A33903FC001FED07F01501A215001670A3913801C078 -1638A302031300A2140F90B5FCA3EBFC0F1403A20201130EA3161C91C7FCA3163C163816 -7816F815011503151FB712F0A327297EA82C>69 D<B712C0A33903FC003FED0FE0150315 -01A21500A316F0913801C070A316001403A2140F90B5FCA3EBFC0F1403A21401A491C8FC -A9B512FCA324297EA82A>I<B512F0A33803FC00B3B1B512F0A314297EA819>73 -D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A21507A2150FA2151F157F913801FF00 -B7FCA322297EA828>76 D<D8FFFE92383FFF80A26D5D0003EFE000A2D9BF8014EFA2D99F -C0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC131CA3D980FE1338 -A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700A3EC03FEA26E5A -A26E5AD8FFFE0203B51280A2157039297DA840>I<B612E015FE6F7E3A03FC003FE0ED0F -F06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC0 -6F7E6F7E6F7EA9170EA21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>82 -D<9038FF80600003EBF0E0000F13F8381F80FD383F001F003E1307481303A200FC1301A2 -14007EA26C140013C0EA7FFCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB -007FEC1FF0140F140700E01303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE00 -00E15B38C01FF01C297CA825>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED07007F -0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC2F297EA834 ->85 D<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C -604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F0 -9126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA291 -3AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141E -A242297FA845>87 D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4 -EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F38 -03FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F0 -9038F001F89038E000FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C -0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F -80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE0 -0E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807 -F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E0 -7FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F13 -0048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003 -803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC -7FEA03F813F01207143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<90 -38FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E13 -3E003F137E6C137C380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14 -C06C14E06C14F0121F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC0 -1F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC0 -01E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA -1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12> -I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0 -903AC307E0C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFF -FE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC807 -01D813F013D0A213E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390F -C01F80391F800FC0393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A239 -1F800FC0390FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFC1F0EBC7FC -EBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmtt10 10.95 77 -/Fl 77 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<1238127CA2127E123E120EA3121CA2123812F8 -12F012C0070E789B18>39 D<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA4 -5AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012 -787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F0012 -1E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07 -F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A411147D9718>I<121C123E127E -127F123F121F1207120E121E127C12F81260080C788518>44 D<387FFFC0B512E0A26C13 -C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F14005B -131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A121E123E -123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C073838 -0380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C0700EA1F -1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12431203 -B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C -0780383003C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFC -EA03F0131C7E9B18>53 D<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13 -F05BA2485AA3485AA448C7FCA7131D7E9C18>55 D<EA03F8EA0FFE487E383E0F80EA3803 -387001C0A438380380EA3C07381FFF00EA07FC487EEA1F1F383C0780387001C000F013E0 -EAE000A4387001C0EA7803383E0F80381FFF006C5AEA03F8131C7E9B18>I<1230127812 -FCA2127812301200A81230127812FCA2127812300614779318>58 -D<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C -7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303EB00C013187E9918>60 -D<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0130C7E9318>I<126012 -F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE0048 -5AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0FF0EA3FFC48B4FCEA700F -38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A111C -7D9B18>I<137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C1 -12E1EAE380A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC0 -0001138038007E00131C7E9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>I<EA7FFC -B5FC6C1380381C03C01301EB00E0A4130114C01307381FFF80140014C0EA1C03EB00E014 -F01470A414F014E01303387FFFC0B51280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07 -FFEA0F07EA1E03EA3C01EA38005AA214005AA8127014E0A27E123C381E01C0EA0F073807 -FF803803FE00EA00F8131C7E9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E013 -00A214F01470A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F9B18> -I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A315 -1C7F9B18>I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA7EAFFC0 -A3141C7E9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5 -EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B -18>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8 -387F07F0151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C -7D9B18>I<387F07F038FF87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0 -121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0 -151C7F9B18>75 D<EAFFC0A3001CC7FCB114E0A5B5FCA3131C7E9B18>I<38FC01F8EAFE -03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C -7F9B18>I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213 -311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE383FFF8048 -13C0EA7803EA700100F013E0EAE000B0EAF001007013C0EA7C07EA7FFF6C1380380FFE00 -131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF -1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA0FFE383FFF804813C0EA7803EA7001 -00F013E0EAE000AE1370A2EAF079387039C0EA783FEA7FFF6C1380380FFE00EA000FEB07 -80A2EB03C01301A213227E9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A31303 -1480130F381FFF005BA2EA1C0F7FEB0380A5149CA3387F01F8EAFF81387F00F0161C7F9B -18>I<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FE -C67EEB0F80EB03C01301EB00E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8 -131C7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF -83FEA3381C0070B36C13E0EA0F01380783C03803FF806C1300EA007C171C809B18>I<38 -FE03F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3 -EA00F8A21370A9EA01FC487E6C5A151C7F9B18>89 D<EAFFF8A3EAE000B3ACEAFFF8A30D -24779F18>91 D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F -12017F12007F1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I< -EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18> -95 D<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3 -EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>97 D<127E12FE127E120EA5133EEB -FF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380 -38063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270 -EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5 -EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFF -F0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A2 -38E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D -9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7F -FFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA -1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0 -EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF8000 -0F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA -07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA31338 -1300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E -12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB03 -8014C0387FC7F812FF127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I< -38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E17148093 -18>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7 -FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001 -007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF -80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380 -EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA38 -0FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB -3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FC -A9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1F -FCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<48 -7E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F -9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714 -809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038E -A3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0A4381C01C013 -7113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF013 -9F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707 -000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F038 -0E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313 -F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB -078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318> -I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE013 -1F130713247E9F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005B -ABEA03C012FF90C7FC127C13247E9F18>125 D<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA -60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr10 10.95 71 -/Fm 71 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<127012F812FCA212741204A312 -08A21210A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5AA2123812 -30A212701260A412E0AC1260A412701230A212381218A27E120412067E7EEA008013400A -2E7BA112>I<7E12407E12307E1208120C7EA212077EA213801201A413C0AC1380A41203 -1300A25A1206A25A120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A3 -1210A31220A21240050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A312700505 -7C840D>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78 -0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>48 D<13801203120F12F31203B3A6 -EA07C0EA7FFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF8 -03A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380 -EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F12 -001400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F0138012 -40EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E138EA2 -EA010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17 ->I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003A214 -C0A3127012F0A200E013801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<137C -EA0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406 -EAF807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D -17>I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E0 -5B1201A41203A76C5A131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260A312 -7038780300123EEA3F06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007EB01 -C012C01300A31480EA600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E -18487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E3380003 -80A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012F8A3 -12701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A2 -12781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB -2078A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14 -E039FF801FFE1F207F9F22>65 D<B512E0380F0078141EA2801580A515005C141E147CEB -FFF0EB007C141FEC0F80EC07C0140315E0A515C014071580EC0F00143EB512F01B1F7E9E -20>I<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A -1510127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E0 -0300EB380CEB0FF01C217E9F21>I<B512F83807801EEC0780EC03C0EC01E0EC00F01570 -1578A2153CA3153EA8153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F -7F9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF1301 -13001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780 -071401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE -1A1F7F9E1E>I<90380FE02090387818609038E004E03803800238070001481300001E14 -60A25A1520127C127800F81400A7EC7FFCEC03E000781301127C123CA27EA27E7E380380 -023900E00460903878182090380FE0001E217D9F24>I<39FFF07FF8390F000780AD90B5 -FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<39FF -F007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21E013 -41EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23>75 -D<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>I<B4 -6CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A29038 -0E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A> -I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03 -C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22 ->I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14 -F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C0 -6C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80 -EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<B512 -E0380F80780007131E80EC0780A215C0A41580A2EC0F00141E1478EBFFE0EB8060143814 -3C141C141EA3141FA315011581140F390FC0078239FFFC03C4C812F820207F9E22>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<12FFA21203B3B3A512FFA2082D80A10D ->93 D<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA0F8EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA238700380A212F0B5FC00F0C7FCA41270A26C1380A2381C0100EA0706EA -01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE010 -20809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33 -E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C13 -C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A212 -1CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F -9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA61 -80EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0 -EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC -121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D019018001EEBE01CA200 -1C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF -8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A60070 -13E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E0180 -14C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FC -A8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A61270 -12781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18 -EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000 -127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F -9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F -9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8 -383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3 -132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D807 -04138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E147F -9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F0137013 -7813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318>I< -38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8 -A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260 -EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006 -130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbx12 20.736 19 -/Fn 19 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B612F8A439007FF000B3B3AFB612F8A41D3B7DBA24>73 -D<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3170FA3171FA2173F177F17FF5E04 -071300163FB9FCA4323B7DBA3A>76 D<B500F00207B512E0808080D8007F92390007E000 -6E6F5A81017B7F81137901787F6E7E6E7E81141F6E7E6E7F6E7F82806E7F6F7E6F7E826F -7E816F13806F13C017E06F13F081EE7FF8EE3FFC17FEEE1FFF827013837013C318E37013 -F382EF7FFBEF3FFFA283838383A28383187F183FA201FC161FB500FC150F18071803A243 -3B7CBA4C>78 D<B712F8EEFFC017F817FE3B007FF0001FFF040313C004007F717E717EA2 -84171FA284A660A2173F604D5A604C485A4C5BDC1FFEC8FC91B612F817C0A29139F0007F -F0EE1FF8707E707E707E8482A284A584A5F101E0A27013F0A2F103C0EF7FF8B600F89039 -3FFC078094381FFE0F0507B51200050113FCCBEA1FF0433C7CBA48>82 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<903801FF -F0010F13FE013FEBFF809039FF801FC03901FE003F4848EB7FE0485A485A121F4848EB3F -C0ED1F80007FEC0F004990C7FCA212FFAA127F7FA2123F6D14F0121F6C6CEB01E012076C -6CEB03C06CB4EB0F806C9038C03F0090383FFFFE010F13F8010113C024267DA52B>I<EE -3F80ED3FFFA4150181B0ECFF80010F13F0013F13FC9038FFC03F3901FE000F4848130348 -487F48487F121F485AA2127F5BA312FFA9127FA36C7EA2121F6C6C5B6C6C5B00035CD801 -FE011F13C02700FF807E13FE90387FFFF8010F13E0010113002F3C7DBB36>I<49B47E01 -0F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0485A003F15 -F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F000F15F06C6C -13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013C025267DA5 -2C>I<EC1FF0ECFFFC010313FF90390FF83F8090381FE07F90393FC0FFC0495A13FFA248 -9038007F80ED3F00151E92C7FCAAB67EA4000190C8FCB3AC007F13FEA4223C7DBB1E>I< -EA01E0EA07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512 -F0A4143D7DBC1A>105 D<13FE12FFA412071203B3B3AEB512F8A4153C7DBB1A>108 -D<D801FCEBFF8000FF010313F0020F7F91381E03FC91383801FE000701607F0003497E01 -FD15805C01FFC7FCA35BB3A4B5D8F83F13FEA42F267CA536>110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E13 -7C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391 -C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C14 -1E0008133E007F133C147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA -1FFCEA07F02E377EA533>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fn(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p -75 709 1800 17 v 936 757 a Fm(Edition)17 b(4.3,)c(for)i -Fl(Readline)f(Library)g Fm(V)l(ersion)i(4.3.)1643 811 -y(Marc)o(h)e(2002)75 2467 y Fk(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fm(This)22 b(do)q(cumen)o(t)f(describ)q(es)i(the)f -(end)f(user)h(in)o(terface)f(of)g(the)g(GNU)g(Readline)i(Library)l(,)g -(a)e(utilit)o(y)75 271 y(whic)o(h)14 b(aids)f(in)g(the)g(consistency)h -(of)e(user)h(in)o(terface)g(across)f(discrete)h(programs)f(that)g(need) -h(to)f(pro)o(vide)75 326 y(a)j(command)g(line)i(in)o(terface.)75 -394 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 448 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -503 y(Boston,)d(MA)h(02111)f(USA)75 570 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 625 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 692 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 747 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 802 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -869 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 924 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 979 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fj(\015)h Fm(1988-2002)f(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 149 y Fi(1)41 b(Command)28 b(Line)e(Editing)137 -271 y Fm(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fh(gnu)g Fm(command)g(line)i(editing)f(in)o(terface.)75 -403 y Fk(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -501 y Fm(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -569 y(The)h(text)f Fg(C-k)h Fm(is)g(read)g(as)f(`Con)o(trol-K')g(and)h -(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831 -567 y Ff(h)p 1844 541 19 2 v 1844 569 a Fe(k)p 1844 577 -V 1860 567 a Ff(i)75 624 y Fm(k)o(ey)d(is)h(pressed)g(while)g(the)f -(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g -Fg(M-k)f Fm(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -745 y Ff(h)p 942 719 V 942 747 a Fe(k)p 942 755 V 958 -745 a Ff(i)987 747 y Fm(k)o(ey)g(is)h(pressed.)20 b(The)15 -b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Ff(h)p 1791 -719 72 2 v 1791 747 a Fe(AL)m(T)p 1791 755 V 1860 745 -a Ff(i)75 802 y Fm(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 800 y Ff(h)p 1225 774 V 1225 802 a Fe(AL)m(T)p 1225 -810 V 1294 800 a Ff(i)1322 802 y Fm(\(usually)i(to)e(either)i(side)g -(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Ff(h)p -400 829 V 400 857 a Fe(AL)m(T)p 400 865 V 469 855 a Ff(i)499 -857 y Fm(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Ff(h)p -1709 829 V 1709 857 a Fe(AL)m(T)p 1709 865 V 1778 855 -a Ff(i)1808 857 y Fm(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1033 y Ff(h)p 706 1007 V 706 1035 a Fe(AL)m(T)p 706 1043 -V 775 1033 a Ff(i)801 1035 y Fm(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping) -809 1088 y Ff(h)p 822 1062 70 2 v 822 1090 a Fe(ESC)p -822 1098 V 888 1088 a Ff(i)915 1090 y Fd(\014rst)p Fm(,)g(and)g(then)h -(t)o(yping)1339 1088 y Ff(h)p 1351 1062 19 2 v 1351 1090 -a Fe(k)p 1351 1098 V 1368 1088 a Ff(i)1383 1090 y Fm(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j -Fc(metafying)k Fm(the)425 1143 y Ff(h)p 437 1117 V 437 -1145 a Fe(k)p 437 1153 V 454 1143 a Ff(i)484 1145 y Fm(k)o(ey)l(.)137 -1214 y(The)i(text)e Fg(M-C-k)h Fm(is)h(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75 -1268 y Fc(metafying)e Fg(C-k)p Fm(.)137 1337 y(In)g(addition,)h(sev)o -(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1335 y Ff(h)p 1396 1309 -73 2 v 1396 1337 a Fe(DEL)p 1396 1345 V 1467 1335 a Ff(i)1482 -1337 y Fm(,)1514 1335 y Ff(h)p 1526 1309 70 2 v 1526 -1337 a Fe(ESC)p 1526 1345 V 1593 1335 a Ff(i)1608 1337 -y Fm(,)1640 1335 y Ff(h)p 1652 1309 72 2 v 1652 1337 -a Fe(LFD)p 1652 1345 V 1722 1335 a Ff(i)1737 1337 y Fm(,)1768 -1335 y Ff(h)p 1780 1309 70 2 v 1780 1337 a Fe(SPC)p 1780 -1345 V 1847 1335 a Ff(i)1862 1337 y Fm(,)75 1390 y Ff(h)p -87 1364 76 2 v 87 1392 a Fe(RET)p 87 1399 V 160 1390 -a Ff(i)175 1392 y Fm(,)23 b(and)306 1390 y Ff(h)p 318 -1364 74 2 v 318 1392 a Fe(T)m(AB)p 318 1399 V 390 1390 -a Ff(i)427 1392 y Fm(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1447 y(Section)d(1.3)f([Readline)h(Init)g(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1445 y Ff(h)p 1456 1419 72 2 v 1456 1447 a Fe(LFD)p 1456 -1454 V 1526 1445 a Ff(i)1560 1447 y Fm(k)o(ey)l(,)h(t)o(yping)1802 -1445 y Ff(h)p 1814 1419 49 2 v 1814 1447 a Fe(C-j)p 1814 -1454 V 1860 1445 a Ff(i)75 1501 y Fm(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1499 y Ff(h)p 886 1473 76 2 -v 886 1501 a Fe(RET)p 886 1509 V 959 1499 a Ff(i)989 -1501 y Fm(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499 -y Ff(h)p 1397 1473 109 2 v 1397 1501 a Fe(Return)p 1397 -1509 V 1503 1499 a Ff(i)1533 1501 y Fm(or)1588 1499 y -Ff(h)p 1600 1473 86 2 v 1600 1501 a Fe(En)o(ter)p 1600 -1509 V 1684 1499 a Ff(i)1714 1501 y Fm(on)f(some)75 1556 -y(k)o(eyb)q(oards.)75 1688 y Fk(1.2)33 b(Readline)23 -b(In)n(teraction)137 1786 y Fm(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)i(library)f -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2058 y Ff(h)p 1172 2032 76 -2 v 1172 2060 a Fe(RET)p 1172 2068 V 1245 2058 a Ff(i)1260 -2060 y Fm(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f -(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563 -2113 y Ff(h)p 575 2087 V 575 2115 a Fe(RET)p 575 2122 -V 648 2113 a Ff(i)663 2115 y Fm(;)i(the)f(en)o(tire)h(line)g(is)g -(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75 -2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fb(1.2.1)30 -b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fm(In)12 -b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h -(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f -(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h -(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23 -b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h -(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h -(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560 -y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f -(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t) -o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19 -b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fg(C-b)f -Fm(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75 -2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13 -b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g -(with)g Fg(C-f)p Fm(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fm(2)1322 b(GNU)15 b(Readline)h(Library)137 -149 y(When)h(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 449 y Fg(C-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o -(haracter.)75 530 y Fg(C-f)168 b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h -(c)o(haracter.)75 608 y Ff(h)p 87 582 73 2 v 87 610 a -Fe(DEL)p 87 618 V 158 608 a Ff(i)188 610 y Fm(or)244 -608 y Ff(h)p 256 582 159 2 v 256 610 a Fe(Bac)o(kspace)p -256 618 V 412 608 a Ff(i)315 665 y Fm(Delete)h(the)f(c)o(haracter)g(to) -f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fg(C-d)168 -b Fm(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -961 y Fg(C-_)g Fm(or)f Fg(C-x)h(C-u)315 1015 y Fm(Undo)i(the)g(last)f -(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o -(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75 -1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863 -1149 y Ff(h)p 875 1123 V 875 1151 a Fe(Bac)o(kspace)p -875 1159 V 1032 1149 a Ff(i)1063 1151 y Fm(k)o(ey)g(b)q(e)h(set)f(to)f -(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h -(cursor)f(and)g(the)596 1204 y Ff(h)p 608 1178 73 2 v -608 1206 a Fe(DEL)p 608 1213 V 679 1204 a Ff(i)710 1206 -y Fm(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h -(the)g(cursor,)f(lik)o(e)75 1260 y Fg(C-d)p Fm(,)e(rather)h(than)g(the) -g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75 -1374 y Fb(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 -1471 y Fm(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fg(C-b)p -Fm(,)h Fg(C-f)p Fm(,)f Fg(C-d)p Fm(,)g(and)522 1578 y -Ff(h)p 534 1552 V 534 1580 a Fe(DEL)p 534 1588 V 605 -1578 a Ff(i)619 1580 y Fm(.)23 b(Here)16 b(are)g(some)f(commands)h(for) -f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635 -y(line.)75 1716 y Fg(C-a)168 b Fm(Mo)o(v)o(e)14 b(to)h(the)g(start)f -(of)h(the)g(line.)75 1796 y Fg(C-e)168 b Fm(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fg(M-f)168 -b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h -(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957 -y Fg(M-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2037 y Fg(C-l)168 b Fm(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f -(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f -Fg(C-f)g Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i -Fg(M-f)e Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18 -b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75 -2341 y Fb(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2438 y Fc(Killing)26 b Fm(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fc(y)o(anking)22 -b Fm(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fc(kill-ring)p Fm(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 458 y Fg(C-k)168 -b Fm(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y -Fg(M-d)168 b Fm(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f -Fg(M-f)p Fm(.)75 668 y Fg(M-)123 666 y Ff(h)p 135 640 -73 2 v 135 668 a Fe(DEL)p 135 675 V 206 666 a Ff(i)315 -668 y Fm(Kill)i(from)e(the)g(cursor)g(the)h(start)e(of)h(the)g(curren)o -(t)g(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,)e(to)h(the)315 -723 y(start)j(of)h(the)g(previous)h(w)o(ord.)31 b(W)l(ord)19 -b(b)q(oundaries)h(are)f(the)h(same)e(as)h(those)g(used)h(b)o(y)315 -777 y Fg(M-b)p Fm(.)75 855 y Fg(C-w)168 b Fm(Kill)18 -b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22 -b(This)16 b(is)g(di\013eren)o(t)g(than)f Fg(M-)1777 853 -y Ff(h)p 1789 827 V 1789 855 a Fe(DEL)p 1789 863 V 1860 -853 a Ff(i)315 910 y Fm(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h -(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fc(y)o(ank)j -Fm(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21 -b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d -(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fg(C-y)168 -b Fm(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g -(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198 -y Fg(M-y)168 b Fm(Rotate)16 b(the)h(kill-ring,)j(and)d(y)o(ank)g(the)h -(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f(this)h(if)f(the)h(prior) -315 1252 y(command)d(is)h Fg(C-y)f Fm(or)f Fg(M-y)p Fm(.)75 -1361 y Fb(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457 -y Fm(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g -(Readline)h(commands.)20 b(Sometimes)15 b(the)g(argumen)o(t)e(acts)75 -1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f -(the)g Fd(sign)j Fm(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o -(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t) -f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g -(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o -(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o -(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g -(t)o(yp)q(e)g(`)p Fl(M--)f(C-k)p Fm('.)137 1742 y(The)h(general)f(w)o -(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is) -h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797 -y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a) -g(min)o(us)g(sign)g(\(`)p Fl(-)p Fm('\),)d(then)j(the)f(sign)h(of)f -(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31 -b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h -(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75 -1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g -(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f -Fg(C-d)75 1961 y Fm(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f -(could)i(t)o(yp)q(e)f(`)p Fl(M-1)14 b(0)h(C-d)p Fm(',)k(whic)o(h)g -(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14 -b(on)i(the)f(input)h(line.)75 2125 y Fb(1.2.5)30 b(Searc)n(hing)21 -b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fm(Readline)d(pro)o -(vides)e(commands)g(for)g(searc)o(hing)g(through)g(the)g(command)g -(history)g(for)g(lines)i(con-)75 2275 y(taining)e(a)f(sp)q(eci\014ed)i -(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20 -b Fc(incremen)o(tal)e Fm(and)e Fc(non-incremen)o(tal)p -Fm(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f -(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.) -19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g -(string)f(is)h(t)o(yp)q(ed,)h(Readline)g(displa)o(ys)f(the)g(next)g(en) -o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12 -b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g -(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75 -2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l -(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g -(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fg(C-r)p -Fm(.)k(T)o(yping)d Fg(C-s)e Fm(searc)o(hes)h(forw)o(ard)e(through)h -(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75 -2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Fl(isearch-terminators)d -Fm(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q -(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Ff(h)p -1301 2642 70 2 v 1301 2670 a Fe(ESC)p 1301 2678 V 1368 -2668 a Ff(i)1402 2670 y Fm(and)e Fg(C-J)f Fm(c)o(haracters)g(will)p -eop -%%Page: 4 6 -4 5 bop 75 -58 a Fm(4)1322 b(GNU)15 b(Readline)h(Library)75 -149 y(terminate)21 b(an)g(incremen)o(tal)i(searc)o(h.)37 -b Fg(C-g)21 b Fm(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f -(and)g(restore)g(the)75 204 y(original)16 b(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 325 y(T)l(o)g(\014nd)i -(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o -(yp)q(e)f Fg(C-r)g Fm(or)g Fg(C-s)g Fm(as)h(appropriate.)k(This)75 -380 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i -(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g -(searc)o(h)g(string)75 434 y(t)o(yp)q(ed)19 b(so)g(far.)30 -b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline) -h(command)e(will)j(terminate)e(the)75 489 y(searc)o(h)10 -b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063 -487 y Ff(h)p 1076 461 76 2 v 1076 489 a Fe(RET)p 1076 -497 V 1149 487 a Ff(i)1174 489 y Fm(will)g(terminate)f(the)g(searc)o(h) -f(and)h(accept)75 544 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g -(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f -(command)g(will)75 599 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g -(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g -(editing.)137 665 y(Readline)j(remem)o(b)q(ers)e(the)h(last)f(incremen) -o(tal)i(searc)o(h)e(string.)27 b(If)17 b(t)o(w)o(o)f -Fg(C-r)p Fm(s)h(are)g(t)o(yp)q(ed)h(without)75 719 y(an)o(y)g(in)o -(terv)o(ening)h(c)o(haracters)f(de\014ning)h(a)f(new)h(searc)o(h)f -(string,)g(an)o(y)g(remem)o(b)q(ered)h(searc)o(h)f(string)g(is)75 -774 y(used.)137 840 y(Non-incremen)o(tal)25 b(searc)o(hes)e(read)h(the) -f(en)o(tire)h(searc)o(h)f(string)g(b)q(efore)h(starting)f(to)f(searc)o -(h)i(for)75 895 y(matc)o(hing)d(history)h(lines.)39 b(The)22 -b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h(t)o(yp)q(ed)f(b)o(y)h(the)f -(user)h(or)e(b)q(e)i(part)f(of)g(the)75 950 y(con)o(ten)o(ts)15 -b(of)f(the)i(curren)o(t)f(line.)75 1074 y Fk(1.3)33 b(Readline)23 -b(Init)h(File)137 1169 y Fm(Although)f(the)g(Readline)h(library)f -(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g -(installed)75 1224 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e -(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 -b(An)o(y)20 b(user)h(can)g(customize)75 1278 y(programs)15 -b(that)h(use)g(Readline)i(b)o(y)e(putting)g(commands)g(in)i(an)e -Fc(inputrc)k Fm(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 -1333 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g -(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g -(v)m(ariable)75 1388 y Fl(INPUTRC)p Fm(.)i(If)c(that)g(v)m(ariable)h -(is)g(unset,)f(the)g(default)h(is)g(`)p Fl(~/.inputrc)p -Fm('.)137 1454 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline) -h(library)g(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g -(the)75 1509 y(k)o(ey)g(bindings)i(are)e(set.)137 1574 -y(In)f(addition,)h(the)e Fl(C-x)i(C-r)e Fm(command)g(re-reads)h(this)g -(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 -1629 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 -1737 y Fb(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 -1832 y Fm(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w) -o(ed)i(in)f(the)g(Readline)h(init)g(\014le.)26 b(Blank)18 -b(lines)g(are)75 1886 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d -(a)h(`)p Fl(#)p Fm(')e(are)h(commen)o(ts.)35 b(Lines)22 -b(b)q(eginning)h(with)e(a)f(`)p Fl($)p Fm(')f(indicate)75 -1941 y(conditional)c(constructs)f(\(see)g(Section)g(1.3.2)f -([Conditional)h(Init)h(Constructs],)e(page)h(9\).)k(Other)c(lines)75 -1996 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75 -2073 y(V)l(ariable)h(Settings)315 2128 y(Y)l(ou)k(can)h(mo)q(dify)g -(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)j(b)o(y)e(altering)h -(the)f(v)m(alues)h(of)315 2182 y(v)m(ariables)d(in)g(Readline)g(using)f -(the)g Fl(set)g Fm(command)f(within)i(the)f(init)h(\014le.)26 -b(The)17 b(syn)o(tax)315 2237 y(is)f(simple:)435 2300 -y Fl(set)23 b Fc(v)m(ariable)28 b(v)m(alue)315 2366 y -Fm(Here,)14 b(for)f(example,)h(is)g(ho)o(w)f(to)g(c)o(hange)h(from)f -(the)h(default)g(Emacs-lik)o(e)h(k)o(ey)e(binding)j(to)315 -2421 y(use)g Fl(vi)e Fm(line)j(editing)g(commands:)435 -2484 y Fl(set)23 b(editing-mode)g(vi)315 2549 y Fm(V)l(ariable)c(names) -e(and)h(v)m(alues,)h(where)e(appropriate,)h(are)f(recognized)i(without) -e(regard)315 2604 y(to)e(case.)315 2670 y(A)g(great)g(deal)g(of)g -(run-time)h(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o -(wing)f(v)m(ariables.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 149 y Fl(bell-style)555 204 y Fm(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)h(w)o(an)o(ts)e(to)g(ring)i(the)f -(termi-)555 259 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Fl(none)p Fm(',)g(Readline)i(nev)o(er)f(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 314 y(`)p Fl(visible)p Fm(',)c(Readline)i(uses)g -(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 369 y(`)p Fl(audible)p Fm(')g(\(the)h -(default\),)i(Readline)g(attempts)e(to)g(ring)h(the)g(terminal's)555 -423 y(b)q(ell.)315 504 y Fl(comment-begin)555 559 y Fm(The)c(string)f -(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g -Fl(insert-)555 614 y(comment)f Fm(command)h(is)h(executed.)21 -b(The)15 b(default)h(v)m(alue)g(is)g Fl("#")p Fm(.)315 -694 y Fl(completion-ignore-case)555 749 y Fm(If)e(set)f(to)g(`)p -Fl(on)p Fm(',)g(Readline)i(p)q(erforms)e(\014lename)i(matc)o(hing)f -(and)g(completion)555 804 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k -(The)15 b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)315 -884 y Fl(completion-query-items)555 939 y Fm(The)d(n)o(um)o(b)q(er)h -(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f -(user)555 994 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i -(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21 -b(the)555 1049 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f -(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -1104 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to) -f(view)h(them;)f(otherwise,)555 1158 y(they)f(are)g(simply)i(listed.)20 -b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger) -h(v)m(alue)555 1213 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d -(default)f(limit)i(is)f Fl(100)p Fm(.)315 1294 y Fl(convert-meta)555 -1348 y Fm(If)11 b(set)g(to)g(`)p Fl(on)p Fm(',)f(Readline)i(will)h(con) -o(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555 -1403 y(to)f(an)h Fh(asci)q(i)e Fm(k)o(ey)i(sequence)g(b)o(y)g -(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555 -1456 y Ff(h)p 567 1430 70 2 v 567 1458 a Fe(ESC)p 567 -1466 V 634 1456 a Ff(i)666 1458 y Fm(c)o(haracter,)k(con)o(v)o(erting)h -(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555 -1513 y(The)e(default)h(v)m(alue)h(is)e(`)p Fl(on)p Fm('.)315 -1593 y Fl(disable-completion)555 1648 y Fm(If)k(set)f(to)f(`)p -Fl(On)p Fm(',)h(Readline)i(will)g(inhibit)g(w)o(ord)e(completion.)30 -b(Completion)555 1703 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g -(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555 -1758 y(to)h Fl(self-insert)p Fm(.)j(The)d(default)h(is)g(`)p -Fl(off)p Fm('.)315 1838 y Fl(editing-mode)555 1893 y -Fm(The)f Fl(editing-mode)d Fm(v)m(ariable)k(con)o(trols)e(whic)o(h)h -(default)g(set)f(of)g(k)o(ey)g(bind-)555 1948 y(ings)f(is)g(used.)20 -b(By)12 b(default,)i(Readline)f(starts)f(up)h(in)g(Emacs)f(editing)i -(mo)q(de,)555 2003 y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g -(similar)i(to)d(Emacs.)20 b(This)15 b(v)m(ariable)h(can)555 -2058 y(b)q(e)g(set)f(to)f(either)i(`)p Fl(emacs)p Fm(')e(or)h(`)p -Fl(vi)p Fm('.)315 2138 y Fl(enable-keypad)555 2193 y -Fm(When)d(set)f(to)h(`)p Fl(on)p Fm(',)e(Readline)j(will)h(try)d(to)g -(enable)i(the)f(application)h(k)o(eypad)555 2248 y(when)h(it)f(is)h -(called.)21 b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g -(arro)o(w)e(k)o(eys.)555 2303 y(The)j(default)h(is)g(`)p -Fl(off)p Fm('.)315 2383 y Fl(expand-tilde)555 2438 y -Fm(If)e(set)g(to)f(`)p Fl(on)p Fm(',)f(tilde)k(expansion)e(is)h(p)q -(erformed)f(when)g(Readline)h(attempts)555 2493 y(w)o(ord)g -(completion.)21 b(The)15 b(default)h(is)f(`)p Fl(off)p -Fm('.)555 2560 y(If)g(set)g(to)f(`)p Fl(on)p Fm(',)g(the)g(history)h -(co)q(de)h(attempts)e(to)g(place)i(p)q(oin)o(t)f(at)f(the)h(same)555 -2615 y(lo)q(cation)20 b(on)f(eac)o(h)g(history)h(line)g(retriv)o(ed)g -(with)f Fl(previous-history)e Fm(or)555 2670 y Fl(next-history)p -Fm(.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fm(6)1322 b(GNU)15 b(Readline)h(Library)315 -149 y Fl(horizontal-scroll-mode)555 204 y Fm(This)j(v)m(ariable)g(can)f -(b)q(e)g(set)g(to)f(either)i(`)p Fl(on)p Fm(')e(or)g(`)p -Fl(off)p Fm('.)27 b(Setting)19 b(it)f(to)f(`)p Fl(on)p -Fm(')555 259 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q(eing) -f(edited)g(will)h(scroll)f(horizon)o(tally)555 314 y(on)i(a)f(single)i -(screen)g(line)g(when)g(they)f(are)f(longer)h(than)g(the)g(width)g(of)g -(the)555 369 y(screen,)e(instead)f(of)g(wrapping)g(on)o(to)f(a)h(new)g -(screen)h(line.)21 b(By)13 b(default,)h(this)555 423 -y(v)m(ariable)j(is)e(set)g(to)g(`)p Fl(off)p Fm('.)315 -506 y Fl(input-meta)555 560 y Fm(If)h(set)f(to)g(`)p -Fl(on)p Fm(',)f(Readline)j(will)h(enable)e(eigh)o(t-bit)h(input)f(\(it) -g(will)h(not)e(clear)555 615 y(the)20 b(eigh)o(th)g(bit)g(in)h(the)f(c) -o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)555 -670 y(terminal)i(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20 -b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)33 b(The)555 -725 y(name)15 b Fl(meta-flag)f Fm(is)i(a)f(synon)o(ym)g(for)f(this)i(v) -m(ariable.)315 807 y Fl(isearch-terminators)555 862 y -Fm(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f -(an)g(incremen)o(tal)555 917 y(searc)o(h)12 b(without)h(subsequen)o -(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555 -971 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40 -b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 1026 y(b)q(een)17 -b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247 -1024 y Ff(h)p 1259 998 70 2 v 1259 1026 a Fe(ESC)p 1259 -1034 V 1326 1024 a Ff(i)1357 1026 y Fm(and)g Fg(C-J)f -Fm(will)i(terminate)f(an)555 1081 y(incremen)o(tal)g(searc)o(h.)315 -1163 y Fl(keymap)96 b Fm(Sets)19 b(Readline's)i(idea)f(of)f(the)g -(curren)o(t)h(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 -1218 y(mands.)41 b(Acceptable)23 b Fl(keymap)f Fm(names)g(are)f -Fl(emacs)p Fm(,)i Fl(emacs-standard)p Fm(,)555 1273 y -Fl(emacs-meta)p Fm(,)49 b Fl(emacs-ctlx)p Fm(,)g Fl(vi)p -Fm(,)h Fl(vi-move)p Fm(,)f Fl(vi-command)p Fm(,)g(and)555 -1328 y Fl(vi-insert)p Fm(.)31 b Fl(vi)20 b Fm(is)g(equiv)m(alen)o(t)h -(to)e Fl(vi-command)p Fm(;)g Fl(emacs)g Fm(is)h(equiv)m(alen)o(t)555 -1382 y(to)15 b Fl(emacs-standard)p Fm(.)20 b(The)d(default)f(v)m(alue)h -(is)g Fl(emacs)p Fm(.)k(The)16 b(v)m(alue)h(of)f(the)555 -1437 y Fl(editing-mode)e Fm(v)m(ariable)i(also)f(a\013ects)g(the)g -(default)h(k)o(eymap.)315 1519 y Fl(mark-directories)555 -1574 y Fm(If)j(set)g(to)g(`)p Fl(on)p Fm(',)f(completed)i(directory)g -(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1629 -y(The)15 b(default)h(is)g(`)p Fl(on)p Fm('.)315 1711 -y Fl(mark-modified-lines)555 1766 y Fm(This)j(v)m(ariable,)g(when)g -(set)e(to)h(`)p Fl(on)p Fm(',)f(causes)h(Readline)h(to)e(displa)o(y)i -(an)f(as-)555 1821 y(terisk)f(\(`)p Fl(*)p Fm('\))e(at)i(the)f(start)g -(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q -(di\014ed.)555 1875 y(This)e(v)m(ariable)g(is)g(`)p Fl(off)p -Fm(')e(b)o(y)h(default.)315 1958 y Fl(mark-symlinked-directories)555 -2012 y Fm(If)23 b(set)f(to)f(`)p Fl(on)p Fm(',)i(completed)g(names)g -(whic)o(h)g(are)f(sym)o(b)q(olic)i(links)f(to)f(di-)555 -2067 y(rectories)h(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(\(sub)s(ject) -e(to)f(the)i(v)m(alue)g(of)f Fl(mark-)555 2122 y(directories)p -Fm(\).)18 b(The)d(default)h(is)g(`)p Fl(off)p Fm('.)315 -2204 y Fl(match-hidden-files)555 2259 y Fm(This)c(v)m(ariable,)h(when)e -(set)g(to)g(`)p Fl(on)p Fm(',)f(causes)h(Readline)i(to)d(matc)o(h)h -(\014les)h(whose)555 2314 y(names)22 b(b)q(egin)h(with)g(a)e(`)p -Fl(.)p Fm(')h(\(hidden)h(\014les\))g(when)f(p)q(erforming)h(\014lename) -555 2369 y(completion,)g(unless)f(the)f(leading)h(`)p -Fl(.)p Fm(')e(is)h(supplied)i(b)o(y)e(the)f(user)h(in)h(the)555 -2423 y(\014lename)16 b(to)f(b)q(e)h(completed.)21 b(This)15 -b(v)m(ariable)i(is)f(`)p Fl(on)p Fm(')e(b)o(y)h(default.)315 -2506 y Fl(output-meta)555 2560 y Fm(If)j(set)f(to)g(`)p -Fl(on)p Fm(',)g(Readline)i(will)h(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 2615 y(set)g(directly)i(rather)d(than)h(as)g -(a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555 -2670 y(default)16 b(is)f(`)p Fl(off)p Fm('.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 149 y Fl(page-completions)555 204 y Fm(If)17 -b(set)g(to)f(`)p Fl(on)p Fm(',)g(Readline)i(uses)g(an)e(in)o(ternal)i -Fl(more)p Fm(-lik)o(e)g(pager)f(to)f(displa)o(y)555 259 -y(a)g(screenful)h(of)f(p)q(ossible)i(completions)f(at)f(a)g(time.)23 -b(This)17 b(v)m(ariable)g(is)g(`)p Fl(on)p Fm(')555 314 -y(b)o(y)e(default.)315 395 y Fl(print-completions-horizont)o(ally)555 -450 y Fm(If)d(set)g(to)f(`)p Fl(on)p Fm(',)h(Readline)h(will)g(displa)o -(y)h(completions)f(with)f(matc)o(hes)f(sorted)555 505 -y(horizon)o(tally)23 b(in)f(alphab)q(etical)i(order,)f(rather)e(than)g -(do)o(wn)h(the)g(screen.)555 560 y(The)15 b(default)h(is)g(`)p -Fl(off)p Fm('.)315 641 y Fl(show-all-if-ambiguous)555 -696 y Fm(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h -(completion)h(functions.)21 b(If)15 b(set)555 751 y(to)e(`)p -Fl(on)p Fm(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h -(p)q(ossible)i(completion)f(cause)555 806 y(the)20 b(matc)o(hes)f(to)f -(b)q(e)j(listed)f(immediately)h(instead)f(of)f(ringing)i(the)e(b)q -(ell.)555 861 y(The)c(default)h(v)m(alue)h(is)e(`)p Fl(off)p -Fm('.)315 942 y Fl(visible-stats)555 997 y Fm(If)h(set)g(to)f(`)p -Fl(on)p Fm(',)g(a)h(c)o(haracter)f(denoting)h(a)g(\014le's)h(t)o(yp)q -(e)f(is)g(app)q(ended)i(to)d(the)555 1052 y(\014lename)h(when)g -(listing)h(p)q(ossible)g(completions.)j(The)c(default)g(is)f(`)p -Fl(off)p Fm('.)75 1133 y(Key)h(Bindings)315 1188 y(The)21 -b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h(in)g(the)f -(init)h(\014le)g(is)g(simple.)39 b(First)20 b(y)o(ou)315 -1243 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f(command)h(that)f -(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 b(The)14 b(follo)o(wing)315 -1298 y(sections)k(con)o(tain)h(tables)f(of)f(the)h(command)g(name,)g -(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y)l(,)315 -1353 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q -(es.)315 1421 y(Once)k(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g -(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315 -1476 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e -(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315 -1530 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g -(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315 -1585 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most) -e(comfortable.)315 1653 y(In)19 b(addition)g(to)e(command)h(names,)g -(readline)i(allo)o(ws)e(k)o(eys)g(to)f(b)q(e)i(b)q(ound)g(to)e(a)h -(string)315 1708 y(that)c(is)i(inserted)g(when)g(the)f(k)o(ey)g(is)h -(pressed)g(\(a)e Fc(macro)r Fm(\).)315 1790 y Fc(k)o(eyname)s -Fm(:)19 b Fc(function-name)g Fm(or)c Fc(macro)555 1845 -y(k)o(eyname)i Fm(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j(out) -d(in)h(English.)21 b(F)l(or)13 b(example:)675 1910 y -Fl(Control-u:)22 b(universal-argument)675 1962 y(Meta-Rubout:)g -(backward-kill-word)675 2014 y(Control-o:)g(">)i(output")555 -2082 y Fm(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i Fg(C-u)e -Fm(is)h(b)q(ound)g(to)f(the)g(function)h Fl(universal-)555 -2137 y(argument)p Fm(,)e Fg(M-DEL)h Fm(is)g(b)q(ound)h(to)e(the)h -(function)h Fl(backward-kill-word)p Fm(,)555 2191 y(and)g -Fg(C-o)f Fm(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g -(the)f(righ)o(t)h(hand)555 2246 y(side)c(\(that)e(is,)i(to)e(insert)i -(the)f(text)g(`)p Fl(>)f(output)p Fm(')g(in)o(to)i(the)f(line\).)555 -2314 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e -(names)g(are)g(recognized)i(while)g(pro-)555 2369 y(cessing)13 -b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fc(DEL)p -Fm(,)11 b Fc(ESC)p Fm(,)h Fc(ESCAPE)p Fm(,)f Fc(LFD)p -Fm(,)g Fc(NEW-)555 2424 y(LINE)p Fm(,)16 b Fc(RET)p Fm(,)e -Fc(RETURN)p Fm(,)f Fc(R)o(UBOUT)p Fm(,)i Fc(SP)l(A)o(CE)p -Fm(,)g Fc(SPC)p Fm(,)f(and)i Fc(T)l(AB)p Fm(.)315 2506 -y Fl(")p Fc(k)o(eyseq)q Fl(")p Fm(:)k Fc(function-name)e -Fm(or)d Fc(macro)555 2560 y(k)o(eyseq)i Fm(di\013ers)e(from)g -Fc(k)o(eyname)j Fm(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g -(an)f(en-)555 2615 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q -(eci\014ed,)i(b)o(y)e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 -2670 y(double)e(quotes.)j(Some)c Fh(gnu)g Fm(Emacs)f(st)o(yle)h(k)o(ey) -g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fm(8)1322 b(GNU)15 b(Readline)h(Library)555 -149 y(in)i(the)f(follo)o(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o -(haracter)d(names)h(are)f(not)555 204 y(recognized.)675 -270 y Fl("\\C-u":)23 b(universal-argument)675 322 y("\\C-x\\C-r":)f -(re-read-init-file)675 373 y("\\e[11~":)h("Function)f(Key)i(1")555 -442 y Fm(In)33 b(the)f(ab)q(o)o(v)o(e)g(example,)37 b -Fg(C-u)32 b Fm(is)h(again)f(b)q(ound)h(to)f(the)g(function)555 -497 y Fl(universal-argument)19 b Fm(\(just)j(as)f(it)h(w)o(as)f(in)i -(the)f(\014rst)f(example\),)j(`)p Fg(C-x)555 551 y(C-r)p -Fm(')c(is)h(b)q(ound)g(to)f(the)h(function)g Fl(re-read-init-file)p -Fm(,)f(and)g(`)1731 549 y Ff(h)p 1743 523 70 2 v 1743 -551 a Fe(ESC)p 1743 559 V 1810 549 a Ff(i)15 b(h)p 1852 -523 10 2 v 1852 551 a Fe([)p 1852 560 V 1860 549 a Ff(i)555 -604 y(h)p 567 578 18 2 v 567 606 a Fe(1)p 567 614 V 583 -604 a Ff(i)g(h)p 625 578 V 625 606 a Fe(1)p 625 614 V -640 604 a Ff(i)g(h)p 683 578 24 2 v 683 606 a Fl(~)p -683 614 V 704 604 a Ff(i)719 606 y Fm(')g(is)h(b)q(ound)g(to)e(insert)i -(the)f(text)g(`)p Fl(Function)f(Key)g(1)p Fm('.)315 688 -y(The)h(follo)o(wing)h Fh(gnu)e Fm(Emacs)h(st)o(yle)g(escap)q(e)h -(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying)315 -743 y(k)o(ey)g(sequences:)315 825 y Fg(\\C-)168 b Fm(con)o(trol)15 -b(pre\014x)315 907 y Fg(\\M-)168 b Fm(meta)15 b(pre\014x)315 -989 y Fg(\\e)192 b Fm(an)15 b(escap)q(e)h(c)o(haracter)315 -1071 y Fg(\\\\)192 b Fm(bac)o(kslash)315 1152 y Fg(\\)p -Fl(")555 1150 y Ff(h)p 567 1124 V 567 1152 a Fl(")p 567 -1160 V 589 1150 a Ff(i)604 1152 y Fm(,)15 b(a)f(double)j(quotation)e -(mark)315 1234 y Fg(\\')555 1232 y Ff(h)p 567 1206 10 -2 v 567 1234 a Fe(')p 567 1242 V 575 1232 a Ff(i)590 -1234 y Fm(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 -1316 y(In)f(addition)h(to)f(the)f Fh(gnu)h Fm(Emacs)g(st)o(yle)f(escap) -q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315 -1371 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 1453 y -Fl(\\a)192 b Fm(alert)15 b(\(b)q(ell\))315 1535 y Fl(\\b)192 -b Fm(bac)o(kspace)315 1617 y Fl(\\d)g Fm(delete)315 1699 -y Fl(\\f)g Fm(form)14 b(feed)315 1781 y Fl(\\n)192 b -Fm(newline)315 1862 y Fl(\\r)g Fm(carriage)15 b(return)315 -1944 y Fl(\\t)192 b Fm(horizon)o(tal)16 b(tab)315 2026 -y Fl(\\v)192 b Fm(v)o(ertical)16 b(tab)315 2108 y Fl(\\)p -Fc(nnn)141 b Fm(the)17 b(eigh)o(t-bit)h(c)o(haracter)f(whose)g(v)m -(alue)i(is)e(the)h(o)q(ctal)f(v)m(alue)i Fc(nnn)f Fm(\(one)f(to)555 -2163 y(three)e(digits\))315 2245 y Fl(\\x)p Fc(HH)124 -b Fm(the)20 b(eigh)o(t-bit)g(c)o(haracter)f(whose)h(v)m(alue)h(is)f -(the)g(hexadecimal)h(v)m(alue)g Fc(HH)555 2300 y Fm(\(one)15 -b(or)g(t)o(w)o(o)f(hex)h(digits\))315 2382 y(When)k(en)o(tering)g(the)g -(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o(ust)f(b)q -(e)h(used)h(to)315 2436 y(indicate)12 b(a)f(macro)f(de\014nition.)20 -b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a)f(function)i -(name.)18 b(In)315 2491 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i(the)f(bac)o -(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are)g(expanded.) -20 b(Bac)o(kslash)315 2546 y(will)i(quote)d(an)o(y)h(other)g(c)o -(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p -Fl(")p Fm(')c(and)h(`)p Fl(')p Fm('.)34 b(F)l(or)315 -2601 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`) -p Fg(C-x)i Fl(\\)p Fm(')f(insert)g(a)g(single)h(`)p Fl(\\)p -Fm(')e(in)o(to)h(the)g(line:)435 2666 y Fl("\\C-x\\\\":)23 -b("\\\\")p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)75 149 y Fb(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -246 y Fm(Readline)f(implemen)o(ts)g(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -301 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g -(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f -(as)75 355 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g -(directiv)o(es)h(used.)75 435 y Fl($if)168 b Fm(The)16 -b Fl($if)f Fm(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g -(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 490 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)33 b(The)19 b(text)g(of)f(the)i(test)315 545 -y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f -(are)h(required)i(to)d(isolate)i(it.)315 624 y Fl(mode)144 -b Fm(The)11 b Fl(mode=)e Fm(form)h(of)g(the)h Fl($if)f -Fm(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555 -679 y(is)k(in)h Fl(emacs)e Fm(or)g Fl(vi)g Fm(mo)q(de.)20 -b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555 -734 y(`)p Fl(set)f(keymap)p Fm(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Fl(emacs-)555 789 y(standard)d -Fm(and)i Fl(emacs-ctlx)e Fm(k)o(eymaps)h(only)i(if)f(Readline)g(is)g -(starting)f(out)555 844 y(in)k Fl(emacs)f Fm(mo)q(de.)315 -923 y Fl(term)144 b Fm(The)14 b Fl(term=)e Fm(form)h(ma)o(y)g(b)q(e)h -(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555 -978 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j -(output)e(b)o(y)g(the)g(terminal's)555 1033 y(function)13 -b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g -(the)g(`)p Fl(=)p Fm(')f(is)h(tested)g(against)555 1088 -y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q -(ortion)h(of)e(the)h(terminal)555 1142 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Fl(-)p Fm('.)24 b(This)17 b(allo)o(ws)g -Fl(sun)f Fm(to)g(matc)o(h)h(b)q(oth)f Fl(sun)h Fm(and)555 -1197 y Fl(sun-cmd)p Fm(,)d(for)g(instance.)315 1277 y -Fl(application)555 1332 y Fm(The)d Fc(application)i Fm(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -1386 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)i -(library)f(sets)f(the)g Fc(application)555 1441 y(name)p -Fm(,)g(and)g(y)o(ou)f(can)h(test)f(for)g(a)g(particular)h(v)m(alue.)20 -b(This)12 b(could)h(b)q(e)f(used)h(to)555 1496 y(bind)18 -b(k)o(ey)e(sequences)i(to)d(functions)j(useful)f(for)f(a)g(sp)q -(eci\014c)i(program.)23 b(F)l(or)555 1551 y(instance,)17 -b(the)g(follo)o(wing)g(command)g(adds)f(a)g(k)o(ey)h(sequence)g(that)f -(quotes)555 1606 y(the)f(curren)o(t)g(or)g(previous)h(w)o(ord)e(in)j -(Bash:)675 1670 y Fl($if)23 b(Bash)675 1722 y(#)h(Quote)f(the)g -(current)g(or)h(previous)f(word)675 1774 y("\\C-xq":)g -("\\eb\\"\\ef\\"")675 1826 y($endif)75 1905 y($endif)96 -b Fm(This)16 b(command,)e(as)h(seen)h(in)g(the)f(previous)h(example,)g -(terminates)f(an)g Fl($if)f Fm(command.)75 1985 y Fl($else)120 -b Fm(Commands)15 b(in)h(this)f(branc)o(h)h(of)e(the)i -Fl($if)e Fm(directiv)o(e)j(are)e(executed)h(if)g(the)f(test)g(fails.)75 -2065 y Fl($include)48 b Fm(This)22 b(directiv)o(e)h(tak)o(es)e(a)h -(single)h(\014lename)g(as)e(an)h(argumen)o(t)f(and)h(reads)f(commands) -315 2120 y(and)e(bindings)j(from)c(that)h(\014le.)33 -b(F)l(or)19 b(example,)i(the)e(follo)o(wing)h(directiv)o(e)h(reads)e -(from)315 2174 y(`)p Fl(/etc/inputrc)p Fm(':)435 2239 -y Fl($include)k(/etc/inputrc)75 2351 y Fb(1.3.3)30 b(Sample)20 -b(Init)h(File)137 2447 y Fm(Here)16 b(is)g(an)f(example)h(of)f(an)g -Fc(inputrc)k Fm(\014le.)i(This)16 b(illustrates)g(k)o(ey)f(binding,)i -(v)m(ariable)f(assignmen)o(t,)75 2502 y(and)f(conditional)i(syn)o(tax.) -p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fm(10)1299 b(GNU)15 b(Readline)h(Library)195 -201 y Fl(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(GNU) -f(Readline)g(library.)47 b(Existing)195 305 y(#)24 b(programs)e -(include)h(FTP,)h(Bash,)f(and)g(GDB.)195 357 y(#)195 -409 y(#)h(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h(C-x)f -(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h(comments.) -195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g(systemwide)g -(bindings)f(and)i(variable)195 616 y(#)g(assignments)e(from)h -(/etc/Inputrc)195 668 y($include)g(/etc/Inputrc)195 772 -y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.)195 -928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195 -1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v -195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195 -1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g -(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195 -1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195 -1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g -(previous-history)195 1914 y("\\M-[B":)g(next-history)195 -1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g -(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195 -2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g -(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p -eop -%%Page: 11 13 -11 12 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 201 y Fl(C-q:)23 b(quoted-insert)195 305 y($endif)195 -409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h -(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g -(are)h(convenient)e(for)h(shell)h(interaction)195 616 -y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720 -y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 -772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)195 -824 y(#)g(insert)f(open)g(and)h(close)f(double)g(quotes)195 -876 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g(quote)195 -928 y("\\C-x\\"":)g("\\"\\"\\C-b")195 980 y(#)h(insert)f(a)g(backslash) -g(\(testing)g(backslash)g(escapes)195 1032 y(#)h(in)f(sequences)g(and)g -(macros\))195 1083 y("\\C-x\\\\":)g("\\\\")195 1135 y(#)h(Quote)f(the)g -(current)g(or)h(previous)f(word)195 1187 y("\\C-xq":)g -("\\eb\\"\\ef\\"")195 1239 y(#)h(Add)f(a)h(binding)f(to)g(refresh)g -(the)h(line,)f(which)g(is)h(unbound)195 1291 y("\\C-xr":)f -(redraw-current-line)195 1343 y(#)h(Edit)f(variable)g(on)g(current)g -(line.)195 1395 y("\\M-\\C-v":)f("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=) -o(")195 1447 y($endif)195 1550 y(#)i(use)f(a)h(visible)f(bell)g(if)h -(one)f(is)h(available)195 1602 y(set)f(bell-style)g(visible)195 -1706 y(#)h(don't)f(strip)g(characters)g(to)g(7)h(bits)f(when)h(reading) -195 1758 y(set)f(input-meta)g(on)195 1862 y(#)h(allow)f(iso-latin1)f -(characters)h(to)g(be)h(inserted)f(rather)195 1914 y(#)h(than)f -(converted)g(to)g(prefix-meta)g(sequences)195 1966 y(set)g -(convert-meta)g(off)195 2069 y(#)h(display)f(characters)f(with)h(the)h -(eighth)f(bit)g(set)h(directly)195 2121 y(#)g(rather)f(than)g(as)h -(meta-prefixed)e(characters)195 2173 y(set)h(output-meta)g(on)195 -2277 y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g -(completions)f(for)195 2329 y(#)i(a)f(word,)h(ask)f(the)h(user)f(if)g -(he)h(wants)f(to)h(see)f(all)h(of)f(them)195 2381 y(set)g -(completion-query-items)e(150)195 2484 y(#)j(For)f(FTP)195 -2536 y($if)g(Ftp)195 2588 y("\\C-xg":)g("get)g(\\M-?")195 -2640 y("\\C-xt":)g("put)g(\\M-?")p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fm(12)1299 b(GNU)15 b(Readline)h(Library)195 -149 y Fl("\\M-.":)23 b(yank-last-arg)195 201 y($endif)75 -329 y Fk(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -425 y Fm(This)17 b(section)f(describ)q(es)h(Readline)g(commands)f(that) -e(ma)o(y)h(b)q(e)i(b)q(ound)f(to)f(k)o(ey)h(sequences.)22 -b(Com-)75 480 y(mand)15 b(names)g(without)h(an)f(accompan)o(ying)g(k)o -(ey)g(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)f(default.)137 -547 y(In)f(the)f(follo)o(wing)h(descriptions,)h Fc(p)q(oin)o(t)f -Fm(refers)f(to)g(the)g(curren)o(t)g(cursor)f(p)q(osition,)j(and)e -Fc(mark)i Fm(refers)75 601 y(to)k(a)g(cursor)g(p)q(osition)h(sa)o(v)o -(ed)f(b)o(y)h(the)f Fl(set-mark)g Fm(command.)32 b(The)20 -b(text)f(b)q(et)o(w)o(een)g(the)h(p)q(oin)o(t)g(and)75 -656 y(mark)15 b(is)g(referred)h(to)e(as)h(the)g Fc(region)p -Fm(.)75 767 y Fb(1.4.1)30 b(Commands)21 b(F)-5 b(or)19 -b(Mo)n(ving)75 888 y Fl(beginning-of-line)13 b(\(C-a\))315 -942 y Fm(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g(curren)o(t)g(line.) -75 1034 y Fl(end-of-line)f(\(C-e\))315 1088 y Fm(Mo)o(v)o(e)g(to)h(the) -g(end)h(of)f(the)g(line.)75 1179 y Fl(forward-char)f(\(C-f\))315 -1234 y Fm(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)75 -1325 y Fl(backward-char)e(\(C-b\))315 1380 y Fm(Mo)o(v)o(e)h(bac)o(k)h -(a)g(c)o(haracter.)75 1471 y Fl(forward-word)f(\(M-f\))315 -1526 y Fm(Mo)o(v)o(e)g(forw)o(ard)g(to)g(the)i(end)g(of)e(the)h(next)h -(w)o(ord.)j(W)l(ords)c(are)f(comp)q(osed)i(of)f(letters)g(and)315 -1581 y(digits.)75 1672 y Fl(backward-word)e(\(M-b\))315 -1727 y Fm(Mo)o(v)o(e)j(bac)o(k)g(to)h(the)f(start)g(of)g(the)h(curren)o -(t)g(or)f(previous)i(w)o(ord.)24 b(W)l(ords)16 b(are)h(comp)q(osed)315 -1782 y(of)e(letters)g(and)g(digits.)75 1873 y Fl(clear-screen)f -(\(C-l\))315 1928 y Fm(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g -(curren)o(t)g(line,)i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g -(top)315 1982 y(of)i(the)g(screen.)75 2074 y Fl(redraw-current-line)e -(\(\))315 2128 y Fm(Refresh)i(the)g(curren)o(t)g(line.)22 -b(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2239 -y Fb(1.4.2)30 b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f -(History)75 2360 y Fl(accept-line)14 b(\(Newline)g(or)h(Return\))315 -2414 y Fm(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor) -f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315 -2469 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g -(future)g(recall)h(with)f Fl(add_history\(\))p Fm(.)k(If)d(this)315 -2524 y(line)g(is)f(a)e(mo)q(di\014ed)j(history)e(line,)i(the)e(history) -g(line)i(is)f(restored)e(to)h(its)g(original)i(state.)75 -2615 y Fl(previous-history)c(\(C-p\))315 2670 y Fm(Mo)o(v)o(e)h(`bac)o -(k')h(through)f(the)i(history)f(list,)g(fetc)o(hing)h(the)f(previous)h -(command.)p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 149 y Fl(next-history)14 b(\(C-n\))315 204 y -Fm(Mo)o(v)o(e)g(`forw)o(ard')f(through)i(the)h(history)f(list,)g(fetc)o -(hing)h(the)f(next)h(command.)75 307 y Fl(beginning-of-history)c -(\(M-<\))315 362 y Fm(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f -(the)f(history)l(.)75 465 y Fl(end-of-history)e(\(M->\))315 -520 y Fm(Mo)o(v)o(e)h(to)h(the)g(end)h(of)f(the)g(input)h(history)l(,)f -(i.e.,)g(the)g(line)i(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 -624 y Fl(reverse-search-history)c(\(C-r\))315 678 y Fm(Searc)o(h)k(bac) -o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving) -h(`up')f(through)g(the)h(his-)315 733 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 836 -y Fl(forward-search-history)c(\(C-s\))315 891 y Fm(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 946 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 1049 -y Fl(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -1104 y Fm(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o -(t)f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -1159 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1214 -y(user.)75 1317 y Fl(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1372 y Fm(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1426 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1481 y(user.)75 1584 y Fl(history-search-forward)f(\(\))315 -1639 y Fm(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1694 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1749 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1852 y Fl(history-search-backward)c(\(\))315 1907 y Fm(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1962 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -2016 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -2120 y Fl(yank-nth-arg)e(\(M-C-y\))315 2174 y Fm(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 2229 y(the)j(previous)h(line\))g(at)e -(p)q(oin)o(t.)21 b(With)15 b(an)g(argumen)o(t)f Fc(n)p -Fm(,)h(insert)g(the)g Fc(n)p Fm(th)g(w)o(ord)g(from)f(the)315 -2284 y(previous)g(command)g(\(the)f(w)o(ords)f(in)j(the)e(previous)i -(command)e(b)q(egin)i(with)e(w)o(ord)g(0\).)19 b(A)315 -2339 y(negativ)o(e)13 b(argumen)o(t)f(inserts)h(the)g -Fc(n)p Fm(th)g(w)o(ord)f(from)g(the)h(end)h(of)e(the)h(previous)g -(command.)75 2442 y Fl(yank-last-arg)g(\(M-.)i(or)g(M-_\))315 -2497 y Fm(Insert)j(last)f(argumen)o(t)g(to)g(the)g(previous)i(command)e -(\(the)g(last)h(w)o(ord)f(of)g(the)g(previous)315 2552 -y(history)e(en)o(try\).)20 b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v) -o(e)g(exactly)h(lik)o(e)g Fl(yank-nth-arg)p Fm(.)j(Succes-)315 -2606 y(siv)o(e)f(calls)g(to)f Fl(yank-last-arg)e Fm(mo)o(v)o(e)i(bac)o -(k)g(through)g(the)g(history)g(list,)i(inserting)f(the)315 -2661 y(last)d(argumen)o(t)g(of)f(eac)o(h)i(line)g(in)g(turn.)p -eop -%%Page: 14 16 -14 15 bop 75 -58 a Fm(14)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fb(1.4.3)30 b(Commands)21 b(F)-5 b(or)19 b(Changing)i(T)-5 -b(ext)75 286 y Fl(delete-char)14 b(\(C-d\))315 341 y -Fm(Delete)20 b(the)g(c)o(haracter)e(at)h(p)q(oin)o(t.)33 -b(If)20 b(p)q(oin)o(t)g(is)g(at)e(the)i(b)q(eginning)i(of)d(the)g -(line,)j(there)315 396 y(are)c(no)h(c)o(haracters)e(in)j(the)e(line,)j -(and)e(the)f(last)h(c)o(haracter)e(t)o(yp)q(ed)i(w)o(as)f(not)g(b)q -(ound)i(to)315 450 y Fl(delete-char)p Fm(,)13 b(then)j(return)f -Fh(eof)p Fm(.)75 552 y Fl(backward-delete-char)d(\(Rubout\))315 -607 y Fm(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c -(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 -661 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -763 y Fl(forward-backward-delete-ch)o(ar)12 b(\(\))315 -818 y Fm(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h -(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315 -872 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h -(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315 -927 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 1029 -y Fl(quoted-insert)e(\(C-q)i(or)g(C-v\))315 1083 y Fm(Add)j(the)f(next) -g(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26 -b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 1138 -y(sequences)f(lik)o(e)h Fg(C-q)p Fm(,)d(for)h(example.)75 -1240 y Fl(tab-insert)f(\(M-)401 1238 y Ff(h)p 412 1212 -74 2 v 412 1240 a Fe(T)m(AB)p 412 1247 V 484 1238 a Ff(i)499 -1240 y Fl(\))315 1294 y Fm(Insert)h(a)g(tab)g(c)o(haracter.)75 -1396 y Fl(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315 -1451 y Fm(Insert)g(y)o(ourself.)75 1552 y Fl(transpose-chars)e(\(C-t\)) -315 1607 y Fm(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e -(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315 -1662 y(mo)o(ving)i(the)f(cursor)h(forw)o(ard)e(as)i(w)o(ell.)28 -b(If)18 b(the)g(insertion)h(p)q(oin)o(t)f(is)g(at)f(the)h(end)h(of)e -(the)315 1716 y(line,)c(then)e(this)h(transp)q(oses)e(the)h(last)g(t)o -(w)o(o)f(c)o(haracters)g(of)h(the)g(line.)20 b(Negativ)o(e)11 -b(argumen)o(ts)315 1771 y(ha)o(v)o(e)k(no)g(e\013ect.)75 -1873 y Fl(transpose-words)e(\(M-t\))315 1927 y Fm(Drag)i(the)h(w)o(ord) -g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o -(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1982 -y(w)o(ord)d(as)h(w)o(ell.)21 b(If)14 b(the)g(insertion)i(p)q(oin)o(t)e -(is)h(at)f(the)g(end)h(of)e(the)i(line,)g(this)g(transp)q(oses)f(the) -315 2037 y(last)h(t)o(w)o(o)f(w)o(ords)g(on)i(the)f(line.)75 -2138 y Fl(upcase-word)f(\(M-u\))315 2193 y Fm(Upp)q(ercase)j(the)f -(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o(ord.)22 b(With)16 -b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 2248 -y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g(mo)o(v)o(e)f(the) -i(cursor.)75 2349 y Fl(downcase-word)d(\(M-l\))315 2404 -y Fm(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o -(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o(ercase) -315 2459 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)75 2560 y Fl(capitalize-word)e(\(M-c\))315 -2615 y Fm(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o -(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315 -2670 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 149 y Fl(overwrite-mode)13 b(\(\))315 204 y Fm(T)l(oggle)j(o)o -(v)o(erwrite)g(mo)q(de.)24 b(With)17 b(an)f(explicit)j(p)q(ositiv)o(e)f -(n)o(umeric)f(argumen)o(t,)f(switc)o(hes)315 259 y(to)10 -b(o)o(v)o(erwrite)g(mo)q(de.)19 b(With)11 b(an)g(explicit)i(non-p)q -(ositiv)o(e)f(n)o(umeric)g(argumen)o(t,)e(switc)o(hes)i(to)315 -314 y(insert)k(mo)q(de.)k(This)c(command)f(a\013ects)g(only)h -Fl(emacs)e Fm(mo)q(de;)h Fl(vi)g Fm(mo)q(de)h(do)q(es)g(o)o(v)o -(erwrite)315 369 y(di\013eren)o(tly)l(.)21 b(Eac)o(h)15 -b(call)h(to)f Fl(readline\(\))f Fm(starts)f(in)k(insert)e(mo)q(de.)315 -436 y(In)g(o)o(v)o(erwrite)f(mo)q(de,)h(c)o(haracters)f(b)q(ound)h(to)f -Fl(self-insert)f Fm(replace)j(the)e(text)h(at)e(p)q(oin)o(t)315 -491 y(rather)20 b(than)h(pushing)h(the)f(text)f(to)g(the)h(righ)o(t.)36 -b(Characters)20 b(b)q(ound)i(to)e Fl(backward-)315 546 -y(delete-char)14 b Fm(replace)i(the)f(c)o(haracter)g(b)q(efore)g(p)q -(oin)o(t)h(with)f(a)g(space.)315 614 y(By)g(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 729 y Fb(1.4.4)30 b(Killing)20 -b(And)h(Y)-5 b(anking)75 853 y Fl(kill-line)14 b(\(C-k\))315 -908 y Fm(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 1002 y Fl(backward-kill-line)e(\(C-x)h(Rubout\))315 -1057 y Fm(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 1151 y Fl(unix-line-discard)e(\(C-u\))315 1205 -y Fm(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 1299 y Fl(kill-whole-line) -e(\(\))315 1354 y Fm(Kill)20 b(all)g(c)o(haracters)d(on)h(the)h(curren) -o(t)f(line,)i(no)e(matter)g(where)g(p)q(oin)o(t)h(is.)29 -b(By)19 b(default,)315 1409 y(this)d(is)f(un)o(b)q(ound.)75 -1503 y Fl(kill-word)f(\(M-d\))315 1558 y Fm(Kill)j(from)d(p)q(oin)o(t)h -(to)f(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o -(w)o(een)g(w)o(ords,)e(to)i(the)f(end)315 1613 y(of)h(the)g(next)g(w)o -(ord.)20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Fl(forward-word)p Fm(.)75 1707 y Fl(backward-kill-word)e(\(M-)592 -1705 y Ff(h)p 603 1679 73 2 v 603 1707 a Fe(DEL)p 603 -1714 V 674 1705 a Ff(i)689 1707 y Fl(\))315 1761 y Fm(Kill)k(the)d(w)o -(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f -(the)h(same)f(as)g Fl(backward-word)p Fm(.)75 1855 y -Fl(unix-word-rubout)f(\(C-w\))315 1910 y Fm(Kill)18 b(the)e(w)o(ord)f -(b)q(ehind)j(p)q(oin)o(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g -(b)q(oundary)l(.)23 b(The)16 b(killed)315 1965 y(text)f(is)g(sa)o(v)o -(ed)g(on)g(the)h(kill-ring.)75 2059 y Fl(delete-horizontal-space)c -(\(\))315 2114 y Fm(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q -(oin)o(t.)k(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 -2208 y Fl(kill-region)e(\(\))315 2263 y Fm(Kill)j(the)f(text)e(in)i -(the)g(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g -(is)h(un)o(b)q(ound.)75 2357 y Fl(copy-region-as-kill)d(\(\))315 -2412 y Fm(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 2466 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 2560 y Fl(copy-backward-word)d(\(\))315 2615 -y Fm(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -2670 y(same)c(as)g Fl(backward-word)p Fm(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fm(16)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fl(copy-forward-word)d(\(\))315 204 y Fm(Cop)o(y)i(the)h(w)o(ord) -e(follo)o(wing)j(p)q(oin)o(t)f(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o -(ord)f(b)q(oundaries)i(are)e(the)315 259 y(same)g(as)g -Fl(forward-word)p Fm(.)j(By)d(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 342 y Fl(yank)f(\(C-y\))315 397 y Fm(Y)l(ank)g(the)h(top)f -(of)f(the)i(kill)h(ring)e(in)o(to)g(the)h(bu\013er)f(at)f(p)q(oin)o(t.) -75 481 y Fl(yank-pop)g(\(M-y\))315 535 y Fm(Rotate)i(the)h(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 590 y(command)d(is)h Fl(yank)e -Fm(or)h Fl(yank-pop)p Fm(.)75 693 y Fb(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 806 y Fl(digit-argument)13 -b(\()p Fg(M-0)p Fl(,)i Fg(M-1)p Fl(,)f(...)h Fg(M--)p -Fl(\))315 861 y Fm(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e -(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315 -915 y Fg(M--)h Fm(starts)f(a)h(negativ)o(e)g(argumen)o(t.)75 -999 y Fl(universal-argument)e(\(\))315 1054 y Fm(This)g(is)h(another)e -(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -1108 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o -(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 -1163 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Fl(universal-argument)315 1218 -y Fm(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h -(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -1273 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) -f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 -1328 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h -(the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -1382 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f -(executing)i(this)f(function)h(the)e(\014rst)h(time)315 -1437 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g -(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -1492 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 1595 y Fb(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 1708 y Fl(complete)14 b(\()305 1706 y Ff(h)p -317 1680 74 2 v 317 1708 a Fe(T)m(AB)p 317 1715 V 389 -1706 a Ff(i)404 1708 y Fl(\))315 1762 y Fm(A)o(ttempt)c(to)h(p)q -(erform)g(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 1817 y(p)q(erformed)j(is)h -(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1901 y Fl(possible-completions)c(\(M-?\))315 -1955 y Fm(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(p)q(oin)o(t.)75 2039 y Fl(insert-completions)d(\(M-*\))315 -2093 y Fm(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) -q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -2148 y(b)o(y)f Fl(possible-completions)p Fm(.)75 2232 -y Fl(menu-complete)e(\(\))315 2286 y Fm(Similar)g(to)f -Fl(complete)p Fm(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 2341 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)19 -b(execution)h(of)f Fl(menu-complete)315 2396 y Fm(steps)h(through)g -(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 2451 y(A)o(t)d(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)d(rung)h(\(sub)s(ject)f(to)f -(the)i(setting)315 2506 y(of)f Fl(bell-style)p Fm(\))e(and)i(the)g -(original)h(text)f(is)g(restored.)28 b(An)19 b(argumen)o(t)e(of)g -Fc(n)i Fm(mo)o(v)o(es)e Fc(n)315 2560 y Fm(p)q(ositions)h(forw)o(ard)e -(in)j(the)e(list)h(of)f(matc)o(hes;)h(a)f(negativ)o(e)g(argumen)o(t)g -(ma)o(y)g(b)q(e)h(used)g(to)315 2615 y(mo)o(v)o(e)g(bac)o(kw)o(ard)h -(through)g(the)g(list.)32 b(This)20 b(command)f(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)315 2668 y Ff(h)p 327 2642 V 327 -2670 a Fe(T)m(AB)p 327 2678 V 399 2668 a Ff(i)414 2670 -y Fm(,)15 b(but)g(is)h(un)o(b)q(ound)g(b)o(y)f(default.)p -eop -%%Page: 17 19 -17 18 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Fl(delete-char-or-list)13 b(\(\))315 204 -y Fm(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h(not)f -(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315 -259 y(\(lik)o(e)i Fl(delete-char)p Fm(\).)j(If)d(at)f(the)h(end)g(of)f -(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d -Fl(possible-)315 314 y(completions)p Fm(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 428 y Fb(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 551 y Fl(start-kbd-macro)13 b(\(C-x)i(\(\))315 -606 y Fm(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o -(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 699 -y Fl(end-kbd-macro)e(\(C-x)i(\)\))315 754 y Fm(Stop)f(sa)o(ving)f(the)h -(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q -(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 809 y(de\014nition.)75 -902 y Fl(call-last-kbd-macro)g(\(C-x)h(e\))315 957 y -Fm(Re-execute)k(the)g(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i(b)o -(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 1012 -y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o(eyb)q -(oard.)75 1126 y Fb(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -1249 y Fl(re-read-init-file)13 b(\(C-x)h(C-r\))315 1304 -y Fm(Read)d(in)g(the)g(con)o(ten)o(ts)g(of)f(the)h Fc(inputrc)k -Fm(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 1358 y(assignmen)o(ts)k(found)h(there.)75 -1452 y Fl(abort)e(\(C-g\))315 1507 y Fm(Ab)q(ort)f(the)g(curren)o(t)h -(editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s -(ject)e(to)g(the)315 1561 y(setting)i(of)g Fl(bell-style)p -Fm(\).)75 1655 y Fl(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fc(x)p Fl(,)h(...\))315 1710 y Fm(If)f(the)g(meta\014ed)g(c)o(haracter) -f Fc(x)k Fm(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g -(b)q(ound)h(to)e(the)315 1764 y(corresp)q(onding)j(upp)q(ercase)g(c)o -(haracter.)75 1858 y Fl(prefix-meta)e(\()377 1856 y Ff(h)p -389 1830 70 2 v 389 1858 a Fe(ESC)p 389 1866 V 456 1856 -a Ff(i)471 1858 y Fl(\))315 1913 y Fm(Metafy)k(the)h(next)g(c)o -(haracter)f(t)o(yp)q(ed.)30 b(This)20 b(is)f(for)f(k)o(eyb)q(oards)h -(without)g(a)f(meta)g(k)o(ey)l(.)315 1968 y(T)o(yping)e(`)485 -1966 y Ff(h)p 496 1939 V 496 1968 a Fe(ESC)p 496 1975 -V 563 1966 a Ff(i)593 1968 y Fl(f)p Fm(')f(is)h(equiv)m(alen)o(t)h(to)d -(t)o(yping)i Fg(M-f)p Fm(.)75 2061 y Fl(undo)f(\(C-_)f(or)h(C-x)g -(C-u\))315 2116 y Fm(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 2209 y Fl(revert-line)f(\(M-r\))315 -2264 y Fm(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26 -b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Fl(undo)f -Fm(command)315 2319 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 2412 y Fl(tilde-expand)f(\(M-~\))315 -2467 y Fm(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 2560 y Fl(set-mark)f(\(C-@\))315 2615 y Fm(Set)i(the)h(mark)f -(to)f(the)i(p)q(oin)o(t.)24 b(If)17 b(a)f(n)o(umeric)h(argumen)o(t)f -(is)g(supplied,)j(the)e(mark)e(is)i(set)315 2670 y(to)e(that)f(p)q -(osition.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fm(18)1299 b(GNU)15 b(Readline)h(Library)75 -149 y Fl(exchange-point-and-mark)c(\(C-x)j(C-x\))315 -204 y Fm(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k(The)c -(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o(v)o(ed) -315 259 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q(osition)h(is)g -(sa)o(v)o(ed)f(as)g(the)g(mark.)75 347 y Fl(character-search)e(\(C-]\)) -315 402 y Fm(A)f(c)o(haracter)g(is)h(read)g(and)f(p)q(oin)o(t)h(is)g -(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q(ccurrence)g(of)f(that)g(c)o -(haracter.)315 456 y(A)j(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f -(previous)i(o)q(ccurrences.)75 544 y Fl(character-search-backward)c -(\(M-C-]\))315 599 y Fm(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q -(oin)o(t)g(is)g(mo)o(v)o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of) -e(that)315 654 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o -(hes)g(for)f(subsequen)o(t)i(o)q(ccurrences.)75 741 y -Fl(insert-comment)d(\(M-#\))315 796 y Fm(Without)18 b(a)f(n)o(umeric)i -(argumen)o(t,)e(the)h(v)m(alue)h(of)f(the)f Fl(comment-begin)f -Fm(v)m(ariable)k(is)e(in-)315 851 y(serted)e(at)f(the)h(b)q(eginning)i -(of)d(the)h(curren)o(t)g(line.)23 b(If)16 b(a)g(n)o(umeric)h(argumen)o -(t)e(is)h(supplied,)315 906 y(this)j(command)f(acts)g(as)f(a)h(toggle:) -26 b(if)19 b(the)f(c)o(haracters)g(at)f(the)i(b)q(eginning)h(of)e(the)g -(line)315 960 y(do)d(not)g(matc)o(h)g(the)g(v)m(alue)i(of)e -Fl(comment-begin)p Fm(,)e(the)i(v)m(alue)i(is)f(inserted,)f(otherwise)h -(the)315 1015 y(c)o(haracters)j(in)i Fl(comment-begin)d -Fm(are)i(deleted)i(from)d(the)h(b)q(eginning)i(of)e(the)g(line.)36 -b(In)315 1070 y(either)16 b(case,)f(the)g(line)i(is)f(accepted)f(as)g -(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)75 1158 -y Fl(dump-functions)c(\(\))315 1213 y Fm(Prin)o(t)g(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)g -(output)f(stream.)315 1267 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i -(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o -(y)f(that)315 1322 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Fc(inputrc)k Fm(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1410 y Fl(dump-variables)e(\(\))315 -1465 y Fm(Prin)o(t)e(all)g(of)f(the)h(settable)g(v)m(ariables)h(and)f -(their)g(v)m(alues)h(to)e(the)h(Readline)h(output)e(stream.)315 -1519 y(If)16 b(a)g(n)o(umeric)g(argumen)o(t)f(is)i(supplied,)h(the)e -(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 -1574 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g Fc(inputrc)k -Fm(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.) -75 1662 y Fl(dump-macros)f(\(\))315 1717 y Fm(Prin)o(t)j(all)h(of)e -(the)h(Readline)h(k)o(ey)f(sequences)h(b)q(ound)g(to)e(macros)g(and)h -(the)g(strings)g(they)315 1771 y(output.)26 b(If)18 b(a)f(n)o(umeric)h -(argumen)o(t)f(is)h(supplied,)i(the)d(output)g(is)h(formatted)e(in)j -(suc)o(h)e(a)315 1826 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g -(part)g(of)f(an)h Fc(inputrc)k Fm(\014le.)i(This)15 b(command)g(is)h -(un)o(b)q(ound)g(b)o(y)315 1881 y(default.)75 1969 y -Fl(emacs-editing-mode)d(\(C-e\))315 2024 y Fm(When)j(in)g -Fl(vi)e Fm(command)i(mo)q(de,)f(this)g(causes)h(a)f(switc)o(h)g(to)g -Fl(emacs)f Fm(editing)j(mo)q(de.)75 2111 y Fl(vi-editing-mode)c -(\(M-C-j\))315 2166 y Fm(When)j(in)g Fl(emacs)e Fm(editing)j(mo)q(de,)e -(this)g(causes)h(a)f(switc)o(h)g(to)g Fl(vi)f Fm(editing)j(mo)q(de.)75 -2290 y Fk(1.5)33 b(Readline)23 b(vi)h(Mo)r(de)137 2385 -y Fm(While)13 b(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o(e)f -(a)h(full)h(set)f(of)f Fl(vi)g Fm(editing)j(functions,)f(it)f(do)q(es)g -(con)o(tain)75 2440 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h -(of)d(the)i(line.)27 b(The)17 b(Readline)h Fl(vi)f Fm(mo)q(de)g(b)q -(eha)o(v)o(es)g(as)g(sp)q(eci\014ed)i(in)75 2495 y(the)c -Fh(posix)g Fm(1003.2)f(standard.)137 2560 y(In)h(order)g(to)f(switc)o -(h)g(in)o(teractiv)o(ely)i(b)q(et)o(w)o(een)f Fl(emacs)e -Fm(and)i Fl(vi)f Fm(editing)i(mo)q(des,)f(use)f(the)h(command)75 -2615 y Fg(M-C-j)j Fm(\(b)q(ound)i(to)e(emacs-editing-mo)q(de)j(when)e -(in)h Fl(vi)f Fm(mo)q(de)g(and)g(to)f(vi-editing-mo)q(de)k(in)e -Fl(emacs)75 2670 y Fm(mo)q(de\).)g(The)15 b(Readline)i(default)f(is)f -Fl(emacs)g Fm(mo)q(de.)p eop -%%Page: 19 21 -19 20 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(19)137 149 y(When)16 b(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e -Fl(vi)g Fm(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g -(`insertion')f(mo)q(de,)g(as)g(if)g(y)o(ou)75 204 y(had)e(t)o(yp)q(ed)h -(an)f(`)p Fl(i)p Fm('.)18 b(Pressing)608 202 y Ff(h)p -620 176 70 2 v 620 204 a Fe(ESC)p 620 212 V 687 202 a -Ff(i)715 204 y Fm(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q -(de,)i(where)f(y)o(ou)g(can)g(edit)h(the)75 259 y(text)i(of)h(the)g -(line)h(with)g(the)f(standard)f Fl(vi)h Fm(mo)o(v)o(emen)o(t)f(k)o -(eys,)g(mo)o(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 -314 y(`)p Fl(k)p Fm(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Fl(j)p Fm(',)e(and)h(so)g(forth.)p eop -%%Page: 20 22 -20 21 bop 75 -58 a Fm(20)1299 b(GNU)15 b(Readline)h(Library)p -eop -%%Page: -1 23 --1 22 bop 1862 -58 a Fm(i)75 149 y Fi(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fk(1)67 b(Command)22 b(Line)i(Editing)d -Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fk(1)224 389 y Fm(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fm(1)224 444 y(1.2)45 b(Readline)16 b(In)o(teraction)8 -b Fd(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fm(1)374 499 y(1.2.1)44 b(Readline)16 -b(Bare)f(Essen)o(tials)f Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fm(1)374 553 y(1.2.2)44 b(Readline)16 b(Mo)o(v)o(emen)o(t)e(Commands) -7 b Fd(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fm(2)374 608 y(1.2.3)44 b(Readline)16 b(Killing)i(Commands) -11 b Fd(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fm(2)374 663 y(1.2.4)44 b(Readline)16 -b(Argumen)o(ts)c Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fm(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fd(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fm(3)224 773 y(1.3)45 b(Readline)16 b(Init)h(File)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fm(4)374 827 y(1.3.1)44 b(Readline)16 -b(Init)g(File)h(Syn)o(tax)7 b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fm(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fd(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fm(9)374 937 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fd(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fm(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)g(Commands) -6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fm(12)374 -1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fm(12)374 1101 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fd(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fm(12)374 1156 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fd(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fm(14)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fd(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fm(15)374 -1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fm(16)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)i(T)o(yp)q(e)e(F)l -(or)g(Y)l(ou)10 b Fd(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fm(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fm(17)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fm(17)224 1485 y(1.5)45 b(Readline)16 b(vi)g(Mo)q(de)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fm(18)p eop -%%Page: -2 24 --2 23 bop 75 -58 a Fm(ii)1321 b(GNU)15 b(Readline)h(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline-4.3.orig/doc/rluserman.texinfo b/readline-4.3.orig/doc/rluserman.texinfo deleted file mode 100644 index 89abe31..0000000 --- a/readline-4.3.orig/doc/rluserman.texinfo +++ /dev/null @@ -1,94 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment %**start of header (This is for running Texinfo on a region.) -@setfilename rluserman.info -@settitle GNU Readline Library -@comment %**end of header (This is for running Texinfo on a region.) -@setchapternewpage odd - -@include manvers.texinfo - -@ifinfo -@dircategory Libraries -@direntry -* RLuserman: (rluserman). The GNU readline library User's Manual. -@end direntry - -This document describes the end user interface of 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-2002 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 Free Software Foundation. -@end ifinfo - -@titlepage -@title GNU Readline Library User Interface -@subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. -@subtitle @value{UPDATE-MONTH} -@author Brian Fox, Free Software Foundation -@author Chet Ramey, Case Western Reserve University - -@page -This document describes the end user interface of 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. - -@vskip 0pt plus 1filll -Copyright @copyright{} 1988-2002 Free Software Foundation, Inc. -@end titlepage - -@ifinfo -@node Top -@top GNU Readline Library - -This document describes the end user interface of 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. -@end menu -@end ifinfo - -@include rluser.texinfo - -@contents -@bye diff --git a/readline-4.3.orig/doc/texi2dvi b/readline-4.3.orig/doc/texi2dvi deleted file mode 100755 index c186848..0000000 --- a/readline-4.3.orig/doc/texi2dvi +++ /dev/null @@ -1,568 +0,0 @@ -#! /bin/sh -# texi2dvi --- produce DVI (or PDF) files from Texinfo (or LaTeX) sources. -# $Id$ -# -# Copyright (C) 1992, 93, 94, 95, 96, 97, 98, 99 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, you can either send email to this -# program's maintainer or write to: The Free Software Foundation, -# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. -# -# Original author: Noah Friedman <friedman@gnu.org>. -# -# Please send bug reports, etc. to bug-texinfo@gnu.org. -# If possible, please send a copy of the output of the script called with -# the `--debug' option when making a bug report. - -# This string is expanded by rcs automatically when this file is checked out. -rcs_revision='$Revision$' -rcs_version=`set - $rcs_revision; echo $2` -program=`echo $0 | sed -e 's!.*/!!'` -version="texi2dvi (GNU Texinfo 4.0) $rcs_version - -Copyright (C) 1999 Free Software Foundation, Inc. -There is NO warranty. You may redistribute this software -under the terms of the GNU General Public License. -For more information about these matters, see the files named COPYING." - -usage="Usage: $program [OPTION]... FILE... - -Run each Texinfo or LaTeX FILE through TeX in turn until all -cross-references are resolved, building all indices. The directory -containing each FILE is searched for included files. The suffix of FILE -is used to determine its language (LaTeX or Texinfo). - -Makeinfo is used to perform Texinfo macro expansion before running TeX -when needed. - -Options: - -@ Use @input instead of \input; for preloaded Texinfo. - -b, --batch No interaction. - -c, --clean Remove all auxiliary files. - -D, --debug Turn on shell debugging (set -x). - -e, --expand Force macro expansion using makeinfo. - -I DIR Search DIR for Texinfo files. - -h, --help Display this help and exit successfully. - -l, --language=LANG Specify the LANG of FILE: LaTeX or Texinfo. - -p, --pdf Use pdftex or pdflatex for processing. - -q, --quiet No output unless errors (implies --batch). - -s, --silent Same as --quiet. - -t, --texinfo=CMD Insert CMD after @setfilename in copy of input file. - Multiple values accumulate. - -v, --version Display version information and exit successfully. - -V, --verbose Report on what is done. - -The values of the BIBTEX, LATEX (or PDFLATEX), MAKEINDEX, MAKEINFO, -TEX (or PDFTEX), and TEXINDEX environment variables are used to run -those commands, if they are set. - -Email bug reports to <bug-texinfo@gnu.org>, -general questions and discussion to <help-texinfo@gnu.org>." - -# Initialize variables for option overriding and otherwise. -# Don't use `unset' since old bourne shells don't have this command. -# Instead, assign them an empty value. -escape='\' -batch=false # eval for batch mode -clean= -debug= -expand= # t for expansion via makeinfo -oformat=dvi -set_language= -miincludes= # makeinfo include path -textra= -tmpdir=${TMPDIR:-/tmp}/t2d$$ # avoid collisions on 8.3 filesystems. -txincludes= # TEXINPUTS extensions -txiprereq=19990129 # minimum texinfo.tex version to have macro expansion -quiet= # by default let the tools' message be displayed -verbose=false # echo for verbose mode - -orig_pwd=`pwd` - -# Systems which define $COMSPEC or $ComSpec use semicolons to separate -# directories in TEXINPUTS. -if test -n "$COMSPEC$ComSpec"; then - path_sep=";" -else - path_sep=":" -fi - -# Save this so we can construct a new TEXINPUTS path for each file. -TEXINPUTS_orig="$TEXINPUTS" -# Unfortunately makeindex does not read TEXINPUTS. -INDEXSTYLE_orig="$INDEXSTYLE" -export TEXINPUTS INDEXSTYLE - -# Push a token among the arguments that will be used to notice when we -# ended options/arguments parsing. -# Use "set dummy ...; shift" rather than 'set - ..." because on -# Solaris set - turns off set -x (but keeps set -e). -# Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3 -# still expand "$@" to a single argument (the empty string) rather -# than nothing at all. -arg_sep="$$--$$" -set dummy ${1+"$@"} "$arg_sep"; shift - -# -# Parse command line arguments. -while test x"$1" != x"$arg_sep"; do - - # Handle --option=value by splitting apart and putting back on argv. - case "$1" in - --*=*) - opt=`echo "$1" | sed -e 's/=.*//'` - val=`echo "$1" | sed -e 's/[^=]*=//'` - shift - set dummy "$opt" "$val" ${1+"$@"}; shift - ;; - esac - - # This recognizes --quark as --quiet. So what. - case "$1" in - -@ ) escape=@;; - # Silently and without documentation accept -b and --b[atch] as synonyms. - -b | --b*) batch=eval;; - -q | -s | --q* | --s*) quiet=t; batch=eval;; - -c | --c*) clean=t;; - -D | --d*) debug=t;; - -e | --e*) expand=t;; - -h | --h*) echo "$usage"; exit 0;; - -I | --I*) - shift - miincludes="$miincludes -I $1" - txincludes="$txincludes$path_sep$1" - ;; - -l | --l*) shift; set_language=$1;; - -p | --p*) oformat=pdf;; - -t | --t*) shift; textra="$textra\\ -$1";; - -v | --vers*) echo "$version"; exit 0;; - -V | --verb*) verbose=echo;; - --) # What remains are not options. - shift - while test x"$1" != x"$arg_sep"; do - set dummy ${1+"$@"} "$1"; shift - shift - done - break;; - -*) - echo "$0: Unknown or ambiguous option \`$1'." >&2 - echo "$0: Try \`--help' for more information." >&2 - exit 1;; - *) set dummy ${1+"$@"} "$1"; shift;; - esac - shift -done -# Pop the token -shift - -# Interpret remaining command line args as filenames. -if test $# = 0; then - echo "$0: Missing file arguments." >&2 - echo "$0: Try \`--help' for more information." >&2 - exit 2 -fi - -# Prepare the temporary directory. Remove it at exit, unless debugging. -if test -z "$debug"; then - trap "cd / && rm -rf $tmpdir" 0 1 2 15 -fi - -# Create the temporary directory with strict rights -(umask 077 && mkdir $tmpdir) || exit 1 - -# Prepare the tools we might need. This may be extra work in some -# cases, but improves the readibility of the script. -utildir=$tmpdir/utils -mkdir $utildir || exit 1 - -# A sed script that preprocesses Texinfo sources in order to keep the -# iftex sections only. We want to remove non TeX sections, and -# comment (with `@c texi2dvi') TeX sections so that makeinfo does not -# try to parse them. Nevertheless, while commenting TeX sections, -# don't comment @macro/@end macro so that makeinfo does propagate -# them. Unfortunately makeinfo --iftex --no-ifhtml --no-ifinfo -# doesn't work well enough (yet) to use that, so work around with sed. -comment_iftex_sed=$utildir/comment.sed -cat <<EOF >$comment_iftex_sed -/^@tex/,/^@end tex/{ - s/^/@c texi2dvi/ -} -/^@iftex/,/^@end iftex/{ - s/^/@c texi2dvi/ - /^@c texi2dvi@macro/,/^@c texi2dvi@end macro/{ - s/^@c texi2dvi// - } -} -/^@html/,/^@end html/d -/^@ifhtml/,/^@end ifhtml/d -/^@ifnottex/,/^@end ifnottex/d -/^@ifinfo/,/^@end ifinfo/{ - /^@node/p - /^@menu/,/^@end menu/p - d -} -EOF -# Uncommenting is simple: Remove any leading `@c texi2dvi'. -uncomment_iftex_sed=$utildir/uncomment.sed -cat <<EOF >$uncomment_iftex_sed -s/^@c texi2dvi// -EOF - -# A shell script that computes the list of xref files. -# Takes the filename (without extension) of which we look for xref -# files as argument. The index files must be reported last. -get_xref_files=$utildir/get_xref.sh -cat <<\EOF >$get_xref_files -#! /bin/sh - -# Get list of xref files (indexes, tables and lists). -# Find all files having root filename with a two-letter extension, -# saves the ones that are really Texinfo-related files. .?o? catches -# LaTeX tables and lists. -for this_file in "$1".?o? "$1".aux "$1".?? "$1".idx; do - # If file is empty, skip it. - test -s "$this_file" || continue - # If the file is not suitable to be an index or xref file, don't - # process it. The file can't be if its first character is not a - # backslash or single quote. - first_character=`sed -n '1s/^\(.\).*$/\1/p;q' $this_file` - if test "x$first_character" = "x\\" \ - || test "x$first_character" = "x'"; then - xref_files="$xref_files ./$this_file" - fi -done -echo "$xref_files" -EOF -chmod 500 $get_xref_files - -# File descriptor usage: -# 0 standard input -# 1 standard output (--verbose messages) -# 2 standard error -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 5 tools output (turned off by --quiet) - -# Tools' output. If quiet, discard, else redirect to the message flow. -if test "$quiet" = t; then - exec 5>/dev/null -else - exec 5>&1 -fi - -# Enable tracing -test "$debug" = t && set -x - -# -# TeXify files. - -for command_line_filename in ${1+"$@"}; do - $verbose "Processing $command_line_filename ..." - - # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex), - # prepend `./' in order to avoid that the tools take it as an option. - echo "$command_line_filename" | egrep '^(/|[A-z]:/)' >/dev/null \ - || command_line_filename="./$command_line_filename" - - # See if the file exists. If it doesn't we're in trouble since, even - # though the user may be able to reenter a valid filename at the tex - # prompt (assuming they're attending the terminal), this script won't - # be able to find the right xref files and so forth. - if test ! -r "$command_line_filename"; then - echo "$0: Could not read $command_line_filename, skipping." >&2 - continue - fi - - # Get the name of the current directory. We want the full path - # because in clean mode we are in tmp, in which case a relative - # path has no meaning. - filename_dir=`echo $command_line_filename | sed 's!/[^/]*$!!;s!^$!.!'` - filename_dir=`cd "$filename_dir" >/dev/null && pwd` - - # Strip directory part but leave extension. - filename_ext=`basename "$command_line_filename"` - # Strip extension. - filename_noext=`echo "$filename_ext" | sed 's/\.[^.]*$//'` - ext=`echo "$filename_ext" | sed 's/^.*\.//'` - - # _src. Use same basename since we want to generate aux files with - # the same basename as the manual. If --expand, then output the - # macro-expanded file to here, else copy the original file. - tmpdir_src=$tmpdir/src - filename_src=$tmpdir_src/$filename_noext.$ext - - # _xtr. The file with the user's extra commands. - tmpdir_xtr=$tmpdir/xtr - filename_xtr=$tmpdir_xtr/$filename_noext.$ext - - # _bak. Copies of the previous xref files (another round is run if - # they differ from the new one). - tmpdir_bak=$tmpdir/bak - - # Make all those directories and give up if we can't succeed. - mkdir $tmpdir_src $tmpdir_xtr $tmpdir_bak || exit 1 - - # Source file might include additional sources. Put `.' and - # directory where source file(s) reside in TEXINPUTS before anything - # else. `.' goes first to ensure that any old .aux, .cps, - # etc. files in ${directory} don't get used in preference to fresher - # files in `.'. Include orig_pwd in case we are in clean mode, where - # we've cd'd to a temp directory. - common=".$path_sep$orig_pwd$path_sep$filename_dir$path_sep$txincludes$path_sep" - TEXINPUTS="$common$TEXINPUTS_orig" - INDEXSTYLE="$common$INDEXSTYLE_orig" - - # If the user explicitly specified the language, use that. - # Otherwise, if the first line is \input texinfo, assume it's texinfo. - # Otherwise, guess from the file extension. - if test -n "$set_language"; then - language=$set_language - elif sed 1q "$command_line_filename" | fgrep 'input texinfo' >/dev/null; then - language=texinfo - else - language= - fi - - # Get the type of the file (latex or texinfo) from the given language - # we just guessed, or from the file extension if not set yet. - case ${language:-$filename_ext} in - [lL]a[tT]e[xX] | *.ltx | *.tex) - # Assume a LaTeX file. LaTeX needs bibtex and uses latex for - # compilation. No makeinfo. - bibtex=${BIBTEX:-bibtex} - makeinfo= # no point in running makeinfo on latex source. - texindex=${MAKEINDEX:-makeindex} - if test $oformat = dvi; then - tex=${LATEX:-latex} - else - tex=${PDFLATEX:-pdflatex} - fi - ;; - - *) - # Assume a Texinfo file. Texinfo files need makeinfo, texindex and tex. - bibtex= - texindex=${TEXINDEX:-texindex} - if test $oformat = dvi; then - tex=${TEX:-tex} - else - tex=${PDFTEX:-pdftex} - fi - # Unless required by the user, makeinfo expansion is wanted only - # if texinfo.tex is too old. - if test "$expand" = t; then - makeinfo=${MAKEINFO:-makeinfo} - else - # Check if texinfo.tex performs macro expansion by looking for - # its version. The version is a date of the form YEAR-MO-DA. - # We don't need to use [0-9] to match the digits since anyway - # the comparison with $txiprereq, a number, will fail with non - # digits. - txiversion_tex=txiversion.tex - echo '\input texinfo.tex @bye' >$tmpdir/$txiversion_tex - # Run in the tmpdir to avoid leaving files. - eval `cd $tmpdir >/dev/null \ - && $tex $txiversion_tex 2>/dev/null \ -| sed -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p'` - $verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..." - if test "$txiprereq" -le "$txiversion" >/dev/null 2>&1; then - makeinfo= - else - makeinfo=${MAKEINFO:-makeinfo} - fi - # As long as we had to run TeX, offer the user this convenience - if test "$txiformat" = Texinfo; then - escape=@ - fi - fi - ;; - esac - - # Expand macro commands in the original source file using Makeinfo. - # Always use `end' footnote style, since the `separate' style - # generates different output (arguably this is a bug in -E). - # Discard main info output, the user asked to run TeX, not makeinfo. - if test -n "$makeinfo"; then - $verbose "Macro-expanding $command_line_filename to $filename_src ..." - sed -f $comment_iftex_sed "$command_line_filename" \ - | $makeinfo --footnote-style=end -I "$filename_dir" $miincludes \ - -o /dev/null --macro-expand=- \ - | sed -f $uncomment_iftex_sed >"$filename_src" - filename_input=$filename_src - fi - - # If makeinfo failed (or was not even run), use the original file as input. - if test $? -ne 0 \ - || test ! -r "$filename_src"; then - $verbose "Reverting to $command_line_filename ..." - filename_input=$filename_dir/$filename_ext - fi - - # Used most commonly for @finalout, @smallbook, etc. - if test -n "$textra"; then - $verbose "Inserting extra commands: $textra" - sed '/^@setfilename/a\ -'"$textra" "$filename_input" >$filename_xtr - filename_input=$filename_xtr - fi - - # If clean mode was specified, then move to the temporary directory. - if test "$clean" = t; then - $verbose "cd $tmpdir_src" - cd "$tmpdir_src" || exit 1 - fi - - while :; do # will break out of loop below - orig_xref_files=`$get_xref_files "$filename_noext"` - - # Save copies of originals for later comparison. - if test -n "$orig_xref_files"; then - $verbose "Backing up xref files: `echo $orig_xref_files | sed 's|\./||g'`" - cp $orig_xref_files $tmpdir_bak - fi - - # Run bibtex on current file. - # - If its input (AUX) exists. - # - If AUX contains both `\bibdata' and `\bibstyle'. - # - If some citations are missing (LOG contains `Citation'). - # or the LOG complains of a missing .bbl - # - # We run bibtex first, because I can see reasons for the indexes - # to change after bibtex is run, but I see no reason for the - # converse. - # - # Don't try to be too smart. Running bibtex only if the bbl file - # exists and is older than the LaTeX file is wrong, since the - # document might include files that have changed. Because there - # can be several AUX (if there are \include's), but a single LOG, - # looking for missing citations in LOG is easier, though we take - # the risk to match false messages. - if test -n "$bibtex" \ - && test -r "$filename_noext.aux" \ - && test -r "$filename_noext.log" \ - && (grep '^\\bibdata[{]' "$filename_noext.aux" \ - && grep '^\\bibstyle[{]' "$filename_noext.aux" \ - && (grep 'Warning:.*Citation.*undefined' "$filename_noext.log" \ - || grep 'No file .*\.bbl\.' "$filename_noext.log")) \ - >/dev/null 2>&1; \ - then - $verbose "Running $bibtex $filename_noext ..." - if $bibtex "$filename_noext" >&5; then :; else - echo "$0: $bibtex exited with bad status, quitting." >&2 - exit 1 - fi - fi - - # What we'll run texindex on -- exclude non-index files. - # Since we know index files are last, it is correct to remove everything - # before .aux and .?o?. - index_files=`echo "$orig_xref_files" \ - | sed "s!.*\.aux!!g; - s!./$filename_noext\..o.!!g; - s/^[ ]*//;s/[ ]*$//"` - # Run texindex (or makeindex) on current index files. If they - # already exist, and after running TeX a first time the index - # files don't change, then there's no reason to run TeX again. - # But we won't know that if the index files are out of date or - # nonexistent. - if test -n "$texindex" && test -n "$index_files"; then - $verbose "Running $texindex $index_files ..." - if $texindex $index_files 2>&5 1>&2; then :; else - echo "$0: $texindex exited with bad status, quitting." >&2 - exit 1 - fi - fi - - # Finally, run TeX. - # Prevent $ESCAPE from being interpreted by the shell if it happens - # to be `/'. - $batch tex_args="\\${escape}nonstopmode\ \\${escape}input" - $verbose "Running $cmd ..." - cmd="$tex $tex_args $filename_input" - if $cmd >&5; then :; else - echo "$0: $tex exited with bad status, quitting." >&2 - echo "$0: see $filename_noext.log for errors." >&2 - test "$clean" = t \ - && cp "$filename_noext.log" "$orig_pwd" - exit 1 - fi - - - # Decide if looping again is needed. - finished=t - - # LaTeX (and the package changebar) report in the LOG file if it - # should be rerun. This is needed for files included from - # subdirs, since texi2dvi does not try to compare xref files in - # subdirs. Performing xref files test is still good since LaTeX - # does not report changes in xref files. - if fgrep "Rerun to get" "$filename_noext.log" >/dev/null 2>&1; then - finished= - fi - - # Check if xref files changed. - new_xref_files=`$get_xref_files "$filename_noext"` - $verbose "Original xref files = `echo $orig_xref_files | sed 's|\./||g'`" - $verbose "New xref files = `echo $new_xref_files | sed 's|\./||g'`" - - # If old and new lists don't at least have the same file list, - # then one file or another has definitely changed. - test "x$orig_xref_files" != "x$new_xref_files" && finished= - - # File list is the same. We must compare each file until we find - # a difference. - if test -n "$finished"; then - for this_file in $new_xref_files; do - $verbose "Comparing xref file `echo $this_file | sed 's|\./||g'` ..." - # cmp -s returns nonzero exit status if files differ. - if cmp -s "$this_file" "$tmpdir_bak/$this_file"; then :; else - # We only need to keep comparing until we find one that - # differs, because we'll have to run texindex & tex again no - # matter how many more there might be. - finished= - $verbose "xref file `echo $this_file | sed 's|\./||g'` differed ..." - test "$debug" = t && diff -c "$tmpdir_bak/$this_file" "$this_file" - break - fi - done - fi - - # If finished, exit the loop, else rerun the loop. - test -n "$finished" && break - done - - # If we were in clean mode, compilation was in a tmp directory. - # Copy the DVI (or PDF) file into the directory where the compilation - # has been done. (The temp dir is about to get removed anyway.) - # We also return to the original directory so that - # - the next file is processed in correct conditions - # - the temporary file can be removed - if test -n "$clean"; then - $verbose "Copying $oformat file from `pwd` to $orig_pwd" - cp -p "./$filename_noext.$oformat" "$orig_pwd" - cd / # in case $orig_pwd is on a different drive (for DOS) - cd $orig_pwd || exit 1 - fi - - # Remove temporary files. - if test "x$debug" = "x"; then - $verbose "Removing $tmpdir_src $tmpdir_xtr $tmpdir_bak ..." - cd / - rm -rf $tmpdir_src $tmpdir_xtr $tmpdir_bak - fi -done - -$verbose "$0 done." -exit 0 # exit successfully, not however we ended the loop. diff --git a/readline-4.3.orig/doc/texi2html b/readline-4.3.orig/doc/texi2html deleted file mode 100755 index 7bb8493..0000000 --- a/readline-4.3.orig/doc/texi2html +++ /dev/null @@ -1,5429 +0,0 @@ -#! /usr/bin/perl -'di '; -'ig 00 '; -#+############################################################################## -# -# texi2html: Program to transform Texinfo documents to HTML -# -# Copyright (C) 1999, 2000 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# -#-############################################################################## - -# This requires perl version 5 or higher -require 5.0; - -#++############################################################################## -# -# NOTE FOR DEBUGGING THIS SCRIPT: -# You can run 'perl texi2html.pl' directly, provided you have -# the environment variable T2H_HOME set to the directory containing -# the texi2html.init file -# -#--############################################################################## - -# CVS version: -# $Id$ - -# Homepage: -$T2H_HOMEPAGE = <<EOT; -http://www.mathematik.uni-kl.de/~obachman/Texi2html -EOT - -# Authors: -$T2H_AUTHORS = <<EOT; -Written by: Lionel Cons <Lionel.Cons\@cern.ch> (original author) - Karl Berry <karl\@freefriends.org> - Olaf Bachmann <obachman\@mathematik.uni-kl.de> - and many others. -Maintained by: Olaf Bachmann <obachman\@mathematik.uni-kl.de> -Send bugs and suggestions to <texi2html\@mathematik.uni-kl.de> -EOT - -# Version: set in configure.in -$THISVERSION = '1.64'; -$THISPROG = "texi2html $THISVERSION"; # program name and version - -# The man page for this program is included at the end of this file and can be -# viewed using the command 'nroff -man texi2html'. - -# Identity: - -$T2H_TODAY = &pretty_date; # like "20 September 1993" -# the eval prevents this from breaking on system which do not have -# a proper getpwuid implemented -eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i - -#+++############################################################################ -# # -# Initialization # -# Pasted content of File $(srcdir)/texi2html.init: Default initializations # -# # -#---############################################################################ - -# leave this within comments, and keep the require statement -# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init -# exists. - -# -# -*-perl-*- -###################################################################### -# File: texi2html.init -# -# Sets default values for command-line arguments and for various customizable -# procedures -# -# A copy of this file is pasted into the beginning of texi2html by -# 'make texi2html' -# -# Copy this file and make changes to it, if you like. -# Afterwards, either, load it with command-line option -init_file <your_init_file> -# -# $Id$ - -###################################################################### -# stuff which can also be set by command-line options -# -# -# Note: values set here, overwrite values set by the command-line -# options before -init_file and might still be overwritten by -# command-line arguments following the -init_file option -# - -# T2H_OPTIONS is a hash whose keys are the (long) names of valid -# command-line options and whose values are a hash with the following keys: -# type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info) -# linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info) -# verbose ==> short description of option (displayed by -h) -# noHelp ==> if 1 -> for "not so important options": only print description on -h 1 -# 2 -> for obsolete options: only print description on -h 2 - -$T2H_DEBUG = 0; -$T2H_OPTIONS -> {debug} = -{ - type => '=i', - linkage => \$main::T2H_DEBUG, - verbose => 'output HTML with debuging information', -}; - -$T2H_DOCTYPE = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">'; -$T2H_OPTIONS -> {doctype} = -{ - type => '=s', - linkage => \$main::T2H_DOCTYPE, - verbose => 'document type which is output in header of HTML files', - noHelp => 1 -}; - -$T2H_CHECK = 0; -$T2H_OPTIONS -> {check} = -{ - type => '!', - linkage => \$main::T2H_CHECK, - verbose => 'if set, only check files and output all things that may be Texinfo commands', - noHelp => 1 -}; - -# -expand -# if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections -# else, neither expand @iftex, @tex, nor @ifinfo sections -$T2H_EXPAND = "info"; -$T2H_OPTIONS -> {expand} = -{ - type => '=s', - linkage => \$T2H_EXPAND, - verbose => 'Expand info|tex|none section of texinfo source', -}; - -# - glossary -#if set, uses section named `Footnotes' for glossary -$T2H_USE_GLOSSARY = 0; -T2H_OPTIONS -> {glossary} = -{ - type => '!', - linkage => \$T2H_USE_GLOSSARY, - verbose => "if set, uses section named `Footnotes' for glossary", - noHelp => 1, -}; - - -# -invisible -# $T2H_INVISIBLE_MARK is the text used to create invisible destination -# anchors for index links (you can for instance use the invisible.xbm -# file shipped with this program). This is a workaround for a known -# bug of many WWW browsers, including netscape. -# For me, it works fine without it -- on the contrary: if there, it -# inserts space between headers and start of text (obachman 3/99) -$T2H_INVISIBLE_MARK = ''; -# $T2H_INVISIBLE_MARK = ' '; -$T2H_OPTIONS -> {invisible} = -{ - type => '=s', - linkage => \$T2H_INVISIBLE_MARK, - verbose => 'use text in invisble anchot', - noHelp => 1, -}; - -# -iso -# if set, ISO8879 characters are used for special symbols (like copyright, etc) -$T2H_USE_ISO = 0; -$T2H_OPTIONS -> {iso} = -{ - type => 'iso', - linkage => \$T2H_USE_ISO, - verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)', - noHelp => 1, -}; - -# -I -# list directories where @include files are searched for (besides the -# directory of the doc file) additional '-I' args add to this list -@T2H_INCLUDE_DIRS = ("."); -$T2H_OPTIONS -> {I} = -{ - type => '=s', - linkage => \@T2H_INCLUDE_DIRS, - verbose => 'append $s to the @include search path', -}; - -# -top_file -# uses file of this name for top-level file -# extension is manipulated appropriately, if necessary. -# If empty, <basename of document>.html is used -# Typically, you would set this to "index.html". -$T2H_TOP_FILE = ''; -$T2H_OPTIONS -> {top_file} = -{ - type => '=s', - linkage => \$T2H_TOP_FILE, - verbose => 'use $s as top file, instead of <docname>.html', -}; - - -# -toc_file -# uses file of this name for table of contents file -# extension is manipulated appropriately, if necessary. -# If empty, <basename of document>_toc.html is used -$T2H_TOC_FILE = ''; -$T2H_OPTIONS -> {toc_file} = -{ - type => '=s', - linkage => \$T2H_TOC_FILE, - verbose => 'use $s as ToC file, instead of <docname>_toc.html', -}; - -# -frames -# if set, output two additional files which use HTML 4.0 "frames". -$T2H_FRAMES = 0; -$T2H_OPTIONS -> {frames} = -{ - type => '!', - linkage => \$T2H_FRAMES, - verbose => 'output files which use HTML 4.0 frames (experimental)', - noHelp => 1, -}; - - -# -menu | -nomenu -# if set, show the Texinfo menus -$T2H_SHOW_MENU = 1; -$T2H_OPTIONS -> {menu} = -{ - type => '!', - linkage => \$T2H_SHOW_MENU, - verbose => 'ouput Texinfo menus', -}; - -# -number | -nonumber -# if set, number sections and show section names and numbers in references -# and menus -$T2H_NUMBER_SECTIONS = 1; -$T2H_OPTIONS -> {number} = -{ - type => '!', - linkage => \$T2H_NUMBER_SECTIONS, - verbose => 'use numbered sections' -}; - -# if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu -# entries, instead of section names -$T2H_NODE_NAME_IN_MENU = 0; - -# if set and menu entry equals menu descr, then do not print menu descr. -# Likewise, if node name equals entry name, do not print entry name. -$T2H_AVOID_MENU_REDUNDANCY = 1; - -# -split section|chapter|none -# if set to 'section' (resp. 'chapter') create one html file per (sub)section -# (resp. chapter) and separate pages for Top, ToC, Overview, Index, -# Glossary, About. -# otherwise, create monolithic html file which contains whole document -#$T2H_SPLIT = 'section'; -$T2H_SPLIT = ''; -$T2H_OPTIONS -> {split} = -{ - type => '=s', - linkage => \$T2H_SPLIT, - verbose => 'split document on section|chapter else no splitting', -}; - -# -section_navigation|-no-section_navigation -# if set, then navigation panels are printed at the beginning of each section -# and, possibly at the end (depending on whether or not there were more than -# $T2H_WORDS_IN_PAGE words on page -# This is most useful if you do not want to have section navigation -# on -split chapter -$T2H_SECTION_NAVIGATION = 1; -$T2H_OPTIONS -> {sec_nav} = -{ - type => '!', - linkage => \$T2H_SECTION_NAVIGATION, - verbose => 'output navigation panels for each section', -}; - -# -subdir -# if set put result files in this directory -# if not set result files are put into current directory -#$T2H_SUBDIR = 'html'; -$T2H_SUBDIR = ''; -$T2H_OPTIONS -> {subdir} = -{ - type => '=s', - linkage => \$T2H_SUBDIR, - verbose => 'put HTML files in directory $s, instead of $cwd', -}; - -# -short_extn -# If this is set all HTML file will have extension ".htm" instead of -# ".html". This is helpful when shipping the document to PC systems. -$T2H_SHORTEXTN = 0; -$T2H_OPTIONS -> {short_ext} = -{ - type => '!', - linkage => \$T2H_SHORTEXTN, - verbose => 'use "htm" extension for output HTML files', -}; - - -# -prefix -# Set the output file prefix, prepended to all .html, .gif and .pl files. -# By default, this is the basename of the document -$T2H_PREFIX = ''; -$T2H_OPTIONS -> {prefix} = -{ - type => '=s', - linkage => \$T2H_PREFIX, - verbose => 'use as prefix for output files, instead of <docname>', -}; - -# -o filename -# If set, generate monolithic document output html into $filename -$T2H_OUT = ''; -$T2H_OPTIONS -> {out_file} = -{ - type => '=s', - linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, - verbose => 'if set, all HTML output goes into file $s', -}; - -# -short_ref -#if set cross-references are given without section numbers -$T2H_SHORT_REF = ''; -$T2H_OPTIONS -> {short_ref} = -{ - type => '!', - linkage => \$T2H_SHORT_REF, - verbose => 'if set, references are without section numbers', -}; - -# -idx_sum -# if value is set, then for each @prinindex $what -# $docu_name_$what.idx is created which contains lines of the form -# $key\t$ref sorted alphabetically (case matters) -$T2H_IDX_SUMMARY = 0; -$T2H_OPTIONS -> {idx_sum} = -{ - type => '!', - linkage => \$T2H_IDX_SUMMARY, - verbose => 'if set, also output index summary', - noHelp => 1, -}; - -# -verbose -# if set, chatter about what we are doing -$T2H_VERBOSE = ''; -$T2H_OPTIONS -> {Verbose} = -{ - type => '!', - linkage => \$T2H_VERBOSE, - verbose => 'print progress info to stdout', -}; - -# -lang -# For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title. -# To add a new language, supply list of titles (see $T2H_WORDS below). -# and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02 -# for definitions) -# Default's to 'en' if not set or no @documentlanguage is specified -$T2H_LANG = ''; -$T2H_OPTIONS -> {lang} = -{ - type => '=s', - linkage => sub {SetDocumentLanguage($_[1])}, - verbose => 'use $s as document language (ISO 639 encoding)', -}; - -# -l2h -# if set, uses latex2html for generation of math content -$T2H_L2H = ''; -$T2H_OPTIONS -> {l2h} = -{ - type => '!', - linkage => \$T2H_L2H, - verbose => 'if set, uses latex2html for @math and @tex', -}; - -###################### -# The following options are only relevant if $T2H_L2H is set -# -# -l2h_l2h -# name/location of latex2html progam -$T2H_L2H_L2H = "latex2html"; -$T2H_OPTIONS -> {l2h_l2h} = -{ - type => '=s', - linkage => \$T2H_L2H_L2H, - verbose => 'program to use for latex2html translation', - noHelp => 1, -}; - -# -l2h_skip -# if set, skips actual call to latex2html tries to reuse previously generated -# content, instead -$T2H_L2H_SKIP = ''; -$T2H_OPTIONS -> {l2h_skip} = -{ - type => '!', - linkage => \$T2H_L2H_SKIP, - verbose => 'if set, tries to reuse previously latex2html output', - noHelp => 1, -}; - -# -l2h_tmp -# if set, l2h uses this directory for temporarary files. The path -# leading to this directory may not contain a dot (i.e., a "."), -# otherwise, l2h will fail -$T2H_L2H_TMP = ''; -$T2H_OPTIONS -> {l2h_tmp} = -{ - type => '=s', - linkage => \$T2H_L2H_TMP, - verbose => 'if set, uses $s as temporary latex2html directory', - noHelp => 1, -}; - -# if set, cleans intermediate files (they all have the prefix $doc_l2h_) -# of l2h -$T2H_L2H_CLEAN = 1; -$T2H_OPTIONS -> {l2h_clean} = -{ - type => '!', - linkage => \$T2H_L2H_CLEAN, - verbose => 'if set, do not keep intermediate latex2html files for later reuse', - noHelp => 1, -}; - -$T2H_OPTIONS -> {D} = -{ - type => '=s', - linkage => sub {$main::value{@_[1]} = 1;}, - verbose => 'equivalent to Texinfo "@set $s 1"', - noHelp => 1, -}; - -$T2H_OPTIONS -> {init_file} = -{ - type => '=s', - linkage => \&LoadInitFile, - verbose => 'load init file $s' -}; - - -############################################################################## -# -# The following can only be set in the init file -# -############################################################################## - -# if set, center @image by default -# otherwise, do not center by default -$T2H_CENTER_IMAGE = 1; - -# used as identation for block enclosing command @example, etc -# If not empty, must be enclosed in <td></td> -$T2H_EXAMPLE_INDENT_CELL = '<td> </td>'; -# same as above, only for @small -$T2H_SMALL_EXAMPLE_INDENT_CELL = '<td> </td>'; -# font size for @small -$T2H_SMALL_FONT_SIZE = '-1'; - -# if non-empty, and no @..heading appeared in Top node, then -# use this as header for top node/section, otherwise use value of -# @settitle or @shorttitle (in that order) -$T2H_TOP_HEADING = ''; - -# if set, use this chapter for 'Index' button, else -# use first chapter whose name matches 'index' (case insensitive) -$T2H_INDEX_CHAPTER = ''; - -# if set and $T2H_SPLIT is set, then split index pages at the next letter -# after they have more than that many entries -$T2H_SPLIT_INDEX = 100; - -# if set (e.g., to index.html) replace hrefs to this file -# (i.e., to index.html) by ./ -$T2H_HREF_DIR_INSTEAD_FILE = ''; - -######################################################################## -# Language dependencies: -# To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash -# To redefine one word, simply do: -# $T2H_WORDS->{<language>}->{<word>} = 'whatever' in your personal init file. -# -$T2H_WORDS_EN = -{ - # titles of pages - 'ToC_Title' => 'Table of Contents', - 'Overview_Title' => 'Short Table of Contents', - 'Index_Title' => 'Index', - 'About_Title' => 'About this document', - 'Footnotes_Title' => 'Footnotes', - 'See' => 'See', - 'see' => 'see', - 'section' => 'section', -# If necessary, we could extend this as follows: -# # text for buttons -# 'Top_Button' => 'Top', -# 'ToC_Button' => 'Contents', -# 'Overview_Button' => 'Overview', -# 'Index_button' => 'Index', -# 'Back_Button' => 'Back', -# 'FastBack_Button' => 'FastBack', -# 'Prev_Button' => 'Prev', -# 'Up_Button' => 'Up', -# 'Next_Button' => 'Next', -# 'Forward_Button' =>'Forward', -# 'FastWorward_Button' => 'FastForward', -# 'First_Button' => 'First', -# 'Last_Button' => 'Last', -# 'About_Button' => 'About' -}; - -$T2H_WORD_DE = -{ - 'ToC_Title' => 'Inhaltsverzeichniss', - 'Overview_Title' => 'Kurzes Inhaltsverzeichniss', - 'Index_Title' => 'Index', - 'About_Title' => 'Über dieses Dokument', - 'Footnotes_Title' => 'Fußnoten', - 'See' => 'Siehe', - 'see' => 'siehe', - 'section' => 'Abschnitt', -}; - -$T2H_WORD_NL = -{ - 'ToC_Title' => 'Inhoudsopgave', - 'Overview_Title' => 'Korte inhoudsopgave', - 'Index_Title' => 'Index', #Not sure ;-) - 'About_Title' => 'No translation available!', #No translation available! - 'Footnotes_Title' => 'No translation available!', #No translation available! - 'See' => 'Zie', - 'see' => 'zie', - 'section' => 'sectie', -}; - -$T2H_WORD_ES = -{ - 'ToC_Title' => 'índice General', - 'Overview_Title' => 'Resumen del Contenido', - 'Index_Title' => 'Index', #Not sure ;-) - 'About_Title' => 'No translation available!', #No translation available! - 'Footnotes_Title' => 'Fußnoten', - 'See' => 'Véase', - 'see' => 'véase', - 'section' => 'sección', -}; - -$T2H_WORD_NO = -{ - 'ToC_Title' => 'Innholdsfortegnelse', - 'Overview_Title' => 'Kort innholdsfortegnelse', - 'Index_Title' => 'Indeks', #Not sure ;-) - 'About_Title' => 'No translation available!', #No translation available! - 'Footnotes_Title' => 'No translation available!', - 'See' => 'Se', - 'see' => 'se', - 'section' => 'avsnitt', -}; - -$T2H_WORD_PT = -{ - 'ToC_Title' => 'Sumário', - 'Overview_Title' => 'Breve Sumário', - 'Index_Title' => 'Índice', #Not sure ;-) - 'About_Title' => 'No translation available!', #No translation available! - 'Footnotes_Title' => 'No translation available!', - 'See' => 'Veja', - 'see' => 'veja', - 'section' => 'Seção', -}; - -$T2H_WORDS = -{ - 'en' => $T2H_WORDS_EN, - 'de' => $T2H_WORDS_DE, - 'nl' => $T2H_WORDS_NL, - 'es' => $T2H_WORDS_ES, - 'no' => $T2H_WORDS_NO, - 'pt' => $T2H_WORDS_PT -}; - -@MONTH_NAMES_EN = -( - 'January', 'February', 'March', 'April', 'May', - 'June', 'July', 'August', 'September', 'October', - 'November', 'December' -); - -@MONTH_NAMES_DE = -( - 'Januar', 'Februar', 'März', 'April', 'Mai', - 'Juni', 'Juli', 'August', 'September', 'Oktober', - 'November', 'Dezember' -); - -@MONTH_NAMES_NL = -( - 'Januari', 'Februari', 'Maart', 'April', 'Mei', - 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', - 'November', 'December' -); - -@MONTH_NAMES_ES = -( - 'enero', 'febrero', 'marzo', 'abril', 'mayo', - 'junio', 'julio', 'agosto', 'septiembre', 'octubre', - 'noviembre', 'diciembre' -); - -@MONTH_NAMES_NO = -( - - 'januar', 'februar', 'mars', 'april', 'mai', - 'juni', 'juli', 'august', 'september', 'oktober', - 'november', 'desember' -); - -@MONTH_NAMES_PT = -( - 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', - 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', - 'Novembro', 'Dezembro' -); - - -$MONTH_NAMES = -{ - 'en' => \@MONTH_NAMES_EN, - 'de' => \@MONTH_NAMES_DE, - 'es' => \@MONTH_NAMES_ES, - 'nl' => \@MONTH_NAMES_NL, - 'no' => \@MONTH_NAMES_NO, - 'pt' => \@MONTH_NAMES_PT -}; -######################################################################## -# Control of Page layout: -# You can make changes of the Page layout at two levels: -# 1.) For small changes, it is often enough to change the value of -# some global string/hash/array variables -# 2.) For larger changes, reimplement one of the T2H_DEFAULT_<fnc>* routines, -# give them another name, and assign them to the respective -# $T2H_<fnc> variable. - -# As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold -# href, html-name, node-name of -# This -- current section (resp. html page) -# Top -- top page ($T2H_TOP_FILE) -# Contents -- Table of contents -# Overview -- Short table of contents -# Index -- Index page -# About -- page which explain "navigation buttons" -# First -- first node -# Last -- last node -# -# Whether or not the following hash values are set, depends on the context -# (all values are w.r.t. 'This' section) -# Next -- next node of texinfo -# Prev -- previous node of texinfo -# Up -- up node of texinfo -# Forward -- next node in reading order -# Back -- previous node in reading order -# FastForward -- if leave node, up and next, else next node -# FastBackward-- if leave node, up and prev, else prev node -# -# Furthermore, the following global variabels are set: -# $T2H_THISDOC{title} -- title as set by @setttile -# $T2H_THISDOC{fulltitle} -- full title as set by @title... -# $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle -# $T2H_THISDOC{author} -- author as set by @author -# -# and pointer to arrays of lines which need to be printed by t2h_print_lines -# $T2H_OVERVIEW -- lines of short table of contents -# $T2H_TOC -- lines of table of contents -# $T2H_TOP -- lines of Top texinfo node -# $T2H_THIS_SECTION -- lines of 'This' section - -# -# There are the following subs which control the layout: -# -$T2H_print_section = \&T2H_DEFAULT_print_section; -$T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header; -$T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer; -$T2H_print_Top = \&T2H_DEFAULT_print_Top; -$T2H_print_Toc = \&T2H_DEFAULT_print_Toc; -$T2H_print_Overview = \&T2H_DEFAULT_print_Overview; -$T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes; -$T2H_print_About = \&T2H_DEFAULT_print_About; -$T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header; -$T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer; -$T2H_print_misc = \&T2H_DEFAULT_print_misc; -$T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header; -$T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; -$T2H_print_page_head = \&T2H_DEFAULT_print_page_head; -$T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot; -$T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation; -$T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; -$T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img; -$T2H_print_navigation = \&T2H_DEFAULT_print_navigation; -$T2H_about_body = \&T2H_DEFAULT_about_body; -$T2H_print_frame = \&T2H_DEFAULT_print_frame; -$T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame; - -######################################################################## -# Layout for html for every sections -# -sub T2H_DEFAULT_print_section -{ - my $fh = shift; - local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS; - &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION; - my $nw = t2h_print_lines($fh); - if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION) - { - &$T2H_print_foot_navigation($fh, $nw); - } - else - { - print $fh '<HR SIZE="6">' . "\n"; - } -} - -################################################################### -# Layout of top-page I recommend that you use @ifnothtml, @ifhtml, -# @html within the Top texinfo node to specify content of top-level -# page. -# -# If you enclose everything in @ifnothtml, then title, subtitle, -# author and overview is printed -# T2H_HREF of Next, Prev, Up, Forward, Back are not defined -# if $T2H_SPLIT then Top page is in its own html file -sub T2H_DEFAULT_print_Top_header -{ - &$T2H_print_page_head(@_) if $T2H_SPLIT; - t2h_print_label(@_); # this needs to be called, otherwise no label set - &$T2H_print_head_navigation(@_); -} -sub T2H_DEFAULT_print_Top_footer -{ - &$T2H_print_foot_navigation(@_); - &$T2H_print_page_foot(@_) if $T2H_SPLIT; -} -sub T2H_DEFAULT_print_Top -{ - my $fh = shift; - - # for redefining navigation buttons use: - # local $T2H_BUTTONS = [...]; - # as it is, 'Top', 'Contents', 'Index', 'About' are printed - local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; - &$T2H_print_Top_header($fh); - if ($T2H_THIS_SECTION) - { - # if top-level node has content, then print it with extra header - print $fh "<H1>$T2H_NAME{Top}</H1>" - unless ($T2H_HAS_TOP_HEADING); - t2h_print_lines($fh, $T2H_THIS_SECTION) - } - else - { - # top-level node is fully enclosed in @ifnothtml - # print fulltitle, subtitle, author, Overview - print $fh - "<CENTER>\n<H1>" . - join("</H1>\n<H1>", split(/\n/, $T2H_THISDOC{fulltitle})) . - "</H1>\n"; - print $fh "<H2>$T2H_THISDOC{subtitle}</H2>\n" if $T2H_THISDOC{subtitle}; - print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author}; - print $fh <<EOT; -</CENTER> -<HR> -<P></P> -<H2> Overview: </H2> -<BLOCKQUOTE> -EOT - t2h_print_lines($fh, $T2H_OVERVIEW); - print $fh "</BLOCKQUOTE>\n"; - } - &$T2H_print_Top_footer($fh); -} - -################################################################### -# Layout of Toc, Overview, and Footnotes pages -# By default, we use "normal" layout -# T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined -# use: local $T2H_BUTTONS = [...] to redefine navigation buttons -sub T2H_DEFAULT_print_Toc -{ - return &$T2H_print_misc(@_); -} -sub T2H_DEFAULT_print_Overview -{ - return &$T2H_print_misc(@_); -} -sub T2H_DEFAULT_print_Footnotes -{ - return &$T2H_print_misc(@_); -} -sub T2H_DEFAULT_print_About -{ - return &$T2H_print_misc(@_); -} - -sub T2H_DEFAULT_print_misc_header -{ - &$T2H_print_page_head(@_) if $T2H_SPLIT; - # this needs to be called, otherwise, no labels are set - t2h_print_label(@_); - &$T2H_print_head_navigation(@_); -} -sub T2H_DEFAULT_print_misc_footer -{ - &$T2H_print_foot_navigation(@_); - &$T2H_print_page_foot(@_) if $T2H_SPLIT; -} -sub T2H_DEFAULT_print_misc -{ - my $fh = shift; - local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; - &$T2H_print_misc_header($fh); - print $fh "<H1>$T2H_NAME{This}</H1>\n"; - t2h_print_lines($fh); - &$T2H_print_misc_footer($fh); -} - -################################################################### -# chapter_header and chapter_footer are only called if -# T2H_SPLIT eq 'chapter' -# chapter_header: after print_page_header, before print_section -# chapter_footer: after print_section of last section, before print_page_footer -# -# If you want to get rid of navigation stuff after each section, -# redefine print_section such that it does not call print_navigation, -# and put print_navigation into print_chapter_header -@T2H_CHAPTER_BUTTONS = - ( - 'FastBack', 'FastForward', ' ', - ' ', ' ', ' ', ' ', - 'Top', 'Contents', 'Index', 'About', - ); - -sub T2H_DEFAULT_print_chapter_header -{ - # nothing to do there, by default - if (! $T2H_SECTION_NAVIGATION) - { - my $fh = shift; - local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; - &$T2H_print_navigation($fh); - print $fh "\n<HR SIZE=2>\n"; - } -} - -sub T2H_DEFAULT_print_chapter_footer -{ - local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; - &$T2H_print_navigation(@_); -} -################################################################### -$T2H_TODAY = &pretty_date; # like "20 September 1993" - -sub pretty_date { - local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); - - ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); - $year += ($year < 70) ? 2000 : 1900; - # obachman: Let's do it as the Americans do - return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year); -} - - -################################################################### -# Layout of standard header and footer -# - -# Set the default body text, inserted between <BODY ... > -###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; -$T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; -# text inserted after <BODY ...> -$T2H_AFTER_BODY_OPEN = ''; -#text inserted before </BODY> -$T2H_PRE_BODY_CLOSE = ''; -# this is used in footer -$T2H_ADDRESS = "by <I>$T2H_USER</I> " if $T2H_USER; -$T2H_ADDRESS .= "on <I>$T2H_TODAY</I>"; -# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff -# can be used for <style> <script>, <meta> tags -$T2H_EXTRA_HEAD = ''; - -sub T2H_DEFAULT_print_page_head -{ - my $fh = shift; - my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}"; - print $fh <<EOT; -<HTML> -$T2H_DOCTYPE -<!-- Created on $T2H_TODAY by $THISPROG --> -<!-- -$T2H_AUTHORS ---> -<HEAD> -<TITLE>$longtitle</TITLE> - -<META NAME="description" CONTENT="$longtitle"> -<META NAME="keywords" CONTENT="$longtitle"> -<META NAME="resource-type" CONTENT="document"> -<META NAME="distribution" CONTENT="global"> -<META NAME="Generator" CONTENT="$THISPROG"> -$T2H_EXTRA_HEAD -</HEAD> - -<BODY $T2H_BODYTEXT> -$T2H_AFTER_BODY_OPEN -EOT -} - -sub T2H_DEFAULT_print_page_foot -{ - my $fh = shift; - print $fh <<EOT; -<BR> -<FONT SIZE="-1"> -This document was generated -$T2H_ADDRESS -using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A> -$T2H_PRE_BODY_CLOSE -</BODY> -</HTML> -EOT -} - -################################################################### -# Layout of navigation panel - -# if this is set, then a vertical navigation panel is used -$T2H_VERTICAL_HEAD_NAVIGATION = 0; -sub T2H_DEFAULT_print_head_navigation -{ - my $fh = shift; - if ($T2H_VERTICAL_HEAD_NAVIGATION) - { - print $fh <<EOT; -<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0"> -<TR VALIGN="TOP"> -<TD ALIGN="LEFT"> -EOT - } - &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION); - if ($T2H_VERTICAL_HEAD_NAVIGATION) - { - print $fh <<EOT; -</TD> -<TD ALIGN="LEFT"> -EOT - } - elsif ($T2H_SPLIT eq 'section') - { - print $fh "<HR SIZE=1>\n"; - } -} - -# Specifies the minimum page length required before a navigation panel -# is placed at the bottom of a page (the default is that of latex2html) -# T2H_THIS_WORDS_IN_PAGE holds number of words of current page -$T2H_WORDS_IN_PAGE = 300; -sub T2H_DEFAULT_print_foot_navigation -{ - my $fh = shift; - my $nwords = shift; - if ($T2H_VERTICAL_HEAD_NAVIGATION) - { - print $fh <<EOT; -</TD> -</TR> -</TABLE> -EOT - } - print $fh "<HR SIZE=1>\n"; - &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE) -} - -###################################################################### -# navigation panel -# -# specify in this array which "buttons" should appear in which order -# in the navigation panel for sections; use ' ' for empty buttons (space) -@T2H_SECTION_BUTTONS = - ( - 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', - ' ', ' ', ' ', ' ', - 'Top', 'Contents', 'Index', 'About', - ); - -# buttons for misc stuff -@T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); - -# insert here name of icon images for buttons -# Icons are used, if $T2H_ICONS and resp. value are set -%T2H_ACTIVE_ICONS = - ( - 'Top', '', - 'Contents', '', - 'Overview', '', - 'Index', '', - 'Back', '', - 'FastBack', '', - 'Prev', '', - 'Up', '', - 'Next', '', - 'Forward', '', - 'FastForward', '', - 'About' , '', - 'First', '', - 'Last', '', - ' ', '' - ); - -# insert here name of icon images for these, if button is inactive -%T2H_PASSIVE_ICONS = - ( - 'Top', '', - 'Contents', '', - 'Overview', '', - 'Index', '', - 'Back', '', - 'FastBack', '', - 'Prev', '', - 'Up', '', - 'Next', '', - 'Forward', '', - 'FastForward', '', - 'About', '', - 'First', '', - 'Last', '', - ); - -# how to create IMG tag -sub T2H_DEFAULT_button_icon_img -{ - my $button = shift; - my $icon = shift; - my $name = shift; - return qq{<IMG SRC="$icon" BORDER="0" ALT="$button: $name" ALIGN="MIDDLE">}; -} - -# Names of text as alternative for icons -%T2H_NAVIGATION_TEXT = - ( - 'Top', 'Top', - 'Contents', 'Contents', - 'Overview', 'Overview', - 'Index', 'Index', - ' ', ' ', - 'Back', ' < ', - 'FastBack', ' << ', - 'Prev', 'Prev', - 'Up', ' Up ', - 'Next', 'Next', - 'Forward', ' > ', - 'FastForward', ' >> ', - 'About', ' ? ', - 'First', ' |< ', - 'Last', ' >| ' - ); - -sub T2H_DEFAULT_print_navigation -{ - my $fh = shift; - my $vertical = shift; - my $spacing = 1; - print $fh "<TABLE CELLPADDING=$spacing CELLSPACING=$spacing BORDER=0>\n"; - - print $fh "<TR>" unless $vertical; - for $button (@$T2H_BUTTONS) - { - print $fh qq{<TR VALIGN="TOP" ALIGN="LEFT">\n} if $vertical; - print $fh qq{<TD VALIGN="MIDDLE" ALIGN="LEFT">}; - - if (ref($button) eq 'CODE') - { - &$button($fh, $vertical); - } - elsif ($button eq ' ') - { # handle space button - print $fh - $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ? - &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) : - $T2H_NAVIGATION_TEXT{' '}; - next; - } - elsif ($T2H_HREF{$button}) - { # button is active - print $fh - $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ? - t2h_anchor('', $T2H_HREF{$button}, # yes - &$T2H_button_icon_img($button, - $T2H_ACTIVE_ICONS{$button}, - $T2H_NAME{$button})) - : # use text - "[" . - t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) . - "]"; - } - else - { # button is passive - print $fh - $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ? - &$T2H_button_icon_img($button, - $T2H_PASSIVE_ICONS{$button}, - $T2H_NAME{$button}) : - - "[" . $T2H_NAVIGATION_TEXT{$button} . "]"; - } - print $fh "</TD>\n"; - print $fh "</TR>\n" if $vertical; - } - print $fh "</TR>" unless $vertical; - print $fh "</TABLE>\n"; -} - -###################################################################### -# Frames: this is from "Richard Y. Kim" <ryk@coho.net> -# Should be improved to be more conforming to other _print* functions - -sub T2H_DEFAULT_print_frame -{ - my $fh = shift; - print $fh <<EOT; -<HTML> -<HEAD><TITLE>$T2H_THISDOC{title}</TITLE></HEAD> -<FRAMESET cols="140,*"> - <FRAME name=toc src="$docu_toc_frame_file"> - <FRAME name=main src="$docu_doc"> -</FRAMESET> -</HTML> -EOT -} - -sub T2H_DEFAULT_print_toc_frame -{ - my $fh = shift; - &$T2H_print_page_head($fh); - print $fh <<EOT; -<H2>Content</H2> -EOT - print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines; - print $fh "</BODY></HTML>\n"; -} - -###################################################################### -# About page -# - -# T2H_PRE_ABOUT might be a function -$T2H_PRE_ABOUT = <<EOT; -This document was generated $T2H_ADDRESS -using <A HREF="$T2H_HOMEPAGE"><I>texi2html</I></A> -<P></P> -EOT -$T2H_AFTER_ABOUT = ''; - -sub T2H_DEFAULT_about_body -{ - my $about; - if (ref($T2H_PRE_ABOUT) eq 'CODE') - { - $about = &$T2H_PRE_ABOUT(); - } - else - { - $about = $T2H_PRE_ABOUT; - } - $about .= <<EOT; -The buttons in the navigation panels have the following meaning: -<P></P> -<table border = "1"> -<TR> -<TH> Button </TH> -<TH> Name </TH> -<TH> Go to </TH> -<TH> From 1.2.3 go to</TH> -</TR> -EOT - - for $button (@T2H_SECTION_BUTTONS) - { - next if $button eq ' ' || ref($button) eq 'CODE'; - $about .= <<EOT; -<TR> -<TD ALIGN="CENTER"> -EOT - $about .= - ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? - &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) : - " [" . $T2H_NAVIGATION_TEXT{$button} . "] "); - $about .= <<EOT; -</TD> -<TD ALIGN="CENTER"> -$button -</TD> -<TD> -$T2H_BUTTONS_GOTO{$button} -</TD> -<TD> -$T2H_BUTTONS_EXAMPLE{$button} -</TD> -</TR> -EOT - } - - $about .= <<EOT; -</TABLE> -<P></P> -where the <STRONG> Example </STRONG> assumes that the current position -is at <STRONG> Subsubsection One-Two-Three </STRONG> of a document of -the following structure: -<UL> -<LI> 1. Section One </LI> -<UL> -<LI>1.1 Subsection One-One</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.2 Subsection One-Two</LI> -<UL> -<LI>1.2.1 Subsubsection One-Two-One -</LI><LI>1.2.2 Subsubsection One-Two-Two -</LI><LI>1.2.3 Subsubsection One-Two-Three <STRONG> -<== Current Position </STRONG> -</LI><LI>1.2.4 Subsubsection One-Two-Four -</LI></UL> -<LI>1.3 Subsection One-Three</LI> -<UL> -<LI> ... </LI> -</UL> -<LI>1.4 Subsection One-Four</LI> -</UL> -</UL> -$T2H_AFTER_ABOUT -EOT - return $about; -} - - -%T2H_BUTTONS_GOTO = - ( - 'Top', 'cover (top) of document', - 'Contents', 'table of contents', - 'Overview', 'short table of contents', - 'Index', 'concept index', - 'Back', 'previous section in reading order', - 'FastBack', 'previous or up-and-previous section ', - 'Prev', 'previous section same level', - 'Up', 'up section', - 'Next', 'next section same level', - 'Forward', 'next section in reading order', - 'FastForward', 'next or up-and-next section', - 'About' , 'this page', - 'First', 'first section in reading order', - 'Last', 'last section in reading order', - ); - -%T2H_BUTTONS_EXAMPLE = -( - 'Top', ' ', - 'Contents', ' ', - 'Overview', ' ', - 'Index', ' ', - 'Back', '1.2.2', - 'FastBack', '1.1', - 'Prev', '1.2.2', - 'Up', '1.2', - 'Next', '1.2.4', - 'Forward', '1.2.4', - 'FastForward', '1.3', - 'About', ' ', - 'First', '1.', - 'Last', '1.2.4', -); - - -###################################################################### -# from here on, its l2h init stuff -# - -## initialization for latex2html as for Singular manual generation -## obachman 3/99 - -# -# Options controlling Titles, File-Names, Tracing and Sectioning -# -$TITLE = ''; - -$SHORTEXTN = 0; - -$LONG_TITLES = 0; - -$DESTDIR = ''; # should be overwritten by cmd-line argument - -$NO_SUBDIR = 0;# should be overwritten by cmd-line argument - -$PREFIX = ''; # should be overwritten by cmd-line argument - -$AUTO_PREFIX = 0; # this is needed, so that prefix settings are used - -$AUTO_LINK = 0; - -$SPLIT = 0; - -$MAX_LINK_DEPTH = 0; - -$TMP = ''; # should be overwritten by cmd-line argument - -$DEBUG = 0; - -$VERBOSE = 1; - -# -# Options controlling Extensions and Special Features -# -$HTML_VERSION = "3.2"; - -$TEXDEFS = 1; # we absolutely need that - -$EXTERNAL_FILE = ''; - -$SCALABLE_FONTS = 1; - -$NO_SIMPLE_MATH = 1; - -$LOCAL_ICONS = 1; - -$SHORT_INDEX = 0; - -$NO_FOOTNODE = 1; - -$ADDRESS = ''; - -$INFO = ''; - -# -# Switches controlling Image Generation -# -$ASCII_MODE = 0; - -$NOLATEX = 0; - -$EXTERNAL_IMAGES = 0; - -$PS_IMAGES = 0; - -$NO_IMAGES = 0; - -$IMAGES_ONLY = 0; - -$REUSE = 2; - -$ANTI_ALIAS = 1; - -$ANTI_ALIAS_TEXT = 1; - -# -#Switches controlling Navigation Panels -# -$NO_NAVIGATION = 1; -$ADDRESS = ''; -$INFO = 0; # 0 = do not make a "About this document..." section - -# -#Switches for Linking to other documents -# -# actuall -- we don't care - -$MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth - -$MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth - -$NOLATEX = 0; # 1 = do not pass unknown environments to Latex - -$EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document - -$ASCII_MODE = 0; # 1 = do not use any icons or internal images - -# 1 = use links to external postscript images rather than inlined bitmap -# images. -$PS_IMAGES = 0; -$SHOW_SECTION_NUMBERS = 0; - -### Other global variables ############################################### -$CHILDLINE = ""; - -# This is the line width measured in pixels and it is used to right justify -# equations and equation arrays; -$LINE_WIDTH = 500; - -# Used in conjunction with AUTO_NAVIGATION -$WORDS_IN_PAGE = 300; - -# Affects ONLY the way accents are processed -$default_language = 'english'; - -# The value of this variable determines how many words to use in each -# title that is added to the navigation panel (see below) -# -$WORDS_IN_NAVIGATION_PANEL_TITLES = 0; - -# This number will determine the size of the equations, special characters, -# and anything which will be converted into an inlined image -# *except* "image generating environments" such as "figure", "table" -# or "minipage". -# Effective values are those greater than 0. -# Sensible values are between 0.1 - 4. -$MATH_SCALE_FACTOR = 1.5; - -# This number will determine the size of -# image generating environments such as "figure", "table" or "minipage". -# Effective values are those greater than 0. -# Sensible values are between 0.1 - 4. -$FIGURE_SCALE_FACTOR = 1.6; - - -# If both of the following two variables are set then the "Up" button -# of the navigation panel in the first node/page of a converted document -# will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set -# to some text which describes this external link. -$EXTERNAL_UP_LINK = ""; -$EXTERNAL_UP_TITLE = ""; - -# If this is set then the resulting HTML will look marginally better if viewed -# with Netscape. -$NETSCAPE_HTML = 1; - -# Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" -# Paper sizes has no effect other than in the time it takes to create inlined -# images and in whether large images can be created at all ie -# - larger paper sizes *MAY* help with large image problems -# - smaller paper sizes are quicker to handle -$PAPERSIZE = "a4"; - -# Replace "english" with another language in order to tell LaTeX2HTML that you -# want some generated section titles (eg "Table of Contents" or "References") -# to appear in a different language. Currently only "english" and "french" -# is supported but it is very easy to add your own. See the example in the -# file "latex2html.config" -$TITLES_LANGUAGE = "english"; - -1; # This must be the last non-comment line - -# End File texi2html.init -###################################################################### - - -require "$ENV{T2H_HOME}/texi2html.init" - if ($0 =~ /\.pl$/ && - -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); - -#+++############################################################################ -# # -# Initialization # -# Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # -# # -#---############################################################################ - -# leave this within comments, and keep the require statement -# This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init -# exists. - -# -package Getopt::MySimple; - -# Name: -# Getopt::MySimple. -# -# Documentation: -# POD-style (incomplete) documentation is in file MySimple.pod -# -# Tabs: -# 4 spaces || die. -# -# Author: -# Ron Savage rpsavage@ozemail.com.au. -# 1.00 19-Aug-97 Initial version. -# 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). -# 1.20 3-Dec-97 Add 'Help' on a per-switch basis. -# 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. -# 1.40 10-Nov-98 Change width of help report. Restructure tests. -# 1-Jul-00 Modifications for Texi2html - -# -------------------------------------------------------------------------- -# Locally modified by obachman (Display type instead of env, order by cmp) -# $Id$ - -# use strict; -# no strict 'refs'; - -use vars qw(@EXPORT @EXPORT_OK @ISA); -use vars qw($fieldWidth $opt $VERSION); - -use Exporter(); -use Getopt::Long; - -@ISA = qw(Exporter); -@EXPORT = qw(); -@EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. - -# -------------------------------------------------------------------------- - -$fieldWidth = 20; -$VERSION = '1.41'; - -# -------------------------------------------------------------------------- - -sub byOrder -{ - my($self) = @_; - - return uc($a) cmp (uc($b)); -} - -# -------------------------------------------------------------------------- - -sub dumpOptions -{ - my($self) = @_; - - print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; - - for (sort byOrder keys(%{$self -> {'opt'} }) ) - { - print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; - } - - print "\n"; - -} # End of dumpOptions. - -# -------------------------------------------------------------------------- -# Return: -# 0 -> Error. -# 1 -> Ok. - -sub getOptions -{ - push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. - push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. - - my($self, $default, $helpText, $versionText, - $helpThenExit, $versionThenExit, $ignoreCase) = @_; - - $helpThenExit = 1 unless (defined($helpThenExit)); - $versionThenExit = 1 unless (defined($versionThenExit)); - $ignoreCase = 0 unless (defined($ignoreCase)); - - $self -> {'default'} = $default; - $self -> {'helpText'} = $helpText; - $self -> {'versionText'} = $versionText; - $Getopt::Long::ignorecase = $ignoreCase; - - unless (defined($self -> {'default'}{'help'})) - { - $self -> {'default'}{'help'} = - { - type => ':i', - default => '', - linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;}, - verbose => "print help and exit" - }; - } - - unless (defined($self -> {'default'}{'version'})) - { - $self -> {'default'}{'version'} = - { - type => '', - default => '', - linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;}, - verbose => "print version and exit" - }; - } - - for (keys(%{$self -> {'default'} }) ) - { - my $type = ${$self -> {'default'} }{$_}{'type'}; - push(@{$self -> {'type'} }, "$_$type"); - $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} - if ${$self -> {'default'} }{$_}{'linkage'}; - } - - my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); - - return $result unless $result; - - for (keys(%{$self -> {'default'} }) ) - { - if (! defined(${$self -> {'opt'} }{$_})) #{ - { - ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; - } - } - - $result; -} # End of getOptions. - -# -------------------------------------------------------------------------- - -sub helpOptions -{ - my($self) = shift; - my($noHelp) = shift; - $noHelp = 0 unless $noHelp; - my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) - = (10, 5, 9, 78, 4, 11); - - print "$self->{'helpText'}" if ($self -> {'helpText'}); - - print ' Option', ' ' x ($optwidth - length('Option') -1 ), - 'Type', ' ' x ($typewidth - length('Type') + 1), - 'Default', ' ' x ($defaultwidth - length('Default') ), - "Description\n"; - - for (sort byOrder keys(%{$self -> {'default'} }) ) - { - my($line, $help, $option, $val); - $option = $_; - next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; - $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) . - "${$self->{'default'} }{$_}{'type'} ". - ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); - - $val = ${$self->{'default'} }{$_}{'linkage'}; - if ($val) - { - if (ref($val) eq 'SCALAR') - { - $val = $$val; - } - else - { - $val = ''; - } - } - else - { - $val = ${$self->{'default'} }{$_}{'default'}; - } - $line .= "$val "; - $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); - - if (defined(${$self -> {'default'} }{$_}{'verbose'}) && - ${$self -> {'default'} }{$_}{'verbose'} ne '') - { - $help = "${$self->{'default'} }{$_}{'verbose'}"; - } - else - { - $help = ' '; - } - if ((length("$line") + length($help)) < $maxlinewidth) - { - print $line , $help, "\n"; - } - else - { - print $line, "\n", ' ' x $valind, $help, "\n"; - } - for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) - { - print ' ' x ($valind + 2); - print $val, ' ', ' ' x ($valwidth - length($val) - 2); - print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; - } - } - - print <<EOT; -Note: 'Options' may be abbreviated. 'Type' specifications mean: - <none>| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) - =s | :s mandatory (or, optional) string argument - =i | :i mandatory (or, optional) integer argument -EOT -} # End of helpOptions. - -#------------------------------------------------------------------- - -sub new -{ - my($class) = @_; - my($self) = {}; - $self -> {'default'} = {}; - $self -> {'helpText'} = ''; - $self -> {'opt'} = {}; - $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. - $self -> {'type'} = (); - - return bless $self, $class; - -} # End of new. - -# -------------------------------------------------------------------------- - -1; - -# End MySimple.pm - -require "$ENV{T2H_HOME}/MySimple.pm" - if ($0 =~ /\.pl$/ && - -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); - -package main; - -#+++############################################################################ -# # -# Constants # -# # -#---############################################################################ - -$DEBUG_TOC = 1; -$DEBUG_INDEX = 2; -$DEBUG_BIB = 4; -$DEBUG_GLOSS = 8; -$DEBUG_DEF = 16; -$DEBUG_HTML = 32; -$DEBUG_USER = 64; -$DEBUG_L2H = 128; - - -$BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference -$FILERE = '[\/\w.+-]+'; # RE for a file name -$VARRE = '[^\s\{\}]+'; # RE for a variable name -$NODERE = '[^,:]+'; # RE for a node name -$NODESRE = '[^:]+'; # RE for a list of node names - -$ERROR = "***"; # prefix for errors -$WARN = "**"; # prefix for warnings - - # program home page -$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections - -$CHAPTEREND = "<!-- End chapter -->\n"; # to know where a chpater ends -$SECTIONEND = "<!-- End section -->\n"; # to know where section ends -$TOPEND = "<!-- End top -->\n"; # to know where top ends - - - -# -# pre-defined indices -# -$index_properties = -{ - 'c' => { name => 'cp'}, - 'f' => { name => 'fn', code => 1}, - 'v' => { name => 'vr', code => 1}, - 'k' => { name => 'ky', code => 1}, - 'p' => { name => 'pg', code => 1}, - 't' => { name => 'tp', code => 1} -}; - - -%predefined_index = ( - 'cp', 'c', - 'fn', 'f', - 'vr', 'v', - 'ky', 'k', - 'pg', 'p', - 'tp', 't', - ); - -# -# valid indices -# -%valid_index = ( - 'c', 1, - 'f', 1, - 'v', 1, - 'k', 1, - 'p', 1, - 't', 1, - ); - -# -# texinfo section names to level -# -%sec2level = ( - 'top', 0, - 'chapter', 1, - 'unnumbered', 1, - 'majorheading', 1, - 'chapheading', 1, - 'appendix', 1, - 'section', 2, - 'unnumberedsec', 2, - 'heading', 2, - 'appendixsec', 2, - 'appendixsection', 2, - 'subsection', 3, - 'unnumberedsubsec', 3, - 'subheading', 3, - 'appendixsubsec', 3, - 'subsubsection', 4, - 'unnumberedsubsubsec', 4, - 'subsubheading', 4, - 'appendixsubsubsec', 4, - ); - -# -# accent map, TeX command to ISO name -# -%accent_map = ( - '"', 'uml', - '~', 'tilde', - '^', 'circ', - '`', 'grave', - '\'', 'acute', - ); - -# -# texinfo "simple things" (@foo) to HTML ones -# -%simple_map = ( - # cf. makeinfo.c - "*", "<BR>", # HTML+ - " ", " ", - "\t", " ", - "-", "­", # soft hyphen - "\n", "\n", - "|", "", - 'tab', '<\/TD><TD>', - # spacing commands - ":", "", - "!", "!", - "?", "?", - ".", ".", - "-", "", - ); - -# -# texinfo "things" (@foo{}) to HTML ones -# -%things_map = ( - 'TeX', 'TeX', - 'br', '<P>', # paragraph break - 'bullet', '*', - 'copyright', '(C)', - 'dots', '<small>...<\/small>', - 'enddots', '<small>....<\/small>', - 'equiv', '==', - 'error', 'error-->', - 'expansion', '==>', - 'minus', '-', - 'point', '-!-', - 'print', '-|', - 'result', '=>', - 'today', $T2H_TODAY, - 'aa', 'å', - 'AA', 'Å', - 'ae', 'æ', - 'oe', 'œ', - 'AE', 'Æ', - 'OE', 'Œ', - 'o', 'ø', - 'O', 'Ø', - 'ss', 'ß', - 'l', '\/l', - 'L', '\/L', - 'exclamdown', '¡', - 'questiondown', '¿', - 'pounds', '£' - ); - -# -# texinfo styles (@foo{bar}) to HTML ones -# -%style_map = ( - 'acronym', '&do_acronym', - 'asis', '', - 'b', 'B', - 'cite', 'CITE', - 'code', 'CODE', - 'command', 'CODE', - 'ctrl', '&do_ctrl', # special case - 'dfn', 'EM', # DFN tag is illegal in the standard - 'dmn', '', # useless - 'email', '&do_email', # insert a clickable email address - 'emph', 'EM', - 'env', 'CODE', - 'file', '"TT', # will put quotes, cf. &apply_style - 'i', 'I', - 'kbd', 'KBD', - 'key', 'KBD', - 'math', '&do_math', - 'option', '"SAMP', # will put quotes, cf. &apply_style - 'r', '', # unsupported - 'samp', '"SAMP', # will put quotes, cf. &apply_style - 'sc', '&do_sc', # special case - 'strong', 'STRONG', - 't', 'TT', - 'titlefont', '', # useless - 'uref', '&do_uref', # insert a clickable URL - 'url', '&do_url', # insert a clickable URL - 'var', 'VAR', - 'w', '', # unsupported - 'H', '&do_accent', - 'dotaccent', '&do_accent', - 'ringaccent','&do_accent', - 'tieaccent', '&do_accent', - 'u','&do_accent', - 'ubaraccent','&do_accent', - 'udotaccent','&do_accent', - 'v', '&do_accent', - ',', '&do_accent', - 'dotless', '&do_accent' - ); - -# -# texinfo format (@foo/@end foo) to HTML ones -# -%format_map = ( - 'quotation', 'BLOCKQUOTE', - # lists - 'itemize', 'UL', - 'enumerate', 'OL', - # poorly supported - 'flushleft', 'PRE', - 'flushright', 'PRE', - ); - -# -# an eval of these $complex_format_map->{what}->[0] yields beginning -# an eval of these $complex_format_map->{what}->[1] yieleds end -$complex_format_map = -{ - example => - [ - q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=example><pre>"}, - q{'</pre></td></tr></table>'} - ], - smallexample => - [ - q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smallexample><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre>"}, - q{'</FONT></pre></td></tr></table>'} - ], - display => - [ - q{"<TABLE><tr>$T2H_EXAMPLE_INDENT_CELL<td class=display><pre " . 'style="font-family: serif">'}, - q{'</pre></td></tr></table>'} - ], - smalldisplay => - [ - q{"<TABLE><tr>$T2H_SMALL_EXAMPLE_INDENT_CELL<td class=smalldisplay><FONT SIZE=$T2H_SMALL_FONT_SIZE><pre " . 'style="font-family: serif">'}, - q{'</pre></FONT></td></tr></table>'} - ] -}; - -$complex_format_map->{lisp} = $complex_format_map->{example}; -$complex_format_map->{smalllisp} = $complex_format_map->{smallexample}; -$complex_format_map->{format} = $complex_format_map->{display}; -$complex_format_map->{smallformat} = $complex_format_map->{smalldisplay}; - -# -# texinfo definition shortcuts to real ones -# -%def_map = ( - # basic commands - 'deffn', 0, - 'defvr', 0, - 'deftypefn', 0, - 'deftypevr', 0, - 'defcv', 0, - 'defop', 0, - 'deftp', 0, - # basic x commands - 'deffnx', 0, - 'defvrx', 0, - 'deftypefnx', 0, - 'deftypevrx', 0, - 'defcvx', 0, - 'defopx', 0, - 'deftpx', 0, - # shortcuts - 'defun', 'deffn Function', - 'defmac', 'deffn Macro', - 'defspec', 'deffn {Special Form}', - 'defvar', 'defvr Variable', - 'defopt', 'defvr {User Option}', - 'deftypefun', 'deftypefn Function', - 'deftypevar', 'deftypevr Variable', - 'defivar', 'defcv {Instance Variable}', - 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME - 'defmethod', 'defop Method', - 'deftypemethod', 'defop Method', # NEW:FIXME - # x shortcuts - 'defunx', 'deffnx Function', - 'defmacx', 'deffnx Macro', - 'defspecx', 'deffnx {Special Form}', - 'defvarx', 'defvrx Variable', - 'defoptx', 'defvrx {User Option}', - 'deftypefunx', 'deftypefnx Function', - 'deftypevarx', 'deftypevrx Variable', - 'defivarx', 'defcvx {Instance Variable}', - 'defmethodx', 'defopx Method', - ); - -# -# things to skip -# -%to_skip = ( - # comments - 'c', 1, - 'comment', 1, - 'ifnotinfo', 1, - 'ifnottex', 1, - 'ifhtml', 1, - 'end ifhtml', 1, - 'end ifnotinfo', 1, - 'end ifnottex', 1, - # useless - 'detailmenu', 1, - 'direntry', 1, - 'contents', 1, - 'shortcontents', 1, - 'summarycontents', 1, - 'footnotestyle', 1, - 'end ifclear', 1, - 'end ifset', 1, - 'titlepage', 1, - 'end titlepage', 1, - # unsupported commands (formatting) - 'afourpaper', 1, - 'cropmarks', 1, - 'finalout', 1, - 'headings', 1, - 'sp', 1, - 'need', 1, - 'page', 1, - 'setchapternewpage', 1, - 'everyheading', 1, - 'everyfooting', 1, - 'evenheading', 1, - 'evenfooting', 1, - 'oddheading', 1, - 'oddfooting', 1, - 'smallbook', 1, - 'vskip', 1, - 'filbreak', 1, - 'paragraphindent', 1, - # unsupported formats - 'cartouche', 1, - 'end cartouche', 1, - 'group', 1, - 'end group', 1, - ); - -#+++############################################################################ -# # -# Argument parsing, initialisation # -# # -#---############################################################################ - -# -# flush stdout and stderr after every write -# -select(STDERR); -$| = 1; -select(STDOUT); -$| = 1; - - -%value = (); # hold texinfo variables, see also -D -$use_bibliography = 1; -$use_acc = 1; - -# -# called on -init-file -sub LoadInitFile -{ - my $init_file = shift; - # second argument is value of options - $init_file = shift; - if (-f $init_file) - { - print "# reading initialization file from $init_file\n" - if ($T2H_VERBOSE); - require($init_file); - } - else - { - print "$ERROR Error: can't read init file $int_file\n"; - $init_file = ''; - } -} - -# -# called on -lang -sub SetDocumentLanguage -{ - my $lang = shift; - if (! exists($T2H_WORDS->{$lang})) - { - warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" . - ($T2H_LANG ? T2H_LANG : "en") . "'\n"; - } - else - { - print "# using '$lang' as document language\n" if ($T2H_VERBOSE); - $T2H_LANG = $lang; - } -} - -## -## obsolete cmd line options -## -$T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = -{ - type => '!', - linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;}, - verbose => 'obsolete, use -nosec_nav', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {use_acc} = -{ - type => '!', - linkage => \$use_acc, - verbose => 'obsolete', - noHelp => 2 -}; -$T2H_OBSOLETE_OPTIONS -> {expandinfo} = -{ - type => '!', - linkage => sub {$main::T2H_EXPAND = 'info';}, - verbose => 'obsolete, use "-expand info" instead', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {expandtex} = -{ - type => '!', - linkage => sub {$main::T2H_EXPAND = 'tex';}, - verbose => 'obsolete, use "-expand tex" instead', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {monolithic} = -{ - type => '!', - linkage => sub {$main::T2H_SPLIT = '';}, - verbose => 'obsolete, use "-split no" instead', - noHelp => 2 -}; -$T2H_OBSOLETE_OPTIONS -> {split_node} = -{ - type => '!', - linkage => sub{$main::T2H_SPLIT = 'section';}, - verbose => 'obsolete, use "-split section" instead', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {split_chapter} = -{ - type => '!', - linkage => sub{$main::T2H_SPLIT = 'chapter';}, - verbose => 'obsolete, use "-split chapter" instead', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {no_verbose} = -{ - type => '!', - linkage => sub {$main::T2H_VERBOSE = 0;}, - verbose => 'obsolete, use -noverbose instead', - noHelp => 2, -}; -$T2H_OBSOLETE_OPTIONS -> {output_file} = -{ - type => '=s', - linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, - verbose => 'obsolete, use -out_file instead', - noHelp => 2 -}; - -$T2H_OBSOLETE_OPTIONS -> {section_navigation} = -{ - type => '!', - linkage => \$T2H_SECTION_NAVIGATION, - verbose => 'obsolete, use -sec_nav instead', - noHelp => 2, -}; - -$T2H_OBSOLETE_OPTIONS -> {verbose} = -{ - type => '!', - linkage => \$T2H_VERBOSE, - verbose => 'obsolete, use -Verbose instead', - noHelp => 2 -}; - -# read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc -my $home = $ENV{HOME}; -defined($home) or $home = ''; -foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") { - if (-f $i) { - print "# reading initialization file from $i\n" - if ($T2H_VERBOSE); - require($i); - } -} - - -#+++############################################################################ -# # -# parse command-line options -# # -#---############################################################################ -$T2H_USAGE_TEXT = <<EOT; -Usage: texi2html [OPTIONS] TEXINFO-FILE -Translates Texinfo source documentation to HTML. -EOT -$T2H_FAILURE_TEXT = <<EOT; -Try 'texi2html -help' for usage instructions. -EOT -$options = new Getopt::MySimple; - -# some older version of GetOpt::Long don't have -# Getopt::Long::Configure("pass_through") -eval {Getopt::Long::Configure("pass_through");}; -$Configure_failed = $@ && <<EOT; -**WARNING: Parsing of obsolete command-line options could have failed. - Consider to use only documented command-line options (run - 'texi2html -help 2' for a complete list) or upgrade to perl - version 5.005 or higher. -EOT - -if (! $options->getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) -{ - print $Configure_failed if $Configure_failed; - die $T2H_FAILURE_TEXT; -} - -if (@ARGV > 1) -{ - eval {Getopt::Long::Configure("no_pass_through");}; - if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) - { - print $Configure_failed if $Configure_failed; - die $T2H_FAILURE_TEXT; - } -} - -if ($T2H_CHECK) { - die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0; - ✓ - exit; -} - -#+++############################################################################ -# # -# evaluation of cmd line options -# # -#---############################################################################ - -if ($T2H_EXPAND eq 'info') -{ - $to_skip{'ifinfo'} = 1; - $to_skip{'end ifinfo'} = 1; -} -elsif ($T2H_EXPAND eq 'tex') -{ - $to_skip{'iftex'} = 1; - $to_skip{'end iftex'} = 1; - -} - -$T2H_INVISIBLE_MARK = '<IMG SRC="invisible.xbm">' if $T2H_INVISIBLE_MARK eq 'xbm'; - -# -# file name buisness -# -die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1; -$docu = shift(@ARGV); -if ($docu =~ /.*\//) { - chop($docu_dir = $&); - $docu_name = $'; -} else { - $docu_dir = '.'; - $docu_name = $docu; -} -unshift(@T2H_INCLUDE_DIRS, $docu_dir); -$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document -$docu_name = $T2H_PREFIX if ($T2H_PREFIX); - -# subdir -if ($T2H_SUBDIR && ! $T2H_OUT) -{ - $T2H_SUBDIR =~ s|/*$||; - unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR") - { - if ( mkdir($T2H_SUBDIR, oct(755))) - { - print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE); - } - else - { - warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n"; - $T2H_SUBDIR = ''; - } - } -} - -if ($T2H_SUBDIR && ! $T2H_OUT) -{ - $docu_rdir = "$T2H_SUBDIR/"; - print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); -} -else -{ - if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|) - { - $docu_rdir = "$1/"; - print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); - } - else - { - print "# putting result files into current directory \n" if ($T2H_VERBOSE); - $docu_rdir = ''; - } -} - -# extension -if ($T2H_SHORTEXTN) -{ - $docu_ext = "htm"; -} -else -{ - $docu_ext = "html"; -} -if ($T2H_TOP_FILE =~ /\..*$/) -{ - $T2H_TOP_FILE = $`.".$docu_ext"; -} - -# result files -if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i)) -{ - $T2H_SPLIT = 'section'; -} -elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i) -{ - $T2H_SPLIT = 'chapter' -} -else -{ - undef $T2H_SPLIT; -} - -$docu_doc = "$docu_name.$docu_ext"; # document's contents -$docu_doc_file = "$docu_rdir$docu_doc"; -if ($T2H_SPLIT) -{ - $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents - $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc - $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes - $docu_about = "${docu_name}_abt.$docu_ext"; # about this document - $docu_top = $T2H_TOP_FILE || $docu_doc; -} -else -{ - if ($T2H_OUT) - { - $docu_doc = $T2H_OUT; - $docu_doc =~ s|.*/||; - } - $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc; -} - -$docu_toc_file = "$docu_rdir$docu_toc"; -$docu_stoc_file = "$docu_rdir$docu_stoc"; -$docu_foot_file = "$docu_rdir$docu_foot"; -$docu_about_file = "$docu_rdir$docu_about"; -$docu_top_file = "$docu_rdir$docu_top"; - -$docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext"; -$docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext"; - -# -# variables -# -$value{'html'} = 1; # predefine html (the output format) -$value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator) -# _foo: internal to track @foo -foreach ('_author', '_title', '_subtitle', - '_settitle', '_setfilename', '_shorttitle') { - $value{$_} = ''; # prevent -w warnings -} -%node2sec = (); # node to section name -%sec2node = (); # section to node name -%sec2number = (); # section to number -%number2sec = (); # number to section -%idx2node = (); # index keys to node -%node2href = (); # node to HREF -%node2next = (); # node to next -%node2prev = (); # node to prev -%node2up = (); # node to up -%bib2href = (); # bibliography reference to HREF -%gloss2href = (); # glossary term to HREF -@sections = (); # list of sections -%tag2pro = (); # protected sections - -# -# initial indexes -# -$bib_num = 0; -$foot_num = 0; -$gloss_num = 0; -$idx_num = 0; -$sec_num = 0; -$doc_num = 0; -$html_num = 0; - -# -# can I use ISO8879 characters? (HTML+) -# -if ($T2H_USE_ISO) { - $things_map{'bullet'} = "•"; - $things_map{'copyright'} = "©"; - $things_map{'dots'} = "…"; - $things_map{'equiv'} = "≡"; - $things_map{'expansion'} = "→"; - $things_map{'point'} = "∗"; - $things_map{'result'} = "⇒"; -} - -# -# read texi2html extensions (if any) -# -$extensions = 'texi2html.ext'; # extensions in working directory -if (-f $extensions) { - print "# reading extensions from $extensions\n" if $T2H_VERBOSE; - require($extensions); -} -($progdir = $0) =~ s/[^\/]+$//; -if ($progdir && ($progdir ne './')) { - $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory - if (-f $extensions) { - print "# reading extensions from $extensions\n" if $T2H_VERBOSE; - require($extensions); - } -} - - -print "# reading from $docu\n" if $T2H_VERBOSE; - -######################################################################### -# -# latex2html stuff -# -# latex2html conversions consist of three stages: -# 1) ToLatex: Put "latex" code into a latex file -# 2) ToHtml: Use latex2html to generate corresponding html code and images -# 3) FromHtml: Extract generated code and images from latex2html run -# - -########################## -# default settings -# - -# defaults for files and names - -sub l2h_Init -{ - local($root) = @_; - - return 0 unless ($root); - - $l2h_name = "${root}_l2h"; - - $l2h_latex_file = "$docu_rdir${l2h_name}.tex"; - $l2h_cache_file = "${docu_rdir}l2h_cache.pm"; - $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H); - - # destination dir -- generated images are put there, should be the same - # as dir of enclosing html document -- - $l2h_html_file = "$docu_rdir${l2h_name}.html"; - $l2h_prefix = "${l2h_name}_"; - return 1; -} - - -########################## -# -# First stage: Generation of Latex file -# Initialize with: l2h_InitToLatex -# Add content with: l2h_ToLatex($text) --> HTML placeholder comment -# Finish with: l2h_FinishToLatex -# - -$l2h_latex_preample = <<EOT; -% This document was automatically generated by the l2h extenstion of texi2html -% DO NOT EDIT !!! -\\documentclass{article} -\\usepackage{html} -\\begin{document} -EOT - -$l2h_latex_closing = <<EOT; -\\end{document} -EOT - -# return used latex 1, if l2h could be initalized properly, 0 otherwise -sub l2h_InitToLatex -{ - %l2h_to_latex = (); - unless ($T2H_L2H_SKIP) - { - unless (open(L2H_LATEX, ">$l2h_latex_file")) - { - warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n"; - return 0; - } - print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE); - print L2H_LATEX $l2h_latex_preample; - } - # open database for caching - l2h_InitCache(); - $l2h_latex_count = 0; - $l2h_to_latex_count = 0; - $l2h_cached_count = 0; - return 1; -} - -# print text (1st arg) into latex file (if not already there), return -# HTML commentary which can be later on replaced by the latex2html -# generated text -sub l2h_ToLatex -{ - my($text) = @_; - my($count); - - $l2h_to_latex_count++; - $text =~ s/(\s*)$//; - - # try whether we can cache it - my $cached_text = l2h_FromCache($text); - if ($cached_text) - { - $l2h_cached_count++; - return $cached_text; - } - - # try whether we have text already on things to do - unless ($count = $l2h_to_latex{$text}) - { - $count = $l2h_latex_count; - $l2h_latex_count++; - $l2h_to_latex{$text} = $count; - $l2h_to_latex[$count] = $text; - unless ($T2H_L2H_SKIP) - { - print L2H_LATEX "\\begin{rawhtml}\n"; - print L2H_LATEX "<!-- l2h_begin ${l2h_name} ${count} -->\n"; - print L2H_LATEX "\\end{rawhtml}\n"; - - print L2H_LATEX "$text\n"; - - print L2H_LATEX "\\begin{rawhtml}\n"; - print L2H_LATEX "<!-- l2h_end ${l2h_name} ${count} -->\n"; - print L2H_LATEX "\\end{rawhtml}\n"; - } - } - return "<!-- l2h_replace ${l2h_name} ${count} -->"; -} - -# print closing into latex file and close it -sub l2h_FinishToLatex -{ - local ($reused); - - $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count; - unless ($T2H_L2H_SKIP) - { - print L2H_LATEX $l2h_latex_closing; - close(L2H_LATEX); - } - print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE); - unless ($l2h_latex_count) - { - l2h_Finish(); - return 0; - } - return 1; -} - -################################### -# Second stage: Use latex2html to generate corresponding html code and images -# -# l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]): -# Call latex2html on $l2h_latex_file -# Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir -# Return 1, on success -# 0, otherwise -# -sub l2h_ToHtml -{ - local($call, $ext, $root, $dotbug); - - if ($T2H_L2H_SKIP) - { - print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE); - return 1; - } - - # Check for dot in directory where dvips will work - if ($T2H_L2H_TMP) - { - if ($T2H_L2H_TMP =~ /\./) - { - warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; - $dotbug = 1; - } - } - else - { - if (&getcwd =~ /\./) - { - warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; - $dotbug = 1; - } - } - # fix it, if necessary and hope that it works - $T2H_L2H_TMP = "/tmp" if ($dotbug); - - $call = $T2H_L2H_L2H; - # use init file, if specified - $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file); - # set output dir - $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir"); - # use l2h_tmp, if specified - $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP); - # options we want to be sure of - $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; - $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file"; - - print "# l2h: executing '$call'\n" if ($T2H_VERBOSE); - if (system($call)) - { - warn "l2h ***Error: '${call}' did not succeed\n"; - return 0; - } - else - { - print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE); - return 1; - } -} - -# this is directly pasted over from latex2html -sub getcwd { - local($_) = `pwd`; - - die "'pwd' failed (out of memory?)\n" - unless length; - chop; - $_; -} - - -########################## -# Third stage: Extract generated contents from latex2html run -# Initialize with: l2h_InitFromHtml -# open $l2h_html_file for reading -# reads in contents into array indexed by numbers -# return 1, on success -- 0, otherwise -# Extract Html code with: l2h_FromHtml($text) -# replaces in $text all previosuly inserted comments by generated html code -# returns (possibly changed) $text -# Finish with: l2h_FinishFromHtml -# closes $l2h_html_dir/$l2h_name.".$docu_ext" - -sub l2h_InitFromHtml -{ - local($h_line, $h_content, $count, %l2h_img); - - if (! open(L2H_HTML, "<${l2h_html_file}")) - { - print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n"; - return 0; - } - print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE); - - $l2h_html_count = 0; - - while ($h_line = <L2H_HTML>) - { - if ($h_line =~ /^<!-- l2h_begin $l2h_name ([0-9]+) -->/) - { - $count = $1; - $h_content = ""; - while ($h_line = <L2H_HTML>) - { - if ($h_line =~ /^<!-- l2h_end $l2h_name $count -->/) - { - chomp $h_content; - chomp $h_content; - $l2h_html_count++; - $h_content = l2h_ToCache($count, $h_content); - $l2h_from_html[$count] = $h_content; - $h_content = ''; - last; - } - $h_content = $h_content.$h_line; - } - if ($hcontent) - { - print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n" - if ($T2H_VERBOSE); - close(L2H_HTML); - return 0; - } - } - } - print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n" - if ($T2H_VERBOSE); - - close(L2H_HTML); - return 1; -} - -sub l2h_FromHtml -{ - local($text) = @_; - local($done, $to_do, $count); - - $to_do = $text; - - while ($to_do =~ /([^\000]*)<!-- l2h_replace $l2h_name ([0-9]+) -->([^\000]*)/) - { - $to_do = $1; - $count = $2; - $done = $3.$done; - - $done = "<!-- l2h_end $l2h_name $count -->".$done - if ($T2H_DEBUG & $DEBUG_L2H); - - $done = &l2h_ExtractFromHtml($count) . $done; - - $done = "<!-- l2h_begin $l2h_name $count -->".$done - if ($T2H_DEBUG & $DEBUG_L2H); - } - return $to_do.$done; -} - - -sub l2h_ExtractFromHtml -{ - local($count) = @_; - - return $l2h_from_html[$count] if ($l2h_from_html[$count]); - - if ($count >= 0 && $count < $l2h_latex_count) - { - # now we are in trouble - local($l_l2h, $_); - - $l2h_extract_error++; - print "$ERROR l2h: can't extract content $count from html\n" - if ($T2H_VERBOSE); - # try simple (ordinary) substition (without l2h) - $l_l2h = $T2H_L2H; - $T2H_L2H = 0; - $_ = $l2h_to_latex{$count}; - $_ = &substitute_style($_); - &unprotect_texi; - $_ = "<!-- l2h: ". __LINE__ . " use texi2html -->" . $_ - if ($T2H_DEBUG & $DEBUG_L2H); - $T2H_L2H = $l_l2h; - return $_; - } - else - { - # now we have been incorrectly called - $l2h_range_error++; - print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n"; - return "<!-- l2h: ". __LINE__ . " out of range count $count -->" - if ($T2H_DEBUG & $DEBUG_L2H); - return "<!-- l2h: out of range count $count -->"; - } -} - -sub l2h_FinishFromHtml -{ - if ($T2H_VERBOSE) - { - if ($l2h_extract_error + $l2h_range_error) - { - print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n"; - } - else - { - print "# l2h: finished from html (no errors)\n"; - } - } -} - -sub l2h_Finish -{ - l2h_StoreCache(); - if ($T2H_L2H_CLEAN) - { - print "# l2h: removing temporary files generated by l2h extension\n" - if $T2H_VERBOSE; - while (<"$docu_rdir$l2h_name"*>) - { - unlink $_; - } - } - print "# l2h: Finished\n" if $T2H_VERBOSE; - return 1; -} - -############################## -# stuff for l2h caching -# - -# I tried doing this with a dbm data base, but it did not store all -# keys/values. Hence, I did as latex2html does it -sub l2h_InitCache -{ - if (-r "$l2h_cache_file") - { - my $rdo = do "$l2h_cache_file"; - warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") - unless ($rdo); - } -} - -sub l2h_StoreCache -{ - return unless $l2h_latex_count; - - my ($key, $value); - open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; - - - while (($key, $value) = each %l2h_cache) - { - # escape stuff - $key =~ s|/|\\/|g; - $key =~ s|\\\\/|\\/|g; - # weird, a \ at the end of the key results in an error - # maybe this also broke the dbm database stuff - $key =~ s|\\$|\\\\|; - $value =~ s/\|/\\\|/g; - $value =~ s/\\\\\|/\\\|/g; - $value =~ s|\\\\|\\\\\\\\|g; - print FH "\n\$l2h_cache_key = q/$key/;\n"; - print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; - } - print FH "1;"; - close(FH); -} - -# return cached html, if it exists for text, and if all pictures -# are there, as well -sub l2h_FromCache -{ - my $text = shift; - my $cached = $l2h_cache{$text}; - if ($cached) - { - while ($cached =~ m/SRC="(.*?)"/g) - { - unless (-e "$docu_rdir$1") - { - return undef; - } - } - return $cached; - } - return undef; -} - -# insert generated html into cache, move away images, -# return transformed html -$maximage = 1; -sub l2h_ToCache -{ - my $count = shift; - my $content = shift; - my @images = ($content =~ /SRC="(.*?)"/g); - my ($src, $dest); - - for $src (@images) - { - $dest = $l2h_img{$src}; - unless ($dest) - { - my $ext; - if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) - { - $ext = $1; - } - else - { - warn "$ERROR: L2h image $src has invalid extension\n"; - next; - } - while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;} - $dest = "${docu_name}_$maximage.$ext"; - system("cp -f $docu_rdir$src $docu_rdir$dest"); - $l2h_img{$src} = $dest; - unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H); - } - $content =~ s/$src/$dest/g; - } - $l2h_cache{$l2h_to_latex[$count]} = $content; - return $content; -} - - -#+++############################################################################ -# # -# Pass 1: read source, handle command, variable, simple substitution # -# # -#---############################################################################ - -@lines = (); # whole document -@toc_lines = (); # table of contents -@stoc_lines = (); # table of contents -$curlevel = 0; # current level in TOC -$node = ''; # current node name -$node_next = ''; # current node next name -$node_prev = ''; # current node prev name -$node_up = ''; # current node up name -$in_table = 0; # am I inside a table -$table_type = ''; # type of table ('', 'f', 'v', 'multi') -@tables = (); # nested table support -$in_bibliography = 0; # am I inside a bibliography -$in_glossary = 0; # am I inside a glossary -$in_top = 0; # am I inside the top node -$has_top = 0; # did I see a top node? -$has_top_command = 0; # did I see @top for automatic pointers? -$in_pre = 0; # am I inside a preformatted section -$in_list = 0; # am I inside a list -$in_html = 0; # am I inside an HTML section -$first_line = 1; # is it the first line -$dont_html = 0; # don't protect HTML on this line -$deferred_ref = ''; # deferred reference for indexes -@html_stack = (); # HTML elements stack -$html_element = ''; # current HTML element -&html_reset; -%macros = (); # macros - -# init l2h -$T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H); -$T2H_L2H = &l2h_InitToLatex if ($T2H_L2H); - -# build code for simple substitutions -# the maps used (%simple_map and %things_map) MUST be aware of this -# watch out for regexps, / and escaped characters! -$subst_code = ''; -foreach (keys(%simple_map)) { - ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars - $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n"; -} -foreach (keys(%things_map)) { - $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n"; -} -if ($use_acc) { - # accentuated characters - foreach (keys(%accent_map)) { - if ($_ eq "`") { - $subst_code .= "s/$;3"; - } elsif ($_ eq "'") { - $subst_code .= "s/$;4"; - } else { - $subst_code .= "s/\\\@\\$_"; - } - $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n"; - } -} -eval("sub simple_substitutions { $subst_code }"); - -&init_input; -INPUT_LINE: while ($_ = &next_line) { - # - # remove \input on the first lines only - # - if ($first_line) { - next if /^\\input/; - $first_line = 0; - } - # non-@ substitutions cf. texinfmt.el - # - # parse texinfo tags - # - $tag = ''; - $end_tag = ''; - if (/^\s*\@end\s+(\w+)\b/) { - $end_tag = $1; - } elsif (/^\s*\@(\w+)\b/) { - $tag = $1; - } - # - # handle @html / @end html - # - if ($in_html) { - if ($end_tag eq 'html') { - $in_html = 0; - } else { - $tag2pro{$in_html} .= $_; - } - next; - } elsif ($tag eq 'html') { - $in_html = $PROTECTTAG . ++$html_num; - push(@lines, $in_html); - next; - } - - # - # try to remove inlined comments - # syntax from tex-mode.el comment-start-skip - # - s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/; - -# Sometimes I use @c right at the end of a line ( to suppress the line feed ) -# s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/; -# s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; -# s/(.*)\@c{.*?}(.*)/$1$2/; -# s/(.*)\@comment{.*?}(.*)/$1$2/; -# s/^(.*)\@c /$1/; -# s/^(.*)\@comment /$1/; - - ############################################################# - # value substitution before macro expansion, so that - # it works in macro arguments - s/\@value{($VARRE)}/$value{$1}/eg; - - ############################################################# - # macro substitution - while (/\@(\w+)/g) - { - if (exists($macros->{$1})) - { - my $before = $`; - my $name = $1; - my $after = $'; - my @args; - my $args; - if ($after =~ /^\s*{(.*?[^\\])}(.*)/) - { - $args = $1; - $after = $2; - } - elsif (@{$macros->{$name}->{Args}} == 1) - { - $args = $after; - $args =~ s/^\s*//; - $args =~ s/\s*$//; - $after = ''; - } - $args =~ s|\\\\|\\|g; - $args =~ s|\\{|{|g; - $args =~ s|\\}|}|g; - if (@{$macros->{$name}->{Args}} > 1) - { - $args =~ s/(^|[^\\]),/$1$;/g ; - $args =~ s|\\,|,|g; - @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1); - } - else - { - $args =~ s|\\,|,|g; - @args = ($args); - } - my $macrobody = $macros->{$name}->{Body}; - for ($i=0; $i<=$#args; $i++) - { - $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g; - } - $macrobody =~ s|\\\\|\\|g; - $_ = $before . $macrobody . $after; - unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_); - next INPUT_LINE; - } - } # - - - # - # try to skip the line - # - if ($end_tag) { - $in_titlepage = 0 if $end_tag eq 'titlepage'; - next if $to_skip{"end $end_tag"}; - } elsif ($tag) { - $in_titlepage = 1 if $tag eq 'titlepage'; - next if $to_skip{$tag}; - last if $tag eq 'bye'; - } - if ($in_top) { - # parsing the top node - if ($tag eq 'node' || - ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/)) - { - # no more in top - $in_top = 0; - push(@lines, $TOPEND); - } - } - unless ($in_pre) { - s/``/\"/g; - s/''/\"/g; - s/([\w ])---([\w ])/$1--$2/g; - } - # - # analyze the tag - # - if ($tag) { - # skip lines - &skip_until($tag), next if $tag eq 'ignore'; - &skip_until($tag), next if $tag eq 'ifnothtml'; - if ($tag eq 'ifinfo') - { - &skip_until($tag), next unless $T2H_EXPAND eq 'info'; - } - if ($tag eq 'iftex') - { - &skip_until($tag), next unless $T2H_EXPAND eq 'tex'; - } - if ($tag eq 'tex') - { - # add to latex2html file - if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre) - { - # add space to the end -- tex(i2dvi) does this, as well - push(@lines, &l2h_ToLatex(&string_until($tag) . " ")); - } - else - { - &skip_until($tag); - } - next; - } - if ($tag eq 'titlepage') - { - next; - } - # handle special tables - if ($tag =~ /^(|f|v|multi)table$/) { - $table_type = $1; - $tag = 'table'; - } - # special cases - if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) { - $in_top = 1; - $has_top = 1; - $has_top_command = 1 if $tag eq 'top'; - @lines = (); # ignore all lines before top (title page garbage) - next; - } elsif ($tag eq 'node') { - if ($in_top) - { - $in_top = 0; - push(@lines, $TOPEND); - } - warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o; - # request of "Richard Y. Kim" <ryk@ap.com> - s/^\@node\s+//; - $_ = &protect_html($_); # if node contains '&' for instance - ($node, $node_next, $node_prev, $node_up) = split(/,/); - &normalise_node($node); - &normalise_node($node_next); - &normalise_node($node_prev); - &normalise_node($node_up); - $node =~ /\"/ ? - push @lines, &html_debug("<A NAME='$node'></A>\n", __LINE__) : - push @lines, &html_debug("<A NAME=\"$node\"></A>\n", __LINE__); - next; - } elsif ($tag eq 'include') { - if (/^\@include\s+($FILERE)\s*$/o) { - $file = LocateIncludeFile($1); - if ($file && -e $file) { - &open($file); - print "# including $file\n" if $T2H_VERBOSE; - } else { - warn "$ERROR Can't find $1, skipping"; - } - } else { - warn "$ERROR Bad include line: $_"; - } - next; - } elsif ($tag eq 'ifclear') { - if (/^\@ifclear\s+($VARRE)\s*$/o) { - next unless defined($value{$1}); - &skip_until($tag); - } else { - warn "$ERROR Bad ifclear line: $_"; - } - next; - } elsif ($tag eq 'ifset') { - if (/^\@ifset\s+($VARRE)\s*$/o) { - next if defined($value{$1}); - &skip_until($tag); - } else { - warn "$ERROR Bad ifset line: $_"; - } - next; - } elsif ($tag eq 'menu') { - unless ($T2H_SHOW_MENU) { - &skip_until($tag); - next; - } - &html_push_if($tag); - push(@lines, &html_debug('', __LINE__)); - } elsif ($format_map{$tag}) { - $in_pre = 1 if $format_map{$tag} eq 'PRE'; - &html_push_if($format_map{$tag}); - push(@lines, &html_debug('', __LINE__)); - $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ; -# push(@lines, &debug("<BLOCKQUOTE>\n", __LINE__)) -# if $tag =~ /example/i; - # sunshine@sunshineco.com: <PRE>bla</PRE> looks better than - # <PRE>\nbla</PRE> (at least on NeXTstep browser - push(@lines, &debug("<$format_map{$tag}>" . - ($in_pre ? '' : "\n"), __LINE__)); - next; - } - elsif (exists $complex_format_map->{$tag}) - { - my $start = eval $complex_format_map->{$tag}->[0]; - if ($@) - { - print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@"; - $start = '<pre>' - } - $in_pre = 1 if $start =~ /<pre/; - push(@lines, html_debug($start. ($in_pre ? '' : "\n"), __LINE__)); - next; - } elsif ($tag eq 'table') { - # anorland@hem2.passagen.se - # if (/^\s*\@(|f|v|multi)table\s+\@(\w+)/) { - if (/^\s*\@(|f|v|multi)table\s+\@(\w+)|(\{[^\}]*\})/) { - $in_table = $2; - unshift(@tables, join($;, $table_type, $in_table)); - if ($table_type eq "multi") { - # don't use borders -- gets confused by empty cells - push(@lines, &debug("<TABLE>\n", __LINE__)); - &html_push_if('TABLE'); - } else { - push(@lines, &debug("<DL COMPACT>\n", __LINE__)); - &html_push_if('DL'); - } - push(@lines, &html_debug('', __LINE__)); - } else { - warn "$ERROR Bad table line: $_"; - } - next; - } - elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') - { - if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/) - { - my $from = $1; - my $to = $2; - my $prefix_from = IndexName2Prefix($from); - my $prefix_to = IndexName2Prefix($to); - - warn("$ERROR unknown from index name $from ind syn*index line: $_"), next - unless $prefix_from; - warn("$ERROR unknown to index name $to ind syn*index line: $_"), next - unless $prefix_to; - - if ($tag eq 'syncodeindex') - { - $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1; - } - else - { - $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1; - } - } - else - { - warn "$ERROR Bad syn*index line: $_"; - } - next; - } - elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') - { - if (/^\@$tag\s+(\w+)\s*$/) - { - my $name = $1; - $index_properties->{$name}->{name} = $name; - $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex'; - } - else - { - warn "$ERROR Bad defindex line: $_"; - } - next; - } - elsif (/^\@printindex/) - { - push (@lines, "<!--::${section}::-->$_"); - next; - } - elsif ($tag eq 'sp') { - push(@lines, &debug("<P>\n", __LINE__)); - next; - } elsif ($tag eq 'center') { - push(@lines, &debug("<center>\n", __LINE__)); - s/\@center//; - } elsif ($tag eq 'setref') { - &protect_html; # if setref contains '&' for instance - if (/^\@$tag\s*{($NODERE)}\s*$/) { - $setref = $1; - $setref =~ s/\s+/ /g; # normalize - $setref =~ s/ $//; - $node2sec{$setref} = $name; - $sec2node{$name} = $setref; - $node2href{$setref} = "$docu_doc#$docid"; - } else { - warn "$ERROR Bad setref line: $_"; - } - next; - } elsif ($tag eq 'lowersections') { - local ($sec, $level); - while (($sec, $level) = each %sec2level) { - $sec2level{$sec} = $level + 1; - } - next; - } elsif ($tag eq 'raisesections') { - local ($sec, $level); - while (($sec, $level) = each %sec2level) { - $sec2level{$sec} = $level - 1; - } - next; - } - elsif ($tag eq 'macro' || $tag eq 'rmacro') - { - if (/^\@$tag\s*(\w+)\s*(.*)/) - { - my $name = $1; - my @args; - @args = split(/\s*,\s*/ , $1) - if ($2 =~ /^\s*{(.*)}\s*/); - - $macros->{$name}->{Args} = \@args; - $macros->{$name}->{Body} = ''; - while (($_ = &next_line) && $_ !~ /\@end $tag/) - { - $macros->{$name}->{Body} .= $_; - } - die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n" - unless (/\@end $tag/); - chomp $macros->{$name}->{Body}; - } - else - { - warn "$ERROR: Bad macro defintion $_" - } - next; - } - elsif ($tag eq 'unmacro') - { - delete $macros->{$1} if (/^\@unmacro\s*(\w+)/); - next; - } - elsif ($tag eq 'documentlanguage') - { - SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/); - } - elsif (defined($def_map{$tag})) { - if ($def_map{$tag}) { - s/^\@$tag\s+//; - $tag = $def_map{$tag}; - $_ = "\@$tag $_"; - $tag =~ s/\s.*//; - } - } elsif (defined($user_sub{$tag})) { - s/^\@$tag\s+//; - $sub = $user_sub{$tag}; - print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER; - if (defined(&$sub)) { - chop($_); - &$sub($_); - } else { - warn "$ERROR Bad user sub for $tag: $sub\n"; - } - next; - } - if (defined($def_map{$tag})) { - s/^\@$tag\s+//; - if ($tag =~ /x$/) { - # extra definition line - $tag = $`; - $is_extra = 1; - } else { - $is_extra = 0; - } - while (/\{([^\{\}]*)\}/) { - # this is a {} construct - ($before, $contents, $after) = ($`, $1, $'); - # protect spaces - $contents =~ s/\s+/$;9/g; - # restore $_ protecting {} - $_ = "$before$;7$contents$;8$after"; - } - @args = split(/\s+/, &protect_html($_)); - foreach (@args) { - s/$;9/ /g; # unprotect spaces - s/$;7/\{/g; # ... { - s/$;8/\}/g; # ... } - } - $type = shift(@args); - $type =~ s/^\{(.*)\}$/$1/; - print "# def ($tag): {$type} ", join(', ', @args), "\n" - if $T2H_DEBUG & $DEBUG_DEF; - $type .= ':'; # it's nicer like this - my $name = shift(@args); - $name =~ s/^\{(.*)\}$/$1/; - if ($is_extra) { - $_ = &debug("<DT>", __LINE__); - } else { - $_ = &debug("<DL>\n<DT>", __LINE__); - } - if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') { - $_ .= "<U>$type</U> <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr' - || $tag eq 'defcv' || $tag eq 'defop') { - $ftype = $name; - $name = shift(@args); - $name =~ s/^\{(.*)\}$/$1/; - $_ .= "<U>$type</U> $ftype <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } else { - warn "$ERROR Unknown definition type: $tag\n"; - $_ .= "<U>$type</U> <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } - $_ .= &debug("\n<DD>", __LINE__); - $name = &unprotect_html($name); - if ($tag eq 'deffn' || $tag eq 'deftypefn') { - EnterIndexEntry('f', $name, $docu_doc, $section, \@lines); -# unshift(@input_spool, "\@findex $name\n"); - } elsif ($tag eq 'defop') { - EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines); -# unshift(@input_spool, "\@findex $name on $ftype\n"); - } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') { - EnterIndexEntry('v', $name, $docu_doc, $section, \@lines); -# unshift(@input_spool, "\@vindex $name\n"); - } else { - EnterIndexEntry('t', $name, $docu_doc, $section, \@lines); -# unshift(@input_spool, "\@tindex $name\n"); - } - $dont_html = 1; - } - } elsif ($end_tag) { - if ($format_map{$end_tag}) { - $in_pre = 0 if $format_map{$end_tag} eq 'PRE'; - $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ; - &html_pop_if('P'); - &html_pop_if('LI'); - &html_pop_if(); - push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__)); - push(@lines, &html_debug('', __LINE__)); - } - elsif (exists $complex_format_map->{$end_tag}) - { - my $end = eval $complex_format_map->{$end_tag}->[1]; - if ($@) - { - print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@"; - $end = '</pre>' - } - $in_pre = 0 if $end =~ m|</pre>|; - push(@lines, html_debug($end, __LINE__)); - } elsif ($end_tag =~ /^(|f|v|multi)table$/) { - unless (@tables) { - warn "$ERROR \@end $end_tag without \@*table\n"; - next; - } - &html_pop_if('P'); - ($table_type, $in_table) = split($;, shift(@tables)); - unless ($1 eq $table_type) { - warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; - next; - } - if ($table_type eq "multi") { - push(@lines, "</TR></TABLE>\n"); - &html_pop_if('TR'); - } else { - push(@lines, "</DL>\n"); - &html_pop_if('DD'); - } - &html_pop_if(); - if (@tables) { - ($table_type, $in_table) = split($;, $tables[0]); - } else { - $in_table = 0; - } - } elsif (defined($def_map{$end_tag})) { - push(@lines, &debug("</DL>\n", __LINE__)); - } elsif ($end_tag eq 'menu') { - &html_pop_if(); - push(@lines, $_); # must keep it for pass 2 - } - next; - } - ############################################################# - # anchor insertion - while (/\@anchor\s*\{(.*?)\}/) - { - $_ = $`.$'; - my $anchor = $1; - $anchor = &normalise_node($anchor); - push @lines, &html_debug("<A NAME=\"$anchor\"></A>\n"); - $node2href{$anchor} = "$docu_doc#$anchor"; - next INPUT_LINE if $_ =~ /^\s*$/; - } - - ############################################################# - # index entry generation, after value substitutions - if (/^\@(\w+?)index\s+/) - { - EnterIndexEntry($1, $', $docu_doc, $section, \@lines); - next; - } - # - # protect texi and HTML things - &protect_texi; - $_ = &protect_html($_) unless $dont_html; - $dont_html = 0; - # substitution (unsupported things) - s/^\@exdent\s+//g; - s/\@noindent\s+//g; - s/\@refill\s+//g; - # other substitutions - &simple_substitutions; - s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4 - # - # analyze the tag again - # - if ($tag) { - if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) { - if (/^\@$tag\s+(.+)$/) { - $name = $1; - $name = &normalise_node($name); - $level = $sec2level{$tag}; - # check for index - $first_index_chapter = $name - if ($level == 1 && !$first_index_chapter && - $name =~ /index/i); - if ($in_top && /heading/){ - $T2H_HAS_TOP_HEADING = 1; - $_ = &debug("<H$level>$name</H$level>\n", __LINE__); - &html_push_if('body'); - print "# top heading, section $name, level $level\n" - if $T2H_DEBUG & $DEBUG_TOC; - } - else - { - unless (/^\@\w*heading/) - { - unless (/^\@unnumbered/) - { - my $number = &update_sec_num($tag, $level); - $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS; - $sec2number{$name} = $number; - $number2sec{$number} = $name; - } - if (defined($toplevel)) - { - push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND); - } - else - { - # first time we see a "section" - unless ($level == 1) - { - warn "$WARN The first section found is not of level 1: $_"; - } - $toplevel = $level; - } - push(@sections, $name); - next_doc() if ($T2H_SPLIT eq 'section' || - $T2H_SPLIT && $level == $toplevel); - } - $sec_num++; - $docid = "SEC$sec_num"; - $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num"); - # check biblio and glossary - $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); - $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); - # check node - if ($node) - { - warn "$ERROR Duplicate node found: $node\n" - if ($node2sec{$node}); - } - else - { - $name .= ' ' while ($node2sec{$name}); - $node = $name; - } - $name .= ' ' while ($sec2node{$name}); - $section = $name; - $node2sec{$node} = $name; - $sec2node{$name} = $node; - $node2href{$node} = "$docu_doc#$docid"; - $node2next{$node} = $node_next; - $node2prev{$node} = $node_prev; - $node2up{$node} = $node_up; - print "# node $node, section $name, level $level\n" - if $T2H_DEBUG & $DEBUG_TOC; - - $node = ''; - $node_next = ''; - $node_prev = ''; - $node_next = ''; - if ($tocid) - { - # update TOC - while ($level > $curlevel) { - $curlevel++; - push(@toc_lines, "<UL>\n"); - } - while ($level < $curlevel) { - $curlevel--; - push(@toc_lines, "</UL>\n"); - } - $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1); - $_ = &substitute_style($_); - push(@stoc_lines, "$_<BR>\n") if ($level == 1); - if ($T2H_NUMBER_SECTIONS) - { - push(@toc_lines, $_ . "<BR>\n") - } - else - { - push(@toc_lines, "<LI>" . $_ ."</LI>"); - } - } - else - { - push(@lines, &html_debug("<A NAME=\"$docid\"></A>\n", - __LINE__)); - } - # update DOC - push(@lines, &html_debug('', __LINE__)); - &html_reset; - $_ = "<H$level> $name </H$level>\n<!--docid::${docid}::-->\n"; - $_ = &debug($_, __LINE__); - push(@lines, &html_debug('', __LINE__)); - } - # update DOC - foreach $line (split(/\n+/, $_)) { - push(@lines, "$line\n"); - } - next; - } else { - warn "$ERROR Bad section line: $_"; - } - } else { - # track variables - $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o; - delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o; - # store things - $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/; - $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/; - $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/; - $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/; - $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/; - $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/; - - # list item - if (/^\s*\@itemx?\s+/) { - $what = $'; - $what =~ s/\s+$//; - if ($in_bibliography && $use_bibliography) { - if ($what =~ /^$BIBRE$/o) { - $id = 'BIB' . ++$bib_num; - $bib2href{$what} = "$docu_doc#$id"; - print "# found bibliography for '$what' id $id\n" - if $T2H_DEBUG & $DEBUG_BIB; - $what = &t2h_anchor($id, '', $what); - } - } elsif ($in_glossary && $T2H_USE_GLOSSARY) { - $id = 'GLOSS' . ++$gloss_num; - $entry = $what; - $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; - $gloss2href{$entry} = "$docu_doc#$id"; - print "# found glossary for '$entry' id $id\n" - if $T2H_DEBUG & $DEBUG_GLOSS; - $what = &t2h_anchor($id, '', $what); - } - elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v')) - { - EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines); - } - &html_pop_if('P'); - if ($html_element eq 'DL' || $html_element eq 'DD') { - if ($things_map{$in_table} && !$what) { - # special case to allow @table @bullet for instance - push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__)); - } else { - push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__)); - } - push(@lines, "<DD>"); - &html_push('DD') unless $html_element eq 'DD'; - if ($table_type) { # add also an index - unshift(@input_spool, "\@${table_type}index $what\n"); - } - } elsif ($html_element eq 'TABLE') { - push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); - &html_push('TR'); - } elsif ($html_element eq 'TR') { - push(@lines, &debug("</TR>\n", __LINE__)); - push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); - } else { - push(@lines, &debug("<LI>$what\n", __LINE__)); - &html_push('LI') unless $html_element eq 'LI'; - } - push(@lines, &html_debug('', __LINE__)); - if ($deferred_ref) { - push(@lines, &debug("$deferred_ref\n", __LINE__)); - $deferred_ref = ''; - } - next; - } elsif (/^\@tab\s+(.*)$/) { - push(@lines, "<TD>$1</TD>\n"); - next; - } - } - } - # paragraph separator - if ($_ eq "\n" && ! $in_pre) { - next if $#lines >= 0 && $lines[$#lines] eq "\n"; - if ($html_element eq 'P') { - push (@lines, &debug("</P><P>\n", __LINE__)); - } -# else -# { -# push(@lines, "<P></P>\n"); -# $_ = &debug("<P></P>\n", __LINE__); -# } - elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI') - { - &html_push('P'); - push(@lines, &debug("<P>\n", __LINE__)); - } - } - # otherwise - push(@lines, $_) unless $in_titlepage; - push(@lines, &debug("</center>\n", __LINE__)) if ($tag eq 'center'); -} - -# finish TOC -$level = 0; -while ($level < $curlevel) { - $curlevel--; - push(@toc_lines, "</UL>\n"); -} - -print "# end of pass 1\n" if $T2H_VERBOSE; - -SetDocumentLanguage('en') unless ($T2H_LANG); -#+++############################################################################ -# # -# Stuff related to Index generation # -# # -#---############################################################################ - -sub EnterIndexEntry -{ - my $prefix = shift; - my $key = shift; - my $docu_doc = shift; - my $section = shift; - my $lines = shift; - local $_; - - warn "$ERROR Undefined index command: $_", next - unless (exists ($index_properties->{$prefix})); - $key =~ s/\s+$//; - $_ = $key; - &protect_texi; - $key = $_; - $_ = &protect_html($_); - my $html_key = substitute_style($_); - my $id; - $key = remove_style($key); - $key = remove_things($key); - $_ = $key; - &unprotect_texi; - $key = $_; - while (exists $index->{$prefix}->{$key}) {$key .= ' '}; - if ($lines->[$#lines] =~ /^<!--docid::(.+)::-->$/) - { - $id = $1; - } - else - { - $id = 'IDX' . ++$idx_num; - push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre)); - } - $index->{$prefix}->{$key}->{html_key} = $html_key; - $index->{$prefix}->{$key}->{section} = $section; - $index->{$prefix}->{$key}->{href} = "$docu_doc#$id"; - print "# found ${prefix}index for '$key' with id $id\n" - if $T2H_DEBUG & $DEBUG_INDEX; -} - -sub IndexName2Prefix -{ - my $name = shift; - my $prefix; - - for $prefix (keys %$index_properties) - { - return $prefix if ($index_properties->{$prefix}->{name} eq $name); - } - return undef; -} - -sub GetIndexEntries -{ - my $normal = shift; - my $code = shift; - my ($entries, $prefix, $key) = ({}); - - for $prefix (keys %$normal) - { - for $key (keys %{$index->{$prefix}}) - { - $entries->{$key} = {%{$index->{$prefix}->{$key}}}; - } - } - - if (defined($code)) - { - for $prefix (keys %$code) - { - unless (exists $normal->{$keys}) - { - for $key (keys %{$index->{$prefix}}) - { - $entries->{$key} = {%{$index->{$prefix}->{$key}}}; - $entries->{$key}->{html_key} = "<CODE>$entries->{$key}->{html_key}</CODE>"; - } - } - } - } - return $entries; -} - -sub byAlpha -{ - if ($a =~ /^[A-Za-z]/) - { - if ($b =~ /^[A-Za-z]/) - { - return lc($a) cmp lc($b); - } - else - { - return 1; - } - } - elsif ($b =~ /^[A-Za-z]/) - { - return -1; - } - else - { - return lc($a) cmp lc($b); - } -} - -sub GetIndexPages -{ - my $entries = shift; - my (@Letters, $key); - my ($EntriesByLetter, $Pages, $page) = ({}, [], {}); - my @keys = sort byAlpha keys %$entries; - - for $key (@keys) - { - push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key}; - } - @Letters = sort byAlpha keys %$EntriesByLetter; - - $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT); - - unless ($T2H_SPLIT_INDEX) - { - $page->{First} = $Letters[0]; - $page->{Last} = $Letters[$#Letters]; - $page->{Letters} = \@Letters; - $page->{EntriesByLetter} = $EntriesByLetter; - push @$Pages, $page; - return $Pages; - } - - if ($T2H_SPLIT_INDEX =~ /^\d+$/) - { - my $i = 0; - my ($prev_letter, $letter); - $page->{First} = $Letters[0]; - for $letter (@Letters) - { - if ($i > $T2H_SPLIT_INDEX) - { - $page->{Last} = $prev_letter; - push @$Pages, {%$page}; - $page->{Letters} = []; - $page->{EntriesByLetter} = {}; - $page->{First} = $letter; - $i=0; - } - push @{$page->{Letters}}, $letter; - $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}]; - $i += scalar(@{$EntriesByLetter->{$letter}}); - $prev_letter = $letter; - } - $page->{Last} = $Letters[$#Letters]; - push @$Pages, {%$page}; - } - return $Pages; -} - -sub GetIndexSummary -{ - my $first_page = shift; - my $Pages = shift; - my $name = shift; - my ($page, $letter, $summary, $i, $l1, $l2, $l); - - $i = 0; - $summary = '<table><tr><th valign=top>Jump to: </th><td>'; - - for $page ($first_page, @$Pages) - { - for $letter (@{$page->{Letters}}) - { - $l = t2h_anchor('', "$page->{href}#${name}_$letter", "<b>$letter</b>", - 0, 'style="text-decoration:none"') . "\n \n"; - - if ($letter =~ /^[A-Za-z]/) - { - $l2 .= $l; - } - else - { - $l1 .= $l; - } - } - } - $summary .= $l1 . "<BR>\n" if ($l1); - $summary .= $l2 . '</td></tr></table><br>'; - return $summary; -} - -sub PrintIndexPage -{ - my $lines = shift; - my $summary = shift; - my $page = shift; - my $name = shift; - - push @$lines, $summary; - - push @$lines , <<EOT; -<P></P> -<TABLE border=0> -<TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR> -<TR><TD COLSPAN=3> <HR></TD></TR> -EOT - - for $letter (@{$page->{Letters}}) - { - push @$lines, "<TR><TH><A NAME=\"${name}_$letter\"></A>$letter</TH><TD></TD><TD></TD></TR>\n"; - for $entry (@{$page->{EntriesByLetter}->{$letter}}) - { - push @$lines, - "<TR><TD></TD><TD valign=top>" . - t2h_anchor('', $entry->{href}, $entry->{html_key}) . - "</TD><TD valign=top>" . - t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) . - "</TD></TR>\n"; - } - push @$lines, "<TR><TD COLSPAN=3> <HR></TD></TR>\n"; - } - push @$lines, "</TABLE><P></P>"; - push @$lines, $summary; -} - -sub PrintIndex -{ - my $lines = shift; - my $name = shift; - my $section = shift; - $section = 'Top' unless $section; - my $prefix = IndexName2Prefix($name); - - warn ("$ERROR printindex: bad index name: $name"), return - unless $prefix; - - if ($index_properties->{$prefix}->{code}) - { - $index_properties->{$prefix}->{from_code}->{$prefix} = 1; - } - else - { - $index_properties->{$prefix}->{from}->{$prefix}= 1; - } - - my $Entries = GetIndexEntries($index_properties->{$prefix}->{from}, - $index_properties->{$prefix}->{from_code}); - return unless %$Entries; - - if ($T2H_IDX_SUMMARY) - { - my $key; - open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx") - || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n"; - print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE; - - for $key (sort keys %$Entries) - { - print FHIDX "$key\t$Entries->{$key}->{href}\n"; - } - } - - my $Pages = GetIndexPages($Entries); - my $page; - my $first_page = shift @$Pages; - my $sec_name = $section; - # remove section number - $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./; - - ($first_page->{href} = sec_href($section)) =~ s/\#.*$//; - # Update tree structure of document - if (@$Pages) - { - my $sec; - my @after; - - while (@sections && $sections[$#sections] ne $section) - { - unshift @after, pop @sections; - } - - for $page (@$Pages) - { - my $node = ($page->{First} ne $page->{Last} ? - "$sec_name: $page->{First} -- $page->{Last}" : - "$sec_name: $page->{First}"); - push @sections, $node; - $node2sec{$node} = $node; - $sec2node{$node} = $node; - $node2up{$node} = $section; - $page->{href} = next_doc(); - $page->{name} = $node; - $node2href{$node} = $page->{href}; - if ($prev_node) - { - $node2next{$prev_node} = $node; - $node2prev{$node} = $prev_node; - } - $prev_node = $node; - } - push @sections, @after; - } - - my $summary = GetIndexSummary($first_page, $Pages, $name); - PrintIndexPage($lines, $summary, $first_page, $name); - for $page (@$Pages) - { - push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); - push @$lines, "<H2 ALIGN=\"Left\">$page->{name}</H2>\n"; - PrintIndexPage($lines, $summary, $page, $name); - } -} - - -#+++############################################################################ -# # -# Pass 2/3: handle style, menu, index, cross-reference # -# # -#---############################################################################ - -@lines2 = (); # whole document (2nd pass) -@lines3 = (); # whole document (3rd pass) -$in_menu = 0; # am I inside a menu - -while (@lines) { - $_ = shift(@lines); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@lines2, $_); - next; - } - # - # menu - # - if (/^\@menu\b/) - { - $in_menu = 1; - $in_menu_listing = 1; - push(@lines2, &debug("<BLOCKQUOTE><TABLE BORDER=0 CELLSPACING=0> \n", __LINE__)); - next; - } - if (/^\@end\s+menu\b/) - { - if ($in_menu_listing) - { - push(@lines2, &debug("</TABLE></BLOCKQUOTE>\n", __LINE__)); - } - else - { - push(@lines2, &debug("</BLOCKQUOTE>\n", __LINE__)); - } - $in_menu = 0; - $in_menu_listing = 0; - next; - } - if ($in_menu) - { - my ($node, $name, $descr); - if (/^\*\s+($NODERE)::/o) - { - $node = $1; - $descr = $'; - } - elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) - { - $name = $1; - $node = $2; - $descr = $'; - } - elsif (/^\*/) - { - warn "$ERROR Bad menu line: $_"; - } - else - { - if ($in_menu_listing) - { - $in_menu_listing = 0; - push(@lines2, &debug("</TABLE>\n", __LINE__)); - } - # should be like verbatim -- preseve spaces, etc - s/ /\ /g; - $_ .= "<br>\n"; - push(@lines2, $_); - } - if ($node) - { - if (! $in_menu_listing) - { - $in_menu_listing = 1; - push(@lines2, &debug("<TABLE BORDER=0 CELLSPACING=0>\n", __LINE__)); - } - # look for continuation - while ($lines[0] =~ /^\s+\w+/) - { - $descr .= shift(@lines); - } - &menu_entry($node, $name, $descr); - } - next; - } - # - # printindex - # - PrintIndex(\@lines2, $2, $1), next - if (/^<!--::(.*)::-->\@printindex\s+(\w+)/); - # - # simple style substitutions - # - $_ = &substitute_style($_); - # - # xref - # - while (/\@(x|px|info|)ref{([^{}]+)(}?)/) { - # note: Texinfo may accept other characters - ($type, $nodes, $full) = ($1, $2, $3); - ($before, $after) = ($`, $'); - if (! $full && $after) { - warn "$ERROR Bad xref (no ending } on line): $_"; - $_ = "$before$;0${type}ref\{$nodes$after"; - next; # while xref - } - if ($type eq 'x') { - $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} "; - } elsif ($type eq 'px') { - $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} "; - } elsif ($type eq 'info') { - $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info"; - } else { - $type = ''; - } - unless ($full) { - $next = shift(@lines); - $next = &substitute_style($next); - chop($nodes); # remove final newline - if ($next =~ /\}/) { # split on 2 lines - $nodes .= " $`"; - $after = $'; - } else { - $nodes .= " $next"; - $next = shift(@lines); - $next = &substitute_style($next); - chop($nodes); - if ($next =~ /\}/) { # split on 3 lines - $nodes .= " $`"; - $after = $'; - } else { - warn "$ERROR Bad xref (no ending }): $_"; - $_ = "$before$;0xref\{$nodes$after"; - unshift(@lines, $next); - next; # while xref - } - } - } - $nodes =~ s/\s+/ /g; # remove useless spaces - @args = split(/\s*,\s*/, $nodes); - $node = $args[0]; # the node is always the first arg - $node = &normalise_node($node); - $sec = $args[2] || $args[1] || $node2sec{$node}; - $href = $node2href{$node}; - if (@args == 5) { # reference to another manual - $sec = $args[2] || $node; - $man = $args[4] || $args[3]; - $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after"; - } elsif ($type =~ /Info/) { # inforef - warn "$ERROR Wrong number of arguments: $_" unless @args == 3; - ($nn, $_, $in) = @args; - $_ = "${before}${type} file `$in', node `$nn'$after"; - } elsif ($sec && $href && ! $T2H_SHORT_REF) { - $_ = "${before}${type}"; - $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type}; - $_ .= &t2h_anchor('', $href, $sec) . $after; - } - elsif ($href) - { - $_ = "${before}${type} " . - &t2h_anchor('', $href, $args[2] || $args[1] || $node) . - $after; - } - else { - warn "$ERROR Undefined node ($node): $_"; - $_ = "$before$;0xref{$nodes}$after"; - } - } - - # replace images - s[\@image\s*{(.+?)}] - { - my @args = split (/\s*,\s*/, $1); - my $base = $args[0]; - my $image = - LocateIncludeFile("$base.png") || - LocateIncludeFile("$base.jpg") || - LocateIncludeFile("$base.gif"); - warn "$ERROR no image file for $base: $_" unless ($image && -e $image); - "<IMG SRC=\"$image\" ALT=\"$base\">"; - ($T2H_CENTER_IMAGE ? - "<CENTER><IMG SRC=\"$image\" ALT=\"$base\"></CENTER>" : - "<IMG SRC=\"$image\" ALT=\"$base\">"); - }eg; - - # - # try to guess bibliography references or glossary terms - # - unless (/^<H\d><A NAME=\"SEC\d/) { - if ($use_bibliography) { - $done = ''; - while (/$BIBRE/o) { - ($pre, $what, $post) = ($`, $&, $'); - $href = $bib2href{$what}; - if (defined($href) && $post !~ /^[^<]*<\/A>/) { - $done .= $pre . &t2h_anchor('', $href, $what); - } else { - $done .= "$pre$what"; - } - $_ = $post; - } - $_ = $done . $_; - } - if ($T2H_USE_GLOSSARY) { - $done = ''; - while (/\b\w+\b/) { - ($pre, $what, $post) = ($`, $&, $'); - $entry = $what; - $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; - $href = $gloss2href{$entry}; - if (defined($href) && $post !~ /^[^<]*<\/A>/) { - $done .= $pre . &t2h_anchor('', $href, $what); - } else { - $done .= "$pre$what"; - } - $_ = $post; - } - $_ = $done . $_; - } - } - # otherwise - push(@lines2, $_); -} -print "# end of pass 2\n" if $T2H_VERBOSE; - -# -# split style substitutions -# -while (@lines2) { - $_ = shift(@lines2); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@lines3, $_); - next; - } - # - # split style substitutions - # - $old = ''; - while ($old ne $_) { - $old = $_; - if (/\@(\w+)\{/) { - ($before, $style, $after) = ($`, $1, $'); - if (defined($style_map{$style})) { - $_ = $after; - $text = ''; - $after = ''; - $failed = 1; - while (@lines2) { - if (/\}/) { - $text .= $`; - $after = $'; - $failed = 0; - last; - } else { - $text .= $_; - $_ = shift(@lines2); - } - } - if ($failed) { - die "* Bad syntax (\@$style) after: $before\n"; - } else { - $text = &apply_style($style, $text); - $_ = "$before$text$after"; - } - } - } - } - # otherwise - push(@lines3, $_); -} -print "# end of pass 3\n" if $T2H_VERBOSE; - -#+++############################################################################ -# # -# Pass 4: foot notes, final cleanup # -# # -#---############################################################################ - -@foot_lines = (); # footnotes -@doc_lines = (); # final document -$end_of_para = 0; # true if last line is <P> - -while (@lines3) { - $_ = shift(@lines3); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@doc_lines, $_); - $end_of_para = 0; - next; - } - # - # footnotes - # - while (/\@footnote([^\{\s]+)\{/) { - ($before, $d, $after) = ($`, $1, $'); - $_ = $after; - $text = ''; - $after = ''; - $failed = 1; - while (@lines3) { - if (/\}/) { - $text .= $`; - $after = $'; - $failed = 0; - last; - } else { - $text .= $_; - $_ = shift(@lines3); - } - } - if ($failed) { - die "* Bad syntax (\@footnote) after: $before\n"; - } else { - $foot_num++; - $docid = "DOCF$foot_num"; - $footid = "FOOT$foot_num"; - $foot = "($foot_num)"; - push(@foot_lines, "<H3>" . &t2h_anchor($footid, "$d#$docid", $foot) . "</H3>\n"); - $text = "<P>$text" unless $text =~ /^\s*<P>/; - push(@foot_lines, "$text\n"); - $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after; - } - } - # - # remove unnecessary <P> - # - if (/^\s*<P>\s*$/) { - next if $end_of_para++; - } else { - $end_of_para = 0; - } - # otherwise - push(@doc_lines, $_); -} - -print "# end of pass 4\n" if $T2H_VERBOSE; - -#+++############################################################################ -# # -# Pass 5: print things # -# # -#---############################################################################ - -$T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H); -$T2H_L2H = &l2h_ToHtml if ($T2H_L2H); -$T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H); - -# fix node2up, node2prev, node2next, if desired -if ($has_top_command) -{ - for $section (keys %sec2number) - { - $node = $sec2node{$section}; - $node2up{$node} = Sec2UpNode($section) unless $node2up{$node}; - $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node}; - $node2next{$node} = Sec2NextNode($section) unless $node2next{$node}; - } -} - -# prepare %T2H_THISDOC -$T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document"; -$T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle}; -$T2H_THISDOC{author} = $value{'_author'}; -$T2H_THISDOC{subtitle} = $value{'_subtitle'}; -$T2H_THISDOC{shorttitle} = $value{'_shorttitle'}; -for $key (keys %T2H_THISDOC) -{ - $_ = &substitute_style($T2H_THISDOC{$key}); - &unprotect_texi; - s/\s*$//; - $T2H_THISDOC{$key} = $_; -} - -# if no sections, then simply print document as is -unless (@sections) -{ - print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE; - open(FILE, "> $docu_top_file") - || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; - - &$T2H_print_page_head(\*FILE); - $T2H_THIS_SECTION = \@doc_lines; - t2h_print_lines(\*FILE); - &$T2H_print_foot_navigation(\*FILE); - &$T2H_print_page_foot(\*FILE); - close(FILE); - goto Finish; -} - -# initialize $T2H_HREF, $T2H_NAME -%T2H_HREF = - ( - 'First' , sec_href($sections[0]), - 'Last', sec_href($sections[$#sections]), - 'About', $docu_about. '#SEC_About', - ); - -# prepare TOC, OVERVIEW, TOP -$T2H_TOC = \@toc_lines; -$T2H_OVERVIEW = \@stoc_lines; -if ($has_top) -{ - while (1) - { - $_ = shift @doc_lines; - last if /$TOPEND/; - push @$T2H_TOP, $_; - } - $T2H_HREF{'Top'} = $docu_top . '#SEC_Top'; -} -else -{ - $T2H_HREF{'Top'} = $T2H_HREF{First}; -} - -$node2href{Top} = $T2H_HREF{Top}; -$T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines; -$T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines; - -# settle on index -if ($T2H_INDEX_CHAPTER) -{ - $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)}; - warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n" - unless $T2H_HREF{Index}; -} -if (! $T2H_HREF{Index} && $first_index_chapter) -{ - $T2H_INDEX_CHAPTER = $first_index_chapter; - $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER}; -} - -print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n" - if ($T2H_VERBOSE && $T2H_HREF{Index}); - -%T2H_NAME = - ( - 'First', clean_name($sec2node{$sections[0]}), - 'Last', clean_name($sec2node{$sections[$#sections]}), - 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'}, - 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'}, - 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'}, - 'Index' , clean_name($T2H_INDEX_CHAPTER), - 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}), - ); - -############################################################################# -# print frame and frame toc file -# -if ( $T2H_FRAMES ) -{ - open(FILE, "> $docu_frame_file") - || die "$ERROR: Can't open $docu_frame_file for writing: $!\n"; - print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; - &$T2H_print_frame(\*FILE); - close(FILE); - - open(FILE, "> $docu_toc_frame_file") - || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n"; - print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; - &$T2H_print_toc_frame(\*FILE); - close(FILE); -} - - -############################################################################# -# print Top -# -open(FILE, "> $docu_top_file") - || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; -&$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT); - -if ($has_top) -{ - print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE; - $T2H_THIS_SECTION = $T2H_TOP; - $T2H_HREF{This} = $T2H_HREF{Top}; - $T2H_NAME{This} = $T2H_NAME{Top}; - &$T2H_print_Top(\*FILE); -} - -close(FILE) if $T2H_SPLIT; - -############################################################################# -# Print sections -# -$T2H_NODE{Forward} = $sec2node{$sections[0]}; -$T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]}); -$T2H_HREF{Forward} = sec_href($sections[0]); -$T2H_NODE{This} = 'Top'; -$T2H_NAME{This} = $T2H_NAME{Top}; -$T2H_HREF{This} = $T2H_HREF{Top}; -if ($T2H_SPLIT) -{ - print "# writing " . scalar(@sections) . - " sections in $docu_rdir$docu_name"."_[1..$doc_num]" - if $T2H_VERBOSE; - $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); - undef $FH; - $doc_num = 0; -} -else -{ - print "# writing " . scalar(@sections) . " sections in $docu_top_file ..." - if $T2H_VERBOSE; - $FH = \*FILE; - $previous = ''; -} - -$counter = 0; -# loop through sections -while ($section = shift(@sections)) -{ - if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND)) - { - if ($FH) - { - #close previous page - &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; - &$T2H_print_page_foot($FH); - close($FH); - undef $FH; - } - } - $T2H_NAME{Back} = $T2H_NAME{This}; - $T2H_HREF{Back} = $T2H_HREF{This}; - $T2H_NODE{Back} = $T2H_NODE{This}; - $T2H_NAME{This} = $T2H_NAME{Forward}; - $T2H_HREF{This} = $T2H_HREF{Forward}; - $T2H_NODE{This} = $T2H_NODE{Forward}; - if ($sections[0]) - { - $T2H_NODE{Forward} = $sec2node{$sections[0]}; - $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward}); - $T2H_HREF{Forward} = sec_href($sections[0]); - } - else - { - undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward}; - } - - $node = $node2up{$T2H_NODE{This}}; - $T2H_HREF{Up} = $node2href{$node}; - if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up}) - { - $T2H_NAME{Up} = $T2H_NAME{Top}; - $T2H_HREF{Up} = $T2H_HREF{Top}; - $T2H_NODE{Up} = 'Up'; - } - else - { - $T2H_NAME{Up} = &clean_name($node); - $T2H_NODE{Up} = $node; - } - - $node = $T2H_NODE{This}; - $node = $node2prev{$node}; - $T2H_NAME{Prev} = &clean_name($node); - $T2H_HREF{Prev} = $node2href{$node}; - $T2H_NODE{Prev} = $node; - - $node = $T2H_NODE{This}; - if ($node2up{$node} && $node2up{$node} ne 'Top'&& - ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node})) - { - $node = $node2up{$node}; - while ($node && $node ne $node2up{$node} && ! $node2prev{$node}) - { - $node = $node2up{$node}; - } - $node = $node2prev{$node} - unless $node2up{$node} eq 'Top' || ! $node2up{$node}; - } - else - { - $node = $node2prev{$node}; - } - $T2H_NAME{FastBack} = &clean_name($node); - $T2H_HREF{FastBack} = $node2href{$node}; - $T2H_NODE{FastBack} = $node; - - $node = $T2H_NODE{This}; - $node = $node2next{$node}; - $T2H_NAME{Next} = &clean_name($node); - $T2H_HREF{Next} = $node2href{$node}; - $T2H_NODE{Next} = $node; - - $node = $T2H_NODE{This}; - if ($node2up{$node} && $node2up{$node} ne 'Top'&& - ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node})) - { - $node = $node2up{$node}; - while ($node && $node ne $node2up{$node} && ! $node2next{$node}) - { - $node = $node2up{$node}; - } - } - $node = $node2next{$node}; - $T2H_NAME{FastForward} = &clean_name($node); - $T2H_HREF{FastForward} = $node2href{$node}; - $T2H_NODE{FastForward} = $node; - - if (! defined($FH)) - { - my $file = $T2H_HREF{This}; - $file =~ s/\#.*$//; - open(FILE, "> $docu_rdir$file") || - die "$ERROR: Can't open $docu_rdir$file for writing: $!\n"; - $FH = \*FILE; - &$T2H_print_page_head($FH); - t2h_print_label($FH); - &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter'; - } - else - { - t2h_print_label($FH); - } - - $T2H_THIS_SECTION = []; - while (@doc_lines) { - $_ = shift(@doc_lines); - last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND); - push(@$T2H_THIS_SECTION, $_); - } - $previous = $_; - &$T2H_print_section($FH); - - if ($T2H_VERBOSE) - { - $counter++; - print "." if $counter =~ /00$/; - } -} -if ($T2H_SPLIT) -{ - &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; - &$T2H_print_page_foot($FH); - close($FH); -} -print "\n" if $T2H_VERBOSE; - -############################################################################# -# Print ToC, Overview, Footnotes -# -undef $T2H_HREF{Prev}; -undef $T2H_HREF{Next}; -undef $T2H_HREF{Back}; -undef $T2H_HREF{Forward}; -undef $T2H_HREF{Up}; - -if (@foot_lines) -{ - print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE; - open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n" - if $T2H_SPLIT; - $T2H_HREF{This} = $docu_foot; - $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'}; - $T2H_THIS_SECTION = \@foot_lines; - &$T2H_print_Footnotes(\*FILE); - close(FILE) if $T2H_SPLIT; -} - -if (@toc_lines) -{ - print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE; - open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n" - if $T2H_SPLIT; - $T2H_HREF{This} = $T2H_HREF{Contents}; - $T2H_NAME{This} = $T2H_NAME{Contents}; - $T2H_THIS_SECTION = \@toc_lines; - &$T2H_print_Toc(\*FILE); - close(FILE) if $T2H_SPLIT; -} - -if (@stoc_lines) -{ - print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE; - open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n" - if $T2H_SPLIT; - - $T2H_HREF{This} = $T2H_HREF{Overview}; - $T2H_NAME{This} = $T2H_NAME{Overview}; - $T2H_THIS_SECTION = \@stoc_lines; - unshift @$T2H_THIS_SECTION, "<BLOCKQUOTE>\n"; - push @$T2H_THIS_SECTION, "\n</BLOCKQUOTE>\n"; - &$T2H_print_Overview(\*FILE); - close(FILE) if $T2H_SPLIT; -} - -if ($about_body = &$T2H_about_body()) -{ - print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE; - open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n" - if $T2H_SPLIT; - - $T2H_HREF{This} = $T2H_HREF{About}; - $T2H_NAME{This} = $T2H_NAME{About}; - $T2H_THIS_SECTION = [$about_body]; - &$T2H_print_About(\*FILE); - close(FILE) if $T2H_SPLIT; -} - -unless ($T2H_SPLIT) -{ - &$T2H_print_page_foot(\*FILE); - close (FILE); -} - -Finish: -&l2h_FinishFromHtml if ($T2H_L2H); -&l2h_Finish if($T2H_L2H); -print "# that's all folks\n" if $T2H_VERBOSE; - -exit(0); - -#+++############################################################################ -# # -# Low level functions # -# # -#---############################################################################ - -sub LocateIncludeFile -{ - my $file = shift; - my $dir; - - return $file if (-e $file && -r $file); - foreach $dir (@T2H_INCLUDE_DIRS) - { - return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); - } - return undef; -} - -sub clean_name -{ - local ($_); - $_ = &remove_style($_[0]); - &unprotect_texi; - return $_; -} - -sub update_sec_num { - local($name, $level) = @_; - my $ret; - - $level--; # here we start at 0 - if ($name =~ /^appendix/ || defined(@appendix_sec_num)) { - # appendix style - if (defined(@appendix_sec_num)) { - &incr_sec_num($level, @appendix_sec_num); - } else { - @appendix_sec_num = ('A', 0, 0, 0); - } - $ret = join('.', @appendix_sec_num[0..$level]); - } else { - # normal style - if (defined(@normal_sec_num)) - { - &incr_sec_num($level, @normal_sec_num); - } - else - { - @normal_sec_num = (1, 0, 0, 0); - } - $ret = join('.', @normal_sec_num[0..$level]); - } - - $ret .= "." if $level == 0; - return $ret; -} - -sub incr_sec_num { - local($level, $l); - $level = shift(@_); - $_[$level]++; - foreach $l ($level+1 .. 3) { - $_[$l] = 0; - } -} - -sub Sec2UpNode -{ - my $sec = shift; - my $num = $sec2number{$sec}; - - return '' unless $num; - return 'Top' unless $num =~ /\.\d+/; - $num =~ s/\.[^\.]*$//; - $num = $num . '.' unless $num =~ /\./; - return $sec2node{$number2sec{$num}}; -} - -sub Sec2PrevNode -{ - my $sec = shift; - my $num = $sec2number{$sec}; - my ($i, $post); - - if ($num =~ /(\w+)(\.$|$)/) - { - $num = $`; - $i = $1; - $post = $2; - if ($i eq 'A') - { - $i = $normal_sec_num[0]; - } - elsif ($i ne '1') - { - # unfortunately, -- operator is not magical - $i = chr(ord($i) + 1); - } - else - { - return ''; - } - return $sec2node{$number2sec{$num . $i . $post}} - } - return ''; -} - -sub Sec2NextNode -{ - my $sec = shift; - my $num = $sec2number{$sec}; - my $i; - - if ($num =~ /(\w+)(\.$|$)/) - { - $num = $`; - $i = $1; - $post = $2; - if ($post eq '.' && $i eq $normal_sec_num[0]) - { - $i = 'A'; - } - else - { - $i++; - } - return $sec2node{$number2sec{$num . $i . $post}} - } - return ''; -} - -sub check { - local($_, %seen, %context, $before, $match, $after); - - while (<>) { - if (/\@(\*|\.|\:|\@|\{|\})/) { - $seen{$&}++; - $context{$&} .= "> $_" if $T2H_VERBOSE; - $_ = "$`XX$'"; - redo; - } - if (/\@(\w+)/) { - ($before, $match, $after) = ($`, $&, $'); - if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address - $seen{'e-mail address'}++; - $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE; - } else { - $seen{$match}++; - $context{$match} .= "> $_" if $T2H_VERBOSE; - } - $match =~ s/^\@/X/; - $_ = "$before$match$after"; - redo; - } - } - - foreach (sort(keys(%seen))) { - if ($T2H_VERBOSE) { - print "$_\n"; - print $context{$_}; - } else { - print "$_ ($seen{$_})\n"; - } - } -} - -sub open { - local($name) = @_; - - ++$fh_name; - if (open($fh_name, $name)) { - unshift(@fhs, $fh_name); - } else { - warn "$ERROR Can't read file $name: $!\n"; - } -} - -sub init_input { - @fhs = (); # hold the file handles to read - @input_spool = (); # spooled lines to read - $fh_name = 'FH000'; - &open($docu); -} - -sub next_line { - local($fh, $line); - - if (@input_spool) { - $line = shift(@input_spool); - return($line); - } - while (@fhs) { - $fh = $fhs[0]; - $line = <$fh>; - return($line) if $line; - close($fh); - shift(@fhs); - } - return(undef); -} - -# used in pass 1, use &next_line -sub skip_until { - local($tag) = @_; - local($_); - - while ($_ = &next_line) { - return if /^\@end\s+$tag\s*$/; - } - die "* Failed to find '$tag' after: " . $lines[$#lines]; -} - -# used in pass 1 for l2h use &next_line -sub string_until { - local($tag) = @_; - local($_, $string); - - while ($_ = &next_line) { - return $string if /^\@end\s+$tag\s*$/; -# $_ =~ s/hbox/mbox/g; - $string = $string.$_; - } - die "* Failed to find '$tag' after: " . $lines[$#lines]; -} - -# -# HTML stacking to have a better HTML output -# - -sub html_reset { - @html_stack = ('html'); - $html_element = 'body'; -} - -sub html_push { - local($what) = @_; - push(@html_stack, $html_element); - $html_element = $what; -} - -sub html_push_if { - local($what) = @_; - push(@html_stack, $html_element) - if ($html_element && $html_element ne 'P'); - $html_element = $what; -} - -sub html_pop { - $html_element = pop(@html_stack); -} - -sub html_pop_if { - local($elt); - - if (@_) { - foreach $elt (@_) { - if ($elt eq $html_element) { - $html_element = pop(@html_stack) if @html_stack; - last; - } - } - } else { - $html_element = pop(@html_stack) if @html_stack; - } -} - -sub html_debug { - local($what, $line) = @_; - if ($T2H_DEBUG & $DEBUG_HTML) - { - $what = "\n" unless $what; - return("<!-- $line @html_stack, $html_element -->$what") - } - return($what); -} - -# to debug the output... -sub debug { - local($what, $line) = @_; - return("<!-- $line -->$what") - if $T2H_DEBUG & $DEBUG_HTML; - return($what); -} - -sub SimpleTexi2Html -{ - local $_ = $_[0]; - &protect_texi; - &protect_html; - $_ = substitute_style($_); - $_[0] = $_; -} - -sub normalise_node { - local $_ = $_[0]; - s/\s+/ /g; - s/ $//; - s/^ //; - &protect_texi; - &protect_html; - $_ = substitute_style($_); - $_[0] = $_; -} - -sub menu_entry -{ - my ($node, $name, $descr) = @_; - my ($href, $entry); - - &normalise_node($node); - $href = $node2href{$node}; - if ($href) - { - $descr =~ s/^\s+//; - $descr =~ s/\s*$//; - $descr = SimpleTexi2Html($descr); - if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node}) - { - $entry = $node2sec{$node}; - $name = ''; - } - else - { - &normalise_node($name); - $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY) - ? "$name : $node" : $node); - } - - if ($T2H_AVOID_MENU_REDUNDANCY && $descr) - { - my $clean_entry = $entry; - $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /); - $clean_entry =~ s/[^\w]//g; - my $clean_descr = $descr; - $clean_descr =~ s/[^\w]//g; - $descr = '' if ($clean_entry eq $clean_descr) - } - push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . - &t2h_anchor('', $href, $entry) . - '</TD><TD> </TD><TD ALIGN="left" VALIGN="TOP">' . - $descr . - "</TD></TR>\n", __LINE__)); - } - elsif ($node =~ /^\(.*\)\w+/) - { - push(@lines2,&debug('<TR><TD ALIGN="left" VALIGN="TOP">' . - $entry . - '</TD><TD ALIGN="left" VALIGN="TOP">' . $descr . - "</TD></TR>\n", __LINE__)) - } - else - { - warn "$ERROR Undefined node of menu_entry ($node): $_"; - } -} - -sub do_ctrl { "^$_[0]" } - -sub do_email { - local($addr, $text) = split(/,\s*/, $_[0]); - - $text = $addr unless $text; - &t2h_anchor('', "mailto:$addr", $text); -} - -sub do_sc -{ - # l2h does this much better - return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H); - return "\U$_[0]\E"; -} - -sub do_math -{ - return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H); - return "<EM>".$text."</EM>"; -} - -sub do_uref { - local($url, $text, $only_text) = split(/,\s*/, $_[0]); - - $text = $only_text if $only_text; - $text = $url unless $text; - &t2h_anchor('', $url, $text); -} - -sub do_url { &t2h_anchor('', $_[0], $_[0]) } - -sub do_acronym -{ - return '<FONT SIZE="-1">' . $_[0] . '</FONT>'; -} - -sub do_accent -{ - return "&$_[0]acute;" if $_[1] eq 'H'; - return "$_[0]." if $_[1] eq 'dotaccent'; - return "$_[0]*" if $_[1] eq 'ringaccent'; - return "$_[0]".'[' if $_[1] eq 'tieaccent'; - return "$_[0]".'(' if $_[1] eq 'u'; - return "$_[0]_" if $_[1] eq 'ubaraccent'; - return ".$_[0]" if $_[1] eq 'udotaccent'; - return "$_[0]<" if $_[1] eq 'v'; - return "&$_[0]cedil;" if $_[1] eq ','; - return "$_[0]" if $_[1] eq 'dotless'; - return undef; -} - -sub apply_style { - local($texi_style, $text) = @_; - local($style); - - $style = $style_map{$texi_style}; - if (defined($style)) { # known style - if ($style =~ /^\"/) { # add quotes - $style = $'; - $text = "\`$text\'"; - } - if ($style =~ /^\&/) { # custom - $style = $'; - $text = &$style($text, $texi_style); - } elsif ($style) { # good style - $text = "<$style>$text</$style>"; - } else { # no style - } - } else { # unknown style - $text = undef; - } - return($text); -} - -# remove Texinfo styles -sub remove_style { - local($_) = @_; - 1 while(s/\@\w+{([^\{\}]+)}/$1/g); - return($_); -} - -sub remove_things -{ - local ($_) = @_; - s|\@(\w+)\{\}|$1|g; - return $_; -} - -sub substitute_style { - local($_) = @_; - local($changed, $done, $style, $text); - - &simple_substitutions; - $changed = 1; - while ($changed) { - $changed = 0; - $done = ''; - while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) { - $text = &apply_style($1, $2); - if ($text) { - $_ = "$`$text$'"; - $changed = 1; - } else { - $done .= "$`\@$1"; - $_ = "{$2}$'"; - } - } - $_ = $done . $_; - } - return($_); -} - -sub t2h_anchor { - local($name, $href, $text, $newline, $extra_attribs) = @_; - local($result); - - $result = "<A"; - $result .= " NAME=\"$name\"" if $name; - if ($href) - { - $href =~ s|^$T2H_HREF_DIR_INSTEAD_FILE|./| - if ($T2H_HREF_DIR_INSTEAD_FILE); - $result .= ($href =~ /\"/ ? " HREF='$href'" : " HREF=\"$href\""); - } - $result .= " $extra_attribs" if $extra_attribs; - $result .= ">$text</A>"; - $result .= "\n" if $newline; - return($result); -} - -sub pretty_date { - local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); - - @MoY = ('January', 'February', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December'); - ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); - $year += ($year < 70) ? 2000 : 1900; - # obachman: Let's do it as the Americans do - return("$MoY[$mon], $mday $year"); -} - -sub doc_href { - local($num) = @_; - - return("${docu_name}_$num.$docu_ext"); -} - -sub sec_href -{ - return $node2href{$sec2node{$_[0]}}; -} - -sub next_doc { - $docu_doc = &doc_href(++$doc_num); -} - -sub t2h_print_lines { - my ($fh, $lines) = @_; - local($_); - $lines = $T2H_THIS_SECTION unless $lines; - my $cnt = 0; - for (@$lines) - { - $_ = l2h_FromHtml($_) if ($T2H_L2H); - if (/^$PROTECTTAG/o) { - $_ = $tag2pro{$_}; - } else { - &unprotect_texi; - } - print $fh $_; - $cnt += split(/\W*\s+\W*/); - } - return $cnt; -} - -sub protect_texi { - # protect @ { } ` ' - s/\@\@/$;0/go; - s/\@\{/$;1/go; - s/\@\}/$;2/go; - s/\@\`/$;3/go; - s/\@\'/$;4/go; -} - -sub protect_html { - local($what) = @_; - # protect & < > - $what =~ s/\&/\&\#38;/g; - $what =~ s/\</\&\#60;/g; - $what =~ s/\>/\&\#62;/g; - # restore anything in quotes - # this fixes my problem where I had: - # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted < in my ALT text ?? - # maybe byte stuffing or some other technique should be used. - $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g; - $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g; - $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g; - # but recognize some HTML things - $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A> - $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+> - $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+> - return($what); -} - -sub unprotect_texi { - s/$;0/\@/go; - s/$;1/\{/go; - s/$;2/\}/go; - s/$;3/\`/go; - s/$;4/\'/go; -} - -sub Unprotect_texi -{ - local $_ = shift; - &unprotect_texi; - return($_); -} - -sub unprotect_html { - local($what) = @_; - $what =~ s/\&\#38;/\&/g; - $what =~ s/\&\#60;/\</g; - $what =~ s/\&\#62;/\>/g; - return($what); -} - -sub t2h_print_label -{ - my $fh = shift; - my $href = shift || $T2H_HREF{This}; - $href =~ s/.*#(.*)$/$1/; - print $fh qq{<A NAME="$href"></A>\n}; -} - -############################################################################## - - # These next few lines are legal in both Perl and nroff. - -.00 ; # finish .ig - -'di \" finish diversion--previous line must be blank -.nr nl 0-1 \" fake up transition to first page again -.nr % 0 \" start at page 1 -'; __END__ ############# From here on it's a standard manual page ############ -.so /usr/local/man/man1/texi2html.1 diff --git a/readline-4.3.orig/doc/texinfo.tex b/readline-4.3.orig/doc/texinfo.tex deleted file mode 100644 index c49af9f..0000000 --- a/readline-4.3.orig/doc/texinfo.tex +++ /dev/null @@ -1,5992 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{1999-09-25.10} -% -% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99 -% Free Software Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% In other words, you are welcome to use, share and improve this program. -% You are forbidden to forbid anyone else to use, share and improve -% what you give them. Help stamp out software-hoarding! -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% ftp://ftp.gnu.org/gnu/texinfo.tex -% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) -% ftp://texinfo.org/tex/texinfo.tex -% ftp://us.ctan.org/macros/texinfo/texinfo.tex -% (and all CTAN mirrors, finger ctan@us.ctan.org for a list). -% /home/gd/gnu/doc/texinfo.tex on the GNU machines. -% The texinfo.tex in any given Texinfo distribution could well be out -% of date, so if that's what you're using, please check. -% Texinfo has a small home page at http://texinfo.org/. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever, to process the dvi file; this makes foo.ps. -% The extra runs of TeX get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages. You can get -% the existing language-specific files from ftp://ftp.gnu.org/gnu/texinfo/. - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -% Save some parts of plain tex whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexi=\i -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexstar=\* -\let\ptext=\t - -% We never want plain's outer \+ definition in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -\message{Basics,} -\chardef\other=12 - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi -\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi - -% Ignore a token. -% -\def\gobble#1{} - -\hyphenation{ap-pen-dix} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{eshell} -\hyphenation{white-space} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset -\newdimen \normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\ifx\eTeXversion\undefined -\def\loggingall{\tracingcommands2 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen -}% -\else -\def\loggingall{\tracingcommands3 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \tracingscantokens1 \tracingassigns1 \tracingifs1 - \tracinggroups1 \tracingnesting2 - \showboxbreadth\maxdimen\showboxdepth\maxdimen -}% -\fi - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \escapechar = `\\ % use backslash in output files. - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \shipout\vbox{% - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \turnoffactive - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg#1{% - \let\next = #1% - \begingroup - \obeylines - \futurelet\temp\parseargx -} - -% If the next token is an obeyed space (from an @example environment or -% the like), remove it and recurse. Otherwise, we're done. -\def\parseargx{% - % \obeyedspace is defined far below, after the definition of \sepspaces. - \ifx\obeyedspace\temp - \expandafter\parseargdiscardspace - \else - \expandafter\parseargline - \fi -} - -% Remove a single space (as the delimiter token to the macro call). -{\obeyspaces % - \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - % - % First remove any @c comment, then any @comment. - % Result of each macro is put in \toks0. - \argremovec #1\c\relax % - \expandafter\argremovecomment \the\toks0 \comment\relax % - % - % Call the caller's macro, saved as \next in \parsearg. - \expandafter\next\expandafter{\the\toks0}% - }% -} - -% Since all \c{,omment} does is throw away the argument, we can let TeX -% do that for us. The \relax here is matched by the \relax in the call -% in \parseargline; it could be more or less anything, its purpose is -% just to delimit the argument to the \c. -\def\argremovec#1\c#2\relax{\toks0 = {#1}} -\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} - -% \argremovec{,omment} might leave us with trailing spaces, though; e.g., -% @end itemize @c foo -% will have two active spaces as part of the argument with the -% `itemize'. Here we remove all active spaces from #1, and assign the -% result to \toks0. -% -% This loses if there are any *other* active characters besides spaces -% in the argument -- _ ^ +, for example -- since they get expanded. -% Fortunately, Texinfo does not define any such commands. (If it ever -% does, the catcode of the characters in questionwill have to be changed -% here.) But this means we cannot call \removeactivespaces as part of -% \argremovec{,omment}, since @c uses \parsearg, and thus the argument -% that \parsearg gets might well have any character at all in it. -% -\def\removeactivespaces#1{% - \begingroup - \ignoreactivespaces - \edef\temp{#1}% - \global\toks0 = \expandafter{\temp}% - \endgroup -} - -% Change the active space to expand to nothing. -% -\begingroup - \obeyspaces - \gdef\ignoreactivespaces{\obeyspaces\let =\empty} -\endgroup - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment; press RETURN to continue} -\endgroup\fi} % This is not perfect, but it should reduce lossage - -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Press RETURN to continue.} - -\outer\def\begin{\parsearg\beginxxx} - -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} - -% @end foo executes the definition of \Efoo. -% -\def\end{\parsearg\endxxx} -\def\endxxx #1{% - \removeactivespaces{#1}% - \edef\endthing{\the\toks0}% - % - \expandafter\ifx\csname E\endthing\endcsname\relax - \expandafter\ifx\csname \endthing\endcsname\relax - % There's no \foo, i.e., no ``environment'' foo. - \errhelp = \EMsimple - \errmessage{Undefined command `@end \endthing'}% - \else - \unmatchedenderror\endthing - \fi - \else - % Everything's ok; the right environment has been started. - \csname E\endthing\endcsname - \fi -} - -% There is an environment #1, but it hasn't been started. Give an error. -% -\def\unmatchedenderror#1{% - \errhelp = \EMsimple - \errmessage{This `@end #1' doesn't have a matching `@#1'}% -} - -% Define the control sequence \E#1 to give an unmatched @end error. -% -\def\defineunmatchedend#1{% - \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% -} - - -% Single-spacing is done by various environments (specifically, in -% \nonfillstart and \quotations). -\newskip\singlespaceskip \singlespaceskip = 12.5pt -\def\singlespace{% - % Why was this kern here? It messes up equalizing space above and below - % environments. --karl, 6may93 - %{\advance \baselineskip by -\singlespaceskip - %\kern \baselineskip}% - \setleading \singlespaceskip -} - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce actual \{ & \} command in an index. - \catcode`\{ = 12 \catcode`\} = 12 - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\@ = 0 \catcode`\\ = 12 - @gdef@lbracecmd[\{]% - @gdef@rbracecmd[\}]% -@endgroup - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown -% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -\def\group{\begingroup - \ifnum\catcode13=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - % - % The \vtop we start below produces a box with normal height and large - % depth; thus, TeX puts \baselineskip glue before it, and (when the - % next line of text is done) \lineskip glue after it. (See p.82 of - % the TeXbook.) Thus, space below is not quite equal to space - % above. But it's pretty close. - \def\Egroup{% - \egroup % End the \vtop. - \endgroup % End the \group. - }% - % - \vtop\bgroup - % We have to put a strut on the last line in case the @group is in - % the midst of an example, rather than completely enclosing it. - % Otherwise, the interline space between the last line of the group - % and the first line afterwards is too small. But we can't put the - % strut in \Egroup, since there it would be on a line by itself. - % Hence this just inserts a strut at the beginning of each line. - \everypar = {\strut}% - % - % Since we have a strut on every line, we don't need any of TeX's - % normal interline spacing. - \offinterlineskip - % - % OK, but now we have to do something about blank - % lines in the input in @example-like environments, which normally - % just turn into \lisppar, which will insert no space now that we've - % turned off the interline space. Simplest is to make them be an - % empty paragraph. - \ifx\par\lisppar - \edef\par{\leavevmode \par}% - % - % Reset ^^M's definition to new definition of \par. - \obeylines - \fi - % - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\def\need{\parsearg\needx} - -% Old definition--didn't work. -%\def\needx #1{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \leavevmode - \hbox to 2em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% - \spacefactor=3000 -} - - -% @page forces the start of a new page -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} - -% This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. - -\def\inmargin#1{% -\strut\vadjust{\nobreak\kern-\strutdepth - \vtop to \strutdepth{\baselineskip\strutdepth\vss - \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} - -%\hbox{{\rm#1}}\hfil\break}} - -% @include file insert text of that file as input. -% Allow normal characters that we make active in the argument (a file name). -\def\include{\begingroup - \catcode`\\=12 - \catcode`~=12 - \catcode`^=12 - \catcode`_=12 - \catcode`|=12 - \catcode`<=12 - \catcode`>=12 - \catcode`+=12 - \parsearg\includezzz} -% Restore active chars for included file. -\def\includezzz#1{\endgroup\begingroup - % Read the included file in a group so nested @include's work. - \def\thisfile{#1}% - \input\thisfile -\endgroup} - -\def\thisfile{} - -% @center line outputs that line, centered - -\def\center{\parsearg\centerzzz} -\def\centerzzz #1{{\advance\hsize by -\leftskip -\advance\hsize by -\rightskip -\centerline{#1}}} - -% @sp n outputs n lines of vertical space - -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% We cannot implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\def\paragraphindent{\parsearg\doparagraphindent} -\def\doparagraphindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\def\exampleindent{\parsearg\doexampleindent} -\def\doexampleindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math means output in math mode. -% We don't use $'s directly in the definition of \math because control -% sequences like \math are expanded when the toc file is written. Then, -% we read the toc file back, the $'s will be normal characters (as they -% should be, according to the definition of Texinfo). So we must use a -% control sequence to switch into and out of math mode. -% -% This isn't quite enough for @math to work properly in indices, but it -% seems unlikely it will ever be needed there. -% -\let\implicitmath = $ -\def\math#1{\implicitmath #1\implicitmath} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \iflinks - \readauxfile - \fi % \openindices needs to do some work in any case. - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - % Just to be on the safe side, close the input stream before the \input. - \openin 1 texinfo.cnf - \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi - \closein1 - \temp - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -\ifx\pdfoutput\undefined - \pdffalse - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\else - \pdftrue - \pdfoutput = 1 - \input pdfcolor - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - \ifnum\pdftexversion < 14 - \pdfimage - \else - \pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - {#1.pdf}% - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{\pdfdest name{#1@} xyz} - \def\pdfmkpgn#1{#1@} - \let\linkcolor = \Cyan - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - \def\pdfmakeoutlines{{% - \openin 1 \jobname.toc - \ifeof 1\else\bgroup - \closein 1 - \indexnofonts - \def\tt{} - % thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - \def\chapentry ##1##2##3{} - \def\unnumbchapentry ##1##2{} - \def\secentry ##1##2##3##4{\advancenumber{chap##2}} - \def\unnumbsecentry ##1##2{} - \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} - \def\unnumbsubsecentry ##1##2{} - \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} - \def\unnumbsubsubsecentry ##1##2{} - \input \jobname.toc - \def\chapentry ##1##2##3{% - \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} - \def\unnumbchapentry ##1##2{% - \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} - \def\secentry ##1##2##3##4{% - \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} - \def\unnumbsecentry ##1##2{% - \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} - \def\subsecentry ##1##2##3##4##5{% - \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} - \def\unnumbsubsecentry ##1##2{% - \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} - \def\subsubsecentry ##1##2##3##4##5##6{% - \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} - \def\unnumbsubsubsecentry ##1##2{% - \pdfoutline goto name{\pdfmkpgn{##2}}{##1}} - \input \jobname.toc - \egroup\fi - }} - \def\makelinks #1,{% - \def\params{#1}\def\E{END}% - \ifx\params\E - \let\nextmakelinks=\relax - \else - \let\nextmakelinks=\makelinks - \ifnum\lnkcount>0,\fi - \picknum{#1}% - \startlink attr{/Border [0 0 0]} - goto name{\pdfmkpgn{\the\pgn}}% - \linkcolor #1% - \advance\lnkcount by 1% - \endlink - \fi - \nextmakelinks - } - \def\picknum#1{\expandafter\pn#1} - \def\pn#1{% - \def\p{#1}% - \ifx\p\lbrace - \let\nextpn=\ppn - \else - \let\nextpn=\ppnn - \def\first{#1} - \fi - \nextpn - } - \def\ppn#1{\pgn=#1\gobble} - \def\ppnn{\pgn=\first} - \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - % #1 - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS| - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\mkpgn{#1}} - \linkcolor #1\endlink} - \def\mkpgn#1{#1@} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\fi % \ifx\pdfoutput - - -\message{fonts,} -% Font-change commands. - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. -\newfam\sffam -\def\sf{\fam=\sffam \tensf} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this one. -\def\ttsl{\tenttsl} - -% Use Computer Modern fonts at \magstephalf (11pt). -\newcount\mainmagstep -\mainmagstep=\magstephalf - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -\ifx\bigger\relax -\let\mainmagstep=\magstep1 -\setfont\textrm\rmshape{12}{1000} -\setfont\texttt\ttshape{12}{1000} -\else -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\fi -% Instead of cmb10, you many want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10. -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun, etc. -\setfont\defbf\bxshape{10}{\magstep1} %was 1314 -\setfont\deftt\ttshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for title page: -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} - -% Chapter (and unnumbered) fonts (17.28pt). -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. -% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. -% \setfont\ssecsl\slshape{10}{\magstep1} -% \setfont\ssectt\ttshape{10}{\magstep1} -% \setfont\ssecsf\sfshape{10}{\magstep1} - -%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. -%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than -%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. -%\setfont\ssectt\ttshape{10}{1315} -%\setfont\ssecsf\sfshape{10}{1315} - -%\let\ssecbf=\ssecrm - -% Subsection fonts (13.15pt). -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts, we -% don't bother to reset \scriptfont and \scriptscriptfont (which would -% also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy - \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf - \textfont\ttfam = \tentt \textfont\sffam = \tensf -} - - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam -% \tenbf}, for example. By redefining \tenbf, we obviate the need to -% redefine \bf itself. -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl - \resetmathfonts} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \resetmathfonts \setleading{11pt}} - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bxshape{12}{1000} -\setfont\shortcontsl\slshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} -\def\smartslanted#1{{\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\it #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic -\let\cite=\smartslanted - -\def\b#1{{\bf #1}} -\let\strong=\b - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\let\ttfont=\t -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in \code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \let-\codedash - \catcode`\_=\active \let_\codeunder - \codex - } - % - % If we end up with any active - characters when handling the index, - % just treat them as a normal -. - \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{\ifusingtt{\normalunderscore\discretionary{}{}{}}{\_}} -\def\codex #1{\tclose{#1}\endgroup} - -%\let\exp=\tclose %Was temporary - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\def\kbdinputstyle{\parsearg\kbdinputstylexxx} -\def\kbdinputstylexxx#1{% - \def\arg{#1}% - \ifx\arg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\arg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\arg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is kbdinputdistinct. (Too much of a hassle to call the macro, -% the catcodes are wrong for parsearg to work.) -\gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl} - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @url, @env, @command quotes seem unnecessary, so use \code. -\let\url=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym downcases the argument and prints in smallcaps. -\def\acronym#1{{\smallcaps \lowercase{#1}}} - -% @pounds{} is a sterling sign. -\def\pounds{{\it\$}} - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\def\shorttitlepage{\parsearg\shorttitlepagezzz} -\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefonts\rm ##1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \oldpage - \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi - % - \ifpdf \pdfmakepagedesttrue \fi - % - \HEADINGSon -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make Tex use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} - -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} -% -}% unbind the catcode of @. - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{ -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% Produces Day Month Year style of output. -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. Unfortunately - % we can't prevent a possible page break at the following - % \baselineskip glue. - \nobreak - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -% Contains a kludge to get @end[description] to work. -\def\description{\tablez{\dontindex}{1}{}{}{}{}} - -% @table, @ftable, @vtable. -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Necessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\afterenvbreak\endgroup}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % -} - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemize - \itemizey {#1}{\Eitemize} -} - -\def\itemizey #1#2{% -\aboveenvbreak % -\itemmax=\itemindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \itemindent % -\exdentamount=\itemindent -\parindent = 0pt % -\parskip = \smallskipamount % -\ifdim \parskip=0pt \parskip=2pt \fi% -\def#2{\endgraf\afterenvbreak\endgroup}% -\def\itemcontents{#1}% -\let\item=\itemizeitem} - -% Set sfcode to normal for the chars that usually have another value. -% These are `.?!:;,' -\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 - \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a <number>. - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{In hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. -% -% For those who want to use more than one line's worth of words in -% the preamble, break the line within one argument and it -% will parse correctly, i.e., -% -% @multitable {Column 1 template} {Column 2 template} {Column 3 -% template} -% Not: -% @multitable {Column 1 template} {Column 2 template} -% {Column 3 template} - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab, @multitable or @end multitable do not need to be on their -% own lines, but it will not hurt if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the part of the @columnfraction before the decimal point, which -% is presumably either 0 or the empty string (but we don't check, we -% just throw it away). #2 is the decimal part, which we use as the -% percent of \hsize for this column. -\def\pickupwholefraction#1.#2 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip }% Add a normal word space as a separator; - % typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% This used to have \hskip1sp. But then the space in a template line is -% not enough. That is bad. So let's go back to just & until we -% encounter the problem it was intended to solve again. -% --karl, nathan@acm.org, 20apr99. -\def\tab{&} - -% @multitable ... @end multitable definitions: -% -\def\multitable{\parsearg\dotable} -\def\dotable#1{\bgroup - \vskip\parskip - \let\item\crcr - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - \def\Emultitable{\global\setpercentfalse\cr\egroup\egroup}% - % - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. - \everycr{\noalign{% - % - % \filbreak%% keeps underfull box messages off when table breaks over pages. - % Maybe so, but it also creates really weird page breaks when the table - % breaks over pages. Wouldn't \vfil be better? Wait until the problem - % manifests itself, so it can be fixed for real --karl. - \global\colcount=0\relax}}% - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup&\global\advance\colcount by 1\relax - \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively marking - % characters. - \noindent\ignorespaces##\unskip\multistrut}\cr -} - -\def\setmultitablespacing{% test to see if user has set \multitablelinespace. -% If so, do nothing. If not, give it an appropriate dimension based on -% current baselineskip. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -\else -%% FIXME: what is \box0 supposed to be? -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{conditionals,} -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% - \let\chapter=\relax - \let\unnumbered=\relax - \let\top=\relax - \let\unnumberedsec=\relax - \let\unnumberedsection=\relax - \let\unnumberedsubsec=\relax - \let\unnumberedsubsection=\relax - \let\unnumberedsubsubsec=\relax - \let\unnumberedsubsubsection=\relax - \let\section=\relax - \let\subsec=\relax - \let\subsubsec=\relax - \let\subsection=\relax - \let\subsubsection=\relax - \let\appendix=\relax - \let\appendixsec=\relax - \let\appendixsection=\relax - \let\appendixsubsec=\relax - \let\appendixsubsection=\relax - \let\appendixsubsubsec=\relax - \let\appendixsubsubsection=\relax - \let\contents=\relax - \let\smallbook=\relax - \let\titlepage=\relax -} - -% Used in nested conditionals, where we have to parse the Texinfo source -% and so want to turn off most commands, in case they are used -% incorrectly. -% -\def\ignoremorecommands{% - \let\defcodeindex = \relax - \let\defcv = \relax - \let\deffn = \relax - \let\deffnx = \relax - \let\defindex = \relax - \let\defivar = \relax - \let\defmac = \relax - \let\defmethod = \relax - \let\defop = \relax - \let\defopt = \relax - \let\defspec = \relax - \let\deftp = \relax - \let\deftypefn = \relax - \let\deftypefun = \relax - \let\deftypeivar = \relax - \let\deftypeop = \relax - \let\deftypevar = \relax - \let\deftypevr = \relax - \let\defun = \relax - \let\defvar = \relax - \let\defvr = \relax - \let\ref = \relax - \let\xref = \relax - \let\printindex = \relax - \let\pxref = \relax - \let\settitle = \relax - \let\setchapternewpage = \relax - \let\setchapterstyle = \relax - \let\everyheading = \relax - \let\evenheading = \relax - \let\oddheading = \relax - \let\everyfooting = \relax - \let\evenfooting = \relax - \let\oddfooting = \relax - \let\headings = \relax - \let\include = \relax - \let\lowersections = \relax - \let\down = \relax - \let\raisesections = \relax - \let\up = \relax - \let\set = \relax - \let\clear = \relax - \let\item = \relax -} - -% Ignore @ignore ... @end ignore. -% -\def\ignore{\doignore{ignore}} - -% Ignore @ifinfo, @ifhtml, @ifnottex, @html, @menu, and @direntry text. -% -\def\ifinfo{\doignore{ifinfo}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifnottex{\doignore{ifnottex}} -\def\html{\doignore{html}} -\def\menu{\doignore{menu}} -\def\direntry{\doignore{direntry}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory = \comment - -% Ignore text until a line `@end #1'. -% -\def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define a command to swallow text until we reach `@end #1'. - % This @ is a catcode 12 token (that is the normal catcode of @ in - % this texinfo.tex file). We change the catcode of @ below to match. - \long\def\doignoretext##1@end #1{\enddoignore}% - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode32 = 10 - % - % Ignore braces, too, so mismatched braces don't cause trouble. - \catcode`\{ = 9 - \catcode`\} = 9 - % - % We must not have @c interpreted as a control sequence. - \catcode`\@ = 12 - % - % Make the letter c a comment character so that the rest of the line - % will be ignored. This way, the document can have (for example) - % @c @end ifinfo - % and the @end ifinfo will be properly ignored. - % (We've just changed @ to catcode 12.) - \catcode`\c = 14 - % - % And now expand that command. - \doignoretext -} - -% What we do to finish off ignored text. -% -\def\enddoignore{\endgroup\ignorespaces}% - -\newif\ifwarnedobs\warnedobsfalse -\def\obstexwarn{% - \ifwarnedobs\relax\else - % We need to warn folks that they may have trouble with TeX 3.0. - % This uses \immediate\write16 rather than \message to get newlines. - \immediate\write16{} - \immediate\write16{WARNING: for users of Unix TeX 3.0!} - \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} - \immediate\write16{If you are running another version of TeX, relax.} - \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} - \immediate\write16{ Then upgrade your TeX installation if you can.} - \immediate\write16{ (See ftp://ftp.gnu.org/pub/gnu/TeX.README.)} - \immediate\write16{If you are stuck with version 3.0, run the} - \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} - \immediate\write16{ to use a workaround.} - \immediate\write16{} - \global\warnedobstrue - \fi -} - -% **In TeX 3.0, setting text in \nullfont hangs tex. For a -% workaround (which requires the file ``dummy.tfm'' to be installed), -% uncomment the following line: -%%%%%\font\nullfont=dummy\let\obstexwarn=\relax - -% Ignore text, except that we keep track of conditional commands for -% purposes of nesting, up to an `@end #1' command. -% -\def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the change of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook: make the current font be a dummy font. - % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% - % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. - % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because not all sites - % might have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm=\nullfont \let\tenit=\nullfont \let\tensl=\nullfont - \let\tenbf=\nullfont \let\tentt=\nullfont \let\smallcaps=\nullfont - \let\tensf=\nullfont - % Similarly for index fonts (mostly for their use in smallexample). - \let\smallrm=\nullfont \let\smallit=\nullfont \let\smallsl=\nullfont - \let\smallbf=\nullfont \let\smalltt=\nullfont \let\smallsc=\nullfont - \let\smallsf=\nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex - \def\tex{\doignore{tex}}% - % Do not execute macro definitions. - % `c' is a comment character, so the word `macro' will get cut off. - \def\macro{\doignore{ma}}% -} - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. Make sure the catcode of space is correct to avoid -% losing inside @example, for instance. -% -\def\set{\begingroup\catcode` =10 - \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. - \parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup -} -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - -% @value{foo} gets the text saved in variable foo. -{ - \catcode`\_ = \active - % - % We might end up with active _ or - characters in the argument if - % we're called from @code, as @code{@value{foo-bar_}}. So \let any - % such active characters to their normal equivalents. - \gdef\value{\begingroup - \catcode`\-=12 \catcode`\_=12 - \indexbreaks \let_\normalunderscore - \valuexxx} -} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we \let\value to this in \indexdummies). Ones -% whose names contain - or _ still won't work, but we can't do anything -% about that. The command has to be fully expandable, since the result -% winds up in the index file. This means that if the variable's value -% contains other Texinfo commands, it's almost certain it will fail -% (although perhaps we could fix that with sufficient work to do a -% one-level expansion on the result, instead of complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -\def\ifset{\parsearg\ifsetxxx} -\def\ifsetxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifsetfail - \else - \expandafter\ifsetsucceed - \fi -} -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\nestedignore{ifset}} -\defineunmatchedend{ifset} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -\def\ifclear{\parsearg\ifclearxxx} -\def\ifclearxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifclearsucceed - \else - \expandafter\ifclearfail - \fi -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\nestedignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex, @ifnothtml, @ifnotinfo always succeed; we read the text -% following, through the first @end iftex (etc.). Make `@end iftex' -% (etc.) valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\def\ifnothtml{\conditionalsucceed{ifnothtml}} -\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} -\defineunmatchedend{iftex} -\defineunmatchedend{ifnothtml} -\defineunmatchedend{ifnotinfo} - -% We can't just want to start a group at @iftex (for example) and end it -% at @end iftex, since then @set commands inside the conditional have no -% effect (they'd get reverted at the end of the group). So we must -% define \Eiftex to redefine itself to be its previous value. (We can't -% just define it to fail again with an ``unmatched end'' error, since -% the @ifset might be nested.) -% -\def\conditionalsucceed#1{% - \edef\temp{% - % Remember the current value of \E#1. - \let\nece{prevE#1} = \nece{E#1}% - % - % At the `@end #1', redefine \E#1 to be its previous value. - \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% - }% - \temp -} - -% We need to expand lots of \csname's, but we don't want to expand the -% control sequences after we've constructed them. -% -\def\nece#1{\expandafter\noexpand\csname#1\endcsname} - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} - -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. - -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}} -} - -\def\defcodeindex{\parsearg\newcodeindex} - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% The \closeout helps reduce unnecessary open files; the limit on the -% Acorn RISC OS is a mere 16 files. -\def\synindex#1 #2 {% - \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname - \expandafter\closeout\csname#1indfile\endcsname - \expandafter\let\csname#1indfile\endcsname=\synindexfoo - \expandafter\xdef\csname#1index\endcsname{% define \xxxindex - \noexpand\doindex{#2}}% -} - -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -\def\syncodeindex#1 #2 {% - \expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname - \expandafter\closeout\csname#1indfile\endcsname - \expandafter\let\csname#1indfile\endcsname=\synindexfoo - \expandafter\xdef\csname#1index\endcsname{% define \xxxindex - \noexpand\docodeindex{#2}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -\def\indexdummies{% -\def\ { }% -% Take care of the plain tex accent commands. -\def\"{\realbackslash "}% -\def\`{\realbackslash `}% -\def\'{\realbackslash '}% -\def\^{\realbackslash ^}% -\def\~{\realbackslash ~}% -\def\={\realbackslash =}% -\def\b{\realbackslash b}% -\def\c{\realbackslash c}% -\def\d{\realbackslash d}% -\def\u{\realbackslash u}% -\def\v{\realbackslash v}% -\def\H{\realbackslash H}% -% Take care of the plain tex special European modified letters. -\def\oe{\realbackslash oe}% -\def\ae{\realbackslash ae}% -\def\aa{\realbackslash aa}% -\def\OE{\realbackslash OE}% -\def\AE{\realbackslash AE}% -\def\AA{\realbackslash AA}% -\def\o{\realbackslash o}% -\def\O{\realbackslash O}% -\def\l{\realbackslash l}% -\def\L{\realbackslash L}% -\def\ss{\realbackslash ss}% -% Take care of texinfo commands likely to appear in an index entry. -% (Must be a way to avoid doing expansion at all, and thus not have to -% laboriously list every single command here.) -\def\@{@}% will be @@ when we switch to @ as escape char. -% Need these in case \tex is in effect and \{ is a \delimiter again. -% But can't use \lbracecmd and \rbracecmd because texindex assumes -% braces and backslashes are used only as delimiters. -\let\{ = \mylbrace -\let\} = \myrbrace -\def\_{{\realbackslash _}}% -\def\w{\realbackslash w }% -\def\bf{\realbackslash bf }% -%\def\rm{\realbackslash rm }% -\def\sl{\realbackslash sl }% -\def\sf{\realbackslash sf}% -\def\tt{\realbackslash tt}% -\def\gtr{\realbackslash gtr}% -\def\less{\realbackslash less}% -\def\hat{\realbackslash hat}% -\def\TeX{\realbackslash TeX}% -\def\dots{\realbackslash dots }% -\def\result{\realbackslash result}% -\def\equiv{\realbackslash equiv}% -\def\expansion{\realbackslash expansion}% -\def\print{\realbackslash print}% -\def\error{\realbackslash error}% -\def\point{\realbackslash point}% -\def\copyright{\realbackslash copyright}% -\def\tclose##1{\realbackslash tclose {##1}}% -\def\code##1{\realbackslash code {##1}}% -\def\uref##1{\realbackslash uref {##1}}% -\def\url##1{\realbackslash url {##1}}% -\def\env##1{\realbackslash env {##1}}% -\def\command##1{\realbackslash command {##1}}% -\def\option##1{\realbackslash option {##1}}% -\def\dotless##1{\realbackslash dotless {##1}}% -\def\samp##1{\realbackslash samp {##1}}% -\def\,##1{\realbackslash ,{##1}}% -\def\t##1{\realbackslash t {##1}}% -\def\r##1{\realbackslash r {##1}}% -\def\i##1{\realbackslash i {##1}}% -\def\b##1{\realbackslash b {##1}}% -\def\sc##1{\realbackslash sc {##1}}% -\def\cite##1{\realbackslash cite {##1}}% -\def\key##1{\realbackslash key {##1}}% -\def\file##1{\realbackslash file {##1}}% -\def\var##1{\realbackslash var {##1}}% -\def\kbd##1{\realbackslash kbd {##1}}% -\def\dfn##1{\realbackslash dfn {##1}}% -\def\emph##1{\realbackslash emph {##1}}% -\def\acronym##1{\realbackslash acronym {##1}}% -% -% Handle some cases of @value -- where the variable name does not -% contain - or _, and the value does not contain any -% (non-fully-expandable) commands. -\let\value = \expandablevalue -% -\unsepspaces -% Turn off macro expansion -\turnoffmacros -} - -% If an index command is used in an @example environment, any spaces -% therein should become regular spaces in the raw index file, not the -% expansion of \tie (\\leavevmode \penalty \@M \ ). -{\obeyspaces - \gdef\unsepspaces{\obeyspaces\let =\space}} - -% \indexnofonts no-ops all font-change commands. -% This is used when outputting the strings to sort the index by. -\def\indexdummyfont#1{#1} -\def\indexdummytex{TeX} -\def\indexdummydots{...} - -\def\indexnofonts{% -% Just ignore accents. -\let\,=\indexdummyfont -\let\"=\indexdummyfont -\let\`=\indexdummyfont -\let\'=\indexdummyfont -\let\^=\indexdummyfont -\let\~=\indexdummyfont -\let\==\indexdummyfont -\let\b=\indexdummyfont -\let\c=\indexdummyfont -\let\d=\indexdummyfont -\let\u=\indexdummyfont -\let\v=\indexdummyfont -\let\H=\indexdummyfont -\let\dotless=\indexdummyfont -% Take care of the plain tex special European modified letters. -\def\oe{oe}% -\def\ae{ae}% -\def\aa{aa}% -\def\OE{OE}% -\def\AE{AE}% -\def\AA{AA}% -\def\o{o}% -\def\O{O}% -\def\l{l}% -\def\L{L}% -\def\ss{ss}% -\let\w=\indexdummyfont -\let\t=\indexdummyfont -\let\r=\indexdummyfont -\let\i=\indexdummyfont -\let\b=\indexdummyfont -\let\emph=\indexdummyfont -\let\strong=\indexdummyfont -\let\cite=\indexdummyfont -\let\sc=\indexdummyfont -%Don't no-op \tt, since it isn't a user-level command -% and is used in the definitions of the active chars like <, >, |... -%\let\tt=\indexdummyfont -\let\tclose=\indexdummyfont -\let\code=\indexdummyfont -\let\url=\indexdummyfont -\let\uref=\indexdummyfont -\let\env=\indexdummyfont -\let\acronym=\indexdummyfont -\let\command=\indexdummyfont -\let\option=\indexdummyfont -\let\file=\indexdummyfont -\let\samp=\indexdummyfont -\let\kbd=\indexdummyfont -\let\key=\indexdummyfont -\let\var=\indexdummyfont -\let\TeX=\indexdummytex -\let\dots=\indexdummydots -\def\@{@}% -} - -% To define \realbackslash, we must make \ not be an escape. -% We must first make another character (@) an escape -% so we do not become unable to do a definition. - -{\catcode`\@=0 \catcode`\\=\other - @gdef@realbackslash{\}} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% For \ifx comparisons. -\def\emptymacro{\empty} - -% Most index entries go through here, but \dosubind is the general case. -% -\def\doind#1#2{\dosubind{#1}{#2}\empty} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% \empty if called from \doind, as we usually are. The main exception -% is with defuns, which call us directly. -% -\def\dosubind#1#2#3{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% - \fi - {% - \count255=\lastpenalty - {% - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - {% - \let\folio = 0% We will expand all macros now EXCEPT \folio. - \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - \def\thirdarg{#3}% - % - % If third arg is present, precede it with space in sort key. - \ifx\thirdarg\emptymacro - \let\subentry = \empty - \else - \def\subentry{ #3}% - \fi - % - % First process the index entry with all font commands turned - % off to get the string to sort by. - {\indexnofonts \xdef\indexsorttmp{#2\subentry}}% - % - % Now the real index entry with the fonts. - \toks0 = {#2}% - % - % If third (subentry) arg is present, add it to the index - % string. And include a space. - \ifx\thirdarg\emptymacro \else - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - % Set up the complete index entry, with both the sort key - % and the original text, including any font commands. We write - % three arguments to \entry to the .?? file, texindex reduces to - % two when writing the .??s sorted result. - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - % - % If a skip is the last thing on the list now, preserve it - % by backing up by \lastskip, doing the \write, then inserting - % the skip again. Otherwise, the whatsit generated by the - % \write will make \lastskip zero. The result is that sequences - % like this: - % @end defun - % @tindex whatever - % @defun ... - % will have extra space inserted, because the \medbreak in the - % start of the @defun won't see the skip inserted by the @end of - % the previous defun. - % - % But don't do any of this if we're not in vertical mode. We - % don't want to do a \vskip and prematurely end a paragraph. - % - % Avoid page breaks due to these extra skips, too. - % - \iflinks - \ifvmode - \skip0 = \lastskip - \ifdim\lastskip = 0pt \else \nobreak\vskip-\lastskip \fi - \fi - % - \temp % do the write - % - % - \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi - \fi - }% - }% - \penalty\count255 - }% -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \indexbreaks - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\rawbackslashxx}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \penalty -300 - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - \vskip .33\baselineskip plus .1\baselineskip - % - % Do our best not to break after the initial. - \nobreak -}} - -% This typesets a paragraph consisting of #1, dot leaders, and then #2 -% flush to the right margin. It is used for index and table of contents -% entries. The paragraph is indented by \leftskip. -% -\def\entry#1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing columns. - \vskip 0pt plus1pt - % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent - % - % Insert the text of the index entry. TeX will do line-breaking on it. - #1% - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#2}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd\ \else% - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - \ #2% The page number ends the paragraph. - \fi - \fi% - \par -\endgroup} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm - -\def\secondary #1#2{ -{\parfillskip=0in \parskip=0in -\hangindent =1in \hangafter=1 -\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \advance\vsize by -\ht\partialpage - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -\def\pagesofar{% - % Re-output the contents of the output page -- any previous material, - % followed by the two boxes we just split, in box0 and box2. - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -\def\balancecolumns{% - % Called at the end of the double column material. - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% \def\appendixletter{\char\the\appendixno} -% We do the following for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raise/lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% Choose a numbered-heading macro -% #1 is heading level if unmodified by @raisesections or @lowersections -% #2 is text for heading -\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \chapterzzz{#2} -\or - \seczzz{#2} -\or - \numberedsubseczzz{#2} -\or - \numberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \chapterzzz{#2} - \else - \numberedsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses appendix heading levels -\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \appendixzzz{#2} -\or - \appendixsectionzzz{#2} -\or - \appendixsubseczzz{#2} -\or - \appendixsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \appendixzzz{#2} - \else - \appendixsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses numberless heading levels -\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \unnumberedzzz{#2} -\or - \unnumberedseczzz{#2} -\or - \unnumberedsubseczzz{#2} -\or - \unnumberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \unnumberedzzz{#2} - \else - \unnumberedsubsubseczzz{#2} - \fi -\fi -} - -% @chapter, @appendix, @unnumbered. -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% -\chapmacro {#1}{\the\chapno}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -% We don't substitute the actual chapter name into \thischapter -% because we don't want its macros evaluated now. -\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% - {\the\chapno}}}% -\temp -\donoderef -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec -} - -\outer\def\appendix{\parsearg\appendixyyy} -\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \appendixno by 1 -\message{\putwordAppendix\space \appendixletter}% -\chapmacro {#1}{\putwordAppendix{} \appendixletter}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash chapentry{\the\toks0}% - {\putwordAppendix{} \appendixletter}}}% -\temp -\appendixnoderef -\global\let\section = \appendixsec -\global\let\subsection = \appendixsubsec -\global\let\subsubsection = \appendixsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\def\centerchap{\parsearg\centerchapyyy} -\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -% @top is like @unnumbered. -\outer\def\top{\parsearg\unnumberedyyy} - -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{% -\secno=0 \subsecno=0 \subsubsecno=0 -% -% This used to be simply \message{#1}, but TeX fully expands the -% argument to \message. Therefore, if #1 contained @-commands, TeX -% expanded them. For example, in `@unnumbered The @cite{Book}', TeX -% expanded @cite (which turns out to cause errors because \cite is meant -% to be executed, not expanded). -% -% Anyway, we don't want the fully-expanded definition of @cite to appear -% as a result of the \message, we just want `@cite' itself. We use -% \the<toks register> to achieve this: TeX expands \the<toks> only once, -% simply yielding the contents of <toks register>. (We also do this for -% the toc entries.) -\toks0 = {#1}\message{(\the\toks0)}% -% -\unnumbchapmacro {#1}% -\gdef\thischapter{#1}\gdef\thissection{#1}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash unnumbchapentry{\the\toks0}}}% -\temp -\unnumbnoderef -\global\let\section = \unnumberedsec -\global\let\subsection = \unnumberedsubsec -\global\let\subsubsection = \unnumberedsubsubsec -} - -% Sections. -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% - {\the\chapno}{\the\secno}}}% -\temp -\donoderef -\nobreak -} - -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash secentry{\the\toks0}% - {\appendixletter}{\the\secno}}}% -\temp -\appendixnoderef -\nobreak -} - -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{% -\plainsecheading {#1}\gdef\thissection{#1}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsecentry{\the\toks0}}}% -\temp -\unnumbnoderef -\nobreak -} - -% Subsections. -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% - {\the\chapno}{\the\secno}{\the\subsecno}}}% -\temp -\donoderef -\nobreak -} - -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash subsecentry{\the\toks0}% - {\appendixletter}{\the\secno}{\the\subsecno}}}% -\temp -\appendixnoderef -\nobreak -} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{% -\plainsubsecheading {#1}\gdef\thissection{#1}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsecentry% - {\the\toks0}}}% -\temp -\unnumbnoderef -\nobreak -} - -% Subsubsections. -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% -\temp -\donoderef -\nobreak -} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash subsubsecentry{\the\toks0}% - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}}}% -\temp -\appendixnoderef -\nobreak -} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{% -\plainsubsubsecheading {#1}\gdef\thissection{#1}% -\toks0 = {#1}% -\edef\temp{\noexpand\writetocentry{\realbackslash unnumbsubsubsecentry% - {\the\toks0}}}% -\temp -\unnumbnoderef -\nobreak -} - -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{\parsearg\majorheadingzzz} -\def\majorheadingzzz #1{% -{\advance\chapheadingskip by 10pt \chapbreak }% -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -\def\chapheading{\parsearg\chapheadingzzz} -\def\chapheadingzzz #1{\chapbreak % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -% @heading, @subheading, @subsubheading. -\def\heading{\parsearg\plainsecheading} -\def\subheading{\parsearg\plainsubsecheading} -\def\subsubheading{\parsearg\plainsubsubsecheading} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{ -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain -\global\let\centerchapmacro=\centerchfplain} - -% Plain chapter opening. -% #1 is the text, #2 the chapter number or empty if unnumbered. -\def\chfplain#1#2{% - \pchapsepmacro - {% - \chapfonts \rm - \def\chapnum{#2}% - \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% Plain opening for unnumbered. -\def\unnchfplain#1{\chfplain{#1}{}} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerchfplain#1{{% - \def\centerparametersmaybe{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt - }% - \chfplain{#1}{}% -}} - -\CHAPFplain % The default - -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} - -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} - -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen -\global\let\centerchapmacro=\centerchfopen} - - -% Section titles. -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} -\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} -\def\plainsecheading#1{\sectionheading{sec}{}{#1}} - -% Subsection titles. -\newskip \subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} -\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} -\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} - -% Subsubsection titles. -\let\subsubsecheadingskip = \subsecheadingskip -\let\subsubsecheadingbreak = \subsecheadingbreak -\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} -\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} - - -% Print any size section title. -% -% #1 is the section type (sec/subsec/subsubsec), #2 is the section -% number (maybe empty), #3 the text. -\def\sectionheading#1#2#3{% - {% - \expandafter\advance\csname #1headingskip\endcsname by \parskip - \csname #1headingbreak\endcsname - }% - {% - % Switch to the right set of fonts. - \csname #1fonts\endcsname \rm - % - % Only insert the separating space if we have a section number. - \def\secnum{#2}% - \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% - % - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 % zero if no section number - \unhbox0 #3}% - }% - \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. We supply {\folio} at the end of the -% argument, which will end up as the last argument to the \...entry macro. -% -% We open the .toc file here instead of at @setfilename or any other -% given time so that @contents can be put in the document anywhere. -% -\newif\iftocfileopened -\def\writetocentry#1{% - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - \iflinks \write\tocfile{#1{\folio}}\fi -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Finish up the main text and prepare to read what we've written -% to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \pdfmakeoutlines - \endgroup - \lastnegativepageno = \pageno - \pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\chapentry = \shortchapentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\unnumbsecentry ##1##2{} - \def\subsecentry ##1##2##3##4##5{} - \def\unnumbsubsecentry ##1##2{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \def\unnumbsubsubsecentry ##1##2{} - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \pageno = \savepageno -} -\let\shortcontents = \summarycontents - -\ifpdf - \pdfcatalog{/PageMode /UseOutlines}% -\fi - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapter-level things, for both the long and short contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} - -% See comments in \dochapentry re vbox and related settings -\def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% -} - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. -% We could simplify the code here by writing out an \appendixentry -% command in the toc file for appendices, instead of using \chapentry -% for both, but it doesn't seem worth it. -% -\newdimen\shortappendixwidth -% -\def\shortchaplabel#1{% - % Compute width of word "Appendix", may change with language. - \setbox0 = \hbox{\shortcontrm \putwordAppendix}% - \shortappendixwidth = \wd0 - % - % We typeset #1 in a box of constant width, regardless of the text of - % #1, so the chapter titles will come out aligned. - \setbox0 = \hbox{#1}% - \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi - % - % This space should be plenty, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - \advance\dimen0 by 1.1em - \hbox to \dimen0{#1\hfil}% -} - -\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} -\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno\bgroup#2\egroup}} - -% Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} - -% Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} - -% And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - -% This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% Final typesetting of a toc entry; we use the same \entry macro as for -% the index entries, but we want to suppress hyphenation here. (We -% can't do that in the \entry macro, since index entries might consist -% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - % Do not use \turnoffactive in these arguments. Since the toc is - % typeset in cmr, so characters such as _ would come out wrong; we - % have to do the usual translation tricks. - \entry{#1}{#2}% -\endgroup} - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts - - -\message{environments,} -% @foo ... @end foo. - -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% Furthermore, these definitions must come after we define our fonts. -\newbox\dblarrowbox \newbox\longdblarrowbox -\newbox\pushcharbox \newbox\bullbox -\newbox\equivbox \newbox\errorbox - -%{\tentt -%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} -%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} -%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} -%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} -% Adapted from the manmac format (p.420 of TeXbook) -%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex -% depth .1ex\hfil} -%} - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% Adapted from the TeXbook's \boxit. -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} - -\global\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{ - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} - -% The @error{} command. -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\def\tex{\begingroup - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie - \catcode `\%=14 - \catcode 43=12 % plus - \catcode`\"=12 - \catcode`\==12 - \catcode`\|=12 - \catcode`\<=12 - \catcode`\>=12 - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\*=\ptexstar - \let\t=\ptext - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -\let\Etex=\endgroup} - -% Define @lisp ... @endlisp. -% @lisp does a \begingroup so it can rebind things, -% including the definition of @endlisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% Make each space character in the input produce a normal interword -% space in the output. Don't allow a line break at this space, as this -% is used only in environments like @example, where each line of input -% should produce a line of output anyway. -% -{\obeyspaces % -\gdef\sepspaces{\obeyspaces\let =\tie}} - -% Define \obeyedspace to be our active space, whatever it is. This is -% for use in \parsearg. -{\sepspaces% -\global\let\obeyedspace= } - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip -% -\def\aboveenvbreak{{\advance\envskipamount by \parskip -\endgraf \ifdim\lastskip<\envskipamount -\removelastskip \penalty-50 \vskip\envskipamount \fi}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\long\def\cartouche{% -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip -\def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \inENV % This group ends at the end of the body - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \singlespace - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \let\exdent=\nofillexdent - \let\nonarrowing=\relax - \fi -} - -% Define the \E... control sequence only if we are inside the particular -% environment, so the error checking in \end will work. -% -% To end an @example-like environment, we first end the paragraph (via -% \afterenvbreak's vertical glue), and then the group. That way we keep -% the zero \parskip that the environments set -- \parskip glue will be -% inserted at the beginning of the next paragraph in the document, after -% the environment. -% -\def\nonfillfinish{\afterenvbreak\endgroup} - -% @lisp: indented, narrowed, typewriter font. -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @example: Same as @lisp. -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} - -% @small... is usually equivalent to the non-small (@smallbook -% redefines). We must call \example (or whatever) last in the -% definition, since it reads the return following the @example (or -% whatever) command. -% -% This actually allows (for example) @end display inside an -% @smalldisplay. Too bad, but makeinfo will catch the error anyway. -% -\def\smalldisplay{\begingroup\def\Esmalldisplay{\nonfillfinish\endgroup}\display} -\def\smallexample{\begingroup\def\Esmallexample{\nonfillfinish\endgroup}\lisp} -\def\smallformat{\begingroup\def\Esmallformat{\nonfillfinish\endgroup}\format} -\def\smalllisp{\begingroup\def\Esmalllisp{\nonfillfinish\endgroup}\lisp} - -% Real @smallexample and @smalllisp (when @smallbook): use smaller fonts. -% Originally contributed by Pavel@xerox. -\def\smalllispx{\begingroup - \def\Esmalllisp{\nonfillfinish\endgroup}% - \def\Esmallexample{\nonfillfinish\endgroup}% - \smallfonts - \lisp -} - -% @display: same as @lisp except keep current font. -% -\def\display{\begingroup - \nonfillstart - \let\Edisplay = \nonfillfinish - \gobble -} - -% @smalldisplay (when @smallbook): @display plus smaller fonts. -% -\def\smalldisplayx{\begingroup - \def\Esmalldisplay{\nonfillfinish\endgroup}% - \smallfonts \rm - \display -} - -% @format: same as @display except don't narrow margins. -% -\def\format{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eformat = \nonfillfinish - \gobble -} - -% @smallformat (when @smallbook): @format plus smaller fonts. -% -\def\smallformatx{\begingroup - \def\Esmallformat{\nonfillfinish\endgroup}% - \smallfonts \rm - \format -} - -% @flushleft (same as @format). -% -\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} - -% @flushright. -% -\def\flushright{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushright = \nonfillfinish - \advance\leftskip by 0pt plus 1fill - \gobble -} - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. -% -\def\quotation{% - \begingroup\inENV %This group ends at the end of the @quotation body - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \singlespace - \parindent=0pt - % We have retained a nonzero parskip for the environment, since we're - % doing normal filling. So to avoid extra space below the environment... - \def\Equotation{\parskip = 0pt \nonfillfinish}% - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi -} - - -\message{defuns,} -% @defun etc. - -% Allow user to change definition object font (\df) internally -\def\setdeffont #1 {\csname DEF#1\endcsname} - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deftypemargin \deftypemargin=12pt -\newskip\deflastargmargin \deflastargmargin=18pt - -\newcount\parencount -% define \functionparens, which makes ( and ) and & do special things. -% \functionparens affects the group it is contained in. -\def\activeparens{% -\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active -\catcode`\[=\active \catcode`\]=\active} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -\global\let(=\lparen \global\let)=\rparen -\global\let[=\lbrack \global\let]=\rbrack - -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} -% This is used to turn on special parens -% but make & act ordinary (given that it's active). -\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested - \global\advance\parencount by 1 -} -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. - % also in that case restore the outer-level definition of (. - \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi - \global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } -\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } -\let\ampnr = \& -\def\lbrb{{\bf\char`\[}} -\def\rbrb{{\bf\char`\]}} - -% Active &'s sneak into the index arguments, so make sure it's defined. -{ - \catcode`& = 13 - \global\let& = \ampnr -} - -% First, defname, which formats the header line itself. -% #1 should be the function name. -% #2 should be the type of definition, such as "Function". - -\def\defname #1#2{% -% Get the values of \leftskip and \rightskip as they were -% outside the @def... -\dimen2=\leftskip -\advance\dimen2 by -\defbodyindent -\noindent -\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% -\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line -\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations -\parshape 2 0in \dimen0 \defargsindent \dimen1 -% Now output arg 2 ("Function" or some such) -% ending at \deftypemargin from the right margin, -% but stuck inside a box of width 0 so it does not interfere with linebreaking -{% Adjust \hsize to exclude the ambient margins, -% so that \rightline will obey them. -\advance \hsize by -\dimen2 -\rlap{\rightline{{\rm #2}\hskip -1.25pc }}}% -% Make all lines underfull and no complaints: -\tolerance=10000 \hbadness=10000 -\advance\leftskip by -\defbodyindent -\exdentamount=\defbodyindent -{\df #1}\enskip % Generate function name -} - -% Actually process the body of a definition -% #1 should be the terminating control sequence, such as \Edefun. -% #2 should be the "another name" control sequence, such as \defunx. -% #3 should be the control sequence that actually processes the header, -% such as \defunheader. - -\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % 61 is `=' -\obeylines\activeparens\spacesplit#3} - -% #1 is the \E... control sequence to end the definition (which we define). -% #2 is the \...x control sequence for consecutive fns (which we define). -% #3 is the control sequence to call to resume processing. -% #4, delimited by the space, is the class name. -% -\def\defmethparsebody#1#2#3#4 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% -\parindent=0in -\advance\leftskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} - -% Used for @deftypemethod and @deftypeivar. -% #1 is the \E... control sequence to end the definition (which we define). -% #2 is the \...x control sequence for consecutive fns (which we define). -% #3 is the control sequence to call to resume processing. -% #4, delimited by a space, is the class name. -% #5 is the method's return type. -% -\def\deftypemethparsebody#1#2#3#4 #5 {\begingroup\inENV - \medbreak - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 ##2 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}{##2}}}% - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines\activeparens\spacesplit{#3{#4}{#5}}} - -% Used for @deftypeop. The change from \deftypemethparsebody is an -% extra argument at the beginning which is the `category', instead of it -% being the hardwired string `Method' or `Instance Variable'. We have -% to account for this both in the \...x definition and in parsing the -% input at hand. Thus also need a control sequence (passed as #5) for -% the \E... definition to assign the category name to. -% -\def\deftypeopparsebody#1#2#3#4#5 #6 {\begingroup\inENV - \medbreak - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 ##2 ##3 {% - \def#4{##1}% - \begingroup\obeylines\activeparens\spacesplit{#3{##2}{##3}}}% - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines\activeparens\spacesplit{#3{#5}{#6}}} - -\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. - -\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % -\obeylines\spacesplit#3} - -% This is used for \def{tp,vr}parsebody. It could probably be used for -% some of the others, too, with some judicious conditionals. -% -\def\parsebodycommon#1#2#3{% - \begingroup\inENV % - \medbreak % - % Define the end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines -} - -\def\defvrparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \spacesplit{#3{#4}}% -} - -% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the -% type is just `struct', because we lose the braces in `{struct -% termios}' when \spacesplit reads its undelimited argument. Sigh. -% \let\deftpparsebody=\defvrparsebody -% -% So, to get around this, we put \empty in with the type name. That -% way, TeX won't find exactly `{...}' as an undelimited argument, and -% won't strip off the braces. -% -\def\deftpparsebody #1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \spacesplit{\parsetpheaderline{#3{#4}}}\empty -} - -% Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does. -% -\def\removeemptybraces\empty#1\relax{#1} - -% After \spacesplit has done its work, this is called -- #1 is the final -% thing to call, #2 the type name (which starts with \empty), and #3 -% (which might be empty) the arguments. -% -\def\parsetpheaderline#1#2#3{% - #1{\removeemptybraces#2\relax}{#3}% -}% - -\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\spacesplit{#3{#5}}} - -% Split up #2 at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. - -{\obeylines -\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% -\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% -\ifx\relax #3% -#1{#2}{}\else #1{#2}{#3#4}\fi}} - -% So much for the things common to all kinds of definitions. - -% Define @defun. - -% First, define the processing that is wanted for arguments of \defun -% Use this to expand the args and terminate the paragraph they make up - -\def\defunargs#1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Set the font temporarily and use \font in case \setfont made \tensl a macro. -{\tensl\hyphenchar\font=0}% -#1% -{\tensl\hyphenchar\font=45}% -\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\nobreak\vskip -\parskip\nobreak -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Use \boldbraxnoamp, not \functionparens, so that & is not special. -\boldbraxnoamp -\tclose{#1}% avoid \code because of side effects on active chars -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\nobreak\vskip -\parskip\nobreak -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars - -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} - -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} - -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDeffunc}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefun int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} - -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypefun}% -\deftypefunargs {#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} - -% \defheaderxcond#1\relax$$$ -% puts #1 in @code, followed by a space, but does nothing if #1 is null. -\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} - -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup -\normalparens % notably, turn off `&' magic, which prevents -% at least some C++ text from working -\defname {\defheaderxcond#2\relax$$$#3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefmac}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defspec == @deffn Special Form - -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefspec}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defop CATEGORY CLASS OPERATION ARG... -% -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} -% -\def\defopheader#1#2#3{% -\dosubind {fn}{\code{#2}}{\putwordon\ #1}% Make entry in function index -\begingroup\defname {#2}{\defoptype\ \putwordon\ #1}% -\defunargs {#3}\endgroup % -} - -% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... -% -\def\deftypeop #1 {\def\deftypeopcategory{#1}% - \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader - \deftypeopcategory} -% -% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. -\def\deftypeopheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$$$#3} - {\deftypeopcategory\ \putwordon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypemethod CLASS TYPE METHOD ARG... -% -\def\deftypemethod{% - \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} -% -% #1 is the class name, #2 the data type, #3 the method name, #4 the args. -\def\deftypemethodheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$$$#3}{\putwordMethodon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypeivar CLASS TYPE VARNAME -% -\def\deftypeivar{% - \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} -% -% #1 is the class name, #2 the data type, #3 the variable name. -\def\deftypeivarheader#1#2#3{% - \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index - \begingroup - \defname{#3}{\putwordInstanceVariableof\ \code{#1}}% - \defvarargs{#3}% - \endgroup -} - -% @defmethod == @defop Method -% -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} -% -% #1 is the class name, #2 the method name, #3 the args. -\def\defmethodheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{#2}{\putwordMethodon\ \code{#1}}% - \defunargs{#3}% - \endgroup -} - -% @defcv {Class Option} foo-class foo-flag - -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - -\def\defcvarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{\putwordof\ #1}% Make entry in var index -\begingroup\defname {#2}{\defcvtype\ \putwordof\ #1}% -\defvarargs {#3}\endgroup % -} - -% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME -% -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} -% -\def\defivarheader#1#2#3{% - \dosubind {vr}{\code{#2}}{\putwordof\ #1}% entry in var index - \begingroup - \defname{#2}{\putwordInstanceVariableof\ #1}% - \defvarargs{#3}% - \endgroup -} - -% @defvar -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% -\interlinepenalty=10000 -\endgraf\nobreak\vskip -\parskip\nobreak} - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefvar}% -\defvarargs {#2}\endgroup % -} - -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefopt}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name, perhaps followed by text that -% is actually part of the data type, which should not be put into the index. -\def\deftypevarheader #1#2{% -\dovarind#2 \relax% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{\putwordDeftypevar}% -\interlinepenalty=10000 -\endgraf\nobreak\vskip -\parskip\nobreak -\endgroup} -\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\dovarind#3 \relax% -\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} -\interlinepenalty=10000 -\endgraf\nobreak\vskip -\parskip\nobreak -\endgroup} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% These definitions are used if you use @defunx (etc.) -% anywhere other than immediately after a @defun or @defunx. -% -\def\defcvx#1 {\errmessage{@defcvx in invalid context}} -\def\deffnx#1 {\errmessage{@deffnx in invalid context}} -\def\defivarx#1 {\errmessage{@defivarx in invalid context}} -\def\defmacx#1 {\errmessage{@defmacx in invalid context}} -\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\defopx#1 {\errmessage{@defopx in invalid context}} -\def\defspecx#1 {\errmessage{@defspecx in invalid context}} -\def\deftpx#1 {\errmessage{@deftpx in invalid context}} -\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} -\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} -\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} -\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} -\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} -\def\defunx#1 {\errmessage{@defunx in invalid context}} -\def\defvarx#1 {\errmessage{@defvarx in invalid context}} -\def\defvrx#1 {\errmessage{@defvrx in invalid context}} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scanmacro#1{% - \begingroup \newlinechar`\^^M - % Undo catcode changes of \startcontents and \doprintindex - \catcode`\@=0 \catcode`\\=12 \escapechar=`\@ - % Append \endinput to make sure that TeX does not see the ending newline. - \toks0={#1\endinput}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \let\xeatspaces\eatspaces - \input \jobname.tmp - \endgroup -} -\else -\def\scanmacro#1{% -\begingroup \newlinechar`\^^M -% Undo catcode changes of \startcontents and \doprintindex -\catcode`\@=0 \catcode`\\=12 \escapechar=`\@ -\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} -\fi - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? -\def\macrolist{} % List of all defined macros in the form - % \do\macro1\do\macro2... - -% Utility routines. -% Thisdoes \let #1 = #2, except with \csnames. -\def\cslet#1#2{% -\expandafter\expandafter -\expandafter\let -\expandafter\expandafter -\csname#1\endcsname -\csname#2\endcsname} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=12\catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\macrobodyctxt{% - \catcode`\~=12 - \catcode`\^=12 - \catcode`\_=12 - \catcode`\|=12 - \catcode`\<=12 - \catcode`\>=12 - \catcode`\+=12 - \catcode`\{=12 - \catcode`\}=12 - \catcode`\@=12 - \catcode`\^^M=12 - \usembodybackslash} - -\def\macroargctxt{% - \catcode`\~=12 - \catcode`\^=12 - \catcode`\_=12 - \catcode`\|=12 - \catcode`\<=12 - \catcode`\>=12 - \catcode`\+=12 - \catcode`\@=12 - \catcode`\\=12} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{The name \the\macname\space is reserved}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - % Add the macroname to \macrolist - \toks0 = \expandafter{\macrolist\do}% - \xdef\macrolist{\the\toks0 - \expandafter\noexpand\csname\the\macname\endcsname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\def\unmacro{\parsearg\unmacroxxx} -\def\unmacroxxx#1{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist - \begingroup - \edef\tempa{\expandafter\noexpand\csname#1\endcsname}% - \def\do##1{% - \def\tempb{##1}% - \ifx\tempa\tempb - % remove this - \else - \toks0 = \expandafter{\newmacrolist\do}% - \edef\newmacrolist{\the\toks0\expandafter\noexpand\tempa}% - \fi}% - \def\newmacrolist{}% - % Execute macro list to define \newmacrolist - \macrolist - \global\let\macrolist\newmacrolist - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% <parameter list> is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - -% We mant to disable all macros during \shipout so that they are not -% expanded by \write. -\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% - \edef\next{\macrolist}\expandafter\endgroup\next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{\ignoreactivespaces -\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% - \expandafter\noexpand\csname#2\endcsname}% -\expandafter\endgroup\next} - - -\message{cross references,} -% @xref etc. - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's job is to define \lastnode. -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -% The sectioning commands (@chapter, etc.) call these. -\def\donoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Ysectionnumberandtype}% - \global\let\lastnode=\relax - \fi -} -\def\unnumbnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% - \global\let\lastnode=\relax - \fi -} -\def\appendixnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Yappendixletterandtype}% - \global\let\lastnode=\relax - \fi -} - - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME, namely -% NAME-title, NAME-pg, and NAME-SNT. Called from \foonoderef. We have -% to set \indexdummies so commands such as @code in a section title -% aren't expanded. It would be nicer not to expand the titles in the -% first place, but there's so many layers that that is hard to do. -% -\def\setref#1#2{{% - \indexdummies - \pdfmkdest{#1}% - \dosetq{#1-title}{Ytitle}% - \dosetq{#1-pg}{Ypagenumber}% - \dosetq{#1-snt}{#2}% -}} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% - \setbox0=\hbox{\printednodename}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printednodename{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printednodename{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printednodename{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifpdf - \leavevmode - \getfilename{#4}% - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{#1@}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{#1@}% - \fi - \linkcolor - \fi - % - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\normalturnoffactive - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % [mynode], - [\printednodename],\space - % page 3 - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi - \endlink -\endgroup} - -% \dosetq is the interface for calls from other macros - -% Use \normalturnoffactive so that punctuation chars such as underscore -% and backslash work in node names. (\turnoffactive doesn't do \.) -\def\dosetq#1#2{% - {\let\folio=0% - \normalturnoffactive - \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% - \iflinks - \next - \fi - }% -} - -% \internalsetq {foo}{page} expands into -% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} -% When the aux file is read, ' is the escape character - -\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq - -\def\Ypagenumber{\folio} - -\def\Ytitle{\thissection} - -\def\Ynothing{} - -\def\Ysectionnumberandtype{% -\ifnum\secno=0 \putwordChapter\xreftie\the\chapno % -\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % -\else \ifnum \subsubsecno=0 % -\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % -\else % -\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\def\Yappendixletterandtype{% -\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% -\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % -\else \ifnum \subsubsecno=0 % -\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % -\else % -\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\gdef\xreftie{'tie} - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Non-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. - -\def\refx#1#2{% - \expandafter\ifx\csname X#1\endcsname\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \csname X#1\endcsname - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. -% -\def\xrdef#1{\begingroup - % Reenable \ as an escape while reading the second argument. - \catcode`\\ = 0 - \afterassignment\endgroup - \expandafter\gdef\csname X#1\endcsname -} - -% Read the last existing aux file, if any. No error if none exists. -\def\readauxfile{\begingroup - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - \catcode`\@=\other - \catcode`\^=\other - % It was suggested to define this as 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % Make the characters 128-255 be printing characters - {% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% - }% - % The aux file uses ' as the escape (for now). - % Turn off \ as an escape so we do not lose on - % entries which were dumped with control sequences in their names. - % For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ - % Reference to such entries still does not work the way one would wish, - % but at least they do not bomb out when the aux file is read in. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\%=\other - \catcode`\'=0 - \catcode`\\=\other - % - \openin 1 \jobname.aux - \ifeof 1 \else - \closein 1 - \input \jobname.aux - \global\havexrefstrue - \global\warnedobstrue - \fi - % Open the new aux file. TeX will close it automatically at exit. - \openout\auxfile=\jobname.aux -\endgroup} - - -% Footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -\let\ptexfootnote=\footnote - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \footnotezzz -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset and anything else that uses -% \parseargline fail inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -\long\gdef\footnotezzz{\insert\footins\bgroup - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Hang the footnote text off the number. - \hang - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -\def\fo@t{\ifcat\bgroup\noexpand\next \let\next\f@@t - \else\let\next\f@t\fi \next} -\def\f@@t{\bgroup\aftergroup\@foot\let\next} -\def\f@t#1{#1\@foot} -\def\@foot{\strut\par\egroup} - -}%end \catcode `\@=11 - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - \closein 1 - % Do not bother showing banner with post-v2.7 epsf.tex (available in - % doc/epsf.tex until it shows up on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is just the usual extra ignored arg for parsing this stuff. -\def\imagexxx#1,#2,#3,#4\finish{% - \ifpdf - \centerline{\dopdfimage{#1}{#2}{#3}}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \begingroup - \catcode`\^^M = 5 % in case we're inside an example - % If the image is by itself, center it. - \ifvmode - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \centerline{\epsfbox{#1.eps}}% - \bigbreak - \else - % In the middle of a paragraph, no extra space. - \epsfbox{#1.eps}% - \fi - \endgroup - \fi -} - - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\def\documentlanguage{\parsearg\dodocumentlanguage} -\def\dodocumentlanguage#1{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \let\temp = \relax - \else - \def\temp{\input txi-#1.tex }% - \fi - \temp - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip. Then whoever calls us can -% set \parskip and call \setleading for \baselineskip. -% -\def\internalpagesizes#1#2#3#4#5#6{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \setleading{13.2pt}% - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}{\voffset}{.25in}{\bindingoffset}{36pt}% -}} - -% Use @smallbook to reset parameters for 7x9.5 (or so) format. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \setleading{12pt}% - % - \internalpagesizes{7.5in}{5.in}{\voffset}{.25in}{\bindingoffset}{16pt}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \deftypemargin = 0pt - \defbodyindent = .5cm - % - \let\smalldisplay = \smalldisplayx - \let\smallexample = \smalllispx - \let\smallformat = \smallformatx - \let\smalllisp = \smalllispx -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \setleading{12pt}% - \parskip = 3pt plus 2pt minus 1pt - % - \internalpagesizes{53\baselineskip}{160mm}{\voffset}{4mm}{\bindingoffset}{44pt}% - % - \tolerance = 700 - \hfuzz = 1pt -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin -% 29mm, hence bottom margin 28mm, nominal side margin 3cm. -\def\afourlatex{{\globaldefs = 1 - \setleading{13.6pt}% - % - \afourpaper - \internalpagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm}% - % - \globaldefs = 0 -}} - -% Use @afourwide to print on European A4 paper in wide format. -\def\afourwide{% - \afourpaper - \internalpagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}% - % - \globaldefs = 0 -} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\def\pagesizes{\parsearg\pagesizesxxx} -\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{13.2pt}% - % - \internalpagesizes{#1}{\hsize}{\voffset}{\normaloffset}{\bindingoffset}{44pt}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$} - -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar} -%\catcode 27=\active -%\def^^[{$\diamondsuit$} - -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`+=\active -\catcode`\_=\active - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \rawbackslashxx output one backslash character in current font -\global\chardef\rawbackslashxx=`\\ -%{\catcode`\\=\other -%@gdef@rawbackslashxx{\}} - -% \rawbackslash redefines \ as input to do \rawbackslashxx. -{\catcode`\\=\active -@gdef@rawbackslash{@let\=@rawbackslashxx }} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} - -% \catcode 17=0 % Define control-q -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{@let"=@normaldoublequote -@let\=@realbackslash -@let~=@normaltilde -@let^=@normalcaret -@let_=@normalunderscore -@let|=@normalverticalbar -@let<=@normalless -@let>=@normalgreater -@let+=@normalplus -@let$=@normaldollar} - -@def@normalturnoffactive{@let"=@normaldoublequote -@let\=@normalbackslash -@let~=@normaltilde -@let^=@normalcaret -@let_=@normalunderscore -@let|=@normalverticalbar -@let<=@normalless -@let>=@normalgreater -@let+=@normalplus -@let$=@normaldollar} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - -@c Set initial fonts. -@textfonts -@rm - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: |