diff options
Diffstat (limited to 'readline')
92 files changed, 3648 insertions, 26790 deletions
diff --git a/readline/CHANGELOG b/readline/CHANGELOG index 479e6c042ac..9024bdfdadb 100644 --- a/readline/CHANGELOG +++ b/readline/CHANGELOG @@ -214,3 +214,126 @@ Makefile.in,{doc,examples,shlib}/Makefile.in - set SHELL from @MAKE_SHELL@ [readline-4.0 released] + + 3/11 + ---- +doc/Makefile.in + - removed references to HTMLTOC, since separate HTML table-of-contents + files are no longer created + +examples/Makefile.in + - remove `*.exe' in clean target for MS-DOS + +Makefile.in + - make `readline' target depend on ./libreadline.a + - configure now substitutes TERMCAP_LIB into Makefile.in + - use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline' + - clean target now removes readline and readline.exe in case they + get built + +configure.in + - use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP + + 3/15 + ---- +support/shlib-install + - Irix 5.x and Irix 6.x should install shared libraries like Solaris 2 + - changes for installing on hp-ux 1[01].x + + 3/23 + ---- +configure.in + - make sure that the $CC argument to shobj-conf is quoted + + 4/8 + --- + +xmalloc.h, rlprivate.h, rlshell.h + - new files + +Makefile.in,shlib/Makefile.in + - add dependencies on xmalloc.h, rlshell.h + - add xmalloc.h, rlprivate.h, rlshell.h to list of header files + +MANIFEST + - add xmalloc.h, rlprivate.h, rlshell.h + + 4/9 + --- +Makefile.in,shlib/Makefile.in + - add dependencies on rlprivate.h + + 4/13 + ---- +doc/Makefile.in + - add variable, PSDVI, which is the desired resolution of the + generated postscript files. Set to 300 because I don't have + any 600-dpi printers + - set LANGUAGE= before calling makeinfo, so messages are in English + - add rluserman.{info,dvi,ps,html} to appropriate variables + - add rules to create rluserman.{info,dvi,ps,html} + - install and uninstall rluserman.info, but don't update the directory + file in $(infodir) yet + +MANIFEST + - add doc/rluserman.{texinfo,info,dvi,ps,html} + + 4/30 + ---- +configure.in + - updated library version to 4.1 + + 5/3 + --- +configure.in + - SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are + constructed from $LIBRARY_VERSION and substituted into Makefiles + + 5/5 + --- +support/shlib-install + - OSF/1 installs shared libraries like Solaris + +Makefile.in + - broke the header file install and uninstall into two new targets: + install-headers and uninstall-headers + - install and uninstall depend on install-headers and uninstall-headers + respectively + - changed install-shared and uninstall-shared targets to depend on + install-headers and uninstall-headers, respectively, so users may + choose to install only the shared libraries. I'm not sure about + the uninstall one yet -- maybe it should check whether or not + the static libraries are installed and not remove the header files + if they are + + 9/3 + --- +configure.in, config.h.in + - added test for memmove (for later use) + - changed version to 4.1-beta1 + + 9/13 + ---- +examples/rlfe.c + - Per Bothner's `rlfe' readline front-end program + +examples/Makefile.in + - added rules to build rlfe + + 9/21 + ---- +support/shlib-install + - changes to handle FreeBSD-3.x elf or a.out shared libraries, which + have different semantics and need different naming conventions + + 1/24/2000 + --------- +doc/Makefile.in + - remove *.bt and *.bts on `make clean' + + 2/4 + --- + + +configure.in + - changed LIBVERSION to 4.1-beta5 diff --git a/readline/CHANGES b/readline/CHANGES index 65339c2e036..d2929ab6fd2 100644 --- a/readline/CHANGES +++ b/readline/CHANGES @@ -1,3 +1,111 @@ +This document details the changes between this version, readline-4.1, +and the previous version, readline-4.0. + +1. Changes to Readline + +a. Changed the HTML documents so that the table-of-contents is no longer + a separate file. + +b. Changes to the shared object configuration for: Irix 5.x, Irix 6.x, + OSF/1. + +c. The shared library major and minor versions are now constructed + automatically by configure and substituted into the makefiles. + +d. It's now possible to install the shared libraries separately from the + static libraries. + +e. The history library tries to truncate the history file only if it is a + regular file. + +f. A bug that caused _rl_dispatch to address negative array indices on + systems with signed chars was fixed. + +g. rl-yank-nth-arg now leaves the history position the same as when it was + called. + +h. Changes to the completion code to handle MS-DOS drive-letter:pathname + filenames. + +i. Completion is now case-insensitive by default on MS-DOS. + +j. Fixes to the history file manipulation code for MS-DOS. + +k. Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS. + +l. Some fixes were made to the redisplay code for better operation on MS-DOS. + +m. The quoted-insert code will now insert tty special chars like ^C. + +n. A bug was fixed that caused the display code to reference memory before + the start of the prompt string. + +o. More support for __EMX__ (OS/2). + +p. A bug was fixed in readline's signal handling that could cause infinite + recursion in signal handlers. + +q. A bug was fixed that caused the point to be less than zero when rl_forward + was given a very large numeric argument. + +r. The vi-mode code now gets characters via the application-settable value + of rl_getc_function rather than calling rl_getc directly. + +s. The history file code now uses O_BINARY mode when reading and writing + the history file on cygwin32. + +t. Fixed a bug in the redisplay code for lines with more than 256 line + breaks. + +u. A bug was fixed which caused invisible character markers to not be + stripped from the prompt string if the terminal was in no-echo mode. + +v. Readline no longer tries to get the variables it needs for redisplay + from the termcap entry if the calling application has specified its + own redisplay function. Readline treats the terminal as `dumb' in + this case. + +w. Fixes to the SIGWINCH code so that a multiple-line prompt with escape + sequences is redrawn correctly. + +x. Changes to the install and install-shared targets so that the libraries + and header files are installed separately. + +2. New Features in Readline + +a. A new Readline `user manual' is in doc/rluserman.texinfo. + +b. Parentheses matching is now always compiled into readline, and enabled + or disabled when the value of the `blink-matching-paren' variable is + changed. + +c. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename. + +d. MS-DOS systems now use ~/_history as the default history file. + +e. history-search-{forward,backward} now leave the point at the end of the + line when the string to search for is empty, like + {reverse,forward}-search-history. + +f. history-search-{forward,backward} now leave the last history line found + in the readline buffer if the second or subsequent search fails. + +g. New function for use by applications: rl_on_new_line_with_prompt, used + when an application displays the prompt itself before calling readline(). + +h. New variable for use by applications: rl_already_prompted. An application + that displays the prompt itself before calling readline() must set this to + a non-zero value. + +i. A new variable, rl_gnu_readline_p, always 1. The intent is that an + application can verify whether or not it is linked with the `real' + readline library or some substitute. + +j. Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program + is included in the examples subdirectory, though it is not built + by default. + +------------------------------------------------------------------------------- This document details the changes between this version, readline-4.0, and the previous version, readline-2.2. diff --git a/readline/COPYING b/readline/COPYING index a43ea2126fb..1bf15263878 100644 --- a/readline/COPYING +++ b/readline/COPYING @@ -2,7 +2,7 @@ Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA + 59 Temple Place, Suite 330, Boston, MA 02111 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found. 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., 675 Mass Ave, Cambridge, MA 02139, USA. + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA Also add information on how to contact you by electronic and paper mail. diff --git a/readline/ChangeLog.Cygnus b/readline/ChangeLog.Cygnus index bc53a327fea..40baa984a2a 100644 --- a/readline/ChangeLog.Cygnus +++ b/readline/ChangeLog.Cygnus @@ -1,3 +1,16 @@ +2000-07-09 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * Import of readline 4.1. + + Locally modified files: Makefile.in, configure.in, configure + (regenerated), config.h.in (regenerated), readline.h, rltty.c, + shell.c signals.c. + + Locally added files: acconfig.h, config/*, config.h.bot, + cross-build/*, doc/inc-hit.texinfo. + + New files: USAGE, rlprivate.h, rlshell.h, xmalloc.h. + 2000-03-16 Eli Zaretskii <eliz@is.elta.co.il> * support/shobj-conf: Shared libs are unsupported on MSDOS. diff --git a/readline/MANIFEST b/readline/MANIFEST index f23ff41aff8..a51ca0525a7 100644 --- a/readline/MANIFEST +++ b/readline/MANIFEST @@ -11,8 +11,8 @@ MANIFEST f INSTALL f CHANGELOG f CHANGES f +USAGE f aclocal.m4 f -acconfig.h f config.h.in f configure f configure.in f @@ -28,11 +28,14 @@ posixstat.h f readline.h f rlconf.h f rldefs.h f +rlprivate.h f +rlshell.h f rlstdc.h f rltty.h f rlwinsize.h f tcap.h f tilde.h f +xmalloc.h f bind.c f complete.c f display.c f @@ -77,6 +80,7 @@ doc/manvers.texinfo f doc/rlman.texinfo f doc/rltech.texinfo f doc/rluser.texinfo f +doc/rluserman.texinfo f doc/hist.texinfo f doc/hstech.texinfo f doc/hsuser.texinfo f @@ -84,8 +88,10 @@ doc/readline.3 f doc/texi2dvi f doc/texi2html f examples/Makefile.in f +examples/excallback.c f examples/fileman.c f examples/manexamp.c f +examples/rlfe.c f examples/rltest.c f examples/rl.c f examples/rlversion.c f @@ -94,10 +100,14 @@ examples/Inputrc f # formatted documentation, from MANIFEST.doc doc/readline.ps f doc/history.ps f +doc/rluserman.ps f doc/readline.dvi f doc/history.dvi f +doc/rluserman.dvi f doc/readline.info f doc/history.info f +doc/rluserman.info f doc/readline.html f doc/history.html f +doc/rluserman.html f doc/readline.0 f diff --git a/readline/Makefile.in b/readline/Makefile.in index 5c667ed69f5..3069ff7885e 100644 --- a/readline/Makefile.in +++ b/readline/Makefile.in @@ -14,7 +14,7 @@ # 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., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline @@ -60,6 +60,8 @@ CPPFLAGS = @CPPFLAGS@ DEFS = @DEFS@ LOCAL_DEFS = @LOCAL_DEFS@ +TERMCAP_LIB = @TERMCAP_LIB@ + # For libraries which include headers from other libraries. INCLUDES = -I. -I$(srcdir) -I$(includedir) @@ -88,7 +90,7 @@ CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ # The header files for this library. HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \ posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \ - ansi_stdlib.h tcap.h rlstdc.h + ansi_stdlib.h tcap.h rlstdc.h xmalloc.h rlprivate.h rlshell.h HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o TILDEOBJ = tilde.o @@ -115,6 +117,8 @@ INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \ all: static +everything: static shared examples + static: $(STATIC_LIBS) libreadline.a: $(OBJECTS) @@ -127,8 +131,8 @@ libhistory.a: $(HISTOBJ) xmalloc.o $(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o -test -n "$(RANLIB)" && $(RANLIB) $@ -readline: $(OBJECTS) readline.h rldefs.h chardefs.h - $(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a -ltermcap +readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a + $(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a ${TERMCAP_LIB} Makefile makefile: config.status $(srcdir)/Makefile.in CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status @@ -147,9 +151,8 @@ stamp-h: config.status $(srcdir)/config.h.in CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status echo > $@ -# CYGNUS LOCAL: Never run autoconf. -#$(srcdir)/configure: $(srcdir)/configure.in Comment-me-out in distribution -# cd $(srcdir) && autoconf Comment-me-out in distribution +#$(srcdir)/configure: $(srcdir)/configure.in ## Comment-me-out in distribution +# cd $(srcdir) && autoconf ## Comment-me-out in distribution shared: force -test -d shlib || mkdir shlib @@ -165,6 +168,17 @@ examples: force force: +install-headers: installdirs ${INSTALLED_HEADERS} + for f in ${INSTALLED_HEADERS}; do \ + $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \ + done + +uninstall-headers: + -test -n "$(includedir)" && cd $(includedir)/readline && \ + ${RM} ${INSTALLED_HEADERS} + +maybe-uninstall-headers: uninstall-headers + ## CYGNUS LOCAL ## Don't mess with people's installed readline's. ## This tries to install this version of readline over whatever @@ -175,14 +189,11 @@ force: install: -#install: installdirs $(STATIC_LIBS) -# for f in ${INSTALLED_HEADERS}; do \ -# $(INSTALL_DATA) $(srcdir)/$$f $(includedir)/readline ; \ -# done -# -( if test -f $(libdir)/libreadline.a ; then $(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old; fi ) +#install: installdirs $(STATIC_LIBS) install-headers +# -$(MV) $(libdir)/libreadline.a $(libdir)/libreadline.old # $(INSTALL_DATA) libreadline.a $(libdir)/libreadline.a # -test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libreadline.a -# -( if test -f $(libdir)/libhistory.a; then $(MV) $(libdir)/libhistory.a $(libdir)/libhistory.old; fi ) +# -$(MV) $(libdir)/libhistory.a $(libdir)/libhistory.old # $(INSTALL_DATA) libhistory.a $(libdir)/libhistory.a # -test -n "$(RANLIB)" && $(RANLIB) -t $(libdir)/libhistory.a # -( if test -d doc ; then \ @@ -194,16 +205,14 @@ installdirs: $(srcdir)/support/mkdirs -$(SHELL) $(srcdir)/support/mkdirs $(includedir) \ $(includedir)/readline $(libdir) $(infodir) $(man3dir) -uninstall: - -test -n "$(includedir)" && cd $(includedir)/readline && \ - ${RM} ${INSTALLED_HEADERS} +uninstall: uninstall-headers -test -n "$(libdir)" && cd $(libdir) && \ ${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS) -install-shared: installdirs shared +install-shared: installdirs install-headers shared -( cd shlib ; ${MAKE} ${MFLAGS} install ) -uninstall-shared: +uninstall-shared: maybe-uninstall-headers -( cd shlib; ${MAKE} ${MFLAGS} uninstall ) TAGS: force @@ -214,6 +223,7 @@ tags: force clean: force $(RM) $(OBJECTS) $(STATIC_LIBS) + $(RM) readline readline.exe -( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) @@ -241,7 +251,7 @@ installcheck: dist: force @echo Readline distributions are created using $(srcdir)/support/mkdist. @echo Here is a sample of the necessary commands: - @echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION) + @echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME) $(RL_LIBRARY_VERSION) @echo tar cf $(RL_LIBRARY_NAME)-${RL_LIBRARY_VERSION}.tar ${RL_LIBRARY_NAME}-$(RL_LIBRARY_VERSION) @echo gzip $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION).tar @@ -300,6 +310,8 @@ macro.o: readline.h keymaps.h chardefs.h tilde.h macro.o: history.h rlstdc.h nls.o: ansi_stdlib.h nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h +nls.o: readline.h keymaps.h chardefs.h tilde.h +nls.o: history.h rlstdc.h parens.o: rlconf.h parens.o: ${BUILD_DIR}/config.h parens.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h @@ -338,6 +350,54 @@ vi_mode.o: history.h ansi_stdlib.h rlstdc.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h +bind.o: rlshell.h +histfile.o: rlshell.h +nls.o: rlshell.h +readline.o: rlshell.h +shell.o: rlshell.h +terminal.o: rlshell.h +histexpand.o: rlshell.h + +bind.o: rlprivate.h +callback.o: rlprivate.h +complete.o: rlprivate.h +display.o: rlprivate.h +input.o: rlprivate.h +isearch.o: rlprivate.h +kill.o: rlprivate.h +macro.o: rlprivate.h +nls.o: rlprivate.h +parens.o: rlprivate.h +readline.o: rlprivate.h +rltty.o: rlprivate.h +search.o: rlprivate.h +signals.o: rlprivate.h +terminal.o: rlprivate.h +undo.o: rlprivate.h +util.o: rlprivate.h +vi_mode.o: rlprivate.h + +bind.o: xmalloc.h +complete.o: xmalloc.h +display.o: xmalloc.h +funmap.o: xmalloc.h +histexpand.o: xmalloc.h +histfile.o: xmalloc.h +history.o: xmalloc.h +input.o: xmalloc.h +isearch.o: xmalloc.h +keymaps.o: xmalloc.h +kill.o: xmalloc.h +macro.o: xmalloc.h +readline.o: xmalloc.h +savestring.o: xmalloc.h +search.o: xmalloc.h +shell.o: xmalloc.h +tilde.o: xmalloc.h +tilde.o: xmalloc.h +util.o: xmalloc.h +vi_mode.o: xmalloc.h + readline.o: $(srcdir)/readline.c vi_mode.o: $(srcdir)/vi_mode.c funmap.o: $(srcdir)/funmap.c diff --git a/readline/README b/readline/README index 56565b2fb80..41a5d0c82d6 100644 --- a/readline/README +++ b/readline/README @@ -1,7 +1,7 @@ Introduction ============ -This is the Gnu Readline library, version 4.0. +This is the Gnu Readline library, version 4.1. The Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both diff --git a/readline/aclocal.m4 b/readline/aclocal.m4 index c277a0c6105..f8f5b74b72f 100644 --- a/readline/aclocal.m4 +++ b/readline/aclocal.m4 @@ -316,13 +316,19 @@ AC_CACHE_VAL(bash_cv_opendir_not_robust, main() { DIR *dir; -int fd; -unlink("/tmp/not_a_directory"); -fd = open("/tmp/not_a_directory", O_WRONLY|O_CREAT, 0666); +int fd, err; +err = mkdir("/tmp/bash-aclocal", 0700); +if (err < 0) { + perror("mkdir"); + exit(1); +} +unlink("/tmp/bash-aclocal/not_a_directory"); +fd = open("/tmp/bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666); write(fd, "\n", 1); close(fd); -dir = opendir("/tmp/not_a_directory"); -unlink("/tmp/not_a_directory"); +dir = opendir("/tmp/bash-aclocal/not_a_directory"); +unlink("/tmp/bash-aclocal/not_a_directory"); +rmdir("/tmp/bash-aclocal"); exit (dir == 0); }], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no) @@ -354,25 +360,59 @@ AC_DEFINE(VOID_SIGHANDLER) fi ]) -AC_DEFUN(BASH_TYPE_INT32_T, +dnl +dnl A signed 16-bit integer quantity +dnl +AC_DEFUN(BASH_TYPE_BITS16_T, +[ +if test "$ac_cv_sizeof_short" = 2; then + AC_CHECK_TYPE(bits16_t, short) +elif test "$ac_cv_sizeof_char" = 2; then + AC_CHECK_TYPE(bits16_t, char) +else + AC_CHECK_TYPE(bits16_t, short) +fi +]) + +dnl +dnl An unsigned 16-bit integer quantity +dnl +AC_DEFUN(BASH_TYPE_U_BITS16_T, +[ +if test "$ac_cv_sizeof_short" = 2; then + AC_CHECK_TYPE(u_bits16_t, unsigned short) +elif test "$ac_cv_sizeof_char" = 2; then + AC_CHECK_TYPE(u_bits16_t, unsigned char) +else + AC_CHECK_TYPE(u_bits16_t, unsigned short) +fi +]) + +dnl +dnl A signed 32-bit integer quantity +dnl +AC_DEFUN(BASH_TYPE_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then - AC_CHECK_TYPE(int32_t, int) + AC_CHECK_TYPE(bits32_t, int) elif test "$ac_cv_sizeof_long" = 4; then - AC_CHECK_TYPE(int32_t, long) + AC_CHECK_TYPE(bits32_t, long) else - AC_CHECK_TYPE(int32_t, int) + AC_CHECK_TYPE(bits32_t, int) fi ]) -AC_DEFUN(BASH_TYPE_U_INT32_T, +dnl +dnl An unsigned 32-bit integer quantity +dnl +AC_DEFUN(BASH_TYPE_U_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then - AC_CHECK_TYPE(u_int32_t, unsigned int) + AC_CHECK_TYPE(u_bits32_t, unsigned int) elif test "$ac_cv_sizeof_long" = 4; then - AC_CHECK_TYPE(u_int32_t, unsigned long) + AC_CHECK_TYPE(u_bits32_t, unsigned long) else - AC_CHECK_TYPE(u_int32_t, unsigned int) + AC_CHECK_TYPE(u_bits32_t, unsigned int) fi ]) @@ -387,6 +427,9 @@ else fi ]) +dnl +dnl A signed 64-bit quantity +dnl AC_DEFUN(BASH_TYPE_BITS64_T, [ if test "$ac_sv_sizeof_char_p" = 8; then @@ -427,6 +470,20 @@ if test $bash_cv_func_lstat = yes; then fi ]) +AC_DEFUN(BASH_FUNC_INET_ATON, +[ +AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton, +[AC_TRY_LINK([ +#include <sys/types.h> +#include <netinet/in.h> +#include <arpa/inet.h> +struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ], +bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)]) +if test $bash_cv_func_inet_aton = yes; then + AC_DEFINE(HAVE_INET_ATON) +fi +]) + AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC, [AC_MSG_CHECKING([for a c_line member of struct termios]) AC_CACHE_VAL(bash_cv_termios_ldisc, @@ -845,7 +902,7 @@ AC_CACHE_VAL(bash_cv_sys_named_pipes, /* Add more tests in here as appropriate. */ main() { -int fd; +int fd, err; #if defined (HAVE_MKFIFO) exit (0); @@ -858,12 +915,19 @@ exit (1); #if defined (NeXT) exit (1); #endif - -fd = mknod ("/tmp/sh-np-autoconf", 0666 | S_IFIFO, 0); -if (fd == -1) +err = mkdir("/tmp/bash-aclocal", 0700); +if (err < 0) { + perror ("mkdir"); + exit(1); +} +fd = mknod ("/tmp/bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0); +if (fd == -1) { + rmdir ("/tmp/bash-aclocal"); exit (1); +} close(fd); -unlink ("/tmp/sh-np-autoconf"); +unlink ("/tmp/bash-aclocal/sh-np-autoconf"); +rmdir ("/tmp/bash-aclocal"); exit(0); }], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing) @@ -1037,12 +1101,32 @@ elif test $bash_cv_dev_fd = "whacky"; then fi ]) +AC_DEFUN(BASH_CHECK_DEV_STDIN, +[AC_MSG_CHECKING(whether /dev/stdin stdout stderr are available) +AC_CACHE_VAL(bash_cv_dev_stdin, +[if test -d /dev/fd && test -r /dev/stdin; then + bash_cv_dev_stdin=present + elif test -d /proc/self/fd && test -r /dev/stdin; then + bash_cv_dev_stdin=present + else + bash_cv_dev_stdin=absent + fi +]) +AC_MSG_RESULT($bash_cv_dev_stdin) +if test $bash_cv_dev_stdin = "present"; then + AC_DEFINE(HAVE_DEV_STDIN) +fi +]) + +dnl +dnl Check for the presence of getpeername in libsocket. +dnl If libsocket is present, check for libnsl and add it to LIBS if +dnl it's there, since most systems with libsocket require linking +dnl with libnsl as well. This should only be called if getpeername +dnl was not found in libc. dnl -dnl Check for the presence of getpeername (the only networking function -dnl bash currently requires) in libsocket. If libsocket is present, -dnl check for libnsl and add it to LIBS if it's there, since most -dnl systems with libsocket require linking with libnsl as well. -dnl This should only be called if getpeername was not found in libc. +dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT +dnl AS WELL dnl AC_DEFUN(BASH_CHECK_SOCKLIB, [ @@ -1084,6 +1168,32 @@ if test $bash_cv_have_socklib = yes; then fi ]) +dnl +dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every +dnl system, we can't use AC_PREREQ +dnl +AC_DEFUN(BASH_FUNC_GETHOSTBYNAME, +[if test "X$bash_cv_have_gethostbyname" = "X"; then +_bash_needmsg=yes +else +AC_MSG_CHECKING(for gethostbyname in socket library) +_bash_needmsg= +fi +AC_CACHE_VAL(bash_cv_have_gethostbyname, +[AC_TRY_LINK([#include <netdb.h>], +[ struct hostent *hp; + hp = gethostbyname("localhost"); +], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)] +) +if test "X$_bash_needmsg" = Xyes; then + AC_MSG_CHECKING(for gethostbyname in socket library) +fi +AC_MSG_RESULT($bash_cv_have_gethostbyname) +if test "$bash_cv_have_gethostbyname" = yes; then +AC_DEFINE(HAVE_GETHOSTBYNAME) +fi +]) + AC_DEFUN(BASH_DEFAULT_MAIL_DIR, [AC_MSG_CHECKING(for default mail directory) AC_CACHE_VAL(bash_cv_mail_dir, @@ -1299,3 +1409,19 @@ switch (0) case 0: case (sizeof (off_t) <= 4):; if test $bash_cv_off_t_64 = yes; then AC_DEFINE(HAVE_OFF_T_64) fi]) + +AC_DEFUN(BASH_STRUCT_TIMEVAL, +[AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h) +AC_CACHE_VAL(bash_cv_struct_timeval, +[ +AC_EGREP_HEADER(struct timeval, sys/time.h, + bash_cv_struct_timeval=yes, + AC_EGREP_HEADER(struct timeval, time.h, + bash_cv_struct_timeval=yes, + bash_cv_struct_timeval=no)) +]) +AC_MSG_RESULT($bash_cv_struct_timeval) +if test $bash_cv_struct_timeval = yes; then + AC_DEFINE(HAVE_TIMEVAL) +fi +]) diff --git a/readline/ansi_stdlib.h b/readline/ansi_stdlib.h index 52339da5d33..a720cb9bcbc 100644 --- a/readline/ansi_stdlib.h +++ b/readline/ansi_stdlib.h @@ -18,7 +18,7 @@ You should have received a copy of the GNU General Public License along with Bash; see the file COPYING. If not, write to the Free Software - Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_STDLIB_H_) #define _STDLIB_H_ 1 diff --git a/readline/bind.c b/readline/bind.c index 73cd827357d..6a6424e9e02 100644 --- a/readline/bind.c +++ b/readline/bind.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -42,7 +42,6 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ -#include <signal.h> #include <errno.h> #if !defined (errno) @@ -58,65 +57,25 @@ extern int errno; #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "rlshell.h" +#include "xmalloc.h" + #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ -#ifndef O_BINARY -# define O_BINARY 0 -#endif - -extern int _rl_horizontal_scroll_mode; -extern int _rl_mark_modified_lines; -extern int _rl_bell_preference; -extern int _rl_meta_flag; -extern int _rl_convert_meta_chars_to_ascii; -extern int _rl_output_meta_chars; -extern int _rl_complete_show_all; -extern int _rl_complete_mark_directories; -extern int _rl_print_completions_horizontally; -extern int _rl_completion_case_fold; -extern int _rl_enable_keypad; -#if defined (PAREN_MATCHING) -extern int rl_blink_matching_paren; -#endif /* PAREN_MATCHING */ -#if defined (VISIBLE_STATS) -extern int rl_visible_stats; -#endif /* VISIBLE_STATS */ -extern int rl_complete_with_tilde_expansion; -extern int rl_completion_query_items; -extern int rl_inhibit_completion; -extern char *_rl_comment_begin; -extern unsigned char *_rl_isearch_terminators; - -extern int rl_explicit_arg; -extern int rl_editing_mode; -extern unsigned char _rl_parsing_conditionalized_out; -extern Keymap _rl_keymap; - -extern char *possible_control_prefixes[], *possible_meta_prefixes[]; - -/* Functions imported from funmap.c */ -extern char **rl_funmap_names (); -extern int rl_add_funmap_entry (); - -/* Functions imported from util.c */ -extern char *_rl_strindex (); - -/* Functions imported from shell.c */ -extern char *get_env_value (); - /* Variables exported by this file. */ Keymap rl_binding_keymap; -/* Forward declarations */ -void rl_set_keymap_from_edit_mode (); +static int _rl_read_init_file __P((char *, int)); +static int glean_key_from_name __P((char *)); +static int substring_member_of_array __P((char *, char **)); -static int _rl_read_init_file (); -static int glean_key_from_name (); -static int substring_member_of_array (); +static int currently_reading_init_file; -extern char *xmalloc (), *xrealloc (); +/* used only in this file */ +static int _rl_prefer_visible_bell = 1; /* **************************************************************** */ /* */ @@ -650,7 +609,7 @@ _rl_read_file (filename, sizep) char *buffer; int i, file; - if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY | O_BINARY, 0666)) < 0) + if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0) return ((char *)NULL); file_size = (size_t)finfo.st_size; @@ -671,7 +630,7 @@ _rl_read_file (filename, sizep) i = read (file, buffer, file_size); close (file); -#if 1 +#if 0 if (i < file_size) #else if (i < 0) @@ -681,33 +640,16 @@ _rl_read_file (filename, sizep) return ((char *)NULL); } +#if 0 buffer[file_size] = '\0'; - -#if O_BINARY - { - /* Systems which distinguish between text and binary files need - to strip the CR characters before each Newline, otherwise the - parsing functions won't work. */ - char *s, *d; - size_t removed = 0; - - for (s = buffer, d = buffer; s < buffer + file_size; s++) - { - if (removed) - *d = *s; - if (*s != '\r' || s[1] != '\n') - d++; - else - removed++; - } - - file_size -= removed; - buffer[file_size] = '\0'; - } -#endif - if (sizep) *sizep = file_size; +#else + buffer[i] = '\0'; + if (sizep) + *sizep = i; +#endif + return (buffer); } @@ -727,7 +669,6 @@ rl_re_read_init_file (count, ignore) 1. the filename used for the previous call 2. the value of the shell variable `INPUTRC' 3. ~/.inputrc - 4. (for __MSDOS__ only) ~/_inputrc If the file existed and could be opened and read, 0 is returned, otherwise errno is returned. */ int @@ -747,20 +688,11 @@ rl_read_init_file (filename) if (*filename == 0) filename = DEFAULT_INPUTRC; -#ifdef __MSDOS__ - { - /* DOS doesn't allow leading dots in file names. If the original - name fails (it could work if we are on Windows), fall back to - ~/_inputrc. */ - int retval = _rl_read_init_file (filename, 0); - - if (retval == 0) - return retval; - else if (strcmp (filename, "~/.inputrc") == 0) - filename = "~/_inputrc"; - } +#if defined (__MSDOS__) + if (_rl_read_init_file (filename, 0) == 0) + return 0; + filename = "~/_inputrc"; #endif - return (_rl_read_init_file (filename, 0)); } @@ -789,6 +721,8 @@ _rl_read_init_file (filename, include_level) last_readline_init_file = savestring (filename); } + currently_reading_init_file = 1; + /* Loop over the lines in the file. Lines that start with `#' are comments; all other lines are commands for readline initialization. */ current_readline_init_lineno = 1; @@ -799,6 +733,12 @@ _rl_read_init_file (filename, include_level) /* Find the end of this line. */ for (i = 0; line + i != end && line[i] != '\n'; i++); +#if defined (__CYGWIN32__) + /* ``Be liberal in what you accept.'' */ + if (line[i] == '\n' && line[i-1] == '\r') + line[i - 1] = '\0'; +#endif + /* Mark end of line. */ line[i] = '\0'; @@ -819,6 +759,7 @@ _rl_read_init_file (filename, include_level) } free (buffer); + currently_reading_init_file = 0; return (0); } @@ -826,9 +767,11 @@ static void _rl_init_file_error (msg) char *msg; { - fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file, - current_readline_init_lineno, - msg); + if (currently_reading_init_file) + fprintf (stderr, "readline: %s: line %d: %s\n", current_readline_init_file, + current_readline_init_lineno, msg); + else + fprintf (stderr, "readline: %s\n", msg); } /* **************************************************************** */ @@ -1275,154 +1218,273 @@ rl_parse_and_bind (string) have one of two values; either "On" or 1 for truth, or "Off" or 0 for false. */ +#define V_SPECIAL 0x1 + static struct { char *name; int *value; + int flags; } boolean_varlist [] = { -#if defined (PAREN_MATCHING) - { "blink-matching-paren", &rl_blink_matching_paren }, -#endif - { "completion-ignore-case", &_rl_completion_case_fold }, - { "convert-meta", &_rl_convert_meta_chars_to_ascii }, - { "disable-completion", &rl_inhibit_completion }, - { "enable-keypad", &_rl_enable_keypad }, - { "expand-tilde", &rl_complete_with_tilde_expansion }, - { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode }, - { "input-meta", &_rl_meta_flag }, - { "mark-directories", &_rl_complete_mark_directories }, - { "mark-modified-lines", &_rl_mark_modified_lines }, - { "meta-flag", &_rl_meta_flag }, - { "output-meta", &_rl_output_meta_chars }, - { "print-completions-horizontally", &_rl_print_completions_horizontally }, - { "show-all-if-ambiguous", &_rl_complete_show_all }, + { "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL }, + { "completion-ignore-case", &_rl_completion_case_fold, 0 }, + { "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 }, + { "disable-completion", &rl_inhibit_completion, 0 }, + { "enable-keypad", &_rl_enable_keypad, 0 }, + { "expand-tilde", &rl_complete_with_tilde_expansion, 0 }, + { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 }, + { "input-meta", &_rl_meta_flag, 0 }, + { "mark-directories", &_rl_complete_mark_directories, 0 }, + { "mark-modified-lines", &_rl_mark_modified_lines, 0 }, + { "meta-flag", &_rl_meta_flag, 0 }, + { "output-meta", &_rl_output_meta_chars, 0 }, + { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL }, + { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 }, + { "show-all-if-ambiguous", &_rl_complete_show_all, 0 }, #if defined (VISIBLE_STATS) - { "visible-stats", &rl_visible_stats }, + { "visible-stats", &rl_visible_stats, 0 }, #endif /* VISIBLE_STATS */ { (char *)NULL, (int *)NULL } }; +static int +find_boolean_var (name) + char *name; +{ + register int i; + + for (i = 0; boolean_varlist[i].name; i++) + if (_rl_stricmp (name, boolean_varlist[i].name) == 0) + return i; + return -1; +} + +/* Hooks for handling special boolean variables, where a + function needs to be called or another variable needs + to be changed when they're changed. */ +static void +hack_special_boolean_var (i) + int i; +{ + char *name; + + name = boolean_varlist[i].name; + + if (_rl_stricmp (name, "blink-matching-paren") == 0) + _rl_enable_paren_matching (rl_blink_matching_paren); + else if (_rl_stricmp (name, "prefer-visible-bell") == 0) + { + if (_rl_prefer_visible_bell) + _rl_bell_preference = VISIBLE_BELL; + else + _rl_bell_preference = AUDIBLE_BELL; + } +} + +/* These *must* correspond to the array indices for the appropriate + string variable. (Though they're not used right now.) */ +#define V_BELLSTYLE 0 +#define V_COMBEGIN 1 +#define V_EDITMODE 2 +#define V_ISRCHTERM 3 +#define V_KEYMAP 4 + +#define V_STRING 1 +#define V_INT 2 + +/* Forward declarations */ +static int sv_bell_style __P((char *)); +static int sv_combegin __P((char *)); +static int sv_compquery __P((char *)); +static int sv_editmode __P((char *)); +static int sv_isrchterm __P((char *)); +static int sv_keymap __P((char *)); + +static struct { + char *name; + int flags; + Function *set_func; +} string_varlist[] = { + { "bell-style", V_STRING, sv_bell_style }, + { "comment-begin", V_STRING, sv_combegin }, + { "completion-query-items", V_INT, sv_compquery }, + { "editing-mode", V_STRING, sv_editmode }, + { "isearch-terminators", V_STRING, sv_isrchterm }, + { "keymap", V_STRING, sv_keymap }, + { (char *)NULL, 0 } +}; + +static int +find_string_var (name) + char *name; +{ + register int i; + + for (i = 0; string_varlist[i].name; i++) + if (_rl_stricmp (name, string_varlist[i].name) == 0) + return i; + return -1; +} + +/* A boolean value that can appear in a `set variable' command is true if + the value is null or empty, `on' (case-insenstive), or "1". Any other + values result in 0 (false). */ +static int +bool_to_int (value) + char *value; +{ + return (value == 0 || *value == '\0' || + (_rl_stricmp (value, "on") == 0) || + (value[0] == '1' && value[1] == '\0')); +} + int rl_variable_bind (name, value) char *name, *value; { register int i; + int v; /* Check for simple variables first. */ - for (i = 0; boolean_varlist[i].name; i++) + i = find_boolean_var (name); + if (i >= 0) { - if (_rl_stricmp (name, boolean_varlist[i].name) == 0) - { - /* A variable is TRUE if the "value" is "on", "1" or "". */ - *boolean_varlist[i].value = *value == 0 || - _rl_stricmp (value, "on") == 0 || - (value[0] == '1' && value[1] == '\0'); - return 0; - } + *boolean_varlist[i].value = bool_to_int (value); + if (boolean_varlist[i].flags & V_SPECIAL) + hack_special_boolean_var (i); + return 0; } - /* Not a boolean variable, so check for specials. */ + i = find_string_var (name); + + /* For the time being, unknown variable names or string names without a + handler function are simply ignored. */ + if (i < 0 || string_varlist[i].set_func == 0) + return 0; + + v = (*string_varlist[i].set_func) (value); + return v; +} - /* Editing mode change? */ - if (_rl_stricmp (name, "editing-mode") == 0) +static int +sv_editmode (value) + char *value; +{ + if (_rl_strnicmp (value, "vi", 2) == 0) { - if (_rl_strnicmp (value, "vi", 2) == 0) - { #if defined (VI_MODE) - _rl_keymap = vi_insertion_keymap; - rl_editing_mode = vi_mode; + _rl_keymap = vi_insertion_keymap; + rl_editing_mode = vi_mode; #endif /* VI_MODE */ - } - else if (_rl_strnicmp (value, "emacs", 5) == 0) - { - _rl_keymap = emacs_standard_keymap; - rl_editing_mode = emacs_mode; - } + return 0; } - - /* Comment string change? */ - else if (_rl_stricmp (name, "comment-begin") == 0) + else if (_rl_strnicmp (value, "emacs", 5) == 0) { - if (*value) - { - if (_rl_comment_begin) - free (_rl_comment_begin); - - _rl_comment_begin = savestring (value); - } + _rl_keymap = emacs_standard_keymap; + rl_editing_mode = emacs_mode; + return 0; } - else if (_rl_stricmp (name, "completion-query-items") == 0) + return 1; +} + +static int +sv_combegin (value) + char *value; +{ + if (value && *value) { - int nval = 100; - if (*value) - { - nval = atoi (value); - if (nval < 0) - nval = 0; - } - rl_completion_query_items = nval; + FREE (_rl_comment_begin); + _rl_comment_begin = savestring (value); + return 0; } - else if (_rl_stricmp (name, "keymap") == 0) + return 1; +} + +static int +sv_compquery (value) + char *value; +{ + int nval = 100; + + if (value && *value) { - Keymap kmap; - kmap = rl_get_keymap_by_name (value); - if (kmap) - rl_set_keymap (kmap); + nval = atoi (value); + if (nval < 0) + nval = 0; } - else if (_rl_stricmp (name, "bell-style") == 0) + rl_completion_query_items = nval; + return 0; +} + +static int +sv_keymap (value) + char *value; +{ + Keymap kmap; + + kmap = rl_get_keymap_by_name (value); + if (kmap) { - if (!*value) - _rl_bell_preference = AUDIBLE_BELL; - else - { - if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0) - _rl_bell_preference = NO_BELL; - else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0) - _rl_bell_preference = AUDIBLE_BELL; - else if (_rl_stricmp (value, "visible") == 0) - _rl_bell_preference = VISIBLE_BELL; - } + rl_set_keymap (kmap); + return 0; } - else if (_rl_stricmp (name, "prefer-visible-bell") == 0) + return 1; +} + +#define _SET_BELL(v) do { _rl_bell_preference = v; return 0; } while (0) + +static int +sv_bell_style (value) + char *value; +{ + if (value == 0 || *value == '\0') + _SET_BELL (AUDIBLE_BELL); + else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0) + _SET_BELL (NO_BELL); + else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0) + _SET_BELL (AUDIBLE_BELL); + else if (_rl_stricmp (value, "visible") == 0) + _SET_BELL (VISIBLE_BELL); + else + return 1; +} +#undef _SET_BELL + +static int +sv_isrchterm (value) + char *value; +{ + int beg, end, delim; + char *v; + + if (value == 0) + return 1; + + /* Isolate the value and translate it into a character string. */ + v = savestring (value); + FREE (_rl_isearch_terminators); + if (v[0] == '"' || v[0] == '\'') { - /* Backwards compatibility. */ - if (*value && (_rl_stricmp (value, "on") == 0 || - (*value == '1' && !value[1]))) - _rl_bell_preference = VISIBLE_BELL; - else - _rl_bell_preference = AUDIBLE_BELL; + delim = v[0]; + for (beg = end = 1; v[end] && v[end] != delim; end++) + ; } - else if (_rl_stricmp (name, "isearch-terminators") == 0) + else { - /* Isolate the value and translate it into a character string. */ - int beg, end; - char *v; + for (beg = end = 0; whitespace (v[end]) == 0; end++) + ; + } - v = savestring (value); - FREE (_rl_isearch_terminators); - if (v[0] == '"' || v[0] == '\'') - { - int delim = v[0]; - for (beg = end = 1; v[end] && v[end] != delim; end++) - ; - } - else - { - for (beg = end = 0; whitespace (v[end]) == 0; end++) - ; - } + v[end] = '\0'; - v[end] = '\0'; - /* The value starts at v + beg. Translate it into a character string. */ - _rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1); - rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end); - _rl_isearch_terminators[end] = '\0'; - free (v); - } - - /* For the time being, unknown variable names are simply ignored. */ + /* The value starts at v + beg. Translate it into a character string. */ + _rl_isearch_terminators = (unsigned char *)xmalloc (2 * strlen (v) + 1); + rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end); + _rl_isearch_terminators[end] = '\0'; + + free (v); return 0; } - + /* Return the character which matches NAME. For example, `Space' returns ' '. */ diff --git a/readline/callback.c b/readline/callback.c index 6915be483a4..117235697e1 100644 --- a/readline/callback.c +++ b/readline/callback.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -35,15 +35,7 @@ /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "readline.h" - -extern void readline_internal_setup (); -extern char *readline_internal_teardown (); -extern int readline_internal_char (); -extern void _rl_init_line_state (); - -extern int _rl_meta_flag; -extern char *rl_prompt; -extern int rl_visible_prompt_length; +#include "rlprivate.h" /* **************************************************************** */ /* */ diff --git a/readline/chardefs.h b/readline/chardefs.h index 3e9e2737706..664c1e43368 100644 --- a/readline/chardefs.h +++ b/readline/chardefs.h @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #ifndef _CHARDEFS_H_ #define _CHARDEFS_H_ diff --git a/readline/complete.c b/readline/complete.c index 1188120f0ab..fb48712a4e0 100644 --- a/readline/complete.c +++ b/readline/complete.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -70,20 +70,14 @@ extern struct passwd *getpwent (); /* Some standard library routines. */ #include "readline.h" +#include "xmalloc.h" +#include "rlprivate.h" -extern char *tilde_expand (); -extern char *rl_copy_text (); -extern void _rl_abort_internal (); -extern int _rl_qsort_string_compare (); -extern void _rl_replace_text (); - -extern Function *rl_last_func; -extern int rl_editing_mode; -extern int screenwidth; - -extern void _rl_move_vert (); -extern int _rl_vis_botlin; -extern int rl_display_fixed; +#ifdef __STDC__ +typedef int QSFUNC (const void *, const void *); +#else +typedef int QSFUNC (); +#endif /* 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. @@ -95,27 +89,25 @@ extern int rl_display_fixed; VFunction *rl_completion_display_matches_hook = (VFunction *)NULL; /* Forward declarations for functions defined and used in this file. */ -char *filename_completion_function (); -char **completion_matches (); +char *filename_completion_function __P((char *, int)); +char **completion_matches __P((char *, CPFunction *)); #if defined (VISIBLE_STATS) # if !defined (X_OK) # define X_OK 1 # endif -static int stat_char (); +static int stat_char __P((char *)); #endif -static char *rl_quote_filename (); -static char *rl_strpbrk (); - -static char **remove_duplicate_matches (); -static void insert_match (); -static int append_to_match (); -static void insert_all_matches (); -static void display_matches (); -static int compute_lcd_of_matches (); +static char *rl_quote_filename __P((char *, int, char *)); +static char *rl_strpbrk __P((char *, char *)); -extern char *xmalloc (), *xrealloc (); +static char **remove_duplicate_matches __P((char **)); +static void insert_match __P((char *, int, int, char *)); +static int append_to_match __P((char *, int, int)); +static void insert_all_matches __P((char **, int, char *)); +static void display_matches __P((char **)); +static int compute_lcd_of_matches __P((char **, int, char *)); /* **************************************************************** */ /* */ @@ -136,7 +128,11 @@ int _rl_complete_mark_directories = 1; int _rl_print_completions_horizontally; /* Non-zero means that case is not significant in filename completion. */ +#if defined (__MSDOS__) && !defined (__DJGPP__) +int _rl_completion_case_fold = 1; +#else int _rl_completion_case_fold; +#endif /* Global variables available to applications using readline. */ @@ -417,6 +413,10 @@ printable_part (pathname) char *temp; temp = rl_filename_completion_desired ? strrchr (pathname, '/') : (char *)NULL; +#if defined (__MSDOS__) + if (rl_filename_completion_desired && temp == 0 && isalpha (pathname[0]) && pathname[1] == ':') + temp = pathname + 1; +#endif return (temp ? ++temp : pathname); } @@ -477,7 +477,12 @@ print_filename (to_print, full_pathname) c = to_print[-1]; to_print[-1] = '\0'; - s = tilde_expand (full_pathname); + /* If setting the last slash in full_pathname to a NUL results in + full_pathname being the empty string, we are trying to complete + files in the root directory. If we pass a null string to the + bash directory completion hook, for example, it will expand it + to the current directory. We just want the `/'. */ + s = tilde_expand (full_pathname && *full_pathname ? full_pathname : "/"); if (rl_directory_completion_hook) (*rl_directory_completion_hook) (&s); @@ -627,25 +632,31 @@ find_completion_word (fp, dp) /* If there is an application-specific function to say whether or not a character is quoted and we found a quote character, let that function decide whether or not a character is a word break, even - if it is found in rl_completer_word_break_characters. */ - if (rl_char_is_quoted_p) - isbrk = (found_quote == 0 || - (*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) && - strchr (rl_completer_word_break_characters, scan) != 0; - else - isbrk = strchr (rl_completer_word_break_characters, scan) != 0; - - if (isbrk) + if it is found in rl_completer_word_break_characters. Don't bother + if we're at the end of the line, though. */ + if (scan) { - /* If the character that caused the word break was a quoting - character, then remember it as the delimiter. */ - if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, scan) && (end - rl_point) > 1) - delimiter = scan; - - /* If the character isn't needed to determine something special - about what kind of completion to perform, then advance past it. */ - if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0) - rl_point++; + if (rl_char_is_quoted_p) + isbrk = (found_quote == 0 || + (*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) && + strchr (rl_completer_word_break_characters, scan) != 0; + else + isbrk = strchr (rl_completer_word_break_characters, scan) != 0; + + if (isbrk) + { + /* If the character that caused the word break was a quoting + character, then remember it as the delimiter. */ + if (rl_basic_quote_characters && + strchr (rl_basic_quote_characters, scan) && + (end - rl_point) > 1) + delimiter = scan; + + /* If the character isn't needed to determine something special + about what kind of completion to perform, then advance past it. */ + if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0) + rl_point++; + } } if (fp) @@ -715,7 +726,7 @@ remove_duplicate_matches (matches) /* Sort the array without matches[0], since we need it to stay in place no matter what. */ if (i) - qsort (matches+1, i-1, sizeof (char *), _rl_qsort_string_compare); + qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); /* Remember the lowest common denominator for it may be unique. */ lowest_common = savestring (matches[0]); @@ -908,7 +919,7 @@ rl_display_match_list (matches, len, max) /* Sort the items if they are not already sorted. */ if (rl_ignore_completion_duplicates == 0) - qsort (matches + 1, len, sizeof (char *), _rl_qsort_string_compare); + qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); crlf (); @@ -1409,7 +1420,7 @@ username_completion_function (text, state) { #if defined (__WIN32__) || defined (__OPENNT) return (char *)NULL; -#else /* !__WIN32__ && !__OPENNT */ +#else /* !__WIN32__ && !__OPENNT) */ static char *username = (char *)NULL; static struct passwd *entry; static int namelen, first_char, first_char_loc; @@ -1452,7 +1463,7 @@ username_completion_function (text, state) return (value); } -#endif /* !__GO32__ */ +#endif /* !__WIN32__ && !__OPENNT */ } /* Okay, now we write the entry_function for filename completion. In the @@ -1494,18 +1505,24 @@ filename_completion_function (text, state) temp = strrchr (dirname, '/'); +#if defined (__MSDOS__) + /* special hack for //X/... */ + if (dirname[0] == '/' && dirname[1] == '/' && isalpha (dirname[2]) && dirname[3] == '/') + temp = strrchr (dirname + 3, '/'); +#endif + if (temp) { strcpy (filename, ++temp); *temp = '\0'; } -#if defined (__WIN32__) || defined (__OPENNT) || defined (__MSDOS__) - /* Handle the drive-relative names "d:foo/bar". */ - else if (dirname[1] == ':') - { - strcpy (filename, dirname + 2); - dirname[2] = '\0'; - } +#if defined (__MSDOS__) + /* searches from current directory on the drive */ + else if (isalpha (dirname[0]) && dirname[1] == ':') + { + strcpy (filename, dirname + 2); + dirname[2] = '\0'; + } #endif else { @@ -1668,11 +1685,7 @@ rl_menu_complete (count, ignore) /* Clean up from previous call, if any. */ FREE (orig_text); if (matches) - { - for (match_list_index = 0; matches[match_list_index]; match_list_index++) - free (matches[match_list_index]); - free (matches); - } + free_match_list (matches); match_list_index = match_list_size = 0; matches = (char **)NULL; diff --git a/readline/config.h.in b/readline/config.h.in index 87f807fa6eb..569e53d271a 100644 --- a/readline/config.h.in +++ b/readline/config.h.in @@ -57,6 +57,9 @@ /* Define if you have the lstat function. */ #undef HAVE_LSTAT +/* Define if you have the memmove function. */ +#undef HAVE_MEMMOVE + /* Define if you have the putenv function. */ #undef HAVE_PUTENV diff --git a/readline/configure b/readline/configure index cdcdf88bae4..ae9bf942bcc 100755 --- a/readline/configure +++ b/readline/configure @@ -1,7 +1,19 @@ #! /bin/sh -# From configure.in for Readline 4.0, version 2.14, from autoconf version 2.13 -LIBVERSION=4.0 +# From configure.in for Readline 4.1, version 2.22, from autoconf version 2.13 +LIBVERSION=4.1 + + + + + + + + + + + + @@ -121,7 +133,6 @@ program_suffix=NONE program_transform_name=s,x,x, silent= site= -sitefile= srcdir= target=NONE verbose= @@ -236,7 +247,6 @@ Configuration: --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages - --site-file=FILE use FILE as the site file --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX @@ -407,11 +417,6 @@ EOF -site=* | --site=* | --sit=*) site="$ac_optarg" ;; - -site-file | --site-file | --site-fil | --site-fi | --site-f) - ac_prev=sitefile ;; - -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*) - sitefile="$ac_optarg" ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) @@ -577,16 +582,12 @@ fi srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. -if test -z "$sitefile"; then - if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -else - CONFIG_SITE="$sitefile" fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then @@ -656,7 +657,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } fi echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:660: checking host system type" >&5 +echo "configure:661: checking host system type" >&5 host_alias=$host case "$host_alias" in @@ -697,7 +698,7 @@ test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:701: checking for $ac_word" >&5 +echo "configure:702: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -727,7 +728,7 @@ if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:731: checking for $ac_word" >&5 +echo "configure:732: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -778,7 +779,7 @@ fi # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:782: checking for $ac_word" >&5 +echo "configure:783: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -810,7 +811,7 @@ fi fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 -echo "configure:814: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 +echo "configure:815: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. @@ -821,12 +822,12 @@ cross_compiling=$ac_cv_prog_cc_cross cat > conftest.$ac_ext << EOF -#line 825 "configure" +#line 826 "configure" #include "confdefs.h" main(){return(0);} EOF -if { (eval echo configure:830: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:831: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. if (./conftest; exit) 2>/dev/null; then @@ -852,12 +853,12 @@ if test $ac_cv_prog_cc_works = no; then { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; } fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 -echo "configure:856: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 +echo "configure:857: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6 cross_compiling=$ac_cv_prog_cc_cross echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 -echo "configure:861: checking whether we are using GNU C" >&5 +echo "configure:862: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -866,7 +867,7 @@ else yes; #endif EOF -if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:870: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then +if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:871: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no @@ -885,7 +886,7 @@ ac_test_CFLAGS="${CFLAGS+set}" ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 -echo "configure:889: checking whether ${CC-cc} accepts -g" >&5 +echo "configure:890: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -917,7 +918,7 @@ else fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 -echo "configure:921: checking how to run the C preprocessor" >&5 +echo "configure:922: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= @@ -932,13 +933,13 @@ else # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext <<EOF -#line 936 "configure" +#line 937 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:942: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:943: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -949,13 +950,13 @@ else rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext <<EOF -#line 953 "configure" +#line 954 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:959: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:960: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -966,13 +967,13 @@ else rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext <<EOF -#line 970 "configure" +#line 971 "configure" #include "confdefs.h" #include <assert.h> Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:976: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:977: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : @@ -998,17 +999,17 @@ echo "$ac_t""$CPP" 1>&6 ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 -echo "configure:1002: checking for minix/config.h" >&5 +echo "configure:1003: checking for minix/config.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1007 "configure" +#line 1008 "configure" #include "confdefs.h" #include <minix/config.h> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1012: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1013: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1085,13 +1086,13 @@ test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 -echo "configure:1089: checking whether ${CC-cc} needs -traditional" >&5 +echo "configure:1090: checking whether ${CC-cc} needs -traditional" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext <<EOF -#line 1095 "configure" +#line 1096 "configure" #include "confdefs.h" #include <sgtty.h> Autoconf TIOCGETP @@ -1109,7 +1110,7 @@ rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext <<EOF -#line 1113 "configure" +#line 1114 "configure" #include "confdefs.h" #include <termio.h> Autoconf TCGETA @@ -1142,7 +1143,7 @@ fi # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 -echo "configure:1146: checking for a BSD compatible install" >&5 +echo "configure:1147: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1197,7 +1198,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1201: checking for $ac_word" >&5 +echo "configure:1202: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1227,7 +1228,7 @@ test -n "$ARFLAGS" || ARFLAGS="cr" # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:1231: checking for $ac_word" >&5 +echo "configure:1232: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1259,12 +1260,12 @@ MAKE_SHELL=/bin/sh echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 -echo "configure:1263: checking return type of signal handlers" >&5 +echo "configure:1264: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1268 "configure" +#line 1269 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -1281,7 +1282,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:1285: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1286: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else @@ -1301,12 +1302,12 @@ EOF echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 -echo "configure:1305: checking whether stat file-mode macros are broken" >&5 +echo "configure:1306: checking whether stat file-mode macros are broken" >&5 if eval "test \"`echo '$''{'ac_cv_header_stat_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1310 "configure" +#line 1311 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/stat.h> @@ -1361,12 +1362,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 -echo "configure:1365: checking for $ac_hdr that defines DIR" >&5 +echo "configure:1366: checking for $ac_hdr that defines DIR" >&5 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1370 "configure" +#line 1371 "configure" #include "confdefs.h" #include <sys/types.h> #include <$ac_hdr> @@ -1374,7 +1375,7 @@ int main() { DIR *dirp = 0; ; return 0; } EOF -if { (eval echo configure:1378: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1379: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" else @@ -1399,7 +1400,7 @@ done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 -echo "configure:1403: checking for opendir in -ldir" >&5 +echo "configure:1404: checking for opendir in -ldir" >&5 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1407,7 +1408,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ldir $LIBS" cat > conftest.$ac_ext <<EOF -#line 1411 "configure" +#line 1412 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1418,7 +1419,7 @@ int main() { opendir() ; return 0; } EOF -if { (eval echo configure:1422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1423: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1440,7 +1441,7 @@ fi else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 -echo "configure:1444: checking for opendir in -lx" >&5 +echo "configure:1445: checking for opendir in -lx" >&5 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -1448,7 +1449,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lx $LIBS" cat > conftest.$ac_ext <<EOF -#line 1452 "configure" +#line 1453 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -1459,7 +1460,7 @@ int main() { opendir() ; return 0; } EOF -if { (eval echo configure:1463: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -1482,15 +1483,16 @@ fi fi -for ac_func in strcasecmp select setenv putenv tcgetattr setlocale lstat +for ac_func in lstat memmove putenv select setenv setlocale \ + strcasecmp tcgetattr do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 -echo "configure:1489: checking for $ac_func" >&5 +echo "configure:1491: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1494 "configure" +#line 1496 "configure" #include "confdefs.h" /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $ac_func(); below. */ @@ -1513,7 +1515,7 @@ $ac_func(); ; return 0; } EOF -if { (eval echo configure:1517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else @@ -1539,7 +1541,7 @@ done echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 -echo "configure:1543: checking for working strcoll" >&5 +echo "configure:1545: checking for working strcoll" >&5 if eval "test \"`echo '$''{'ac_cv_func_strcoll_works'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1547,7 +1549,7 @@ else ac_cv_func_strcoll_works=no else cat > conftest.$ac_ext <<EOF -#line 1551 "configure" +#line 1553 "configure" #include "confdefs.h" #include <string.h> main () @@ -1557,7 +1559,7 @@ main () strcoll ("123", "456") >= 0); } EOF -if { (eval echo configure:1561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then ac_cv_func_strcoll_works=yes else @@ -1586,17 +1588,17 @@ for ac_hdr in unistd.h stdlib.h varargs.h stdarg.h string.h \ do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 -echo "configure:1590: checking for $ac_hdr" >&5 +echo "configure:1592: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1595 "configure" +#line 1597 "configure" #include "confdefs.h" #include <$ac_hdr> EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" -{ (eval echo configure:1600: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } +{ (eval echo configure:1602: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* @@ -1625,13 +1627,13 @@ done echo $ac_n "checking for type of signal functions""... $ac_c" 1>&6 -echo "configure:1629: checking for type of signal functions" >&5 +echo "configure:1631: checking for type of signal functions" >&5 if eval "test \"`echo '$''{'bash_cv_signal_vintage'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1635 "configure" +#line 1637 "configure" #include "confdefs.h" #include <signal.h> int main() { @@ -1644,7 +1646,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:1648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* bash_cv_signal_vintage=posix else @@ -1653,7 +1655,7 @@ else rm -rf conftest* cat > conftest.$ac_ext <<EOF -#line 1657 "configure" +#line 1659 "configure" #include "confdefs.h" #include <signal.h> int main() { @@ -1663,7 +1665,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:1667: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1669: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* bash_cv_signal_vintage=4.2bsd else @@ -1672,7 +1674,7 @@ else rm -rf conftest* cat > conftest.$ac_ext <<EOF -#line 1676 "configure" +#line 1678 "configure" #include "confdefs.h" #include <signal.h> @@ -1685,7 +1687,7 @@ int main() { ; return 0; } EOF -if { (eval echo configure:1689: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1691: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* bash_cv_signal_vintage=svr3 else @@ -1726,7 +1728,7 @@ fi echo $ac_n "checking if signal handlers must be reinstalled when invoked""... $ac_c" 1>&6 -echo "configure:1730: checking if signal handlers must be reinstalled when invoked" >&5 +echo "configure:1732: checking if signal handlers must be reinstalled when invoked" >&5 if eval "test \"`echo '$''{'bash_cv_must_reinstall_sighandlers'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1736,7 +1738,7 @@ else else cat > conftest.$ac_ext <<EOF -#line 1740 "configure" +#line 1742 "configure" #include "confdefs.h" #include <signal.h> @@ -1783,7 +1785,7 @@ main() } EOF -if { (eval echo configure:1787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then bash_cv_must_reinstall_sighandlers=no else @@ -1808,7 +1810,7 @@ fi echo $ac_n "checking for presence of POSIX-style sigsetjmp/siglongjmp""... $ac_c" 1>&6 -echo "configure:1812: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 +echo "configure:1814: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 if eval "test \"`echo '$''{'bash_cv_func_sigsetjmp'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1818,7 +1820,7 @@ else else cat > conftest.$ac_ext <<EOF -#line 1822 "configure" +#line 1824 "configure" #include "confdefs.h" #ifdef HAVE_UNISTD_H @@ -1859,7 +1861,7 @@ exit(1); #endif } EOF -if { (eval echo configure:1863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:1865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then bash_cv_func_sigsetjmp=present else @@ -1882,12 +1884,12 @@ EOF fi echo $ac_n "checking for lstat""... $ac_c" 1>&6 -echo "configure:1886: checking for lstat" >&5 +echo "configure:1888: checking for lstat" >&5 if eval "test \"`echo '$''{'bash_cv_func_lstat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1891 "configure" +#line 1893 "configure" #include "confdefs.h" #include <sys/types.h> @@ -1897,7 +1899,7 @@ int main() { lstat(".",(struct stat *)0); ; return 0; } EOF -if { (eval echo configure:1901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:1903: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* bash_cv_func_lstat=yes else @@ -1918,12 +1920,12 @@ EOF fi echo $ac_n "checking whether programs are able to redeclare getpw functions""... $ac_c" 1>&6 -echo "configure:1922: checking whether programs are able to redeclare getpw functions" >&5 +echo "configure:1924: checking whether programs are able to redeclare getpw functions" >&5 if eval "test \"`echo '$''{'bash_cv_can_redecl_getpw'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 1927 "configure" +#line 1929 "configure" #include "confdefs.h" #include <sys/types.h> #include <pwd.h> @@ -1934,7 +1936,7 @@ int main() { struct passwd *z; z = getpwent(); z = getpwuid(0); z = getpwnam("root"); ; return 0; } EOF -if { (eval echo configure:1938: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:1940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_can_redecl_getpw=yes else @@ -1956,7 +1958,7 @@ fi echo $ac_n "checking whether or not strcoll and strcmp differ""... $ac_c" 1>&6 -echo "configure:1960: checking whether or not strcoll and strcmp differ" >&5 +echo "configure:1962: checking whether or not strcoll and strcmp differ" >&5 if eval "test \"`echo '$''{'bash_cv_func_strcoll_broken'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else @@ -1966,7 +1968,7 @@ else else cat > conftest.$ac_ext <<EOF -#line 1970 "configure" +#line 1972 "configure" #include "confdefs.h" #include <stdio.h> @@ -2005,7 +2007,7 @@ char *v[]; } EOF -if { (eval echo configure:2009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null +if { (eval echo configure:2011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then bash_cv_func_strcoll_broken=yes else @@ -2029,12 +2031,12 @@ fi echo $ac_n "checking whether signal handlers are of type void""... $ac_c" 1>&6 -echo "configure:2033: checking whether signal handlers are of type void" >&5 +echo "configure:2035: checking whether signal handlers are of type void" >&5 if eval "test \"`echo '$''{'bash_cv_void_sighandler'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2038 "configure" +#line 2040 "configure" #include "confdefs.h" #include <sys/types.h> #include <signal.h> @@ -2049,7 +2051,7 @@ int main() { int i; ; return 0; } EOF -if { (eval echo configure:2053: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2055: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_void_sighandler=yes else @@ -2069,12 +2071,12 @@ EOF fi echo $ac_n "checking for TIOCGWINSZ in sys/ioctl.h""... $ac_c" 1>&6 -echo "configure:2073: checking for TIOCGWINSZ in sys/ioctl.h" >&5 +echo "configure:2075: checking for TIOCGWINSZ in sys/ioctl.h" >&5 if eval "test \"`echo '$''{'bash_cv_tiocgwinsz_in_ioctl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2078 "configure" +#line 2080 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/ioctl.h> @@ -2082,7 +2084,7 @@ int main() { int x = TIOCGWINSZ; ; return 0; } EOF -if { (eval echo configure:2086: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2088: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocgwinsz_in_ioctl=yes else @@ -2103,12 +2105,12 @@ EOF fi echo $ac_n "checking for TIOCSTAT in sys/ioctl.h""... $ac_c" 1>&6 -echo "configure:2107: checking for TIOCSTAT in sys/ioctl.h" >&5 +echo "configure:2109: checking for TIOCSTAT in sys/ioctl.h" >&5 if eval "test \"`echo '$''{'bash_cv_tiocstat_in_ioctl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2112 "configure" +#line 2114 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/ioctl.h> @@ -2116,7 +2118,7 @@ int main() { int x = TIOCSTAT; ; return 0; } EOF -if { (eval echo configure:2120: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2122: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocstat_in_ioctl=yes else @@ -2137,12 +2139,12 @@ EOF fi echo $ac_n "checking for FIONREAD in sys/ioctl.h""... $ac_c" 1>&6 -echo "configure:2141: checking for FIONREAD in sys/ioctl.h" >&5 +echo "configure:2143: checking for FIONREAD in sys/ioctl.h" >&5 if eval "test \"`echo '$''{'bash_cv_fionread_in_ioctl'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2146 "configure" +#line 2148 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/ioctl.h> @@ -2150,7 +2152,7 @@ int main() { int x = FIONREAD; ; return 0; } EOF -if { (eval echo configure:2154: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2156: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_fionread_in_ioctl=yes else @@ -2171,19 +2173,19 @@ EOF fi echo $ac_n "checking for speed_t in sys/types.h""... $ac_c" 1>&6 -echo "configure:2175: checking for speed_t in sys/types.h" >&5 +echo "configure:2177: checking for speed_t in sys/types.h" >&5 if eval "test \"`echo '$''{'bash_cv_speed_t_in_sys_types'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2180 "configure" +#line 2182 "configure" #include "confdefs.h" #include <sys/types.h> int main() { speed_t x; ; return 0; } EOF -if { (eval echo configure:2187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2189: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_speed_t_in_sys_types=yes else @@ -2204,12 +2206,12 @@ EOF fi echo $ac_n "checking for struct winsize in sys/ioctl.h and termios.h""... $ac_c" 1>&6 -echo "configure:2208: checking for struct winsize in sys/ioctl.h and termios.h" >&5 +echo "configure:2210: checking for struct winsize in sys/ioctl.h and termios.h" >&5 if eval "test \"`echo '$''{'bash_cv_struct_winsize_header'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2213 "configure" +#line 2215 "configure" #include "confdefs.h" #include <sys/types.h> #include <sys/ioctl.h> @@ -2217,7 +2219,7 @@ int main() { struct winsize x; ; return 0; } EOF -if { (eval echo configure:2221: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2223: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=ioctl_h else @@ -2225,7 +2227,7 @@ else cat conftest.$ac_ext >&5 rm -rf conftest* cat > conftest.$ac_ext <<EOF -#line 2229 "configure" +#line 2231 "configure" #include "confdefs.h" #include <sys/types.h> #include <termios.h> @@ -2233,7 +2235,7 @@ int main() { struct winsize x; ; return 0; } EOF -if { (eval echo configure:2237: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2239: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=termios_h else @@ -2266,12 +2268,12 @@ fi echo $ac_n "checking if struct dirent has a d_ino member""... $ac_c" 1>&6 -echo "configure:2270: checking if struct dirent has a d_ino member" >&5 +echo "configure:2272: checking if struct dirent has a d_ino member" >&5 if eval "test \"`echo '$''{'bash_cv_dirent_has_dino'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2275 "configure" +#line 2277 "configure" #include "confdefs.h" #include <stdio.h> @@ -2300,7 +2302,7 @@ struct dirent d; int z; z = d.d_ino; ; return 0; } EOF -if { (eval echo configure:2304: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2306: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_dino=yes else @@ -2322,12 +2324,12 @@ fi echo $ac_n "checking if struct dirent has a d_fileno member""... $ac_c" 1>&6 -echo "configure:2326: checking if struct dirent has a d_fileno member" >&5 +echo "configure:2328: checking if struct dirent has a d_fileno member" >&5 if eval "test \"`echo '$''{'bash_cv_dirent_has_d_fileno'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <<EOF -#line 2331 "configure" +#line 2333 "configure" #include "confdefs.h" #include <stdio.h> @@ -2356,7 +2358,7 @@ struct dirent d; int z; z = d.d_fileno; ; return 0; } EOF -if { (eval echo configure:2360: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then +if { (eval echo configure:2362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_d_fileno=yes else @@ -2385,14 +2387,14 @@ if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 -echo "configure:2389: checking which library has the termcap functions" >&5 +echo "configure:2391: checking which library has the termcap functions" >&5 _bash_needmsg= fi if eval "test \"`echo '$''{'bash_cv_termcap_lib'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 -echo "configure:2396: checking for tgetent in -ltermcap" >&5 +echo "configure:2398: checking for tgetent in -ltermcap" >&5 ac_lib_var=`echo termcap'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2400,7 +2402,7 @@ else ac_save_LIBS="$LIBS" LIBS="-ltermcap $LIBS" cat > conftest.$ac_ext <<EOF -#line 2404 "configure" +#line 2406 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2411,7 +2413,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:2415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2417: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2430,7 +2432,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 -echo "configure:2434: checking for tgetent in -lcurses" >&5 +echo "configure:2436: checking for tgetent in -lcurses" >&5 ac_lib_var=`echo curses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2438,7 +2440,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lcurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 2442 "configure" +#line 2444 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2449,7 +2451,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:2453: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2455: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2468,7 +2470,7 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then else echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 -echo "configure:2472: checking for tgetent in -lncurses" >&5 +echo "configure:2474: checking for tgetent in -lncurses" >&5 ac_lib_var=`echo ncurses'_'tgetent | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 @@ -2476,7 +2478,7 @@ else ac_save_LIBS="$LIBS" LIBS="-lncurses $LIBS" cat > conftest.$ac_ext <<EOF -#line 2480 "configure" +#line 2482 "configure" #include "confdefs.h" /* Override any gcc2 internal prototype to avoid an error. */ /* We use char because int might match the return type of a gcc2 @@ -2487,7 +2489,7 @@ int main() { tgetent() ; return 0; } EOF -if { (eval echo configure:2491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then +if { (eval echo configure:2493: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else @@ -2516,7 +2518,7 @@ fi if test "X$_bash_needmsg" = "Xyes"; then echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 -echo "configure:2520: checking which library has the termcap functions" >&5 +echo "configure:2522: checking which library has the termcap functions" >&5 fi echo "$ac_t""using $bash_cv_termcap_lib" 1>&6 if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then @@ -2553,8 +2555,8 @@ esac # if test -f ${srcdir}/support/shobj-conf; then echo $ac_n "checking configuration for building shared libraries""... $ac_c" 1>&6 -echo "configure:2557: checking configuration for building shared libraries" >&5 - eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C ${CC} -c ${host_cpu} -o ${host_os} -v ${host_vendor}` +echo "configure:2559: checking configuration for building shared libraries" >&5 + eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` @@ -2568,9 +2570,20 @@ echo "configure:2557: checking configuration for building shared libraries" >&5 echo "$ac_t""$SHLIB_STATUS" 1>&6 + + # shared library versioning + # quoted for m4 so I can use character classes + SHLIB_MAJOR=`expr "$LIBVERSION" : '\([0-9]\)\..*'` + SHLIB_MINOR=`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'` + + fi -BUILD_DIR=`pwd` +case "$host_os" in +msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file +*) BUILD_DIR=`pwd` ;; +esac + @@ -2748,6 +2761,8 @@ s%@SHLIB_XLDFLAGS@%$SHLIB_XLDFLAGS%g s%@SHLIB_LIBSUFF@%$SHLIB_LIBSUFF%g s%@SHLIB_LIBVERSION@%$SHLIB_LIBVERSION%g s%@SHLIB_LIBS@%$SHLIB_LIBS%g +s%@SHLIB_MAJOR@%$SHLIB_MAJOR%g +s%@SHLIB_MINOR@%$SHLIB_MINOR%g s%@BUILD_DIR@%$BUILD_DIR%g s%@LOCAL_CFLAGS@%$LOCAL_CFLAGS%g s%@LOCAL_LDFLAGS@%$LOCAL_LDFLAGS%g diff --git a/readline/configure.in b/readline/configure.in index 9afdaa70fcf..780b4df6284 100644 --- a/readline/configure.in +++ b/readline/configure.in @@ -4,8 +4,8 @@ dnl dnl report bugs to chet@po.cwru.edu dnl dnl Process this file with autoconf to produce a configure script. -AC_REVISION([for Readline 4.0, version 2.14, from autoconf version] AC_ACVERSION) -LIBVERSION=4.0 +AC_REVISION([for Readline 4.1, version 2.22, from autoconf version] AC_ACVERSION) +LIBVERSION=4.1 AC_INIT(readline.h) AC_CONFIG_HEADER(config.h) @@ -32,6 +32,7 @@ fi test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 AC_PROG_CC +dnl AC_AIX AC_MINIX dnl BEGIN changes for CYGNUS cross-building for Cygwin @@ -91,7 +92,8 @@ AC_RETSIGTYPE AC_HEADER_STAT AC_HEADER_DIRENT -AC_CHECK_FUNCS(strcasecmp select setenv putenv tcgetattr setlocale lstat) +AC_CHECK_FUNCS(lstat memmove putenv select setenv setlocale \ + strcasecmp tcgetattr) AC_FUNC_STRCOLL @@ -140,7 +142,7 @@ esac # if test -f ${srcdir}/support/shobj-conf; then AC_MSG_CHECKING(configuration for building shared libraries) - eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C ${CC} -c ${host_cpu} -o ${host_os} -v ${host_vendor}` + eval `${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` AC_SUBST(SHOBJ_CC) AC_SUBST(SHOBJ_CFLAGS) AC_SUBST(SHOBJ_LD) @@ -154,9 +156,20 @@ if test -f ${srcdir}/support/shobj-conf; then AC_SUBST(SHLIB_LIBVERSION) AC_SUBST(SHLIB_LIBS) AC_MSG_RESULT($SHLIB_STATUS) + + # shared library versioning + # quoted for m4 so I can use character classes + SHLIB_MAJOR=[`expr "$LIBVERSION" : '\([0-9]\)\..*'`] + SHLIB_MINOR=[`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`] + AC_SUBST(SHLIB_MAJOR) + AC_SUBST(SHLIB_MINOR) fi -BUILD_DIR=`pwd` +case "$host_os" in +msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file +*) BUILD_DIR=`pwd` ;; +esac + AC_SUBST(BUILD_DIR) AC_SUBST(CFLAGS) diff --git a/readline/display.c b/readline/display.c index 3215a94cd1b..4487004a027 100644 --- a/readline/display.c +++ b/readline/display.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -41,11 +41,6 @@ #include <stdio.h> -#if defined (__GO32__) -# include <go32.h> -# include <pc.h> -#endif /* __GO32__ */ - /* System-specific feature definitions and include files. */ #include "rldefs.h" @@ -56,48 +51,25 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "xmalloc.h" + #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ -/* Global and pseudo-global variables and functions - imported from readline.c. */ -extern char *rl_prompt; -extern int readline_echoing_p; - -extern int _rl_output_meta_chars; -extern int _rl_horizontal_scroll_mode; -extern int _rl_mark_modified_lines; -extern int _rl_prefer_visible_bell; - -/* Variables and functions imported from terminal.c */ -extern void _rl_output_some_chars (); -#ifdef _MINIX -extern void _rl_output_character_function (); -#else -extern int _rl_output_character_function (); +#if defined (HACK_TERMCAP_MOTION) +extern char *term_forward_char; #endif -extern int _rl_backspace (); - -extern char *term_clreol, *term_clrpag; -extern char *term_im, *term_ic, *term_ei, *term_DC; -extern char *term_up, *term_dc, *term_cr, *term_IC; -extern int screenheight, screenwidth, screenchars; -extern int terminal_can_insert, _rl_term_autowrap; -/* Pseudo-global functions (local to the readline library) exported - by this file. */ -void _rl_move_cursor_relative (), _rl_output_some_chars (); -void _rl_move_vert (); -void _rl_clear_to_eol (), _rl_clear_screen (); - -static void update_line (), space_to_eol (); -static void delete_chars (), insert_some_chars (); -static void cr (); +static void update_line __P((char *, char *, int, int, int, int)); +static void space_to_eol __P((int)); +static void delete_chars __P((int)); +static void insert_some_chars __P((char *, int)); +static void cr __P((void)); static int *inv_lbreaks, *vis_lbreaks; - -extern char *xmalloc (), *xrealloc (); +static int inv_lbsize, vis_lbsize; /* Heuristic used to decide whether it is faster to move from CUR to NEW by backing up or outputting a carriage return and moving forward. */ @@ -190,7 +162,7 @@ static int visible_first_line_len; /* Expand the prompt string S and return the number of visible characters in *LP, if LP is not null. This is currently more-or-less a placeholder for expansion. LIP, if non-null is a place to store the - index of the last invisible character in ther eturned string. */ + index of the last invisible character in the returned string. */ /* Current implementation: \001 (^A) start non-visible characters @@ -250,6 +222,18 @@ expand_prompt (pmt, lp, lip) return ret; } +/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from + PMT and return the rest of PMT. */ +char * +_rl_strip_prompt (pmt) + char *pmt; +{ + char *ret; + + ret = expand_prompt (pmt, (int *)NULL, (int *)NULL); + return ret; +} + /* * Expand the prompt string into the various display components, if * necessary. @@ -307,6 +291,49 @@ rl_expand_prompt (prompt) } } +/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated + arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE + and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is + increased. If the lines have already been allocated, this ensures that + they can hold at least MINSIZE characters. */ +static void +init_line_structures (minsize) + int minsize; +{ + register int n; + + if (invisible_line == 0) /* initialize it */ + { + if (line_size < minsize) + line_size = minsize; + visible_line = xmalloc (line_size); + invisible_line = xmalloc (line_size); + } + else if (line_size < minsize) /* ensure it can hold MINSIZE chars */ + { + line_size *= 2; + if (line_size < minsize) + line_size = minsize; + visible_line = xrealloc (visible_line, line_size); + invisible_line = xrealloc (invisible_line, line_size); + } + + for (n = minsize; n < line_size; n++) + { + visible_line[n] = 0; + invisible_line[n] = 1; + } + + if (vis_lbreaks == 0) + { + /* should be enough. */ + inv_lbsize = vis_lbsize = 256; + inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); + vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); + inv_lbreaks[0] = vis_lbreaks[0] = 0; + } +} + /* Basic redisplay algorithm. */ void rl_redisplay () @@ -325,19 +352,7 @@ rl_redisplay () if (invisible_line == 0) { - visible_line = xmalloc (line_size); - invisible_line = xmalloc (line_size); - for (in = 0; in < line_size; in++) - { - visible_line[in] = 0; - invisible_line[in] = 1; - } - - /* should be enough, but then again, this is just for testing. */ - inv_lbreaks = (int *)malloc (256 * sizeof (int)); - vis_lbreaks = (int *)malloc (256 * sizeof (int)); - inv_lbreaks[0] = vis_lbreaks[0] = 0; - + init_line_structures (0); rl_on_new_line (); } @@ -395,12 +410,13 @@ rl_redisplay () else { prompt_this_line++; + pmtlen = prompt_this_line - rl_display_prompt; /* temp var */ if (forced_display) { - _rl_output_some_chars (rl_display_prompt, prompt_this_line - rl_display_prompt); + _rl_output_some_chars (rl_display_prompt, pmtlen); /* Make sure we are at column zero even after a newline, regardless of the state of terminal output processing. */ - if (prompt_this_line[-2] != '\r') + if (pmtlen < 2 || prompt_this_line[-2] != '\r') cr (); } } @@ -419,11 +435,25 @@ rl_redisplay () wrap_offset = 0; } +#define CHECK_INV_LBREAKS() \ + do { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ + } \ + } while (0) + #define CHECK_LPOS() \ do { \ lpos++; \ if (lpos >= screenwidth) \ { \ + if (newlines >= (inv_lbsize - 2)) \ + { \ + inv_lbsize *= 2; \ + inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ + } \ inv_lbreaks[++newlines] = out; \ lpos = 0; \ } \ @@ -437,14 +467,13 @@ rl_redisplay () contents of the command line? */ while (lpos >= screenwidth) { -#if 0 - temp = ((newlines + 1) * screenwidth) - ((newlines == 0) ? wrap_offset : 0); -#else /* XXX - possible fix from Darin Johnson <darin@acuson.com> for prompt string with invisible characters that is longer than the screen - width. */ + width. XXX - this doesn't work right if invisible characters have + to be put on the second screen line -- it adds too much (the number + of invisible chars after the screenwidth). */ temp = ((newlines + 1) * screenwidth) + ((newlines == 0) ? wrap_offset : 0); -#endif + inv_lbreaks[++newlines] = temp; lpos -= screenwidth; } @@ -477,6 +506,7 @@ rl_redisplay () if (lpos + 4 >= screenwidth) { temp = screenwidth - lpos; + CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp; lpos = 4 - temp; } @@ -506,6 +536,7 @@ rl_redisplay () { register int temp2; temp2 = screenwidth - lpos; + CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp2; lpos = temp - temp2; while (out < newout) @@ -522,6 +553,7 @@ rl_redisplay () else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up) { line[out++] = '\0'; /* XXX - sentinel */ + CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out; lpos = 0; } @@ -546,6 +578,7 @@ rl_redisplay () } inv_botlin = lb_botlin = newlines; + CHECK_INV_LBREAKS (); inv_lbreaks[newlines+1] = out; cursor_linenum = lb_linenum; @@ -776,11 +809,17 @@ rl_redisplay () /* Swap visible and non-visible lines. */ { char *temp = visible_line; - int *itemp = vis_lbreaks; + int *itemp = vis_lbreaks, ntemp = vis_lbsize; + visible_line = invisible_line; invisible_line = temp; + vis_lbreaks = inv_lbreaks; inv_lbreaks = itemp; + + vis_lbsize = inv_lbsize; + inv_lbsize = ntemp; + rl_display_fixed = 0; /* If we are displaying on a single line, and last_lmargin is > 0, we are not displaying any invisible characters, so set visible_wrap_offset @@ -907,7 +946,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin) putc ('\r', rl_outstream); #else tputs (term_cr, 1, _rl_output_character_function); -#endif /* !__MSDOS__ */ +#endif _rl_output_some_chars (local_prompt, lendiff); _rl_last_c_pos = lendiff; } @@ -1037,6 +1076,58 @@ rl_on_new_line () return 0; } +/* Tell the update routines that we have moved onto a new line with the + prompt already displayed. Code originally from the version of readline + distributed with CLISP. */ +int +rl_on_new_line_with_prompt () +{ + int prompt_size, i, l, real_screenwidth, newlines; + char *prompt_last_line; + + /* Initialize visible_line and invisible_line to ensure that they can hold + the already-displayed prompt. */ + prompt_size = strlen (rl_prompt) + 1; + init_line_structures (prompt_size); + + /* Make sure the line structures hold the already-displayed prompt for + redisplay. */ + strcpy (visible_line, rl_prompt); + strcpy (invisible_line, rl_prompt); + + /* If the prompt contains newlines, take the last tail. */ + prompt_last_line = strrchr (rl_prompt, '\n'); + if (!prompt_last_line) + prompt_last_line = rl_prompt; + + l = strlen (prompt_last_line); + _rl_last_c_pos = l; + + /* Dissect prompt_last_line into screen lines. Note that here we have + to use the real screenwidth. Readline's notion of screenwidth might be + one less, see terminal.c. */ + real_screenwidth = screenwidth + (_rl_term_autowrap ? 0 : 1); + _rl_last_v_pos = l / real_screenwidth; + /* If the prompt length is a multiple of real_screenwidth, we don't know + whether the cursor is at the end of the last line, or already at the + beginning of the next line. Output a newline just to be safe. */ + if (l > 0 && (l % real_screenwidth) == 0) + _rl_output_some_chars ("\n", 1); + last_lmargin = 0; + + newlines = 0; i = 0; + while (i <= l) + { + _rl_vis_botlin = newlines; + vis_lbreaks[newlines++] = i; + i += real_screenwidth; + } + vis_lbreaks[newlines] = l; + visible_wrap_offset = 0; + + return 0; +} + /* Actually update the display, period. */ int rl_forced_update_display () @@ -1094,8 +1185,6 @@ _rl_move_cursor_relative (new, data) That kind of control is for people who don't know what the data is underneath the cursor. */ #if defined (HACK_TERMCAP_MOTION) - extern char *term_forward_char; - if (term_forward_char) for (i = _rl_last_c_pos; i < new; i++) tputs (term_forward_char, 1, _rl_output_character_function); @@ -1122,22 +1211,15 @@ _rl_move_vert (to) if (_rl_last_v_pos == to || to > screenheight) return; -#if defined (__GO32__) - { - int row, col; - - i = fflush (rl_outstream); /* make sure the cursor pos is current! */ - ScreenGetCursor (&row, &col); - ScreenSetCursor ((row + to - _rl_last_v_pos), col); - delta = i; - } -#else /* !__GO32__ */ - if ((delta = to - _rl_last_v_pos) > 0) { for (i = 0; i < delta; i++) putc ('\n', rl_outstream); +#if defined (__MSDOS__) + putc ('\r', rl_outstream); +#else tputs (term_cr, 1, _rl_output_character_function); +#endif _rl_last_c_pos = 0; } else @@ -1146,7 +1228,7 @@ _rl_move_vert (to) for (i = 0; i < -delta; i++) tputs (term_up, 1, _rl_output_character_function); } -#endif /* !__GO32__ */ + _rl_last_v_pos = to; /* Now TO is here */ } @@ -1354,11 +1436,9 @@ void _rl_clear_to_eol (count) int count; { -#if !defined (__GO32__) if (term_clreol) tputs (term_clreol, 1, _rl_output_character_function); else if (count) -#endif /* !__GO32__ */ space_to_eol (count); } @@ -1379,14 +1459,9 @@ space_to_eol (count) void _rl_clear_screen () { -#if defined (__GO32__) - ScreenClear (); /* FIXME: only works in text modes */ - ScreenSetCursor (0, 0); /* term_clrpag is "cl" which homes the cursor */ -#else if (term_clrpag) tputs (term_clrpag, 1, _rl_output_character_function); else -#endif /* !__GO32__ */ crlf (); } @@ -1396,21 +1471,6 @@ insert_some_chars (string, count) char *string; int count; { -#if defined (__GO32__) -#ifndef __DJGPP__ - int row, col, width; - char *row_start; - - ScreenGetCursor (&row, &col); - width = ScreenCols (); - row_start = ScreenPrimary + (row * width); - - memcpy (row_start + col + count, row_start + col, width - col - count); -#endif /* !__DJGPP__ */ - /* Place the text on the screen. */ - _rl_output_some_chars (string, count); -#else /* !_GO32 */ - /* If IC is defined, then we do not have to "enter" insert mode. */ if (term_IC) { @@ -1443,7 +1503,6 @@ insert_some_chars (string, count) if (term_ei && *term_ei) tputs (term_ei, 1, _rl_output_character_function); } -#endif /* !__GO32__ */ } /* Delete COUNT characters from the display line. */ @@ -1451,19 +1510,6 @@ static void delete_chars (count) int count; { -#if !defined (__DJGPP__) -#if defined (__GO32__) - int row, col, width; - char *row_start; - - ScreenGetCursor (&row, &col); - width = ScreenCols (); - row_start = ScreenPrimary + (row * width); - - memcpy (row_start + col, row_start + col + count, width - col - count); - memset (row_start + width - count, 0, count * 2); -#else /* !_GO32 */ - if (count > screenwidth) /* XXX */ return; @@ -1479,8 +1525,6 @@ delete_chars (count) while (count--) tputs (term_dc, 1, _rl_output_character_function); } -#endif /* !__GO32__ */ -#endif /* !__DJGPP__ */ } void @@ -1502,7 +1546,11 @@ _rl_update_final () if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == screenwidth)) { char *last_line; +#if 0 last_line = &visible_line[inv_lbreaks[_rl_vis_botlin]]; +#else + last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; +#endif _rl_move_cursor_relative (screenwidth - 1, last_line); _rl_clear_to_eol (0); putc (last_line[screenwidth - 1], rl_outstream); @@ -1523,16 +1571,47 @@ cr () putc ('\r', rl_outstream); #else tputs (term_cr, 1, _rl_output_character_function); -#endif /* !__MSDOS__ */ +#endif _rl_last_c_pos = 0; } } +/* Redraw the last line of a multi-line prompt that may possibly contain + terminal escape sequences. Called with the cursor at column 0 of the + line to draw the prompt on. */ +static void +redraw_prompt (t) + char *t; +{ + char *oldp, *oldl, *oldlprefix; + int oldlen, oldlast, oldplen; + + /* Geez, I should make this a struct. */ + oldp = rl_display_prompt; + oldl = local_prompt; + oldlprefix = local_prompt_prefix; + oldlen = visible_length; + oldplen = prefix_length; + oldlast = last_invisible; + + rl_display_prompt = t; + local_prompt = expand_prompt (t, &visible_length, &last_invisible); + local_prompt_prefix = (char *)NULL; + rl_forced_update_display (); + + rl_display_prompt = oldp; + local_prompt = oldl; + local_prompt_prefix = oldlprefix; + visible_length = oldlen; + prefix_length = oldplen; + last_invisible = oldlast; +} + /* Redisplay the current line after a SIGWINCH is received. */ void _rl_redisplay_after_sigwinch () { - char *t, *oldp, *oldl, *oldlprefix; + char *t; /* Clear the current line and put the cursor at column 0. Make sure the right thing happens if we have wrapped to a new screen line. */ @@ -1542,7 +1621,7 @@ _rl_redisplay_after_sigwinch () putc ('\r', rl_outstream); #else tputs (term_cr, 1, _rl_output_character_function); -#endif /* !__MSDOS__ */ +#endif _rl_last_c_pos = 0; #if defined (__MSDOS__) space_to_eol (screenwidth); @@ -1565,17 +1644,7 @@ _rl_redisplay_after_sigwinch () /* Redraw only the last line of a multi-line prompt. */ t = strrchr (rl_display_prompt, '\n'); if (t) - { - oldp = rl_display_prompt; - oldl = local_prompt; - oldlprefix = local_prompt_prefix; - rl_display_prompt = ++t; - local_prompt = local_prompt_prefix = (char *)NULL; - rl_forced_update_display (); - rl_display_prompt = oldp; - local_prompt = oldl; - local_prompt_prefix = oldlprefix; - } + redraw_prompt (++t); else rl_forced_update_display (); } @@ -1600,3 +1669,25 @@ _rl_erase_entire_line () cr (); fflush (rl_outstream); } + +/* return the `current display line' of the cursor -- the number of lines to + move up to get to the first screen line of the current readline line. */ +int +_rl_current_display_line () +{ + int ret, nleft; + + /* Find out whether or not there might be invisible characters in the + editing buffer. */ + if (rl_display_prompt == rl_prompt) + nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length; + else + nleft = _rl_last_c_pos - screenwidth; + + if (nleft > 0) + ret = 1 + nleft / screenwidth; + else + ret = 0; + + return ret; +} diff --git a/readline/doc/ChangeLog b/readline/doc/ChangeLog index 3c26ae543f2..995c43a18ef 100644 --- a/readline/doc/ChangeLog +++ b/readline/doc/ChangeLog @@ -1,3 +1,12 @@ +2000-07-09 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * Import of readline 4.1. + + Regenerated inc-hist.texinfo as copy of hsuser.texinfo, for + inclusion in the gdb manual. + + New file: rluserman.texinfo + Tue Apr 18 15:43:52 2000 Andrew Cagney <cagney@b1.cygnus.com> * readline.0: Delete. Generated by Makefile, deleted by distclean diff --git a/readline/doc/Makefile.in b/readline/doc/Makefile.in index 103147292d9..4a38563e46e 100644 --- a/readline/doc/Makefile.in +++ b/readline/doc/Makefile.in @@ -1,6 +1,23 @@ # This makefile for Readline library documentation is in -*- text -*- mode. # Emacs likes it that way. -top_srcdir = @top_srcdir@ + +# 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@ @@ -8,25 +25,33 @@ prefix = @prefix@ infodir = @infodir@ mandir = @mandir@ -man3dir = $(mandir)/man3 +manpfx = man + +man1ext = 1 +man1dir = $(mandir)/$(manpfx)$(man1ext) +man3ext = 3 +man3dir = $(mandir)/$(manpfx)$(man3ext) SHELL = @MAKE_SHELL@ RM = rm -f +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ + +BUILD_DIR = @BUILD_DIR@ TEXINPUTDIR = $(srcdir) -MAKEINFO = makeinfo +MAKEINFO = LANGUAGE= makeinfo TEXI2DVI = $(srcdir)/texi2dvi TEXI2HTML = $(srcdir)/texi2html QUIETPS = #set this to -q to shut up dvips -DVIPS = dvips -D 300 $(QUIETPS) -o $@ # tricky - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ +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)/rltech.texinfo $(srcdir)/manvers.texinfo \ + $(srcdir)/rluserman.texinfo HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \ $(srcdir)/hstech.texinfo $(srcdir)/manvers.texinfo @@ -36,16 +61,15 @@ NROFF = groff -Tascii # This should be a program that converts troff to postscript GROFF = groff -DVIOBJ = readline.dvi history.dvi -INFOOBJ = readline.info history.info -PSOBJ = readline.ps history.ps -HTMLOBJ = readline.html history.html -HTMLTOC = readline_toc.html history_toc.html +DVIOBJ = readline.dvi history.dvi rluserman.dvi +INFOOBJ = readline.info history.info rluserman.info +PSOBJ = readline.ps history.ps rluserman.ps +HTMLOBJ = readline.html history.html rluserman.html TEXTOBJ = readline.0 -INTERMEDIATE_OBJ = rlman.dvi hist.dvi +INTERMEDIATE_OBJ = rlman.dvi hist.dvi rluserman.dvi -CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(HTMLTOC) $(TEXTOBJ) +CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(TEXTOBJ) .SUFFIXES: .0 .3 .ps .txt .dvi @@ -63,6 +87,12 @@ readline.dvi: $(RLSRC) 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 @@ -74,18 +104,25 @@ readline.ps: readline.dvi $(RM) $@ $(DVIPS) readline.dvi +rluserman.ps: rluserman.dvi + $(RM) $@ + $(DVIPS) rluserman.dvi + history.ps: history.dvi $(RM) $@ $(DVIPS) history.dvi readline.html: ${RLSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo - sed -e 's:rlman.html:readline.html:' rlman.html > readline.html + sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html $(RM) rlman.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:' hist.html > history.html + sed -e 's:hist.html:history.html:g' hist.html > history.html $(RM) hist.html info: $(INFOOBJ) @@ -98,7 +135,7 @@ readline.0: readline.3 clean: $(RM) *.aux *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps *.pgs \ - *.fns *.kys *.tps *.vrs *.o core + *.fns *.kys *.tps *.vrs *.bt *.bts *.o core distclean: clean $(RM) $(CREATED_DOCS) @@ -112,8 +149,8 @@ maintainer-clean: clean $(RM) $(INTERMEDIATE_OBJ) $(RM) Makefile -installdirs: $(top_srcdir)/support/mkdirs - -$(SHELL) $(top_srcdir)/support/mkdirs $(infodir) $(man3dir) +installdirs: $(topdir)/support/mkdirs + -$(SHELL) $(topdir)/support/mkdirs $(infodir) $(man3dir) install: installdirs if test -f readline.info; then \ @@ -121,12 +158,17 @@ install: installdirs else \ ${INSTALL_DATA} $(srcdir)/readline.info $(infodir)/readline.info; \ fi + if test -f rluserman.info; then \ + ${INSTALL_DATA} rluserman.info $(infodir)/rluserman.info; \ + else \ + ${INSTALL_DATA} $(srcdir)/rluserman.info $(infodir)/rluserman.info; \ + fi if test -f history.info; then \ ${INSTALL_DATA} history.info $(infodir)/history.info; \ else \ ${INSTALL_DATA} $(srcdir)/history.info $(infodir)/history.info; \ fi - if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ + -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ install-info --dir-file=$(infodir)/dir $(infodir)/readline.info ; \ install-info --dir-file=$(infodir)/dir $(infodir)/history.info ; \ else true; fi @@ -134,5 +176,6 @@ install: installdirs uninstall: $(RM) $(infodir)/readline.info + $(RM) $(infodir)/rluserman.info $(RM) $(infodir)/history.info $(RM) $(man3dir)/readline.3 diff --git a/readline/doc/hist.texinfo b/readline/doc/hist.texinfo index 31a0ba0ae72..8a9c9413bc9 100644 --- a/readline/doc/hist.texinfo +++ b/readline/doc/hist.texinfo @@ -55,8 +55,8 @@ provides a consistent user interface for recalling lines of previously typed input. Published by the Free Software Foundation @* -675 Massachusetts Avenue, @* -Cambridge, MA 02139 USA +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 diff --git a/readline/doc/history.dvi b/readline/doc/history.dvi Binary files differdeleted file mode 100644 index a8b30bf92be..00000000000 --- a/readline/doc/history.dvi +++ /dev/null diff --git a/readline/doc/history.html b/readline/doc/history.html deleted file mode 100644 index d380ff4c96c..00000000000 --- a/readline/doc/history.html +++ /dev/null @@ -1,1195 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 19 January 2000 --> - -<TITLE>GNU History Library</TITLE> -</HEAD> -<BODY> -<H1>GNU History Library</H1> -<H2>Edition 4.1, for <CODE>History Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A> -<UL> -<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A> -<UL> -<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A> -<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A> -<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A> -</UL> -</UL> -<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A> -<UL> -<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A> -<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A> -<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A> -<UL> -<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A> -<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A> -<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A> -<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A> -<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A> -<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A> -<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A> -</UL> -<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A> -<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A> -</UL> -<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A> -<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A> -</UL> -<P><HR><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> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -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. - -</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 Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1> - -<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">Programming with GNU History</A>. - -</P> - -<UL> -<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user. -</UL> - - - -<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<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> - - -<UL> -<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use. -<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest. -<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution. -</UL> - - - -<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3> -<P> -<A NAME="IDX2"></A> - -</P> -<P> -An event designator is a reference to a command line entry in the -history list. -<A NAME="IDX3"></A> - -</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>. - -<DT><CODE>!<VAR>n</VAR></CODE> -<DD> -Refer to command line <VAR>n</VAR>. - -<DT><CODE>!-<VAR>n</VAR></CODE> -<DD> -Refer to the command <VAR>n</VAR> lines back. - -<DT><CODE>!!</CODE> -<DD> -Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>. - -<DT><CODE>!<VAR>string</VAR></CODE> -<DD> -Refer to the most recent command starting with <VAR>string</VAR>. - -<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. - -<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>. - -<DT><CODE>!#</CODE> -<DD> -The entire command line typed so far. - -</DL> - - - -<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3> - -<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> -<DL COMPACT> - -<DT><CODE>!!</CODE> -<DD> -designates the preceding command. When you type this, the preceding -command is repeated in toto. - -<DT><CODE>!!:$</CODE> -<DD> -designates the last argument of the preceding command. This may be -shortened to <CODE>!$</CODE>. - -<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. - -<DT><CODE><VAR>n</VAR></CODE> -<DD> -The <VAR>n</VAR>th word. - -<DT><CODE>^</CODE> -<DD> -The first argument; that is, word 1. - -<DT><CODE>$</CODE> -<DD> -The last argument. - -<DT><CODE>%</CODE> -<DD> -The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search. - -<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>. - -<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. - -<DT><CODE><VAR>x</VAR>*</CODE> -<DD> -Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> - -<DT><CODE><VAR>x</VAR>-</CODE> -<DD> -Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word. - -</DL> - -<P> -If a word designator is supplied without an event specification, the -previous command is used as the event. - -</P> - - -<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3> - -<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> -<DL COMPACT> - -<DT><CODE>h</CODE> -<DD> -Remove a trailing pathname component, leaving only the head. - -<DT><CODE>t</CODE> -<DD> -Remove all leading pathname components, leaving the tail. - -<DT><CODE>r</CODE> -<DD> -Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving -the basename. - -<DT><CODE>e</CODE> -<DD> -Remove all but the trailing suffix. - -<DT><CODE>p</CODE> -<DD> -Print the new command but do not execute it. - -<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. - -<DT><CODE>&</CODE> -<DD> -Repeat the previous substitution. - -<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>. - -</DL> - - - -<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1> - -<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">Using History Interactively</A>. - -</P> - -<UL> -<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for? -<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored. -<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use. -<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour. -<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library. -</UL> - - - -<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2> - -<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> - - -<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2> - -<P> -The history list is an array of history entries. A history entry is -declared as follows: - -</P> - -<PRE> -typedef struct _hist_entry { - char *line; - char *data; -} HIST_ENTRY; -</PRE> - -<P> -The history list itself might therefore be declared as - -</P> - -<PRE> -HIST_ENTRY **the_history_list; -</PRE> - -<P> -The state of the History library is encapsulated into a single structure: - -</P> - -<PRE> -/* A structure used to pass the current state of the history stuff around. */ -typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; -} HISTORY_STATE; -</PRE> - -<P> -If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been -stifled. - -</P> - - -<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2> - -<P> -This section describes the calling sequence for the various functions -present in GNU History. - -</P> - -<UL> -<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you - want to use history in a - program. -<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list - of history entries. -<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about - the history list. -<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position - in the history list. -<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list - for entries containing a string. -<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file - containing the history list. -<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history - expansion. -</UL> - - - -<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3> - -<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> -<DL> -<DT><U>Function:</U> void <B>using_history</B> <I>()</I> -<DD><A NAME="IDX4"></A> -Begin a session in which the history functions might be used. This -initializes the interactive variables. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>()</I> -<DD><A NAME="IDX5"></A> -Return a structure describing the current state of the input history. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I> -<DD><A NAME="IDX6"></A> -Set the state of the history list according to <VAR>state</VAR>. -</DL> - -</P> - - -<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3> - -<P> -These functions manage individual entries on the history list, or set -parameters managing the list itself. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>add_history</B> <I>(char *string)</I> -<DD><A NAME="IDX7"></A> -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> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I> -<DD><A NAME="IDX8"></A> -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> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, char *line, char *data)</I> -<DD><A NAME="IDX9"></A> -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> -<DL> -<DT><U>Function:</U> void <B>clear_history</B> <I>()</I> -<DD><A NAME="IDX10"></A> -Clear the history list by deleting all the entries. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I> -<DD><A NAME="IDX11"></A> -Stifle the history list, remembering only the last <VAR>max</VAR> entries. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>unstifle_history</B> <I>()</I> -<DD><A NAME="IDX12"></A> -Stop stifling the history. This returns the previous amount the -history was stifled. The value is positive if the history was -stifled, negative if it wasn't. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_is_stifled</B> <I>()</I> -<DD><A NAME="IDX13"></A> -Returns non-zero if the history is stifled, zero if it is not. -</DL> - -</P> - - -<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3> - -<P> -These functions return information about the entire history list or -individual list entries. - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>()</I> -<DD><A NAME="IDX14"></A> -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> -<DL> -<DT><U>Function:</U> int <B>where_history</B> <I>()</I> -<DD><A NAME="IDX15"></A> -Returns the offset of the current history element. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>()</I> -<DD><A NAME="IDX16"></A> -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> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I> -<DD><A NAME="IDX17"></A> -Return the history entry at position <VAR>offset</VAR>, starting from -<CODE>history_base</CODE>. 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> -<DL> -<DT><U>Function:</U> int <B>history_total_bytes</B> <I>()</I> -<DD><A NAME="IDX18"></A> -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> - - -<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3> - -<P> -These functions allow the current index into the history list to be -set or changed. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I> -<DD><A NAME="IDX19"></A> -Set the position in the history list to <VAR>pos</VAR>, an absolute index -into the list. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>()</I> -<DD><A NAME="IDX20"></A> -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> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>()</I> -<DD><A NAME="IDX21"></A> -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> - - -<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3> -<P> -<A NAME="IDX22"></A> - -</P> -<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="IDX23"></A> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_search</B> <I>(char *string, int direction)</I> -<DD><A NAME="IDX24"></A> -Search the history for <VAR>string</VAR>, starting at the current history -offset. If <VAR>direction</VAR> < 0, then the search is through previous entries, -else through subsequent. 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> -<DL> -<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(char *string, int direction)</I> -<DD><A NAME="IDX25"></A> -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> < 0, then the search is through previous -entries, else through subsequent. 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> -<DL> -<DT><U>Function:</U> int <B>history_search_pos</B> <I>(char *string, int direction, int pos)</I> -<DD><A NAME="IDX26"></A> -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> - - -<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3> - -<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> -<DL> -<DT><U>Function:</U> int <B>read_history</B> <I>(char *filename)</I> -<DD><A NAME="IDX27"></A> -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 errno if not. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>read_history_range</B> <I>(char *filename, int from, int to)</I> -<DD><A NAME="IDX28"></A> -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> -<DL> -<DT><U>Function:</U> int <B>write_history</B> <I>(char *filename)</I> -<DD><A NAME="IDX29"></A> -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>. Values -returned are as in <CODE>read_history ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, char *filename)</I> -<DD><A NAME="IDX30"></A> -Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(char *filename, int nlines)</I> -<DD><A NAME="IDX31"></A> -Truncate the history file <VAR>filename</VAR>, leaving only the last -<VAR>nlines</VAR> lines. -</DL> - -</P> - - -<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3> - -<P> -These functions implement <CODE>csh</CODE>-like history expansion. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I> -<DD><A NAME="IDX32"></A> -Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer -to a string (see section <A HREF="history.html#SEC2">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 de-slashifying of 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">Modifiers</A>). -</DL> - -<P> -If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive -error message. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, char *string)</I> -<DD><A NAME="IDX33"></A> -Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR> -arguments present in <VAR>string</VAR>. Arguments are broken up as in Bash. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>get_history_event</B> <I>(char *string, int *cindex, int qchar)</I> -<DD><A NAME="IDX34"></A> -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> -<DL> -<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(char *string)</I> -<DD><A NAME="IDX35"></A> -Return an array of tokens parsed out of <VAR>string</VAR>, much as the -shell might. The tokens are split on white space and on the -characters <CODE>()<>;&|$</CODE>, and shell quoting conventions are -obeyed. -</DL> - -</P> - - -<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2> - -<P> -This section describes the externally visible variables exported by -the GNU History Library. - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_base</B> -<DD><A NAME="IDX36"></A> -The logical offset of the first entry in the history list. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_length</B> -<DD><A NAME="IDX37"></A> -The number of entries currently stored in the history list. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>max_input_history</B> -<DD><A NAME="IDX38"></A> -The maximum number of history entries. This must be changed using -<CODE>stifle_history ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_expansion_char</B> -<DD><A NAME="IDX39"></A> -The character that starts a history event. The default is <SAMP>`!'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_subst_char</B> -<DD><A NAME="IDX40"></A> -The character that invokes word substitution if found at the start of -a line. The default is <SAMP>`^'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_comment_char</B> -<DD><A NAME="IDX41"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>history_no_expand_chars</B> -<DD><A NAME="IDX42"></A> -The list of characters which inhibit history expansion if found immediately -following <VAR>history_expansion_char</VAR>. The default is whitespace and -<SAMP>`='</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B> -<DD><A NAME="IDX43"></A> -The list of additional characters which can delimit a history search -string, in addition to whitespace, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of -a substring search. The default is empty. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B> -<DD><A NAME="IDX44"></A> -If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>history_inhibit_expansion_function</B> -<DD><A NAME="IDX45"></A> -This should be set to the address of a function that takes two arguments: -a <CODE>char *</CODE> (<VAR>string</VAR>) and an integer 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 NULL. -</DL> - -</P> - - -<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2> - -<P> -The following program demonstrates simple use of the GNU History Library. - -</P> - -<PRE> -main () -{ - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } -} -</PRE> - - - -<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1> -<P> -Jump to: -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_h">h</A> -<P> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="history.html#IDX23">anchored search</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="history.html#IDX2">event designators</A> -</DIR> -<H2><A NAME="cindex_h">h</A></H2> -<DIR> -<LI><A HREF="history.html#IDX3">history events</A> -<LI><A HREF="history.html#IDX1">history expansion</A> -<LI><A HREF="history.html#IDX22">History Searching</A> -</DIR> - -</P> - - -<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1> -<P> -Jump to: -<A HREF="#vindex_a">a</A> -- -<A HREF="#vindex_c">c</A> -- -<A HREF="#vindex_g">g</A> -- -<A HREF="#vindex_h">h</A> -- -<A HREF="#vindex_m">m</A> -- -<A HREF="#vindex_n">n</A> -- -<A HREF="#vindex_p">p</A> -- -<A HREF="#vindex_r">r</A> -- -<A HREF="#vindex_s">s</A> -- -<A HREF="#vindex_u">u</A> -- -<A HREF="#vindex_w">w</A> -<P> -<H2><A NAME="vindex_a">a</A></H2> -<DIR> -<LI><A HREF="history.html#IDX7">add_history</A> -<LI><A HREF="history.html#IDX30">append_history</A> -</DIR> -<H2><A NAME="vindex_c">c</A></H2> -<DIR> -<LI><A HREF="history.html#IDX10">clear_history</A> -<LI><A HREF="history.html#IDX16">current_history</A> -</DIR> -<H2><A NAME="vindex_g">g</A></H2> -<DIR> -<LI><A HREF="history.html#IDX34">get_history_event</A> -</DIR> -<H2><A NAME="vindex_h">h</A></H2> -<DIR> -<LI><A HREF="history.html#IDX33">history_arg_extract</A> -<LI><A HREF="history.html#IDX36">history_base</A> -<LI><A HREF="history.html#IDX41">history_comment_char</A> -<LI><A HREF="history.html#IDX32">history_expand</A> -<LI><A HREF="history.html#IDX39">history_expansion_char</A> -<LI><A HREF="history.html#IDX17">history_get</A> -<LI><A HREF="history.html#IDX5">history_get_history_state</A> -<LI><A HREF="history.html#IDX45">history_inhibit_expansion_function</A> -<LI><A HREF="history.html#IDX13">history_is_stifled</A> -<LI><A HREF="history.html#IDX37">history_length</A> -<LI><A HREF="history.html#IDX14">history_list</A> -<LI><A HREF="history.html#IDX42">history_no_expand_chars</A> -<LI><A HREF="history.html#IDX44">history_quotes_inhibit_expansion</A> -<LI><A HREF="history.html#IDX24">history_search</A> -<LI><A HREF="history.html#IDX43">history_search_delimiter_chars</A> -<LI><A HREF="history.html#IDX26">history_search_pos</A> -<LI><A HREF="history.html#IDX25">history_search_prefix</A> -<LI><A HREF="history.html#IDX6">history_set_history_state</A> -<LI><A HREF="history.html#IDX19">history_set_pos</A> -<LI><A HREF="history.html#IDX40">history_subst_char</A> -<LI><A HREF="history.html#IDX35">history_tokenize</A> -<LI><A HREF="history.html#IDX18">history_total_bytes</A> -<LI><A HREF="history.html#IDX31">history_truncate_file</A> -</DIR> -<H2><A NAME="vindex_m">m</A></H2> -<DIR> -<LI><A HREF="history.html#IDX38">max_input_history</A> -</DIR> -<H2><A NAME="vindex_n">n</A></H2> -<DIR> -<LI><A HREF="history.html#IDX21">next_history</A> -</DIR> -<H2><A NAME="vindex_p">p</A></H2> -<DIR> -<LI><A HREF="history.html#IDX20">previous_history</A> -</DIR> -<H2><A NAME="vindex_r">r</A></H2> -<DIR> -<LI><A HREF="history.html#IDX27">read_history</A> -<LI><A HREF="history.html#IDX28">read_history_range</A> -<LI><A HREF="history.html#IDX8">remove_history</A> -<LI><A HREF="history.html#IDX9">replace_history_entry</A> -</DIR> -<H2><A NAME="vindex_s">s</A></H2> -<DIR> -<LI><A HREF="history.html#IDX11">stifle_history</A> -</DIR> -<H2><A NAME="vindex_u">u</A></H2> -<DIR> -<LI><A HREF="history.html#IDX12">unstifle_history</A> -<LI><A HREF="history.html#IDX4">using_history</A> -</DIR> -<H2><A NAME="vindex_w">w</A></H2> -<DIR> -<LI><A HREF="history.html#IDX15">where_history</A> -<LI><A HREF="history.html#IDX29">write_history</A> -</DIR> - -</P> -<P><HR><P> -This document was generated on 19 January 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/readline/doc/history.info b/readline/doc/history.info deleted file mode 100644 index e73cd631cca..00000000000 --- a/readline/doc/history.info +++ /dev/null @@ -1,811 +0,0 @@ -This is Info file history.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* History: (history). The GNU history library API -END-INFO-DIR-ENTRY - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - - Copyright (C) 1988-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: history.info, Node: Top, Next: Using History Interactively, Up: (dir) - -GNU History Library -******************* - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - -* Menu: - -* Using History Interactively:: GNU History User's Manual. -* Programming with GNU History:: GNU History Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top - -Using History Interactively -*************************** - - This chapter describes how to use the GNU History Library -interactively, from a user's standpoint. It should be considered a -user's guide. For information on using the GNU History Library in your -own programs, *note Programming with GNU History::.. - -* Menu: - -* History Interaction:: What it feels like using History as a user. - - -File: history.info, Node: History Interaction, Up: Using History Interactively - -History Expansion -================= - - The History library provides a history expansion feature that is -similar to the history expansion provided by `csh'. This section -describes the syntax used to manipulate the history information. - - History expansions introduce words from the history list into the -input stream, making it easy to repeat commands, insert the arguments -to a previous command into the current input line, or fix errors in -previous commands quickly. - - History expansion takes place in two parts. The first is to -determine which line from the history list should be used during -substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the history is -called the "event", and the portions of that line that are acted upon -are called "words". Various "modifiers" are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several words surrounded by quotes are -considered one word. History expansions are introduced by the -appearance of the history expansion character, which is `!' by default. - -* Menu: - -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of substitution. - - -File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction - -Event Designators ------------------ - - An event designator is a reference to a command line entry in the -history list. - -`!' - Start a history substitution, except when followed by a space, tab, - the end of the line, `=' or `('. - -`!N' - Refer to command line N. - -`!-N' - Refer to the command N lines back. - -`!!' - Refer to the previous command. This is a synonym for `!-1'. - -`!STRING' - Refer to the most recent command starting with STRING. - -`!?STRING[?]' - Refer to the most recent command containing STRING. The trailing - `?' may be omitted if the STRING is followed immediately by a - newline. - -`^STRING1^STRING2^' - Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. - -`!#' - The entire command line typed so far. - - -File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction - -Word Designators ----------------- - - Word designators are used to select desired words from the event. A -`:' separates the event specification from the word designator. It may -be omitted if the word designator begins with a `^', `$', `*', `-', or -`%'. Words are numbered from the beginning of the line, with the first -word being denoted by 0 (zero). Words are inserted into the current -line separated by single spaces. - - For example, - -`!!' - designates the preceding command. When you type this, the - preceding command is repeated in toto. - -`!!:$' - designates the last argument of the preceding command. This may be - shortened to `!$'. - -`!fi:2' - designates the second argument of the most recent command starting - with the letters `fi'. - - Here are the word designators: - -`0 (zero)' - The `0'th word. For many applications, this is the command word. - -`N' - The Nth word. - -`^' - The first argument; that is, word 1. - -`$' - The last argument. - -`%' - The word matched by the most recent `?STRING?' search. - -`X-Y' - A range of words; `-Y' abbreviates `0-Y'. - -`*' - All of the words, except the `0'th. This is a synonym for `1-$'. - It is not an error to use `*' if there is just one word in the - event; the empty string is returned in that case. - -`X*' - Abbreviates `X-$' - -`X-' - Abbreviates `X-$' like `X*', but omits the last word. - - If a word designator is supplied without an event specification, the -previous command is used as the event. - - -File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction - -Modifiers ---------- - - After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a `:'. - -`h' - Remove a trailing pathname component, leaving only the head. - -`t' - Remove all leading pathname components, leaving the tail. - -`r' - Remove a trailing suffix of the form `.SUFFIX', leaving the - basename. - -`e' - Remove all but the trailing suffix. - -`p' - Print the new command but do not execute it. - -`s/OLD/NEW/' - Substitute NEW for the first occurrence of OLD in the event line. - Any delimiter may be used in place of `/'. The delimiter may be - quoted in OLD and NEW with a single backslash. If `&' appears in - NEW, it is replaced by OLD. A single backslash will quote the - `&'. The final delimiter is optional if it is the last character - on the input line. - -`&' - Repeat the previous substitution. - -`g' - Cause changes to be applied over the entire event line. Used in - conjunction with `s', as in `gs/OLD/NEW/', or with `&'. - - -File: history.info, Node: Programming with GNU History, Next: Concept Index, Prev: Using History Interactively, Up: Top - -Programming with GNU History -**************************** - - This chapter describes how to interface programs that you write with -the GNU History Library. It should be considered a technical guide. -For information on the interactive use of GNU History, *note Using -History Interactively::.. - -* Menu: - -* Introduction to History:: What is the GNU History library for? -* History Storage:: How information is stored. -* History Functions:: Functions that you can use. -* History Variables:: Variables that control behaviour. -* History Programming Example:: Example of using the GNU History Library. - - -File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History - -Introduction to History -======================= - - Many programs read input from the user a line at a time. The GNU -History library is able to keep track of those lines, associate -arbitrary data with each line, and utilize information from previous -lines in composing new ones. - - The programmer using the History library has available functions for -remembering lines on a history list, associating arbitrary data with a -line, removing lines from the list, searching through the list for a -line containing an arbitrary text string, and referencing any line in -the list directly. In addition, a history "expansion" function is -available which provides for a consistent user interface across -different programs. - - The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by `csh'. - - If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - - Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file `<readline/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 struct _hist_entry { - char *line; - char *data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - HIST_ENTRY **the_history_list; - - The state of the History library is encapsulated into a single -structure: - - /* A structure used to pass the current state of the history stuff around. */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes `HS_STIFLED', the history has been -stifled. - - -File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History - -History Functions -================= - - This section describes the calling sequence for the various functions -present in GNU History. - -* Menu: - -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. - - -File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions - -Initializing History and State Management ------------------------------------------ - - This section describes functions used to initialize and manage the -state of the History library when you want to use the history functions -in your program. - - - Function: void using_history () - Begin a session in which the history functions might be used. This - initializes the interactive variables. - - - Function: HISTORY_STATE * history_get_history_state () - Return a structure describing the current state of the input - history. - - - Function: void history_set_history_state (HISTORY_STATE *state) - Set the state of the history list according to STATE. - - -File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions - -History List Management ------------------------ - - These functions manage individual entries on the history list, or set -parameters managing the list itself. - - - Function: void add_history (char *string) - Place STRING at the end of the history list. The associated data - field (if any) is set to `NULL'. - - - Function: HIST_ENTRY * remove_history (int which) - Remove history entry at offset WHICH from the history. The - removed element is returned so you can free the line, data, and - containing structure. - - - Function: HIST_ENTRY * replace_history_entry (int which, char *line, - char *data) - Make the history entry at offset WHICH have LINE and DATA. This - returns the old entry so you can dispose of the data. In the case - of an invalid WHICH, a `NULL' pointer is returned. - - - Function: void clear_history () - Clear the history list by deleting all the entries. - - - Function: void stifle_history (int max) - Stifle the history list, remembering only the last MAX entries. - - - Function: int unstifle_history () - Stop stifling the history. This returns the previous amount the - history was stifled. The value is positive if the history was - stifled, negative if it wasn't. - - - Function: int history_is_stifled () - Returns non-zero if the history is stifled, zero if it is not. - - -File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions - -Information About the History List ----------------------------------- - - These functions return information about the entire history list or -individual list entries. - - - Function: HIST_ENTRY ** history_list () - Return a `NULL' terminated array of `HIST_ENTRY' which is the - current input history. Element 0 of this list is the beginning of - time. If there is no history, return `NULL'. - - - Function: int where_history () - Returns the offset of the current history element. - - - Function: HIST_ENTRY * current_history () - Return the history entry at the current position, as determined by - `where_history ()'. If there is no entry there, return a `NULL' - pointer. - - - Function: HIST_ENTRY * history_get (int offset) - Return the history entry at position OFFSET, starting from - `history_base'. If there is no entry there, or if OFFSET is - greater than the history length, return a `NULL' pointer. - - - Function: int history_total_bytes () - Return the number of bytes that the primary history entries are - using. This function returns the sum of the lengths of all the - lines in the history. - - -File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions - -Moving Around the History List ------------------------------- - - These functions allow the current index into the history list to be -set or changed. - - - Function: int history_set_pos (int pos) - Set the position in the history list to POS, an absolute index - into the list. - - - Function: HIST_ENTRY * previous_history () - Back up the current history offset to the previous history entry, - and return a pointer to that entry. If there is no previous - entry, return a `NULL' pointer. - - - Function: HIST_ENTRY * next_history () - Move the current history offset forward to the next history entry, - and return the a pointer to that entry. If there is no next - entry, return a `NULL' pointer. - - -File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions - -Searching the History List --------------------------- - - These functions allow searching of the history list for entries -containing a specific string. Searching may be performed both forward -and backward from the current history position. The search may be -"anchored", meaning that the string must match at the beginning of the -history entry. - - - Function: int history_search (char *string, int direction) - Search the history for STRING, starting at the current history - offset. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that history entry, and the value - returned is the offset in the line of the entry where STRING was - found. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_prefix (char *string, int direction) - Search the history for STRING, starting at the current history - offset. The search is anchored: matching lines must begin with - STRING. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that entry, and the return value - is 0. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_pos (char *string, int direction, int - pos) - Search for STRING in the history list, starting at POS, an - absolute index into the list. If DIRECTION is negative, the search - proceeds backward from POS, otherwise forward. Returns the - absolute index of the history element where STRING was found, or - -1 otherwise. - - -File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions - -Managing the History File -------------------------- - - The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - - - Function: int read_history (char *filename) - Add the contents of FILENAME to the history list, a line at a - time. If FILENAME is `NULL', then read from `~/.history'. - Returns 0 if successful, or errno if not. - - - Function: int read_history_range (char *filename, int from, int to) - Read a range of lines from FILENAME, adding them to the history - list. Start reading at line FROM and end at TO. If FROM is zero, - start at the beginning. If TO is less than FROM, then read until - the end of the file. If FILENAME is `NULL', then read from - `~/.history'. Returns 0 if successful, or `errno' if not. - - - Function: int write_history (char *filename) - Write the current history to FILENAME, overwriting FILENAME if - necessary. If FILENAME is `NULL', then write the history list to - `~/.history'. Values returned are as in `read_history ()'. - - - Function: int append_history (int nelements, char *filename) - Append the last NELEMENTS of the history list to FILENAME. - - - Function: int history_truncate_file (char *filename, int nlines) - Truncate the history file FILENAME, leaving only the last NLINES - lines. - - -File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions - -History Expansion ------------------ - - These functions implement `csh'-like history expansion. - - - Function: int history_expand (char *string, char **output) - Expand STRING, placing the result into OUTPUT, a pointer to a - string (*note History Interaction::.). Returns: - `0' - If no expansions took place (or, if the only change in the - text was the de-slashifying of the history expansion - character); - - `1' - if expansions did take place; - - `-1' - if there was an error in expansion; - - `2' - if the returned line should be displayed, but not executed, - as with the `:p' modifier (*note Modifiers::.). - - If an error ocurred in expansion, then OUTPUT contains a - descriptive error message. - - - Function: char * history_arg_extract (int first, int last, char - *string) - Extract a string segment consisting of the FIRST through LAST - arguments present in STRING. Arguments are broken up as in Bash. - - - Function: char * get_history_event (char *string, int *cindex, int - qchar) - Returns the text of the history event beginning at STRING + - *CINDEX. *CINDEX is modified to point to after the event - specifier. At function entry, CINDEX points to the index into - STRING where the history event specification begins. QCHAR is a - character that is allowed to end the event specification in - addition to the "normal" terminating characters. - - - Function: char ** history_tokenize (char *string) - Return an array of tokens parsed out of STRING, much as the shell - might. The tokens are split on white space and on the characters - `()<>;&|$', and shell quoting conventions are obeyed. - - -File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History - -History Variables -================= - - This section describes the externally visible variables exported by -the GNU History Library. - - - Variable: int history_base - The logical offset of the first entry in the history list. - - - Variable: int history_length - The number of entries currently stored in the history list. - - - Variable: int max_input_history - The maximum number of history entries. This must be changed using - `stifle_history ()'. - - - Variable: char history_expansion_char - The character that starts a history event. The default is `!'. - - - Variable: char history_subst_char - The character that invokes word substitution if found at the start - of a line. The default is `^'. - - - Variable: char history_comment_char - During tokenization, if this character is seen as the first - character of a word, then it and all subsequent characters up to a - newline are ignored, suppressing history expansion for the - remainder of the line. This is disabled by default. - - - Variable: char * history_no_expand_chars - The list of characters which inhibit history expansion if found - immediately following HISTORY_EXPANSION_CHAR. The default is - whitespace and `='. - - - Variable: char * history_search_delimiter_chars - The list of additional characters which can delimit a history - search string, in addition to whitespace, `:' and `?' in the case - of a substring search. The default is empty. - - - Variable: int history_quotes_inhibit_expansion - If non-zero, single-quoted words are not scanned for the history - expansion character. The default value is 0. - - - Variable: Function * history_inhibit_expansion_function - This should be set to the address of a function that takes two - arguments: a `char *' (STRING) and an integer index into that - string (I). It should return a non-zero value if the history - expansion starting at STRING[I] should not be performed; zero if - the expansion should be done. It is intended for use by - applications like Bash that use the history expansion character - for additional purposes. By default, this variable is set to NULL. - - -File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History - -History Programming Example -=========================== - - The following program demonstrates simple use of the GNU History -Library. - - main () - { - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } - } - - -File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top - -Concept Index -************* - -* Menu: - -* anchored search: Searching the History List. -* event designators: Event Designators. -* history events: Event Designators. -* history expansion: History Interaction. -* History Searching: Searching the History List. - - -File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* add_history: History List Management. -* append_history: Managing the History File. -* clear_history: History List Management. -* current_history: Information About the History List. -* get_history_event: History Expansion. -* history_arg_extract: History Expansion. -* history_base: History Variables. -* history_comment_char: History Variables. -* history_expand: History Expansion. -* history_expansion_char: History Variables. -* history_get: Information About the History List. -* history_get_history_state: Initializing History and State Management. -* history_inhibit_expansion_function: History Variables. -* history_is_stifled: History List Management. -* history_length: History Variables. -* history_list: Information About the History List. -* history_no_expand_chars: History Variables. -* history_quotes_inhibit_expansion: History Variables. -* history_search: Searching the History List. -* history_search_delimiter_chars: History Variables. -* history_search_pos: Searching the History List. -* history_search_prefix: Searching the History List. -* history_set_history_state: Initializing History and State Management. -* history_set_pos: Moving Around the History List. -* history_subst_char: History Variables. -* history_tokenize: History Expansion. -* history_total_bytes: Information About the History List. -* history_truncate_file: Managing the History File. -* max_input_history: History Variables. -* next_history: Moving Around the History List. -* previous_history: Moving Around the History List. -* read_history: Managing the History File. -* read_history_range: Managing the History File. -* remove_history: History List Management. -* replace_history_entry: History List Management. -* stifle_history: History List Management. -* unstifle_history: History List Management. -* using_history: Initializing History and State Management. -* where_history: Information About the History List. -* write_history: Managing the History File. - - - -Tag Table: -Node: Top1162 -Node: Using History Interactively1742 -Node: History Interaction2250 -Node: Event Designators3669 -Node: Word Designators4596 -Node: Modifiers6225 -Node: Programming with GNU History7363 -Node: Introduction to History8089 -Node: History Storage9774 -Node: History Functions10867 -Node: Initializing History and State Management11838 -Node: History List Management12630 -Node: Information About the History List14151 -Node: Moving Around the History List15457 -Node: Searching the History List16342 -Node: Managing the History File18174 -Node: History Expansion19680 -Node: History Variables21519 -Node: History Programming Example23837 -Node: Concept Index26441 -Node: Function and Variable Index26927 - -End Tag Table diff --git a/readline/doc/history.ps b/readline/doc/history.ps deleted file mode 100644 index abd781068ef..00000000000 --- a/readline/doc/history.ps +++ /dev/null @@ -1,1636 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 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 2000.01.19:1217 -%%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/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end 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/IE 256 array N 2 string 0 1 255{IE 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 cmsl9 9 1 -/Fd 1 47 df<1270A212F0126004047D830B>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 24 -/Fh 24 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<1338137CA2136C13EEA313 -C6A2EA01C7A438038380A4380701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83 -FE387F01FC171E7F9D1A>65 D<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0EA3 -90C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E001CA51400A2EB03 -80A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<38FF83FEA3381C00 -70AA381FFFF0A3381C0070AB38FF83FEA3171E7F9D1A>72 D<B51280A33801C000B3A6B5 -1280A3111E7C9D1A>I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213 -301338A21318131CA2130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>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<EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA512 -70A2007813707E381F01F0380FFFE0000313C03800FE0014157D941A>99 -D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2 -EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<12FEA3120EA6133EEBFF80000F -13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I< -EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>110 -D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0 -EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F81F838FF8FFC38 -7F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>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 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -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 cmbx12 17.28 36 -/Fk 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: Fl cmsy10 10.95 1 -/Fl 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmbx12 14.4 45 -/Fm 45 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<D8FFFE92383FFF80A26D5D0003EFE000A2D9 -BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC13 -1CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700 -A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>77 -D<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180 -1380147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1F -F1150F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA8 -35>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC150316F8ED -07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>80 -D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC0 -90B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503923801FC1CB538F0 -00FEEE7FF8EE0FE02F297EA832>82 D<9038FF80600003EBF0E0000F13F8381F80FD383F -001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE -80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C1307 -6C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I<B500F0EBFFFEA3 -D803FCC7EA0380B3AA0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB5 -5A01001480DA1FFCC7FC2F297EA834>85 D<B500F0EB7FFFA3D803FEC7EA01C00001ED03 -80A26D14076C16006E5B017F140E80013F5CA26E133C011F14386E1378010F1470800107 -5CA26D6C485AA2ECFE0301015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA2 -6E5AA36E5AA26E5AA230297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000 -A26D6D7E000160A26D6E13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2 -913AE00E1FE00F011F160E17F09126F01C0F131E010F161C033C13F8902707F838075BA2 -037813FC902703FC70035BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA3 -6EC76CC8FCA2023E80021E141EA242297FA845>I<3803FF80000F13F0381F01FC383F80 -FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E -13DF393F839FFC381FFE0F3803FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EF -FF809038FE07E09038F803F09038F001F89038E000FCA2157EA2157FA8157EA315FCA290 -38F001F89038F803F090389C0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801 -FFFC3803F03E380FC07FEA1F80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB -03801380001FEB0700380FE00E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A3 -1407ACEB3F873801FFF73807F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27E -A2381F800F380FC01F3907E07FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF0 -3803E07C380F803E001F7F130048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127E -A2127F6CEB01C07E390F8003803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I< -EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A338 -7FFF80A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003E -EB3E10007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC12 -38A2123C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007C -EB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC -147E9038E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA320 -2A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120F -B3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108 -D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200 -01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1 -FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25 ->I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB03F0A300 -FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907F07F003801FFFC38003F -E01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC -140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80 -9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13 -D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78 -00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC -130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0 -A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801 -FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF -3801FFC738007F87201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0 -A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5A -A26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8 -EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F14 -38EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I< -39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A -130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F -39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EB -FC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D -5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmtt10 10.95 75 -/Fn 75 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<B512F8A3381C0038 -A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>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<EAFFC0A31201B3A4B51280A3111C7D9B18>108 D<38F9C1C038FFF7F013FF383E3E -38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13 -C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0F -FE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C0780EA3E -0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E01380EB00 -70120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C -5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2 -EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38 -FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I< -EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE0 -03A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA23803 -8000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E -07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8 -007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A213701514 -7F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380 -A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039E -EA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F800 -7F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2 -EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC -121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485A -EA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB780013E0 -AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>I<126012 -F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0 -005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA -60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmr10 10.95 75 -/Fo 75 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<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>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<90380FE01090 -38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814 -00A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E002309038380C -1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF8 -1D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<3807FFC038003E00131EB3A3 -122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E17>I<EAFFF8EA0F8090C7FC -B21402A414061404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2 -D805C0130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB -0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003 -E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F014 -78A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB703838 -01C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F814 -7CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C1480390380070038 -01E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580 -A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48 -487E39070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147C -A900781478007C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017 -003801D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E -9F23>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A2 -80143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F040 -380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC0007 -1380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA -81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410 -A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB -01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F8000 -F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804A2 -6D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF03B -1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F014 -10D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D00 -0F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0B3 -B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB85CEAFC -7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<12081210 -1220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 D<EA1FE0EA3030EA781813 -1CEA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83C0 -14147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6 -147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA1C -0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F811147F -9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270A2 -1238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB03 -8012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<13 -7CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803 -E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA -3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC0014 -1F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F -19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA -00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I< -121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C -131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F -0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021 -147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8 -EA070E381C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C0380 -38070E00EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478 -A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801 -F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA07 -09EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFF -C00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA -003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120E -A2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA -1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380 -A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF -9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A23903886100 -1471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03 -C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA -060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13 -C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF0 -80A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00 -E0120113C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314> -I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmbx12 20.736 13 -/Fp 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 693 a Fp(GNU)33 b(History)f(Library)p 75 743 -1800 17 v 960 791 a Fo(Edition)16 b(4.1,)e(for)h Fn(History)f(Library)g -Fo(V)l(ersion)i(4.1.)1609 845 y(Jan)o(uary)f(2000)75 -2467 y Fm(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 -b(Soft)n(w)n(are)f(F)-6 b(oundation)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 250 a Fo(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 305 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 -373 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 427 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -482 y(Boston,)d(MA)h(02111)f(USA)75 549 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 604 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 671 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 726 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 781 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 -848 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 903 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 958 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 Fl(\015)i Fo(1988-1999)e(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 Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(1)75 183 y Fk(1)41 b(Using)26 b(History)h(In)n(teractiv)n -(ely)137 317 y Fo(This)16 b(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h -(use)g(the)g(GNU)g(History)g(Library)h(in)o(teractiv)o(ely)l(,)g(from)e -(a)h(user's)75 372 y(standp)q(oin)o(t.)35 b(It)20 b(should)g(b)q(e)h -(considered)h(a)d(user's)h(guide.)35 b(F)l(or)19 b(information)h(on)g -(using)h(the)f(GNU)75 427 y(History)d(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 482 y(page)e(5.)75 625 y Fm(1.1)33 b(History)22 b(Expansion)137 -727 y Fo(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 -782 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fn(csh)p Fo(.)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 836 y(information.)137 -909 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 -964 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 -1019 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f -(quic)o(kly)l(.)137 1092 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 1147 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 1202 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 1256 y Fj(ev)o(en)o(t)p -Fo(,)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 Fo(.)i(V)l(arious)c -Fj(mo)q(di\014ers)75 1311 y Fo(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 1366 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 1421 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 1475 -y(whic)o(h)d(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)75 -1599 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137 -1701 y Fo(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 -1789 y Fn(!)216 b Fo(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 -1844 y(the)e(line,)i(`)p Fn(=)p Fo(')d(or)h(`)p Fn(\()p -Fo('.)75 1929 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i -Fj(n)p Fo(.)75 2015 y Fn(!-)p Fj(n)167 b Fo(Refer)16 -b(to)e(the)i(command)f Fj(n)g Fo(lines)i(bac)o(k.)75 -2100 y Fn(!!)192 b Fo(Refer)16 b(to)e(the)i(previous)f(command.)20 -b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fn(!-1)p Fo('.)75 -2186 y Fn(!)p Fj(string)102 b Fo(Refer)16 b(to)e(the)i(most)e(recen)o -(t)h(command)g(starting)g(with)g Fj(string)p Fo(.)75 -2271 y Fn(!?)p Fj(string)t Fn([?])315 2326 y Fo(Refer)i(to)f(the)h -(most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p -Fo(.)25 b(The)17 b(trailing)g(`)p Fn(?)p Fo(')f(ma)o(y)g(b)q(e)315 -2381 y(omitted)f(if)h(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f -(immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fn(^)p -Fj(string1)t Fn(^)p Fj(string2)t Fn(^)315 2521 y Fo(Quic)o(k)i -(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h -Fj(string1)i Fo(with)e Fj(string2)p Fo(.)315 2576 y(Equiv)m(alen)o(t)g -(to)d Fn(!!:s/)p Fj(string1)t Fn(/)p Fj(string2)t Fn(/)p -Fo(.)75 2661 y Fn(!#)192 b Fo(The)15 b(en)o(tire)h(command)f(line)i(t)o -(yp)q(ed)f(so)e(far.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fo(2)1347 b(GNU)15 b(History)g(Library)75 -183 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279 -y Fo(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 Fn(:)p -Fo(')e(separates)h(the)75 334 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 389 y(b)q(egins)f(with)g -(a)e(`)p Fn(^)p Fo(',)h(`)p Fn($)p Fo(',)f(`)p Fn(*)p -Fo(',)g(`)p Fn(-)p Fo(',)g(or)h(`)p Fn(\045)p Fo('.)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 444 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 498 y(separated)c(b)o(y)g(single) -i(spaces.)137 574 y(F)l(or)e(example,)75 653 y Fn(!!)192 -b Fo(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 -708 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 787 y Fn(!!:$)144 -b Fo(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 -842 y(to)j Fn(!$)p Fo(.)75 921 y Fn(!fi:2)120 b Fo(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 976 y(letters)g Fn(fi)p Fo(.)137 -1055 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1134 -y Fn(0)h(\(zero\))57 b Fo(The)15 b Fn(0)p Fo(th)g(w)o(ord.)20 -b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g(the)f(command)g(w)o -(ord.)75 1214 y Fj(n)215 b Fo(The)15 b Fj(n)p Fo(th)h(w)o(ord.)75 -1293 y Fn(^)216 b Fo(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o -(ord)g(1.)75 1372 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)75 -1451 y Fn(\045)216 b Fo(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g -(most)g(recen)o(t)g(`)p Fn(?)p Fj(string)t Fn(?)p Fo(')f(searc)o(h.)75 -1530 y Fj(x)p Fn(-)p Fj(y)168 b Fo(A)15 b(range)g(of)g(w)o(ords;)f(`)p -Fn(-)p Fj(y)t Fo(')g(abbreviates)i(`)p Fn(0-)p Fj(y)t -Fo('.)75 1610 y Fn(*)216 b Fo(All)15 b(of)f(the)f(w)o(ords,)g(except)i -(the)f Fn(0)p Fo(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p -Fn(1-$)p Fo('.)18 b(It)c(is)g(not)g(an)g(error)315 1664 -y(to)g(use)h(`)p Fn(*)p Fo(')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 1719 y(that)f(case.)75 1798 y Fj(x)s Fn(*)189 -b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')75 1878 -y Fj(x)p Fn(-)192 b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p -Fo(')e(lik)o(e)i(`)p Fj(x)s Fn(*)p Fo(',)e(but)i(omits)f(the)g(last)g -(w)o(ord.)137 1957 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 2012 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 -2123 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2219 y Fo(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 -2274 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p -Fn(:)p Fo('.)75 2353 y Fn(h)216 b Fo(Remo)o(v)o(e)15 -b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the) -f(head.)75 2432 y Fn(t)216 b Fo(Remo)o(v)o(e)15 b(all)h(leading)h -(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75 -2512 y Fn(r)216 b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g -(the)g(form)g(`)p Fn(.)p Fj(su\016x)s Fo(',)f(lea)o(ving)i(the)f -(basename.)75 2591 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f -(trailing)h(su\016x.)75 2670 y Fn(p)216 b Fo(Prin)o(t)15 -b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)p -eop -%%Page: 3 5 -3 4 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(3)75 183 y Fn(s/)p Fj(old)r Fn(/)p Fj(new)t -Fn(/)315 238 y Fo(Substitute)17 b Fj(new)j Fo(for)c(the)h(\014rst)e(o)q -(ccurrence)j(of)e Fj(old)i Fo(in)f(the)g(ev)o(en)o(t)f(line.)25 -b(An)o(y)16 b(delimiter)315 293 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g -(of)f(`)p Fn(/)p Fo('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h -(quoted)f(in)i Fj(old)g Fo(and)f Fj(new)k Fo(with)12 -b(a)315 348 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p -Fn(&)p Fo(')e(app)q(ears)h(in)h Fj(new)p Fo(,)f(it)g(is)h(replaced)g(b) -o(y)f Fj(old)p Fo(.)20 b(A)14 b(single)i(bac)o(kslash)315 -402 y(will)j(quote)e(the)h(`)p Fn(&)p Fo('.)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 457 y(the)e(input)h(line.)75 537 y -Fn(&)216 b Fo(Rep)q(eat)16 b(the)f(previous)h(substitution.)75 -617 y Fn(g)216 b Fo(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 671 y(with)c(`)p Fn(s)p Fo(',)d(as)i(in)h -Fn(gs/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)p Fo(,)f(or)g(with)g(`)p -Fn(&)p Fo('.)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fo(4)1347 b(GNU)15 b(History)g(Library)p -eop -%%Page: 5 7 -5 6 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(5)75 183 y Fk(2)41 b(Programming)28 b(with)e(GNU)i -(History)137 282 y Fo(This)16 b(c)o(hapter)e(describ)q(es)j(ho)o(w)d -(to)g(in)o(terface)h(programs)e(that)h(y)o(ou)h(write)g(with)g(the)g -(GNU)f(History)75 337 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 -391 y(of)e(GNU)g(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 Fm(2.1)33 -b(In)n(tro)r(duction)24 b(to)e(History)137 602 y Fo(Man)o(y)c(programs) -g(read)h(input)g(from)f(the)h(user)g(a)f(line)j(at)d(a)g(time.)31 -b(The)19 b(GNU)g(History)f(library)75 656 y(is)k(able)g(to)e(k)o(eep)i -(trac)o(k)e(of)h(those)g(lines,)j(asso)q(ciate)d(arbitrary)g(data)f -(with)i(eac)o(h)f(line,)j(and)e(utilize)75 711 y(information)15 -b(from)g(previous)h(lines)h(in)f(comp)q(osing)f(new)h(ones.)137 -775 y(The)e(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 -830 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 884 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 939 y(the)c(list)i(directly)l(.)22 -b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fo(function)h(is)e -(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75 -994 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g -(programs.)137 1058 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 1112 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 1167 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 1222 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o -(vided)g(b)o(y)g Fn(csh)p Fo(.)137 1286 y(If)f(the)g(programmer)f -(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f -(includes)j(some)c(history)75 1340 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 1404 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 1459 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should) -i(include)g(the)f(\014le)g Fn(<readline/history.h>)d -Fo(in)j(an)o(y)f(\014le)75 1513 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 1568 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 1686 y Fm(2.2)33 b(History)22 -b(Storage)137 1778 y Fo(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 1839 y Fn(typedef)23 -b(struct)g(_hist_entry)f({)243 1891 y(char)h(*line;)243 -1943 y(char)g(*data;)195 1995 y(})h(HIST_ENTRY;)137 2058 -y Fo(The)16 b(history)f(list)h(itself)g(migh)o(t)f(therefore)g(b)q(e)h -(declared)g(as)195 2119 y Fn(HIST_ENTRY)22 b(**the_history_list;)137 -2183 y Fo(The)16 b(state)e(of)h(the)g(History)g(library)h(is)g -(encapsulated)g(in)o(to)f(a)g(single)i(structure:)195 -2243 y Fn(/*)24 b(A)f(structure)g(used)g(to)h(pass)f(the)h(current)f -(state)g(of)g(the)h(history)f(stuff)g(around.)g(*/)p -2033 2253 21 42 v 195 2295 a(typedef)g(struct)g(_hist_state)f({)243 -2347 y(HIST_ENTRY)g(**entries;)214 b(/*)23 b(Pointer)g(to)h(the)f -(entries)g(themselves.)f(*/)243 2399 y(int)h(offset;)453 -b(/*)23 b(The)h(location)e(pointer)h(within)g(this)h(array.)f(*/)p -2033 2409 V 243 2451 a(int)g(length;)453 b(/*)23 b(Number)g(of)h -(elements)f(within)g(this)g(array.)g(*/)p 1985 2461 V -243 2503 a(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f(allocated)g -(to)g(this)h(array.)f(*/)p 2057 2513 V 243 2555 a(int)g(flags;)195 -2606 y(})h(HISTORY_STATE;)137 2670 y Fo(If)16 b(the)f(\015ags)g(mem)o -(b)q(er)g(includes)j Fn(HS_STIFLED)p Fo(,)13 b(the)i(history)h(has)f(b) -q(een)h(sti\015ed.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fo(6)1347 b(GNU)15 b(History)g(Library)75 -183 y Fm(2.3)33 b(History)22 b(F)-6 b(unctions)137 278 -y Fo(This)21 b(section)g(describ)q(es)h(the)f(calling)h(sequence)g(for) -e(the)g(v)m(arious)h(functions)g(presen)o(t)g(in)g(GNU)75 -333 y(History)l(.)75 441 y Fi(2.3.1)30 b(Initializing)20 -b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fo(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 -591 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.)1650 679 y(F)l(unction)-1749 -b Fh(void)20 b Fg(using)p 333 679 18 3 v 20 w(history)j -Ff(\(\))195 734 y Fo(Begin)18 b(a)f(session)h(in)g(whic)o(h)g(the)g -(history)f(functions)h(migh)o(t)f(b)q(e)h(used.)27 b(This)18 -b(initializes)195 788 y(the)d(in)o(teractiv)o(e)h(v)m(ariables.)1650 -877 y(F)l(unction)-1749 b Fh(HISTORY_STATE)21 b(*)e Fg(history)p -657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877 -V 21 w(state)j Ff(\(\))195 931 y Fo(Return)16 b(a)f(structure)g -(describing)i(the)e(curren)o(t)g(state)f(of)h(the)g(input)i(history)l -(.)1650 1019 y(F)l(unction)-1749 b Fh(void)20 b Fg(history)p -377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019 -V 21 w(state)j Ff(\()p Fn(HISTORY_STATE)13 b(*state)p -Ff(\))195 1074 y Fo(Set)i(the)h(state)e(of)h(the)g(history)g(list)h -(according)g(to)e Fj(state)p Fo(.)75 1182 y Fi(2.3.2)30 -b(History)20 b(List)h(Managemen)n(t)137 1277 y Fo(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 1332 y(the)15 -b(list)h(itself.)1650 1420 y(F)l(unction)-1749 b Fh(void)20 -b Fg(add)p 294 1420 V 20 w(history)j Ff(\()p Fn(char)14 -b(*string)p Ff(\))195 1475 y Fo(Place)i Fj(string)j Fo(at)c(the)g(end)i -(of)d(the)i(history)f(list.)22 b(The)15 b(asso)q(ciated)h(data)f -(\014eld)h(\(if)g(an)o(y\))e(is)195 1530 y(set)h(to)g -Fn(NULL)p Fo(.)1650 1618 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(remo)n(v)n(e)p 584 1618 V 20 w(history)k Ff(\()p -Fn(int)14 b(which)p Ff(\))195 1673 y Fo(Remo)o(v)o(e)g(history)g(en)o -(try)f(at)h(o\013set)f Fj(whic)o(h)h Fo(from)g(the)g(history)l(.)19 -b(The)14 b(remo)o(v)o(ed)g(elemen)o(t)g(is)195 1727 y(returned)i(so)e -(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)h -(structure.)1650 1816 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(replace)p 580 1816 V 22 w(history)p 777 1816 -V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)283 -1870 y(*line,)g(char)g(*data)p Ff(\))195 1925 y Fo(Mak)o(e)f(the)h -(history)f(en)o(try)g(at)g(o\013set)g Fj(whic)o(h)h Fo(ha)o(v)o(e)g -Fj(line)k Fo(and)13 b Fj(data)p Fo(.)19 b(This)14 b(returns)g(the)f -(old)195 1980 y(en)o(try)k(so)g(y)o(ou)g(can)g(disp)q(ose)i(of)d(the)i -(data.)25 b(In)18 b(the)f(case)h(of)f(an)g(in)o(v)m(alid)i -Fj(whic)o(h)p Fo(,)g(a)e Fn(NULL)195 2035 y Fo(p)q(oin)o(ter)f(is)f -(returned.)1650 2123 y(F)l(unction)-1749 b Fh(void)20 -b Fg(clear)p 320 2123 V 21 w(history)j Ff(\(\))195 2178 -y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)1650 2266 y(F)l(unction)-1749 b Fh(void)20 -b Fg(sti\015e)p 320 2266 V 21 w(history)j Ff(\()p Fn(int)14 -b(max)p Ff(\))195 2321 y Fo(Sti\015e)i(the)f(history)h(list,)f(remem)o -(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fo(en)o(tries.)1650 -2409 y(F)l(unction)-1749 b Fh(int)20 b Fg(unsti\015e)p -358 2409 V 21 w(history)i Ff(\(\))195 2463 y Fo(Stop)e(sti\015ing)i -(the)f(history)l(.)36 b(This)21 b(returns)g(the)f(previous)i(amoun)o(t) -e(the)g(history)h(w)o(as)195 2518 y(sti\015ed.)g(The)15 -b(v)m(alue)i(is)e(p)q(ositiv)o(e)i(if)e(the)g(history)h(w)o(as)e -(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.)1650 -2606 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351 -2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Ff(\(\))195 -2661 y Fo(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,) -g(zero)f(if)g(it)h(is)g(not.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(7)75 183 y Fi(2.3.3)30 b(Information)19 -b(Ab)r(out)i(the)f(History)h(List)137 279 y Fo(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.)1650 -371 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p -605 371 18 3 v 21 w(list)24 b Ff(\(\))195 426 y Fo(Return)f(a)g -Fn(NULL)f Fo(terminated)g(arra)o(y)g(of)g Fn(HIST_ENTRY)f -Fo(whic)o(h)j(is)f(the)f(curren)o(t)h(input)195 481 y(history)l(.)j -(Elemen)o(t)18 b(0)e(of)h(this)h(list)g(is)f(the)h(b)q(eginning)h(of)e -(time.)26 b(If)17 b(there)g(is)h(no)f(history)l(,)195 -535 y(return)e Fn(NULL)p Fo(.)1650 627 y(F)l(unction)-1749 -b Fh(int)20 b Fg(where)p 325 627 V 20 w(history)j Ff(\(\))195 -682 y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history) -g(elemen)o(t.)1650 773 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(curren)n(t)p 587 773 V 21 w(history)k Ff(\(\))195 -828 y Fo(Return)g(the)f(history)g(en)o(try)g(at)f(the)h(curren)o(t)g(p) -q(osition,)j(as)c(determined)j(b)o(y)e Fn(where_)195 -883 y(history)14 b(\(\))p Fo(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try) -g(there,)g(return)g(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)1650 -975 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(*)e Fg(history)p -579 975 V 21 w(get)j Ff(\()p Fn(int)15 b(offset)p Ff(\))195 -1029 y Fo(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i -Fj(o\013set)p Fo(,)e(starting)g(from)g Fn(history_base)p -Fo(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g -(if)g Fj(o\013set)h Fo(is)g(greater)e(than)h(the)h(history)f(length,)h -(return)f(a)195 1139 y Fn(NULL)f Fo(p)q(oin)o(ter.)1650 -1231 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351 -1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Ff(\(\))195 -1285 y Fo(Return)c(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h -(primary)h(history)f(en)o(tries)g(are)g(using.)29 b(This)195 -1340 y(function)16 b(returns)f(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 1452 y -Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137 -1548 y Fo(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.) -1650 1640 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p -351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Ff(\()p -Fn(int)15 b(pos)p Ff(\))195 1694 y Fo(Set)g(the)h(p)q(osition)g(in)g -(the)f(history)g(list)h(to)f Fj(p)q(os)p Fo(,)g(an)g(absolute)g(index)i -(in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749 -b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p 615 1786 V 20 -w(history)k Ff(\(\))195 1841 y Fo(Bac)o(k)17 b(up)h(the)f(curren)o(t)g -(history)g(o\013set)f(to)h(the)g(previous)h(history)f(en)o(try)l(,)g -(and)g(return)g(a)195 1896 y(p)q(oin)o(ter)f(to)e(that)h(en)o(try)l(.)k -(If)d(there)f(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fn(NULL)f Fo(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 1987 V 21 w(history)k -Ff(\(\))195 2042 y Fo(Mo)o(v)o(e)17 b(the)h(curren)o(t)g(history)f -(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g -(and)g(return)195 2097 y(the)d(a)g(p)q(oin)o(ter)h(to)e(that)h(en)o -(try)l(.)20 b(If)15 b(there)g(is)h(no)f(next)g(en)o(try)l(,)g(return)g -(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)75 2208 y Fi(2.3.5)30 -b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fo(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 -2359 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 2414 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i -Fj(anc)o(hored)p Fo(,)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 2469 y(history)g(en)o(try)l -(.)1650 2560 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p -351 2560 V 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h -(direction)p Ff(\))195 2615 y Fo(Searc)o(h)g(the)h(history)f(for)f -Fj(string)p Fo(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g -(o\013set.)k(If)d Fj(direction)195 2670 y Fn(<)j Fo(0,)g(then)g(the)h -(searc)o(h)e(is)i(through)e(previous)i(en)o(tries,)g(else)g(through)f -(subsequen)o(t.)32 b(If)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fo(8)1347 b(GNU)15 b(History)g(Library)195 -183 y Fj(string)k Fo(is)d(found,)f(then)h(the)f(curren)o(t)g(history)g -(index)i(is)f(set)f(to)f(that)h(history)g(en)o(try)l(,)g(and)195 -238 y(the)g(v)m(alue)h(returned)f(is)g(the)g(o\013set)f(in)h(the)g -(line)h(of)e(the)h(en)o(try)g(where)g Fj(string)j Fo(w)o(as)c(found.) -195 293 y(Otherwise,)i(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h -(returned.)1650 396 y(F)l(unction)-1749 b Fh(int)20 b -Fg(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396 -V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g(direction)p -Ff(\))195 451 y Fo(Searc)o(h)i(the)f(history)g(for)g -Fj(string)p Fo(,)g(starting)g(at)g(the)g(curren)o(t)h(history)f -(o\013set.)k(The)d(searc)o(h)195 506 y(is)h(anc)o(hored:)23 -b(matc)o(hing)17 b(lines)h(m)o(ust)e(b)q(egin)i(with)f -Fj(string)p Fo(.)25 b(If)17 b Fj(direction)h Fn(<)e Fo(0,)h(then)g(the) -195 560 y(searc)o(h)f(is)g(through)f(previous)i(en)o(tries,)f(else)g -(through)g(subsequen)o(t.)22 b(If)16 b Fj(string)k Fo(is)c(found,)195 -615 y(then)i(the)g(curren)o(t)g(history)g(index)h(is)g(set)e(to)h(that) -f(en)o(try)l(,)h(and)g(the)g(return)g(v)m(alue)h(is)g(0.)195 -670 y(Otherwise,)d(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h -(returned.)1650 773 y(F)l(unction)-1749 b Fh(int)20 b -Fg(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21 -w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g(direction,)g(int)283 -828 y(pos)p Ff(\))195 883 y Fo(Searc)o(h)h(for)g Fj(string)k -Fo(in)d(the)f(history)g(list,)g(starting)g(at)f Fj(p)q(os)p -Fo(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937 -y(list.)21 b(If)15 b Fj(direction)h Fo(is)g(negativ)o(e,)f(the)g(searc) -o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p -Fo(,)h(otherwise)195 992 y(forw)o(ard.)27 b(Returns)18 -b(the)g(absolute)g(index)h(of)f(the)g(history)f(elemen)o(t)i(where)f -Fj(string)k Fo(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75 -1170 y Fi(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137 -1272 y Fo(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 1327 y(men)o(ts)f(the)g(functions)h(for)f -(managing)g(a)g(history)g(\014le.)1650 1430 y(F)l(unction)-1749 -b Fh(int)20 b Fg(read)p 286 1430 V 20 w(history)i Ff(\()p -Fn(char)15 b(*filename)p Ff(\))195 1485 y Fo(Add)h(the)f(con)o(ten)o -(ts)f(of)h Fj(\014lename)j Fo(to)d(the)g(history)g(list,)g(a)g(line)h -(at)f(a)f(time.)21 b(If)15 b Fj(\014lename)j Fo(is)195 -1539 y Fn(NULL)p Fo(,)c(then)i(read)f(from)f(`)p Fn(~/.history)p -Fo('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650 -1643 y(F)l(unction)-1749 b Fh(int)20 b Fg(read)p 286 -1643 V 20 w(history)p 481 1643 V 20 w(range)i Ff(\()p -Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))195 -1697 y Fo(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fj(\014lename)p -Fo(,)i(adding)f(them)g(to)f(the)g(history)h(list.)36 -b(Start)195 1752 y(reading)15 b(at)e(line)j Fj(from)e -Fo(and)g(end)h(at)e Fj(to)p Fo(.)19 b(If)c Fj(from)e -Fo(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15 -b Fj(to)195 1807 y Fo(is)i(less)g(than)f Fj(from)p Fo(,)g(then)h(read)f -(un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17 -b Fj(\014lename)j Fo(is)d Fn(NULL)p Fo(,)f(then)195 1862 -y(read)f(from)g(`)p Fn(~/.history)p Fo('.)i(Returns)f(0)f(if)h -(successful,)g(or)e Fn(errno)h Fo(if)h(not.)1650 1965 -y(F)l(unction)-1749 b Fh(int)20 b Fg(write)p 304 1965 -V 22 w(history)i Ff(\()p Fn(char)15 b(*filename)p Ff(\))195 -2020 y Fo(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f -Fj(\014lename)p Fo(,)j(o)o(v)o(erwriting)d Fj(\014lename)k -Fo(if)d(necessary)l(.)42 b(If)195 2074 y Fj(\014lename)20 -b Fo(is)d Fn(NULL)p Fo(,)f(then)g(write)h(the)f(history)h(list)g(to)f -(`)p Fn(~/.history)p Fo('.)21 b(V)l(alues)d(returned)195 -2129 y(are)d(as)g(in)h Fn(read_history)d(\(\))p Fo(.)1650 -2232 y(F)l(unction)-1749 b Fh(int)20 b Fg(app)r(end)p -360 2232 V 19 w(history)j Ff(\()p Fn(int)14 b(nelements,)g(char)h -(*filename)p Ff(\))195 2287 y Fo(App)q(end)i(the)e(last)g -Fj(nelemen)o(ts)j Fo(of)d(the)g(history)g(list)h(to)f -Fj(\014lename)p Fo(.)1650 2390 y(F)l(unction)-1749 b -Fh(int)20 b Fg(history)p 351 2390 V 20 w(truncate)p 582 -2390 V 21 w(\014le)k Ff(\()p Fn(char)14 b(*filename,)g(int)h(nlines)p -Ff(\))195 2445 y Fo(T)l(runcate)g(the)h(history)f(\014le)h -Fj(\014lename)p Fo(,)g(lea)o(ving)g(only)g(the)f(last)g -Fj(nlines)k Fo(lines.)75 2568 y Fi(2.3.7)30 b(History)20 -b(Expansion)137 2670 y Fo(These)c(functions)g(implemen)o(t)g -Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(9)1650 183 y(F)l(unction)-1749 b Fh(int)20 -b Fg(history)p 351 183 18 3 v 20 w(expand)j Ff(\()p Fn(char)14 -b(*string,)g(char)h(**output)p Ff(\))195 238 y Fo(Expand)k -Fj(string)p Fo(,)g(placing)h(the)e(result)h(in)o(to)g -Fj(output)p Fo(,)g(a)f(p)q(oin)o(ter)h(to)f(a)g(string)h(\(see)f(Sec-) -195 293 y(tion)d(1.1)g([History)f(In)o(teraction],)h(page)g(1\).)k -(Returns:)195 370 y Fn(0)216 b Fo(If)16 b(no)g(expansions)h(to)q(ok)e -(place)i(\(or,)d(if)j(the)f(only)g(c)o(hange)g(in)h(the)e(text)h(w)o -(as)435 425 y(the)f(de-slashifying)j(of)c(the)i(history)f(expansion)h -(c)o(haracter\);)195 502 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g -(tak)o(e)e(place;)195 580 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an) -h(error)g(in)h(expansion;)195 657 y Fn(2)216 b Fo(if)16 -b(the)g(returned)f(line)j(should)e(b)q(e)g(displa)o(y)o(ed,)h(but)e -(not)g(executed,)i(as)e(with)435 712 y(the)g Fn(:p)g -Fo(mo)q(di\014er)h(\(see)f(Section)i(1.1.3)c([Mo)q(di\014ers],)i(page)g -(2\).)195 789 y(If)g(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h -Fj(output)f Fo(con)o(tains)g(a)g(descriptiv)o(e)i(error)d(mes-)195 -844 y(sage.)1650 932 y(F)l(unction)-1749 b Fh(char)20 -b(*)f Fg(history)p 422 932 V 21 w(arg)p 524 932 V 19 -w(extract)24 b Ff(\()p Fn(int)14 b(first,)h(int)g(last,)f(char)283 -987 y(*string)p Ff(\))195 1042 y Fo(Extract)g(a)g(string)g(segmen)o(t)g -(consisting)i(of)e(the)g Fj(\014rst)i Fo(through)e Fj(last)h -Fo(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fj(string)p -Fo(.)k(Argumen)o(ts)15 b(are)f(brok)o(en)i(up)f(as)g(in)h(Bash.)1650 -1185 y(F)l(unction)-1749 b Fh(char)20 b(*)f Fg(get)p -324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25 -b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,)f(int)283 -1240 y(qchar)p Ff(\))195 1295 y Fo(Returns)h(the)g(text)f(of)g(the)h -(history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fj(string)k -Fn(+)d Fj(*cindex)p Fo(.)20 b Fj(*cindex)f Fo(is)195 -1350 y(mo)q(di\014ed)e(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o -(t)f(sp)q(eci\014er.)23 b(A)o(t)16 b(function)g(en)o(try)l(,)f -Fj(cindex)21 b Fo(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o -(to)e Fj(string)21 b Fo(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q -(eci\014cation)h(b)q(egins.)26 b Fj(qc)o(har)19 b Fo(is)195 -1459 y(a)h(c)o(haracter)g(that)g(is)h(allo)o(w)o(ed)f(to)g(end)h(the)g -(ev)o(en)o(t)f(sp)q(eci\014cation)i(in)g(addition)f(to)f(the)195 -1514 y(\\normal")15 b(terminating)g(c)o(haracters.)1650 -1602 y(F)l(unction)-1749 b Fh(char)20 b(**)f Fg(history)p -448 1602 V 21 w(tok)n(enize)25 b Ff(\()p Fn(char)14 b(*string)p -Ff(\))195 1657 y Fo(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h -(out)g(of)f Fj(string)p Fo(,)h(m)o(uc)o(h)g(as)f(the)h(shell)h(migh)o -(t.)25 b(The)195 1712 y(tok)o(ens)d(are)g(split)i(on)f(white)g(space)g -(and)f(on)h(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)h(and)f(shell) -195 1767 y(quoting)15 b(con)o(v)o(en)o(tions)h(are)e(ob)q(ey)o(ed.)75 -1892 y Fm(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987 -y Fo(This)23 b(section)f(describ)q(es)h(the)f(externally)h(visible)h(v) -m(ariables)f(exp)q(orted)f(b)o(y)g(the)g(GNU)f(History)75 -2042 y(Library)l(.)1661 2130 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(history)p 351 2130 V 20 w(base)195 2185 y Fo(The)15 -b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f -(history)g(list.)1661 2274 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(history)p 351 2274 V 20 w(length)195 2329 y Fo(The)15 -b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the) -f(history)g(list.)1661 2417 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195 -2472 y Fo(The)14 b(maxim)o(um)f(n)o(um)o(b)q(er)h(of)e(history)i(en)o -(tries.)19 b(This)14 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)g -Fn(stifle_)195 2527 y(history)g(\(\))p Fo(.)1661 2615 -y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 2615 -V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y -Fo(The)15 b(c)o(haracter)g(that)f(starts)g(a)h(history)g(ev)o(en)o(t.) -20 b(The)15 b(default)h(is)g(`)p Fn(!)p Fo('.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fo(10)1324 b(GNU)15 b(History)g(Library)1661 -183 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 -183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238 -y Fo(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g(w)o(ord)g -(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g(line.)21 -b(The)195 293 y(default)16 b(is)f(`)p Fn(^)p Fo('.)1661 -388 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 -388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443 -y Fo(During)e(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)i(seen)f -(as)g(the)g(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)195 -498 y(then)e(it)g(and)g(all)h(subsequen)o(t)g(c)o(haracters)e(up)h(to)g -(a)f(newline)j(are)e(ignored,)g(suppressing)195 553 y(history)f -(expansion)h(for)f(the)g(remainder)h(of)f(the)g(line.)22 -b(This)15 b(is)h(disabled)h(b)o(y)e(default.)1661 648 -y(V)l(ariable)-1749 b Fh(char)20 b(*)f Fg(history)p 422 -648 V 21 w(no)p 504 648 V 20 w(expand)p 704 648 V 20 -w(c)n(hars)195 703 y Fo(The)j(list)h(of)f(c)o(haracters)f(whic)o(h)i -(inhibit)h(history)e(expansion)h(if)g(found)f(immediately)195 -758 y(follo)o(wing)16 b Fj(history)p 528 758 14 2 v 16 -w(expansion)p 739 758 V 18 w(c)o(har)p Fo(.)j(The)d(default)f(is)h -(whitespace)g(and)g(`)p Fn(=)p Fo('.)1661 853 y(V)l(ariable)-1749 -b Fh(char)20 b(*)f Fg(history)p 422 853 18 3 v 21 w(searc)n(h)p -599 853 V 20 w(delimiter)p 843 853 V 23 w(c)n(hars)195 -908 y Fo(The)f(list)h(of)e(additional)i(c)o(haracters)e(whic)o(h)i(can) -f(delimit)h(a)f(history)g(searc)o(h)f(string,)h(in)195 -963 y(addition)c(to)d(whitespace,)j(`)p Fn(:)p Fo(')d(and)i(`)p -Fn(?)p Fo(')f(in)h(the)f(case)h(of)f(a)g(substring)h(searc)o(h.)19 -b(The)12 b(default)195 1018 y(is)k(empt)o(y)l(.)1661 -1113 y(V)l(ariable)-1749 b Fh(int)20 b Fg(history)p 351 -1113 V 20 w(quotes)p 533 1113 V 21 w(inhibit)p 717 1113 -V 23 w(expansion)195 1168 y Fo(If)13 b(non-zero,)f(single-quoted)i(w)o -(ords)e(are)g(not)g(scanned)h(for)f(the)g(history)h(expansion)g(c)o -(har-)195 1223 y(acter.)19 b(The)d(default)g(v)m(alue)g(is)g(0.)1661 -1318 y(V)l(ariable)-1749 b Fh(Function)20 b(*)g Fg(history)p -527 1318 V 20 w(inhibit)p 710 1318 V 23 w(expansion)p -980 1318 V 21 w(function)195 1373 y Fo(This)12 b(should)g(b)q(e)g(set)f -(to)f(the)i(address)f(of)g(a)g(function)h(that)e(tak)o(es)h(t)o(w)o(o)f -(argumen)o(ts:)17 b(a)11 b Fn(char)195 1428 y(*)j Fo(\()p -Fj(string)t Fo(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g -(string)g(\()p Fj(i)r Fo(\).)20 b(It)14 b(should)h(return)f(a)g -(non-zero)195 1482 y(v)m(alue)g(if)e(the)h(history)f(expansion)h -(starting)f(at)g Fj(string[i])i Fo(should)f(not)f(b)q(e)h(p)q -(erformed;)g(zero)195 1537 y(if)g(the)h(expansion)f(should)h(b)q(e)g -(done.)20 b(It)13 b(is)g(in)o(tended)i(for)d(use)h(b)o(y)g -(applications)i(lik)o(e)f(Bash)195 1592 y(that)j(use)h(the)g(history)f -(expansion)i(c)o(haracter)e(for)g(additional)i(purp)q(oses.)28 -b(By)18 b(default,)195 1647 y(this)e(v)m(ariable)g(is)g(set)f(to)f -(NULL.)75 1780 y Fm(2.5)33 b(History)22 b(Programming)h(Example)137 -1878 y Fo(The)16 b(follo)o(wing)g(program)e(demonstrates)g(simple)j -(use)e(of)g(the)g(GNU)g(History)g(Library)l(.)195 1944 -y Fn(main)23 b(\(\))195 1995 y({)243 2047 y(char)g(line[1024],)f(*t;) -243 2099 y(int)h(len,)g(done)h(=)g(0;)243 2203 y(line[0])f(=)g(0;)243 -2307 y(using_history)f(\(\);)243 2359 y(while)h(\(!done\))290 -2411 y({)338 2462 y(printf)g(\("history$)g("\);)338 2514 -y(fflush)g(\(stdout\);)338 2566 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g -(\(line\))g(-)h(1,)f(stdin\);)338 2618 y(if)h(\(t)f(&&)h(*t\))386 -2670 y({)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)867 b(11)434 183 y Fn(len)23 b(=)h(strlen)f(\(t\);)434 -235 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 287 y(t[len)h(-)f(1])h -(=)g('\\0';)386 339 y(})338 443 y(if)g(\(!t\))386 495 -y(strcpy)f(\(line,)g("quit"\);)338 598 y(if)h(\(line[0]\))386 -650 y({)434 702 y(char)f(*expansion;)434 754 y(int)g(result;)434 -858 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434 -910 y(if)g(\(result\))481 962 y(fprintf)g(\(stderr,)g("\045s\\n",)g -(expansion\);)434 1065 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h -(2\))481 1117 y({)529 1169 y(free)f(\(expansion\);)529 -1221 y(continue;)481 1273 y(})434 1377 y(add_history)f(\(expansion\);) -434 1429 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h -(1\);)434 1480 y(free)f(\(expansion\);)386 1532 y(})338 -1636 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))386 -1688 y(done)g(=)h(1;)338 1740 y(else)f(if)h(\(strcmp)f(\(line,)g -("save"\))g(==)h(0\))386 1792 y(write_history)e(\("history_file"\);)338 -1844 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386 -1896 y(read_history)e(\("history_file"\);)338 1947 y(else)h(if)h -(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 1999 y({)434 -2051 y(register)e(HIST_ENTRY)h(**the_list;)434 2103 y(register)f(int)i -(i;)434 2207 y(the_list)e(=)i(history_list)e(\(\);)434 -2259 y(if)h(\(the_list\))481 2311 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e -(i++\))529 2363 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g -(history_base,)e(the_list[i]->line\);)386 2414 y(})338 -2466 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386 -2518 y({)434 2570 y(int)f(which;)434 2622 y(if)g(\(\(sscanf)g(\(line)g -(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fo(12)1324 b(GNU)15 b(History)g(Library)481 -183 y Fn({)529 235 y(HIST_ENTRY)23 b(*entry)g(=)g(remove_history)f -(\(which\);)529 287 y(if)i(\(!entry\))577 339 y(fprintf)f(\(stderr,)f -("No)i(such)f(entry)g(\045d\\n",)g(which\);)529 391 y(else)577 -443 y({)625 495 y(free)g(\(entry->line\);)625 546 y(free)g(\(entry\);) -577 598 y(})481 650 y(})434 702 y(else)481 754 y({)529 -806 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)481 858 y(})386 910 y(})290 962 y(})195 -1013 y(})p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1196 -b(13)75 183 y Fk(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75 -359 y Fm(A)75 417 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)7 -b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Fe(7)75 517 y Fm(E)75 575 y Fe(ev)o(en)o(t)d(designators)c -Fd(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 -b Fe(1)1012 359 y Fm(H)1012 417 y Fe(history)15 b(ev)o(en)o(ts)s -Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)16 b Fe(1)1012 467 y(history)f(expansion)6 b Fd(.)j(.)d(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(1)1012 517 y(History)14 -b(Searc)o(hing)5 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)18 b Fe(7)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fo(14)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: 15 17 -15 16 bop 75 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)919 b(15)75 183 y Fk(App)r(endix)25 -b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 359 y Fm(A)75 417 y Fc(add)p 137 417 12 2 -v 13 w(history)6 b Fd(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(6)75 467 y Fc(append)p -197 467 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Fe(8)75 567 y Fm(C)75 625 y Fc(clear)p -177 625 V 12 w(history)s Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(6)75 675 y Fc(current)p -217 675 V 11 w(history)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)22 b Fe(7)75 774 y Fm(G)75 832 y Fc(get)p -137 832 V 13 w(history)p 290 832 V 11 w(event)8 b Fd(.)e(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(9)75 932 y Fm(H)75 -990 y Fc(history)p 217 990 V 11 w(arg)p 288 990 V 13 -w(extract)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Fe(9)75 1040 y Fc(history)p 217 1040 V 11 w(base)f -Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 -b Fe(9)75 1090 y Fc(history_co)o(mm)o(ent)o(_c)o(har)g -Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(10)75 1139 y Fc(history)p -217 1139 V 11 w(expand)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Fe(9)75 1189 y Fc(history)p 217 -1189 V 11 w(expansion)p 408 1189 V 11 w(char)17 b Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1239 y Fc(history)p 217 -1239 V 11 w(get)6 b Fd(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(7)75 1289 y Fc(history)p -217 1289 V 11 w(get)p 288 1289 V 13 w(history)p 441 1289 -V 12 w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1339 y Fc(history_in)o(hi)o -(bit)o(_e)o(xpa)o(nsi)o(on)o(_fu)o(nc)o(tio)o(n)c Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(10)75 1389 y Fc(history)p -217 1389 V 11 w(is)p 268 1389 V 14 w(stifled)8 b Fd(.)s(.)f(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)21 b Fe(6)75 1438 y Fc(history)p -217 1438 V 11 w(length)15 b Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)17 b Fe(9)75 1488 y Fc(history)p 217 -1488 V 11 w(list)5 b Fd(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)17 b Fe(7)75 1538 y Fc(history_no)o(_e)o(xpa)o(nd)o -(_ch)o(ars)e Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(10)75 1588 y Fc(history_qu)o(ot)o -(es_)o(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)13 b Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(10)75 1638 -y Fc(history)p 217 1638 V 11 w(search)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75 1687 y Fc(history_se)o(ar)o -(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)15 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)18 b Fe(10)75 1737 y Fc(history)p -217 1737 V 11 w(search)p 348 1737 V 12 w(pos)8 b Fd(.)d(.)i(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)21 b Fe(8)75 1787 y Fc(history)p -217 1787 V 11 w(search)p 348 1787 V 12 w(prefix)5 b Fd(.)t(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)17 b Fe(8)75 1837 y Fc(history)p 217 1837 -V 11 w(set)p 288 1837 V 13 w(history)p 441 1837 V 12 -w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1887 y Fc(history)p -217 1887 V 11 w(set)p 288 1887 V 13 w(pos)t Fd(.)5 b(.)h(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(7)1012 359 -y Fc(history_sub)o(st)o(_ch)o(ar)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -17 b Fe(10)1012 409 y Fc(history)p 1154 409 V 12 w(tokenize)8 -b Fd(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fe(9)1012 459 y Fc(history)p 1154 459 V 12 w(total)p -1266 459 V 12 w(bytes)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 -b Fe(7)1012 509 y Fc(history)p 1154 509 V 12 w(truncate)p -1326 509 V 11 w(file)5 b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Fe(8)1012 612 y Fm(M)1012 670 y Fc(max)p 1074 670 V -13 w(input)p 1187 670 V 13 w(history)13 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)16 b Fe(9)1012 773 y Fm(N)1012 831 -y Fc(next)p 1094 831 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(7)1012 -934 y Fm(P)1012 992 y Fc(previous)p 1174 992 V 11 w(history)8 -b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fe(7)1012 1096 y Fm(R)1012 1154 y Fc(read)p 1094 1154 -V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)18 b Fe(8)1012 1204 y Fc(read)p 1094 -1204 V 13 w(history)p 1247 1204 V 11 w(range)8 b Fd(.)d(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)21 b Fe(8)1012 1253 y Fc(remove)p -1134 1253 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Fe(6)1012 1303 y Fc(replace)p 1154 -1303 V 12 w(history)p 1306 1303 V 11 w(entry)5 b Fd(.)t(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Fe(6)1012 1406 y Fm(S)1012 1464 y Fc(stifle)p -1134 1464 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Fe(6)1012 1568 y Fm(U)1012 1626 -y Fc(unstifle)p 1174 1626 V 11 w(history)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(6)1012 1676 y Fc(using)p -1114 1676 V 13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1779 y Fm(W)1012 -1837 y Fc(where)p 1114 1837 V 13 w(history)s Fd(.)s(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(7)1012 1887 y Fc(write)p 1114 1887 V 13 w(history)s -Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(8)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fo(16)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: -1 19 --1 18 bop 1862 -58 a Fo(i)75 183 y Fk(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fm(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 Fm(1)224 423 y Fo(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 Fo(1)374 478 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 Fo(1)374 532 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 Fo(2)374 587 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 Fo(2)75 708 y Fm(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 Fm(5)224 777 y Fo(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 Fo(5)224 832 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 Fo(5)224 886 -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 Fo(6)374 941 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 -Fo(6)374 996 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 Fo(6)374 1051 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 Fo(7)374 1106 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 Fo(7)374 1160 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 Fo(7)374 1215 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 Fo(8)374 1270 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 Fo(8)224 1325 y(2.4)45 b(History)15 b(V)l(ariables)6 -b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)21 b Fo(9)224 1380 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 Fo(10)75 1501 y Fm(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 Fm(13)75 1636 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 Fm(15)p eop -%%Page: -2 20 --2 19 bop 75 -58 a Fo(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/doc/hstech.texinfo b/readline/doc/hstech.texinfo index 54100908407..12fff2c9a75 100644 --- a/readline/doc/hstech.texinfo +++ b/readline/doc/hstech.texinfo @@ -66,6 +66,13 @@ 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 @@ -334,7 +341,7 @@ if expansions did take place; @item -1 if there was an error in expansion; @item 2 -if the returned line should only be displayed, but not executed, +if the returned line should be displayed, but not executed, as with the @code{:p} modifier (@pxref{Modifiers}). @end table diff --git a/readline/doc/hsuser.texinfo b/readline/doc/hsuser.texinfo index 7c4582d2ace..5f75f5df490 100644 --- a/readline/doc/hsuser.texinfo +++ b/readline/doc/hsuser.texinfo @@ -1,7 +1,7 @@ @ignore This file documents the user interface to the GNU History library. -Copyright (C) 1988, 1991, 1996 Free Software Foundation, Inc. +Copyright (C) 1988-1999 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to make and distribute verbatim copies of this manual @@ -26,11 +26,16 @@ into another language, under the above conditions for modified versions. @node Using History Interactively @chapter Using History Interactively +@ifclear BashFeatures +@defcodeindex bt +@end ifclear + @ifset BashFeatures -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 other programs, -see the GNU Readline Library Manual. +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 GNU History Library interactively, @@ -63,20 +68,25 @@ information on using the GNU History Library in your own programs, When the @samp{-o history} option to the @code{set} builtin is enabled (@pxref{The Set Builtin}), the shell provides access to the @var{command history}, -the list of commands previously typed. The text of the last -@code{HISTSIZE} -commands (default 500) is saved in a history list. The shell -stores each command in the history list prior to parameter and -variable expansion +the list of commands previously typed. +The value of the @code{HISTSIZE} shell variable is used as the +number of commands to save in a history list. +The text of the last @code{$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 @code{HISTIGNORE} and @code{HISTCONTROL}. + When the shell starts up, the history is initialized from the file named by the @code{HISTFILE} variable (default @file{~/.bash_history}). -@code{HISTFILE} is truncated, if necessary, to contain no more than -the number of lines specified by the value of the @code{HISTFILESIZE} -variable. When an interactive shell exits, the last -@code{HISTSIZE} lines are copied from the history list to @code{HISTFILE}. +The file named by the value of @code{HISTFILE} is truncated, if +necessary, to contain no more than the number of lines specified by +the value of the @code{HISTFILESIZE} variable. +When an interactive shell exits, the last +@code{$HISTSIZE} lines are copied from the history list to the file +named by @code{$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. @@ -88,11 +98,11 @@ lines. If @code{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 can be used to display or modify the history +The @code{history} builtin may be used to display or modify the history list and manipulate the history file. -When using the command-line editing, search commands +When using command-line editing, search commands are available in each editing mode that provide access to the -history list. +history list (@pxref{Commands For History}). The shell allows control over which commands are saved on the history list. The @code{HISTCONTROL} and @code{HISTIGNORE} @@ -105,19 +115,20 @@ 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 that allow you to manipulate the +Bash provides two builtin commands which manipulate the history list and history file. @table @code @item fc -@comment btindex fc +@btindex fc @example @code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]} @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} @@ -149,25 +160,29 @@ 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 -@comment btindex history +@btindex history @example -history [-c] [@var{n}] +history [@var{n}] +history -c +history -d @var{offset} history [-anrw] [@var{filename}] history -ps @var{arg} @end example -Display the history list with line numbers. Lines prefixed with -with a @samp{*} have been modified. An argument of @var{n} says -to list only the last @var{n} lines. Options, if supplied, have -the following meanings: +With no options, display the history list with line numbers. +Lines prefixed with 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 -w -Write out the current history to the history file. +@item -c +Clear the history list. This may be combined +with the other options to replace the history list completely. -@item -r -Read the current history file and append its contents to -the history list. +@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 @@ -179,20 +194,24 @@ 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 -c -Clear the history list. This may be combined -with the other options to replace the history list completely. +@item -r +Read the current history file and append its contents to +the history list. -@item -s -The @var{arg}s are added to the end of -the history list as a single entry. +@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 the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} option is +When any of the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} options is used, if @var{filename} is given, then it is used as the history file. If not, then the value of the @code{HISTFILE} variable is used. @@ -309,6 +328,26 @@ may be omitted if the word designator begins with a @samp{^}, @samp{$}, 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) diff --git a/readline/doc/inc-hist.texinfo b/readline/doc/inc-hist.texinfo index 06774b74916..37ed15f4dd1 100644 --- a/readline/doc/inc-hist.texinfo +++ b/readline/doc/inc-hist.texinfo @@ -1,7 +1,7 @@ @ignore This file documents the user interface to the GNU History library. -Copyright (C) 1988, 1991, 1996 Free Software Foundation, Inc. +Copyright (C) 1988-1999 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to make and distribute verbatim copies of this manual @@ -26,16 +26,21 @@ into another language, under the above conditions for modified versions. @node Using History Interactively @chapter Using History Interactively +@c @ifclear BashFeatures +@c @defcodeindex bt +@c @end ifclear + @ifset BashFeatures -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 other programs, -see the GNU Readline Library Manual. +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 GNU History Library interactively, -from a user's standpoint. It should be considered a user's guide. -@c For +from a user's standpoint. It should be considered a user's guide. +@c For @c information on using the GNU History Library in your own programs, @c @pxref{Programming with GNU History}. @end ifclear @@ -64,20 +69,25 @@ from a user's standpoint. It should be considered a user's guide. When the @samp{-o history} option to the @code{set} builtin is enabled (@pxref{The Set Builtin}), the shell provides access to the @var{command history}, -the list of commands previously typed. The text of the last -@code{HISTSIZE} -commands (default 500) is saved in a history list. The shell -stores each command in the history list prior to parameter and -variable expansion +the list of commands previously typed. +The value of the @code{HISTSIZE} shell variable is used as the +number of commands to save in a history list. +The text of the last @code{$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 @code{HISTIGNORE} and @code{HISTCONTROL}. + When the shell starts up, the history is initialized from the file named by the @code{HISTFILE} variable (default @file{~/.bash_history}). -@code{HISTFILE} is truncated, if necessary, to contain no more than -the number of lines specified by the value of the @code{HISTFILESIZE} -variable. When an interactive shell exits, the last -@code{HISTSIZE} lines are copied from the history list to @code{HISTFILE}. +The file named by the value of @code{HISTFILE} is truncated, if +necessary, to contain no more than the number of lines specified by +the value of the @code{HISTFILESIZE} variable. +When an interactive shell exits, the last +@code{$HISTSIZE} lines are copied from the history list to the file +named by @code{$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. @@ -89,11 +99,11 @@ lines. If @code{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 can be used to display or modify the history +The @code{history} builtin may be used to display or modify the history list and manipulate the history file. -When using the command-line editing, search commands +When using command-line editing, search commands are available in each editing mode that provide access to the -history list. +history list (@pxref{Commands For History}). The shell allows control over which commands are saved on the history list. The @code{HISTCONTROL} and @code{HISTIGNORE} @@ -106,19 +116,20 @@ 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 that allow you to manipulate the +Bash provides two builtin commands which manipulate the history list and history file. @table @code @item fc -@c btindex fc +@btindex fc @example @code{fc [-e @var{ename}] [-nlr] [@var{first}] [@var{last}]} @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} @@ -150,25 +161,29 @@ 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 -@c btindex history +@btindex history @example -history [-c] [@var{n}] +history [@var{n}] +history -c +history -d @var{offset} history [-anrw] [@var{filename}] history -ps @var{arg} @end example -Display the history list with line numbers. Lines prefixed with -with a @samp{*} have been modified. An argument of @var{n} says -to list only the last @var{n} lines. Options, if supplied, have -the following meanings: +With no options, display the history list with line numbers. +Lines prefixed with 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 -w -Write out the current history to the history file. +@item -c +Clear the history list. This may be combined +with the other options to replace the history list completely. -@item -r -Read the current history file and append its contents to -the history list. +@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 @@ -180,20 +195,24 @@ 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 -c -Clear the history list. This may be combined -with the other options to replace the history list completely. +@item -r +Read the current history file and append its contents to +the history list. -@item -s -The @var{arg}s are added to the end of -the history list as a single entry. +@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 the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} option is +When any of the @samp{-w}, @samp{-r}, @samp{-a}, or @samp{-n} options is used, if @var{filename} is given, then it is used as the history file. If not, then the value of the @code{HISTFILE} variable is used. @@ -310,6 +329,26 @@ may be omitted if the word designator begins with a @samp{^}, @samp{$}, 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) diff --git a/readline/doc/manvers.texinfo b/readline/doc/manvers.texinfo index 63924e3801d..3122b6c6fad 100644 --- a/readline/doc/manvers.texinfo +++ b/readline/doc/manvers.texinfo @@ -1,6 +1,6 @@ -@set EDITION 4.0 -@set VERSION 4.0 -@set UPDATED 31 December 1998 -@set UPDATE-MONTH December 1998 +@set EDITION 4.1 +@set VERSION 4.1 +@set UPDATED 2000 January 19 +@set UPDATE-MONTH January 2000 -@set LASTCHANGE Thu Dec 31 10:17:05 EST 1998 +@set LASTCHANGE Wed Jan 19 12:16:30 EST 2000 diff --git a/readline/doc/readline.3 b/readline/doc/readline.3 index 6b36f2f5695..c1ed9cf7da5 100644 --- a/readline/doc/readline.3 +++ b/readline/doc/readline.3 @@ -6,9 +6,9 @@ .\" Case Western Reserve University .\" chet@ins.CWRU.Edu .\" -.\" Last Change: Thu Dec 31 10:16:30 EST 1998 +.\" Last Change: Tue Jun 1 13:28:03 EDT 1999 .\" -.TH READLINE 3 "1998 Dec 31" GNU +.TH READLINE 3 "1999 Jun 1" GNU .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. @@ -148,6 +148,7 @@ processing key bindings: .IR SPACE , 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 @@ -564,7 +565,7 @@ 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 this, or the previous, word. Words are +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) @@ -1172,9 +1173,9 @@ VI Command Mode functions Individual \fBreadline\fP initialization file .PD .SH AUTHORS -Brian Fox, Free Software Foundation (primary author) +Brian Fox, Free Software Foundation .br -bfox@ai.MIT.Edu +bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi Binary files differdeleted file mode 100644 index 5d859d82c66..00000000000 --- a/readline/doc/readline.dvi +++ /dev/null diff --git a/readline/doc/readline.html b/readline/doc/readline.html deleted file mode 100644 index d8a2edaf7d4..00000000000 --- a/readline/doc/readline.html +++ /dev/null @@ -1,4327 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo on 1 March 2000 --> - -<TITLE>GNU Readline Library</TITLE> -</HEAD> -<BODY> -<H1>GNU Readline Library</H1> -<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="readline.html#SEC1">Command Line Editing</A> -<UL> -<LI><A NAME="TOC2" HREF="readline.html#SEC2">Introduction to Line Editing</A> -<LI><A NAME="TOC3" HREF="readline.html#SEC3">Readline Interaction</A> -<UL> -<LI><A NAME="TOC4" HREF="readline.html#SEC4">Readline Bare Essentials</A> -<LI><A NAME="TOC5" HREF="readline.html#SEC5">Readline Movement Commands</A> -<LI><A NAME="TOC6" HREF="readline.html#SEC6">Readline Killing Commands</A> -<LI><A NAME="TOC7" HREF="readline.html#SEC7">Readline Arguments</A> -<LI><A NAME="TOC8" HREF="readline.html#SEC8">Searching for Commands in the History</A> -</UL> -<LI><A NAME="TOC9" HREF="readline.html#SEC9">Readline Init File</A> -<UL> -<LI><A NAME="TOC10" HREF="readline.html#SEC10">Readline Init File Syntax</A> -<LI><A NAME="TOC11" HREF="readline.html#SEC11">Conditional Init Constructs</A> -<LI><A NAME="TOC12" HREF="readline.html#SEC12">Sample Init File</A> -</UL> -<LI><A NAME="TOC13" HREF="readline.html#SEC13">Bindable Readline Commands</A> -<UL> -<LI><A NAME="TOC14" HREF="readline.html#SEC14">Commands For Moving</A> -<LI><A NAME="TOC15" HREF="readline.html#SEC15">Commands For Manipulating The History</A> -<LI><A NAME="TOC16" HREF="readline.html#SEC16">Commands For Changing Text</A> -<LI><A NAME="TOC17" HREF="readline.html#SEC17">Killing And Yanking</A> -<LI><A NAME="TOC18" HREF="readline.html#SEC18">Specifying Numeric Arguments</A> -<LI><A NAME="TOC19" HREF="readline.html#SEC19">Letting Readline Type For You</A> -<LI><A NAME="TOC20" HREF="readline.html#SEC20">Keyboard Macros</A> -<LI><A NAME="TOC21" HREF="readline.html#SEC21">Some Miscellaneous Commands</A> -</UL> -<LI><A NAME="TOC22" HREF="readline.html#SEC22">Readline vi Mode</A> -</UL> -<LI><A NAME="TOC23" HREF="readline.html#SEC23">Programming with GNU Readline</A> -<UL> -<LI><A NAME="TOC24" HREF="readline.html#SEC24">Basic Behavior</A> -<LI><A NAME="TOC25" HREF="readline.html#SEC25">Custom Functions</A> -<UL> -<LI><A NAME="TOC26" HREF="readline.html#SEC26">The Function Type</A> -<LI><A NAME="TOC27" HREF="readline.html#SEC27">Writing a New Function</A> -</UL> -<LI><A NAME="TOC28" HREF="readline.html#SEC28">Readline Variables</A> -<LI><A NAME="TOC29" HREF="readline.html#SEC29">Readline Convenience Functions</A> -<UL> -<LI><A NAME="TOC30" HREF="readline.html#SEC30">Naming a Function</A> -<LI><A NAME="TOC31" HREF="readline.html#SEC31">Selecting a Keymap</A> -<LI><A NAME="TOC32" HREF="readline.html#SEC32">Binding Keys</A> -<LI><A NAME="TOC33" HREF="readline.html#SEC33">Associating Function Names and Bindings</A> -<LI><A NAME="TOC34" HREF="readline.html#SEC34">Allowing Undoing</A> -<LI><A NAME="TOC35" HREF="readline.html#SEC35">Redisplay</A> -<LI><A NAME="TOC36" HREF="readline.html#SEC36">Modifying Text</A> -<LI><A NAME="TOC37" HREF="readline.html#SEC37">Utility Functions</A> -<LI><A NAME="TOC38" HREF="readline.html#SEC38">Alternate Interface</A> -<LI><A NAME="TOC39" HREF="readline.html#SEC39">An Example</A> -</UL> -<LI><A NAME="TOC40" HREF="readline.html#SEC40">Readline Signal Handling</A> -<LI><A NAME="TOC41" HREF="readline.html#SEC41">Custom Completers</A> -<UL> -<LI><A NAME="TOC42" HREF="readline.html#SEC42">How Completing Works</A> -<LI><A NAME="TOC43" HREF="readline.html#SEC43">Completion Functions</A> -<LI><A NAME="TOC44" HREF="readline.html#SEC44">Completion Variables</A> -<LI><A NAME="TOC45" HREF="readline.html#SEC45">A Short Completion Example</A> -</UL> -</UL> -<LI><A NAME="TOC46" HREF="readline.html#SEC46">Concept Index</A> -<LI><A NAME="TOC47" HREF="readline.html#SEC47">Function and Variable Index</A> -</UL> -<P><HR><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> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -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. - -</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 Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="readline.html#TOC1">Command Line Editing</A></H1> - -<P> -This chapter describes the basic features of the GNU -command line editing interface. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC2">Introduction and Notation</A>: Notation used in this text. -<LI><A HREF="readline.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line. -<LI><A HREF="readline.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view. -<LI><A HREF="readline.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands - available for binding -<LI><A HREF="readline.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline - behave like the vi editor. -</UL> - - - -<H2><A NAME="SEC2" HREF="readline.html#TOC2">Introduction to Line Editing</A></H2> - -<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> -<I>first</I>, 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">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> - - -<H2><A NAME="SEC3" HREF="readline.html#TOC3">Readline Interaction</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<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>RETURN</KBD>. You do not have to be at the -end of the line to press <KBD>RETURN</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline. -<LI><A HREF="readline.html#SEC5">Readline Movement Commands</A>: Moving about the input line. -<LI><A HREF="readline.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back! -<LI><A HREF="readline.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands. -<LI><A HREF="readline.html#SEC8">Searching</A>: Searching through previous lines. -</UL> - - - -<H3><A NAME="SEC4" HREF="readline.html#TOC4">Readline Bare Essentials</A></H3> -<P> -<A NAME="IDX2"></A> -<A NAME="IDX3"></A> -<A NAME="IDX4"></A> - -</P> -<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> -<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> - - -<H3><A NAME="SEC5" HREF="readline.html#TOC5">Readline Movement Commands</A></H3> - -<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> -<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> - - -<H3><A NAME="SEC6" HREF="readline.html#TOC6">Readline Killing Commands</A></H3> - -<P> -<A NAME="IDX5"></A> -<A NAME="IDX6"></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="IDX7"></A> - -</P> -<P> -Here is the list of commands for killing text. - -</P> -<DL COMPACT> - -<DT><KBD>C-k</KBD> -<DD> -Kill the text from the current cursor position to the end of the line. - -<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>. - -<DT><KBD>M-DEL</KBD> -<DD> -Kill from the cursor the start of the previous 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>. - -<DT><KBD>C-w</KBD> -<DD> -Kill from the cursor to the previous whitespace. This is different than -<KBD>M-DEL</KBD> because the word boundaries differ. - -</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> -<DL COMPACT> - -<DT><KBD>C-y</KBD> -<DD> -Yank the most recently killed text back into the buffer at the cursor. - -<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> - - - -<H3><A NAME="SEC7" HREF="readline.html#TOC7">Readline Arguments</A></H3> - -<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>. - -</P> - - -<H3><A NAME="SEC8" HREF="readline.html#TOC8">Searching for Commands in the History</A></H3> - -<P> -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <VAR>incremental</VAR> and <VAR>non-incremental</VAR>. - -</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. - -</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> - - -<H2><A NAME="SEC9" HREF="readline.html#TOC9">Readline Init File</A></H2> -<P> -<A NAME="IDX8"></A> - -</P> -<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> - -<UL> -<LI><A HREF="readline.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file. - -<LI><A HREF="readline.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file. - -<LI><A HREF="readline.html#SEC12">Sample Init File</A>: An example inputrc file. -</UL> - - - -<H3><A NAME="SEC10" HREF="readline.html#TOC10">Readline Init File Syntax</A></H3> - -<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">Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. - -</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. Here is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: - - -<PRE> -set editing-mode vi -</PRE> - -A great deal of run-time behavior is changeable with the following -variables. - -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD> -<A NAME="IDX9"></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. - -<DT><CODE>comment-begin</CODE> -<DD> -<A NAME="IDX10"></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>. - -<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>. - -<DT><CODE>completion-query-items</CODE> -<DD> -<A NAME="IDX11"></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. The default limit is -<CODE>100</CODE>. - -<DT><CODE>convert-meta</CODE> -<DD> -<A NAME="IDX12"></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>. - -<DT><CODE>disable-completion</CODE> -<DD> -<A NAME="IDX13"></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>. - -<DT><CODE>editing-mode</CODE> -<DD> -<A NAME="IDX14"></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>. - -<DT><CODE>enable-keypad</CODE> -<DD> -<A NAME="IDX15"></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>. - -<DT><CODE>expand-tilde</CODE> -<DD> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD> -<A NAME="IDX17"></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>. - -<DT><CODE>input-meta</CODE> -<DD> -<A NAME="IDX18"></A> -<A NAME="IDX19"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not strip the eighth bit from the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. - -<DT><CODE>isearch-terminators</CODE> -<DD> -<A NAME="IDX20"></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">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. - -<DT><CODE>keymap</CODE> -<DD> -<A NAME="IDX21"></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-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. - -<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>. - -<DT><CODE>mark-modified-lines</CODE> -<DD> -<A NAME="IDX22"></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. - -<DT><CODE>output-meta</CODE> -<DD> -<A NAME="IDX23"></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>. - -<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>. - -<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>. - -<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>. - -</DL> - -<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. - -Once you know the name of the command, simply place the name of the key -you wish to bind the command to, a colon, and then the name of the -command on a line in the init file. The name of the key -can be expressed in different ways, depending on which is most -comfortable for you. - -<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: - -<PRE> -Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</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). - -<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. - - -<PRE> -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</PRE> - -In the above example, <KBD>C-u</KBD> is 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>. - -</DL> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -<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> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -<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 character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR> -(one to three digits) -</DL> - -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>`C-x \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: - -<PRE> -"\C-x\\": "\\" -</PRE> - -</DL> - - - -<H3><A NAME="SEC11" HREF="readline.html#TOC11">Conditional Init Constructs</A></H3> - -<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> -<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. - -<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. - -<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. - -<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 it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -<PRE> -$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</PRE> - -</DL> - -<DT><CODE>$endif</CODE> -<DD> -This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. - -<DT><CODE>$else</CODE> -<DD> -Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. - -<DT><CODE>$include</CODE> -<DD> -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -<PRE> -$include /etc/inputrc -</PRE> - -</DL> - - - -<H3><A NAME="SEC12" HREF="readline.html#TOC12">Sample Init File</A></H3> - -<P> -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -</P> - -<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> - - - -<H2><A NAME="SEC13" HREF="readline.html#TOC13">Bindable Readline Commands</A></H2> - - -<UL> -<LI><A HREF="readline.html#SEC14">Commands For Moving</A>: Moving about the line. -<LI><A HREF="readline.html#SEC15">Commands For History</A>: Getting at previous lines. -<LI><A HREF="readline.html#SEC16">Commands For Text</A>: Commands for changing text. -<LI><A HREF="readline.html#SEC17">Commands For Killing</A>: Commands for killing and yanking. -<LI><A HREF="readline.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts. -<LI><A HREF="readline.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you. -<LI><A HREF="readline.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters -<LI><A HREF="readline.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands. -</UL> - -<P> -This section describes Readline commands that may be bound to key -sequences. - -</P> -<P> -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, <VAR>point</VAR> refers to the current cursor -position, and <VAR>mark</VAR> 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 <VAR>region</VAR>. - -</P> - - -<H3><A NAME="SEC14" HREF="readline.html#TOC14">Commands For Moving</A></H3> -<DL COMPACT> - -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD> -<A NAME="IDX26"></A> -Move to the start of the current line. - -<DT><CODE>end-of-line (C-e)</CODE> -<DD> -<A NAME="IDX27"></A> -Move to the end of the line. - -<DT><CODE>forward-char (C-f)</CODE> -<DD> -<A NAME="IDX28"></A> -Move forward a character. - -<DT><CODE>backward-char (C-b)</CODE> -<DD> -<A NAME="IDX29"></A> -Move back a character. - -<DT><CODE>forward-word (M-f)</CODE> -<DD> -<A NAME="IDX30"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. - -<DT><CODE>backward-word (M-b)</CODE> -<DD> -<A NAME="IDX31"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -<DT><CODE>clear-screen (C-l)</CODE> -<DD> -<A NAME="IDX32"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -<DT><CODE>redraw-current-line ()</CODE> -<DD> -<A NAME="IDX33"></A> -Refresh the current line. By default, this is unbound. - -</DL> - - - -<H3><A NAME="SEC15" HREF="readline.html#TOC15">Commands For Manipulating The History</A></H3> - -<DL COMPACT> - -<DT><CODE>accept-line (Newline, Return)</CODE> -<DD> -<A NAME="IDX34"></A> -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -<DT><CODE>previous-history (C-p)</CODE> -<DD> -<A NAME="IDX35"></A> -Move `up' through the history list. - -<DT><CODE>next-history (C-n)</CODE> -<DD> -<A NAME="IDX36"></A> -Move `down' through the history list. - -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD> -<A NAME="IDX37"></A> -Move to the first line in the history. - -<DT><CODE>end-of-history (M->)</CODE> -<DD> -<A NAME="IDX38"></A> -Move to the end of the input history, i.e., the line currently -being entered. - -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD> -<A NAME="IDX39"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -<DT><CODE>forward-search-history (C-s)</CODE> -<DD> -<A NAME="IDX40"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD> -<A NAME="IDX41"></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. - -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD> -<A NAME="IDX42"></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. - -<DT><CODE>history-search-forward ()</CODE> -<DD> -<A NAME="IDX43"></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. - -<DT><CODE>history-search-backward ()</CODE> -<DD> -<A NAME="IDX44"></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. - -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD> -<A NAME="IDX45"></A> -Insert the first argument to the previous command (usually -the second word on the previous line). 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. - -<DT><CODE>yank-last-arg (M-., M-_)</CODE> -<DD> -<A NAME="IDX46"></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. - -</DL> - - - -<H3><A NAME="SEC16" HREF="readline.html#TOC16">Commands For Changing Text</A></H3> - -<DL COMPACT> - -<DT><CODE>delete-char (C-d)</CODE> -<DD> -<A NAME="IDX47"></A> -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return <CODE>EOF</CODE>. - -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD> -<A NAME="IDX48"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD> -<A NAME="IDX49"></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. - -<DT><CODE>quoted-insert (C-q, C-v)</CODE> -<DD> -<A NAME="IDX50"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. - -<DT><CODE>tab-insert (M-TAB)</CODE> -<DD> -<A NAME="IDX51"></A> -Insert a tab character. - -<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE> -<DD> -<A NAME="IDX52"></A> -Insert yourself. - -<DT><CODE>transpose-chars (C-t)</CODE> -<DD> -<A NAME="IDX53"></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. - -<DT><CODE>transpose-words (M-t)</CODE> -<DD> -<A NAME="IDX54"></A> -Drag the word before point past the word after point, -moving point past that word as well. - -<DT><CODE>upcase-word (M-u)</CODE> -<DD> -<A NAME="IDX55"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -<DT><CODE>downcase-word (M-l)</CODE> -<DD> -<A NAME="IDX56"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -<DT><CODE>capitalize-word (M-c)</CODE> -<DD> -<A NAME="IDX57"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -</DL> - - - -<H3><A NAME="SEC17" HREF="readline.html#TOC17">Killing And Yanking</A></H3> - -<DL COMPACT> - -<DT><CODE>kill-line (C-k)</CODE> -<DD> -<A NAME="IDX58"></A> -Kill the text from point to the end of the line. - -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD> -<A NAME="IDX59"></A> -Kill backward to the beginning of the line. - -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD> -<A NAME="IDX60"></A> -Kill backward from the cursor to the beginning of the current line. - -<DT><CODE>kill-whole-line ()</CODE> -<DD> -<A NAME="IDX61"></A> -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -<DT><CODE>kill-word (M-d)</CODE> -<DD> -<A NAME="IDX62"></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>. - -<DT><CODE>backward-kill-word (M-DEL)</CODE> -<DD> -<A NAME="IDX63"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. - -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD> -<A NAME="IDX64"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -<DT><CODE>delete-horizontal-space ()</CODE> -<DD> -<A NAME="IDX65"></A> -Delete all spaces and tabs around point. By default, this is unbound. - -<DT><CODE>kill-region ()</CODE> -<DD> -<A NAME="IDX66"></A> -Kill the text in the current region. -By default, this command is unbound. - -<DT><CODE>copy-region-as-kill ()</CODE> -<DD> -<A NAME="IDX67"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -<DT><CODE>copy-backward-word ()</CODE> -<DD> -<A NAME="IDX68"></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. - -<DT><CODE>copy-forward-word ()</CODE> -<DD> -<A NAME="IDX69"></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. - -<DT><CODE>yank (C-y)</CODE> -<DD> -<A NAME="IDX70"></A> -Yank the top of the kill ring into the buffer at the current -cursor position. - -<DT><CODE>yank-pop (M-y)</CODE> -<DD> -<A NAME="IDX71"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -</DL> - - - -<H3><A NAME="SEC18" HREF="readline.html#TOC18">Specifying Numeric Arguments</A></H3> -<DL COMPACT> - -<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE> -<DD> -<A NAME="IDX72"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. - -<DT><CODE>universal-argument ()</CODE> -<DD> -<A NAME="IDX73"></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> - - - -<H3><A NAME="SEC19" HREF="readline.html#TOC19">Letting Readline Type For You</A></H3> - -<DL COMPACT> - -<DT><CODE>complete (TAB)</CODE> -<DD> -<A NAME="IDX74"></A> -Attempt to do completion on the text before the cursor. This is -application-specific. Generally, if you are typing a filename -argument, you can do filename completion; if you are typing a command, -you can do command completion; if you are typing in a symbol to GDB, you -can do symbol name completion; if you are typing in a variable to Bash, -you can do variable name completion, and so on. - -<DT><CODE>possible-completions (M-?)</CODE> -<DD> -<A NAME="IDX75"></A> -List the possible completions of the text before the cursor. - -<DT><CODE>insert-completions (M-*)</CODE> -<DD> -<A NAME="IDX76"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. - -<DT><CODE>menu-complete ()</CODE> -<DD> -<A NAME="IDX77"></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 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 <CODE>TAB</CODE>, but is unbound -by default. - -<DT><CODE>delete-char-or-list ()</CODE> -<DD> -<A NAME="IDX78"></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. - -</DL> - - - -<H3><A NAME="SEC20" HREF="readline.html#TOC20">Keyboard Macros</A></H3> -<DL COMPACT> - -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD> -<A NAME="IDX79"></A> -Begin saving the characters typed into the current keyboard macro. - -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD> -<A NAME="IDX80"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. - -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD> -<A NAME="IDX81"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -</DL> - - - -<H3><A NAME="SEC21" HREF="readline.html#TOC21">Some Miscellaneous Commands</A></H3> -<DL COMPACT> - -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD> -<A NAME="IDX82"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. - -<DT><CODE>abort (C-g)</CODE> -<DD> -<A NAME="IDX83"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). - -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE> -<DD> -<A NAME="IDX84"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. - -<DT><CODE>prefix-meta (ESC)</CODE> -<DD> -<A NAME="IDX85"></A> -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing <SAMP>`ESC f'</SAMP> is equivalent to typing -<SAMP>`M-f'</SAMP>. - -<DT><CODE>undo (C-_, C-x C-u)</CODE> -<DD> -<A NAME="IDX86"></A> -Incremental undo, separately remembered for each line. - -<DT><CODE>revert-line (M-r)</CODE> -<DD> -<A NAME="IDX87"></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. - -<DT><CODE>tilde-expand (M-~)</CODE> -<DD> -<A NAME="IDX88"></A> -Perform tilde expansion on the current word. - -<DT><CODE>set-mark (C-@)</CODE> -<DD> -<A NAME="IDX89"></A> -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD> -<A NAME="IDX90"></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. - -<DT><CODE>character-search (C-])</CODE> -<DD> -<A NAME="IDX91"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD> -<A NAME="IDX92"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -<DT><CODE>insert-comment (M-#)</CODE> -<DD> -<A NAME="IDX93"></A> -The value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -<DT><CODE>dump-functions ()</CODE> -<DD> -<A NAME="IDX94"></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. - -<DT><CODE>dump-variables ()</CODE> -<DD> -<A NAME="IDX95"></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. - -<DT><CODE>dump-macros ()</CODE> -<DD> -<A NAME="IDX96"></A> -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 <VAR>inputrc</VAR> file. This command is unbound by default. - -</DL> - - - -<H2><A NAME="SEC22" HREF="readline.html#TOC22">Readline vi Mode</A></H2> - -<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 M-C-j (toggle-editing-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> - - - -<H1><A NAME="SEC23" HREF="readline.html#TOC23">Programming with GNU Readline</A></H1> - -<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> - -<UL> -<LI><A HREF="readline.html#SEC24">Basic Behavior</A>: Using the default behavior of Readline. -<LI><A HREF="readline.html#SEC25">Custom Functions</A>: Adding your own functions to Readline. -<LI><A HREF="readline.html#SEC28">Readline Variables</A>: Variables accessible to custom - functions. -<LI><A HREF="readline.html#SEC29">Readline Convenience Functions</A>: Functions which Readline supplies to - aid in writing your own custom - functions. -<LI><A HREF="readline.html#SEC40">Readline Signal Handling</A>: How Readline behaves when it receives signals. -<LI><A HREF="readline.html#SEC41">Custom Completers</A>: Supplanting or supplementing Readline's - completion functions. -</UL> - - - -<H2><A NAME="SEC24" HREF="readline.html#TOC24">Basic Behavior</A></H2> - -<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="IDX97"></A> -<A NAME="IDX98"></A> -The function <CODE>readline ()</CODE> prints a prompt and then reads and returns -a single line of text from the user. The line <CODE>readline</CODE> -returns is allocated with <CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> -the line when you are done with it. The declaration for <CODE>readline</CODE> -in ANSI C is - -</P> - -<PRE> -<CODE>char *readline (char *<VAR>prompt</VAR>);</CODE> -</PRE> - -<P> -So, one might say - -<PRE> -<CODE>char *line = readline ("Enter a line: ");</CODE> -</PRE> - -<P> -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> - -<PRE> -<CODE>add_history (line)</CODE>; -</PRE> - -<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> - -<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> - -<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> - -<PRE> -<CODE>int rl_bind_key (int <VAR>key</VAR>, int (*<VAR>function</VAR>)());</CODE> -</PRE> - -<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: - -<PRE> -<CODE>rl_bind_key ('\t', rl_insert);</CODE> -</PRE> - -<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#SEC41">Custom Completers</A>). - -</P> - - -<H2><A NAME="SEC25" HREF="readline.html#TOC25">Custom Functions</A></H2> - -<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> - -<UL> -<LI><A HREF="readline.html#SEC26">The Function Type</A>: C declarations to make code readable. -<LI><A HREF="readline.html#SEC27">Function Writing</A>: Variables and calling conventions. -</UL> - - - -<H3><A NAME="SEC26" HREF="readline.html#TOC26">The Function Type</A></H3> - -<P> -For readabilty, we declare a new type of object, called -<EM>Function</EM>. A <CODE>Function</CODE> is a C function which -returns an <CODE>int</CODE>. The type declaration for <CODE>Function</CODE> is: - -</P> -<P> -<CODE>typedef int Function ();</CODE> - -</P> -<P> -The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called <VAR>func</VAR> which was a pointer to a function. Instead of the -classic C declaration - -</P> -<P> -<CODE>int (*)()func;</CODE> - -</P> -<P> -we may write - -</P> -<P> -<CODE>Function *func;</CODE> - -</P> -<P> -Similarly, there are - -</P> - -<PRE> -typedef void VFunction (); -typedef char *CPFunction (); and -typedef char **CPPFunction (); -</PRE> - -<P> -for functions returning no value, <CODE>pointer to char</CODE>, and -<CODE>pointer to pointer to char</CODE>, respectively. - -</P> - - -<H3><A NAME="SEC27" HREF="readline.html#TOC27">Writing a New Function</A></H3> - -<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> - -<PRE> -<CODE>foo (int count, int key)</CODE> -</PRE> - -<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> - - -<H2><A NAME="SEC28" HREF="readline.html#TOC28">Readline Variables</A></H2> - -<P> -These variables are available to function writers. - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_line_buffer</B> -<DD><A NAME="IDX99"></A> -This is the line gathered so far. You are welcome to modify the -contents of the line, but see section <A HREF="readline.html#SEC34">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> -<DL> -<DT><U>Variable:</U> int <B>rl_point</B> -<DD><A NAME="IDX100"></A> -The offset of the current cursor position in <CODE>rl_line_buffer</CODE> -(the <EM>point</EM>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_end</B> -<DD><A NAME="IDX101"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_mark</B> -<DD><A NAME="IDX102"></A> -The mark (saved position) in the current line. If set, the mark -and point define a <EM>region</EM>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_done</B> -<DD><A NAME="IDX103"></A> -Setting this to a non-zero value causes Readline to return the current -line immediately. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_pending_input</B> -<DD><A NAME="IDX104"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_erase_empty_line</B> -<DD><A NAME="IDX105"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>rl_prompt</B> -<DD><A NAME="IDX106"></A> -The prompt Readline uses. This is set from the argument to -<CODE>readline ()</CODE>, and should not be assigned to directly. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_already_prompted</B> -<DD><A NAME="IDX107"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>rl_library_version</B> -<DD><A NAME="IDX108"></A> -The version number of this revision of the library. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_terminal_name</B> -<DD><A NAME="IDX109"></A> -The terminal type, used for initialization. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_readline_name</B> -<DD><A NAME="IDX110"></A> -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">Conditional Init Constructs</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_instream</B> -<DD><A NAME="IDX111"></A> -The stdio stream from which Readline reads input. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_outstream</B> -<DD><A NAME="IDX112"></A> -The stdio stream to which Readline performs output. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_startup_hook</B> -<DD><A NAME="IDX113"></A> -If non-zero, this is the address of a function to call just -before <CODE>readline</CODE> prints the first prompt. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_pre_input_hook</B> -<DD><A NAME="IDX114"></A> -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> -<DL> -<DT><U>Variable:</U> Function * <B>rl_event_hook</B> -<DD><A NAME="IDX115"></A> -If non-zero, this is the address of a function to call periodically -when readline is waiting for terminal input. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_getc_function</B> -<DD><A NAME="IDX116"></A> -If non-zero, <CODE>readline</CODE> 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 <CODE>readline</CODE> character input function -(see section <A HREF="readline.html#SEC37">Utility Functions</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> VFunction * <B>rl_redisplay_function</B> -<DD><A NAME="IDX117"></A> -If non-zero, <CODE>readline</CODE> 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 <CODE>readline</CODE> -redisplay function (see section <A HREF="readline.html#SEC35">Redisplay</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> -<DD><A NAME="IDX118"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the -currently executing readline function was found. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B> -<DD><A NAME="IDX119"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the -last key binding occurred. -</DL> - -</P> - - -<H2><A NAME="SEC29" HREF="readline.html#TOC29">Readline Convenience Functions</A></H2> - - -<UL> -<LI><A HREF="readline.html#SEC30">Function Naming</A>: How to give a function you write a name. -<LI><A HREF="readline.html#SEC31">Keymaps</A>: Making keymaps. -<LI><A HREF="readline.html#SEC32">Binding Keys</A>: Changing Keymaps. -<LI><A HREF="readline.html#SEC33">Associating Function Names and Bindings</A>: Translate function names to - key sequences. -<LI><A HREF="readline.html#SEC34">Allowing Undoing</A>: How to make your functions undoable. -<LI><A HREF="readline.html#SEC35">Redisplay</A>: Functions to control line display. -<LI><A HREF="readline.html#SEC36">Modifying Text</A>: Functions to modify <CODE>rl_line_buffer</CODE>. -<LI><A HREF="readline.html#SEC37">Utility Functions</A>: Generally useful functions and hooks. -<LI><A HREF="readline.html#SEC38">Alternate Interface</A>: Using Readline in a `callback' fashion. -</UL> - - - -<H3><A NAME="SEC30" HREF="readline.html#TOC30">Naming a Function</A></H3> - -<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> - -<PRE> -Meta-Rubout: backward-kill-word -</PRE> - -<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> -<DL> -<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(char *name, Function *function, int key)</I> -<DD><A NAME="IDX120"></A> -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> - - -<H3><A NAME="SEC31" HREF="readline.html#TOC31">Selecting a Keymap</A></H3> - -<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> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>()</I> -<DD><A NAME="IDX121"></A> -Returns a new, empty keymap. The space for the keymap is allocated with -<CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> it when you are done. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I> -<DD><A NAME="IDX122"></A> -Return a new keymap which is a copy of <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>()</I> -<DD><A NAME="IDX123"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX124"></A> -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> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>()</I> -<DD><A NAME="IDX125"></A> -Returns the currently active keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX126"></A> -Makes <VAR>keymap</VAR> the currently active keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(char *name)</I> -<DD><A NAME="IDX127"></A> -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">Readline Init File</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX128"></A> -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">Readline Init File</A>). -</DL> - -</P> - - -<H3><A NAME="SEC32" HREF="readline.html#TOC32">Binding Keys</A></H3> - -<P> -You associate keys 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">Readline Variables</A>). - -</P> -<P> -These functions manage key bindings. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, Function *function)</I> -<DD><A NAME="IDX129"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, Function *function, Keymap map)</I> -<DD><A NAME="IDX130"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I> -<DD><A NAME="IDX131"></A> -Bind <VAR>key</VAR> to the null function in the currently active keymap. -Returns non-zero in case of error. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I> -<DD><A NAME="IDX132"></A> -Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>. -Returns non-zero in case of error. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(Function *function, Keymap map)</I> -<DD><A NAME="IDX133"></A> -Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(char *command, Keymap map)</I> -<DD><A NAME="IDX134"></A> -Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, char *keyseq, char *data, Keymap map)</I> -<DD><A NAME="IDX135"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I> -<DD><A NAME="IDX136"></A> -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">Readline Init File</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(char *filename)</I> -<DD><A NAME="IDX137"></A> -Read keybindings and variable assignments from <VAR>filename</VAR> -(see section <A HREF="readline.html#SEC9">Readline Init File</A>). -</DL> - -</P> - - -<H3><A NAME="SEC33" HREF="readline.html#TOC33">Associating Function Names and Bindings</A></H3> - -<P> -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. - -</P> -<P> -<DL> -<DT><U>Function:</U> Function * <B>rl_named_function</B> <I>(char *name)</I> -<DD><A NAME="IDX138"></A> -Return the function with name <VAR>name</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Function * <B>rl_function_of_keyseq</B> <I>(char *keyseq, Keymap map, int *type)</I> -<DD><A NAME="IDX139"></A> -Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>. -If <VAR>map</VAR> is NULL, the current keymap is used. If <VAR>type</VAR> is -not NULL, the type of the object is returned in it (one of <CODE>ISFUNC</CODE>, -<CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(Function *function)</I> -<DD><A NAME="IDX140"></A> -Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the current keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(Function *function, Keymap map)</I> -<DD><A NAME="IDX141"></A> -Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I> -<DD><A NAME="IDX142"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>()</I> -<DD><A NAME="IDX143"></A> -Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_funmap_names</B> <I>()</I> -<DD><A NAME="IDX144"></A> -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 done, but not the pointrs. -</DL> - -</P> - - -<H3><A NAME="SEC34" HREF="readline.html#TOC34">Allowing Undoing</A></H3> - -<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. I could use an undo function for -the stock market. - -</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> - -<PRE> -enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; -</PRE> - -<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 undo 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> -<DL> -<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>()</I> -<DD><A NAME="IDX145"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>()</I> -<DD><A NAME="IDX146"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I> -<DD><A NAME="IDX147"></A> -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> -<DL> -<DT><U>Function:</U> void <B>free_undo_list</B> <I>()</I> -<DD><A NAME="IDX148"></A> -Free the existing undo list. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_do_undo</B> <I>()</I> -<DD><A NAME="IDX149"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I> -<DD><A NAME="IDX150"></A> -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> - - -<H3><A NAME="SEC35" HREF="readline.html#TOC35">Redisplay</A></H3> - -<P> -<DL> -<DT><U>Function:</U> void <B>rl_redisplay</B> <I>()</I> -<DD><A NAME="IDX151"></A> -Change what's displayed on the screen to reflect the current contents -of <CODE>rl_line_buffer</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>()</I> -<DD><A NAME="IDX152"></A> -Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>()</I> -<DD><A NAME="IDX153"></A> -Tell the update functions that we have moved onto a new (empty) line, -usually after ouputting a newline. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>()</I> -<DD><A NAME="IDX154"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>()</I> -<DD><A NAME="IDX155"></A> -Reset the display state to a clean state and redisplay the current line -starting on a new line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_message</B> <I>(va_alist)</I> -<DD><A NAME="IDX156"></A> -The arguments are a string as would be supplied to <CODE>printf</CODE>. 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> -<DL> -<DT><U>Function:</U> int <B>rl_clear_message</B> <I>()</I> -<DD><A NAME="IDX157"></A> -Clear the message in the echo area. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>()</I> -<DD><A NAME="IDX158"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>()</I> -<DD><A NAME="IDX159"></A> -Restore the local Readline prompt display state saved by the most -recent call to <CODE>rl_save_prompt</CODE>. -</DL> - -</P> - - -<H3><A NAME="SEC36" HREF="readline.html#TOC36">Modifying Text</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(char *text)</I> -<DD><A NAME="IDX160"></A> -Insert <VAR>text</VAR> into the line at the current cursor position. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX161"></A> -Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX162"></A> -Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in -the current line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX163"></A> -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> - - -<H3><A NAME="SEC37" HREF="readline.html#TOC37">Utility Functions</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_key</B> <I>()</I> -<DD><A NAME="IDX164"></A> -Return the next character available. This handles input inserted into -the input stream via <VAR>pending input</VAR> (see section <A HREF="readline.html#SEC28">Readline Variables</A>) -and <CODE>rl_stuff_char ()</CODE>, macros, and characters read from the keyboard. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *)</I> -<DD><A NAME="IDX165"></A> -Return the next character available from the keyboard. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I> -<DD><A NAME="IDX166"></A> -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>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I> -<DD><A NAME="IDX167"></A> -Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR> -characters, possibly reallocating it if necessary. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_initialize</B> <I>()</I> -<DD><A NAME="IDX168"></A> -Initialize or re-initialize Readline's internal state. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(char *terminal_name)</I> -<DD><A NAME="IDX169"></A> -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 NULL, the value of the <CODE>TERM</CODE> -environment variable is used. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>alphabetic</B> <I>(int c)</I> -<DD><A NAME="IDX170"></A> -Return 1 if <VAR>c</VAR> is an alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>numeric</B> <I>(int c)</I> -<DD><A NAME="IDX171"></A> -Return 1 if <VAR>c</VAR> is a numeric character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>ding</B> <I>()</I> -<DD><A NAME="IDX172"></A> -Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I> -<DD><A NAME="IDX173"></A> -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">Readline Init File Syntax</A>). -</DL> - -</P> -<P> -The following are implemented as macros, defined in <CODE>chartypes.h</CODE>. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>uppercase_p</B> <I>(int c)</I> -<DD><A NAME="IDX174"></A> -Return 1 if <VAR>c</VAR> is an uppercase alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>lowercase_p</B> <I>(int c)</I> -<DD><A NAME="IDX175"></A> -Return 1 if <VAR>c</VAR> is a lowercase alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>digit_p</B> <I>(int c)</I> -<DD><A NAME="IDX176"></A> -Return 1 if <VAR>c</VAR> is a numeric character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>to_upper</B> <I>(int c)</I> -<DD><A NAME="IDX177"></A> -If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding -uppercase character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>to_lower</B> <I>(int c)</I> -<DD><A NAME="IDX178"></A> -If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding -lowercase character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>digit_value</B> <I>(int c)</I> -<DD><A NAME="IDX179"></A> -If <VAR>c</VAR> is a number, return the value it represents. -</DL> - -</P> - - -<H3><A NAME="SEC38" HREF="readline.html#TOC38">Alternate Interface</A></H3> - -<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> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(char *prompt, Vfunction *lhandler)</I> -<DD><A NAME="IDX180"></A> -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 callback when a complete line of input has been entered. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>()</I> -<DD><A NAME="IDX181"></A> -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. <CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a -<CODE>NULL</CODE> line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>()</I> -<DD><A NAME="IDX182"></A> -Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -</DL> - -</P> - - -<H3><A NAME="SEC39" HREF="readline.html#TOC39">An Example</A></H3> - -<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> - -<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 (uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_lower (rl_line_buffer[i]); - else if (lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); -} -</PRE> - - - -<H2><A NAME="SEC40" HREF="readline.html#TOC40">Readline Signal Handling</A></H2> - -<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 a signal is -received 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>). - -</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 state, 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> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_signals</B> -<DD><A NAME="IDX183"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B> -<DD><A NAME="IDX184"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I> -<DD><A NAME="IDX185"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I> -<DD><A NAME="IDX186"></A> -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> -<DL> -<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I> -<DD><A NAME="IDX187"></A> -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> to force Readline to update its idea of -the terminal size when a <CODE>SIGWINCH</CODE> is received. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I> -<DD><A NAME="IDX188"></A> -Update Readline's internal screen size. -</DL> - -</P> -<P> -The following functions install and remove Readline's signal handlers. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I> -<DD><A NAME="IDX189"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I> -<DD><A NAME="IDX190"></A> -Remove all of the Readline signal handlers installed by -<CODE>rl_set_signals ()</CODE>. -</DL> - -</P> - - -<H2><A NAME="SEC41" HREF="readline.html#TOC41">Custom Completers</A></H2> - -<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> - -<UL> -<LI><A HREF="readline.html#SEC42">How Completing Works</A>: The logic used to do completion. -<LI><A HREF="readline.html#SEC43">Completion Functions</A>: Functions provided by Readline. -<LI><A HREF="readline.html#SEC44">Completion Variables</A>: Variables which control completion. -<LI><A HREF="readline.html#SEC45">A Short Completion Example</A>: An example of writing completer subroutines. -</UL> - - - -<H3><A NAME="SEC42" HREF="readline.html#TOC42">How Completing Works</A></H3> - -<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> - -<OL> -<LI> - -The user-interface function <CODE>rl_complete ()</CODE>. This function is -called with the same arguments as other Readline -functions intended for interactive use: <VAR>count</VAR> and -<VAR>invoking_key</VAR>. It isolates the word to be completed and calls -<CODE>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. - -<LI> - -The internal function <CODE>completion_matches ()</CODE> uses your -<EM>generator</EM> function to generate the list of possible matches, and -then returns the array of these matches. You should place the address -of your generator function in <CODE>rl_completion_entry_function</CODE>. - -<LI> - -The generator function is called repeatedly from -<CODE>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. When the generator function returns -<CODE>(char *)NULL</CODE> this signals <CODE>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. - -</OL> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD><A NAME="IDX191"></A> -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>completion_matches ()</CODE>). The default is to do filename completion. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B> -<DD><A NAME="IDX192"></A> -This is a pointer to the generator function for <CODE>completion_matches -()</CODE>. If the value of <CODE>rl_completion_entry_function</CODE> is -<CODE>(Function *)NULL</CODE> then the default filename generator function, -<CODE>filename_completion_function ()</CODE>, is used. -</DL> - -</P> - - -<H3><A NAME="SEC43" HREF="readline.html#TOC43">Completion Functions</A></H3> - -<P> -Here is the complete list of callable completion functions present in -Readline. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I> -<DD><A NAME="IDX193"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD><A NAME="IDX194"></A> -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>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> -<DL> -<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key))</I> -<DD><A NAME="IDX195"></A> -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> -<DL> -<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key))</I> -<DD><A NAME="IDX196"></A> -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> -<DL> -<DT><U>Function:</U> char ** <B>completion_matches</B> <I>(char *text, CPFunction *entry_func)</I> -<DD><A NAME="IDX197"></A> -Returns an array of <CODE>(char *)</CODE> which is a list of completions for -<VAR>text</VAR>. If there are no completions, returns <CODE>(char **)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> -<DL> -<DT><U>Function:</U> char * <B>filename_completion_function</B> <I>(char *text, int state)</I> -<DD><A NAME="IDX198"></A> -A generator function for filename completion in the general case. Note -that completion in Bash is a little different because of all -the pathnames that must be followed when looking up completions for a -command. The Bash source is a useful reference for writing custom -completion functions. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>username_completion_function</B> <I>(char *text, int state)</I> -<DD><A NAME="IDX199"></A> -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> - - -<H3><A NAME="SEC44" HREF="readline.html#TOC44">Completion Variables</A></H3> - -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B> -<DD><A NAME="IDX200"></A> -A pointer to the generator function for <CODE>completion_matches ()</CODE>. -<CODE>NULL</CODE> means to use <CODE>filename_completion_function ()</CODE>, the default -filename completer. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPPFunction * <B>rl_attempted_completion_function</B> -<DD><A NAME="IDX201"></A> -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> saying -what the boundaries of <VAR>text</VAR> are. 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. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPFunction * <B>rl_filename_quoting_function</B> -<DD><A NAME="IDX202"></A> -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> -<DL> -<DT><U>Variable:</U> CPFunction * <B>rl_filename_dequoting_function</B> -<DD><A NAME="IDX203"></A> -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> -<DL> -<DT><U>Variable:</U> Function * <B>rl_char_is_quoted_p</B> -<DD><A NAME="IDX204"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_query_items</B> -<DD><A NAME="IDX205"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>rl_basic_word_break_characters</B> -<DD><A NAME="IDX206"></A> -The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash, i.e., -<CODE>" \t\n\"\\'`@$><=;|&{("</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_basic_quote_characters</B> -<DD><A NAME="IDX207"></A> -List of quote characters which can cause a word break. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_completer_word_break_characters</B> -<DD><A NAME="IDX208"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>rl_completer_quote_characters</B> -<DD><A NAME="IDX209"></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> -<DL> -<DT><U>Variable:</U> char * <B>rl_filename_quote_characters</B> -<DD><A NAME="IDX210"></A> -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> -<DL> -<DT><U>Variable:</U> char * <B>rl_special_prefixes</B> -<DD><A NAME="IDX211"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_append_character</B> -<DD><A NAME="IDX212"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B> -<DD><A NAME="IDX213"></A> -If non-zero, then disallow duplicates in the matches. Default is 1. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B> -<DD><A NAME="IDX214"></A> -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 embedded word break -characters. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B> -<DD><A NAME="IDX215"></A> -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> -<DL> -<DT><U>Variable:</U> int <B>rl_inhibit_completion</B> -<DD><A NAME="IDX216"></A> -If this variable is non-zero, completion is inhibit<ed. The completion -character will be inserted as any other bound to <CODE>self-insert</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_ignore_some_completions_function</B> -<DD><A NAME="IDX217"></A> -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> -<DL> -<DT><U>Variable:</U> Function * <B>rl_directory_completion_hook</B> -<DD><A NAME="IDX218"></A> -This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument. It could be used -to expand symbolic links or shell variables in pathnames. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> VFunction * <B>rl_completion_display_matches_hook</B> -<DD><A NAME="IDX219"></A> -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> - - -<H3><A NAME="SEC45" HREF="readline.html#TOC45">A Short Completion Example</A></H3> - -<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> - -<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 *getwd (); -extern char *xmalloc (); - -/* The names of functions that actually do the manipulation. */ -int com_list (), com_view (), com_rename (), com_stat (), com_pwd (); -int com_delete (), com_help (), com_cd (), com_quit (); - -/* A structure which contains information on the commands this program - can understand. */ - -typedef struct { - char *name; /* User printable name of the function. */ - Function *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ -} COMMAND; - -COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (Function *)NULL, (char *)NULL } -}; - -/* Forward declarations. */ -char *stripwhite (); -COMMAND *find_command (); - -/* The name of this program, as taken from argv[0]. */ -char *progname; - -/* When non-zero, this global means the user is done using this program. */ -int done; - -char * -dupstr (s) - int s; -{ - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); -} - -main (argc, argv) - int argc; - char **argv; -{ - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); -} - -/* Execute a command line. */ -int -execute_line (line) - char *line; -{ - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); -} - -/* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ -COMMAND * -find_command (name) - char *name; -{ - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); -} - -/* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ -char * -stripwhite (string) - char *string; -{ - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; -} - -/* **************************************************************** */ -/* */ -/* Interface to Readline Completion */ -/* */ -/* **************************************************************** */ - -char *command_generator (); -char **fileman_completion (); - -/* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ -initialize_readline () -{ - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *)fileman_completion; -} - -/* Attempt to complete on the contents of TEXT. START and END bound the - region of rl_line_buffer that contains the word to complete. TEXT is - the word to complete. We can use the entire contents of rl_line_buffer - in case we want to do some simple parsing. Return the array of matches, - or NULL if there aren't any. */ -char ** -fileman_completion (text, start, end) - char *text; - int start, end; -{ - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = completion_matches (text, command_generator); - - return (matches); -} - -/* Generator function for command completion. STATE lets us know whether - to start from scratch; without any state (i.e. STATE == 0), then we - start at the top of the list. */ -char * -command_generator (text, state) - char *text; - int state; -{ - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This includes - saving the length of TEXT for efficiency, and initializing the index - variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); -} - -/* **************************************************************** */ -/* */ -/* FileMan Commands */ -/* */ -/* **************************************************************** */ - -/* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ -static char syscom[1024]; - -/* List the file(s) named in arg. */ -com_list (arg) - char *arg; -{ - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); -} - -com_view (arg) - char *arg; -{ - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); -} - -com_rename (arg) - char *arg; -{ - too_dangerous ("rename"); - return (1); -} - -com_stat (arg) - char *arg; -{ - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); -} - -com_delete (arg) - char *arg; -{ - too_dangerous ("delete"); - return (1); -} - -/* Print out help for ARG, or for all of the commands if ARG is - not present. */ -com_help (arg) - char *arg; -{ - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); -} - -/* Change to the directory ARG. */ -com_cd (arg) - char *arg; -{ - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); -} - -/* Print out the current working directory. */ -com_pwd (ignore) - char *ignore; -{ - char dir[1024], *s; - - s = getwd (dir); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; -} - -/* The user wishes to quit using this program. Just set DONE non-zero. */ -com_quit (arg) - char *arg; -{ - done = 1; - return (0); -} - -/* Function which tells you that you can't do this. */ -too_dangerous (caller) - char *caller; -{ - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); -} - -/* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ -int -valid_argument (caller, arg) - char *caller, *arg; -{ - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); -} -</PRE> - - - -<H1><A NAME="SEC46" HREF="readline.html#TOC46">Concept Index</A></H1> -<P> -Jump to: -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_k">k</A> -- -<A HREF="#cindex_n">n</A> -- -<A HREF="#cindex_r">r</A> -- -<A HREF="#cindex_y">y</A> -<P> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX3">command editing</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX4">editing command lines</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX8">initialization file, readline</A> -<LI><A HREF="readline.html#IDX1">interaction, readline</A> -</DIR> -<H2><A NAME="cindex_k">k</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX7">kill ring</A> -<LI><A HREF="readline.html#IDX5">killing text</A> -</DIR> -<H2><A NAME="cindex_n">n</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX2">notation, readline</A> -</DIR> -<H2><A NAME="cindex_r">r</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX98">readline, function</A> -</DIR> -<H2><A NAME="cindex_y">y</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX6">yanking text</A> -</DIR> - -</P> - - -<H1><A NAME="SEC47" HREF="readline.html#TOC47">Function and Variable Index</A></H1> -<P> -Jump to: -<A HREF="#findex_a">a</A> -- -<A HREF="#findex_b">b</A> -- -<A HREF="#findex_c">c</A> -- -<A HREF="#findex_d">d</A> -- -<A HREF="#findex_e">e</A> -- -<A HREF="#findex_f">f</A> -- -<A HREF="#findex_h">h</A> -- -<A HREF="#findex_i">i</A> -- -<A HREF="#findex_k">k</A> -- -<A HREF="#findex_l">l</A> -- -<A HREF="#findex_m">m</A> -- -<A HREF="#findex_n">n</A> -- -<A HREF="#findex_o">o</A> -- -<A HREF="#findex_p">p</A> -- -<A HREF="#findex_q">q</A> -- -<A HREF="#findex_r">r</A> -- -<A HREF="#findex_s">s</A> -- -<A HREF="#findex_t">t</A> -- -<A HREF="#findex_u">u</A> -- -<A HREF="#findex_v">v</A> -- -<A HREF="#findex_y">y</A> -<P> -<H2><A NAME="findex_a">a</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX83">abort (C-g)</A> -<LI><A HREF="readline.html#IDX34">accept-line (Newline, Return)</A> -<LI><A HREF="readline.html#IDX170">alphabetic</A> -</DIR> -<H2><A NAME="findex_b">b</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX29">backward-char (C-b)</A> -<LI><A HREF="readline.html#IDX48">backward-delete-char (Rubout)</A> -<LI><A HREF="readline.html#IDX59">backward-kill-line (C-x Rubout)</A> -<LI><A HREF="readline.html#IDX63">backward-kill-word (M-DEL)</A> -<LI><A HREF="readline.html#IDX31">backward-word (M-b)</A> -<LI><A HREF="readline.html#IDX37">beginning-of-history (M-&#60;)</A> -<LI><A HREF="readline.html#IDX26">beginning-of-line (C-a)</A> -<LI><A HREF="readline.html#IDX9">bell-style</A> -</DIR> -<H2><A NAME="findex_c">c</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX81">call-last-kbd-macro (C-x e)</A> -<LI><A HREF="readline.html#IDX57">capitalize-word (M-c)</A> -<LI><A HREF="readline.html#IDX91">character-search (C-])</A> -<LI><A HREF="readline.html#IDX92">character-search-backward (M-C-])</A> -<LI><A HREF="readline.html#IDX32">clear-screen (C-l)</A> -<LI><A HREF="readline.html#IDX10">comment-begin</A> -<LI><A HREF="readline.html#IDX74">complete (TAB)</A> -<LI><A HREF="readline.html#IDX11">completion-query-items</A> -<LI><A HREF="readline.html#IDX197">completion_matches</A> -<LI><A HREF="readline.html#IDX12">convert-meta</A> -<LI><A HREF="readline.html#IDX68">copy-backward-word ()</A> -<LI><A HREF="readline.html#IDX69">copy-forward-word ()</A> -<LI><A HREF="readline.html#IDX67">copy-region-as-kill ()</A> -</DIR> -<H2><A NAME="findex_d">d</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX47">delete-char (C-d)</A> -<LI><A HREF="readline.html#IDX78">delete-char-or-list ()</A> -<LI><A HREF="readline.html#IDX65">delete-horizontal-space ()</A> -<LI><A HREF="readline.html#IDX72">digit-argument (M-0, M-1, ... M--)</A> -<LI><A HREF="readline.html#IDX176">digit_p</A> -<LI><A HREF="readline.html#IDX179">digit_value</A> -<LI><A HREF="readline.html#IDX172">ding</A> -<LI><A HREF="readline.html#IDX13">disable-completion</A> -<LI><A HREF="readline.html#IDX84">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A> -<LI><A HREF="readline.html#IDX56">downcase-word (M-l)</A> -<LI><A HREF="readline.html#IDX94">dump-functions ()</A> -<LI><A HREF="readline.html#IDX96">dump-macros ()</A> -<LI><A HREF="readline.html#IDX95">dump-variables ()</A> -</DIR> -<H2><A NAME="findex_e">e</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX14">editing-mode</A> -<LI><A HREF="readline.html#IDX15">enable-keypad</A> -<LI><A HREF="readline.html#IDX80">end-kbd-macro (C-x ))</A> -<LI><A HREF="readline.html#IDX38">end-of-history (M-&#62;)</A> -<LI><A HREF="readline.html#IDX27">end-of-line (C-e)</A> -<LI><A HREF="readline.html#IDX90">exchange-point-and-mark (C-x C-x)</A> -<LI><A HREF="readline.html#IDX16">expand-tilde</A> -</DIR> -<H2><A NAME="findex_f">f</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX198">filename_completion_function</A> -<LI><A HREF="readline.html#IDX49">forward-backward-delete-char ()</A> -<LI><A HREF="readline.html#IDX28">forward-char (C-f)</A> -<LI><A HREF="readline.html#IDX40">forward-search-history (C-s)</A> -<LI><A HREF="readline.html#IDX30">forward-word (M-f)</A> -<LI><A HREF="readline.html#IDX148">free_undo_list</A> -</DIR> -<H2><A NAME="findex_h">h</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX44">history-search-backward ()</A> -<LI><A HREF="readline.html#IDX43">history-search-forward ()</A> -<LI><A HREF="readline.html#IDX17">horizontal-scroll-mode</A> -</DIR> -<H2><A NAME="findex_i">i</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX18">input-meta</A> -<LI><A HREF="readline.html#IDX93">insert-comment (M-#)</A> -<LI><A HREF="readline.html#IDX76">insert-completions (M-*)</A> -<LI><A HREF="readline.html#IDX20">isearch-terminators</A> -</DIR> -<H2><A NAME="findex_k">k</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX21">keymap</A> -<LI><A HREF="readline.html#IDX58">kill-line (C-k)</A> -<LI><A HREF="readline.html#IDX66">kill-region ()</A> -<LI><A HREF="readline.html#IDX61">kill-whole-line ()</A> -<LI><A HREF="readline.html#IDX62">kill-word (M-d)</A> -</DIR> -<H2><A NAME="findex_l">l</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX175">lowercase_p</A> -</DIR> -<H2><A NAME="findex_m">m</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX22">mark-modified-lines</A> -<LI><A HREF="readline.html#IDX77">menu-complete ()</A> -<LI><A HREF="readline.html#IDX19">meta-flag</A> -</DIR> -<H2><A NAME="findex_n">n</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX36">next-history (C-n)</A> -<LI><A HREF="readline.html#IDX42">non-incremental-forward-search-history (M-n)</A> -<LI><A HREF="readline.html#IDX41">non-incremental-reverse-search-history (M-p)</A> -<LI><A HREF="readline.html#IDX171">numeric</A> -</DIR> -<H2><A NAME="findex_o">o</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX23">output-meta</A> -</DIR> -<H2><A NAME="findex_p">p</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX75">possible-completions (M-?)</A> -<LI><A HREF="readline.html#IDX85">prefix-meta (ESC)</A> -<LI><A HREF="readline.html#IDX35">previous-history (C-p)</A> -</DIR> -<H2><A NAME="findex_q">q</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX50">quoted-insert (C-q, C-v)</A> -</DIR> -<H2><A NAME="findex_r">r</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX82">re-read-init-file (C-x C-r)</A> -<LI><A HREF="readline.html#IDX97">readline</A> -<LI><A HREF="readline.html#IDX33">redraw-current-line ()</A> -<LI><A HREF="readline.html#IDX39">reverse-search-history (C-r)</A> -<LI><A HREF="readline.html#IDX87">revert-line (M-r)</A> -<LI><A HREF="readline.html#IDX120">rl_add_defun</A> -<LI><A HREF="readline.html#IDX147">rl_add_undo</A> -<LI><A HREF="readline.html#IDX107">rl_already_prompted</A> -<LI><A HREF="readline.html#IDX201">rl_attempted_completion_function</A> -<LI><A HREF="readline.html#IDX207">rl_basic_quote_characters</A> -<LI><A HREF="readline.html#IDX206">rl_basic_word_break_characters</A> -<LI><A HREF="readline.html#IDX145">rl_begin_undo_group</A> -<LI><A HREF="readline.html#IDX129">rl_bind_key</A> -<LI><A HREF="readline.html#IDX130">rl_bind_key_in_map</A> -<LI><A HREF="readline.html#IDX119">rl_binding_keymap</A> -<LI><A HREF="readline.html#IDX180">rl_callback_handler_install</A> -<LI><A HREF="readline.html#IDX182">rl_callback_handler_remove</A> -<LI><A HREF="readline.html#IDX181">rl_callback_read_char</A> -<LI><A HREF="readline.html#IDX183">rl_catch_signals</A> -<LI><A HREF="readline.html#IDX184">rl_catch_sigwinch</A> -<LI><A HREF="readline.html#IDX204">rl_char_is_quoted_p</A> -<LI><A HREF="readline.html#IDX185">rl_cleanup_after_signal</A> -<LI><A HREF="readline.html#IDX157">rl_clear_message</A> -<LI><A HREF="readline.html#IDX190">rl_clear_signals</A> -<LI><A HREF="readline.html#IDX191">rl_complete</A>, <A HREF="readline.html#IDX194">rl_complete</A> -<LI><A HREF="readline.html#IDX193">rl_complete_internal</A> -<LI><A HREF="readline.html#IDX209">rl_completer_quote_characters</A> -<LI><A HREF="readline.html#IDX208">rl_completer_word_break_characters</A> -<LI><A HREF="readline.html#IDX212">rl_completion_append_character</A> -<LI><A HREF="readline.html#IDX219">rl_completion_display_matches_hook</A> -<LI><A HREF="readline.html#IDX192">rl_completion_entry_function</A>, <A HREF="readline.html#IDX200">rl_completion_entry_function</A> -<LI><A HREF="readline.html#IDX205">rl_completion_query_items</A> -<LI><A HREF="readline.html#IDX122">rl_copy_keymap</A> -<LI><A HREF="readline.html#IDX162">rl_copy_text</A> -<LI><A HREF="readline.html#IDX161">rl_delete_text</A> -<LI><A HREF="readline.html#IDX218">rl_directory_completion_hook</A> -<LI><A HREF="readline.html#IDX124">rl_discard_keymap</A> -<LI><A HREF="readline.html#IDX173">rl_display_match_list</A> -<LI><A HREF="readline.html#IDX149">rl_do_undo</A> -<LI><A HREF="readline.html#IDX103">rl_done</A> -<LI><A HREF="readline.html#IDX101">rl_end</A> -<LI><A HREF="readline.html#IDX146">rl_end_undo_group</A> -<LI><A HREF="readline.html#IDX105">rl_erase_empty_line</A> -<LI><A HREF="readline.html#IDX115">rl_event_hook</A> -<LI><A HREF="readline.html#IDX118">rl_executing_keymap</A> -<LI><A HREF="readline.html#IDX167">rl_extend_line_buffer</A> -<LI><A HREF="readline.html#IDX214">rl_filename_completion_desired</A> -<LI><A HREF="readline.html#IDX203">rl_filename_dequoting_function</A> -<LI><A HREF="readline.html#IDX210">rl_filename_quote_characters</A> -<LI><A HREF="readline.html#IDX215">rl_filename_quoting_desired</A> -<LI><A HREF="readline.html#IDX202">rl_filename_quoting_function</A> -<LI><A HREF="readline.html#IDX152">rl_forced_update_display</A> -<LI><A HREF="readline.html#IDX186">rl_free_line_state</A> -<LI><A HREF="readline.html#IDX142">rl_function_dumper</A> -<LI><A HREF="readline.html#IDX139">rl_function_of_keyseq</A> -<LI><A HREF="readline.html#IDX144">rl_funmap_names</A> -<LI><A HREF="readline.html#IDX135">rl_generic_bind</A> -<LI><A HREF="readline.html#IDX125">rl_get_keymap</A> -<LI><A HREF="readline.html#IDX127">rl_get_keymap_by_name</A> -<LI><A HREF="readline.html#IDX128">rl_get_keymap_name</A> -<LI><A HREF="readline.html#IDX165">rl_getc</A> -<LI><A HREF="readline.html#IDX116">rl_getc_function</A> -<LI><A HREF="readline.html#IDX213">rl_ignore_completion_duplicates</A> -<LI><A HREF="readline.html#IDX217">rl_ignore_some_completions_function</A> -<LI><A HREF="readline.html#IDX216">rl_inhibit_completion</A> -<LI><A HREF="readline.html#IDX168">rl_initialize</A> -<LI><A HREF="readline.html#IDX196">rl_insert_completions</A> -<LI><A HREF="readline.html#IDX160">rl_insert_text</A> -<LI><A HREF="readline.html#IDX111">rl_instream</A> -<LI><A HREF="readline.html#IDX140">rl_invoking_keyseqs</A> -<LI><A HREF="readline.html#IDX141">rl_invoking_keyseqs_in_map</A> -<LI><A HREF="readline.html#IDX163">rl_kill_text</A> -<LI><A HREF="readline.html#IDX108">rl_library_version</A> -<LI><A HREF="readline.html#IDX99">rl_line_buffer</A> -<LI><A HREF="readline.html#IDX143">rl_list_funmap_names</A> -<LI><A HREF="readline.html#IDX121">rl_make_bare_keymap</A> -<LI><A HREF="readline.html#IDX123">rl_make_keymap</A> -<LI><A HREF="readline.html#IDX102">rl_mark</A> -<LI><A HREF="readline.html#IDX156">rl_message</A> -<LI><A HREF="readline.html#IDX150">rl_modifying</A> -<LI><A HREF="readline.html#IDX138">rl_named_function</A> -<LI><A HREF="readline.html#IDX153">rl_on_new_line</A> -<LI><A HREF="readline.html#IDX154">rl_on_new_line_with_prompt</A> -<LI><A HREF="readline.html#IDX112">rl_outstream</A> -<LI><A HREF="readline.html#IDX136">rl_parse_and_bind</A> -<LI><A HREF="readline.html#IDX104">rl_pending_input</A> -<LI><A HREF="readline.html#IDX100">rl_point</A> -<LI><A HREF="readline.html#IDX195">rl_possible_completions</A> -<LI><A HREF="readline.html#IDX114">rl_pre_input_hook</A> -<LI><A HREF="readline.html#IDX106">rl_prompt</A> -<LI><A HREF="readline.html#IDX137">rl_read_init_file</A> -<LI><A HREF="readline.html#IDX164">rl_read_key</A> -<LI><A HREF="readline.html#IDX110">rl_readline_name</A> -<LI><A HREF="readline.html#IDX151">rl_redisplay</A> -<LI><A HREF="readline.html#IDX117">rl_redisplay_function</A> -<LI><A HREF="readline.html#IDX187">rl_reset_after_signal</A> -<LI><A HREF="readline.html#IDX155">rl_reset_line_state</A> -<LI><A HREF="readline.html#IDX169">rl_reset_terminal</A> -<LI><A HREF="readline.html#IDX188">rl_resize_terminal</A> -<LI><A HREF="readline.html#IDX159">rl_restore_prompt</A> -<LI><A HREF="readline.html#IDX158">rl_save_prompt</A> -<LI><A HREF="readline.html#IDX126">rl_set_keymap</A> -<LI><A HREF="readline.html#IDX189">rl_set_signals</A> -<LI><A HREF="readline.html#IDX211">rl_special_prefixes</A> -<LI><A HREF="readline.html#IDX113">rl_startup_hook</A> -<LI><A HREF="readline.html#IDX166">rl_stuff_char</A> -<LI><A HREF="readline.html#IDX109">rl_terminal_name</A> -<LI><A HREF="readline.html#IDX134">rl_unbind_command_in_map</A> -<LI><A HREF="readline.html#IDX133">rl_unbind_function_in_map</A> -<LI><A HREF="readline.html#IDX131">rl_unbind_key</A> -<LI><A HREF="readline.html#IDX132">rl_unbind_key_in_map</A> -</DIR> -<H2><A NAME="findex_s">s</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX52">self-insert (a, b, A, 1, !, ...)</A> -<LI><A HREF="readline.html#IDX89">set-mark (C-@)</A> -<LI><A HREF="readline.html#IDX24">show-all-if-ambiguous</A> -<LI><A HREF="readline.html#IDX79">start-kbd-macro (C-x ()</A> -</DIR> -<H2><A NAME="findex_t">t</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX51">tab-insert (M-TAB)</A> -<LI><A HREF="readline.html#IDX88">tilde-expand (M-~)</A> -<LI><A HREF="readline.html#IDX178">to_lower</A> -<LI><A HREF="readline.html#IDX177">to_upper</A> -<LI><A HREF="readline.html#IDX53">transpose-chars (C-t)</A> -<LI><A HREF="readline.html#IDX54">transpose-words (M-t)</A> -</DIR> -<H2><A NAME="findex_u">u</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX86">undo (C-_, C-x C-u)</A> -<LI><A HREF="readline.html#IDX73">universal-argument ()</A> -<LI><A HREF="readline.html#IDX60">unix-line-discard (C-u)</A> -<LI><A HREF="readline.html#IDX64">unix-word-rubout (C-w)</A> -<LI><A HREF="readline.html#IDX55">upcase-word (M-u)</A> -<LI><A HREF="readline.html#IDX174">uppercase_p</A> -<LI><A HREF="readline.html#IDX199">username_completion_function</A> -</DIR> -<H2><A NAME="findex_v">v</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX25">visible-stats</A> -</DIR> -<H2><A NAME="findex_y">y</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX70">yank (C-y)</A> -<LI><A HREF="readline.html#IDX46">yank-last-arg (M-., M-_)</A> -<LI><A HREF="readline.html#IDX45">yank-nth-arg (M-C-y)</A> -<LI><A HREF="readline.html#IDX71">yank-pop (M-y)</A> -</DIR> - -</P> -<P><HR><P> -This document was generated on 1 March 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/readline/doc/readline.info b/readline/doc/readline.info deleted file mode 100644 index ae6767fa19c..00000000000 --- a/readline/doc/readline.info +++ /dev/null @@ -1,3107 +0,0 @@ -This is Info file readline.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -END-INFO-DIR-ENTRY - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - - Copyright (C) 1988-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: readline.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. -* Programming with GNU Readline:: GNU Readline Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text <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 <RETURN>. You do not have to be at the end -of the line to press <RETURN>; the entire line is accepted regardless -of the location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may 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 previous 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'. - - -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. - - 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. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - 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. 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'. - - `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 strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `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-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. - - `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'. - - `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 the name of - the key you wish to bind the command to, a colon, and then the - name of the command on a line in the init file. The name of the - key can be expressed in different ways, depending on which is most - comfortable for you. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, <C-u> is bound to the function - `universal-argument', and <C-o> is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, <C-u> is bound to the function - `universal-argument' (just as it was in the first example), - `<C-x> <C-r>' is bound to the function `re-read-init-file', - and `<ESC> <[> <1> <1> <~>' is bound to insert the text - `Function Key 1'. - - The following 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 character whose `ASCII' code is the octal value NNN (one - to three digits) - - `\xNNN' - the character whose `ASCII' code is the hexadecimal value NNN - (one to three 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 it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as 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. - $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, Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list. If this line was a history - line, then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line 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). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-., M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. 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 under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not 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, 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. - -`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. - - -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 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 the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is yank or yank-pop. - - -File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. <M-> starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (TAB)' - Attempt to do completion on the text before the cursor. This is - application-specific. Generally, if you are typing a filename - argument, you can do filename completion; if you are typing a - command, you can do command completion; if you are typing in a - symbol to GDB, you can do symbol name completion; if you are - typing in a variable to Bash, you can do variable name completion, - and so on. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`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 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)' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing `ESC f' is equivalent to typing `M-f'. - -`undo (C-_, C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like 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 current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they ouput. If a numeric argument is supplied, the output - is formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - - -File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command M-C-j (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - This document describes the GNU Readline Library, a utility for -aiding in the consitency of user interface across discrete programs -that need to provide a command line interface. - - Copyright (C) 1988, 1994, 1996, 1998, 1999 Free Software Foundation, -Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the 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 and then reads and returns -a single line of text from the user. The line `readline' returns is -allocated with `malloc ()'; you should `free ()' the line when you are -done with it. The declaration for `readline' in ANSI C is - - `char *readline (char *PROMPT);' - -So, one might say - `char *line = readline ("Enter a line: ");' - -in order to read a line of text from the user. The line returned has -the final newline removed, so only the text remains. - - If `readline' encounters an `EOF' while reading the line, and the -line is empty at that point, then `(char *)NULL' is returned. -Otherwise, the line is ended just as if a newline had been typed. - - If you want the user to be able to get at the line later, (with -<C-p> for example), you must call `add_history ()' to save the line -away in a "history" list of such lines. - - `add_history (line)'; - -For full details on the GNU History Library, see the associated manual. - - It is preferable to avoid saving empty lines on the history list, -since users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard `gets ()' library -function, and has the advantage of no static buffer to overflow: - - /* A static variable for holding the line. */ - static char *line_read = (char *)NULL; - - /* Read a string, and return a pointer to it. Returns NULL on EOF. */ - char * - rl_gets () - { - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - free (line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); - } - - This function gives the user the default behaviour of <TAB> -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the <TAB> key with -`rl_bind_key ()'. - - `int rl_bind_key (int KEY, int (*FUNCTION)());' - - `rl_bind_key ()' takes two arguments: KEY is the character that you -want to bind, and FUNCTION is the address of the function to call when -KEY is pressed. Binding <TAB> to `rl_insert ()' makes <TAB> insert -itself. `rl_bind_key ()' returns non-zero if KEY is not a valid ASCII -character code (between 0 and 255). - - Thus, to disable the default <TAB> behavior, the following suffices: - `rl_bind_key ('\t', rl_insert);' - - This code should be executed once at the start of your program; you -might write a function called `initialize_readline ()' which performs -this and other desired initializations, such as installing custom -completers (*note Custom Completers::.). - - -File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline - -Custom Functions -================ - - Readline provides many functions for manipulating the text of the -line, but it isn't possible to anticipate the needs of all programs. -This section describes the various functions and variables defined -within the Readline library which allow a user program to add -customized functionality to Readline. - - 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'. - -* Menu: - -* The Function Type:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. - - -File: readline.info, Node: The Function Type, Next: Function Writing, Up: Custom Functions - -The Function Type ------------------ - - For readabilty, we declare a new type of object, called "Function". -A `Function' is a C function which returns an `int'. The type -declaration for `Function' is: - -`typedef int Function ();' - - The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called FUNC which was a pointer to a function. Instead of the classic -C declaration - - `int (*)()func;' - -we may write - - `Function *func;' - -Similarly, there are - - typedef void VFunction (); - typedef char *CPFunction (); and - typedef char **CPPFunction (); - -for functions returning no value, `pointer to char', and `pointer to -pointer to char', respectively. - - -File: readline.info, Node: Function Writing, Prev: The Function Type, Up: Custom Functions - -Writing a New Function ----------------------- - - In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - - The calling sequence for a command `foo' looks like - - `foo (int count, int key)' - -where COUNT is the numeric argument (or 1 if defaulted) and KEY is the -key that invoked this function. - - It is completely up to the function as to what should be done with -the numeric argument. Some functions use it as a repeat count, some as -a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a function uses the numeric argument as a -repeat count, it should be able to do something useful with both -negative and positive arguments. At the very least, it should be aware -that it can be passed a negative argument. - - -File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline - -Readline Variables -================== - - These variables are available to function writers. - - - Variable: char * rl_line_buffer - This is the line gathered so far. You are welcome to modify the - contents of the line, but see *Note Allowing Undoing::. 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_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_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. - - - 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: char * rl_library_version - The version number of this revision of the library. - - - Variable: char * rl_terminal_name - The terminal type, used for initialization. - - - Variable: char * rl_readline_name - This variable is set to a unique name by each application using - Readline. The value allows conditional parsing of the inputrc file - (*note Conditional Init Constructs::.). - - - Variable: FILE * rl_instream - The stdio stream from which Readline reads input. - - - Variable: FILE * rl_outstream - The stdio stream to which Readline performs output. - - - Variable: Function * rl_startup_hook - If non-zero, this is the address of a function to call just before - `readline' prints the first prompt. - - - Variable: Function * rl_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: Function * rl_event_hook - If non-zero, this is the address of a function to call periodically - when readline is waiting for terminal input. - - - Variable: Function * rl_getc_function - If non-zero, `readline' will call indirectly through this pointer - to get a character from the input stream. By default, it is set to - `rl_getc', the default `readline' character input function (*note - Utility Functions::.). - - - Variable: VFunction * rl_redisplay_function - If non-zero, `readline' will call indirectly through this pointer - to update the display with the current contents of the editing - buffer. By default, it is set to `rl_redisplay', the default - `readline' redisplay function (*note Redisplay::.). - - - Variable: Keymap rl_executing_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - currently executing readline function was found. - - - Variable: Keymap rl_binding_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - last key binding occurred. - - -File: readline.info, Node: Readline Convenience Functions, Next: 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'. -* Utility Functions:: Generally useful functions and hooks. -* Alternate Interface:: Using Readline in a `callback' fashion. - - -File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions - -Naming a Function ------------------ - - The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - - Meta-Rubout: backward-kill-word - - This binds the keystroke <Meta-Rubout> to the function -*descriptively* named `backward-kill-word'. You, as the programmer, -should bind the functions you write to descriptive names as well. -Readline provides a function for doing that: - - - Function: int rl_add_defun (char *name, Function *function, int key) - Add NAME to the list of named functions. Make FUNCTION be the - function that gets called. If KEY is not -1, then bind it to - FUNCTION using `rl_bind_key ()'. - - Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other than adding a -function to Readline, you may need to use the underlying functions -described below. - - -File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions - -Selecting a Keymap ------------------- - - Key bindings take place on a "keymap". The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - - - Function: Keymap rl_make_bare_keymap () - Returns a new, empty keymap. The space for the keymap is - allocated with `malloc ()'; you should `free ()' it when you are - done. - - - Function: Keymap rl_copy_keymap (Keymap map) - Return a new keymap which is a copy of MAP. - - - Function: Keymap rl_make_keymap () - Return a new keymap with the printing characters bound to - rl_insert, the lowercase Meta characters bound to run their - equivalents, and the Meta digits bound to produce numeric - arguments. - - - Function: void rl_discard_keymap (Keymap keymap) - Free the storage associated with KEYMAP. - - Readline has several internal keymaps. These functions allow you to -change which keymap is active. - - - Function: Keymap rl_get_keymap () - Returns the currently active keymap. - - - Function: void rl_set_keymap (Keymap keymap) - Makes KEYMAP the currently active keymap. - - - Function: Keymap rl_get_keymap_by_name (char *name) - Return the keymap matching NAME. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - - Function: char * rl_get_keymap_name (Keymap keymap) - Return the name matching KEYMAP. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - -File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions - -Binding Keys ------------- - - You associate keys with functions through the keymap. Readline has -several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap', -`emacs_ctlx_keymap', `vi_movement_keymap', and `vi_insertion_keymap'. -`emacs_standard_keymap' is the default, and the examples in this manual -assume that. - - 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, Function *function) - Binds KEY to FUNCTION in the currently active keymap. Returns - non-zero in the case of an invalid KEY. - - - Function: int rl_bind_key_in_map (int key, Function *function, - Keymap map) - Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an - invalid KEY. - - - Function: int rl_unbind_key (int key) - Bind KEY to the null function in the currently active keymap. - Returns non-zero in case of error. - - - Function: int rl_unbind_key_in_map (int key, Keymap map) - Bind KEY to the null function in MAP. Returns non-zero in case of - error. - - - Function: int rl_unbind_function_in_map (Function *function, Keymap - map) - Unbind all keys that execute FUNCTION in MAP. - - - Function: int rl_unbind_command_in_map (char *command, Keymap map) - Unbind all keys that are bound to COMMAND in MAP. - - - Function: int rl_generic_bind (int type, char *keyseq, char *data, - Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - arbitrary pointer DATA. TYPE says what kind of data is pointed to - by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or - a keymap (`ISKMAP'). This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_parse_and_bind (char *line) - Parse LINE as if it had been read from the `inputrc' file and - perform any key bindings and variable assignments found (*note - Readline Init File::.). - - - Function: int rl_read_init_file (char *filename) - Read keybindings and variable assignments from FILENAME (*note - Readline Init File::.). - - -File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions - -Associating Function Names and Bindings ---------------------------------------- - - These functions allow you to find out what keys invoke named -functions and the functions invoked by a particular key sequence. - - - Function: Function * rl_named_function (char *name) - Return the function with name NAME. - - - Function: Function * rl_function_of_keyseq (char *keyseq, Keymap - map, int *type) - Return the function invoked by KEYSEQ in keymap MAP. If MAP is - NULL, the current keymap is used. If TYPE is not NULL, the type - of the object is returned in it (one of `ISFUNC', `ISKMAP', or - `ISMACR'). - - - Function: char ** rl_invoking_keyseqs (Function *function) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the current keymap. - - - Function: char ** rl_invoking_keyseqs_in_map (Function *function, - Keymap map) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the keymap MAP. - - - Function: void rl_function_dumper (int readable) - Print the readline function names and the key sequences currently - bound to them to `rl_outstream'. If READABLE is non-zero, the - list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: void rl_list_funmap_names () - Print the names of all bindable Readline functions to - `rl_outstream'. - - - Function: char ** rl_funmap_names () - 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 done, but not the - pointrs. - - -File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions - -Allowing Undoing ----------------- - - Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try something if -you know you can undo it. I could use an undo function for the stock -market. - - If your function simply inserts text once, or deletes text once, and -uses `rl_insert_text ()' or `rl_delete_text ()' to do it, then undoing -is already done for you automatically. - - If you do multiple insertions or multiple deletions, or any -combination of these operations, you should group them together into -one operation. This is done with `rl_begin_undo_group ()' and -`rl_end_undo_group ()'. - - The types of events that can be undone are: - - enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; - - Notice that `UNDO_DELETE' means to insert some text, and -`UNDO_INSERT' means to delete some text. That is, the undo code tells -undo what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are -tags added by `rl_begin_undo_group ()' and `rl_end_undo_group ()'. - - - Function: int rl_begin_undo_group () - Begins saving undo information in a group construct. The undo - information usually comes from calls to `rl_insert_text ()' and - `rl_delete_text ()', but could be the result of calls to - `rl_add_undo ()'. - - - Function: int rl_end_undo_group () - Closes the current undo group started with `rl_begin_undo_group - ()'. There should be one call to `rl_end_undo_group ()' for each - call to `rl_begin_undo_group ()'. - - - Function: void rl_add_undo (enum undo_code what, int start, int end, - char *text) - Remember how to undo an event (according to WHAT). The affected - text runs from START to END, and encompasses TEXT. - - - Function: void free_undo_list () - Free the existing undo list. - - - Function: int rl_do_undo () - Undo the first thing on the undo list. Returns `0' if there was - nothing to undo, non-zero if something was undone. - - Finally, if you neither insert nor delete text, but directly modify -the existing text (e.g., change its case), call `rl_modifying ()' once, -just before you modify the text. You must supply the indices of the -text range that you are going to modify. - - - Function: int rl_modifying (int start, int end) - Tell Readline to save the text between START and END as a single - undo unit. It is assumed that you will subsequently modify that - text. - - -File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions - -Redisplay ---------- - - - Function: void rl_redisplay () - Change what's displayed on the screen to reflect the current - contents of `rl_line_buffer'. - - - Function: int rl_forced_update_display () - Force the line to be updated and redisplayed, whether or not - Readline thinks the screen display is correct. - - - Function: int rl_on_new_line () - Tell the update functions that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - Function: int rl_on_new_line_with_prompt () - 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 () - Reset the display state to a clean state and redisplay the current - line starting on a new line. - - - Function: int rl_message (va_alist) - The arguments are a string as would be supplied to `printf'. The - resulting string is displayed in the "echo area". The echo area - is also used to display numeric arguments and search strings. - - - Function: int rl_clear_message () - Clear the message in the echo area. - - - Function: void rl_save_prompt () - 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 () - Restore the local Readline prompt display state saved by the most - recent call to `rl_save_prompt'. - - -File: readline.info, Node: Modifying Text, Next: Utility Functions, Prev: Redisplay, Up: Readline Convenience Functions - -Modifying Text --------------- - - - Function: int rl_insert_text (char *text) - Insert TEXT into the line at the current cursor position. - - - Function: int rl_delete_text (int start, int end) - Delete the text between START and END in the current line. - - - Function: char * rl_copy_text (int start, int end) - Return a copy of the text between START and END in the current - line. - - - Function: int rl_kill_text (int start, int end) - Copy the text between START and END in the current line to the - kill ring, appending or prepending to the last kill if the last - command was a kill command. The text is deleted. If START is - less than END, the text is appended, otherwise prepended. If the - last command was not a kill, a new kill ring slot is used. - - -File: readline.info, Node: Utility Functions, Next: Alternate Interface, Prev: Modifying Text, Up: Readline Convenience Functions - -Utility Functions ------------------ - - - Function: int rl_read_key () - Return the next character available. This handles input inserted - into the input stream via PENDING INPUT (*note Readline - Variables::.) and `rl_stuff_char ()', macros, and characters read - from the keyboard. - - - Function: int rl_getc (FILE *) - Return the next character available from the keyboard. - - - Function: int rl_stuff_char (int c) - Insert C into the Readline input stream. It will be "read" before - Readline attempts to read characters from the terminal with - `rl_read_key ()'. - - - Function: 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 () - Initialize or re-initialize Readline's internal state. - - - Function: int rl_reset_terminal (char *terminal_name) - Reinitialize Readline's idea of the terminal settings using - TERMINAL_NAME as the terminal type (e.g., `vt100'). If - TERMINAL_NAME is NULL, the value of the `TERM' environment - variable is used. - - - Function: int alphabetic (int c) - Return 1 if C is an alphabetic character. - - - Function: int numeric (int c) - Return 1 if C is a numeric character. - - - Function: int ding () - Ring the terminal bell, obeying the setting of `bell-style'. - - - 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 `chartypes.h'. - - - Function: int uppercase_p (int c) - Return 1 if C is an uppercase alphabetic character. - - - Function: int lowercase_p (int c) - Return 1 if C is a lowercase alphabetic character. - - - Function: int digit_p (int c) - Return 1 if C is a numeric character. - - - Function: int to_upper (int c) - If C is a lowercase alphabetic character, return the corresponding - uppercase character. - - - Function: int to_lower (int c) - If C is an uppercase alphabetic character, return the corresponding - lowercase character. - - - Function: int digit_value (int c) - If C is a number, return the value it represents. - - -File: readline.info, Node: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions - -Alternate Interface -------------------- - - An alternate interface is available to plain `readline()'. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to `select()' on -various file descriptors. To accomodate this need, readline can also -be invoked as a `callback' function from an event loop. There are -functions available to make this easy. - - - Function: void rl_callback_handler_install (char *prompt, Vfunction - *lhandler) - Set up the terminal for readline I/O and display the initial - expanded value of PROMPT. Save the value of LHANDLER to use as a - callback when a complete line of input has been entered. - - - Function: void rl_callback_read_char () - Whenever an application determines that keyboard input is - available, it should call `rl_callback_read_char()', which will - read the next character from the current input source. If that - character completes the line, `rl_callback_read_char' will invoke - the LHANDLER function saved by `rl_callback_handler_install' to - process the line. `EOF' is indicated by calling LHANDLER with a - `NULL' line. - - - Function: void rl_callback_handler_remove () - Restore the terminal to its initial state and remove the line - handler. This may be called from within a callback as well as - independently. - -An Example ----------- - - Here is a function which changes lowercase characters to their -uppercase equivalents, and uppercase characters to lowercase. If this -function was bound to `M-c', then typing `M-c' would change the case of -the character under point. Typing `M-1 0 M-c' would change the case of -the following 10 characters, leaving the cursor on the last character -changed. - - /* Invert the case of the COUNT following characters. */ - int - invert_case_line (count, key) - int count, key; - { - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, so it will save - the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_lower (rl_line_buffer[i]); - else if (lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); - } - - -File: readline.info, Node: 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 a signal is -received to restore the terminal to a sane state, or provide application -writers with functions to do so manually. - - Readline contains an internal signal handler that is installed for a -number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', -`SIGTSTP', `SIGTTIN', and `SIGTTOU'). When one of these signals is -received, the signal handler will reset the terminal attributes to -those that were in effect before `readline ()' was called, reset the -signal handling to what it was before `readline ()' was called, and -resend the signal to the calling application. If and when the calling -application's signal handler returns, Readline will reinitialize the -terminal and continue to accept input. When a `SIGINT' is received, -the Readline signal handler performs some additional work, which will -cause any partially-entered line to be aborted (see the description of -`rl_free_line_state ()'). - - There is an additional Readline signal handler, for `SIGWINCH', which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an `xterm'). The Readline `SIGWINCH' -handler updates Readline's internal screen size state, and then calls -any `SIGWINCH' signal handler the calling application has installed. -Readline calls the application's `SIGWINCH' signal handler without -resetting the terminal to its original state. If the application's -signal handler does more than update its idea of the terminal size and -return (for example, a `longjmp' back to a main processing loop), it -*must* call `rl_cleanup_after_signal ()' (described below), to restore -the terminal state. - - Readline provides two variables that allow application writers to -control whether or not it will catch certain signals and act on them -when they are received. It is important that applications change the -values of these variables only when calling `readline ()', not in a -signal handler, so Readline's internal signal state is not corrupted. - - - 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 ()' 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. - - 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 Readline functions - intended for interactive use: COUNT and INVOKING_KEY. It - isolates the word to be completed and calls `completion_matches - ()' to generate a list of possible completions. It then either - lists the possible completions, inserts the possible completions, - or actually performs the completion, depending on which behavior - is desired. - - 2. The internal function `completion_matches ()' uses your - "generator" function to generate the list of possible matches, and - then returns the array of these matches. You should place the - address of your generator function in - `rl_completion_entry_function'. - - 3. The generator function is called repeatedly from - `completion_matches ()', returning a string each time. The - arguments to the generator function are TEXT and STATE. TEXT is - the partial word to be completed. STATE is zero the first time - the function is called, allowing the generator to perform any - necessary initialization, and a positive non-zero integer for each - subsequent call. When the generator function returns `(char - *)NULL' this signals `completion_matches ()' that there are no - more possibilities left. Usually the generator function computes - the list of possible completions when STATE is zero, and returns - them one at a time on subsequent calls. Each string the generator - function returns as a match must be allocated with `malloc()'; - Readline frees the strings when it has finished with them. - - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()'). The default is to do filename - completion. - - - Variable: Function * rl_completion_entry_function - This is a pointer to the generator function for `completion_matches - ()'. If the value of `rl_completion_entry_function' is `(Function - *)NULL' then the default filename generator function, - `filename_completion_function ()', is used. - - -File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers - -Completion Functions --------------------- - - Here is the complete list of callable completion functions present in -Readline. - - - Function: int rl_complete_internal (int what_to_do) - Complete the word at or before point. WHAT_TO_DO says what to do - with the completion. A value of `?' means list the possible - completions. `TAB' means do standard completion. `*' means - insert all of the possible completions. `!' means to display all - of the possible completions, if there is more than one, as well as - performing partial completion. - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()' and `rl_completion_entry_function'). - The default is to do filename completion. This calls - `rl_complete_internal ()' with an argument depending on - INVOKING_KEY. - - - Function: int rl_possible_completions (int count, int invoking_key)) - List the possible completions. See description of `rl_complete - ()'. This calls `rl_complete_internal ()' with an argument of `?'. - - - Function: int rl_insert_completions (int count, int invoking_key)) - Insert the list of possible completions into the line, deleting the - partially-completed word. See description of `rl_complete ()'. - This calls `rl_complete_internal ()' with an argument of `*'. - - - Function: char ** completion_matches (char *text, CPFunction - *entry_func) - Returns an array of `(char *)' which is a list of completions for - TEXT. If there are no completions, returns `(char **)NULL'. The - first entry in the returned array is the substitution for TEXT. - The remaining entries are the possible completions. The array is - terminated with a `NULL' pointer. - - ENTRY_FUNC is a function of two args, and returns a `(char *)'. - The first argument is TEXT. The second is a state argument; it is - zero on the first call, and non-zero on subsequent calls. - ENTRY_FUNC returns a `NULL' pointer to the caller when there are - no more matches. - - - Function: char * filename_completion_function (char *text, int state) - A generator function for filename completion in the general case. - Note that completion in Bash is a little different because of all - the pathnames that must be followed when looking up completions - for a command. The Bash source is a useful reference for writing - custom completion functions. - - - Function: char * username_completion_function (char *text, int state) - A completion generator for usernames. TEXT contains a partial - username preceded by a random character (usually `~'). As with all - completion generators, STATE is zero on the first call and non-zero - for subsequent calls. - - -File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers - -Completion Variables --------------------- - - - Variable: Function * rl_completion_entry_function - A pointer to the generator function for `completion_matches ()'. - `NULL' means to use `filename_completion_function ()', the default - filename completer. - - - Variable: CPPFunction * rl_attempted_completion_function - A pointer to an alternative function to create matches. The - function is called with TEXT, START, and END. START and END are - indices in `rl_line_buffer' saying what the boundaries of TEXT - are. If this function exists and returns `NULL', or if this - variable is set to `NULL', then `rl_complete ()' will call the - value of `rl_completion_entry_function' to generate matches, - otherwise the array of strings returned will be used. - - - Variable: CPFunction * rl_filename_quoting_function - A pointer to a function that will quote a filename in an - application- specific fashion. This is called if filename - completion is being attempted and one of the characters in - `rl_filename_quote_characters' appears in a completed filename. - The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. - The TEXT is the filename to be quoted. The MATCH_TYPE is either - `SINGLE_MATCH', if there is only one completion match, or - `MULT_MATCH'. Some functions use this to decide whether or not to - insert a closing quote character. The QUOTE_POINTER is a pointer - to any opening quote character the user typed. Some functions - choose to reset this character. - - - Variable: CPFunction * rl_filename_dequoting_function - A pointer to a function that will remove application-specific - quoting characters from a filename before completion is attempted, - so those characters do not interfere with matching the text - against names in the filesystem. It is called with TEXT, the text - of the word to be dequoted, and QUOTE_CHAR, which is the quoting - character that delimits the filename (usually `'' or `"'). If - QUOTE_CHAR is zero, the filename was not in an embedded string. - - - Variable: Function * rl_char_is_quoted_p - A pointer to a function to call that determines whether or not a - specific character in the line buffer is quoted, according to - whatever quoting mechanism the program calling readline uses. The - function is called with two arguments: TEXT, the text of the line, - and INDEX, the index of the character in the line. It is used to - decide whether a character found in - `rl_completer_word_break_characters' should be used to break words - for the completer. - - - Variable: int rl_completion_query_items - Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she is - sure she wants to see them all. The default value is 100. - - - Variable: char * rl_basic_word_break_characters - The basic list of characters that signal a break between words for - the completer routine. The default value of this variable is the - characters which break words for completion in Bash, i.e., `" - \t\n\"\\'`@$><=;|&{("'. - - - Variable: char * rl_basic_quote_characters - List of quote characters which can cause a word break. - - - Variable: char * rl_completer_word_break_characters - The list of characters that signal a break between words for - `rl_complete_internal ()'. The default list is the value of - `rl_basic_word_break_characters'. - - - Variable: char * rl_completer_quote_characters - List of characters which can be used to quote a substring of the - line. Completion occurs on the entire substring, and within the - substring `rl_completer_word_break_characters' are treated as any - other character, unless they also appear within this list. - - - Variable: char * rl_filename_quote_characters - A list of characters that cause a filename to be quoted by the - completer when they appear in a completed filename. The default - is the null string. - - - Variable: char * rl_special_prefixes - The list of characters that are word break characters, but should - be left in TEXT when it is passed to the completion function. - Programs can use this to help determine what kind of completing to - do. For instance, Bash sets this variable to "$@" so that it can - complete shell variables and hostnames. - - - Variable: int rl_completion_append_character - When a single completion alternative matches at the end of the - command line, this character is appended to the inserted - completion text. The default is a space character (` '). Setting - this to the null character (`\0') prevents anything being appended - automatically. This can be changed in custom completion functions - to provide the "most sensible word separator character" according - to an application-specific command line syntax specification. - - - Variable: int rl_ignore_completion_duplicates - If non-zero, then disallow duplicates in the matches. Default is - 1. - - - Variable: int rl_filename_completion_desired - Non-zero means that the results of the matches are to be treated as - filenames. This is *always* zero on entry, and can only be changed - within a completion entry generator function. If it is set to a - non-zero value, directory names have a slash appended and Readline - attempts to quote completed filenames if they contain any embedded - word break characters. - - - Variable: int rl_filename_quoting_desired - Non-zero means that the results of the matches are to be quoted - using double quotes (or an application-specific quoting mechanism) - if the completed filename contains any characters in - `rl_filename_quote_chars'. This is *always* non-zero on entry, - and can only be changed within a completion entry generator - function. The quoting is effected via a call to the function - pointed to by `rl_filename_quoting_function'. - - - Variable: int rl_inhibit_completion - If this variable is non-zero, completion is inhibit<ed. The - completion character will be inserted as any other bound to - `self-insert'. - - - Variable: Function * rl_ignore_some_completions_function - This function, if defined, is called by the completer when real - filename completion is done, after all the matching names have - been generated. It is passed a `NULL' terminated array of matches. - The first element (`matches[0]') is the maximal substring common - to all matches. This function can re-arrange the list of matches - as required, but each element deleted from the array must be freed. - - - Variable: Function * rl_directory_completion_hook - This function, if defined, is allowed to modify the directory - portion of filenames Readline completes. It is called with the - address of a string (the current directory name) as an argument. - It could be used to expand symbolic links or shell variables in - pathnames. - - - Variable: VFunction * 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. - - -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 *getwd (); - extern char *xmalloc (); - - /* The names of functions that actually do the manipulation. */ - int com_list (), com_view (), com_rename (), com_stat (), com_pwd (); - int com_delete (), com_help (), com_cd (), com_quit (); - - /* A structure which contains information on the commands this program - can understand. */ - - typedef struct { - char *name; /* User printable name of the function. */ - Function *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ - } COMMAND; - - COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (Function *)NULL, (char *)NULL } - }; - - /* Forward declarations. */ - char *stripwhite (); - COMMAND *find_command (); - - /* The name of this program, as taken from argv[0]. */ - char *progname; - - /* When non-zero, this global means the user is done using this program. */ - int done; - - char * - dupstr (s) - int s; - { - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); - } - - main (argc, argv) - int argc; - char **argv; - { - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); - } - - /* Execute a command line. */ - int - execute_line (line) - char *line; - { - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); - } - - /* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ - COMMAND * - find_command (name) - char *name; - { - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); - } - - /* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ - char * - stripwhite (string) - char *string; - { - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; - } - - /* **************************************************************** */ - /* */ - /* Interface to Readline Completion */ - /* */ - /* **************************************************************** */ - - char *command_generator (); - char **fileman_completion (); - - /* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ - initialize_readline () - { - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *)fileman_completion; - } - - /* Attempt to complete on the contents of TEXT. START and END bound the - region of rl_line_buffer that contains the word to complete. TEXT is - the word to complete. We can use the entire contents of rl_line_buffer - in case we want to do some simple parsing. Return the array of matches, - or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - char *text; - int start, end; - { - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = completion_matches (text, command_generator); - - return (matches); - } - - /* Generator function for command completion. STATE lets us know whether - to start from scratch; without any state (i.e. STATE == 0), then we - start at the top of the list. */ - char * - command_generator (text, state) - char *text; - int state; - { - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This includes - saving the length of TEXT for efficiency, and initializing the index - variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); - } - - /* **************************************************************** */ - /* */ - /* FileMan Commands */ - /* */ - /* **************************************************************** */ - - /* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ - static char syscom[1024]; - - /* List the file(s) named in arg. */ - com_list (arg) - char *arg; - { - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); - } - - com_view (arg) - char *arg; - { - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); - } - - com_rename (arg) - char *arg; - { - too_dangerous ("rename"); - return (1); - } - - com_stat (arg) - char *arg; - { - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); - } - - com_delete (arg) - char *arg; - { - too_dangerous ("delete"); - return (1); - } - - /* Print out help for ARG, or for all of the commands if ARG is - not present. */ - com_help (arg) - char *arg; - { - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); - } - - /* Change to the directory ARG. */ - com_cd (arg) - char *arg; - { - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); - } - - /* Print out the current working directory. */ - com_pwd (ignore) - char *ignore; - { - char dir[1024], *s; - - s = getwd (dir); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; - } - - /* The user wishes to quit using this program. Just set DONE non-zero. */ - com_quit (arg) - char *arg; - { - done = 1; - return (0); - } - - /* Function which tells you that you can't do this. */ - too_dangerous (caller) - char *caller; - { - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); - } - - /* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; - { - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); - } - - -File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top - -Concept Index -************* - -* Menu: - -* command editing: Readline Bare Essentials. -* editing command lines: Readline Bare Essentials. -* initialization file, readline: Readline Init File. -* interaction, readline: Readline Interaction. -* kill ring: Readline Killing Commands. -* killing text: Readline Killing Commands. -* notation, readline: Readline Bare Essentials. -* readline, function: Basic Behavior. -* yanking text: Readline Killing Commands. - - -File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* abort (C-g): Miscellaneous Commands. -* accept-line (Newline, Return): Commands For History. -* alphabetic: Utility Functions. -* backward-char (C-b): Commands For Moving. -* backward-delete-char (Rubout): Commands For Text. -* backward-kill-line (C-x Rubout): Commands For Killing. -* backward-kill-word (M-DEL): Commands For Killing. -* backward-word (M-b): Commands For Moving. -* beginning-of-history (M-<): Commands For History. -* beginning-of-line (C-a): Commands For Moving. -* bell-style: Readline Init File Syntax. -* call-last-kbd-macro (C-x e): Keyboard Macros. -* capitalize-word (M-c): Commands For Text. -* character-search (C-]): Miscellaneous Commands. -* character-search-backward (M-C-]): Miscellaneous Commands. -* clear-screen (C-l): Commands For Moving. -* comment-begin: Readline Init File Syntax. -* complete (TAB): Commands For Completion. -* completion-query-items: Readline Init File Syntax. -* completion_matches: Completion Functions. -* convert-meta: Readline Init File Syntax. -* copy-backward-word (): Commands For Killing. -* copy-forward-word (): Commands For Killing. -* copy-region-as-kill (): Commands For Killing. -* delete-char (C-d): Commands For Text. -* delete-char-or-list (): Commands For Completion. -* delete-horizontal-space (): Commands For Killing. -* digit-argument (M-0, M-1, ... M--): Numeric Arguments. -* digit_p: Utility Functions. -* digit_value: Utility Functions. -* ding: Utility Functions. -* disable-completion: Readline Init File Syntax. -* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. -* downcase-word (M-l): Commands For Text. -* dump-functions (): Miscellaneous Commands. -* dump-macros (): Miscellaneous Commands. -* dump-variables (): Miscellaneous Commands. -* editing-mode: Readline Init File Syntax. -* enable-keypad: Readline Init File Syntax. -* end-kbd-macro (C-x )): Keyboard Macros. -* end-of-history (M->): Commands For History. -* end-of-line (C-e): Commands For Moving. -* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. -* expand-tilde: Readline Init File Syntax. -* filename_completion_function: Completion Functions. -* forward-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. -* free_undo_list: Allowing Undoing. -* history-search-backward (): Commands For History. -* history-search-forward (): Commands For History. -* horizontal-scroll-mode: Readline Init File Syntax. -* input-meta: Readline Init File Syntax. -* insert-comment (M-#): Miscellaneous Commands. -* insert-completions (M-*): Commands For Completion. -* 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. -* lowercase_p: Utility Functions. -* mark-modified-lines: 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. -* numeric: Utility Functions. -* output-meta: Readline Init File Syntax. -* possible-completions (M-?): Commands For Completion. -* prefix-meta (ESC): Miscellaneous Commands. -* previous-history (C-p): Commands For History. -* quoted-insert (C-q, C-v): Commands For Text. -* re-read-init-file (C-x C-r): Miscellaneous Commands. -* readline: Basic Behavior. -* redraw-current-line (): Commands For Moving. -* reverse-search-history (C-r): Commands For History. -* revert-line (M-r): Miscellaneous Commands. -* rl_add_defun: Function Naming. -* rl_add_undo: Allowing Undoing. -* rl_already_prompted: Readline Variables. -* rl_attempted_completion_function: Completion Variables. -* rl_basic_quote_characters: Completion Variables. -* rl_basic_word_break_characters: Completion Variables. -* rl_begin_undo_group: Allowing Undoing. -* rl_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_signals: Readline Signal Handling. -* rl_complete <1>: Completion Functions. -* rl_complete: How Completing Works. -* 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_query_items: Completion Variables. -* rl_copy_keymap: Keymaps. -* rl_copy_text: Modifying Text. -* rl_delete_text: Modifying Text. -* rl_directory_completion_hook: Completion Variables. -* rl_discard_keymap: Keymaps. -* rl_display_match_list: Utility Functions. -* rl_do_undo: Allowing Undoing. -* rl_done: Readline Variables. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_erase_empty_line: Readline Variables. -* rl_event_hook: Readline Variables. -* rl_executing_keymap: Readline Variables. -* rl_extend_line_buffer: Utility Functions. -* rl_filename_completion_desired: Completion Variables. -* rl_filename_dequoting_function: Completion Variables. -* rl_filename_quote_characters: Completion Variables. -* rl_filename_quoting_desired: Completion Variables. -* rl_filename_quoting_function: Completion Variables. -* rl_forced_update_display: Redisplay. -* rl_free_line_state: Readline Signal Handling. -* 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_getc: Utility Functions. -* rl_getc_function: 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_library_version: Readline Variables. -* rl_line_buffer: Readline Variables. -* rl_list_funmap_names: Associating Function Names and Bindings. -* rl_make_bare_keymap: Keymaps. -* rl_make_keymap: Keymaps. -* rl_mark: Readline Variables. -* rl_message: Redisplay. -* rl_modifying: Allowing Undoing. -* rl_named_function: Associating Function Names and Bindings. -* rl_on_new_line: Redisplay. -* rl_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_prompt: Readline Variables. -* rl_read_init_file: Binding Keys. -* rl_read_key: Utility Functions. -* rl_readline_name: Readline Variables. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_reset_after_signal: Readline Signal Handling. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Utility Functions. -* rl_resize_terminal: Readline Signal Handling. -* rl_restore_prompt: Redisplay. -* rl_save_prompt: Redisplay. -* rl_set_keymap: Keymaps. -* rl_set_signals: Readline Signal Handling. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Utility Functions. -* rl_terminal_name: Readline Variables. -* 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. -* 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. -* to_lower: Utility Functions. -* to_upper: Utility Functions. -* transpose-chars (C-t): Commands For Text. -* transpose-words (M-t): Commands For Text. -* undo (C-_, C-x C-u): Miscellaneous Commands. -* universal-argument (): Numeric Arguments. -* unix-line-discard (C-u): Commands For Killing. -* unix-word-rubout (C-w): Commands For Killing. -* upcase-word (M-u): Commands For Text. -* uppercase_p: Utility Functions. -* username_completion_function: Completion Functions. -* visible-stats: Readline Init File Syntax. -* yank (C-y): Commands For Killing. -* yank-last-arg (M-., M-_): Commands For History. -* yank-nth-arg (M-C-y): Commands For History. -* yank-pop (M-y): Commands For Killing. - - - -Tag Table: -Node: Top1190 -Node: Command Line Editing1789 -Node: Introduction and Notation2440 -Node: Readline Interaction4058 -Node: Readline Bare Essentials5251 -Node: Readline Movement Commands7032 -Node: Readline Killing Commands7989 -Node: Readline Arguments9895 -Node: Searching10870 -Node: Readline Init File12713 -Node: Readline Init File Syntax13774 -Node: Conditional Init Constructs23039 -Node: Sample Init File25478 -Node: Bindable Readline Commands28648 -Node: Commands For Moving29692 -Node: Commands For History30541 -Node: Commands For Text33258 -Node: Commands For Killing35261 -Node: Numeric Arguments37228 -Node: Commands For Completion38355 -Node: Keyboard Macros40103 -Node: Miscellaneous Commands40662 -Node: Readline vi Mode43466 -Node: Programming with GNU Readline45236 -Node: Basic Behavior46204 -Node: Custom Functions49530 -Node: The Function Type50508 -Node: Function Writing51353 -Node: Readline Variables52437 -Node: Readline Convenience Functions56649 -Node: Function Naming57387 -Node: Keymaps58615 -Node: Binding Keys60329 -Node: Associating Function Names and Bindings62903 -Node: Allowing Undoing64746 -Node: Redisplay67331 -Node: Modifying Text69108 -Node: Utility Functions70019 -Node: Alternate Interface72799 -Node: Readline Signal Handling76093 -Node: Custom Completers81139 -Node: How Completing Works81854 -Node: Completion Functions84850 -Node: Completion Variables87865 -Node: A Short Completion Example95768 -Node: Concept Index108074 -Node: Function and Variable Index108828 - -End Tag Table diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps deleted file mode 100644 index c16dca605bd..00000000000 --- a/readline/doc/readline.ps +++ /dev/null @@ -1,4570 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: readline.dvi -%%Pages: 56 -%%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 2000.03.01:1453 -%%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/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end 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/IE 256 array N 2 string 0 1 255{IE 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 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 cmmi9 9 1 -/Fc 1 59 df<126012F0A2126004047D830B>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt9 9 53 -/Fd 53 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<EA07C0EA0FE0EA1C70EA3838EA3018EA701CA2EAE00EA9EA701CA2EA3838A2EA1C -70EA0FE0EA07C00F177E9614>48 D<1203A25A5A123F12F712471207AEEA7FF0A20C177C -9614>I<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F -80EA03C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA -03E0EA01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F -157E9514>62 D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A4 -1300C7FCA41203EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC -1271EA731E1277EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F -177E9614>I<EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2 -487EA238FE3F80A211177F9614>I<EAFFF013FCEA381E130E1307A4130E131EEA3FFCA2 -EA381E130E1307A5130E131EEAFFFC13F810177F9614>I<3801F180EA07FFEA0E1FEA1C -071238EA7003A348C7FCA738700380A338380700121CEA0E0EEA07FCEA01F011177F9614 ->I<EAFFE013F8EA383C7F130E7FA3EB0380A8EB0700A2130E131E5BEAFFF813E011177F -9614>I<B5FCA2EA3807A490C7FCA21338A2EA3FF8A2EA3838A290C7FCA3EB0380A4B5FC -A211177F9614>I<B4FCA21238AF1307A4B5FCA210177E9614>76 -D<38FC1F80A2007C1300EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80 -A211177F9614>I<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4 -133E12FEA211177F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA5 -1480EB1DC0A238FE0F80EB070012177F9614>82 D<EA0FCCEA1FFCEA307CEA603CEAE01C -A313001270127EEA3FE0EA0FF0EA01F8EA001C131E130E126012E0A2EAF01CEAF838EAFF -F0EAC7E00F177E9614>I<387FFF80B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I< -EAFFE0A21200B3A712FFA20B1D7F9914>93 D<EAFFFEA30F037E7E14>95 -D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3EA707C383FFF -80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0 -A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804 -EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130E -A5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF1217 -7F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA -380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12 -FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA30 -18EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C -1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF -8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I< -12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF -1F80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF38 -3CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA -38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA -3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB -0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA -1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F -14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8 -EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFF -F8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F0 -0F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A238 -3C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700 -EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA -0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38 -FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7 -FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA07 -00120EEA1C0712381270B5FCA210107F8F14>I<EA1C10EA3F38EAE7E0EA41C00D047D96 -14>126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmsl9 9 2 -/Fe 2 121 df<1270A212F0126004047D830B>46 D<383FC7E038078380EB0200EA0384 -13C8EA01D8EA00F05B7F120113381202487EEA081E123838FC3FC013107F8F14>120 -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 24 -/Fi 24 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<EB7C38EA01FF000713F8EA -0F83EA1E00001C13785A14385AA214005AA812701438A27EA26C1370001E13F0380F83E0 -3807FFC00001138038007C00151E7E9D1A>67 D<B512F8A3381C0038A51400A2130EA3EA -1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E00 -1CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<B5 -1280A33801C000B3A6B51280A3111E7C9D1A>73 D<387F03F838FF87FC387F03F8381C01 -E0EB03C01480EB07005B131E131C5B13785B7F121DEA1FDC139C130EEA1E0F7F001C1380 -1303EB01C0A2EB00E0A21470007F13FC38FF81FE387F00FC171E7F9D1A>75 -D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E7F9D1A>I<EAFFFEEBFF80 -14C0381C03E0EB00F0147014781438A41478147014F0EB03E0381FFFC01480EBFE00001C -C7FCA9B47EA3151E7E9D1A>80 D<38FF01FEA3381C0070A3001E13F0000E13E0A3380701 -C0A438038380A43801C700A4EA00C613EEA3136C137CA21338171E7F9D1A>86 -D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803127012 -E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 D<EBFF80000313C0000F13 -E0EA1F01383C00C04813001270A25AA51270A2007813707E381F01F0380FFFE0000313C0 -3800FE0014157D941A>99 D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA78 -03EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<EA01 -F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0A300E0C7FC1270A200 -7813707E381F01F0380FFFE0000313803800FE0014157D941A>I<12FEA3120EA6133EEB -FF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I< -387CE0E038FFFBF8EA7FFF381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F -00191580941A>109 D<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E7 -13E317157F941A>I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0 -A6EAF001007013C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<EA -FE3EEBFF80B512E0380FC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EB -FFC0000E1380EB3E0090C7FCA8EAFFE0A316207F941A>I<387F81F838FF8FFC387F9FFE -3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114 -D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F -9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C -A2133817157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB -8380EA01C3A2EBC700EA00E7A213E61366136E133CA31338A3137813701230EA78E01271 -EA7FC06C5A001EC7FC17207F941A>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmmi10 10.95 1 -/Fj 1 59 df<127012F8A3127005057C840D>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmsltt10 10.95 6 -/Fk 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07 -C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C -0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E -00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6 -38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E -A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303 -3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 13.14 52 -/Fl 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: Fm cmsl10 10.95 28 -/Fm 28 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380 -70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12 -D<EAFFF0A20C027E8A0F>45 D<0007B512F83900F800780178133815185B1508A53901E0 -0800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E> -70 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C -146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381 -380F00016D487E39FFF00FFE231F7E9E23>75 D<EA07F8EA0C0CEA1E061307121C1200A3 -13FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F878014147D9317 ->97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14F0A538 -7001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA0383380E -0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314> -I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA -0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FCA6EA03 -80121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712011200 -A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E7FA213 -0F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0 -A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98618639 -07A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E -3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713E01300 -A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C -00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07 -E014147D9317>I<EBE3E03807EC383801F01C6C487E140F48487E1580A53903800F00A2 -140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319> -I<EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0A21307 -127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381F -B380EA07C71203EB8300EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9 -EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212 -601306EAF004EAC818EA87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00 -A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03 -A238380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0 -001C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15 -147C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D810013 -09EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321 ->I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E13 -4E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F80 -3901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C -133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmr8 8 41 -/Fn 41 124 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<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F -000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616 ->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3 -EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13 -101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0 -14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0 -EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470 -A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96 -1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC -EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038 -1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814 -10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206 -217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379 -EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400 -5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA -70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012 -E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA -E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670 -120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70 -70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838 -EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712 -7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813 -F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C -EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5 -EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400 -5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12 -6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A -70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80 -EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0 -EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80 -110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700 -0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07 -4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE -1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212 -A4127810147F8D13>I<B512801101808812>123 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmsy9 9 2 -/Fo 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmcsc10 10.95 8 -/Fp 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E -48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900 -781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E -38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4 -15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038 -0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713 -80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB -F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB -087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A -FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813 -08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E -961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C -130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -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<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>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 90 -/Ft 90 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<B512F8A3381C0038A4 -1400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>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<EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8A3EA00 -38B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18>95 -D<1206121E123E12381270A212E0A312F812FC127CA21238070E789E18>I<EA0FF0EA1F -FC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3EAF007EA780F383F -FFF8EA1FFDEA07F015147E9318>I<127E12FE127E120EA5133EEBFF80000F13C0EBC1E0 -1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E138038063E00151C809B18 ->I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270EB01C01238EA3E0338 -1FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5EA03E3EA0FFBEA1FFF -EA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFFF0380FFBF83803E3F0 -151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A238E001C0A2B5FCA300 -E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D9318>I<EB1F80EB7F -C0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7FFFA3131C7F9B18>I< -3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7 -FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E03381FFFC06C13 -803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13C013C1EB80E013 -00120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA07C0A3EA0380C7FCA4 -EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA313381300A4EA0FFCA3EA00 -1CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E12FE127E120EA5EB3F -F0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014C0387FC7F812FF -127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9C1C038FFF7F013 -FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF -80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA -01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C -0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E0 -1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7F -C0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6 -EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E93 -18>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E -9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F3860 -0780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5 -FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EA -FE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF0 -00FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A2 -137015147F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD -000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA07 -8EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000 -FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207 -EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F -806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B -13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB -780013E0AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18> -I<126012F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB -7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8 -EAF1F0EA60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmr10 10.95 78 -/Fu 78 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 -07C0EAFFFE0F1E7C9D17>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<90380FE0109038381C309038E002703803C00139078000F048C71270121E -15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903 -C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD -90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I< -3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E -17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13 -C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E -9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C> -I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A2 -90380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E -2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2 -EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E -9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A200 -7C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB -03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C14 -1E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I< -B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143CA3 -143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA80 -40A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80 -A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706 -EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38 -FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600 -7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01 -8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7 -FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD -18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0 -00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14 -7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12 -60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70 -06130EEAFFFE10147F9314>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 693 a Fv(GNU)33 b(Readline)h(Library)p 75 -743 1800 17 v 936 791 a Fu(Edition)17 b(4.1,)c(for)i -Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.1.)1609 845 -y(Jan)o(uary)f(2000)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 250 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f -(GNU)g(Readline)i(Library)l(,)e(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h -(the)f(consistency)75 305 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 373 y(Published)g(b)o(y)f(the)f(F)l(ree)g -(Soft)o(w)o(are)f(F)l(oundation)75 427 y(59)h(T)l(emple)h(Place,)f -(Suite)i(330,)75 482 y(Boston,)d(MA)h(02111)f(USA)75 -549 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 604 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 -671 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 726 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 781 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 -848 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 903 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 958 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)i Fu(1988-1999)e(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 183 y Fq(1)41 b(Command)28 b(Line)e(Editing)137 -299 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 -426 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -522 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 -589 y(The)h(text)327 587 y Fo(h)p 339 561 56 2 v 339 -589 a Fn(C-k)p 339 597 V 393 587 a Fo(i)424 589 y Fu(is)f(read)g(as)g -(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q -(duced)h(when)f(the)1831 587 y Fo(h)p 1844 561 19 2 v -1844 589 a Fn(k)p 1844 597 V 1860 587 a Fo(i)75 644 y -Fu(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h -(depressed.)137 711 y(The)f(text)325 709 y Fo(h)p 337 -683 63 2 v 337 711 a Fn(M-k)p 337 719 V 397 709 a Fo(i)427 -711 y Fu(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -764 y Fo(h)p 942 738 19 2 v 942 766 a Fn(k)p 942 774 -V 958 764 a Fo(i)987 766 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 764 y -Fo(h)p 1791 738 72 2 v 1791 766 a Fn(AL)m(T)p 1791 774 -V 1860 764 a Fo(i)75 821 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 819 y Fo(h)p 1225 793 V 1225 821 a Fn(AL)m(T)p 1225 -828 V 1294 819 a Fo(i)1322 821 y Fu(\(usually)i(to)e(either)i(side)g -(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fo(h)p -400 847 V 400 876 a Fn(AL)m(T)p 400 883 V 469 874 a Fo(i)499 -876 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 874 y Fo(h)p -1709 847 V 1709 876 a Fn(AL)m(T)p 1709 883 V 1778 874 -a Fo(i)1808 876 y Fu(k)o(ey)75 930 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 985 -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 1052 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1050 y Fo(h)p 706 1024 V 706 1052 a Fn(AL)m(T)p 706 1060 -V 775 1050 a Fo(i)801 1052 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 -1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping) -809 1105 y Fo(h)p 821 1079 70 2 v 821 1107 a Fn(ESC)p -821 1115 V 888 1105 a Fo(i)915 1107 y Fm(\014rst)p Fu(,)g(and)g(then)h -(t)o(yping)1339 1105 y Fo(h)p 1351 1079 19 2 v 1351 1107 -a Fn(k)p 1351 1115 V 1368 1105 a Fo(i)1383 1107 y Fu(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j -Fm(metafying)k Fu(the)425 1160 y Fo(h)p 437 1134 V 437 -1162 a Fn(k)p 437 1169 V 454 1160 a Fo(i)484 1162 y Fu(k)o(ey)l(.)137 -1229 y(The)h(text)334 1227 y Fo(h)p 347 1201 100 2 v -347 1229 a Fn(M-C-k)p 347 1236 V 444 1227 a Fo(i)479 -1229 y Fu(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h -(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Fm(metafying)291 -1281 y Fo(h)p 303 1255 56 2 v 303 1283 a Fn(C-k)p 303 -1291 V 357 1281 a Fo(i)372 1283 y Fu(.)137 1350 y(In)e(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 1348 y Fo(h)p 1396 1322 -73 2 v 1396 1350 a Fn(DEL)p 1396 1358 V 1467 1348 a Fo(i)1482 -1350 y Fu(,)1514 1348 y Fo(h)p 1526 1322 70 2 v 1526 -1350 a Fn(ESC)p 1526 1358 V 1593 1348 a Fo(i)1608 1350 -y Fu(,)1640 1348 y Fo(h)p 1652 1322 72 2 v 1652 1350 -a Fn(LFD)p 1652 1358 V 1722 1348 a Fo(i)1737 1350 y Fu(,)1768 -1348 y Fo(h)p 1780 1322 70 2 v 1780 1350 a Fn(SPC)p 1780 -1358 V 1847 1348 a Fo(i)1862 1350 y Fu(,)75 1403 y Fo(h)p -87 1377 76 2 v 87 1405 a Fn(RET)p 87 1413 V 160 1403 -a Fo(i)175 1405 y Fu(,)23 b(and)306 1403 y Fo(h)p 318 -1377 74 2 v 318 1405 a Fn(T)m(AB)p 318 1413 V 390 1403 -a Fo(i)427 1405 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 -1460 y(Section)d(1.3)f([Readline)i(Init)f(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 -1458 y Fo(h)p 1456 1432 72 2 v 1456 1460 a Fn(LFD)p 1456 -1468 V 1526 1458 a Fo(i)1560 1460 y Fu(k)o(ey)l(,)h(t)o(yping)1802 -1458 y Fo(h)p 1814 1432 49 2 v 1814 1460 a Fn(C-j)p 1814 -1468 V 1860 1458 a Fo(i)75 1515 y Fu(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1513 y Fo(h)p 886 1487 76 2 -v 886 1515 a Fn(RET)p 886 1522 V 959 1513 a Fo(i)989 -1515 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513 -y Fo(h)p 1397 1487 109 2 v 1397 1515 a Fn(Return)p 1397 -1522 V 1503 1513 a Fo(i)1533 1515 y Fu(or)1588 1513 y -Fo(h)p 1600 1487 86 2 v 1600 1515 a Fn(En)o(ter)p 1600 -1522 V 1684 1513 a Fo(i)1714 1515 y Fu(on)f(some)75 1569 -y(k)o(eyb)q(oards.)75 1697 y Fs(1.2)33 b(Readline)23 -b(In)n(teraction)137 1793 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 1848 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1903 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 1958 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 2012 -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 -2067 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 2065 y Fo(h)p 1172 2039 155 -2 v 1172 2067 a Fn(RETURN)p 1172 2075 V 1324 2065 a Fo(i)1339 -2067 y Fu(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75 -2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120 -y Fo(h)p 646 2094 V 646 2122 a Fn(RETURN)p 646 2130 V -798 2120 a Fo(i)813 2122 y Fu(;)g(the)h(en)o(tire)g(line)h(is)f -(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177 -y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y -Fl(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137 -2384 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 2439 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 2493 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)f(other)f(c)o -(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102 -2613 y Fo(h)p 1114 2587 57 2 v 1114 2615 a Fn(C-b)p 1114 -2623 V 1168 2613 a Fo(i)1197 2615 y Fu(to)f(mo)o(v)o(e)g(the)h(cursor)g -(to)f(the)h(left,)g(and)75 2670 y(then)i(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)1714 2668 y Fo(h)p 1727 2642 -49 2 v 1727 2670 a Fn(C-f)p 1727 2678 V 1772 2668 a Fo(i)1787 -2670 y Fu(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)i(Library)137 -183 y(When)g(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 -238 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 293 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 348 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 -402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 479 y Fo(h)p 87 453 57 2 v 87 481 a Fn(C-b)p -87 489 V 142 479 a Fo(i)315 481 y Fu(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o -(haracter.)75 558 y Fo(h)p 87 532 49 2 v 87 560 a Fn(C-f)p -87 567 V 133 558 a Fo(i)315 560 y Fu(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c) -o(haracter.)75 636 y Fo(h)p 87 610 73 2 v 87 638 a Fn(DEL)p -87 646 V 158 636 a Fo(i)188 638 y Fu(or)244 636 y Fo(h)p -256 610 159 2 v 256 638 a Fn(Bac)o(kspace)p 256 646 V -412 636 a Fo(i)315 693 y Fu(Delete)h(the)f(c)o(haracter)g(to)f(the)h -(left)h(of)f(the)g(cursor.)75 770 y Fo(h)p 87 744 57 -2 v 87 772 a Fn(C-d)p 87 779 V 142 770 a Fo(i)315 772 -y Fu(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -981 y Fo(h)p 87 955 50 2 v 87 983 a Fn(C-)p 126 983 11 -2 v 87 991 50 2 v 135 981 a Fo(i)165 983 y Fu(or)221 -981 y Fo(h)p 233 955 125 2 v 233 983 a Fn(C-x)c(C-u)p -233 991 V 355 981 a Fo(i)315 1038 y Fu(Undo)17 b(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 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on) -f(y)o(our)g(con\014guration,)g(the)863 1170 y Fo(h)p -875 1144 159 2 v 875 1172 a Fn(Bac)o(kspace)p 875 1179 -V 1032 1170 a Fo(i)1063 1172 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 1226 y(left)h(of)f(the)h(cursor)f -(and)g(the)596 1224 y Fo(h)p 608 1198 73 2 v 608 1226 -a Fn(DEL)p 608 1234 V 679 1224 a Fo(i)710 1226 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 -1279 y Fo(h)p 87 1253 57 2 v 87 1281 a Fn(C-d)p 87 1289 -V 142 1279 a Fo(i)157 1281 y Fu(,)f(rather)f(than)h(the)h(c)o(haracter) -e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fl(1.2.2)30 -b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487 -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 1542 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 1597 y(to)130 -1595 y Fo(h)p 142 1569 V 142 1597 a Fn(C-b)p 142 1605 -V 197 1595 a Fo(i)212 1597 y Fu(,)239 1595 y Fo(h)p 251 -1569 49 2 v 251 1597 a Fn(C-f)p 251 1605 V 297 1595 a -Fo(i)312 1597 y Fu(,)339 1595 y Fo(h)p 351 1569 57 2 -v 351 1597 a Fn(C-d)p 351 1605 V 406 1595 a Fo(i)421 -1597 y Fu(,)g(and)536 1595 y Fo(h)p 548 1569 73 2 v 548 -1597 a Fn(DEL)p 548 1605 V 619 1595 a Fo(i)634 1597 y -Fu(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h -(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fo(h)p -87 1702 55 2 v 87 1730 a Fn(C-a)p 87 1738 V 140 1728 -a Fo(i)315 1730 y Fu(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.) -75 1807 y Fo(h)p 87 1781 53 2 v 87 1809 a Fn(C-e)p 87 -1817 V 138 1807 a Fo(i)315 1809 y Fu(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f -(the)g(line.)75 1885 y Fo(h)p 87 1859 55 2 v 87 1887 -a Fn(M-f)p 87 1895 V 140 1885 a Fo(i)315 1887 y Fu(Mo)o(v)o(e)f(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 1964 y Fo(h)p 87 1938 64 -2 v 87 1966 a Fn(M-b)p 87 1974 V 149 1964 a Fo(i)315 -1966 y Fu(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2043 y Fo(h)p 87 2017 48 2 v 87 2045 a Fn(C-l)p 87 2052 -V 132 2043 a Fo(i)315 2045 y Fu(Clear)g(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w) -368 2121 y Fo(h)p 380 2095 49 2 v 380 2123 a Fn(C-f)p -380 2131 V 426 2121 a Fo(i)452 2123 y Fu(mo)o(v)o(es)f(forw)o(ard)f(a)i -(c)o(haracter,)f(while)1105 2121 y Fo(h)p 1117 2095 55 -2 v 1117 2123 a Fn(M-f)p 1117 2131 V 1170 2121 a Fo(i)1197 -2123 y Fu(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18 -b(It)12 b(is)g(a)g(lo)q(ose)75 2178 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 2233 y(w)o(ords.)75 -2343 y Fl(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2439 y Fm(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 2494 y(usually)f(b)o(y)f Fm(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 -2549 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 183 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 Fm(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 -238 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 293 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 -348 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 415 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 492 y Fo(h)p -87 466 56 2 v 87 494 a Fn(C-k)p 87 502 V 141 492 a Fo(i)315 -494 y Fu(Kill)f(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 571 y -Fo(h)p 87 545 64 2 v 87 573 a Fn(M-d)p 87 581 V 149 571 -a Fo(i)315 573 y Fu(Kill)g(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 628 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)1728 -626 y Fo(h)p 1740 600 55 2 v 1740 628 a Fn(M-f)p 1740 -636 V 1793 626 a Fo(i)1808 628 y Fu(.)75 705 y Fo(h)p -87 679 118 2 v 87 707 a Fn(M-DEL)p 87 715 V 202 705 a -Fo(i)315 707 y Fu(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h -(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f -(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 815 y Fo(h)p 327 789 64 2 v 327 817 a Fn(M-b)p -327 825 V 389 815 a Fo(i)404 817 y Fu(.)75 894 y Fo(h)p -87 868 63 2 v 87 896 a Fn(C-w)p 87 904 V 148 894 a Fo(i)315 -896 y Fu(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h -(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733 -894 y Fo(h)p 1745 868 118 2 v 1745 896 a Fn(M-DEL)p 1745 -904 V 1860 894 a Fo(i)315 951 y Fu(b)q(ecause)g(the)f(w)o(ord)g(b)q -(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g -Fm(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 -1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75 -1163 y Fo(h)p 87 1137 56 2 v 87 1165 a Fn(C-y)p 87 1172 -V 141 1163 a Fo(i)315 1165 y Fu(Y)l(ank)e(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 1242 y Fo(h)p 87 1216 63 2 v 87 1244 a Fn(M-y)p -87 1252 V 148 1242 a Fo(i)315 1244 y Fu(Rotate)h(the)g(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 1299 y(command)d(is)568 -1297 y Fo(h)p 580 1271 56 2 v 580 1299 a Fn(C-y)p 580 -1306 V 634 1297 a Fo(i)664 1299 y Fu(or)719 1297 y Fo(h)p -732 1271 63 2 v 732 1299 a Fn(M-y)p 732 1306 V 792 1297 -a Fo(i)807 1299 y Fu(.)75 1410 y Fl(1.2.4)30 b(Readline)20 -b(Argumen)n(ts)137 1506 y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i -(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15 -b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,) -h(other)f(times)g(it)h(is)g(the)f Fm(sign)h Fu(of)f(the)g(argumen)o(t)f -(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75 -1616 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 -1671 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 1726 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 1793 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 1847 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 -1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o -(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g -(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g -(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30 -b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955 -y Fo(h)p 1805 1929 57 2 v 1805 1957 a Fn(C-d)p 1805 1965 -V 1860 1955 a Fo(i)75 2012 y Fu(command)c(an)g(argumen)o(t)g(of)f(10,)h -(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Ft(M-1)f(0)h(C-d)p -Fu('.)75 2123 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f -(the)h(History)137 2219 y Fu(Readline)e(pro)o(vides)d(commands)g(for)g -(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-) -75 2274 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 Fm(incremen)o(tal)e -Fu(and)e Fm(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)h(displa)o(ys)e(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)317 2558 y Fo(h)p 329 2532 51 -2 v 329 2560 a Fn(C-r)p 329 2568 V 378 2558 a Fo(i)393 -2560 y Fu(.)19 b(T)o(yping)580 2558 y Fo(h)p 592 2532 -52 2 v 592 2560 a Fn(C-s)p 592 2568 V 641 2558 a Fo(i)670 -2560 y Fu(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20 -b(The)14 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.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q -(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fo(h)p -1294 2642 70 2 v 1294 2670 a Fn(ESC)p 1294 2678 V 1361 -2668 a Fo(i)1395 2670 y Fu(and)1486 2668 y Fo(h)p 1498 -2642 56 2 v 1498 2670 a Fn(C-J)p 1498 2678 V 1551 2668 -a Fo(i)1585 2670 y Fu(c)o(haracters)d(will)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75 -183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780 -181 y Fo(h)p 792 155 55 2 v 792 183 a Fn(C-g)p 792 191 -V 845 181 a Fo(i)880 183 y Fu(will)g(ab)q(ort)e(an)h(incremen)o(tal)h -(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(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 293 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h -(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o -(yp)q(e)1231 355 y Fo(h)p 1243 329 51 2 v 1243 357 a -Fn(C-r)p 1243 364 V 1292 355 a Fo(i)1322 357 y Fu(or)1377 -355 y Fo(h)p 1389 329 52 2 v 1389 357 a Fn(C-s)p 1389 -364 V 1438 355 a Fo(i)1468 357 y Fu(as)f(appropriate.)k(This)75 -412 y(will)c(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 466 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)i(command)d -(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f -(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fo(h)p -1163 493 76 2 v 1163 521 a Fn(RET)p 1163 529 V 1236 519 -a Fo(i)1271 521 y Fu(will)g(terminate)f(the)f(searc)o(h)h(and)75 -576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command) -g(from)g(the)g(history)g(list.)137 640 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 695 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 -750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75 -868 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137 961 y -Fu(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g -(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 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 -1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g -(commands)g(in)i(an)e Fm(inputrc)k Fu(\014le,)d(con)o(v)o(en)o -(tionally)g(in)g(his)75 1126 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 -1181 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 1244 y(When)f(a)g -(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i -(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299 -y(k)o(ey)g(bindings)i(are)e(set.)137 1363 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 1418 y(that)h(y)o(ou)h -(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fl(1.3.1)30 -b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 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)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75 -1668 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 1723 y(conditional)c(constructs)f -(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h -(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h -(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315 -1906 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)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315 -1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g -Ft(set)g Fu(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Ft(vi)g Fu(line)i(editing)g(commands:)435 2076 y Ft(set)23 -b(editing-mode)g(vi)315 2140 y Fu(A)15 b(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.)315 2213 y Ft(bell-style)555 2268 y Fu(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Ft(none)p Fu(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2378 y(`)p Ft(visible)p Fu(',)c(Readline)j(uses) -f(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 2432 y(`)p Ft(audible)p Fu(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2487 y(b)q(ell.)315 2560 y Ft(comment-begin)555 2615 -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 2670 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(.)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 183 y Ft(completion-ignore-case)555 238 y Fu(If)14 -b(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)j(p)q(erforms)d(\014lename)i -(matc)o(hing)f(and)g(completion)555 293 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 384 y Ft(completion-query-items)555 439 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 494 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 549 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 -604 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 658 y(they)i(are)g(simply)i(listed.)k -(The)15 b(default)h(limit)h(is)e Ft(100)p Fu(.)315 750 -y Ft(convert-meta)555 805 y Fu(If)i(set)g(to)g(`)p Ft(on)p -Fu(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f -(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f -(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555 -915 y(\014xing)i(an)749 913 y Fo(h)p 761 887 70 2 v 761 -915 a Fn(ESC)p 761 922 V 828 913 a Fo(i)861 915 y Fu(c)o(haracter,)f -(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555 -969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p -Ft(on)p Fu('.)315 1061 y Ft(disable-completion)555 1116 -y Fu(If)k(set)f(to)f(`)p Ft(On)p Fu(',)h(Readline)j(will)f(inhibit)g(w) -o(ord)e(completion.)30 b(Completion)555 1171 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 1225 y(to)h Ft(self-insert)p -Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 1317 -y Ft(editing-mode)555 1372 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 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g -(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481 -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 1536 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 1628 -y Ft(enable-keypad)555 1683 y Fu(When)d(set)f(to)h(`)p -Ft(on)p Fu(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f -(application)h(k)o(eypad)555 1737 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 1792 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315 -1884 y Ft(expand-tilde)555 1939 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)i(attempts)555 1994 y(w)o(ord)f(completion.)21 -b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 2085 -y Ft(horizontal-scroll-mode)555 2140 y Fu(This)k(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 2195 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 -2250 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 2304 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 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Ft(off)p Fu('.)315 2451 y Ft(input-meta)555 2506 y Fu(If)h(set)g(to)f -(`)p Ft(on)p Fu(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h -(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e -(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555 -2615 y(terminal)21 b(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 2670 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for) -f(this)i(v)m(ariable.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Ft(isearch-terminators)555 238 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 -293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o -(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d -([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has) -555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o -(haracters)1312 400 y Fo(h)p 1324 374 70 2 v 1324 402 -a Fn(ESC)p 1324 410 V 1391 400 a Fo(i)1419 402 y Fu(and)1505 -400 y Fo(h)p 1518 374 56 2 v 1518 402 a Fn(C-J)p 1518 -410 V 1571 400 a Fo(i)1599 402 y Fu(will)i(terminate)555 -457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Ft(keymap)114 -b Fu(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f -(for)g(k)o(ey)g(binding)j(com-)555 595 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 650 y Ft(emacs-meta)p Fu(,)15 b Ft(emacs-ctlx)p -Fu(,)h Ft(vi)p Fu(,)g Ft(vi-command)p Fu(,)g(and)h Ft(vi-insert)p -Fu(.)23 b Ft(vi)16 b Fu(is)555 705 y(equiv)m(alen)o(t)e(to)f -Ft(vi-command)p Fu(;)e Ft(emacs)h Fu(is)i(equiv)m(alen)o(t)g(to)e -Ft(emacs-standard)p Fu(.)555 759 y(The)f(default)h(v)m(alue)g(is)f -Ft(emacs)p Fu(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Ft(editing-mode)f -Fu(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o -(eymap.)315 897 y Ft(mark-directories)555 952 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 1007 y(The)15 b(default)h(is)g(`)p -Ft(on)p Fu('.)315 1090 y Ft(mark-modified-lines)555 1145 -y Fu(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Ft(on)p -Fu(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555 -1200 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 -1254 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p Fu(')e(b)o(y)h(default.) -315 1337 y Ft(output-meta)555 1392 y Fu(If)j(set)f(to)g(`)p -Ft(on)p Fu(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 1447 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 -1502 y(default)16 b(is)f(`)p Ft(off)p Fu('.)315 1585 -y Ft(print-completions-horizont)o(ally)555 1640 y Fu(If)d(set)g(to)f(`) -p Ft(on)p Fu(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f -(matc)o(hes)f(sorted)555 1694 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 -1749 y(The)15 b(default)h(is)g(`)p Ft(off)p Fu('.)315 -1832 y Ft(show-all-if-ambiguous)555 1887 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 1942 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 -1997 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 2051 y(The)c(default)h(v)m -(alue)h(is)e(`)p Ft(off)p Fu('.)315 2134 y Ft(visible-stats)555 -2189 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 -2244 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 2327 y(Key)h(Bindings)315 -2382 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 2437 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 2491 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 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f -(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey) -315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g -(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)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 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34 -b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g -(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o -(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316 -y Fm(k)o(eyname)s Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555 -371 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 435 -y Ft(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g -(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555 -605 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023 -603 y Fo(h)p 1035 577 57 2 v 1035 605 a Fn(C-u)p 1035 -613 V 1090 603 a Fo(i)1123 605 y Fu(is)h(b)q(ound)g(to)f(the)g -(function)h Ft(universal-)555 660 y(argument)p Fu(,)g(and)872 -658 y Fo(h)p 884 632 55 2 v 884 660 a Fn(C-o)p 884 667 -V 937 658 a Fo(i)971 660 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g -(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e -(is,)h(to)f(insert)h(the)g(text)f(`)p Ft(>)h(output)p -Fu(')f(in)o(to)g(the)h(line\).)315 793 y Ft(")p Fm(k)o(eyseq)q -Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555 -848 y(k)o(eyseq)i Fu(di\013ers)e(from)g Fm(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 -902 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 957 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)555 1012 y(in)j(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 -1067 y(recognized.)675 1130 y Ft("\\C-u":)23 b(universal-argument)675 -1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h -("Function)f(Key)i(1")555 1301 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g -(example,)1023 1299 y Fo(h)p 1035 1273 57 2 v 1035 1301 -a Fn(C-u)p 1035 1308 V 1090 1299 a Fo(i)1123 1301 y Fu(is)h(b)q(ound)g -(to)f(the)g(function)h Ft(universal-)555 1355 y(argument)9 -b Fu(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`) -1463 1353 y Fo(h)p 1475 1327 56 2 v 1475 1355 a Fn(C-x)p -1475 1363 V 1529 1353 a Fo(i)k(h)p 1571 1327 51 2 v 1571 -1355 a Fn(C-r)p 1571 1363 V 1620 1353 a Fo(i)1635 1355 -y Fu(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i -Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 1408 y Fo(h)p -1363 1382 70 2 v 1363 1410 a Fn(ESC)p 1363 1418 V 1430 -1408 a Fo(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fn([)p -1472 1419 V 1480 1408 a Fo(i)g(h)p 1522 1382 18 2 v 1522 -1410 a Fn(1)p 1522 1418 V 1538 1408 a Fo(i)g(h)p 1580 -1382 V 1580 1410 a Fn(1)p 1580 1418 V 1595 1408 a Fo(i)g(h)p -1637 1382 24 2 v 1637 1410 a Ft(~)p 1637 1418 V 1659 -1408 a Fo(i)1674 1410 y Fu(')h(is)h(b)q(ound)555 1465 -y(to)e(insert)g(the)g(text)g(`)p Ft(Function)f(Key)h(1)p -Fu('.)315 1543 y(The)g(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 1598 y(k)o(ey)g(sequences:)315 1676 y Fk(\\C-)168 -b Fu(con)o(trol)15 b(pre\014x)315 1755 y Fk(\\M-)168 -b Fu(meta)15 b(pre\014x)315 1833 y Fk(\\e)192 b Fu(an)15 -b(escap)q(e)h(c)o(haracter)315 1911 y Fk(\\\\)192 b Fu(bac)o(kslash)315 -1989 y Fk(\\)p Ft(")555 1987 y Fo(h)p 567 1961 V 567 -1989 a Ft(")p 567 1997 V 589 1987 a Fo(i)604 1989 y Fu(,)15 -b(a)f(double)j(quotation)e(mark)315 2068 y Fk(\\')555 -2066 y Fo(h)p 567 2040 10 2 v 567 2068 a Fn(')p 567 2075 -V 575 2066 a Fo(i)590 2068 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q -(ostrophe)315 2146 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 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 -2279 y Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 2357 -y Ft(\\b)192 b Fu(bac)o(kspace)315 2435 y Ft(\\d)g Fu(delete)315 -2514 y Ft(\\f)g Fu(form)14 b(feed)315 2592 y Ft(\\n)192 -b Fu(newline)315 2670 y Ft(\\r)g Fu(carriage)15 b(return)p -eop -%%Page: 8 10 -8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 262 -y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 340 y Ft(\\)p -Fm(nnn)141 b Fu(the)13 b(c)o(haracter)e(whose)i Ft(ASCII)e -Fu(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Fm(nnn)f -Fu(\(one)f(to)g(three)555 395 y(digits\))315 473 y Ft(\\x)p -Fm(nnn)117 b Fu(the)15 b(c)o(haracter)e(whose)i Ft(ASCII)e -Fu(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Fm(nnn)f -Fu(\(one)555 528 y(to)g(three)g(digits\))315 607 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 662 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 716 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 771 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 -826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p -Ft(C-x)i(\\)p Fu(')f(insert)g(a)g(single)h(`)p Ft(\\)p -Fu(')e(in)o(to)h(the)g(line:)435 890 y Ft("\\C-x\\\\":)23 -b("\\\\")75 1000 y Fl(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -1096 y Fu(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -1150 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 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser) -g(directiv)o(es)h(used.)75 1284 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 1338 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393 -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 1472 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 -1527 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 -1581 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 1636 y(standard)d -Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)h(is)f -(starting)f(out)555 1691 y(in)k Ft(emacs)f Fu(mo)q(de.)315 -1769 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 -1824 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 1879 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 1934 -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 1989 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 -2043 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 2122 y -Ft(application)555 2177 y Fu(The)d Fm(application)i Fu(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Fm(application)555 2286 y(name)p -Fu(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18 -b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555 -2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i -(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i -(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren) -o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675 -2514 y Ft($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h -(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -2670 y($endif)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 183 y Ft($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 263 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 343 y Ft($include)48 b Fu(This)14 b(directiv)o(e)i -(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h -(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435 -462 y Ft($include)23 b(/etc/inputrc)75 574 y Fl(1.3.3)30 -b(Sample)20 b(Init)h(File)137 670 y Fu(Here)16 b(is)g(an)f(example)h -(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g -(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 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)i(Library)195 -235 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391 -y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195 -806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195 -1169 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 1179 21 38 v -195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195 -1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g -(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195 -1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195 -1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g -(previous-history)195 1947 y("\\M-[B":)g(next-history)195 -1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g -(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195 -2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g -(previous-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 183 y Ft(#"\\M-\\C-[B":)165 b(next-history)195 -287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495 -y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the) -f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are) -h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195 -754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g -("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g -(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g -(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g -(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013 -y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i -(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195 -1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195 -1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740 -y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off) -195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f -(characters)195 2155 y(set)h(output-meta)g(on)195 2259 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e -(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195 -2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 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)i(Library)195 -183 y Ft("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75 -359 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -453 y Fu(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -519 y(Command)j(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)g(default.)29 -b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g -Fm(p)q(oin)o(t)h Fu(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Fm(mark)h Fu(refers)e(to)f(a)75 628 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Ft(set-mark)f Fu(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g -Fm(region)p Fu(.)75 790 y Fl(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 895 y Ft(beginning-of-line)13 -b(\(C-a\))315 950 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 1026 y Ft(end-of-line)f(\(C-e\))315 -1081 y Fu(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1157 y Ft(forward-char)f(\(C-f\))315 1212 y Fu(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1288 y Ft(backward-char)e(\(C-b\))315 -1343 y Fu(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1419 y Ft(forward-word)f(\(M-f\))315 1474 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 1529 y(digits.)75 1605 -y Ft(backward-word)e(\(M-b\))315 1660 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 1715 y(of)e(letters)g(and)g -(digits.)75 1791 y Ft(clear-screen)f(\(C-l\))315 1846 -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 -1900 y(of)i(the)g(screen.)75 1977 y Ft(redraw-current-line)e(\(\))315 -2031 y Fu(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fl(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2244 y Ft(accept-line)14 b(\(Newline,)g(Return\))315 -2298 y Fu(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor) -f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315 -2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o -(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315 -2408 y(to)h(its)g(original)h(state.)75 2484 y Ft(previous-history)d -(\(C-p\))315 2539 y Fu(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g -(list.)75 2615 y Ft(next-history)f(\(C-n\))315 2670 y -Fu(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)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 183 y Ft(beginning-of-history)12 b(\(M-<\))315 -238 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 314 y Ft(end-of-history)e(\(M->\))315 369 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 445 y Ft -(reverse-search-history)c(\(C-r\))315 500 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 555 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631 -y Ft(forward-search-history)c(\(C-s\))315 686 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 741 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817 -y Ft(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -872 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 -926 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 981 -y(user.)75 1057 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1112 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 1167 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 -1222 y(user.)75 1298 y Ft(history-search-forward)f(\(\))315 -1353 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 -1407 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 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1538 y Ft(history-search-backward)c(\(\))315 1593 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 1648 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 -1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1779 y Ft(yank-nth-arg)e(\(M-C-y\))315 1834 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 1889 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Fm(n)p Fu(,)i(insert)f(the)h -Fm(n)p Fu(th)f(w)o(ord)g(from)g(the)g(previous)315 1943 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -1998 y(argumen)o(t)g(inserts)i(the)f Fm(n)p Fu(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y -Ft(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 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 2184 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 2239 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 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2400 y Fl(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Ft(delete-char)14 -b(\(C-d\))315 2560 y Fu(Delete)j(the)f(c)o(haracter)g(under)h(the)f -(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of) -e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g -(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not) -315 2670 y(b)q(ound)g(to)f Ft(delete-char)p Fu(,)e(then)j(return)f -Ft(EOF)p Fu(.)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Ft(backward-delete-char)12 b(\(Rubout\))315 238 -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 293 -y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -378 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315 -432 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 -487 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 -542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627 -y Ft(quoted-insert)e(\(C-q,)i(C-v\))315 682 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 736 -y(sequences)f(lik)o(e)605 734 y Fo(h)p 617 708 56 2 v -617 736 a Fn(C-q)p 617 744 V 671 734 a Fo(i)685 736 y -Fu(,)f(for)g(example.)75 821 y Ft(tab-insert)f(\(M-TAB\))315 -876 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Ft(self-insert)f -(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fu(Insert)g(y)o(ourself.) -75 1100 y Ft(transpose-chars)e(\(C-t\))315 1155 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 1210 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 1265 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 1320 y(ha)o(v)o(e)k(no)g -(e\013ect.)75 1404 y Ft(transpose-words)e(\(M-t\))315 -1459 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 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Ft(upcase-word)g -(\(M-u\))315 1654 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 1708 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 1793 y Ft(downcase-word)d(\(M-l\))315 -1848 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 1903 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 1988 y Ft(capitalize-word)e(\(M-c\))315 -2042 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 -2097 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 2220 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2336 y Ft(kill-line)14 b(\(C-k\))315 2391 -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 2476 y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 -2530 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 2615 y Ft(unix-line-discard)e(\(C-u\))315 2670 -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.)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 183 y Ft(kill-whole-line)13 b(\(\))315 238 y -Fu(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e -(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315 -293 y(un)o(b)q(ound.)75 374 y Ft(kill-word)c(\(M-d\))315 -429 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 483 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 564 y Ft(backward-kill-word)e(\(M-DEL\))315 619 -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 700 y Ft(unix-word-rubout)f(\(C-w\))315 -755 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 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 891 y Ft(delete-horizontal-space)c(\(\))315 -946 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 1027 -y Ft(kill-region)e(\(\))315 1082 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 1163 y Ft(copy-region-as-kill)d(\(\))315 -1217 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 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1353 y Ft(copy-backward-word)d(\(\))315 1408 -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 -1463 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.)75 1544 y Ft(copy-forward-word)d(\(\)) -315 1599 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 1653 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 1734 y Ft(yank)f(\(C-y\))315 -1789 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(the)i(curren)o(t)f(cursor)g(p)q(osition.)75 -1870 y Ft(yank-pop)f(\(M-y\))315 1925 y Fu(Rotate)j(the)g(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 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o -(ank-p)q(op.)75 2095 y Fl(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2205 y Ft(digit-argument)13 -b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 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 2313 y Fo(h)p 327 2287 50 2 v 327 -2315 a Fn(M{)p 327 2323 V 375 2313 a Fo(i)405 2315 y -Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y -Ft(universal-argument)e(\(\))315 2451 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 -2506 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 -2560 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 2615 -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 -2670 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)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)315 -183 y(or)c(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 -238 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 -293 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 -348 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 472 y Fl(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 590 y Ft(complete)14 b(\(TAB\))315 644 y Fu(A)o(ttempt)j(to)g -(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27 -b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,) -15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y) -o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are) -g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;) -h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e -(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315 -864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g -(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315 -918 y(so)g(on.)75 1004 y Ft(possible-completions)d(\(M-?\))315 -1059 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(the)f(cursor.)75 1145 y Ft(insert-completions)e(\(M-*\))315 -1199 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 -1254 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1340 -y Ft(menu-complete)e(\(\))315 1395 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 1450 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20 -b(execution)g(of)f Ft(menu-complete)315 1504 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 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i -(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Fm(n)g Fu(mo)o(v)o(es)g Fm(n)g Fu(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f -(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g -(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)f Ft(TAB)p Fu(,)f(but)h(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1809 y Ft(delete-char-or-list)e(\(\))315 -1864 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 -1919 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 1974 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 2098 y Fl(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 2216 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 -2270 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 2356 -y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 2411 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 2466 y(de\014nition.)75 -2552 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 2606 -y Fu(Re-execute)19 b(the)f(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 -2661 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.)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 183 y Fl(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -298 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 353 -y Fu(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Fm(inputrc)k -Fu(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75 -491 y Ft(abort)e(\(C-g\))315 546 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 600 y(setting)i(of)g Ft(bell-style)p -Fu(\).)75 684 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fm(x)p Ft(,)h Fj(:)8 b(:)g(:)n Ft(\))315 739 y Fu(If)14 -b(the)g(meta\014ed)g(c)o(haracter)f Fm(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 -794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75 -877 y Ft(prefix-meta)e(\(ESC\))315 932 y Fu(Mak)o(e)j(the)i(next)f(c)o -(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19 -b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.) -20 b(T)o(yping)15 b(`)p Ft(ESC)g(f)p Fu(')f(is)i(equiv)m(alen)o(t)h(to) -d(t)o(yping)i(`)p Ft(M-f)p Fu('.)75 1070 y Ft(undo)f(\(C-_,)f(C-x)h -(C-u\))315 1125 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1209 y Ft(revert-line)f(\(M-r\))315 -1263 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 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1402 y Ft(tilde-expand)f(\(M-~\))315 -1456 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1540 y Ft(set-mark)f(\(C-@\))315 1595 y Fu(Set)g(the)f(mark)g -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1733 y Ft(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1788 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 1843 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 1926 -y Ft(character-search)e(\(C-]\))315 1981 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 2036 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2119 y Ft(character-search-backward)c(\(M-C-]\))315 2174 -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 -2229 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 2312 y Ft(insert-comment)d(\(M-#\)) -315 2367 y Fu(The)19 b(v)m(alue)i(of)e(the)g Ft(comment-begin)e -Fu(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315 -2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if) -i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506 -y Ft(dump-functions)d(\(\))315 2560 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)h -(output)e(stream.)315 2615 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 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Ft(dump-variables)c(\(\))315 238 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)i(output)d(stream.)315 293 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 348 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Ft(dump-macros)f(\(\))315 -482 y Fu(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b) -q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315 -537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i -(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315 -592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Fm(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 647 y(default.)75 775 y Fs(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 871 y Fu(While)13 b(the)f(Readline)j(library)d(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 -926 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)i Ft(vi)e Fu(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g -(sp)q(eci\014ed)i(in)75 981 y(the)c Fp(POSIX)h Fu(1003.2)d(standard.) -137 1048 y(In)i(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 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21 -b(The)15 b(Readline)j(default)d(is)h Ft(emacs)f Fu(mo)q(de.)137 -1170 y(When)h(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 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Ft(i)p Fu('.)18 b(Pressing)608 1223 y Fo(h)p 620 1197 -70 2 v 620 1225 a Fn(ESC)p 620 1233 V 687 1223 a Fo(i)715 -1225 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 1280 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 1335 -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: 19 21 -19 20 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(19)75 183 y Fq(2)41 b(Programming)28 -b(with)e(GNU)i(Readline)137 305 y Fu(This)16 b(c)o(hapter)f(describ)q -(es)i(the)f(in)o(terface)g(b)q(et)o(w)o(een)f(the)h(GNU)f(Readline)j -(Library)e(and)f(other)g(pro-)75 360 y(grams.)38 b(If)22 -b(y)o(ou)f(are)g(a)g(programmer,)h(and)f(y)o(ou)g(wish)i(to)d(include)k -(the)e(features)f(found)h(in)g(GNU)75 414 y(Readline)16 -b(suc)o(h)e(as)f(completion,)h(line)h(editing,)g(and)f(in)o(teractiv)o -(e)g(history)f(manipulation)i(in)g(y)o(our)d(o)o(wn)75 -469 y(programs,)i(this)h(section)h(is)g(for)e(y)o(ou.)75 -602 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 700 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 754 y(programs,)e(the)h(default)h(b)q -(eha)o(viour)g(of)f(Readline)j(is)d(su\016cien)o(t.)21 -b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75 -809 y(Readline)19 b(in)g(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 864 y Ft(fgets)e(\(\))p Fu(.)137 -933 y(The)j(function)h Ft(readline)c(\(\))j Fu(prin)o(ts)g(a)g(prompt)f -(and)h(then)g(reads)g(and)g(returns)g(a)g(single)h(line)g(of)75 -988 y(text)12 b(from)f(the)i(user.)19 b(The)12 b(line)i -Ft(readline)d Fu(returns)h(is)h(allo)q(cated)g(with)g -Ft(malloc)h(\(\))p Fu(;)e(y)o(ou)g(should)i Ft(free)75 -1042 y(\(\))h Fu(the)g(line)i(when)f(y)o(ou)f(are)f(done)i(with)g(it.)k -(The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)195 -1108 y Ft(char)23 b(*readline)g(\(char)g(*)p Fm(prompt)q -Ft(\);)75 1177 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195 -1243 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);) -75 1312 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 1366 y(so)h(only)h(the)f(text)g(remains.) -137 1435 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 1490 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 -1545 y(b)q(een)f(t)o(yp)q(ed.)137 1614 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 1612 y Fo(h)p 1338 1586 57 2 v 1338 1614 -a Fn(C-p)p 1338 1621 V 1392 1612 a Fo(i)1420 1614 y Fu(for)f -(example\),)i(y)o(ou)f(m)o(ust)75 1668 y(call)j Ft(add_history)e(\(\))h -Fu(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)f -Fm(history)k Fu(list)d(of)e(suc)o(h)i(lines.)195 1734 -y Ft(add_history)22 b(\(line\);)75 1803 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 1872 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 1927 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 1981 y Ft(gets)g(\(\))f -Fu(library)i(function,)g(and)g(has)f(the)g(adv)m(an)o(tage)f(of)h(no)g -(static)g(bu\013er)h(to)e(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.) -48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)195 2255 y(char)f(*)195 -2307 y(rl_gets)g(\(\))195 2359 y({)243 2411 y(/*)g(If)h(the)f(buffer)g -(has)h(already)f(been)g(allocated,)g(return)g(the)g(memory)314 -2462 y(to)h(the)f(free)h(pool.)f(*/)243 2514 y(if)g(\(line_read\))290 -2566 y({)338 2618 y(free)g(\(line_read\);)338 2670 y(line_read)g(=)h -(\(char)f(*\)NULL;)p eop -%%Page: 20 22 -20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)i(Library)290 -183 y Ft(})243 287 y(/*)23 b(Get)h(a)f(line)h(from)f(the)h(user.)f(*/) -243 339 y(line_read)f(=)i(readline)f(\(""\);)243 443 -y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f -(the)h(history.)f(*/)243 495 y(if)g(\(line_read)g(&&)g(*line_read\))290 -546 y(add_history)g(\(line_read\);)243 650 y(return)g(\(line_read\);) -195 702 y(})137 770 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 768 y Fo(h)p -1181 742 74 2 v 1181 770 a Fn(T)m(AB)p 1181 777 V 1253 -768 a Fo(i)1280 770 y Fu(completion:)19 b(completion)13 -b(on)f(\014le)75 824 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t) -f(Readline)k(to)c(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o -(hange)h(the)f(binding)75 879 y(of)g(the)205 877 y Fo(h)p -217 851 V 217 879 a Fn(T)m(AB)p 217 887 V 289 877 a Fo(i)319 -879 y Fu(k)o(ey)g(with)h Ft(rl_bind_key)d(\(\))p Fu(.)195 -944 y Ft(int)23 b(rl_bind_key)g(\(int)g Fm(k)o(ey)p Ft(,)h(int)f(\(*)p -Fm(function)p Ft(\)\(\)\);)137 1011 y(rl_bind_key)14 -b(\(\))h Fu(tak)o(es)g(t)o(w)o(o)g(argumen)o(ts:)20 b -Fm(k)o(ey)f Fu(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)g -(to)g(bind,)i(and)75 1066 y Fm(function)i Fu(is)f(the)g(address)g(of)g -(the)g(function)g(to)g(call)h(when)f Fm(k)o(ey)k Fu(is)c(pressed.)29 -b(Binding)1628 1064 y Fo(h)p 1641 1038 V 1641 1066 a -Fn(T)m(AB)p 1641 1074 V 1712 1064 a Fo(i)1745 1066 y -Fu(to)17 b Ft(rl_)75 1121 y(insert)d(\(\))i Fu(mak)o(es)433 -1119 y Fo(h)p 446 1093 V 446 1121 a Fn(T)m(AB)p 446 1129 -V 517 1119 a Fo(i)548 1121 y Fu(insert)g(itself.)22 b -Ft(rl_bind_key)13 b(\(\))i Fu(returns)h(non-zero)g(if)g -Fm(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1176 y(ASCI)q(I)h(c)o -(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137 -1243 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1241 -y Fo(h)p 716 1215 V 716 1243 a Fn(T)m(AB)p 716 1251 V -787 1241 a Fo(i)817 1243 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h -(su\016ces:)195 1308 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137 -1375 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 1430 y(tion)i(called)h Ft(initialize_readline)d(\(\))h -Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g -(initializations,)75 1485 y(suc)o(h)h(as)e(installing)k(custom)c -(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h -(33\).)75 1614 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 -1711 y Fu(Readline)15 b(pro)o(vides)e(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 1765 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 1820 y(v)m(ariables)g(de\014ned)h(within)f(the)f -(Readline)j(library)d(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h -(add)g(customized)75 1875 y(functionalit)o(y)j(to)f(Readline.)137 -1942 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g -(Readline's)i(b)q(eha)o(vior,)g(or)d(using)i(an)o(y)f(func-)75 -1997 y(tionalit)o(y)23 b(Readline)i(pro)o(vides)f(in)f(other)g(co)q -(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75 -2052 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e -(uses)h(Readline's)h(features.)24 b(Since)19 b(some)d(of)g(the)h -(de\014-)75 2107 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 2162 y Ft(readline.h)p -Fu(.)75 2274 y Fl(2.2.1)30 b(The)20 b(F)-5 b(unction)20 -b(T)n(yp)r(e)137 2371 y Fu(F)l(or)f(readabilt)o(y)l(,)h(w)o(e)f -(declare)h(a)f(new)g(t)o(yp)q(e)g(of)g(ob)s(ject,)g(called)i -Fm(F)l(unction)p Fu(.)32 b(A)19 b Ft(Function)f Fu(is)h(a)g(C)75 -2425 y(function)d(whic)o(h)g(returns)f(an)g Ft(int)p -Fu(.)20 b(The)15 b(t)o(yp)q(e)g(declaration)h(for)f Ft(Function)f -Fu(is:)75 2493 y Ft(typedef)g(int)h(Function)f(\(\);)137 -2560 y Fu(The)21 b(reason)g(for)f(declaring)i(this)g(new)f(t)o(yp)q(e)g -(is)g(to)g(mak)o(e)f(it)h(easier)g(to)g(write)g(co)q(de)g(describing)75 -2615 y(p)q(oin)o(ters)16 b(to)f(C)g(functions.)21 b(Let)16 -b(us)f(sa)o(y)g(w)o(e)g(had)h(a)f(v)m(ariable)i(called)g -Fm(func)i Fu(whic)o(h)d(w)o(as)e(a)i(p)q(oin)o(ter)f(to)g(a)75 -2670 y(function.)21 b(Instead)15 b(of)g(the)g(classic)i(C)e -(declaration)p eop -%%Page: 21 23 -21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(21)137 183 y Ft(int)15 b(\(*\)\(\)func;)75 -250 y Fu(w)o(e)g(ma)o(y)f(write)137 317 y Ft(Function)g(*func;)75 -384 y Fu(Similarly)l(,)j(there)e(are)195 449 y Ft(typedef)23 -b(void)g(VFunction)g(\(\);)195 501 y(typedef)g(char)g(*CPFunction)g -(\(\);)g Fu(and)195 552 y Ft(typedef)g(char)g(**CPPFunction)f(\(\);)75 -620 y Fu(for)17 b(functions)h(returning)g(no)f(v)m(alue,)h -Ft(pointer)d(to)g(char)p Fu(,)h(and)i Ft(pointer)c(to)h(pointer)f(to)h -(char)p Fu(,)i(re-)75 674 y(sp)q(ectiv)o(ely)l(.)75 786 -y Fl(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 b(unction)137 -882 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g(for)e -(Readline,)j(y)o(ou)e(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o(v)o -(en)o(tions)75 937 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 992 y(state)c(of)h(the)g(line)i -(read)e(so)g(far.)137 1059 y(The)h(calling)h(sequence)f(for)f(a)f -(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 1123 y -Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 1190 y Fu(where)18 -b Fm(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 Fm(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v) -o(ok)o(ed)75 1245 y(this)f(function.)137 1312 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 1367 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 -1421 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 -1476 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 1531 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 1586 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.)75 1714 y Fs(2.3)33 b(Readline)23 -b(V)-6 b(ariables)137 1810 y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m -(ailable)i(to)e(function)h(writers.)1661 1902 y(V)l(ariable)-1749 -b Fi(char)20 b(*)f Fh(rl)p 286 1902 18 3 v 21 w(line)p -395 1902 V 23 w(bu\013er)195 1957 y Fu(This)h(is)f(the)h(line)h -(gathered)e(so)f(far.)31 b(Y)l(ou)20 b(are)f(w)o(elcome)g(to)g(mo)q -(dify)h(the)f(con)o(ten)o(ts)f(of)195 2011 y(the)f(line,)h(but)f(see)g -(Section)g(2.4.5)e([Allo)o(wing)j(Undoing],)f(page)f(26.)24 -b(The)17 b(function)g Ft(rl_)195 2066 y(extend_line_buffer)8 -b Fu(is)k(a)o(v)m(ailable)g(to)f(increase)h(the)f(memory)f(allo)q -(cated)i(to)e Ft(rl_line_)195 2121 y(buffer)p Fu(.)1661 -2213 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2213 -V 21 w(p)r(oin)n(t)195 2267 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 Fm(p)q(oin)o(t)q Fu(\).)1661 2359 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 2359 V 21 w(end)195 2414 y -Fu(The)e(n)o(um)o(b)q(er)g(of)f(c)o(haracters)g(presen)o(t)h(in)g -Ft(rl_line_buffer)p Fu(.)26 b(When)18 b Ft(rl_point)e -Fu(is)j(at)195 2469 y(the)c(end)h(of)f(the)g(line,)i -Ft(rl_point)d Fu(and)h Ft(rl_end)f Fu(are)h(equal.)1661 -2560 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2560 -V 21 w(mark)195 2615 y Fu(The)14 b(mark)e(\(sa)o(v)o(ed)h(p)q -(osition\))h(in)g(the)g(curren)o(t)f(line.)21 b(If)14 -b(set,)f(the)h(mark)e(and)i(p)q(oin)o(t)g(de\014ne)195 -2670 y(a)h Fm(region)p Fu(.)p eop -%%Page: 22 24 -22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)i(Library)1661 -183 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(done)195 238 y Fu(Setting)j(this)g(to)f(a)h(non-zero)g(v)m -(alue)h(causes)f(Readline)i(to)d(return)h(the)g(curren)o(t)f(line)195 -293 y(immediately)l(.)1661 384 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 384 V 21 w(p)r(ending)p 436 384 -V 20 w(input)195 439 y Fu(Setting)15 b(this)h(to)f(a)f(v)m(alue)j(mak)o -(es)d(it)i(the)f(next)g(k)o(eystrok)o(e)f(read.)20 b(This)c(is)f(a)g(w) -o(a)o(y)f(to)h(stu\013)195 494 y(a)g(single)h(c)o(haracter)f(in)o(to)g -(the)g(input)i(stream.)1661 586 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 586 V 21 w(erase)p 363 586 V -20 w(empt)n(y)p 540 586 V 20 w(line)195 640 y Fu(Setting)13 -b(this)h(to)e(a)h(non-zero)g(v)m(alue)h(causes)f(Readline)j(to)c -(completely)i(erase)f(the)g(curren)o(t)195 695 y(line,)19 -b(including)g(an)o(y)e(prompt,)f(an)o(y)h(time)g(a)f(newline)j(is)f(t)o -(yp)q(ed)f(as)f(the)h(only)h(c)o(haracter)195 750 y(on)13 -b(an)f(otherwise-empt)o(y)h(line.)20 b(The)13 b(cursor)g(is)g(mo)o(v)o -(ed)f(to)g(the)g(b)q(eginning)j(of)d(the)h(newly-)195 -805 y(blank)j(line.)1661 896 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 896 V 21 w(prompt)195 951 y Fu(The)14 -b(prompt)f(Readline)j(uses.)k(This)14 b(is)g(set)g(from)f(the)g -(argumen)o(t)g(to)g Ft(readline)h(\(\))p Fu(,)g(and)195 -1006 y(should)i(not)f(b)q(e)h(assigned)g(to)e(directly)l(.)1661 -1097 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1097 -V 21 w(already)p 419 1097 V 21 w(prompted)195 1152 y -Fu(If)14 b(an)g(application)h(wishes)f(to)f(displa)o(y)i(the)f(prompt)f -(itself,)i(rather)e(than)g(ha)o(v)o(e)h(Readline)195 -1207 y(do)j(it)h(the)f(\014rst)g(time)h Ft(readline\(\))e -Fu(is)i(called,)h(it)f(should)g(set)f(this)h(v)m(ariable)h(to)e(a)g -(non-)195 1262 y(zero)i(v)m(alue)i(after)e(displa)o(ying)i(the)f -(prompt.)32 b(The)20 b(prompt)f(m)o(ust)g(also)g(b)q(e)i(passed)e(as) -195 1317 y(the)c(argumen)o(t)e(to)h Ft(readline\(\))g -Fu(so)g(the)g(redispla)o(y)i(functions)f(can)g(up)q(date)g(the)g -(displa)o(y)195 1371 y(prop)q(erly)l(.)k(The)11 b(calling)h -(application)f(is)g(resp)q(onsible)h(for)e(managing)g(the)g(v)m(alue;)j -(Readline)195 1426 y(nev)o(er)i(sets)g(it.)1661 1518 -y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 1518 -V 21 w(library)p 475 1518 V 22 w(v)n(ersion)195 1573 -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(.)1661 1664 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1664 V 21 w(terminal)p 518 1664 V 21 -w(name)195 1719 y Fu(The)c(terminal)h(t)o(yp)q(e,)f(used)h(for)f -(initialization.)1661 1811 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1811 V 21 w(readline)p 505 1811 V 22 -w(name)195 1865 y Fu(This)d(v)m(ariable)h(is)f(set)f(to)g(a)g(unique)i -(name)f(b)o(y)f(eac)o(h)g(application)j(using)e(Readline.)23 -b(The)195 1920 y(v)m(alue)12 b(allo)o(ws)e(conditional)i(parsing)f(of)f -(the)g(inputrc)h(\014le)h(\(see)e(Section)h(1.3.2)e([Conditional)195 -1975 y(Init)16 b(Constructs],)e(page)h(8\).)1661 2067 -y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286 2067 -V 21 w(instream)195 2121 y Fu(The)c(stdio)h(stream)e(from)h(whic)o(h)h -(Readline)h(reads)e(input.)1661 2213 y(V)l(ariable)-1749 -b Fi(FILE)20 b(*)f Fh(rl)p 286 2213 V 21 w(outstream)195 -2268 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q -(erforms)e(output.)1661 2359 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 2359 V 21 w(startup)p 595 2359 V 20 -w(ho)r(ok)195 2414 y Fu(If)15 b(non-zero,)f(this)h(is)g(the)f(address)h -(of)e(a)h(function)i(to)d(call)j(just)e(b)q(efore)h Ft(readline)e -Fu(prin)o(ts)195 2469 y(the)i(\014rst)g(prompt.)1661 -2560 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p -391 2560 V 21 w(pre)p 494 2560 V 20 w(input)p 647 2560 -V 21 w(ho)r(ok)195 2615 y Fu(If)d(non-zero,)h(this)f(is)h(the)f -(address)g(of)g(a)g(function)h(to)e(call)i(after)f(the)g(\014rst)f -(prompt)h(has)195 2670 y(b)q(een)f(prin)o(ted)g(and)g(just)f(b)q(efore) -g Ft(readline)f Fu(starts)g(reading)i(input)g(c)o(haracters.)p -eop -%%Page: 23 25 -23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(23)1661 183 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 183 18 3 v 21 w(ev)n(en)n(t)p 544 183 -V 22 w(ho)r(ok)195 238 y Fu(If)d(non-zero,)f(this)h(is)f(the)h(address) -f(of)g(a)g(function)h(to)f(call)h(p)q(erio)q(dically)j(when)c(readline) -195 293 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661 -409 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p -391 409 V 21 w(getc)p 514 409 V 21 w(function)195 463 -y Fu(If)13 b(non-zero,)g Ft(readline)e Fu(will)k(call)e(indirectly)i -(through)d(this)h(p)q(oin)o(ter)g(to)f(get)g(a)h(c)o(haracter)195 -518 y(from)i(the)i(input)g(stream.)22 b(By)16 b(default,)h(it)f(is)h -(set)f(to)f Ft(rl_getc)p Fu(,)g(the)h(default)h Ft(readline)195 -573 y Fu(c)o(haracter)d(input)j(function)f(\(see)f(Section)h(2.4.8)e -([Utilit)o(y)h(F)l(unctions],)h(page)f(28\).)1661 689 -y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417 -689 V 21 w(redispla)n(y)p 661 689 V 22 w(function)195 -744 y Fu(If)g(non-zero,)h Ft(readline)d Fu(will)j(call)g(indirectly)h -(through)d(this)h(p)q(oin)o(ter)h(to)e(up)q(date)h(the)195 -798 y(displa)o(y)h(with)f(the)g(curren)o(t)g(con)o(ten)o(ts)g(of)f(the) -h(editing)i(bu\013er.)34 b(By)20 b(default,)h(it)g(is)f(set)195 -853 y(to)f Ft(rl_redisplay)p Fu(,)f(the)i(default)g Ft(readline)e -Fu(redispla)o(y)j(function)f(\(see)f(Section)i(2.4.6)195 -908 y([Redispla)o(y],)16 b(page)f(27\).)1661 1024 y(V)l(ariable)-1749 -b Fi(Keymap)20 b Fh(rl)p 293 1024 V 21 w(executing)p -551 1024 V 22 w(k)n(eymap)195 1079 y Fu(This)g(v)m(ariable)g(is)f(set)g -(to)f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g -(24\))f(in)195 1133 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g -(readline)h(function)f(w)o(as)f(found.)1661 1249 y(V)l(ariable)-1749 -b Fi(Keymap)20 b Fh(rl)p 293 1249 V 21 w(binding)p 501 -1249 V 22 w(k)n(eymap)195 1304 y Fu(This)g(v)m(ariable)g(is)f(set)g(to) -f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g(24\)) -f(in)195 1359 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q -(ccurred.)75 1517 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6 -b(unctions)75 1682 y Fl(2.4.1)30 b(Naming)20 b(a)g(F)-5 -b(unction)137 1790 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.)36 -b(This)20 b(is)75 1845 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 1900 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 -1976 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 2055 -y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 2053 -y Fo(h)p 671 2027 209 2 v 671 2055 a Fn(Meta-Rub)q(out)p -671 2062 V 878 2053 a Fo(i)912 2055 y Fu(to)f(the)h(function)g -Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75 -2110 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 2164 y(names)e(as)g(w)o(ell.)21 b(Readline)c(pro)o(vides)f(a)f -(function)h(for)e(doing)i(that:)1650 2280 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 2280 18 3 v 21 w(add)p 328 -2280 V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g -(*function,)g(int)h(key)p Fg(\))195 2335 y Fu(Add)i Fm(name)h -Fu(to)e(the)g(list)h(of)e(named)i(functions.)23 b(Mak)o(e)15 -b Fm(function)i Fu(b)q(e)g(the)f(function)h(that)195 -2390 y(gets)e(called.)21 b(If)16 b Fm(k)o(ey)j Fu(is)c(not)g(-1,)g -(then)g(bind)i(it)e(to)g Fm(function)h Fu(using)g Ft(rl_bind_key)d -(\(\))p Fu(.)137 2506 y(Using)j(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 2560 y(to)d(add)h(a)f(few)g -(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)j(has)d -(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75 -2615 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e -(Readline,)j(y)o(ou)e(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75 -2670 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)p eop -%%Page: 24 26 -24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 278 -y Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fm(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 333 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 388 y(existing)i(k)o(eymaps,)f -(and)g(tell)h(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1650 -476 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -476 18 3 v 21 w(mak)n(e)p 445 476 V 20 w(bare)p 575 476 -V 20 w(k)n(eymap)j Fg(\(\))195 531 y Fu(Returns)d(a)f(new,)i(empt)o(y)e -(k)o(eymap.)32 b(The)20 b(space)g(for)e(the)i(k)o(eymap)f(is)h(allo)q -(cated)h(with)195 586 y Ft(malloc)14 b(\(\))p Fu(;)h(y)o(ou)g(should)h -Ft(free)e(\(\))h Fu(it)h(when)g(y)o(ou)e(are)h(done.)1650 -674 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -674 V 21 w(cop)n(y)p 428 674 V 21 w(k)n(eymap)j Fg(\()p -Ft(Keymap)14 b(map)p Fg(\))195 729 y Fu(Return)i(a)f(new)g(k)o(eymap)g -(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fm(map)p Fu(.)1650 -818 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -818 V 21 w(mak)n(e)p 445 818 V 20 w(k)n(eymap)j Fg(\(\))195 -872 y Fu(Return)15 b(a)f(new)h(k)o(eymap)f(with)h(the)g(prin)o(ting)h -(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1443 872 14 2 v -17 w(insert,)g(the)h(lo)o(w-)195 927 y(ercase)21 b(Meta)f(c)o -(haracters)g(b)q(ound)i(to)f(run)g(their)g(equiv)m(alen)o(ts,)j(and)d -(the)g(Meta)f(digits)195 982 y(b)q(ound)c(to)f(pro)q(duce)h(n)o(umeric) -g(argumen)o(ts.)1650 1070 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 1070 18 3 v 21 w(discard)p 441 1070 V 21 -w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 -1125 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fm(k)o(eymap)p Fu(.)137 1214 y(Readline)25 b(has)e(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 1268 y(k)o(eymap)15 b(is)h(activ)o(e.) -1650 1357 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p -293 1357 V 21 w(get)p 391 1357 V 21 w(k)n(eymap)i Fg(\(\))195 -1412 y Fu(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650 -1500 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1500 -V 21 w(set)p 333 1500 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 -b(keymap)p Fg(\))195 1555 y Fu(Mak)o(es)g Fm(k)o(eymap)j -Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650 1643 -y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 1643 -V 21 w(get)p 391 1643 V 21 w(k)n(eymap)p 605 1643 V 20 -w(b)n(y)p 685 1643 V 21 w(name)i Fg(\()p Ft(char)14 b(*name)p -Fg(\))195 1698 y Fu(Return)h(the)f(k)o(eymap)g(matc)o(hing)h -Fm(name)p Fu(.)k Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h -(supplied)i(in)e(a)195 1753 y Ft(set)g(keymap)f Fu(inputrc)i(line)h -(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)1650 -1841 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1841 V 21 w(get)p 384 1841 V 21 w(k)n(eymap)p 598 1841 -V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 -1896 y Fu(Return)h(the)f(name)h(matc)o(hing)f Fm(k)o(eymap)p -Fu(.)19 b Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h -(supplied)i(in)e(a)195 1951 y Ft(set)g(keymap)f Fu(inputrc)i(line)h -(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)75 -2059 y Fl(2.4.3)30 b(Binding)20 b(Keys)137 2154 y Fu(Y)l(ou)j(asso)q -(ciate)f(k)o(eys)g(with)h(functions)g(through)f(the)g(k)o(eymap.)41 -b(Readline)25 b(has)d(sev)o(eral)h(in)o(ter-)75 2209 -y(nal)h(k)o(eymaps:)35 b Ft(emacs_standard_keymap)p Fu(,)22 -b Ft(emacs_meta_keymap)p Fu(,)g Ft(emacs_ctlx_keymap)p -Fu(,)g Ft(vi_)75 2264 y(movement_keymap)p Fu(,)e(and)i -Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18 -b Fu(is)k(the)f(default,)75 2319 y(and)15 b(the)h(examples)g(in)g(this) -f(man)o(ual)h(assume)f(that.)137 2385 y(Since)k 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 2440 -y(alw)o(a)o(ys)f(the)g(danger)g(that)g(a)g(custom)g(binding)i -(installed)g(b)q(efore)f(the)f(\014rst)g(call)h(to)f -Ft(readline)f Fu(will)j(b)q(e)75 2494 y(o)o(v)o(erridden.)28 -b(An)17 b(alternate)h(mec)o(hanism)g(is)g(to)f(install)i(custom)e(k)o -(ey)h(bindings)h(in)f(an)g(initialization)75 2549 y(function)h -(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e -(Section)h(2.3)f([Readline)j(V)l(ariables],)75 2604 y(page)15 -b(21\).)137 2670 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)p -eop -%%Page: 25 27 -25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(25)1650 183 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(bind)p 347 183 V 21 w(k)n(ey)k -Fg(\()p Ft(int)14 b(key,)h(Function)f(*function)p Fg(\))195 -238 y Fu(Binds)i Fm(k)o(ey)j Fu(to)14 b Fm(function)h -Fu(in)h(the)f(curren)o(tly)g(activ)o(e)g(k)o(eymap.)20 -b(Returns)15 b(non-zero)g(in)h(the)195 293 y(case)f(of)g(an)g(in)o(v)m -(alid)j Fm(k)o(ey)p Fu(.)1650 374 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 374 V 21 w(bind)p 347 374 V -21 w(k)n(ey)p 452 374 V 21 w(in)p 520 374 V 22 w(map)h -Fg(\()p Ft(int)14 b(key,)h(Function)f(*function,)283 -429 y(Keymap)g(map)p Fg(\))195 484 y Fu(Bind)i Fm(k)o(ey)j -Fu(to)c Fm(function)h Fu(in)g Fm(map)p Fu(.)k(Returns)15 -b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j -Fm(k)o(ey)p Fu(.)1650 565 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 565 V 21 w(un)n(bind)p 409 565 V 21 w(k)n(ey)k -Fg(\()p Ft(int)14 b(key)p Fg(\))195 620 y Fu(Bind)g Fm(k)o(ey)j -Fu(to)c(the)g(n)o(ull)i(function)f(in)g(the)f(curren)o(tly)h(activ)o(e) -f(k)o(eymap.)19 b(Returns)14 b(non-zero)195 675 y(in)i(case)f(of)g -(error.)1650 756 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 756 V 21 w(un)n(bind)p 409 756 V 21 w(k)n(ey)p 514 -756 V 21 w(in)p 582 756 V 22 w(map)h Fg(\()p Ft(int)14 -b(key,)h(Keymap)f(map)p Fg(\))195 811 y Fu(Bind)i Fm(k)o(ey)j -Fu(to)c(the)g(n)o(ull)i(function)f(in)g Fm(map)p Fu(.)k(Returns)15 -b(non-zero)h(in)g(case)f(of)g(error.)1650 892 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 892 V 21 w(un)n(bind)p 409 -892 V 21 w(function)p 635 892 V 21 w(in)p 703 892 V 21 -w(map)h Fg(\()p Ft(Function)14 b(*function,)283 947 y(Keymap)g(map)p -Fg(\))195 1002 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i -Fm(function)g Fu(in)g Fm(map)p Fu(.)1650 1083 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1083 V 21 w(un)n(bind)p 409 -1083 V 21 w(command)p 674 1083 V 17 w(in)p 738 1083 V -22 w(map)h Fg(\()p Ft(char)14 b(*command,)g(Keymap)283 -1138 y(map)p Fg(\))195 1193 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f -(are)h(b)q(ound)h(to)f Fm(command)i Fu(in)f Fm(map)p -Fu(.)1650 1274 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 1274 V 21 w(generic)p 413 1274 V 21 w(bind)j Fg(\()p -Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)283 -1329 y(Keymap)f(map)p Fg(\))195 1384 y Fu(Bind)g(the)f(k)o(ey)g -(sequence)i(represen)o(ted)e(b)o(y)g(the)g(string)g Fm(k)o(eyseq)h -Fu(to)f(the)g(arbitrary)f(p)q(oin)o(ter)195 1438 y Fm(data)p -Fu(.)19 b Fm(t)o(yp)q(e)e Fu(sa)o(ys)c(what)h(kind)i(of)e(data)f(is)i -(p)q(oin)o(ted)g(to)f(b)o(y)g Fm(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f -(function)195 1493 y(\()p Ft(ISFUNC)p Fu(\),)f(a)h(macro)g(\()p -Ft(ISMACR)p Fu(\),)f(or)i(a)f(k)o(eymap)h(\()p Ft(ISKMAP)p -Fu(\).)j(This)d(mak)o(es)f(new)h(k)o(eymaps)195 1548 -y(as)g(necessary)l(.)20 b(The)c(initial)h(k)o(eymap)e(in)h(whic)o(h)g -(to)e(do)i(bindings)h(is)e Fm(map)p Fu(.)1650 1629 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1629 V 21 w(parse)p 369 1629 -V 19 w(and)p 480 1629 V 21 w(bind)j Fg(\()p Ft(char)14 -b(*line)p Fg(\))195 1684 y Fu(P)o(arse)k Fm(line)23 b -Fu(as)c(if)g(it)g(had)g(b)q(een)h(read)e(from)h(the)f -Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)g(an)o(y)f(k)o(ey)195 -1739 y(bindings)i(and)e(v)m(ariable)i(assignmen)o(ts)d(found)i(\(see)f -(Section)h(1.3)e([Readline)j(Init)f(File],)195 1794 y(page)c(4\).)1650 -1875 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1875 -V 21 w(read)p 346 1875 V 20 w(init)p 450 1875 V 22 w(\014le)k -Fg(\()p Ft(char)14 b(*filename)p Fg(\))195 1930 y Fu(Read)25 -b(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)e(from)g -Fm(\014lename)29 b Fu(\(see)24 b(Section)i(1.3)195 1985 -y([Readline)17 b(Init)f(File],)g(page)f(4\).)75 2086 -y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20 -b(Names)h(and)f(Bindings)137 2179 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 2233 y(in)o(v)o(ok)o(ed)k -(b)o(y)h(a)e(particular)i(k)o(ey)f(sequence.)1650 2315 -y(F)l(unction)-1749 b Fi(Function)20 b(*)g Fh(rl)p 391 -2315 V 21 w(named)p 579 2315 V 19 w(function)j Fg(\()p -Ft(char)14 b(*name)p Fg(\))195 2369 y Fu(Return)i(the)f(function)h -(with)g(name)f Fm(name)p Fu(.)1650 2451 y(F)l(unction)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 2451 V 21 w(function)p -617 2451 V 21 w(of)p 685 2451 V 19 w(k)n(eyseq)k Fg(\()p -Ft(char)15 b(*keyseq,)f(Keymap)283 2506 y(map,)g(int)h(*type)p -Fg(\))195 2560 y Fu(Return)j(the)f(function)g(in)o(v)o(ok)o(ed)g(b)o(y) -g Fm(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fm(map)p Fu(.)25 -b(If)17 b Fm(map)h Fu(is)f(NULL,)h(the)195 2615 y(curren)o(t)13 -b(k)o(eymap)g(is)h(used.)20 b(If)14 b Fm(t)o(yp)q(e)i -Fu(is)e(not)f(NULL,)h(the)f(t)o(yp)q(e)g(of)g(the)h(ob)s(ject)f(is)h -(returned)195 2670 y(in)i(it)f(\(one)g(of)g Ft(ISFUNC)p -Fu(,)f Ft(ISKMAP)p Fu(,)g(or)h Ft(ISMACR)p Fu(\).)p eop -%%Page: 26 28 -26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312 -183 18 3 v 21 w(in)n(v)n(oking)p 541 183 V 23 w(k)n(eyseqs)k -Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 238 y -Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o -(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195 -293 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650 -387 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312 -387 V 21 w(in)n(v)n(oking)p 541 387 V 23 w(k)n(eyseqs)p -750 387 V 21 w(in)p 818 387 V 22 w(map)i Fg(\()p Ft(Function)14 -b(*function,)283 442 y(Keymap)g(map)p Fg(\))195 497 y -Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o -(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195 -552 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650 -646 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 646 -V 21 w(function)p 467 646 V 21 w(dump)r(er)g Fg(\()p -Ft(int)15 b(readable)p Fg(\))195 701 y Fu(Prin)o(t)k(the)h(readline)g -(function)g(names)g(and)f(the)g(k)o(ey)g(sequences)i(curren)o(tly)e(b)q -(ound)i(to)195 756 y(them)16 b(to)f Ft(rl_outstream)p -Fu(.)k(If)d Fm(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)g -(formatted)f(in)h(suc)o(h)g(a)195 810 y(w)o(a)o(y)e(that)h(it)g(can)g -(b)q(e)h(made)g(part)e(of)h(an)g Ft(inputrc)f Fu(\014le)i(and)g -(re-read.)1650 905 y(F)l(unction)-1749 b Fi(void)20 b -Fh(rl)p 241 905 V 21 w(list)p 337 905 V 22 w(funmap)p -550 905 V 18 w(names)h Fg(\(\))195 960 y Fu(Prin)o(t)15 -b(the)g(names)h(of)e(all)j(bindable)g(Readline)g(functions)f(to)f -Ft(rl_outstream)p Fu(.)1650 1054 y(F)l(unction)-1749 -b Fi(char)20 b(**)f Fh(rl)p 312 1054 V 21 w(funmap)p -524 1054 V 18 w(names)i Fg(\(\))195 1109 y Fu(Return)12 -b(a)e(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g(function)h(names.) -18 b(The)11 b(arra)o(y)f(is)i(sorted.)195 1163 y(The)k(arra)o(y)f -(itself)i(is)f(allo)q(cated,)h(but)f(not)f(the)h(strings)g(inside.)24 -b(Y)l(ou)16 b(should)h(free)f(\(\))f(the)195 1218 y(arra)o(y)f(when)i -(y)o(ou)e(done,)i(but)f(not)g(the)g(p)q(oin)o(trs.)75 -1333 y Fl(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 1430 -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 -1485 y(useful.)28 b(It)17 b(is)h(certainly)h(easy)e(to)g(try)g -(something)g(if)h(y)o(ou)f(kno)o(w)g(y)o(ou)h(can)f(undo)h(it.)27 -b(I)18 b(could)g(use)g(an)75 1540 y(undo)e(function)g(for)e(the)i(sto)q -(c)o(k)e(mark)o(et.)137 1608 y(If)g(y)o(our)e(function)i(simply)h -(inserts)f(text)e(once,)i(or)e(deletes)j(text)d(once,)i(and)f(uses)h -Ft(rl_insert_text)75 1663 y(\(\))h Fu(or)g Ft(rl_delete_text)e(\(\))i -Fu(to)f(do)h(it,)g(then)h(undoing)g(is)g(already)f(done)h(for)f(y)o(ou) -f(automatically)l(.)137 1731 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 1786 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 1841 -y(group)14 b(\(\))h Fu(and)h Ft(rl_end_undo_group)d(\(\))p -Fu(.)137 1909 y(The)j(t)o(yp)q(es)f(of)g(ev)o(en)o(ts)g(that)f(can)h(b) -q(e)h(undone)g(are:)195 1975 y Ft(enum)23 b(undo_code)g({)h -(UNDO_DELETE,)e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)137 -2043 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 -2098 y(some)d(text.)18 b(That)12 b(is,)h(the)f(undo)g(co)q(de)h(tells)g -(undo)g(what)e(to)h(undo,)h(not)f(ho)o(w)f(to)h(undo)g(it.)19 -b Ft(UNDO_BEGIN)75 2152 y Fu(and)c Ft(UNDO_END)f Fu(are)h(tags)g(added) -g(b)o(y)h Ft(rl_begin_undo_group)c(\(\))j Fu(and)g Ft -(rl_end_undo_group)e(\(\))p Fu(.)1650 2247 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 2247 V 21 w(b)r(egin)p 372 -2247 V 20 w(undo)p 517 2247 V 20 w(group)h Fg(\(\))195 -2302 y Fu(Begins)e(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g -(construct.)29 b(The)19 b(undo)g(information)195 2356 -y(usually)f(comes)f(from)f(calls)h(to)g Ft(rl_insert_text)c(\(\))j -Fu(and)h Ft(rl_delete_text)c(\(\))p Fu(,)k(but)195 2411 -y(could)f(b)q(e)g(the)f(result)h(of)f(calls)h(to)f Ft(rl_add_undo)e -(\(\))p Fu(.)1650 2506 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 2506 V 21 w(end)p 326 2506 V 20 w(undo)p -471 2506 V 20 w(group)h Fg(\(\))195 2560 y Fu(Closes)c(the)g(curren)o -(t)g(undo)h(group)e(started)h(with)g Ft(rl_begin_undo_group)c(\(\))p -Fu(.)25 b(There)195 2615 y(should)17 b(b)q(e)f(one)f(call)i(to)e -Ft(rl_end_undo_group)e(\(\))i Fu(for)g(eac)o(h)g(call)i(to)e -Ft(rl_begin_undo_)195 2670 y(group)f(\(\))p Fu(.)p eop -%%Page: 27 29 -27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(27)1650 183 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 183 18 3 v 21 w(add)p 354 183 V 20 w(undo)i -Fg(\()p Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)283 -238 y(char)g(*text)p Fg(\))195 293 y Fu(Remem)o(b)q(er)j(ho)o(w)f(to)f -(undo)i(an)f(ev)o(en)o(t)g(\(according)h(to)e Fm(what)q -Fu(\).)23 b(The)16 b(a\013ected)g(text)g(runs)195 348 -y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h(encompasses)f -Fm(text)p Fu(.)1650 445 y(F)l(unction)-1749 b Fi(void)20 -b Fh(free)p 296 445 V 20 w(undo)p 441 445 V 20 w(list)k -Fg(\(\))195 500 y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1650 -597 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 597 -V 21 w(do)p 297 597 V 20 w(undo)i Fg(\(\))195 651 y Fu(Undo)16 -b(the)g(\014rst)f(thing)h(on)g(the)f(undo)h(list.)22 -b(Returns)17 b Ft(0)e Fu(if)h(there)g(w)o(as)f(nothing)h(to)f(undo,)195 -706 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137 -803 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 858 y(c)o(hange)i(its)h(case\),)g(call)g Ft(rl_modifying)14 -b(\(\))k Fu(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f -(text.)29 b(Y)l(ou)19 b(m)o(ust)75 913 y(supply)d(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(.) -1650 1010 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 -1010 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p -Fg(\))195 1065 y Fu(T)l(ell)i(Readline)i(to)c(sa)o(v)o(e)g(the)i(text)e -(b)q(et)o(w)o(een)h Fm(start)g Fu(and)g Fm(end)j Fu(as)c(a)h(single)h -(undo)g(unit.)23 b(It)195 1120 y(is)16 b(assumed)f(that)g(y)o(ou)f -(will)j(subsequen)o(tly)g(mo)q(dify)e(that)g(text.)75 -1237 y Fl(2.4.6)30 b(Redispla)n(y)1650 1363 y Fu(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 1363 V 21 w(redispla)n(y)k -Fg(\(\))195 1417 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)f -(screen)i(to)e(re\015ect)h(the)g(curren)o(t)g(con)o(ten)o(ts)f(of)g -Ft(rl_)195 1472 y(line_buffer)p Fu(.)1650 1569 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1569 V 21 w(forced)p 390 1569 -V 20 w(up)r(date)p 584 1569 V 20 w(displa)n(y)k Fg(\(\))195 -1624 y Fu(F)l(orce)17 b(the)f(line)j(to)d(b)q(e)i(up)q(dated)f(and)g -(redispla)o(y)o(ed,)h(whether)f(or)g(not)f(Readline)j(thinks)195 -1679 y(the)c(screen)h(displa)o(y)g(is)g(correct.)1650 -1776 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1776 -V 21 w(on)p 297 1776 V 20 w(new)p 416 1776 V 21 w(line)k -Fg(\(\))195 1831 y Fu(T)l(ell)15 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,)j(usually)195 1886 y(after)e(ouputting)i(a)f(newline.)1650 -1983 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1983 -V 21 w(on)p 297 1983 V 20 w(new)p 416 1983 V 21 w(line)p -525 1983 V 22 w(with)p 657 1983 V 22 w(prompt)h Fg(\(\))195 -2037 y Fu(T)l(ell)c(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 -Fm(rl)p 1595 2037 14 2 v 16 w(prompt)195 2092 y Fu(already)f(displa)o -(y)o(ed.)22 b(This)15 b(could)h(b)q(e)g(used)g(b)o(y)f(applications)i -(that)d(w)o(an)o(t)g(to)h(output)g(the)195 2147 y(prompt)j(string)g -(themselv)o(es,)h(but)g(still)h(need)f(Readline)h(to)e(kno)o(w)g(the)g -(prompt)g(string)195 2202 y(length)e(for)e(redispla)o(y)l(.)22 -b(It)15 b(should)h(b)q(e)g(used)g(after)e(setting)h Fm(rl)p -1258 2202 V 17 w(already)p 1420 2202 V 17 w(prompted)p -Fu(.)1650 2299 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 2299 18 3 v 21 w(reset)p 357 2299 V 20 w(line)p 465 -2299 V 23 w(state)j Fg(\(\))195 2354 y Fu(Reset)17 b(the)f(displa)o(y)h -(state)f(to)f(a)h(clean)h(state)f(and)g(redispla)o(y)h(the)g(curren)o -(t)f(line)i(starting)195 2409 y(on)d(a)g(new)g(line.)1650 -2506 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2506 -V 21 w(message)g Fg(\()p Ft(va_alist)p Fg(\))195 2560 -y Fu(The)h(argumen)o(ts)f(are)g(a)g(string)h(as)f(w)o(ould)h(b)q(e)g -(supplied)i(to)d Ft(printf)p Fu(.)35 b(The)21 b(resulting)195 -2615 y(string)h(is)g(displa)o(y)o(ed)h(in)g(the)f Fm(ec)o(ho)g(area)p -Fu(.)39 b(The)23 b(ec)o(ho)f(area)f(is)h(also)g(used)h(to)e(displa)o(y) -195 2670 y(n)o(umeric)16 b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)p -eop -%%Page: 28 30 -28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(clear)p 354 183 V 21 w(message)h Fg(\(\))195 -238 y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1650 -333 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 333 -V 21 w(sa)n(v)n(e)p 365 333 V 21 w(prompt)h Fg(\(\))195 -388 y Fu(Sa)o(v)o(e)e(the)h(lo)q(cal)h(Readline)h(prompt)d(displa)o(y)i -(state)e(in)h(preparation)g(for)f(displa)o(ying)i(a)195 -443 y(new)15 b(message)g(in)h(the)f(message)g(area)g(with)g -Ft(rl_message)p Fu(.)1650 538 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 538 V 21 w(restore)p 436 538 V 20 w(prompt)g -Fg(\(\))195 593 y Fu(Restore)c(the)h(lo)q(cal)h(Readline)g(prompt)e -(displa)o(y)i(state)e(sa)o(v)o(ed)g(b)o(y)g(the)h(most)e(recen)o(t)i -(call)195 648 y(to)e Ft(rl_save_prompt)p Fu(.)75 763 -y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650 887 -y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 887 -V 21 w(insert)p 378 887 V 21 w(text)k Fg(\()p Ft(char)14 -b(*text)p Fg(\))195 942 y Fu(Insert)h Fm(text)h Fu(in)o(to)f(the)h -(line)g(at)f(the)g(curren)o(t)g(cursor)g(p)q(osition.)1650 -1037 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1037 -V 21 w(delete)p 383 1037 V 22 w(text)k Fg(\()p Ft(int)14 -b(start,)h(int)f(end)p Fg(\))195 1092 y Fu(Delete)i(the)f(text)g(b)q -(et)o(w)o(een)g Fm(start)g Fu(and)h Fm(end)h Fu(in)f(the)g(curren)o(t)f -(line.)1650 1187 y(F)l(unction)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 1187 V 21 w(cop)n(y)p 421 1187 V 21 w(text)24 -b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 -1242 y Fu(Return)h(a)f(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i -Fm(start)f Fu(and)g Fm(end)j Fu(in)e(the)f(curren)o(t)g(line.)1650 -1337 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1337 -V 21 w(kill)p 311 1337 V 23 w(text)k Fg(\()p Ft(int)14 -b(start,)h(int)g(end)p Fg(\))195 1392 y Fu(Cop)o(y)j(the)h(text)f(b)q -(et)o(w)o(een)h Fm(start)f Fu(and)h Fm(end)i Fu(in)e(the)g(curren)o(t)f -(line)i(to)e(the)h(kill)h(ring,)g(ap-)195 1447 y(p)q(ending)15 -b(or)f(prep)q(ending)h(to)e(the)h(last)f(kill)j(if)e(the)g(last)f -(command)h(w)o(as)f(a)g(kill)i(command.)195 1502 y(The)j(text)f(is)h -(deleted.)28 b(If)18 b Fm(start)f Fu(is)h(less)g(than)f -Fm(end)p Fu(,)i(the)e(text)g(is)h(app)q(ended,)i(otherwise)195 -1556 y(prep)q(ended.)i(If)15 b(the)g(last)h(command)f(w)o(as)f(not)h(a) -g(kill,)h(a)f(new)h(kill)h(ring)e(slot)g(is)h(used.)75 -1672 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650 -1796 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 -1796 V 21 w(read)p 346 1796 V 20 w(k)n(ey)k Fg(\(\))195 -1851 y Fu(Return)14 b(the)g(next)g(c)o(haracter)e(a)o(v)m(ailable.)22 -b(This)14 b(handles)h(input)f(inserted)h(in)o(to)e(the)h(input)195 -1905 y(stream)k(via)g Fm(p)q(ending)j(input)f Fu(\(see)f(Section)g(2.3) -f([Readline)i(V)l(ariables],)g(page)e(21\))g(and)195 -1960 y Ft(rl_stuff_char)13 b(\(\))p Fu(,)i(macros,)f(and)h(c)o -(haracters)g(read)g(from)f(the)i(k)o(eyb)q(oard.)1650 -2056 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2056 -V 21 w(getc)j Fg(\()p Ft(FILE)14 b(*)p Fg(\))195 2110 -y Fu(Return)i(the)f(next)g(c)o(haracter)g(a)o(v)m(ailable)i(from)d(the) -h(k)o(eyb)q(oard.)1650 2206 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 2206 V 21 w(stu\013)p 346 2206 V 20 w(c)n(har)j -Fg(\()p Ft(int)15 b(c)p Fg(\))195 2260 y Fu(Insert)22 -b Fm(c)i Fu(in)o(to)e(the)g(Readline)i(input)f(stream.)38 -b(It)22 b(will)h(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)g -(Readline)195 2315 y(attempts)14 b(to)h(read)g(c)o(haracters)f(from)h -(the)g(terminal)h(with)f Ft(rl_read_key)f(\(\))p Fu(.)1650 -2410 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2410 -V 21 w(extend)p 404 2410 V 21 w(line)p 513 2410 V 22 -w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195 2465 -y Fu(Ensure)f(that)e Ft(rl_line_buffer)g Fu(has)h(enough)h(space)f(to)g -(hold)h Fm(len)h Fu(c)o(haracters,)d(p)q(ossibly)195 -2520 y(reallo)q(cating)k(it)g(if)f(necessary)l(.)1650 -2615 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2615 -V 21 w(initiali)q(z)q(e)26 b Fg(\(\))195 2670 y Fu(Initialize)18 -b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)p -eop -%%Page: 29 31 -29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(29)1650 183 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(reset)p 357 183 V 20 w(terminal)j -Fg(\()p Ft(char)15 b(*terminal_name)p Fg(\))195 238 y -Fu(Reinitializ)q(e)h(Readline's)g(idea)e(of)f(the)h(terminal)g -(settings)g(using)g Fm(terminal)p 1501 238 14 2 v 17 -w(name)j Fu(as)c(the)195 293 y(terminal)k(t)o(yp)q(e)g(\(e.g.,)e -Ft(vt100)p Fu(\).)24 b(If)16 b Fm(terminal)p 987 293 -V 18 w(name)j Fu(is)e(NULL,)g(the)g(v)m(alue)h(of)e(the)h -Ft(TERM)195 348 y Fu(en)o(vironmen)o(t)e(v)m(ariable)i(is)f(used.)1650 -431 y(F)l(unction)-1749 b Fi(int)20 b Fh(alphab)r(etic)k -Fg(\()p Ft(int)14 b(c)p Fg(\))195 486 y Fu(Return)i(1)f(if)g -Fm(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1650 -570 y(F)l(unction)-1749 b Fi(int)20 b Fh(n)n(umeric)i -Fg(\()p Ft(int)15 b(c)p Fg(\))195 624 y Fu(Return)h(1)f(if)g -Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 708 -y(F)l(unction)-1749 b Fi(int)20 b Fh(ding)i Fg(\(\))195 -763 y Fu(Ring)16 b(the)f(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g -(setting)f(of)g Ft(bell-style)p Fu(.)1650 847 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 847 18 3 v 21 w(displa)n(y)p -435 847 V 22 w(matc)n(h)p 611 847 V 20 w(list)25 b Fg(\()p -Ft(char)14 b(**matches,)g(int)g(len,)h(int)283 901 y(max)p -Fg(\))195 956 y Fu(A)j(con)o(v)o(enience)i(function)g(for)d(displa)o -(ying)j(a)e(list)i(of)e(strings)g(in)h(columnar)g(format)e(on)195 -1011 y(Readline's)e(output)e(stream.)18 b Ft(matches)12 -b Fu(is)h(the)g(list)h(of)f(strings,)f(in)i(argv)e(format,)g(suc)o(h)h -(as)195 1066 y(a)h(list)h(of)e(completion)j(matc)o(hes.)j -Ft(len)13 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h -Ft(matches)p Fu(,)e(and)h Ft(max)195 1120 y Fu(is)k(the)g(length)h(of)e -(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)27 b(This)18 -b(function)h(uses)f(the)g(setting)195 1175 y(of)13 b -Ft(print-completions-horizontally)d Fu(to)k(select)g(ho)o(w)g(the)g -(matc)o(hes)f(are)h(displa)o(y)o(ed)195 1230 y(\(see)h(Section)h(1.3.1) -e([Readline)j(Init)f(File)g(Syn)o(tax],)e(page)h(4\).)137 -1314 y(The)h(follo)o(wing)g(are)f(implemen)o(ted)h(as)f(macros,)f -(de\014ned)j(in)f Ft(chartypes.h)p Fu(.)1650 1397 y(F)l(unction)-1749 -b Fi(int)20 b Fh(upp)r(ercase)p 426 1397 V 19 w(p)j Fg(\()p -Ft(int)14 b(c)p Fg(\))195 1452 y Fu(Return)i(1)f(if)g -Fm(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)f(c)o(haracter.)1650 -1536 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p -409 1536 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195 -1591 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g -(alphab)q(etic)i(c)o(haracter.)1650 1674 y(F)l(unction)-1749 -b Fi(int)20 b Fh(digit)p 289 1674 V 22 w(p)i Fg(\()p -Ft(int)15 b(c)p Fg(\))195 1729 y Fu(Return)h(1)f(if)g -Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 1813 -y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 1813 V -20 w(upp)r(er)i Fg(\()p Ft(int)14 b(c)p Fg(\))195 1867 -y Fu(If)21 b Fm(c)i Fu(is)e(a)g(lo)o(w)o(ercase)f(alphab)q(etic)i(c)o -(haracter,)f(return)g(the)f(corresp)q(onding)i(upp)q(ercase)195 -1922 y(c)o(haracter.)1650 2006 y(F)l(unction)-1749 b -Fi(int)20 b Fh(to)p 227 2006 V 20 w(lo)n(w)n(er)k Fg(\()p -Ft(int)15 b(c)p Fg(\))195 2061 y Fu(If)j Fm(c)j Fu(is)e(an)f(upp)q -(ercase)h(alphab)q(etic)h(c)o(haracter,)e(return)g(the)g(corresp)q -(onding)h(lo)o(w)o(ercase)195 2115 y(c)o(haracter.)1650 -2199 y(F)l(unction)-1749 b Fi(int)20 b Fh(digit)p 289 -2199 V 22 w(v)m(alue)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 -2254 y Fu(If)g Fm(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 2357 y Fl(2.4.9)30 b(Alternate)20 -b(In)n(terface)137 2451 y Fu(An)j(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: 30 32 -30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 183 -18 3 v 21 w(callbac)n(k)p 458 183 V 23 w(handler)p 670 -183 V 21 w(install)25 b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283 -238 y(*lhandler)p Fg(\))195 293 y Fu(Set)i(up)h(the)g(terminal)g(for)f -(readline)i(I/O)e(and)h(displa)o(y)g(the)g(initial)h(expanded)g(v)m -(alue)f(of)195 348 y Fm(prompt)p Fu(.)24 b(Sa)o(v)o(e)17 -b(the)g(v)m(alue)h(of)e Fm(lhandler)22 b Fu(to)17 b(use)g(as)f(a)h -(callbac)o(k)h(when)f(a)g(complete)g(line)195 402 y(of)e(input)h(has)f -(b)q(een)h(en)o(tered.)1650 498 y(F)l(unction)-1749 b -Fi(void)20 b Fh(rl)p 241 498 V 21 w(callbac)n(k)p 458 -498 V 23 w(read)p 591 498 V 20 w(c)n(har)j Fg(\(\))195 -553 y Fu(Whenev)o(er)14 b(an)f(application)i(determines)f(that)f(k)o -(eyb)q(oard)g(input)h(is)g(a)o(v)m(ailable,)h(it)f(should)195 -608 y(call)20 b Ft(rl_callback_read_char\(\))p Fu(,)c(whic)o(h)k(will)g -(read)f(the)g(next)g(c)o(haracter)f(from)g(the)195 663 -y(curren)o(t)25 b(input)h(source.)48 b(If)25 b(that)g(c)o(haracter)f -(completes)h(the)g(line,)k Ft(rl_callback_)195 717 y(read_char)14 -b Fu(will)k(in)o(v)o(ok)o(e)e(the)f Fm(lhandler)21 b -Fu(function)c(sa)o(v)o(ed)e(b)o(y)h Ft(rl_callback_handler_)195 -772 y(install)g Fu(to)h(pro)q(cess)g(the)g(line.)27 b -Ft(EOF)17 b Fu(is)h(indicated)g(b)o(y)f(calling)i Fm(lhandler)j -Fu(with)c(a)f Ft(NULL)195 827 y Fu(line.)1650 923 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 923 V 21 w(callbac)n(k)p 458 -923 V 23 w(handler)p 670 923 V 21 w(remo)n(v)n(e)i Fg(\(\))195 -977 y Fu(Restore)15 b(the)g(terminal)g(to)g(its)g(initial)i(state)d -(and)h(remo)o(v)o(e)f(the)h(line)h(handler.)21 b(This)16 -b(ma)o(y)195 1032 y(b)q(e)g(called)h(from)d(within)j(a)d(callbac)o(k)j -(as)d(w)o(ell)j(as)d(indep)q(enden)o(tly)m(.)75 1148 -y Fl(2.4.10)29 b(An)21 b(Example)137 1246 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 1301 -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 1356 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 1410 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 1477 y Ft(/*)24 -b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h -(*/)195 1528 y(int)195 1580 y(invert_case_line)f(\(count,)h(key\))314 -1632 y(int)h(count,)f(key;)195 1684 y({)243 1736 y(register)f(int)i -(start,)f(end,)g(i;)243 1840 y(start)g(=)h(rl_point;)243 -1944 y(if)f(\(rl_point)g(>=)h(rl_end\))290 1995 y(return)f(\(0\);)243 -2099 y(if)g(\(count)g(<)h(0\))290 2151 y({)338 2203 y(direction)f(=)h -(-1;)338 2255 y(count)f(=)h(-count;)290 2307 y(})243 -2359 y(else)290 2411 y(direction)f(=)h(1;)243 2514 y(/*)f(Find)h(the)f -(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)243 2566 -y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)243 -2670 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)p -eop -%%Page: 31 33 -31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(31)243 183 y Ft(if)23 b(\(end)h(>)f(rl_end\))290 -235 y(end)h(=)g(rl_end;)243 287 y(else)f(if)h(\(end)f(<)h(0\))290 -339 y(end)g(=)g(0;)243 443 y(if)f(\(start)g(==)h(end\))290 -495 y(return)f(\(0\);)243 598 y(if)g(\(start)g(>)h(end\))290 -650 y({)338 702 y(int)g(temp)f(=)h(start;)338 754 y(start)f(=)h(end;) -338 806 y(end)g(=)f(temp;)290 858 y(})243 962 y(/*)g(Tell)h(readline)e -(that)i(we)f(are)h(modifying)e(the)i(line,)f(so)h(it)f(will)h(save)314 -1013 y(the)g(undo)f(information.)f(*/)243 1065 y(rl_modifying)g -(\(start,)h(end\);)243 1169 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f -(i++\))290 1221 y({)338 1273 y(if)h(\(uppercase_p)e -(\(rl_line_buffer[i]\)\))386 1325 y(rl_line_buffer[i])f(=)j(to_lower)f -(\(rl_line_buffer[i]\);)338 1377 y(else)g(if)h(\(lowercase_p)e -(\(rl_line_buffer[i]\)\))386 1429 y(rl_line_buffer[i])f(=)j(to_upper)f -(\(rl_line_buffer[i]\);)290 1480 y(})243 1532 y(/*)g(Move)h(point)f(to) -g(on)h(top)f(of)h(the)f(last)h(character)e(changed.)h(*/)243 -1584 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f -(start;)243 1636 y(return)g(\(0\);)195 1688 y(})75 1835 -y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 1938 -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 -1993 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 2048 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 2102 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 2157 -y(Since)i(Readline)g(c)o(hanges)f(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 -2212 y(pro)q(cessing)22 b(when)f(a)g(signal)h(is)g(receiv)o(ed)g(to)e -(restore)g(the)i(terminal)f(to)g(a)g(sane)g(state,)g(or)f(pro)o(vide)75 -2267 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o -(ually)l(.)137 2341 y(Readline)23 b(con)o(tains)d(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 2396 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 2451 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)75 2506 y(w)o(ere)22 b(in)h(e\013ect)f(b)q(efore)g -Ft(readline)14 b(\(\))22 b Fu(w)o(as)f(called,)k(reset)d(the)g(signal)h -(handling)h(to)d(what)g(it)i(w)o(as)75 2560 y(b)q(efore)e -Ft(readline)14 b(\(\))20 b Fu(w)o(as)f(called,)k(and)e(resend)g(the)f -(signal)i(to)d(the)i(calling)h(application.)37 b(If)21 -b(and)75 2615 y(when)15 b(the)f(calling)i(application's)g(signal)f -(handler)g(returns,)f(Readline)j(will)e(reinitialize)j(the)c(terminal) -75 2670 y(and)21 b(con)o(tin)o(ue)h(to)e(accept)h(input.)39 -b(When)21 b(a)g Ft(SIGINT)f Fu(is)h(receiv)o(ed,)j(the)d(Readline)i -(signal)f(handler)p eop -%%Page: 32 34 -32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)75 -183 y(p)q(erforms)h(some)f(additional)j(w)o(ork,)d(whic)o(h)i(will)h -(cause)e(an)o(y)g(partially-en)o(tered)h(line)h(to)d(b)q(e)i(ab)q -(orted)75 238 y(\(see)c(the)g(description)i(of)e Ft(rl_free_line_state) -e(\(\))p Fu(\).)137 307 y(There)i(is)h(an)f(additional)h(Readline)h -(signal)f(handler,)g(for)e Ft(SIGWINCH)p Fu(,)g(whic)o(h)h(the)g(k)o -(ernel)h(sends)g(to)75 362 y(a)i(pro)q(cess)h(whenev)o(er)h(the)e -(terminal's)h(size)h(c)o(hanges)f(\(for)f(example,)i(if)f(a)f(user)h -(resizes)h(an)e Ft(xterm)p Fu(\).)75 417 y(The)k(Readline)h -Ft(SIGWINCH)d Fu(handler)j(up)q(dates)e(Readline's)i(in)o(ternal)g -(screen)e(size)i(state,)e(and)h(then)75 472 y(calls)c(an)o(y)f -Ft(SIGWINCH)e Fu(signal)j(handler)g(the)f(calling)i(application)f(has)f -(installed.)27 b(Readline)19 b(calls)f(the)75 527 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 581 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 636 -y(return)e(\(for)f(example,)h(a)g Ft(longjmp)f Fu(bac)o(k)g(to)h(a)f -(main)h(pro)q(cessing)h(lo)q(op\),)f(it)g Fm(m)o(ust)g -Fu(call)i Ft(rl_cleanup_)75 691 y(after_signal)d(\(\))g -Fu(\(describ)q(ed)j(b)q(elo)o(w\),)e(to)g(restore)f(the)i(terminal)g -(state.)137 760 y(Readline)h(pro)o(vides)e(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 815 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 870 y(applications)j(c)o -(hange)e(the)g(v)m(alues)i(of)d(these)i(v)m(ariables)g(only)g(when)g -(calling)g Ft(readline)d(\(\))p Fu(,)h(not)h(in)h(a)75 -925 y(signal)e(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g -(state)e(is)i(not)f(corrupted.)1661 1021 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 1021 18 3 v 21 w(catc)n(h)p -366 1021 V 22 w(signals)195 1076 y Fu(If)h(this)h(v)m(ariable)g(is)g -(non-zero,)g(Readline)i(will)e(install)h(signal)f(handlers)g(for)e -Ft(SIGINT)p Fu(,)195 1131 y Ft(SIGQUIT)p Fu(,)14 b Ft(SIGTERM)p -Fu(,)g Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)h Ft(SIGTTIN)p -Fu(,)g(and)h Ft(SIGTTOU)p Fu(.)195 1200 y(The)g(default)h(v)m(alue)h -(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1661 1297 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 1297 V 21 w(catc)n(h)p 366 -1297 V 22 w(sigwinc)n(h)195 1351 y Fu(If)15 b(this)h(v)m(ariable)g(is)g -(non-zero,)f(Readline)i(will)g(install)f(a)f(signal)h(handler)g(for)e -Ft(SIGWINCH)p Fu(.)195 1421 y(The)h(default)h(v)m(alue)h(of)d -Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1517 y(If)g(an)f(application)j -(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)j(catc)o(h)e(an)o(y) -f(signals,)h(or)f(to)f(handle)j(signals)75 1572 y(other)i(than)g(those) -g(Readline)j(catc)o(hes)d(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h -(Readline)i(pro)o(vides)d(con)o(v)o(enience)75 1627 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.)1650 1723 -y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1723 V -21 w(clean)n(up)p 450 1723 V 22 w(after)p 590 1723 V -20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 1778 y Fu(This)12 -b(function)h(will)g(reset)f(the)g(state)f(of)g(the)h(terminal)h(to)e -(what)g(it)h(w)o(as)f(b)q(efore)h Ft(readline)195 1833 -y(\(\))f Fu(w)o(as)f(called,)j(and)e(remo)o(v)o(e)g(the)g(Readline)i -(signal)f(handlers)g(for)e(all)i(signals,)h(dep)q(ending)195 -1888 y(on)i(the)g(v)m(alues)i(of)e Ft(rl_catch_signals)d -Fu(and)k Ft(rl_catch_sigwinch)p Fu(.)1650 1984 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 1984 V 21 w(free)p 356 1984 -V 20 w(line)p 464 1984 V 23 w(state)j Fg(\()p Ft(void)p -Fg(\))195 2039 y Fu(This)e(will)h(free)e(an)o(y)g(partial)g(state)g -(asso)q(ciated)g(with)g(the)h(curren)o(t)f(input)h(line)h(\(undo)195 -2094 y(information,)d(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,)195 -2148 y(and)c(an)o(y)f(partially-en)o(tered)i(n)o(umeric)f(argumen)o -(t\).)k(This)c(should)h(b)q(e)f(called)h(b)q(efore)e -Ft(rl_)195 2203 y(cleanup_after_signal)f(\(\))p Fu(.)23 -b(The)16 b(Readline)j(signal)e(handler)g(for)f Ft(SIGINT)f -Fu(calls)j(this)195 2258 y(to)d(ab)q(ort)f(the)h(curren)o(t)h(input)g -(line.)1650 2354 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p -241 2354 V 21 w(reset)p 383 2354 V 20 w(after)p 521 2354 -V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 2409 y Fu(This)d(will)h -(reinitialize)i(the)c(terminal)i(and)e(reinstall)i(an)o(y)e(Readline)j -(signal)e(handlers,)195 2464 y(dep)q(ending)d(on)f(the)f(v)m(alues)h -(of)f Ft(rl_catch_signals)e Fu(and)i Ft(rl_catch_sigwinch)p -Fu(.)137 2560 y(If)20 b(an)g(application)h(do)q(es)f(not)g(wish)g -(Readline)i(to)d(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f(call)h -Ft(rl_resize_)75 2615 y(terminal)14 b(\(\))i Fu(to)g(force)g(Readline)j -(to)d(up)q(date)h(its)g(idea)g(of)f(the)g(terminal)i(size)f(when)g(a)f -Ft(SIGWINCH)f Fu(is)75 2670 y(receiv)o(ed.)p eop -%%Page: 33 35 -33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(33)1650 183 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 183 18 3 v 21 w(resize)p 401 183 V 22 w(terminal)j -Fg(\()p Ft(void)p Fg(\))195 238 y Fu(Up)q(date)16 b(Readline's)h(in)o -(ternal)f(screen)f(size.)137 319 y(The)h(follo)o(wing)g(functions)g -(install)g(and)g(remo)o(v)o(e)e(Readline's)j(signal)f(handlers.)1650 -399 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 399 -V 21 w(set)p 307 399 V 20 w(signals)j Fg(\()p Ft(void)p -Fg(\))195 454 y Fu(Install)28 b(Readline's)g(signal)f(handler)h(for)e -Ft(SIGINT)p Fu(,)i Ft(SIGQUIT)p Fu(,)f Ft(SIGTERM)p Fu(,)h -Ft(SIGALRM)p Fu(,)195 509 y Ft(SIGTSTP)p Fu(,)19 b Ft(SIGTTIN)p -Fu(,)h Ft(SIGTTOU)p Fu(,)f(and)h Ft(SIGWINCH)p Fu(,)g(dep)q(ending)i -(on)d(the)h(v)m(alues)h(of)e Ft(rl_)195 564 y(catch_signals)13 -b Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)1650 644 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 644 V 21 w(clear)p 354 644 -V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 699 y Fu(Remo)o(v)o(e)15 -b(all)h(of)f(the)g(Readline)j(signal)e(handlers)g(installed)h(b)o(y)e -Ft(rl_set_signals)e(\(\))p Fu(.)75 816 y Fs(2.6)33 b(Custom)21 -b(Completers)137 908 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 963 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 1018 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 -1073 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75 -1173 y Fl(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137 -1266 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 1321 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 1375 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)i(library)e -(pro)o(vides)g(the)g(user)75 1430 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 1485 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 -1540 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 -1603 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q -(erform)g(completion:)100 1667 y(1.)29 b(The)21 b(user-in)o(terface)g -(function)g Ft(rl_complete)14 b(\(\))p Fu(.)35 b(This)21 -b(function)g(is)g(called)h(with)f(the)f(same)165 1721 -y(argumen)o(ts)c(as)g(other)h(Readline)i(functions)f(in)o(tended)g(for) -e(in)o(teractiv)o(e)i(use:)23 b Fm(coun)o(t)18 b Fu(and)f -Fm(in)o(v)o(ok-)165 1776 y(ing)p 228 1776 14 2 v 17 w(k)o(ey)p -Fu(.)34 b(It)20 b(isolates)g(the)g(w)o(ord)f(to)h(b)q(e)g(completed)h -(and)f(calls)h Ft(completion_matches)13 b(\(\))20 b Fu(to)165 -1831 y(generate)f(a)f(list)i(of)e(p)q(ossible)j(completions.)32 -b(It)18 b(then)i(either)f(lists)h(the)f(p)q(ossible)h(completions,)165 -1886 y(inserts)g(the)f(p)q(ossible)j(completions,)f(or)e(actually)h(p)q -(erforms)f(the)h(completion,)h(dep)q(ending)h(on)165 -1940 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)100 -2004 y(2.)29 b(The)11 b(in)o(ternal)g(function)g Ft(completion_matches) -i(\(\))d Fu(uses)h(y)o(our)e Fm(generator)k Fu(function)e(to)f -(generate)165 2059 y(the)16 b(list)h(of)f(p)q(ossible)i(matc)o(hes,)d -(and)h(then)h(returns)f(the)g(arra)o(y)f(of)g(these)i(matc)o(hes.)22 -b(Y)l(ou)16 b(should)165 2113 y(place)g(the)f(address)h(of)e(y)o(our)h -(generator)f(function)i(in)g Ft(rl_completion_entry_function)p -Fu(.)100 2177 y(3.)29 b(The)19 b(generator)e(function)j(is)f(called)h -(rep)q(eatedly)f(from)f Ft(completion_matches)13 b(\(\))p -Fu(,)18 b(returning)165 2232 y(a)e(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 -Fm(text)h Fu(and)g Fm(state)p Fu(.)22 b Fm(text)165 2286 -y Fu(is)17 b(the)f(partial)g(w)o(ord)f(to)h(b)q(e)h(completed.)23 -b Fm(state)18 b Fu(is)e(zero)g(the)g(\014rst)g(time)g(the)g(function)h -(is)g(called,)165 2341 y(allo)o(wing)f(the)e(generator)g(to)g(p)q -(erform)h(an)o(y)f(necessary)h(initialization,)j(and)d(a)f(p)q(ositiv)o -(e)i(non-zero)165 2396 y(in)o(teger)i(for)f(eac)o(h)g(subsequen)o(t)h -(call.)28 b(When)18 b(the)g(generator)f(function)h(returns)f -Ft(\(char)e(*\)NULL)165 2451 y Fu(this)h(signals)h Ft -(completion_matches)c(\(\))i Fu(that)g(there)h(are)g(no)g(more)f(p)q -(ossibilitie)q(s)j(left.)23 b(Usually)165 2506 y(the)c(generator)g -(function)h(computes)g(the)f(list)h(of)f(p)q(ossible)i(completions)g -(when)e Fm(state)j Fu(is)d(zero,)165 2560 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 -2615 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)19 b(frees)d(the)g(strings)f -(when)165 2670 y(it)g(has)h(\014nished)g(with)g(them.)p -eop -%%Page: 34 36 -34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 238 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g -(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j -(the)e(function)h(that)195 293 y(do)q(es)15 b(the)g(initial)h(simple)h -(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches) -195 348 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g(\014lename) -h(completion.)1661 448 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 448 V 21 w(completion)p 686 448 V 21 -w(en)n(try)p 839 448 V 21 w(function)195 503 y Fu(This)c(is)f(a)g(p)q -(oin)o(ter)g(to)g(the)g(generator)f(function)i(for)e -Ft(completion_matches)f(\(\))p Fu(.)20 b(If)15 b(the)195 -558 y(v)m(alue)21 b(of)e Ft(rl_completion_entry_functio)o(n)e -Fu(is)j Ft(\(Function)14 b(*\)NULL)19 b Fu(then)h(the)f(de-)195 -613 y(fault)11 b(\014lename)h(generator)d(function,)j -Ft(filename_completion_function)g(\(\))p Fu(,)f(is)g(used.)75 -734 y Fl(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137 -834 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.)1650 -935 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 935 -V 21 w(complete)p 460 935 V 21 w(in)n(ternal)k Fg(\()p -Ft(int)15 b(what_to_do)p Fg(\))195 990 y Fu(Complete)k(the)f(w)o(ord)g -(at)g(or)g(b)q(efore)g(p)q(oin)o(t.)30 b Fm(what)p 1105 -990 14 2 v 16 w(to)p 1162 990 V 16 w(do)21 b Fu(sa)o(ys)c(what)h(to)g -(do)g(with)h(the)195 1045 y(completion.)33 b(A)19 b(v)m(alue)h(of)f(`)p -Ft(?)p Fu(')f(means)h(list)h(the)f(p)q(ossible)i(completions.)33 -b(`)p Ft(TAB)p Fu(')18 b(means)195 1099 y(do)g(standard)g(completion.) -30 b(`)p Ft(*)p Fu(')18 b(means)g(insert)g(all)i(of)d(the)i(p)q -(ossible)h(completions.)30 b(`)p Ft(!)p Fu(')195 1154 -y(means)17 b(to)f(displa)o(y)i(all)g(of)e(the)h(p)q(ossible)i -(completions,)f(if)f(there)g(is)g(more)g(than)f(one,)h(as)195 -1209 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f(completion.)1650 -1310 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1310 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 1365 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g -(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j -(the)e(function)h(that)195 1419 y(do)q(es)15 b(the)g(initial)h(simple)h -(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches) -195 1474 y(\(\))h Fu(and)h Ft(rl_completion_entry_functi)o(on)p -Fu(\).)i(The)e(default)g(is)g(to)f(do)g(\014lename)i(com-)195 -1529 y(pletion.)k(This)15 b(calls)g Ft(rl_complete_internal)e(\(\))h -Fu(with)h(an)f(argumen)o(t)f(dep)q(ending)k(on)195 1584 -y Fm(in)o(v)o(oking)p 364 1584 14 2 v 17 w(k)o(ey)p Fu(.)1650 -1685 y(F)l(unction)-1749 b Fi(int)19 b Fh(rl)p 214 1685 -18 3 v 21 w(p)r(ossible)p 432 1685 V 20 w(completions)k -Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))195 -1739 y Fu(List)k(the)f(p)q(ossible)i(completions.)29 -b(See)19 b(description)h(of)d Ft(rl_complete)d(\(\))p -Fu(.)28 b(This)19 b(calls)195 1794 y Ft(rl_complete_internal)12 -b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p -Fu('.)1650 1895 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 1895 V 21 w(insert)p 378 1895 V 21 w(completions)j -Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195 -1950 y Fu(Insert)24 b(the)h(list)f(of)g(p)q(ossible)i(completions)f(in) -o(to)f(the)g(line,)k(deleting)e(the)e(partially-)195 -2004 y(completed)16 b(w)o(ord.)j(See)c(description)i(of)d -Ft(rl_complete)g(\(\))p Fu(.)19 b(This)d(calls)g Ft(rl_complete_)195 -2059 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p -Ft(*)p Fu('.)1650 2160 y(F)l(unction)-1749 b Fi(char)20 -b(**)f Fh(completion)p 547 2160 V 21 w(matc)n(hes)j Fg(\()p -Ft(char)15 b(*text,)f(CPFunction)283 2215 y(*entry_func)p -Fg(\))195 2270 y Fu(Returns)f(an)f(arra)o(y)f(of)h Ft(\(char)j(*\))d -Fu(whic)o(h)h(is)g(a)f(list)h(of)f(completions)i(for)e -Fm(text)p Fu(.)18 b(If)13 b(there)f(are)195 2324 y(no)17 -b(completions,)g(returns)g Ft(\(char)d(**\)NULL)p Fu(.)23 -b(The)17 b(\014rst)f(en)o(try)g(in)i(the)e(returned)h(arra)o(y)195 -2379 y(is)c(the)h(substitution)f(for)g Fm(text)p Fu(.)18 -b(The)13 b(remaining)i(en)o(tries)e(are)f(the)i(p)q(ossible)g -(completions.)195 2434 y(The)h(arra)o(y)f(is)i(terminated)g(with)f(a)g -Ft(NULL)g Fu(p)q(oin)o(ter.)195 2506 y Fm(en)o(try)p -302 2506 14 2 v 16 w(func)g Fu(is)d(a)f(function)h(of)g(t)o(w)o(o)e -(args,)h(and)g(returns)h(a)f Ft(\(char)k(*\))p Fu(.)j(The)12 -b(\014rst)f(argumen)o(t)195 2560 y(is)j Fm(text)p Fu(.)19 -b(The)14 b(second)g(is)g(a)f(state)f(argumen)o(t;)h(it)h(is)g(zero)f -(on)h(the)f(\014rst)g(call,)i(and)f(non-zero)195 2615 -y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714 -2615 V 16 w(func)c Fu(returns)d(a)f Ft(NULL)h Fu(p)q(oin)o(ter)g(to)f -(the)h(caller)h(when)g(there)195 2670 y(are)g(no)g(more)g(matc)o(hes.)p -eop -%%Page: 35 37 -35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(35)1650 183 y(F)l(unction)-1749 b Fi(char)20 -b(*)f Fh(\014lename)p 455 183 18 3 v 20 w(completion)p -749 183 V 21 w(function)k Fg(\()p Ft(char)15 b(*text,)f(int)283 -238 y(state)p Fg(\))195 293 y Fu(A)19 b(generator)g(function)h(for)f -(\014lename)h(completion)h(in)f(the)f(general)h(case.)33 -b(Note)19 b(that)195 348 y(completion)e(in)f(Bash)f(is)h(a)f(little)i -(di\013eren)o(t)f(b)q(ecause)g(of)f(all)h(the)g(pathnames)f(that)g(m)o -(ust)195 402 y(b)q(e)i(follo)o(w)o(ed)g(when)g(lo)q(oking)h(up)f -(completions)h(for)e(a)g(command.)24 b(The)17 b(Bash)g(source)f(is)195 -457 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h -(functions.)1650 539 y(F)l(unction)-1749 b Fi(char)20 -b(*)f Fh(username)p 487 539 V 19 w(completion)p 780 539 -V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283 -594 y(state)p Fg(\))195 649 y Fu(A)k(completion)g(generator)f(for)g -(usernames.)28 b Fm(text)18 b Fu(con)o(tains)f(a)h(partial)g(username)g -(pre-)195 704 y(ceded)f(b)o(y)f(a)g(random)f(c)o(haracter)h(\(usually)h -(`)p Ft(~)p Fu('\).)k(As)16 b(with)g(all)h(completion)g(generators,)195 -759 y Fm(state)g Fu(is)f(zero)f(on)g(the)g(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)75 861 y Fl(2.6.3)30 -b(Completion)20 b(V)-5 b(ariables)1661 972 y Fu(V)l(ariable)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 972 V 21 w(completion)p -686 972 V 21 w(en)n(try)p 839 972 V 21 w(function)195 -1026 y Fu(A)c(p)q(oin)o(ter)h(to)e(the)i(generator)e(function)i(for)e -Ft(completion_matches)e(\(\))p Fu(.)22 b Ft(NULL)16 b -Fu(means)195 1081 y(to)f(use)g Ft(filename_completion_functio)o(n)d -(\(\))p Fu(,)j(the)g(default)h(\014lename)g(completer.)1661 -1163 y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p -469 1163 V 21 w(attempted)p 749 1163 V 20 w(completion)p -1043 1163 V 21 w(function)195 1218 y Fu(A)d(p)q(oin)o(ter)h(to)f(an)g -(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)23 -b(The)16 b(function)i(is)e(called)195 1273 y(with)f Fm(text)p -Fu(,)g Fm(start)p Fu(,)e(and)i Fm(end)p Fu(.)21 b Fm(start)15 -b Fu(and)g Fm(end)i Fu(are)e(indices)i(in)f Ft(rl_line_buffer)d -Fu(sa)o(ying)195 1328 y(what)22 b(the)h(b)q(oundaries)h(of)e -Fm(text)h Fu(are.)42 b(If)23 b(this)g(function)h(exists)f(and)f -(returns)h Ft(NULL)p Fu(,)195 1383 y(or)c(if)h(this)g(v)m(ariable)h(is) -f(set)g(to)e Ft(NULL)p Fu(,)i(then)g Ft(rl_complete)14 -b(\(\))19 b Fu(will)i(call)g(the)f(v)m(alue)g(of)195 -1437 y Ft(rl_completion_entry_functi)o(on)14 b Fu(to)j(generate)g(matc) -o(hes,)g(otherwise)g(the)g(arra)o(y)f(of)195 1492 y(strings)f(returned) -h(will)h(b)q(e)e(used.)1661 1574 y(V)l(ariable)-1749 -b Fi(CPFunction)21 b(*)e Fh(rl)p 443 1574 V 21 w(\014lename)p -672 1574 V 20 w(quoting)p 881 1574 V 21 w(function)195 -1629 y Fu(A)g(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(quote)f -(a)f(\014lename)i(in)g(an)e(application-)j(sp)q(eci\014c)195 -1684 y(fashion.)33 b(This)20 b(is)g(called)h(if)f(\014lename)g -(completion)h(is)f(b)q(eing)g(attempted)f(and)h(one)f(of)195 -1739 y(the)13 b(c)o(haracters)f(in)h Ft(rl_filename_quote_characte)o -(rs)d Fu(app)q(ears)i(in)i(a)e(completed)i(\014le-)195 -1793 y(name.)29 b(The)18 b(function)h(is)g(called)h(with)e -Fm(text)p Fu(,)g Fm(matc)o(h)p 1144 1793 14 2 v 16 w(t)o(yp)q(e)p -Fu(,)h(and)f Fm(quote)p 1480 1793 V 16 w(p)q(oin)o(ter)p -Fu(.)30 b(The)195 1848 y Fm(text)17 b Fu(is)h(the)f(\014lename)h(to)e -(b)q(e)h(quoted.)25 b(The)17 b Fm(matc)o(h)p 1115 1848 -V 16 w(t)o(yp)q(e)i Fu(is)f(either)f Ft(SINGLE_MATCH)p -Fu(,)e(if)195 1903 y(there)j(is)g(only)h(one)f(completion)h(matc)o(h,)f -(or)f Ft(MULT_MATCH)p Fu(.)27 b(Some)18 b(functions)g(use)h(this)195 -1958 y(to)13 b(decide)i(whether)f(or)g(not)f(to)g(insert)h(a)f(closing) -i(quote)f(c)o(haracter.)k(The)c Fm(quote)p 1600 1958 -V 16 w(p)q(oin)o(ter)195 2013 y Fu(is)20 b(a)g(p)q(oin)o(ter)g(to)f(an) -o(y)g(op)q(ening)i(quote)e(c)o(haracter)g(the)h(user)g(t)o(yp)q(ed.)34 -b(Some)19 b(functions)195 2067 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o -(haracter.)1661 2150 y(V)l(ariable)-1749 b Fi(CPFunction)21 -b(*)e Fh(rl)p 443 2150 18 3 v 21 w(\014lename)p 672 2150 -V 20 w(dequoting)p 939 2150 V 21 w(function)195 2204 -y Fu(A)14 b(p)q(oin)o(ter)g(to)e(a)i(function)g(that)f(will)i(remo)o(v) -o(e)e(application-sp)q(eci\014c)k(quoting)d(c)o(haracters)195 -2259 y(from)21 b(a)g(\014lename)h(b)q(efore)f(completion)i(is)f -(attempted,)g(so)f(those)g(c)o(haracters)f(do)h(not)195 -2314 y(in)o(terfere)e(with)f(matc)o(hing)h(the)f(text)g(against)g -(names)g(in)h(the)f(\014lesystem.)30 b(It)19 b(is)f(called)195 -2369 y(with)g Fm(text)p Fu(,)g(the)g(text)g(of)g(the)g(w)o(ord)f(to)g -(b)q(e)i(dequoted,)g(and)f Fm(quote)p 1381 2369 14 2 -v 16 w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 2424 -y(quoting)e(c)o(haracter)f(that)g(delimits)i(the)f(\014lename)h -(\(usually)f(`)p Ft(')p Fu(')f(or)g(`)p Ft(")p Fu('\).)23 -b(If)17 b Fm(quote)p 1657 2424 V 16 w(c)o(har)195 2478 -y Fu(is)f(zero,)e(the)i(\014lename)g(w)o(as)e(not)h(in)h(an)f(em)o(b)q -(edded)i(string.)1661 2560 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 2560 18 3 v 21 w(c)n(har)p 519 2560 -V 20 w(is)p 577 2560 V 22 w(quoted)p 770 2560 V 20 w(p)195 -2615 y Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(to)g(call)g(that)g -(determines)g(whether)g(or)g(not)f(a)g(sp)q(eci\014c)j(c)o(har-)195 -2670 y(acter)12 b(in)i(the)f(line)i(bu\013er)e(is)g(quoted,)g -(according)h(to)e(whatev)o(er)g(quoting)h(mec)o(hanism)h(the)p -eop -%%Page: 36 38 -36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)195 -183 y(program)12 b(calling)j(readline)g(uses.)20 b(The)13 -b(function)h(is)g(called)h(with)f(t)o(w)o(o)e(argumen)o(ts:)18 -b Fm(text)p Fu(,)195 238 y(the)11 b(text)g(of)g(the)g(line,)i(and)f -Fm(index)p Fu(,)g(the)g(index)g(of)f(the)g(c)o(haracter)g(in)h(the)f -(line.)20 b(It)11 b(is)h(used)g(to)195 293 y(decide)20 -b(whether)e(a)g(c)o(haracter)g(found)h(in)g Ft -(rl_completer_word_break_)o(charact)o(ers)195 348 y Fu(should)d(b)q(e)g -(used)g(to)e(break)i(w)o(ords)e(for)h(the)g(completer.)1661 -447 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 447 -18 3 v 21 w(completion)p 510 447 V 21 w(query)p 673 447 -V 21 w(items)195 502 y Fu(Up)d(to)e(this)i(man)o(y)f(items)h(will)h(b)q -(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)f(a)g(p)q -(ossible-completions)195 557 y(call.)26 b(After)16 b(that,)g(w)o(e)h -(ask)f(the)h(user)g(if)g(she)g(is)h(sure)e(she)i(w)o(an)o(ts)d(to)h -(see)h(them)g(all.)26 b(The)195 612 y(default)16 b(v)m(alue)g(is)g -(100.)1661 712 y(V)l(ariable)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 712 V 21 w(basic)p 430 712 V 21 w(w)n(ord)p -575 712 V 21 w(break)p 736 712 V 20 w(c)n(haracters)195 -766 y Fu(The)13 b(basic)h(list)f(of)g(c)o(haracters)f(that)g(signal)i -(a)e(break)h(b)q(et)o(w)o(een)g(w)o(ords)f(for)g(the)h(completer)195 -821 y(routine.)20 b(The)c(default)g(v)m(alue)g(of)f(this)g(v)m(ariable) -i(is)f(the)f(c)o(haracters)g(whic)o(h)h(break)f(w)o(ords)195 -876 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g Ft(")g -(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 976 y(V)l(ariable)-1749 -b Fi(char)20 b(*)f Fh(rl)p 286 976 V 21 w(basic)p 430 -976 V 21 w(quote)p 590 976 V 21 w(c)n(haracters)195 1030 -y Fu(List)d(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)f(cause)h(a)f -(w)o(ord)f(break.)1661 1130 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1130 V 21 w(completer)p 555 1130 V -21 w(w)n(ord)p 700 1130 V 20 w(break)p 860 1130 V 20 -w(c)n(haracters)195 1185 y Fu(The)j(list)g(of)f(c)o(haracters)g(that)g -(signal)h(a)g(break)f(b)q(et)o(w)o(een)h(w)o(ords)f(for)g -Ft(rl_complete_)195 1240 y(internal)14 b(\(\))p Fu(.)k(The)10 -b(default)h(list)g(is)g(the)f(v)m(alue)h(of)f Ft -(rl_basic_word_break_charac)o(ters)p Fu(.)p 1909 1244 -21 36 v 1661 1340 a(V)l(ariable)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 1340 18 3 v 21 w(completer)p 555 1340 V 21 -w(quote)p 715 1340 V 21 w(c)n(haracters)195 1394 y Fu(List)11 -b(of)g(c)o(haracters)f(whic)o(h)h(can)g(b)q(e)h(used)f(to)g(quote)f(a)h -(substring)g(of)f(the)h(line.)20 b(Completion)195 1449 -y(o)q(ccurs)c(on)g(the)g(en)o(tire)g(substring,)g(and)g(within)h(the)e -(substring)h Ft(rl_completer_word_)195 1504 y(break_characters)d -Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they) -f(also)g(app)q(ear)195 1559 y(within)h(this)g(list.)1661 -1658 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1658 V 21 w(\014lename)p 515 1658 V 20 w(quote)p 674 -1658 V 21 w(c)n(haracters)195 1713 y Fu(A)d(list)g(of)g(c)o(haracters)e -(that)h(cause)h(a)g(\014lename)h(to)e(b)q(e)h(quoted)g(b)o(y)f(the)h -(completer)g(when)195 1768 y(they)f(app)q(ear)h(in)g(a)f(completed)h -(\014lename.)21 b(The)15 b(default)h(is)g(the)f(n)o(ull)i(string.)1661 -1868 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1868 V 21 w(sp)r(ecial)p 473 1868 V 22 w(pre\014xes)195 -1923 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)g(w)o(ord)g -(break)h(c)o(haracters,)f(but)h(should)g(b)q(e)h(left)f(in)g -Fm(text)195 1977 y Fu(when)19 b(it)g(is)g(passed)f(to)g(the)h -(completion)g(function.)31 b(Programs)17 b(can)h(use)h(this)g(to)f -(help)195 2032 y(determine)e(what)e(kind)i(of)e(completing)i(to)e(do.) -19 b(F)l(or)14 b(instance,)h(Bash)g(sets)f(this)i(v)m(ariable)195 -2087 y(to)f Ft(")p Fu($)p Ft(@")f Fu(so)h(that)f(it)i(can)f(complete)h -(shell)h(v)m(ariables)f(and)g(hostnames.)1661 2187 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 2187 V 21 w(completion)p 510 -2187 V 21 w(app)r(end)p 715 2187 V 19 w(c)n(haracter)195 -2241 y Fu(When)15 b(a)e(single)j(completion)f(alternativ)o(e)f(matc)o -(hes)g(at)g(the)g(end)h(of)e(the)i(command)f(line,)195 -2296 y(this)20 b(c)o(haracter)e(is)i(app)q(ended)h(to)d(the)i(inserted) -g(completion)g(text.)31 b(The)20 b(default)g(is)f(a)195 -2351 y(space)14 b(c)o(haracter)f(\(`)i('\).)j(Setting)c(this)h(to)e -(the)h(n)o(ull)h(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))f(prev)o(en)o(ts) -i(an)o(ything)195 2406 y(b)q(eing)24 b(app)q(ended)g(automatically)l(.) -42 b(This)23 b(can)g(b)q(e)g(c)o(hanged)f(in)i(custom)e(completion)195 -2461 y(functions)15 b(to)e(pro)o(vide)i(the)f(\\most)f(sensible)j(w)o -(ord)d(separator)g(c)o(haracter")g(according)i(to)195 -2515 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d -(sp)q(eci\014cation.)1661 2615 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 2615 V 21 w(ignore)p 391 2615 -V 20 w(completion)p 685 2615 V 21 w(duplicates)195 2670 -y Fu(If)15 b(non-zero,)h(then)f(disallo)o(w)h(duplicates)h(in)f(the)g -(matc)o(hes.)j(Default)c(is)h(1.)p eop -%%Page: 37 39 -37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(37)1661 183 y(V)l(ariable)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(\014lename)p 444 183 V -20 w(completion)p 738 183 V 21 w(desired)195 238 y Fu(Non-zero)15 -b(means)g(that)g(the)g(results)h(of)f(the)g(matc)o(hes)g(are)f(to)h(b)q -(e)h(treated)f(as)f(\014lenames.)195 293 y(This)e(is)h -Fm(alw)o(a)o(ys)f Fu(zero)g(on)g(en)o(try)l(,)g(and)g(can)f(only)i(b)q -(e)f(c)o(hanged)g(within)h(a)e(completion)i(en)o(try)195 -348 y(generator)f(function.)20 b(If)14 b(it)f(is)h(set)f(to)g(a)g -(non-zero)g(v)m(alue,)i(directory)e(names)h(ha)o(v)o(e)f(a)g(slash)195 -402 y(app)q(ended)k(and)f(Readline)h(attempts)e(to)f(quote)i(completed) -g(\014lenames)g(if)g(they)g(con)o(tain)195 457 y(an)o(y)f(em)o(b)q -(edded)i(w)o(ord)d(break)h(c)o(haracters.)1661 541 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 541 V 21 w(\014lename)p 444 -541 V 20 w(quoting)p 653 541 V 21 w(desired)195 596 y -Fu(Non-zero)c(means)f(that)g(the)h(results)g(of)g(the)f(matc)o(hes)h -(are)f(to)g(b)q(e)h(quoted)g(using)h(double)195 650 y(quotes)12 -b(\(or)f(an)g(application-sp)q(eci)q(\014c)k(quoting)d(mec)o(hanism\))g -(if)g(the)g(completed)h(\014lename)195 705 y(con)o(tains)f(an)o(y)g(c)o -(haracters)g(in)h Ft(rl_filename_quote_chars)p Fu(.)j(This)c(is)h -Fm(alw)o(a)o(ys)h Fu(non-zero)195 760 y(on)d(en)o(try)l(,)g(and)h(can)f -(only)h(b)q(e)g(c)o(hanged)f(within)h(a)f(completion)i(en)o(try)d -(generator)g(function.)195 815 y(The)16 b(quoting)h(is)g(e\013ected)f -(via)h(a)e(call)j(to)d(the)i(function)g(p)q(oin)o(ted)g(to)e(b)o(y)i -Ft(rl_filename_)195 870 y(quoting_function)p Fu(.)1661 -953 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 953 -V 21 w(inhibit)p 399 953 V 23 w(completion)195 1008 y -Fu(If)15 b(this)f(v)m(ariable)i(is)f(non-zero,)f(completion)i(is)f -(inhibit)p Ft(<)p Fu(ed.)22 b(The)14 b(completion)i(c)o(haracter)195 -1063 y(will)h(b)q(e)f(inserted)g(as)f(an)o(y)f(other)h(b)q(ound)h(to)f -Ft(self-insert)p Fu(.)1661 1146 y(V)l(ariable)-1749 b -Fi(Function)20 b(*)g Fh(rl)p 391 1146 V 21 w(ignore)p -567 1146 V 20 w(some)p 714 1146 V 19 w(completions)p -1030 1146 V 21 w(function)195 1201 y Fu(This)15 b(function,)g(if)f -(de\014ned,)i(is)e(called)i(b)o(y)e(the)h(completer)f(when)h(real)g -(\014lename)g(comple-)195 1256 y(tion)k(is)g(done,)g(after)f(all)i(the) -f(matc)o(hing)f(names)h(ha)o(v)o(e)f(b)q(een)i(generated.)30 -b(It)19 b(is)g(passed)195 1311 y(a)h Ft(NULL)f Fu(terminated)h(arra)o -(y)f(of)g(matc)o(hes.)34 b(The)20 b(\014rst)g(elemen)o(t)h(\()p -Ft(matches[0])p Fu(\))c(is)k(the)195 1366 y(maximal)e(substring)f -(common)g(to)g(all)h(matc)o(hes.)29 b(This)19 b(function)g(can)f -(re-arrange)g(the)195 1420 y(list)h(of)e(matc)o(hes)h(as)f(required,)i -(but)f(eac)o(h)g(elemen)o(t)h(deleted)g(from)e(the)h(arra)o(y)f(m)o -(ust)g(b)q(e)195 1475 y(freed.)1661 1559 y(V)l(ariable)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 1559 V 21 w(directory)p -639 1559 V 21 w(completion)p 934 1559 V 21 w(ho)r(ok)195 -1613 y Fu(This)13 b(function,)h(if)g(de\014ned,)g(is)f(allo)o(w)o(ed)h -(to)e(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)g(\014lenames)195 -1668 y(Readline)k(completes.)j(It)15 b(is)g(called)h(with)f(the)g -(address)g(of)f(a)g(string)h(\(the)f(curren)o(t)h(direc-)195 -1723 y(tory)f(name\))g(as)h(an)f(argumen)o(t.)19 b(It)c(could)h(b)q(e)f -(used)h(to)e(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)195 -1778 y(v)m(ariables)j(in)f(pathnames.)1661 1861 y(V)l(ariable)-1749 -b Fi(VFunction)20 b(*)g Fh(rl)p 417 1861 V 21 w(completion)p -712 1861 V 21 w(displa)n(y)p 906 1861 V 22 w(matc)n(hes)p -1131 1861 V 20 w(ho)r(ok)195 1916 y Fu(If)g(non-zero,)g(then)f(this)h -(is)g(the)f(address)h(of)f(a)g(function)h(to)f(call)h(when)g -(completing)g(a)195 1971 y(w)o(ord)h(w)o(ould)h(normally)h(displa)o(y)g -(the)f(list)h(of)e(p)q(ossible)j(matc)o(hes.)39 b(This)23 -b(function)f(is)195 2026 y(called)d(in)f(lieu)h(of)e(Readline)j(displa) -o(ying)f(the)e(list.)27 b(It)18 b(tak)o(es)e(three)i(argumen)o(ts:)23 -b(\()p Ft(char)195 2081 y(**)p Fm(matc)o(hes)p Fu(,)g -Ft(int)e Fm(n)o(um)p 623 2081 14 2 v 17 w(matc)o(hes)p -Fu(,)h Ft(int)g Fm(max)p 1015 2081 V 16 w(length)p Fu(\))g(where)g -Fm(matc)o(hes)i Fu(is)e(the)g(arra)o(y)195 2135 y(of)17 -b(matc)o(hing)h(strings,)f Fm(n)o(um)p 702 2135 V 17 -w(matc)o(hes)h Fu(is)g(the)g(n)o(um)o(b)q(er)g(of)f(strings)g(in)h -(that)f(arra)o(y)l(,)g(and)195 2190 y Fm(max)p 283 2190 -V 16 w(length)f Fu(is)h(the)e(length)i(of)e(the)h(longest)g(string)f -(in)i(that)e(arra)o(y)l(.)20 b(Readline)e(pro)o(vides)195 -2245 y(a)d(con)o(v)o(enience)i(function,)g Ft(rl_display_match_list)p -Fu(,)12 b(that)j(tak)o(es)g(care)g(of)h(doing)g(the)195 -2300 y(displa)o(y)k(to)f(Readline's)i(output)f(stream.)31 -b(That)19 b(function)h(ma)o(y)f(b)q(e)h(called)h(from)e(this)195 -2355 y(ho)q(ok.)75 2458 y Fl(2.6.4)30 b(A)21 b(Short)f(Completion)g -(Example)137 2552 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)i(library)l(.)19 -b(It)11 b(is)f(called)75 2606 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 -2661 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: 38 40 -38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)195 -183 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 235 y(GNU)g(Readline)g -(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users) -267 287 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195 -391 y(#include)f(<stdio.h>)195 443 y(#include)g(<sys/types.h>)195 -495 y(#include)g(<sys/file.h>)195 546 y(#include)g(<sys/stat.h>)195 -598 y(#include)g(<sys/errno.h>)195 702 y(#include)g -(<readline/readline.h>)195 754 y(#include)g(<readline/history.h>)195 -858 y(extern)g(char)g(*getwd)g(\(\);)195 910 y(extern)g(char)g -(*xmalloc)g(\(\);)195 1013 y(/*)h(The)f(names)g(of)h(functions)e(that)i -(actually)f(do)g(the)h(manipulation.)e(*/)195 1065 y(int)h(com_list)g -(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i(com_stat)f(\(\),)g -(com_pwd)g(\(\);)195 1117 y(int)g(com_delete)g(\(\),)g(com_help)g -(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)195 1221 y(/*)h(A)f -(structure)g(which)g(contains)g(information)f(on)i(the)f(commands)g -(this)g(program)267 1273 y(can)g(understand.)f(*/)195 -1377 y(typedef)h(struct)g({)243 1429 y(char)g(*name;)g(/*)h(User)f -(printable)g(name)g(of)h(the)f(function.)g(*/)243 1480 -y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.) -h(*/)243 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h -(function.)46 b(*/)195 1584 y(})24 b(COMMAND;)195 1688 -y(COMMAND)f(commands[])f(=)i({)243 1740 y({)f("cd",)h(com_cd,)f -("Change)f(to)i(directory)f(DIR")g(},)243 1792 y({)g("delete",)g -(com_delete,)f("Delete)h(FILE")h(},)243 1844 y({)f("help",)g(com_help,) -g("Display)g(this)g(text")g(},)243 1896 y({)g("?",)h(com_help,)e -("Synonym)h(for)h(`help'")f(},)243 1947 y({)g("list",)g(com_list,)g -("List)g(files)g(in)h(DIR")f(},)243 1999 y({)g("ls",)h(com_list,)e -("Synonym)h(for)g(`list'")g(},)243 2051 y({)g("pwd",)g(com_pwd,)g -("Print)g(the)h(current)f(working)g(directory")f(},)243 -2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243 -2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g -(},)243 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g -(on)h(FILE")f(},)243 2259 y({)g("view",)g(com_view,)g("View)g(the)h -(contents)e(of)i(FILE")f(},)243 2311 y({)g(\(char)h(*\)NULL,)f -(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 2363 -y(};)195 2466 y(/*)h(Forward)e(declarations.)h(*/)195 -2518 y(char)g(*stripwhite)g(\(\);)195 2570 y(COMMAND)g(*find_command)f -(\(\);)p eop -%%Page: 39 41 -39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(39)195 183 y Ft(/*)24 b(The)f(name)g(of)h(this)f -(program,)g(as)h(taken)f(from)g(argv[0].)g(*/)195 235 -y(char)g(*progname;)195 339 y(/*)h(When)f(non-zero,)g(this)g(global)g -(means)g(the)h(user)f(is)g(done)h(using)f(this)g(program.)g(*/)p -1985 349 21 42 v 195 391 a(int)g(done;)195 495 y(char)g(*)195 -546 y(dupstr)g(\(s\))314 598 y(int)h(s;)195 650 y({)243 -702 y(char)f(*r;)243 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h -(1\);)243 858 y(strcpy)f(\(r,)g(s\);)243 910 y(return)g(\(r\);)195 -962 y(})195 1065 y(main)g(\(argc,)g(argv\))314 1117 y(int)h(argc;)314 -1169 y(char)g(**argv;)195 1221 y({)243 1273 y(char)f(*line,)g(*s;)243 -1377 y(progname)f(=)i(argv[0];)243 1480 y(initialize_readline)d(\(\);)i -(/*)h(Bind)f(our)h(completer.)e(*/)243 1584 y(/*)h(Loop)h(reading)f -(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)243 -1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290 1688 y({)338 -1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338 1844 -y(if)i(\(!line\))386 1896 y(break;)338 1999 y(/*)g(Remove)f(leading)g -(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410 -2051 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h -(the)f(history)g(list)410 2103 y(and)g(execute)g(it.)h(*/)338 -2155 y(s)g(=)g(stripwhite)e(\(line\);)338 2259 y(if)i(\(*s\))386 -2311 y({)434 2363 y(add_history)e(\(s\);)434 2414 y(execute_line)g -(\(s\);)386 2466 y(})338 2570 y(free)h(\(line\);)290 -2622 y(})p eop -%%Page: 40 42 -40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(exit)23 b(\(0\);)195 235 y(})195 339 y(/*)h(Execute)e(a)i -(command)f(line.)g(*/)195 391 y(int)195 443 y(execute_line)f(\(line\)) -314 495 y(char)i(*line;)195 546 y({)243 598 y(register)e(int)i(i;)243 -650 y(COMMAND)f(*command;)243 702 y(char)g(*word;)243 -806 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 858 -y(i)g(=)h(0;)243 910 y(while)f(\(line[i])g(&&)g(whitespace)g -(\(line[i]\)\))290 962 y(i++;)243 1013 y(word)g(=)h(line)f(+)h(i;)243 -1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290 -1169 y(i++;)243 1273 y(if)g(\(line[i]\))290 1325 y(line[i++])g(=)h -('\\0';)243 1429 y(command)f(=)g(find_command)g(\(word\);)243 -1532 y(if)g(\(!command\))290 1584 y({)338 1636 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338 -1688 y(return)g(\(-1\);)290 1740 y(})243 1844 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)243 1896 y(while)f(\(whitespace)f -(\(line[i]\)\))290 1947 y(i++;)243 2051 y(word)h(=)h(line)f(+)h(i;)243 -2155 y(/*)f(Call)h(the)f(function.)g(*/)243 2207 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)195 2259 y(})195 -2363 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g -(and)h(return)f(a)g(pointer)g(to)h(that)267 2414 y(command.)46 -b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f -(name.)g(*/)195 2466 y(COMMAND)g(*)195 2518 y(find_command)f(\(name\)) -314 2570 y(char)i(*name;)195 2622 y({)p eop -%%Page: 41 43 -41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(41)243 183 y Ft(register)22 b(int)i(i;)243 -287 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -339 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338 -391 y(return)g(\(&commands[i]\);)243 495 y(return)g(\(\(COMMAND)f -(*\)NULL\);)195 546 y(})195 650 y(/*)i(Strip)f(whitespace)f(from)i(the) -f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267 -702 y(into)g(STRING.)g(*/)195 754 y(char)g(*)195 806 -y(stripwhite)f(\(string\))314 858 y(char)i(*string;)195 -910 y({)243 962 y(register)e(char)i(*s,)f(*t;)243 1065 -y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290 -1117 y(;)243 1221 y(if)g(\(*s)h(==)f(0\))290 1273 y(return)g(\(s\);)243 -1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1429 -y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290 -1480 y(t--;)243 1532 y(*++t)h(=)h('\\0';)243 1636 y(return)f(s;)195 -1688 y(})195 1792 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 1844 y(/*)1575 -b(*/)195 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)195 1947 y(/*)1575 b(*/)195 1999 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)195 2103 y(char)i(*command_generator)f(\(\);)195 -2155 y(char)h(**fileman_completion)e(\(\);)195 2259 y(/*)j(Tell)f(the)g -(GNU)h(Readline)f(library)f(how)i(to)g(complete.)46 b(We)24 -b(want)f(to)h(try)f(to)h(complete)p 2034 2269 21 42 v -267 2311 a(on)f(command)g(names)g(if)h(this)f(is)h(the)f(first)g(word)h -(in)f(the)h(line,)f(or)h(on)f(filenames)p 1962 2317 21 -35 v 267 2363 a(if)g(not.)g(*/)195 2414 y(initialize_readline)e(\(\)) -195 2466 y({)243 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h -(~/.inputrc)e(file.)h(*/)243 2570 y(rl_readline_name)e(=)j("FileMan";)p -eop -%%Page: 42 44 -42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(/*)23 b(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack) -f(first.)g(*/)243 235 y(rl_attempted_completion_)o(functio)o(n)e(=)j -(\(CPPFunction)e(*\)fileman_completion;)195 287 y(})195 -391 y(/*)i(Attempt)e(to)i(complete)f(on)g(the)h(contents)f(of)g(TEXT.) -47 b(START)23 b(and)h(END)f(bound)h(the)267 443 y(region)f(of)g -(rl_line_buffer)f(that)h(contains)g(the)h(word)f(to)h(complete.)46 -b(TEXT)23 b(is)267 495 y(the)g(word)g(to)h(complete.)46 -b(We)24 b(can)f(use)h(the)f(entire)g(contents)g(of)h(rl_line_buffer)p -1963 505 21 38 v 267 546 a(in)f(case)g(we)h(want)f(to)h(do)g(some)f -(simple)g(parsing.)47 b(Return)23 b(the)g(array)g(of)h(matches,)p -1986 557 V 267 598 a(or)f(NULL)g(if)h(there)f(aren't)g(any.)h(*/)195 -650 y(char)f(**)195 702 y(fileman_completion)e(\(text,)i(start,)g -(end\))314 754 y(char)h(*text;)314 806 y(int)g(start,)f(end;)195 -858 y({)243 910 y(char)g(**matches;)243 1013 y(matches)g(=)g(\(char)h -(**\)NULL;)243 1117 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g -(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314 -1169 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h -(a)f(file)h(in)f(the)h(current)314 1221 y(directory.)f(*/)243 -1273 y(if)g(\(start)g(==)h(0\))290 1325 y(matches)f(=)h -(completion_matches)d(\(text,)j(command_generator\);)243 -1429 y(return)f(\(matches\);)195 1480 y(})195 1584 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)h(know)f(whether)p 1938 1594 21 42 v 267 -1636 a(to)g(start)g(from)h(scratch;)e(without)h(any)h(state)f(\(i.e.)g -(STATE)g(==)h(0\),)f(then)h(we)267 1688 y(start)f(at)g(the)h(top)f(of)h -(the)f(list.)g(*/)195 1740 y(char)g(*)195 1792 y(command_generator)f -(\(text,)h(state\))314 1844 y(char)h(*text;)314 1896 -y(int)g(state;)195 1947 y({)243 1999 y(static)f(int)g(list_index,)g -(len;)243 2051 y(char)g(*name;)243 2155 y(/*)g(If)h(this)f(is)h(a)g -(new)f(word)g(to)h(complete,)f(initialize)f(now.)47 b(This)24 -b(includes)314 2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f -(efficiency,)g(and)g(initializing)f(the)i(index)p 1938 -2217 21 38 v 314 2259 a(variable)f(to)h(0.)f(*/)243 2311 -y(if)g(\(!state\))290 2363 y({)338 2414 y(list_index)g(=)g(0;)338 -2466 y(len)h(=)f(strlen)g(\(text\);)290 2518 y(})243 -2622 y(/*)g(Return)g(the)h(next)f(name)g(which)h(partially)e(matches)h -(from)g(the)h(command)f(list.)g(*/)p 1985 2632 21 42 -v eop -%%Page: 43 45 -43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(43)243 183 y Ft(while)23 b(\(name)g(=)h -(commands[list_index].name)o(\))290 235 y({)338 287 y(list_index++;)338 -391 y(if)g(\(strncmp)f(\(name,)g(text,)g(len\))g(==)h(0\))386 -443 y(return)f(\(dupstr\(name\)\);)290 495 y(})243 598 -y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f(NULL.)g(*/)243 -650 y(return)g(\(\(char)g(*\)NULL\);)195 702 y(})195 -806 y(/*)h(***********************)o(*******)o(********)o(*******)o -(*******)o(********)o(****)d(*/)195 858 y(/*)1575 b(*/)195 -910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 962 -y(/*)1575 b(*/)195 1013 y(/*)24 b(***********************)o(*******)o -(********)o(*******)o(*******)o(********)o(****)d(*/)195 -1117 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47 -b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267 -1169 y(commands.)f(*/)195 1221 y(static)h(char)g(syscom[1024];)195 -1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195 -1377 y(com_list)g(\(arg\))314 1429 y(char)h(*arg;)195 -1480 y({)243 1532 y(if)f(\(!arg\))290 1584 y(arg)h(=)g("";)243 -1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243 -1740 y(return)g(\(system)g(\(syscom\)\);)195 1792 y(})195 -1896 y(com_view)g(\(arg\))314 1947 y(char)h(*arg;)195 -1999 y({)243 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290 -2103 y(return)g(1;)243 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)243 2259 y(return)g(\(system)g(\(syscom\)\);)195 -2311 y(})195 2414 y(com_rename)f(\(arg\))314 2466 y(char)i(*arg;)195 -2518 y({)243 2570 y(too_dangerous)e(\("rename"\);)243 -2622 y(return)h(\(1\);)p eop -%%Page: 44 46 -44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Ft(})195 287 y(com_stat)23 b(\(arg\))314 339 y(char)h(*arg;)195 -391 y({)243 443 y(struct)f(stat)g(finfo;)243 546 y(if)g -(\(!valid_argument)f(\("stat",)h(arg\)\))290 598 y(return)g(\(1\);)243 -702 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290 -754 y({)338 806 y(perror)g(\(arg\);)338 858 y(return)g(\(1\);)290 -910 y(})243 1013 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g -(arg\);)243 1117 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g -(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434 -1169 y(finfo.st_nlink,)434 1221 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("") -h(:)g("s",)434 1273 y(finfo.st_size,)434 1325 y(\(finfo.st_size)e(==)h -(1\))h(?)f("")h(:)g("s"\);)243 1377 y(printf)f(\("Inode)g(Last)g -(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243 -1429 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_atime\)\);)243 1480 y(printf)g(\(")95 b(Last)23 -b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243 -1532 y(return)g(\(0\);)195 1584 y(})195 1688 y(com_delete)f(\(arg\))314 -1740 y(char)i(*arg;)195 1792 y({)243 1844 y(too_dangerous)e -(\("delete"\);)243 1896 y(return)h(\(1\);)195 1947 y(})195 -2051 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f -(the)h(commands)f(if)g(ARG)h(is)267 2103 y(not)f(present.)g(*/)195 -2155 y(com_help)g(\(arg\))314 2207 y(char)h(*arg;)195 -2259 y({)243 2311 y(register)e(int)i(i;)243 2363 y(int)f(printed)g(=)h -(0;)243 2466 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -2518 y({)338 2570 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g -(commands[i].name\))f(==)i(0\)\))386 2622 y({)p eop -%%Page: 45 47 -45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(45)434 183 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e -(commands[i].name,)h(commands[i].doc\);)434 235 y(printed++;)386 -287 y(})290 339 y(})243 443 y(if)h(\(!printed\))290 495 -y({)338 546 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 -b(Possibilties)22 b(are:\\n",)h(arg\);)338 650 y(for)h(\(i)f(=)h(0;)g -(commands[i].name;)d(i++\))386 702 y({)434 754 y(/*)i(Print)g(in)h(six) -f(columns.)g(*/)434 806 y(if)g(\(printed)g(==)h(6\))481 -858 y({)529 910 y(printed)f(=)h(0;)529 962 y(printf)f(\("\\n"\);)481 -1013 y(})434 1117 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434 -1169 y(printed++;)386 1221 y(})338 1325 y(if)i(\(printed\))386 -1377 y(printf)f(\("\\n"\);)290 1429 y(})243 1480 y(return)g(\(0\);)195 -1532 y(})195 1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195 -1688 y(com_cd)f(\(arg\))314 1740 y(char)h(*arg;)195 1792 -y({)243 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290 -1896 y({)338 1947 y(perror)g(\(arg\);)338 1999 y(return)g(1;)290 -2051 y(})243 2155 y(com_pwd)g(\(""\);)243 2207 y(return)g(\(0\);)195 -2259 y(})195 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)195 2414 y(com_pwd)g(\(ignore\))314 -2466 y(char)h(*ignore;)195 2518 y({)243 2570 y(char)f(dir[1024],)g(*s;) -p eop -%%Page: 46 48 -46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(s)23 b(=)h(getwd)f(\(dir\);)243 235 y(if)g(\(s)h(==)f(0\))290 -287 y({)338 339 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g -(dir\);)338 391 y(return)g(1;)290 443 y(})243 546 y(printf)g -(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243 -598 y(return)g(0;)195 650 y(})195 754 y(/*)h(The)f(user)g(wishes)g(to)h -(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)h(non-zero.)e -(*/)p 1961 764 21 42 v 195 806 a(com_quit)h(\(arg\))314 -858 y(char)h(*arg;)195 910 y({)243 962 y(done)f(=)h(1;)243 -1013 y(return)f(\(0\);)195 1065 y(})195 1169 y(/*)h(Function)e(which)i -(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195 -1221 y(too_dangerous)f(\(caller\))314 1273 y(char)i(*caller;)195 -1325 y({)243 1377 y(fprintf)f(\(stderr,)457 1429 y("\045s:)h(Too)f -(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23 -b(it)h(yourself.\\n",)p 1987 1439 V 457 1480 a(caller\);)195 -1532 y(})195 1636 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid) -f(argument)g(for)g(CALLER,)g(else)g(print)267 1688 y(an)g(error)g -(message)g(and)h(return)f(zero.)g(*/)195 1740 y(int)195 -1792 y(valid_argument)f(\(caller,)h(arg\))314 1844 y(char)h(*caller,)e -(*arg;)195 1896 y({)243 1947 y(if)h(\(!arg)g(||)h(!*arg\))290 -1999 y({)338 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g -(required.\\n",)f(caller\);)338 2103 y(return)h(\(0\);)290 -2155 y(})243 2259 y(return)g(\(1\);)195 2311 y(})p eop -%%Page: 47 49 -47 48 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(47)75 -183 y Fq(Concept)27 b(Index)75 359 y Fs(C)75 417 y Ff(command)14 -b(editing)9 b Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(1)75 517 y Fs(E)75 575 y Ff(editing)15 b(command)f(lines)8 -b Fe(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(1)75 675 -y Fs(I)75 733 y Ff(initiali)q(zati)q(on)c(\014le,)e(readline)8 -b Fe(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(4)75 782 y(in)o(teraction,)15 -b(readline)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(1)75 882 y Fs(K)75 940 y Ff(kill)15 b(ring)e Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Ff(3)1012 359 y(killin)q(g)16 b(text)11 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)24 b Ff(2)1012 495 y Fs(N)1012 553 y Ff(notation,)15 -b(readline)5 b Fe(.)k(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -19 b Ff(1)1012 688 y Fs(R)1012 747 y Ff(readline,)c(function)6 -b Fe(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(19)1012 882 y Fs(Y)1012 940 y Ff(y)o(anking)c(text)6 -b Fe(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)19 b Ff(2)p eop -%%Page: 48 50 -48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: 49 51 -49 50 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(49)75 183 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 345 y Fs(A)75 403 y Fd(abort)11 b(\(C-g\))6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)18 b Ff(17)75 453 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\)) -s Fe(.)s(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(12)75 503 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(29)75 -652 y Fs(B)75 711 y Fd(backward-c)o(ha)o(r)10 b(\(C-b\))t -Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75 760 -y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))f -Fe(.)s(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(14)75 810 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10 -b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(14)75 860 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10 -b(\(M-DEL\))t Fe(.)s(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)16 b Ff(15)75 910 y Fd(backward-w)o(or)o(d)10 -b(\(M-b\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75 -960 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 b(\(M-<\))t -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)16 b Ff(13)75 1009 y Fd(beginning-)o(of)o(-li)o(ne)9 -b(\(C-a\))e Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12)75 1059 y(b)q(ell-st)o(yle)13 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)23 b Ff(4)75 1209 y Fs(C)75 1267 -y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))6 -b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -18 b Ff(16)75 1317 y Fd(capitalize)o(-w)o(ord)9 b(\(M-c\))f -Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(14)75 1366 y Fd(character-)o(se)o(arc)o -(h)10 b(\(C-]\))f Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)75 1416 -y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))s -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(17)75 -1466 y Fd(clear-scre)o(en)9 b(\(C-l\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Ff(12)75 1516 y(commen)o(t-b)q(egin)9 b -Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 -b Ff(4)75 1566 y Fd(complete)10 b(\(TAB\))e Fe(.)e(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(16)75 1616 y(completion-query-i)q -(tems)9 b Fe(.)f(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(5)75 -1665 y Fd(completion)p 276 1665 12 2 v 10 w(matches)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(34)75 -1715 y(con)o(v)o(ert-meta)11 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)75 1765 y Fd(copy-backw)o(ar) -o(d-w)o(or)o(d)10 b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(15)75 1815 y Fd(copy-forwa)o(rd)o(-wo)o(rd)9 b(\(\))i -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)75 1865 y Fd(copy-regio)o(n-)o -(as-)o(ki)o(ll)9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(15)75 -2014 y Fs(D)75 2072 y Fd(delete-cha)o(r)10 b(\(C-d\))c -Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(13)75 -2122 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))g -Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)21 b Ff(16)75 2172 y Fd(delete-hor)o(iz)o(ont)o(al)o -(-sp)o(ace)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)16 b Ff(15)75 2222 y Fd(digit-argu)o(me)o(nt)9 -b(\(M-0,)i(M-1,)h(...)f(M--\))t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)16 b Ff(15)75 2271 y Fd(digit)p 177 2271 V 12 w(p)10 -b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)23 b Ff(29)75 2321 y Fd(digit)p 177 -2321 V 12 w(value)5 b Fe(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(29)75 2371 y Fd(ding)10 -b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(29)75 2421 y(disable-comple)q -(tion)7 b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(5)75 2471 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9 -b(\(M-a,)i(M-b,)g(M-)p Fe(x)p Fd(,)h Fc(:)6 b(:)g(:)p -Fd(\))j Fe(.)d(.)23 b Ff(17)75 2521 y Fd(downcase-w)o(or)o(d)10 -b(\(M-l\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(14)75 -2570 y Fd(dump-funct)o(io)o(ns)9 b(\(\))d Fe(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)19 b Ff(17)75 2620 y Fd(dump-macro)o(s)10 -b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(18)75 2670 y Fd(dump-varia)o(bl)o(es)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(18)1012 -345 y Fs(E)1012 403 y Ff(editing-mo)q(de)13 b Fe(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Ff(5)1012 453 y(enable-k)o(eypad)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(5)1012 -503 y Fd(end-kbd-mac)o(ro)9 b(\(C-x)i(\)\))5 b Fe(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)18 b Ff(16)1012 553 y Fd(end-of-hist)o(or)o(y)10 -b(\(M->\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012 -603 y Fd(end-of-line)9 b(\(C-e\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)20 b Ff(12)1012 652 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o -(rk)9 b(\(C-x)j(C-x\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(17)1012 702 y(expand-tilde)8 b Fe(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(5)1012 -811 y Fs(F)1012 869 y Fd(filename)p 1174 869 V 11 w(completion)p -1385 869 V 11 w(function)s Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(35)1012 919 y Fd(forward-bac)o(kw)o(ard) -o(-d)o(ele)o(te)o(-ch)o(ar)9 b(\(\))d Fe(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)19 b Ff(14)1012 969 y Fd(forward-cha)o(r)10 -b(\(C-f\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 -b Ff(12)1012 1019 y Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 -b(\(C-s\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)23 b Ff(13)1012 1069 y Fd(forward-wor)o(d)10 b(\(M-f\))5 -b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(12)1012 -1118 y Fd(free)p 1094 1118 V 13 w(undo)p 1187 1118 V -13 w(list)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)17 b Ff(27)1012 1228 y Fs(H)1012 1286 y Fd(history-sea)o(rc)o(h-b)o -(ac)o(kwa)o(rd)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(13)1012 1336 y Fd(history-sea)o(rc) -o(h-f)o(or)o(war)o(d)10 b(\(\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(13)1012 -1385 y(horizon)o(tal-scrol)q(l-mo)r(de)c Fe(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)24 b Ff(5)1012 1495 y Fs(I)1012 1553 y Ff(input-meta)12 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)23 b Ff(5)1012 1602 y Fd(insert-comm)o(en)o(t)10 -b(\(M-#\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(17)1012 -1652 y Fd(insert-comp)o(le)o(tio)o(ns)9 b(\(M-*\))d Fe(.)t(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 -b Ff(16)1012 1702 y(isearc)o(h-terminators)13 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(6)1012 -1811 y Fs(K)1012 1869 y Ff(k)o(eymap)t Fe(.)7 b(.)g(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(6)1012 1919 y Fd(kill-line)10 b(\(C-k\))f Fe(.)t(.)d(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(14)1012 1969 y Fd(kill-region)9 -b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(15)1012 2019 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))c -Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(15)1012 -2069 y Fd(kill-word)10 b(\(M-d\))f Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)22 b Ff(15)1012 2178 y Fs(L)1012 2236 -y Fd(lowercase)p 1194 2236 V 11 w(p)5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(29)1012 -2345 y Fs(M)1012 2403 y Ff(mark-mo)q(di\014ed-li)q(nes)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b -Ff(6)1012 2453 y Fd(menu-comple)o(te)9 b(\(\))f Fe(.)d(.)h(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(16)1012 2503 y(meta-\015ag)8 -b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)21 b Ff(5)1012 2612 y Fs(N)1012 2670 -y Fd(next-histor)o(y)10 b(\(C-n\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)18 b Ff(12)p eop -%%Page: 50 52 -50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)75 -183 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\))155 233 y Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(13)75 283 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\))155 333 y Fe(.)d(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)16 b Ff(13)75 382 y Fd(numeric)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(29)75 485 y Fs(O)75 543 y Ff(output-meta)7 b Fe(.)g(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(6)75 646 y Fs(P)75 704 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))t Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)16 b Ff(16)75 754 y Fd(prefix-met)o(a)10 -b(\(ESC\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(17)75 804 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))f -Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 907 y Fs(Q)75 965 y -Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))d Fe(.)e(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(14)75 1068 y Fs(R)75 1126 y Fd(re-read-in)o(it)o(-fi)o(le)9 -b(\(C-x)i(C-r\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)18 b Ff(17)75 1176 y Fd(readline)6 -b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)19 b Ff(19)75 1225 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne) -9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 1275 y Fd(reverse-se)o(ar) -o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))f Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(13)75 1325 y Fd(revert-lin)o(e)10 -b(\(M-r\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(17)75 1375 y Fd(rl)p 117 1375 12 2 v 13 w(add)p -190 1375 V 13 w(defun)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(23)75 1425 y Fd(rl)p 117 -1425 V 13 w(add)p 190 1425 V 13 w(undo)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(27)75 -1474 y Fd(rl)p 117 1474 V 13 w(already)p 270 1474 V 12 -w(prompted)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(22)75 -1524 y Fd(rl)p 117 1524 V 13 w(attempted)p 310 1524 V -11 w(completion)p 520 1524 V 10 w(function)g Fe(.)6 b(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)24 b Ff(35)75 1574 y Fd(rl)p 117 1574 -V 13 w(basic)p 230 1574 V 13 w(quote)p 343 1574 V 12 -w(character)o(s)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 1624 y Fd(rl)p -117 1624 V 13 w(basic)p 230 1624 V 13 w(word)p 323 1624 -V 12 w(break)p 435 1624 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(36)75 1674 y Fd(rl)p -117 1674 V 13 w(begin)p 230 1674 V 13 w(undo)p 323 1674 -V 12 w(group)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(26)75 1724 y Fd(rl)p 117 1724 V 13 w(bind)p 210 -1724 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)20 b Ff(25)75 1773 y Fd(rl)p 117 -1773 V 13 w(bind)p 210 1773 V 13 w(key)p 283 1773 V 13 -w(in)p 336 1773 V 13 w(map)t Fe(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)17 b Ff(25)75 1823 y Fd(rl)p 117 1823 V 13 w(binding)p -270 1823 V 12 w(keymap)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(23)75 1873 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7 -b Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(30)75 1923 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)9 -b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -21 b Ff(30)75 1973 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)6 -b Fe(.)s(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(30)75 2022 y Fd(rl)p -117 2022 V 13 w(catch)p 230 2022 V 13 w(signals)13 b -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b -Ff(32)75 2072 y Fd(rl)p 117 2072 V 13 w(catch)p 230 2072 -V 13 w(sigwinch)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(32)75 2122 y Fd(rl)p 117 2122 V 13 w(char)p 210 -2122 V 13 w(is)p 263 2122 V 13 w(quoted)p 396 2122 V -12 w(p)18 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b -Ff(35)75 2172 y Fd(rl)p 117 2172 V 13 w(cleanup)p 270 -2172 V 12 w(after)p 382 2172 V 12 w(signal)t Fe(.)s(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)16 b Ff(32)75 2222 y Fd(rl)p 117 2222 V 13 -w(clear)p 230 2222 V 13 w(message)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)22 b Ff(28)75 2271 y Fd(rl)p 117 2271 -V 13 w(clear)p 230 2271 V 13 w(signals)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)22 b Ff(33)75 2321 y Fd(rl)p 117 -2321 V 13 w(complete)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(34)75 2371 y Fd(rl)p -117 2371 V 13 w(complete)p 290 2371 V 11 w(internal)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(34)75 2421 y -Fd(rl)p 117 2421 V 13 w(completer)p 310 2421 V 11 w(quote)p -421 2421 V 12 w(characters)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)19 b Ff(36)75 2471 y Fd(rl)p 117 2471 -V 13 w(completer)p 310 2471 V 11 w(word)p 401 2471 V -13 w(break)p 514 2471 V 12 w(character)o(s)13 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 2521 y -Fd(rl)p 117 2521 V 13 w(completion)p 329 2521 V 11 w(append)p -461 2521 V 11 w(character)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(36)75 2570 y Fd(rl)p 117 2570 V 13 -w(completion)p 329 2570 V 11 w(display)p 481 2570 V 11 -w(matches)p 632 2570 V 11 w(hook)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)16 b Ff(37)75 2620 y Fd(rl)p 117 2620 V 13 w(completion)p -329 2620 V 11 w(entry)p 441 2620 V 12 w(function)21 b -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(34,)13 -b(35)75 2670 y Fd(rl)p 117 2670 V 13 w(completion)p 329 -2670 V 11 w(query)p 441 2670 V 12 w(items)h Fe(.)6 b(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(36)1012 183 y Fd(rl)p 1054 183 V 14 w(copy)p 1148 -183 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)17 b Ff(24)1012 233 y Fd(rl)p 1054 233 V 14 -w(copy)p 1148 233 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012 283 y -Fd(rl)p 1054 283 V 14 w(delete)p 1188 283 V 12 w(text)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(28)1012 333 y Fd(rl)p 1054 333 V 14 w(directory)p -1247 333 V 10 w(completion)p 1458 333 V 11 w(hook)i Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(37)1012 382 y Fd(rl)p 1054 382 V 14 w(discard)p -1208 382 V 11 w(keymap)9 b Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(24)1012 432 y Fd(rl)p 1054 432 V 14 w(display)p -1208 432 V 11 w(match)p 1319 432 V 12 w(list)6 b Fe(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)19 b Ff(29)1012 482 y Fd(rl)p 1054 482 V 14 w(do)p -1108 482 V 13 w(undo)9 b Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(27)1012 532 y Fd(rl)p -1054 532 V 14 w(done)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)1012 -582 y Fd(rl)p 1054 582 V 14 w(end)f Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 -b Ff(21)1012 632 y Fd(rl)p 1054 632 V 14 w(end)p 1128 -632 V 13 w(undo)p 1221 632 V 12 w(group)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)25 b Ff(26)1012 681 y Fd(rl)p 1054 681 -V 14 w(erase)p 1168 681 V 12 w(empty)p 1280 681 V 12 -w(line)d Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)24 b Ff(22)1012 -731 y Fd(rl)p 1054 731 V 14 w(event)p 1168 731 V 12 w(hook)18 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(23)1012 781 y Fd(rl)p 1054 781 V 14 w(executing)p -1247 781 V 10 w(keymap)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(23)1012 831 y Fd(rl)p 1054 831 V 14 w(extend)p 1188 -831 V 12 w(line)p 1280 831 V 12 w(buffer)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Ff(28)1012 881 y Fd(rl)p 1054 881 V 14 w(filename)p -1228 881 V 11 w(completio)o(n)p 1438 881 V 11 w(desired)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(37)1012 930 y Fd(rl)p 1054 930 V 14 w(filename)p -1228 930 V 11 w(dequoting)p 1418 930 V 10 w(function)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(35)1012 980 y Fd(rl)p 1054 980 V 14 w(filename)p -1228 980 V 11 w(quote)p 1339 980 V 12 w(character)o(s)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(36)1012 1030 y Fd(rl)p 1054 1030 V 14 w(filename)p -1228 1030 V 11 w(quoting)p 1379 1030 V 11 w(desired)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(37)1012 1080 y Fd(rl)p 1054 1080 V 14 w(filename)p -1228 1080 V 11 w(quoting)p 1379 1080 V 11 w(function)18 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(35)1012 1130 y Fd(rl)p 1054 1130 V 14 w(forced)p -1188 1130 V 12 w(update)p 1320 1130 V 11 w(display)9 -b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)24 b Ff(27)1012 1180 y Fd(rl)p 1054 1180 -V 14 w(free)p 1148 1180 V 12 w(line)p 1240 1180 V 13 -w(state)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(32)1012 1229 y Fd(rl)p 1054 1229 V 14 w(function)p -1228 1229 V 11 w(dumper)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(26)1012 1279 y Fd(rl)p 1054 1279 V 14 w(function)p -1228 1279 V 11 w(of)p 1279 1279 V 13 w(keyseq)6 b Fe(.)t(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)19 b Ff(25)1012 1329 y Fd(rl)p 1054 1329 V 14 -w(funmap)p 1188 1329 V 12 w(names)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 1379 y Fd(rl)p 1054 -1379 V 14 w(generic)p 1208 1379 V 11 w(bind)10 b Fe(.)c(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(25)1012 1429 y Fd(rl)p -1054 1429 V 14 w(get)p 1128 1429 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(24)1012 -1478 y Fd(rl)p 1054 1478 V 14 w(get)p 1128 1478 V 13 -w(keymap)p 1261 1478 V 11 w(by)p 1312 1478 V 14 w(name)9 -b Fe(.)t(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(24)1012 1528 y Fd(rl)p -1054 1528 V 14 w(get)p 1128 1528 V 13 w(keymap)p 1261 -1528 V 11 w(name)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(24)1012 1578 y Fd(rl)p 1054 1578 V 14 w(getc)8 b -Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)23 b Ff(28)1012 1628 y Fd(rl)p 1054 1628 -V 14 w(getc)p 1148 1628 V 12 w(function)13 b Fe(.)7 b(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(23)1012 1678 y Fd(rl)p -1054 1678 V 14 w(ignore)p 1188 1678 V 12 w(completi)o(on)p -1399 1678 V 11 w(duplicate)o(s)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)17 b Ff(36)1012 1727 y Fd(rl)p 1054 1727 -V 14 w(ignore)p 1188 1727 V 12 w(some)p 1280 1727 V 12 -w(completion)o(s)p 1511 1727 V 11 w(function)j Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(37)1012 1777 y Fd(rl)p -1054 1777 V 14 w(inhibit)p 1208 1777 V 11 w(completion)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(37)1012 1827 y Fd(rl)p -1054 1827 V 14 w(initializ)o(e)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(28)1012 1877 y Fd(rl)p -1054 1877 V 14 w(insert)p 1188 1877 V 12 w(completi)o(ons)r -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(34)1012 1927 y Fd(rl)p -1054 1927 V 14 w(insert)p 1188 1927 V 12 w(text)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(28)1012 1977 y Fd(rl)p 1054 1977 V 14 w(instream)g -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 -b Ff(22)1012 2026 y Fd(rl)p 1054 2026 V 14 w(invoking)p -1228 2026 V 11 w(keyseqs)6 b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(26)1012 2076 y Fd(rl)p 1054 2076 V 14 w(invoking)p -1228 2076 V 11 w(keyseqs)p 1379 2076 V 11 w(in)p 1430 -2076 V 14 w(map)9 b Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 2126 y Fd(rl)p -1054 2126 V 14 w(kill)p 1148 2126 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012 -2176 y Fd(rl)p 1054 2176 V 14 w(library)p 1208 2176 V -11 w(version)g Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(22)1012 2226 y Fd(rl)p 1054 2226 V 14 w(line)p 1148 -2226 V 12 w(buffer)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)19 b Ff(21)1012 2275 y Fd(rl)p 1054 2275 V -14 w(list)p 1148 2275 V 12 w(funmap)p 1280 2275 V 12 -w(names)7 b Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(26)1012 -2325 y Fd(rl)p 1054 2325 V 14 w(make)p 1148 2325 V 12 -w(bare)p 1240 2325 V 13 w(keymap)9 b Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(24)1012 2375 y Fd(rl)p 1054 2375 V 14 w(make)p -1148 2375 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)17 b Ff(24)1012 2425 y Fd(rl)p 1054 2425 -V 14 w(mark)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(21)1012 2475 -y Fd(rl)p 1054 2475 V 14 w(message)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(27)1012 -2524 y Fd(rl)p 1054 2524 V 14 w(modifying)s Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(27)1012 2574 y Fd(rl)p 1054 2574 V 14 w(named)p -1168 2574 V 12 w(function)8 b Fe(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)22 b Ff(25)1012 2624 y Fd(rl)p 1054 2624 V 14 w(on)p -1108 2624 V 13 w(new)p 1181 2624 V 13 w(line)7 b Fe(.)t(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)p eop -%%Page: 51 53 -51 52 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(51)75 183 y Fd(rl)p 117 183 12 2 v 13 w(on)p 170 183 -V 14 w(new)p 244 183 V 13 w(line)p 337 183 V 12 w(with)p -429 183 V 13 w(prompt)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(27)75 233 y Fd(rl)p -117 233 V 13 w(outstream)d Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)18 b Ff(22)75 283 y Fd(rl)p 117 283 -V 13 w(parse)p 230 283 V 13 w(and)p 303 283 V 13 w(bind)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(25)75 -333 y Fd(rl)p 117 333 V 13 w(pending)p 270 333 V 12 w(input)14 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(22)75 382 y Fd(rl)p 117 382 V 13 w(point)22 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)24 b Ff(21)75 432 y Fd(rl)p 117 432 V 13 w(possible)p -290 432 V 11 w(completions)6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(34)75 -482 y Fd(rl)p 117 482 V 13 w(pre)p 190 482 V 13 w(input)p -303 482 V 13 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -18 b Ff(22)75 532 y Fd(rl)p 117 532 V 13 w(prompt)i Fe(.)7 -b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -22 b Ff(22)75 582 y Fd(rl)p 117 582 V 13 w(read)p 210 -582 V 13 w(init)p 303 582 V 13 w(file)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)24 b Ff(25)75 632 y Fd(rl)p 117 632 V -13 w(read)p 210 632 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(28)75 681 -y Fd(rl)p 117 681 V 13 w(readline)p 290 681 V 11 w(name)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(22)75 731 y Fd(rl)p 117 731 V 13 w(redisplay)t Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 -b Ff(27)75 781 y Fd(rl)p 117 781 V 13 w(redisplay)p 310 -781 V 11 w(function)f Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75 -831 y Fd(rl)p 117 831 V 13 w(reset)p 230 831 V 13 w(after)p -343 831 V 12 w(signal)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(32)75 881 y Fd(rl)p 117 881 V 13 w(reset)p 230 881 -V 13 w(line)p 323 881 V 12 w(state)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)21 b Ff(27)75 930 y Fd(rl)p 117 930 V 13 w(reset)p -230 930 V 13 w(terminal)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -21 b Ff(29)75 980 y Fd(rl)p 117 980 V 13 w(resize)p 250 -980 V 12 w(terminal)7 b Fe(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(33)75 1030 y Fd(rl)p 117 1030 V 13 w(restore)p 270 -1030 V 12 w(prompt)9 b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(28)75 1080 y Fd(rl)p 117 1080 V 13 w(save)p 210 -1080 V 13 w(prompt)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)17 b Ff(28)75 1130 y Fd(rl)p 117 1130 V 13 -w(set)p 190 1130 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(24)75 1180 y Fd(rl)p -117 1180 V 13 w(set)p 190 1180 V 13 w(signals)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(33)75 1229 y Fd(rl)p 117 1229 V 13 w(special)p 270 -1229 V 12 w(prefixes)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(36)75 1279 y Fd(rl)p 117 1279 V 13 w(startup)p 270 -1279 V 12 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)17 b Ff(22)75 1329 y Fd(rl)p 117 1329 V 13 w(stuff)p -230 1329 V 13 w(char)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)18 b Ff(28)75 1379 y Fd(rl)p 117 1379 -V 13 w(terminal)p 290 1379 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)16 b Ff(22)75 1429 y Fd(rl)p 117 -1429 V 13 w(unbind)p 250 1429 V 12 w(command)p 402 1429 -V 12 w(in)p 454 1429 V 13 w(map)5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(25)75 1478 y Fd(rl)p 117 1478 V 13 w(unbind)p 250 -1478 V 12 w(function)p 422 1478 V 11 w(in)p 473 1478 -V 14 w(map)t Fe(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(25)75 1528 y Fd(rl)p -117 1528 V 13 w(unbind)p 250 1528 V 12 w(key)5 b Fe(.)g(.)h(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(25)75 -1578 y Fd(rl)p 117 1578 V 13 w(unbind)p 250 1578 V 12 -w(key)p 322 1578 V 13 w(in)p 375 1578 V 13 w(map)10 b -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(25)1012 183 y -Fs(S)1012 241 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...\))t -Fe(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(14)1012 291 y Fd(set-mark)10 b(\(C-@\))e Fe(.)f(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(17)1012 341 y(sho)o(w-all-if-am) -o(bigu)q(ous)8 b Fe(.)g(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(6)1012 391 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))e -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)24 b Ff(16)1012 490 y Fs(T)1012 549 y -Fd(tab-insert)9 b(\(M-TAB\))c Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 -b Ff(14)1012 598 y Fd(tilde-expan)o(d)10 b(\(M-~\))5 -b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(17)1012 -648 y Fd(to)p 1054 648 V 14 w(lower)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(29)1012 698 y Fd(to)p 1054 698 V 14 w(upper)9 b -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)22 b Ff(29)1012 748 y Fd(transpose-c)o(ha)o(rs)9 -b(\(C-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(14)1012 798 -y Fd(transpose-w)o(or)o(ds)9 b(\(M-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 -b Ff(14)1012 897 y Fs(U)1012 955 y Fd(undo)12 b(\(C-)p -1166 955 V 13 w(,)g(C-x)g(C-u\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)18 b Ff(17)1012 1005 y Fd(universal-a)o(rg)o(ume)o(nt)9 -b(\(\))g Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(15)1012 1055 y -Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(14)1012 1105 y Fd(unix-word-r)o(ub)o(out)9 b(\(C-w\))g -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)22 b Ff(15)1012 1155 y Fd(upcase-word)9 -b(\(M-u\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(14)1012 1204 y Fd(uppercase)p 1194 1204 V 11 w(p)5 -b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)18 b Ff(29)1012 1254 y Fd(username)p 1174 1254 V 11 -w(completion)p 1385 1254 V 11 w(function)s Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 -b Ff(35)1012 1354 y Fs(V)1012 1412 y Ff(visible-stats)t -Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Ff(6)1012 1512 y Fs(Y)1012 1570 y Fd(yank)12 -b(\(C-y\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)20 b Ff(15)1012 1620 y Fd(yank-last-a)o(rg)9 -b(\(M-.,)i(M-)p 1433 1620 V 13 w(\))t Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(13)1012 1669 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012 1719 y Fd(yank-pop)10 -b(\(M-y\))e Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(15)p eop -%%Page: 52 54 -52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: -1 55 --1 54 bop 1862 -58 a Fu(i)75 183 y Fq(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fs(1)67 b(Command)22 b(Line)i(Editing)d -Fb(.)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 423 y Fu(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)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 -(.)27 b Fu(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)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 532 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fu(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fa(.)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 697 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fa(.)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 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fa(.)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 861 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fa(.)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 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fu(8)374 971 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fa(.)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 1026 y(1.4)45 b(Bindable)17 b(Readline)h -(Commands)6 b Fa(.)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 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1135 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1190 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fa(.)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(14)374 -1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fu(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fu(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fa(.)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(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fu(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fu(18)75 1640 y Fs(2)67 b(Programming)23 -b(with)g(GNU)f(Readline)12 b Fb(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35 -b Fs(19)224 1708 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8 -b Fa(.)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(19)224 1763 y(2.2)45 -b(Custom)14 b(F)l(unctions)7 b Fa(.)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(20)374 -1818 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)11 -b Fa(.)d(.)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(.)26 b Fu(20)374 -1873 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l(unction)6 -b Fa(.)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(21)224 1928 y(2.3)45 -b(Readline)17 b(V)l(ariables)f Fa(.)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(21)224 -1982 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7 -b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(23)374 2037 y(2.4.1)44 -b(Naming)15 b(a)g(F)l(unction)e Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)27 b Fu(23)374 2092 y(2.4.2)44 b(Selecting)17 -b(a)e(Keymap)6 b Fa(.)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(24)374 2147 y(2.4.3)44 b(Binding)17 b(Keys)5 b Fa(.)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(24)374 2202 y(2.4.4)44 b(Asso)q(ciating)16 b(F)l(unction)g(Names)f -(and)g(Bindings)8 b Fa(.)h(.)f(.)f(.)h(.)f(.)h(.)23 b -Fu(25)374 2256 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b -Fu(26)374 2311 y(2.4.6)44 b(Redispla)o(y)10 b Fa(.)f(.)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(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fu(27)374 2366 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7 -b Fa(.)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(28)374 2421 y(2.4.8)44 b(Utilit)o(y)16 b(F)l(unctions)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 -b Fu(28)374 2475 y(2.4.9)44 b(Alternate)15 b(In)o(terface)5 -b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b -Fu(29)374 2530 y(2.4.10)43 b(An)16 b(Example)f Fa(.)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(.)30 -b Fu(30)224 2585 y(2.5)45 b(Readline)17 b(Signal)g(Handling)12 -b Fa(.)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(31)224 2640 y(2.6)45 b(Custom)14 b(Completers)f -Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)28 b Fu(33)p eop -%%Page: -2 56 --2 55 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)374 -42 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10 -b Fa(.)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(33)374 96 y(2.6.2)44 -b(Completion)16 b(F)l(unctions)6 b Fa(.)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(34)374 151 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c -Fa(.)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(35)374 206 -y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b -Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)20 b Fu(37)75 327 y Fs(Concept)i(Index)10 b Fb(.)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(47)75 462 -y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9 -b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)32 b Fs(49)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline/doc/rlman.texinfo b/readline/doc/rlman.texinfo index 41bafbf501b..759f0eb3d40 100644 --- a/readline/doc/rlman.texinfo +++ b/readline/doc/rlman.texinfo @@ -55,8 +55,8 @@ in the consistency of user interface across discrete programs that need to provide a command line interface. Published by the Free Software Foundation @* -675 Massachusetts Avenue, @* -Cambridge, MA 02139 USA +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 diff --git a/readline/doc/rltech.texinfo b/readline/doc/rltech.texinfo index ea8d7f8c5e5..51c340a99a2 100644 --- a/readline/doc/rltech.texinfo +++ b/readline/doc/rltech.texinfo @@ -167,6 +167,13 @@ 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}. + @menu * The Function Type:: C declarations to make code readable. * Function Writing:: Variables and calling conventions. @@ -241,7 +248,9 @@ 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}. +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 @@ -282,6 +291,16 @@ The prompt Readline uses. This is set from the argument to @code{readline ()}, and should not be assigned to directly. @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 {char *} rl_library_version The version number of this revision of the library. @end deftypevar @@ -447,6 +466,13 @@ several internal keymaps: @code{emacs_standard_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, Function *function) @@ -534,6 +560,12 @@ the list is formatted in such a way that it can be made part of an Print the names of all bindable Readline functions to @code{rl_outstream}. @end deftypefun +@deftypefun {char **} rl_funmap_names () +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 done, but not the pointrs. +@end deftypefun + @node Allowing Undoing @subsection Allowing Undoing @@ -615,10 +647,19 @@ Readline thinks the screen display is correct. @end deftypefun @deftypefun int rl_on_new_line () -Tell the update routines that we have moved onto a new (empty) line, +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 () +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 () Reset the display state to a clean state and redisplay the current line starting on a new line. @@ -688,7 +729,7 @@ before Readline attempts to read characters from the terminal with @code{rl_read_key ()}. @end deftypefun -@deftypefun rl_extend_line_buffer (int len) +@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 @@ -700,6 +741,8 @@ Initialize or re-initialize Readline's internal state. @deftypefun int rl_reset_terminal (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 NULL, the value of the @code{TERM} +environment variable is used. @end deftypefun @deftypefun int alphabetic (int c) @@ -1106,7 +1149,7 @@ for subsequent calls. @deftypevar {Function *} rl_completion_entry_function A pointer to the generator function for @code{completion_matches ()}. -@code{NULL} means to use @code{filename_entry_function ()}, the default +@code{NULL} means to use @code{filename_completion_function ()}, the default filename completer. @end deftypevar diff --git a/readline/doc/rluser.texinfo b/readline/doc/rluser.texinfo index 755f7ca3a35..9f088ff3d48 100644 --- a/readline/doc/rluser.texinfo +++ b/readline/doc/rluser.texinfo @@ -7,10 +7,10 @@ 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. +which contains both end-user and programmer documentation for the +GNU Readline Library. -Copyright (C) 1988, 1991, 1993, 1996 Free Software Foundation, Inc. +Copyright (C) 1988-1999 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. @@ -36,11 +36,19 @@ into another language, under the above conditions for modified versions. @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} +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. @@ -50,6 +58,12 @@ command line editing interface. 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 @@ -63,9 +77,19 @@ produced when the @key{k} key is pressed while the Control key is depressed. The text @key{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. If you do not have a meta key, the identical keystroke -can be generated by typing @key{ESC} @i{first}, and then typing @key{k}. +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} +@i{first}, and then typing @key{k}. Either process is known as @dfn{metafying} the @key{k} key. The text @key{M-C-k} is read as `Meta-Control-k' and describes the @@ -75,6 +99,10 @@ 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 @@ -110,8 +138,8 @@ character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. -Sometimes you may miss typing a character that you wanted to type, and -not notice your error until you have typed several other characters. In +Sometimes you may mistype a character, and +not notice the error until you have typed several other characters. In that case, you can type @key{C-b} to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with @key{C-f}. @@ -120,7 +148,7 @@ When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the -blank space created by the removal of the text. A list of the basic bare +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 @@ -128,22 +156,28 @@ essentials for editing the text of an input line follows. Move back one character. @item @key{C-f} Move forward one character. -@item @key{DEL} +@item @key{DEL} or @key{Backspace} Delete the character to the left of the cursor. @item @key{C-d} Delete the character underneath the cursor. @item @w{Printing characters} Insert the character into the line at the cursor. -@item @key{C-_} +@item @key{C-_} or @key{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 @key{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 possible keystrokes that you need +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 @key{C-b}, @key{C-f}, @key{C-d}, and @key{DEL}. Here are some commands for moving more rapidly @@ -175,6 +209,8 @@ operate on characters while meta keystrokes operate on words. @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. @@ -194,12 +230,14 @@ Here is the list of commands for killing text. 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 +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 @key{M-f}. @item M-DEL -Kill from the cursor the start of the previous word, or if between +Kill from the cursor the start of the previous word, or, if between words, to the start of the previous word. +Word boundaries are the same as those used by @key{M-b}. @item C-w Kill from the cursor to the previous whitespace. This is different than @@ -231,7 +269,7 @@ 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 (@key{-}), then the sign of the argument will be negative. Once +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 @key{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}. @@ -252,15 +290,18 @@ As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. -The characters present in the value of the @var{isearch-terminators} variable +To search backward in the history for a particular string, type +@key{C-r}. Typing @key{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 @key{C-J} characters will terminate an incremental search. @key{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 @key{C-s} or -@key{C-r} as appropriate. + +To find other matching entries in the history list, type @key{C-r} or +@key{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 @@ -276,11 +317,11 @@ typed by the user or be part of the contents of the current line. @section Readline Init File @cindex initialization file, readline -Although the Readline library comes with a set of @code{emacs}-like +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 in his home directory. +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 @code{INPUTRC}. If @@ -326,6 +367,11 @@ change from the default Emacs-like key binding to use set editing-mode vi @end example +@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. @@ -363,7 +409,7 @@ them; otherwise, they are simply listed. The default limit is @vindex convert-meta If set to @samp{on}, Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth -bit and prepending an @key{ESC} character, converting them to a +bit and prefixing an @key{ESC} character, converting them to a meta-prefixed key sequence. The default value is @samp{on}. @item disable-completion @@ -469,7 +515,7 @@ completions. The default is @samp{off}. @item Key Bindings The syntax for controlling key bindings in the init file is -simple. First you have to know the name of the command that you +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. @@ -480,6 +526,12 @@ command on a line in the init file. The name of the key can be expressed in different ways, depending on which is most comfortable for you. +@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: @@ -497,7 +549,7 @@ expressed on the right hand side (that is, to insert the text @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 GNU Emacs style key +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. @@ -515,7 +567,7 @@ the text @samp{Function Key 1}. @end table -The following GNU Emacs style escape sequences are available when +The following @sc{gnu} Emacs style escape sequences are available when specifying key sequences: @table @code @@ -528,12 +580,12 @@ an escape character @item @kbd{\\} backslash @item @kbd{\"} -@key{"} +@key{"}, a double quotation mark @item @kbd{\'} -@key{'} +@key{'}, a single quote or apostrophe @end table -In addition to the GNU Emacs style escape sequences, a second +In addition to the @sc{gnu} Emacs style escape sequences, a second set of backslash escapes is available: @table @code @@ -554,10 +606,10 @@ horizontal tab @item \v vertical tab @item \@var{nnn} -the character whose ASCII code is the octal value @var{nnn} +the character whose @code{ASCII} code is the octal value @var{nnn} (one to three digits) @item \x@var{nnn} -the character whose ASCII code is the hexadecimal value @var{nnn} +the character whose @code{ASCII} code is the hexadecimal value @var{nnn} (one to three digits) @end table @@ -762,6 +814,17 @@ $endif 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, @var{point} refers to the current cursor +position, and @var{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 @var{region}. @node Commands For Moving @subsection Commands For Moving @@ -783,7 +846,7 @@ 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 this, or the previous, word. Words are +Move back to the start of the current or previous word. Words are composed of letters and digits. @item clear-screen (C-l) @@ -846,9 +909,9 @@ 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 current cursor -position (the @var{point}). This is a non-incremental search. By -default, this command is unbound. +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 @@ -908,11 +971,11 @@ 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 don't work. +Negative arguments have no effect. @item transpose-words (M-t) -Drag the word behind the cursor past the word in front of the cursor -moving the cursor over that word as well. +Drag the word before point past the word after point, +moving point past that word as well. @item upcase-word (M-u) Uppercase the current (or following) word. With a negative argument, @@ -934,38 +997,36 @@ capitalize the previous word, but do not move the cursor. @ftable @code @item kill-line (C-k) -Kill the text from the current cursor position to the end of the line. +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. -The killed text is saved on the kill-ring. @item kill-whole-line () -Kill all characters on the current line, no matter where the -cursor is. By default, this is unbound. +Kill all characters on the current line, no matter point is. +By default, this is unbound. @item kill-word (M-d) -Kill from the cursor to the end of the current word, or if between -words, to the end of the next word. Word boundaries are the same -as @code{forward-word}. +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-DEL) -Kill the word behind the cursor. Word boundaries are the same -as @code{backward-word}. +Kill the word behind point. +Word boundaries are the same as @code{backward-word}. @item unix-word-rubout (C-w) -Kill the word behind the cursor, using white space as a word -boundary. The killed text is saved on the kill-ring. +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 between the point and the @emph{mark} (saved -cursor position). This text is referred to as the @var{region}. +Kill the text in the current region. By default, this command is unbound. @item copy-region-as-kill () @@ -1109,7 +1170,7 @@ the text against lines from the history list for possible completion matches. @item complete-into-braces (M-@{) -Perform filename completion and return the list of possible completions +Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (@pxref{Brace Expansion}). @@ -1138,7 +1199,7 @@ in the macro appear as if typed at the keyboard. @ftable @code @item re-read-init-file (C-x C-r) -Read in the contents of the inputrc file, and incorporate +Read in the contents of the @var{inputrc} file, and incorporate any bindings or variable assignments found there. @item abort (C-g) @@ -1192,7 +1253,8 @@ The value of the @code{comment-begin} variable is inserted at the beginning of the current line, and the line is accepted as if a newline had been typed. @ifset BashFeatures -This makes the current line a shell comment. +The default value of @code{comment-begin} causes this command +to make the current line a shell comment. @end ifset @item dump-functions () @@ -1285,3 +1347,283 @@ 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 @samp{-f} or @samp{-d} option is used for filename or +directory name completion, the shell variable @code{FIGNORE} is +used to filter the matches. +@xref{Bash Variables}, for a description of @code{FIGNORE}. + +Any completions specified by a filename expansion pattern to the +@samp{-G} option are generated next. +The words generated by the pattern need not match the word being completed. +The @code{GLOBIGNORE} shell variable is not used to filter the matches, +but the @code{FIGNORE} shell variable is used. + +Next, the string specified as the argument to the @samp{-W} option +is considered. +The string is first split using the characters in the @code{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 @samp{-F} and @samp{-C} options is invoked. +When the command or function is invoked, the @code{COMP_LINE} and +@code{COMP_POINT} variables are assigned values as described above +(@pxref{Bash Variables}). +If a shell function is being invoked, the @code{COMP_WORDS} and +@code{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 @samp{-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 @code{COMPREPLY} array +variable. + +Next, any command specified with the @samp{-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 @samp{-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 @samp{-P} and @samp{-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 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. + +@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 @samp{-p} and @samp{-r}, and write +the matches to the standard output. +When using the @samp{-F} or @samp{-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 [-abcdefjkvu] [-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 @samp{-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 @samp{-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 @samp{-G}, @samp{-W}, and @samp{-X} options +(and, if necessary, the @samp{-P} and @samp{-S} options) +should be quoted to protect them from expansion before the +@code{complete} builtin is invoked. + +@table @code +@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 @samp{-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 @samp{-b}. + +@item command +Command names. May also be specified as @samp{-c}. + +@item directory +Directory names. May also be specified as @samp{-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 @samp{-e}. + +@item file +File names. May also be specified as @samp{-f}. + +@item function +Names of shell functions. + +@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 +@code{HOSTFILE} shell variable (@pxref{Bash Variables}). + +@item job +Job names, if job control is active. May also be specified as @samp{-j}. + +@item keyword +Shell reserved words. May also be specified as @samp{-k}. + +@item running +Names of running jobs, if job control is active. + +@item setopt +Valid arguments for the @samp{-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 @samp{-u}. + +@item variable +Names of all shell variables. May also be specified as @samp{-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 +@code{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 @code{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 @samp{-p} or @samp{-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/doc/rluserman.dvi b/readline/doc/rluserman.dvi Binary files differdeleted file mode 100644 index 0d2bf71f771..00000000000 --- a/readline/doc/rluserman.dvi +++ /dev/null diff --git a/readline/doc/rluserman.html b/readline/doc/rluserman.html deleted file mode 100644 index b813dda6c1e..00000000000 --- a/readline/doc/rluserman.html +++ /dev/null @@ -1,1566 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo on 1 March 2000 --> - -<TITLE>GNU Readline Library</TITLE> -</HEAD> -<BODY> -<H1>GNU Readline Library User Interface</H1> -<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="rluserman.html#SEC1">Command Line Editing</A> -<UL> -<LI><A NAME="TOC2" HREF="rluserman.html#SEC2">Introduction to Line Editing</A> -<LI><A NAME="TOC3" HREF="rluserman.html#SEC3">Readline Interaction</A> -<UL> -<LI><A NAME="TOC4" HREF="rluserman.html#SEC4">Readline Bare Essentials</A> -<LI><A NAME="TOC5" HREF="rluserman.html#SEC5">Readline Movement Commands</A> -<LI><A NAME="TOC6" HREF="rluserman.html#SEC6">Readline Killing Commands</A> -<LI><A NAME="TOC7" HREF="rluserman.html#SEC7">Readline Arguments</A> -<LI><A NAME="TOC8" HREF="rluserman.html#SEC8">Searching for Commands in the History</A> -</UL> -<LI><A NAME="TOC9" HREF="rluserman.html#SEC9">Readline Init File</A> -<UL> -<LI><A NAME="TOC10" HREF="rluserman.html#SEC10">Readline Init File Syntax</A> -<LI><A NAME="TOC11" HREF="rluserman.html#SEC11">Conditional Init Constructs</A> -<LI><A NAME="TOC12" HREF="rluserman.html#SEC12">Sample Init File</A> -</UL> -<LI><A NAME="TOC13" HREF="rluserman.html#SEC13">Bindable Readline Commands</A> -<UL> -<LI><A NAME="TOC14" HREF="rluserman.html#SEC14">Commands For Moving</A> -<LI><A NAME="TOC15" HREF="rluserman.html#SEC15">Commands For Manipulating The History</A> -<LI><A NAME="TOC16" HREF="rluserman.html#SEC16">Commands For Changing Text</A> -<LI><A NAME="TOC17" HREF="rluserman.html#SEC17">Killing And Yanking</A> -<LI><A NAME="TOC18" HREF="rluserman.html#SEC18">Specifying Numeric Arguments</A> -<LI><A NAME="TOC19" HREF="rluserman.html#SEC19">Letting Readline Type For You</A> -<LI><A NAME="TOC20" HREF="rluserman.html#SEC20">Keyboard Macros</A> -<LI><A NAME="TOC21" HREF="rluserman.html#SEC21">Some Miscellaneous Commands</A> -</UL> -<LI><A NAME="TOC22" HREF="rluserman.html#SEC22">Readline vi Mode</A> -</UL> -</UL> -<P><HR><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> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -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. - -</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 Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="rluserman.html#TOC1">Command Line Editing</A></H1> - -<P> -This chapter describes the basic features of the GNU -command line editing interface. - -</P> - -<UL> -<LI><A HREF="rluserman.html#SEC2">Introduction and Notation</A>: Notation used in this text. -<LI><A HREF="rluserman.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line. -<LI><A HREF="rluserman.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view. -<LI><A HREF="rluserman.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands - available for binding -<LI><A HREF="rluserman.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline - behave like the vi editor. -</UL> - - - -<H2><A NAME="SEC2" HREF="rluserman.html#TOC2">Introduction to Line Editing</A></H2> - -<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> -<I>first</I>, 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">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> - - -<H2><A NAME="SEC3" HREF="rluserman.html#TOC3">Readline Interaction</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<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>RETURN</KBD>. You do not have to be at the -end of the line to press <KBD>RETURN</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. - -</P> - -<UL> -<LI><A HREF="rluserman.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline. -<LI><A HREF="rluserman.html#SEC5">Readline Movement Commands</A>: Moving about the input line. -<LI><A HREF="rluserman.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back! -<LI><A HREF="rluserman.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands. -<LI><A HREF="rluserman.html#SEC8">Searching</A>: Searching through previous lines. -</UL> - - - -<H3><A NAME="SEC4" HREF="rluserman.html#TOC4">Readline Bare Essentials</A></H3> -<P> -<A NAME="IDX2"></A> -<A NAME="IDX3"></A> -<A NAME="IDX4"></A> - -</P> -<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> -<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> - - -<H3><A NAME="SEC5" HREF="rluserman.html#TOC5">Readline Movement Commands</A></H3> - -<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> -<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> - - -<H3><A NAME="SEC6" HREF="rluserman.html#TOC6">Readline Killing Commands</A></H3> - -<P> -<A NAME="IDX5"></A> -<A NAME="IDX6"></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="IDX7"></A> - -</P> -<P> -Here is the list of commands for killing text. - -</P> -<DL COMPACT> - -<DT><KBD>C-k</KBD> -<DD> -Kill the text from the current cursor position to the end of the line. - -<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>. - -<DT><KBD>M-DEL</KBD> -<DD> -Kill from the cursor the start of the previous 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>. - -<DT><KBD>C-w</KBD> -<DD> -Kill from the cursor to the previous whitespace. This is different than -<KBD>M-DEL</KBD> because the word boundaries differ. - -</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> -<DL COMPACT> - -<DT><KBD>C-y</KBD> -<DD> -Yank the most recently killed text back into the buffer at the cursor. - -<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> - - - -<H3><A NAME="SEC7" HREF="rluserman.html#TOC7">Readline Arguments</A></H3> - -<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>. - -</P> - - -<H3><A NAME="SEC8" HREF="rluserman.html#TOC8">Searching for Commands in the History</A></H3> - -<P> -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <VAR>incremental</VAR> and <VAR>non-incremental</VAR>. - -</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. - -</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> - - -<H2><A NAME="SEC9" HREF="rluserman.html#TOC9">Readline Init File</A></H2> -<P> -<A NAME="IDX8"></A> - -</P> -<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> - -<UL> -<LI><A HREF="rluserman.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file. - -<LI><A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file. - -<LI><A HREF="rluserman.html#SEC12">Sample Init File</A>: An example inputrc file. -</UL> - - - -<H3><A NAME="SEC10" HREF="rluserman.html#TOC10">Readline Init File Syntax</A></H3> - -<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">Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. - -</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. Here is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: - - -<PRE> -set editing-mode vi -</PRE> - -A great deal of run-time behavior is changeable with the following -variables. - -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD> -<A NAME="IDX9"></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. - -<DT><CODE>comment-begin</CODE> -<DD> -<A NAME="IDX10"></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>. - -<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>. - -<DT><CODE>completion-query-items</CODE> -<DD> -<A NAME="IDX11"></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. The default limit is -<CODE>100</CODE>. - -<DT><CODE>convert-meta</CODE> -<DD> -<A NAME="IDX12"></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>. - -<DT><CODE>disable-completion</CODE> -<DD> -<A NAME="IDX13"></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>. - -<DT><CODE>editing-mode</CODE> -<DD> -<A NAME="IDX14"></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>. - -<DT><CODE>enable-keypad</CODE> -<DD> -<A NAME="IDX15"></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>. - -<DT><CODE>expand-tilde</CODE> -<DD> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD> -<A NAME="IDX17"></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>. - -<DT><CODE>input-meta</CODE> -<DD> -<A NAME="IDX18"></A> -<A NAME="IDX19"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not strip the eighth bit from the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. - -<DT><CODE>isearch-terminators</CODE> -<DD> -<A NAME="IDX20"></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">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. - -<DT><CODE>keymap</CODE> -<DD> -<A NAME="IDX21"></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-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. - -<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>. - -<DT><CODE>mark-modified-lines</CODE> -<DD> -<A NAME="IDX22"></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. - -<DT><CODE>output-meta</CODE> -<DD> -<A NAME="IDX23"></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>. - -<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>. - -<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>. - -<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>. - -</DL> - -<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. - -Once you know the name of the command, simply place the name of the key -you wish to bind the command to, a colon, and then the name of the -command on a line in the init file. The name of the key -can be expressed in different ways, depending on which is most -comfortable for you. - -<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: - -<PRE> -Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</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). - -<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. - - -<PRE> -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</PRE> - -In the above example, <KBD>C-u</KBD> is 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>. - -</DL> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -<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> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -<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 character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR> -(one to three digits) -</DL> - -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>`C-x \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: - -<PRE> -"\C-x\\": "\\" -</PRE> - -</DL> - - - -<H3><A NAME="SEC11" HREF="rluserman.html#TOC11">Conditional Init Constructs</A></H3> - -<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> -<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. - -<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. - -<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. - -<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 it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -<PRE> -$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</PRE> - -</DL> - -<DT><CODE>$endif</CODE> -<DD> -This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. - -<DT><CODE>$else</CODE> -<DD> -Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. - -<DT><CODE>$include</CODE> -<DD> -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -<PRE> -$include /etc/inputrc -</PRE> - -</DL> - - - -<H3><A NAME="SEC12" HREF="rluserman.html#TOC12">Sample Init File</A></H3> - -<P> -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -</P> - -<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> - - - -<H2><A NAME="SEC13" HREF="rluserman.html#TOC13">Bindable Readline Commands</A></H2> - - -<UL> -<LI><A HREF="rluserman.html#SEC14">Commands For Moving</A>: Moving about the line. -<LI><A HREF="rluserman.html#SEC15">Commands For History</A>: Getting at previous lines. -<LI><A HREF="rluserman.html#SEC16">Commands For Text</A>: Commands for changing text. -<LI><A HREF="rluserman.html#SEC17">Commands For Killing</A>: Commands for killing and yanking. -<LI><A HREF="rluserman.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts. -<LI><A HREF="rluserman.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you. -<LI><A HREF="rluserman.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters -<LI><A HREF="rluserman.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands. -</UL> - -<P> -This section describes Readline commands that may be bound to key -sequences. - -</P> -<P> -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, <VAR>point</VAR> refers to the current cursor -position, and <VAR>mark</VAR> 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 <VAR>region</VAR>. - -</P> - - -<H3><A NAME="SEC14" HREF="rluserman.html#TOC14">Commands For Moving</A></H3> -<DL COMPACT> - -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD> -<A NAME="IDX26"></A> -Move to the start of the current line. - -<DT><CODE>end-of-line (C-e)</CODE> -<DD> -<A NAME="IDX27"></A> -Move to the end of the line. - -<DT><CODE>forward-char (C-f)</CODE> -<DD> -<A NAME="IDX28"></A> -Move forward a character. - -<DT><CODE>backward-char (C-b)</CODE> -<DD> -<A NAME="IDX29"></A> -Move back a character. - -<DT><CODE>forward-word (M-f)</CODE> -<DD> -<A NAME="IDX30"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. - -<DT><CODE>backward-word (M-b)</CODE> -<DD> -<A NAME="IDX31"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -<DT><CODE>clear-screen (C-l)</CODE> -<DD> -<A NAME="IDX32"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -<DT><CODE>redraw-current-line ()</CODE> -<DD> -<A NAME="IDX33"></A> -Refresh the current line. By default, this is unbound. - -</DL> - - - -<H3><A NAME="SEC15" HREF="rluserman.html#TOC15">Commands For Manipulating The History</A></H3> - -<DL COMPACT> - -<DT><CODE>accept-line (Newline, Return)</CODE> -<DD> -<A NAME="IDX34"></A> -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -<DT><CODE>previous-history (C-p)</CODE> -<DD> -<A NAME="IDX35"></A> -Move `up' through the history list. - -<DT><CODE>next-history (C-n)</CODE> -<DD> -<A NAME="IDX36"></A> -Move `down' through the history list. - -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD> -<A NAME="IDX37"></A> -Move to the first line in the history. - -<DT><CODE>end-of-history (M->)</CODE> -<DD> -<A NAME="IDX38"></A> -Move to the end of the input history, i.e., the line currently -being entered. - -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD> -<A NAME="IDX39"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -<DT><CODE>forward-search-history (C-s)</CODE> -<DD> -<A NAME="IDX40"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD> -<A NAME="IDX41"></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. - -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD> -<A NAME="IDX42"></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. - -<DT><CODE>history-search-forward ()</CODE> -<DD> -<A NAME="IDX43"></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. - -<DT><CODE>history-search-backward ()</CODE> -<DD> -<A NAME="IDX44"></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. - -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD> -<A NAME="IDX45"></A> -Insert the first argument to the previous command (usually -the second word on the previous line). 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. - -<DT><CODE>yank-last-arg (M-., M-_)</CODE> -<DD> -<A NAME="IDX46"></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. - -</DL> - - - -<H3><A NAME="SEC16" HREF="rluserman.html#TOC16">Commands For Changing Text</A></H3> - -<DL COMPACT> - -<DT><CODE>delete-char (C-d)</CODE> -<DD> -<A NAME="IDX47"></A> -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return <CODE>EOF</CODE>. - -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD> -<A NAME="IDX48"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD> -<A NAME="IDX49"></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. - -<DT><CODE>quoted-insert (C-q, C-v)</CODE> -<DD> -<A NAME="IDX50"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. - -<DT><CODE>tab-insert (M-TAB)</CODE> -<DD> -<A NAME="IDX51"></A> -Insert a tab character. - -<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE> -<DD> -<A NAME="IDX52"></A> -Insert yourself. - -<DT><CODE>transpose-chars (C-t)</CODE> -<DD> -<A NAME="IDX53"></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. - -<DT><CODE>transpose-words (M-t)</CODE> -<DD> -<A NAME="IDX54"></A> -Drag the word before point past the word after point, -moving point past that word as well. - -<DT><CODE>upcase-word (M-u)</CODE> -<DD> -<A NAME="IDX55"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -<DT><CODE>downcase-word (M-l)</CODE> -<DD> -<A NAME="IDX56"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -<DT><CODE>capitalize-word (M-c)</CODE> -<DD> -<A NAME="IDX57"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -</DL> - - - -<H3><A NAME="SEC17" HREF="rluserman.html#TOC17">Killing And Yanking</A></H3> - -<DL COMPACT> - -<DT><CODE>kill-line (C-k)</CODE> -<DD> -<A NAME="IDX58"></A> -Kill the text from point to the end of the line. - -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD> -<A NAME="IDX59"></A> -Kill backward to the beginning of the line. - -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD> -<A NAME="IDX60"></A> -Kill backward from the cursor to the beginning of the current line. - -<DT><CODE>kill-whole-line ()</CODE> -<DD> -<A NAME="IDX61"></A> -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -<DT><CODE>kill-word (M-d)</CODE> -<DD> -<A NAME="IDX62"></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>. - -<DT><CODE>backward-kill-word (M-DEL)</CODE> -<DD> -<A NAME="IDX63"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. - -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD> -<A NAME="IDX64"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -<DT><CODE>delete-horizontal-space ()</CODE> -<DD> -<A NAME="IDX65"></A> -Delete all spaces and tabs around point. By default, this is unbound. - -<DT><CODE>kill-region ()</CODE> -<DD> -<A NAME="IDX66"></A> -Kill the text in the current region. -By default, this command is unbound. - -<DT><CODE>copy-region-as-kill ()</CODE> -<DD> -<A NAME="IDX67"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -<DT><CODE>copy-backward-word ()</CODE> -<DD> -<A NAME="IDX68"></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. - -<DT><CODE>copy-forward-word ()</CODE> -<DD> -<A NAME="IDX69"></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. - -<DT><CODE>yank (C-y)</CODE> -<DD> -<A NAME="IDX70"></A> -Yank the top of the kill ring into the buffer at the current -cursor position. - -<DT><CODE>yank-pop (M-y)</CODE> -<DD> -<A NAME="IDX71"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -</DL> - - - -<H3><A NAME="SEC18" HREF="rluserman.html#TOC18">Specifying Numeric Arguments</A></H3> -<DL COMPACT> - -<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE> -<DD> -<A NAME="IDX72"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. - -<DT><CODE>universal-argument ()</CODE> -<DD> -<A NAME="IDX73"></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> - - - -<H3><A NAME="SEC19" HREF="rluserman.html#TOC19">Letting Readline Type For You</A></H3> - -<DL COMPACT> - -<DT><CODE>complete (TAB)</CODE> -<DD> -<A NAME="IDX74"></A> -Attempt to do completion on the text before the cursor. This is -application-specific. Generally, if you are typing a filename -argument, you can do filename completion; if you are typing a command, -you can do command completion; if you are typing in a symbol to GDB, you -can do symbol name completion; if you are typing in a variable to Bash, -you can do variable name completion, and so on. - -<DT><CODE>possible-completions (M-?)</CODE> -<DD> -<A NAME="IDX75"></A> -List the possible completions of the text before the cursor. - -<DT><CODE>insert-completions (M-*)</CODE> -<DD> -<A NAME="IDX76"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. - -<DT><CODE>menu-complete ()</CODE> -<DD> -<A NAME="IDX77"></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 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 <CODE>TAB</CODE>, but is unbound -by default. - -<DT><CODE>delete-char-or-list ()</CODE> -<DD> -<A NAME="IDX78"></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. - -</DL> - - - -<H3><A NAME="SEC20" HREF="rluserman.html#TOC20">Keyboard Macros</A></H3> -<DL COMPACT> - -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD> -<A NAME="IDX79"></A> -Begin saving the characters typed into the current keyboard macro. - -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD> -<A NAME="IDX80"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. - -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD> -<A NAME="IDX81"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -</DL> - - - -<H3><A NAME="SEC21" HREF="rluserman.html#TOC21">Some Miscellaneous Commands</A></H3> -<DL COMPACT> - -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD> -<A NAME="IDX82"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. - -<DT><CODE>abort (C-g)</CODE> -<DD> -<A NAME="IDX83"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). - -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE> -<DD> -<A NAME="IDX84"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. - -<DT><CODE>prefix-meta (ESC)</CODE> -<DD> -<A NAME="IDX85"></A> -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing <SAMP>`ESC f'</SAMP> is equivalent to typing -<SAMP>`M-f'</SAMP>. - -<DT><CODE>undo (C-_, C-x C-u)</CODE> -<DD> -<A NAME="IDX86"></A> -Incremental undo, separately remembered for each line. - -<DT><CODE>revert-line (M-r)</CODE> -<DD> -<A NAME="IDX87"></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. - -<DT><CODE>tilde-expand (M-~)</CODE> -<DD> -<A NAME="IDX88"></A> -Perform tilde expansion on the current word. - -<DT><CODE>set-mark (C-@)</CODE> -<DD> -<A NAME="IDX89"></A> -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD> -<A NAME="IDX90"></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. - -<DT><CODE>character-search (C-])</CODE> -<DD> -<A NAME="IDX91"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD> -<A NAME="IDX92"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -<DT><CODE>insert-comment (M-#)</CODE> -<DD> -<A NAME="IDX93"></A> -The value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -<DT><CODE>dump-functions ()</CODE> -<DD> -<A NAME="IDX94"></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. - -<DT><CODE>dump-variables ()</CODE> -<DD> -<A NAME="IDX95"></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. - -<DT><CODE>dump-macros ()</CODE> -<DD> -<A NAME="IDX96"></A> -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 <VAR>inputrc</VAR> file. This command is unbound by default. - -</DL> - - - -<H2><A NAME="SEC22" HREF="rluserman.html#TOC22">Readline vi Mode</A></H2> - -<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 M-C-j (toggle-editing-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><P> -This document was generated on 1 March 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/readline/doc/rluserman.info b/readline/doc/rluserman.info deleted file mode 100644 index b714421c402..00000000000 --- a/readline/doc/rluserman.info +++ /dev/null @@ -1,1189 +0,0 @@ -This is Info file rluserman.info, produced by Makeinfo version 1.68 -from the input file -/usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -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-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: 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 <RETURN>. You do not have to be at the end -of the line to press <RETURN>; the entire line is accepted regardless -of the location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: 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 previous 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'. - - -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. - - 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. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - 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. 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'. - - `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 strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `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-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. - - `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'. - - `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 the name of - the key you wish to bind the command to, a colon, and then the - name of the command on a line in the init file. The name of the - key can be expressed in different ways, depending on which is most - comfortable for you. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, <C-u> is bound to the function - `universal-argument', and <C-o> is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, <C-u> is bound to the function - `universal-argument' (just as it was in the first example), - `<C-x> <C-r>' is bound to the function `re-read-init-file', - and `<ESC> <[> <1> <1> <~>' is bound to insert the text - `Function Key 1'. - - The following 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 character whose `ASCII' code is the octal value NNN (one - to three digits) - - `\xNNN' - the character whose `ASCII' code is the hexadecimal value NNN - (one to three 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 it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as 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. - $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, Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list. If this line was a history - line, then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line 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). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-., M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. 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 under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not 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, 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. - -`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. - - -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 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 the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is yank or yank-pop. - - -File: 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 do completion on the text before the cursor. This is - application-specific. Generally, if you are typing a filename - argument, you can do filename completion; if you are typing a - command, you can do command completion; if you are typing in a - symbol to GDB, you can do symbol name completion; if you are - typing in a variable to Bash, you can do variable name completion, - and so on. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`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 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)' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing `ESC f' is equivalent to typing `M-f'. - -`undo (C-_, C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like 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 current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they ouput. If a numeric argument is supplied, the output - is formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - - -File: 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 (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - - -Tag Table: -Node: Top1221 -Node: Command Line Editing1617 -Node: Introduction and Notation2231 -Node: Readline Interaction3850 -Node: Readline Bare Essentials5044 -Node: Readline Movement Commands6826 -Node: Readline Killing Commands7784 -Node: Readline Arguments9691 -Node: Searching10667 -Node: Readline Init File12511 -Node: Readline Init File Syntax13573 -Node: Conditional Init Constructs22839 -Node: Sample Init File25279 -Node: Bindable Readline Commands28450 -Node: Commands For Moving29495 -Node: Commands For History30345 -Node: Commands For Text33063 -Node: Commands For Killing35067 -Node: Numeric Arguments37035 -Node: Commands For Completion38163 -Node: Keyboard Macros39912 -Node: Miscellaneous Commands40472 -Node: Readline vi Mode43277 - -End Tag Table diff --git a/readline/doc/rluserman.ps b/readline/doc/rluserman.ps deleted file mode 100644 index 4edf5787904..00000000000 --- a/readline/doc/rluserman.ps +++ /dev/null @@ -1,1897 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: rluserman.dvi -%%Pages: 22 -%%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 2000.03.01:1453 -%%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/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end 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/IE 256 array N 2 string 0 1 255{IE 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 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 cmmi10 10.95 1 -/Fc 1 59 df<127012F8A3127005057C840D>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmsltt10 10.95 6 -/Fd 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07 -C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C -0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E -00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6 -38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E -A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303 -3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmbx12 13.14 46 -/Fe 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: Ff cmsl10 10.95 22 -/Ff 22 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380 -70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12 -D<EAFFF0A20C027E8A0F>45 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4A -C7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F -48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75 -D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313 -1EEB2E2038784F40381F878014147D9317>97 D<13FEEA0383380E0780121C0038130090 -C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99 -D<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA -3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0001201 -A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EB -E1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218 -121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F80 -9417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA6 -5A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB80F014 -C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF -8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A -121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB803800 -07EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I< -38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13 -C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438 -E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807 -EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61 -C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E -01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA -0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA0780 -90C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802 -EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010 -147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840 -EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA2 -5BEA305E381F9F8011147B9319>I<381FF0FF3803C0780001137014403800E0C0EBE180 -EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07 -FC18147F9318>120 D<390FF83F803901E00E00EBC00C140813E000005B143014205C13 -705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12 -E61278191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmr8 8 41 -/Fg 41 124 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<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F -000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616 ->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3 -EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13 -101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0 -14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0 -EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470 -A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96 -1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC -EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038 -1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814 -10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206 -217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379 -EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400 -5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA -70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012 -E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA -E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670 -120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70 -70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838 -EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712 -7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813 -F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C -EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5 -EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400 -5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12 -6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A -70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80 -EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0 -EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80 -110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700 -0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07 -4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE -1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212 -A4127810147F8D13>I<B512801101808812>123 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmsy9 9 2 -/Fh 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmcsc10 10.95 8 -/Fi 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E -48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900 -781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E -38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4 -15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038 -0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713 -80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB -F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB -087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A -FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813 -08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E -961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C -130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 17.28 18 -/Fj 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: Fk cmsy10 10.95 1 -/Fk 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 14.4 39 -/Fl 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: Fm cmtt10 10.95 77 -/Fm 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<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0 -A3151C7F9B18>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: Fn cmr10 10.95 72 -/Fn 72 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 -EA07C0EAFFFE0F1E7C9D17>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<90380FE0109038381C309038E002703803C00139078000F048C7127012 -1E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E39 -03C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780 -AD90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10> -I<3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F -9E17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB -13C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F -7E9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E -1C>I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D13 -83A290380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F -7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB07 -80A2EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D -1F7E9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0 -A2007C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E0 -6CEB03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F00 -7C141E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F ->I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A28014 -3CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>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<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706 -EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38 -FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600 -7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01 -8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7 -FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD -18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0 -00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14 -7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12 -60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70 -06130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbx12 20.736 19 -/Fo 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 693 a Fo(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p -75 743 1800 17 v 936 791 a Fn(Edition)17 b(4.1,)c(for)i -Fm(Readline)f(Library)g Fn(V)l(ersion)i(4.1.)1609 845 -y(Jan)o(uary)f(2000)75 2467 y Fl(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 250 a Fn(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)j(Library)l(,)f -(a)e(utilit)o(y)75 305 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 360 y(a)j(command)g(line)i(in)o(terface.)75 -427 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 482 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -537 y(Boston,)d(MA)h(02111)f(USA)75 604 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 659 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 726 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 781 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 836 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 -903 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 958 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 1013 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 Fk(\015)i Fn(1988-1999)e(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 Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 183 y Fj(1)41 b(Command)28 b(Line)e(Editing)137 -299 y Fn(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fi(gnu)g Fn(command)g(line)i(editing)f(in)o(terface.)75 -426 y Fl(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -522 y Fn(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 -589 y(The)h(text)327 587 y Fh(h)p 339 561 56 2 v 339 -589 a Fg(C-k)p 339 597 V 393 587 a Fh(i)424 589 y Fn(is)f(read)g(as)g -(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q -(duced)h(when)f(the)1831 587 y Fh(h)p 1844 561 19 2 v -1844 589 a Fg(k)p 1844 597 V 1860 587 a Fh(i)75 644 y -Fn(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h -(depressed.)137 711 y(The)f(text)325 709 y Fh(h)p 337 -683 63 2 v 337 711 a Fg(M-k)p 337 719 V 397 709 a Fh(i)427 -711 y Fn(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -764 y Fh(h)p 942 738 19 2 v 942 766 a Fg(k)p 942 774 -V 958 764 a Fh(i)987 766 y Fn(k)o(ey)g(is)h(pressed.)20 -b(The)15 b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 764 y -Fh(h)p 1791 738 72 2 v 1791 766 a Fg(AL)m(T)p 1791 774 -V 1860 764 a Fh(i)75 821 y Fn(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 819 y Fh(h)p 1225 793 V 1225 821 a Fg(AL)m(T)p 1225 -828 V 1294 819 a Fh(i)1322 821 y Fn(\(usually)i(to)e(either)i(side)g -(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fh(h)p -400 847 V 400 876 a Fg(AL)m(T)p 400 883 V 469 874 a Fh(i)499 -876 y Fn(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 874 y Fh(h)p -1709 847 V 1709 876 a Fg(AL)m(T)p 1709 883 V 1778 874 -a Fh(i)1808 876 y Fn(k)o(ey)75 930 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 985 -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 1052 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1050 y Fh(h)p 706 1024 V 706 1052 a Fg(AL)m(T)p 706 1060 -V 775 1050 a Fh(i)801 1052 y Fn(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 -1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping) -809 1105 y Fh(h)p 821 1079 70 2 v 821 1107 a Fg(ESC)p -821 1115 V 888 1105 a Fh(i)915 1107 y Ff(\014rst)p Fn(,)g(and)g(then)h -(t)o(yping)1339 1105 y Fh(h)p 1351 1079 19 2 v 1351 1107 -a Fg(k)p 1351 1115 V 1368 1105 a Fh(i)1383 1107 y Fn(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j -Ff(metafying)k Fn(the)425 1160 y Fh(h)p 437 1134 V 437 -1162 a Fg(k)p 437 1169 V 454 1160 a Fh(i)484 1162 y Fn(k)o(ey)l(.)137 -1229 y(The)h(text)334 1227 y Fh(h)p 347 1201 100 2 v -347 1229 a Fg(M-C-k)p 347 1236 V 444 1227 a Fh(i)479 -1229 y Fn(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h -(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Ff(metafying)291 -1281 y Fh(h)p 303 1255 56 2 v 303 1283 a Fg(C-k)p 303 -1291 V 357 1281 a Fh(i)372 1283 y Fn(.)137 1350 y(In)e(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 1348 y Fh(h)p 1396 1322 -73 2 v 1396 1350 a Fg(DEL)p 1396 1358 V 1467 1348 a Fh(i)1482 -1350 y Fn(,)1514 1348 y Fh(h)p 1526 1322 70 2 v 1526 -1350 a Fg(ESC)p 1526 1358 V 1593 1348 a Fh(i)1608 1350 -y Fn(,)1640 1348 y Fh(h)p 1652 1322 72 2 v 1652 1350 -a Fg(LFD)p 1652 1358 V 1722 1348 a Fh(i)1737 1350 y Fn(,)1768 -1348 y Fh(h)p 1780 1322 70 2 v 1780 1350 a Fg(SPC)p 1780 -1358 V 1847 1348 a Fh(i)1862 1350 y Fn(,)75 1403 y Fh(h)p -87 1377 76 2 v 87 1405 a Fg(RET)p 87 1413 V 160 1403 -a Fh(i)175 1405 y Fn(,)23 b(and)306 1403 y Fh(h)p 318 -1377 74 2 v 318 1405 a Fg(T)m(AB)p 318 1413 V 390 1403 -a Fh(i)427 1405 y Fn(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 -1460 y(Section)d(1.3)f([Readline)i(Init)f(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 -1458 y Fh(h)p 1456 1432 72 2 v 1456 1460 a Fg(LFD)p 1456 -1468 V 1526 1458 a Fh(i)1560 1460 y Fn(k)o(ey)l(,)h(t)o(yping)1802 -1458 y Fh(h)p 1814 1432 49 2 v 1814 1460 a Fg(C-j)p 1814 -1468 V 1860 1458 a Fh(i)75 1515 y Fn(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1513 y Fh(h)p 886 1487 76 2 -v 886 1515 a Fg(RET)p 886 1522 V 959 1513 a Fh(i)989 -1515 y Fn(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513 -y Fh(h)p 1397 1487 109 2 v 1397 1515 a Fg(Return)p 1397 -1522 V 1503 1513 a Fh(i)1533 1515 y Fn(or)1588 1513 y -Fh(h)p 1600 1487 86 2 v 1600 1515 a Fg(En)o(ter)p 1600 -1522 V 1684 1513 a Fh(i)1714 1515 y Fn(on)f(some)75 1569 -y(k)o(eyb)q(oards.)75 1697 y Fl(1.2)33 b(Readline)23 -b(In)n(teraction)137 1793 y Fn(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 1848 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1903 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 1958 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 2012 -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 -2067 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 2065 y Fh(h)p 1172 2039 155 -2 v 1172 2067 a Fg(RETURN)p 1172 2075 V 1324 2065 a Fh(i)1339 -2067 y Fn(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75 -2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120 -y Fh(h)p 646 2094 V 646 2122 a Fg(RETURN)p 646 2130 V -798 2120 a Fh(i)813 2122 y Fn(;)g(the)h(en)o(tire)g(line)h(is)f -(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177 -y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y -Fe(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137 -2384 y Fn(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 2439 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 2493 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)f(other)f(c)o -(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102 -2613 y Fh(h)p 1114 2587 57 2 v 1114 2615 a Fg(C-b)p 1114 -2623 V 1168 2613 a Fh(i)1197 2615 y Fn(to)f(mo)o(v)o(e)g(the)h(cursor)g -(to)f(the)h(left,)g(and)75 2670 y(then)i(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)1714 2668 y Fh(h)p 1727 2642 -49 2 v 1727 2670 a Fg(C-f)p 1727 2678 V 1772 2668 a Fh(i)1787 -2670 y Fn(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fn(2)1322 b(GNU)15 b(Readline)i(Library)137 -183 y(When)g(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 -238 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 293 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 348 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 -402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 479 y Fh(h)p 87 453 57 2 v 87 481 a Fg(C-b)p -87 489 V 142 479 a Fh(i)315 481 y Fn(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o -(haracter.)75 558 y Fh(h)p 87 532 49 2 v 87 560 a Fg(C-f)p -87 567 V 133 558 a Fh(i)315 560 y Fn(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c) -o(haracter.)75 636 y Fh(h)p 87 610 73 2 v 87 638 a Fg(DEL)p -87 646 V 158 636 a Fh(i)188 638 y Fn(or)244 636 y Fh(h)p -256 610 159 2 v 256 638 a Fg(Bac)o(kspace)p 256 646 V -412 636 a Fh(i)315 693 y Fn(Delete)h(the)f(c)o(haracter)g(to)f(the)h -(left)h(of)f(the)g(cursor.)75 770 y Fh(h)p 87 744 57 -2 v 87 772 a Fg(C-d)p 87 779 V 142 770 a Fh(i)315 772 -y Fn(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -981 y Fh(h)p 87 955 50 2 v 87 983 a Fg(C-)p 126 983 11 -2 v 87 991 50 2 v 135 981 a Fh(i)165 983 y Fn(or)221 -981 y Fh(h)p 233 955 125 2 v 233 983 a Fg(C-x)c(C-u)p -233 991 V 355 981 a Fh(i)315 1038 y Fn(Undo)17 b(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 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on) -f(y)o(our)g(con\014guration,)g(the)863 1170 y Fh(h)p -875 1144 159 2 v 875 1172 a Fg(Bac)o(kspace)p 875 1179 -V 1032 1170 a Fh(i)1063 1172 y Fn(k)o(ey)g(b)q(e)h(set)f(to)f(delete)i -(the)f(c)o(haracter)g(to)f(the)75 1226 y(left)h(of)f(the)h(cursor)f -(and)g(the)596 1224 y Fh(h)p 608 1198 73 2 v 608 1226 -a Fg(DEL)p 608 1234 V 679 1224 a Fh(i)710 1226 y Fn(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 -1279 y Fh(h)p 87 1253 57 2 v 87 1281 a Fg(C-d)p 87 1289 -V 142 1279 a Fh(i)157 1281 y Fn(,)f(rather)f(than)h(the)h(c)o(haracter) -e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fe(1.2.2)30 -b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487 -y Fn(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 1542 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 1597 y(to)130 -1595 y Fh(h)p 142 1569 V 142 1597 a Fg(C-b)p 142 1605 -V 197 1595 a Fh(i)212 1597 y Fn(,)239 1595 y Fh(h)p 251 -1569 49 2 v 251 1597 a Fg(C-f)p 251 1605 V 297 1595 a -Fh(i)312 1597 y Fn(,)339 1595 y Fh(h)p 351 1569 57 2 -v 351 1597 a Fg(C-d)p 351 1605 V 406 1595 a Fh(i)421 -1597 y Fn(,)g(and)536 1595 y Fh(h)p 548 1569 73 2 v 548 -1597 a Fg(DEL)p 548 1605 V 619 1595 a Fh(i)634 1597 y -Fn(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h -(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fh(h)p -87 1702 55 2 v 87 1730 a Fg(C-a)p 87 1738 V 140 1728 -a Fh(i)315 1730 y Fn(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.) -75 1807 y Fh(h)p 87 1781 53 2 v 87 1809 a Fg(C-e)p 87 -1817 V 138 1807 a Fh(i)315 1809 y Fn(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f -(the)g(line.)75 1885 y Fh(h)p 87 1859 55 2 v 87 1887 -a Fg(M-f)p 87 1895 V 140 1885 a Fh(i)315 1887 y Fn(Mo)o(v)o(e)f(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 1964 y Fh(h)p 87 1938 64 -2 v 87 1966 a Fg(M-b)p 87 1974 V 149 1964 a Fh(i)315 -1966 y Fn(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2043 y Fh(h)p 87 2017 48 2 v 87 2045 a Fg(C-l)p 87 2052 -V 132 2043 a Fh(i)315 2045 y Fn(Clear)g(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w) -368 2121 y Fh(h)p 380 2095 49 2 v 380 2123 a Fg(C-f)p -380 2131 V 426 2121 a Fh(i)452 2123 y Fn(mo)o(v)o(es)f(forw)o(ard)f(a)i -(c)o(haracter,)f(while)1105 2121 y Fh(h)p 1117 2095 55 -2 v 1117 2123 a Fg(M-f)p 1117 2131 V 1170 2121 a Fh(i)1197 -2123 y Fn(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18 -b(It)12 b(is)g(a)g(lo)q(ose)75 2178 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 2233 y(w)o(ords.)75 -2343 y Fe(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2439 y Ff(Killing)26 b Fn(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 2494 y(usually)f(b)o(y)f Ff(y)o(anking)22 -b Fn(\(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 -2549 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 Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 183 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 Ff(kill-ring)p Fn(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -238 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 293 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 -348 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 415 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 492 y Fh(h)p -87 466 56 2 v 87 494 a Fg(C-k)p 87 502 V 141 492 a Fh(i)315 -494 y Fn(Kill)f(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 571 y -Fh(h)p 87 545 64 2 v 87 573 a Fg(M-d)p 87 581 V 149 571 -a Fh(i)315 573 y Fn(Kill)g(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 628 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)1728 -626 y Fh(h)p 1740 600 55 2 v 1740 628 a Fg(M-f)p 1740 -636 V 1793 626 a Fh(i)1808 628 y Fn(.)75 705 y Fh(h)p -87 679 118 2 v 87 707 a Fg(M-DEL)p 87 715 V 202 705 a -Fh(i)315 707 y Fn(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h -(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f -(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 815 y Fh(h)p 327 789 64 2 v 327 817 a Fg(M-b)p -327 825 V 389 815 a Fh(i)404 817 y Fn(.)75 894 y Fh(h)p -87 868 63 2 v 87 896 a Fg(C-w)p 87 904 V 148 894 a Fh(i)315 -896 y Fn(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h -(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733 -894 y Fh(h)p 1745 868 118 2 v 1745 896 a Fg(M-DEL)p 1745 -904 V 1860 894 a Fh(i)315 951 y Fn(b)q(ecause)g(the)f(w)o(ord)g(b)q -(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g -Ff(y)o(ank)j Fn(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 -1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75 -1163 y Fh(h)p 87 1137 56 2 v 87 1165 a Fg(C-y)p 87 1172 -V 141 1163 a Fh(i)315 1165 y Fn(Y)l(ank)e(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 1242 y Fh(h)p 87 1216 63 2 v 87 1244 a Fg(M-y)p -87 1252 V 148 1242 a Fh(i)315 1244 y Fn(Rotate)h(the)g(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 1299 y(command)d(is)568 -1297 y Fh(h)p 580 1271 56 2 v 580 1299 a Fg(C-y)p 580 -1306 V 634 1297 a Fh(i)664 1299 y Fn(or)719 1297 y Fh(h)p -732 1271 63 2 v 732 1299 a Fg(M-y)p 732 1306 V 792 1297 -a Fh(i)807 1299 y Fn(.)75 1410 y Fe(1.2.4)30 b(Readline)20 -b(Argumen)n(ts)137 1506 y Fn(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i -(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15 -b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,) -h(other)f(times)g(it)h(is)g(the)f Ff(sign)h Fn(of)f(the)g(argumen)o(t)f -(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75 -1616 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 -1671 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 1726 y(the)f(line,)i(y)o(ou)e(migh)o(t)g(t)o(yp)q(e)g(`)p -Fm(M--)f(C-k)p Fn('.)137 1793 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 1847 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 -Fm(-)p Fn('\),)d(then)j(the)f(sign)h(of)f(the)h(argumen)o(t)75 -1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o -(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g -(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g -(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30 -b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955 -y Fh(h)p 1805 1929 57 2 v 1805 1957 a Fg(C-d)p 1805 1965 -V 1860 1955 a Fh(i)75 2012 y Fn(command)c(an)g(argumen)o(t)g(of)f(10,)h -(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Fm(M-1)f(0)h(C-d)p -Fn('.)75 2123 y Fe(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f -(the)h(History)137 2219 y Fn(Readline)e(pro)o(vides)d(commands)g(for)g -(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-) -75 2274 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 Ff(incremen)o(tal)e -Fn(and)e Ff(non-incremen)o(tal)p Fn(.)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)h(displa)o(ys)e(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)317 2558 y Fh(h)p 329 2532 51 -2 v 329 2560 a Fg(C-r)p 329 2568 V 378 2558 a Fh(i)393 -2560 y Fn(.)19 b(T)o(yping)580 2558 y Fh(h)p 592 2532 -52 2 v 592 2560 a Fg(C-s)p 592 2568 V 641 2558 a Fh(i)670 -2560 y Fn(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20 -b(The)14 b(c)o(haracters)f(presen)o(t)75 2615 y(in)20 -b(the)f(v)m(alue)h(of)f(the)g Fm(isearch-terminators)d -Fn(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q -(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fh(h)p -1294 2642 70 2 v 1294 2670 a Fg(ESC)p 1294 2678 V 1361 -2668 a Fh(i)1395 2670 y Fn(and)1486 2668 y Fh(h)p 1498 -2642 56 2 v 1498 2670 a Fg(C-J)p 1498 2678 V 1551 2668 -a Fh(i)1585 2670 y Fn(c)o(haracters)d(will)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fn(4)1322 b(GNU)15 b(Readline)i(Library)75 -183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780 -181 y Fh(h)p 792 155 55 2 v 792 183 a Fg(C-g)p 792 191 -V 845 181 a Fh(i)880 183 y Fn(will)g(ab)q(ort)e(an)h(incremen)o(tal)h -(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(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 293 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h -(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o -(yp)q(e)1231 355 y Fh(h)p 1243 329 51 2 v 1243 357 a -Fg(C-r)p 1243 364 V 1292 355 a Fh(i)1322 357 y Fn(or)1377 -355 y Fh(h)p 1389 329 52 2 v 1389 357 a Fg(C-s)p 1389 -364 V 1438 355 a Fh(i)1468 357 y Fn(as)f(appropriate.)k(This)75 -412 y(will)c(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 466 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)i(command)d -(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f -(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fh(h)p -1163 493 76 2 v 1163 521 a Fg(RET)p 1163 529 V 1236 519 -a Fh(i)1271 521 y Fn(will)g(terminate)f(the)f(searc)o(h)h(and)75 -576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command) -g(from)g(the)g(history)g(list.)137 640 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 695 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 -750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75 -868 y Fl(1.3)33 b(Readline)23 b(Init)h(File)137 961 y -Fn(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g -(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 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 -1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g -(commands)g(in)i(an)e Ff(inputrc)k Fn(\014le,)d(con)o(v)o(en)o -(tionally)g(in)g(his)75 1126 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 -1181 y Fm(INPUTRC)p Fn(.)i(If)c(that)g(v)m(ariable)h(is)g(unset,)f(the) -g(default)h(is)g(`)p Fm(~/.inputrc)p Fn('.)137 1244 y(When)f(a)g -(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i -(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299 -y(k)o(ey)g(bindings)i(are)e(set.)137 1363 y(In)f(addition,)h(the)e -Fm(C-x)i(C-r)e Fn(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 1418 y(that)h(y)o(ou)h -(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fe(1.3.1)30 -b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 y Fn(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)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75 -1668 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p -Fm(#)p Fn(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e -(a)f(`)p Fm($)p Fn(')f(indicate)75 1723 y(conditional)c(constructs)f -(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h -(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h -(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315 -1906 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)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315 -1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g -Fm(set)g Fn(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Fm(vi)g Fn(line)i(editing)g(commands:)435 2076 y Fm(set)23 -b(editing-mode)g(vi)315 2140 y Fn(A)15 b(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.)315 2213 y Fm(bell-style)555 2268 y Fn(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Fm(none)p Fn(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2378 y(`)p Fm(visible)p Fn(',)c(Readline)j(uses) -f(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 2432 y(`)p Fm(audible)p Fn(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2487 y(b)q(ell.)315 2560 y Fm(comment-begin)555 2615 -y Fn(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 Fm(insert-)555 2670 y(comment)f -Fn(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g -Fm("#")p Fn(.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 183 y Fm(completion-ignore-case)555 238 y Fn(If)14 -b(set)f(to)g(`)p Fm(on)p Fn(',)g(Readline)j(p)q(erforms)d(\014lename)i -(matc)o(hing)f(and)g(completion)555 293 y(in)i(a)f(case-insensitiv)o(e) -i(fashion.)k(The)15 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p -Fn('.)315 384 y Fm(completion-query-items)555 439 y Fn(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 494 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 549 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 -604 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 658 y(they)i(are)g(simply)i(listed.)k -(The)15 b(default)h(limit)h(is)e Fm(100)p Fn(.)315 750 -y Fm(convert-meta)555 805 y Fn(If)i(set)g(to)g(`)p Fm(on)p -Fn(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f -(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f -(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555 -915 y(\014xing)i(an)749 913 y Fh(h)p 761 887 70 2 v 761 -915 a Fg(ESC)p 761 922 V 828 913 a Fh(i)861 915 y Fn(c)o(haracter,)f -(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555 -969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p -Fm(on)p Fn('.)315 1061 y Fm(disable-completion)555 1116 -y Fn(If)k(set)f(to)f(`)p Fm(On)p Fn(',)h(Readline)j(will)f(inhibit)g(w) -o(ord)e(completion.)30 b(Completion)555 1171 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 1225 y(to)h Fm(self-insert)p -Fn(.)j(The)d(default)h(is)g(`)p Fm(off)p Fn('.)315 1317 -y Fm(editing-mode)555 1372 y Fn(The)f Fm(editing-mode)d -Fn(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g -(bind-)555 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g -(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481 -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 1536 y(b)q(e)g(set)f(to)f(either)i -(`)p Fm(emacs)p Fn(')e(or)h(`)p Fm(vi)p Fn('.)315 1628 -y Fm(enable-keypad)555 1683 y Fn(When)d(set)f(to)h(`)p -Fm(on)p Fn(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f -(application)h(k)o(eypad)555 1737 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 1792 y(The)j(default)h(is)g(`)p Fm(off)p Fn('.)315 -1884 y Fm(expand-tilde)555 1939 y Fn(If)e(set)g(to)f(`)p -Fm(on)p Fn(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g -(Readline)i(attempts)555 1994 y(w)o(ord)f(completion.)21 -b(The)15 b(default)h(is)f(`)p Fm(off)p Fn('.)315 2085 -y Fm(horizontal-scroll-mode)555 2140 y Fn(This)k(v)m(ariable)g(can)f(b) -q(e)g(set)g(to)f(either)i(`)p Fm(on)p Fn(')e(or)g(`)p -Fm(off)p Fn('.)27 b(Setting)19 b(it)f(to)f(`)p Fm(on)p -Fn(')555 2195 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 -2250 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 2304 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 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Fm(off)p Fn('.)315 2451 y Fm(input-meta)555 2506 y Fn(If)h(set)g(to)f -(`)p Fm(on)p Fn(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h -(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e -(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555 -2615 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34 -b(The)20 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p Fn('.)33 -b(The)555 2670 y(name)15 b Fm(meta-flag)f Fn(is)i(a)f(synon)o(ym)g(for) -f(this)i(v)m(ariable.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fn(6)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Fm(isearch-terminators)555 238 y Fn(The)26 b(string)g(of)f(c)o -(haracters)g(that)g(should)i(terminate)f(an)g(incremen)o(tal)555 -293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o -(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d -([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has) -555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o -(haracters)1312 400 y Fh(h)p 1324 374 70 2 v 1324 402 -a Fg(ESC)p 1324 410 V 1391 400 a Fh(i)1419 402 y Fn(and)1505 -400 y Fh(h)p 1518 374 56 2 v 1518 402 a Fg(C-J)p 1518 -410 V 1571 400 a Fh(i)1599 402 y Fn(will)i(terminate)555 -457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Fm(keymap)114 -b Fn(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f -(for)g(k)o(ey)g(binding)j(com-)555 595 y(mands.)41 b(Acceptable)23 -b Fm(keymap)f Fn(names)g(are)f Fm(emacs)p Fn(,)i Fm(emacs-standard)p -Fn(,)555 650 y Fm(emacs-meta)p Fn(,)15 b Fm(emacs-ctlx)p -Fn(,)h Fm(vi)p Fn(,)g Fm(vi-command)p Fn(,)g(and)h Fm(vi-insert)p -Fn(.)23 b Fm(vi)16 b Fn(is)555 705 y(equiv)m(alen)o(t)e(to)f -Fm(vi-command)p Fn(;)e Fm(emacs)h Fn(is)i(equiv)m(alen)o(t)g(to)e -Fm(emacs-standard)p Fn(.)555 759 y(The)f(default)h(v)m(alue)g(is)f -Fm(emacs)p Fn(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Fm(editing-mode)f -Fn(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o -(eymap.)315 897 y Fm(mark-directories)555 952 y Fn(If)j(set)g(to)g(`)p -Fm(on)p Fn(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h(slash) -h(app)q(ended.)555 1007 y(The)15 b(default)h(is)g(`)p -Fm(on)p Fn('.)315 1090 y Fm(mark-modified-lines)555 1145 -y Fn(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Fm(on)p -Fn(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555 -1200 y(terisk)f(\(`)p Fm(*)p Fn('\))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 -1254 y(This)e(v)m(ariable)g(is)g(`)p Fm(off)p Fn(')e(b)o(y)h(default.) -315 1337 y Fm(output-meta)555 1392 y Fn(If)j(set)f(to)g(`)p -Fm(on)p Fn(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 1447 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 -1502 y(default)16 b(is)f(`)p Fm(off)p Fn('.)315 1585 -y Fm(print-completions-horizont)o(ally)555 1640 y Fn(If)d(set)g(to)f(`) -p Fm(on)p Fn(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f -(matc)o(hes)f(sorted)555 1694 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 -1749 y(The)15 b(default)h(is)g(`)p Fm(off)p Fn('.)315 -1832 y Fm(show-all-if-ambiguous)555 1887 y Fn(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 1942 y(to)e(`)p Fm(on)p Fn(',)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 -1997 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 2051 y(The)c(default)h(v)m -(alue)h(is)e(`)p Fm(off)p Fn('.)315 2134 y Fm(visible-stats)555 -2189 y Fn(If)h(set)g(to)f(`)p Fm(on)p Fn(',)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 -2244 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c -(default)g(is)f(`)p Fm(off)p Fn('.)75 2327 y(Key)h(Bindings)315 -2382 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 2437 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 2491 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 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f -(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey) -315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g -(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)p -eop -%%Page: 7 9 -7 8 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34 -b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g -(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o -(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316 -y Ff(k)o(eyname)s Fn(:)k Ff(function-name)g Fn(or)c Ff(macro)555 -371 y(k)o(eyname)i Fn(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 435 -y Fm(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g -(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555 -605 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023 -603 y Fh(h)p 1035 577 57 2 v 1035 605 a Fg(C-u)p 1035 -613 V 1090 603 a Fh(i)1123 605 y Fn(is)h(b)q(ound)g(to)f(the)g -(function)h Fm(universal-)555 660 y(argument)p Fn(,)g(and)872 -658 y Fh(h)p 884 632 55 2 v 884 660 a Fg(C-o)p 884 667 -V 937 658 a Fh(i)971 660 y Fn(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g -(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e -(is,)h(to)f(insert)h(the)g(text)f(`)p Fm(>)h(output)p -Fn(')f(in)o(to)g(the)h(line\).)315 793 y Fm(")p Ff(k)o(eyseq)q -Fm(")p Fn(:)20 b Ff(function-name)e Fn(or)d Ff(macro)555 -848 y(k)o(eyseq)i Fn(di\013ers)e(from)g Ff(k)o(eyname)j -Fn(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555 -902 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 957 y(double)e(quotes.)j -(Some)c Fi(gnu)g Fn(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es)g(can)g(b)q -(e)g(used,)g(as)555 1012 y(in)j(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 -1067 y(recognized.)675 1130 y Fm("\\C-u":)23 b(universal-argument)675 -1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h -("Function)f(Key)i(1")555 1301 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g -(example,)1023 1299 y Fh(h)p 1035 1273 57 2 v 1035 1301 -a Fg(C-u)p 1035 1308 V 1090 1299 a Fh(i)1123 1301 y Fn(is)h(b)q(ound)g -(to)f(the)g(function)h Fm(universal-)555 1355 y(argument)9 -b Fn(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`) -1463 1353 y Fh(h)p 1475 1327 56 2 v 1475 1355 a Fg(C-x)p -1475 1363 V 1529 1353 a Fh(i)k(h)p 1571 1327 51 2 v 1571 -1355 a Fg(C-r)p 1571 1363 V 1620 1353 a Fh(i)1635 1355 -y Fn(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i -Fm(re-read-init-file)p Fn(,)c(and)i(`)1351 1408 y Fh(h)p -1363 1382 70 2 v 1363 1410 a Fg(ESC)p 1363 1418 V 1430 -1408 a Fh(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fg([)p -1472 1419 V 1480 1408 a Fh(i)g(h)p 1522 1382 18 2 v 1522 -1410 a Fg(1)p 1522 1418 V 1538 1408 a Fh(i)g(h)p 1580 -1382 V 1580 1410 a Fg(1)p 1580 1418 V 1595 1408 a Fh(i)g(h)p -1637 1382 24 2 v 1637 1410 a Fm(~)p 1637 1418 V 1659 -1408 a Fh(i)1674 1410 y Fn(')h(is)h(b)q(ound)555 1465 -y(to)e(insert)g(the)g(text)g(`)p Fm(Function)f(Key)h(1)p -Fn('.)315 1543 y(The)g(follo)o(wing)h Fi(gnu)e Fn(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 1598 y(k)o(ey)g(sequences:)315 1676 y Fd(\\C-)168 -b Fn(con)o(trol)15 b(pre\014x)315 1755 y Fd(\\M-)168 -b Fn(meta)15 b(pre\014x)315 1833 y Fd(\\e)192 b Fn(an)15 -b(escap)q(e)h(c)o(haracter)315 1911 y Fd(\\\\)192 b Fn(bac)o(kslash)315 -1989 y Fd(\\)p Fm(")555 1987 y Fh(h)p 567 1961 V 567 -1989 a Fm(")p 567 1997 V 589 1987 a Fh(i)604 1989 y Fn(,)15 -b(a)f(double)j(quotation)e(mark)315 2068 y Fd(\\')555 -2066 y Fh(h)p 567 2040 10 2 v 567 2068 a Fg(')p 567 2075 -V 575 2066 a Fh(i)590 2068 y Fn(,)g(a)f(single)j(quote)e(or)g(ap)q -(ostrophe)315 2146 y(In)f(addition)h(to)f(the)f Fi(gnu)h -Fn(Emacs)g(st)o(yle)f(escap)q(e)i(sequences,)g(a)e(second)i(set)e(of)h -(bac)o(kslash)315 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 -2279 y Fm(\\a)192 b Fn(alert)15 b(\(b)q(ell\))315 2357 -y Fm(\\b)192 b Fn(bac)o(kspace)315 2435 y Fm(\\d)g Fn(delete)315 -2514 y Fm(\\f)g Fn(form)14 b(feed)315 2592 y Fm(\\n)192 -b Fn(newline)315 2670 y Fm(\\r)g Fn(carriage)15 b(return)p -eop -%%Page: 8 10 -8 9 bop 75 -58 a Fn(8)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Fm(\\t)192 b Fn(horizon)o(tal)16 b(tab)315 262 -y Fm(\\v)192 b Fn(v)o(ertical)16 b(tab)315 340 y Fm(\\)p -Ff(nnn)141 b Fn(the)13 b(c)o(haracter)e(whose)i Fm(ASCII)e -Fn(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Ff(nnn)f -Fn(\(one)f(to)g(three)555 395 y(digits\))315 473 y Fm(\\x)p -Ff(nnn)117 b Fn(the)15 b(c)o(haracter)e(whose)i Fm(ASCII)e -Fn(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Ff(nnn)f -Fn(\(one)555 528 y(to)g(three)g(digits\))315 607 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 662 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 716 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 771 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 -Fm(")p Fn(')c(and)h(`)p Fm(')p Fn('.)34 b(F)l(or)315 -826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p -Fm(C-x)i(\\)p Fn(')f(insert)g(a)g(single)h(`)p Fm(\\)p -Fn(')e(in)o(to)h(the)g(line:)435 890 y Fm("\\C-x\\\\":)23 -b("\\\\")75 1000 y Fe(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -1096 y Fn(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -1150 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 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser) -g(directiv)o(es)h(used.)75 1284 y Fm($if)168 b Fn(The)16 -b Fm($if)f Fn(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 1338 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393 -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 1472 y Fm(mode)144 -b Fn(The)11 b Fm(mode=)e Fn(form)h(of)g(the)h Fm($if)f -Fn(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555 -1527 y(is)k(in)h Fm(emacs)e Fn(or)g Fm(vi)g Fn(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 -1581 y(`)p Fm(set)f(keymap)p Fn(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Fm(emacs-)555 1636 y(standard)d -Fn(and)i Fm(emacs-ctlx)e Fn(k)o(eymaps)h(only)i(if)f(Readline)h(is)f -(starting)f(out)555 1691 y(in)k Fm(emacs)f Fn(mo)q(de.)315 -1769 y Fm(term)144 b Fn(The)14 b Fm(term=)e Fn(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 -1824 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 1879 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 Fm(=)p Fn(')f(is)h(tested)g(against)555 1934 -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 1989 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Fm(-)p Fn('.)24 b(This)17 b(allo)o(ws)g -Fm(sun)f Fn(to)g(matc)o(h)h(b)q(oth)f Fm(sun)h Fn(and)555 -2043 y Fm(sun-cmd)p Fn(,)d(for)g(instance.)315 2122 y -Fm(application)555 2177 y Fn(The)d Ff(application)i Fn(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Ff(application)555 2286 y(name)p -Fn(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18 -b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555 -2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i -(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i -(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren) -o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675 -2514 y Fm($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h -(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -2670 y($endif)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)75 183 y Fm($endif)96 b Fn(This)16 b(command,)e(as)h(seen)h(in)g -(the)f(previous)h(example,)g(terminates)f(an)g Fm($if)f -Fn(command.)75 263 y Fm($else)120 b Fn(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Fm($if)e Fn(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)75 343 y Fm($include)48 b Fn(This)14 b(directiv)o(e)i -(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h -(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435 -462 y Fm($include)23 b(/etc/inputrc)75 574 y Fe(1.3.3)30 -b(Sample)20 b(Init)h(File)137 670 y Fn(Here)16 b(is)g(an)f(example)h -(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g -(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 y(and)f(conditional)i -(syn)o(tax.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fn(10)1299 b(GNU)15 b(Readline)i(Library)195 -235 y Fm(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391 -y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195 -806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195 -1169 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 1179 21 38 v -195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195 -1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g -(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195 -1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195 -1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g -(previous-history)195 1947 y("\\M-[B":)g(next-history)195 -1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g -(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195 -2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g -(previous-history)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 183 y Fm(#"\\M-\\C-[B":)165 b(next-history)195 -287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495 -y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the) -f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are) -h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195 -754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g -("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g -(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g -(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g -(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013 -y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i -(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195 -1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195 -1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740 -y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off) -195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f -(characters)195 2155 y(set)h(output-meta)g(on)195 2259 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e -(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195 -2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p -eop -%%Page: 12 14 -12 13 bop 75 -58 a Fn(12)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Fm("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75 -359 y Fl(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -453 y Fn(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -519 y(Command)j(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)g(default.)29 -b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g -Ff(p)q(oin)o(t)h Fn(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Ff(mark)h Fn(refers)e(to)f(a)75 628 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Fm(set-mark)f Fn(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g -Ff(region)p Fn(.)75 790 y Fe(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 895 y Fm(beginning-of-line)13 -b(\(C-a\))315 950 y Fn(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 1026 y Fm(end-of-line)f(\(C-e\))315 -1081 y Fn(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1157 y Fm(forward-char)f(\(C-f\))315 1212 y Fn(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1288 y Fm(backward-char)e(\(C-b\))315 -1343 y Fn(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1419 y Fm(forward-word)f(\(M-f\))315 1474 y Fn(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 1529 y(digits.)75 1605 -y Fm(backward-word)e(\(M-b\))315 1660 y Fn(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 1715 y(of)e(letters)g(and)g -(digits.)75 1791 y Fm(clear-screen)f(\(C-l\))315 1846 -y Fn(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 -1900 y(of)i(the)g(screen.)75 1977 y Fm(redraw-current-line)e(\(\))315 -2031 y Fn(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fe(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2244 y Fm(accept-line)14 b(\(Newline,)g(Return\))315 -2298 y Fn(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor) -f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315 -2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o -(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315 -2408 y(to)h(its)g(original)h(state.)75 2484 y Fm(previous-history)d -(\(C-p\))315 2539 y Fn(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g -(list.)75 2615 y Fm(next-history)f(\(C-n\))315 2670 y -Fn(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)p -eop -%%Page: 13 15 -13 14 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 183 y Fm(beginning-of-history)12 b(\(M-<\))315 -238 y Fn(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 314 y Fm(end-of-history)e(\(M->\))315 369 y Fn(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 445 y Fm -(reverse-search-history)c(\(C-r\))315 500 y Fn(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 555 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631 -y Fm(forward-search-history)c(\(C-s\))315 686 y Fn(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 741 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817 -y Fm(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -872 y Fn(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 -926 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 981 -y(user.)75 1057 y Fm(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1112 y Fn(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 1167 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 -1222 y(user.)75 1298 y Fm(history-search-forward)f(\(\))315 -1353 y Fn(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 -1407 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 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1538 y Fm(history-search-backward)c(\(\))315 1593 y Fn(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 1648 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 -1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1779 y Fm(yank-nth-arg)e(\(M-C-y\))315 1834 y Fn(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 1889 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Ff(n)p Fn(,)i(insert)f(the)h -Ff(n)p Fn(th)f(w)o(ord)g(from)g(the)g(previous)315 1943 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -1998 y(argumen)o(t)g(inserts)i(the)f Ff(n)p Fn(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y -Fm(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 y Fn(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 2184 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 -Fm(yank-nth-arg)p Fn(.)j(Succes-)315 2239 y(siv)o(e)f(calls)g(to)f -Fm(yank-last-arg)e Fn(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g -(list,)i(inserting)f(the)315 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2400 y Fe(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Fm(delete-char)14 -b(\(C-d\))315 2560 y Fn(Delete)j(the)f(c)o(haracter)g(under)h(the)f -(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of) -e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g -(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not) -315 2670 y(b)q(ound)g(to)f Fm(delete-char)p Fn(,)e(then)j(return)f -Fm(EOF)p Fn(.)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fn(14)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fm(backward-delete-char)12 b(\(Rubout\))315 238 -y Fn(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 293 -y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -378 y Fm(forward-backward-delete-ch)o(ar)12 b(\(\))315 -432 y Fn(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 -487 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 -542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627 -y Fm(quoted-insert)e(\(C-q,)i(C-v\))315 682 y Fn(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 736 -y(sequences)f(lik)o(e)605 734 y Fh(h)p 617 708 56 2 v -617 736 a Fg(C-q)p 617 744 V 671 734 a Fh(i)685 736 y -Fn(,)f(for)g(example.)75 821 y Fm(tab-insert)f(\(M-TAB\))315 -876 y Fn(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Fm(self-insert)f -(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fn(Insert)g(y)o(ourself.) -75 1100 y Fm(transpose-chars)e(\(C-t\))315 1155 y Fn(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 1210 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 1265 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 1320 y(ha)o(v)o(e)k(no)g -(e\013ect.)75 1404 y Fm(transpose-words)e(\(M-t\))315 -1459 y Fn(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 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Fm(upcase-word)g -(\(M-u\))315 1654 y Fn(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 1708 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 1793 y Fm(downcase-word)d(\(M-l\))315 -1848 y Fn(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 1903 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 1988 y Fm(capitalize-word)e(\(M-c\))315 -2042 y Fn(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 -2097 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 2220 y Fe(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2336 y Fm(kill-line)14 b(\(C-k\))315 2391 -y Fn(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 2476 y Fm(backward-kill-line)e(\(C-x)h(Rubout\))315 -2530 y Fn(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 2615 y Fm(unix-line-discard)e(\(C-u\))315 2670 -y Fn(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.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 183 y Fm(kill-whole-line)13 b(\(\))315 238 y -Fn(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e -(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315 -293 y(un)o(b)q(ound.)75 374 y Fm(kill-word)c(\(M-d\))315 -429 y Fn(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 483 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 Fm(forward-word)p -Fn(.)75 564 y Fm(backward-kill-word)e(\(M-DEL\))315 619 -y Fn(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 -Fm(backward-word)p Fn(.)75 700 y Fm(unix-word-rubout)f(\(C-w\))315 -755 y Fn(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 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 891 y Fm(delete-horizontal-space)c(\(\))315 -946 y Fn(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 1027 -y Fm(kill-region)e(\(\))315 1082 y Fn(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 1163 y Fm(copy-region-as-kill)d(\(\))315 -1217 y Fn(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 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1353 y Fm(copy-backward-word)d(\(\))315 1408 -y Fn(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 -1463 y(same)c(as)g Fm(backward-word)p Fn(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 1544 y Fm(copy-forward-word)d(\(\)) -315 1599 y Fn(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 1653 y(same)g(as)g Fm(forward-word)p Fn(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 1734 y Fm(yank)f(\(C-y\))315 -1789 y Fn(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75 -1870 y Fm(yank-pop)f(\(M-y\))315 1925 y Fn(Rotate)j(the)g(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 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o -(ank-p)q(op.)75 2095 y Fe(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2205 y Fm(digit-argument)13 -b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 y Fn(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 2313 y Fh(h)p 327 2287 50 2 v 327 -2315 a Fg(M{)p 327 2323 V 375 2313 a Fh(i)405 2315 y -Fn(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y -Fm(universal-argument)e(\(\))315 2451 y Fn(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 -2506 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 -2560 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 Fm(universal-argument)315 2615 -y Fn(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 -2670 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)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fn(16)1299 b(GNU)15 b(Readline)i(Library)315 -183 y(or)c(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 -238 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 -293 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 -348 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 472 y Fe(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 590 y Fm(complete)14 b(\(TAB\))315 644 y Fn(A)o(ttempt)j(to)g -(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27 -b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,) -15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y) -o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are) -g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;) -h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e -(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315 -864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g -(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315 -918 y(so)g(on.)75 1004 y Fm(possible-completions)d(\(M-?\))315 -1059 y Fn(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(the)f(cursor.)75 1145 y Fm(insert-completions)e(\(M-*\))315 -1199 y Fn(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 -1254 y(b)o(y)f Fm(possible-completions)p Fn(.)75 1340 -y Fm(menu-complete)e(\(\))315 1395 y Fn(Similar)g(to)f -Fm(complete)p Fn(,)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 1450 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20 -b(execution)g(of)f Fm(menu-complete)315 1504 y Fn(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 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i -(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Ff(n)g Fn(mo)o(v)o(es)g Ff(n)g Fn(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f -(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g -(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)f Fm(TAB)p Fn(,)f(but)h(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1809 y Fm(delete-char-or-list)e(\(\))315 -1864 y Fn(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 -1919 y(\(lik)o(e)i Fm(delete-char)p Fn(\).)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 -Fm(possible-)315 1974 y(completions)p Fn(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 2098 y Fe(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 2216 y Fm(start-kbd-macro)13 b(\(C-x)i(\(\))315 -2270 y Fn(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 2356 -y Fm(end-kbd-macro)e(\(C-x)i(\)\))315 2411 y Fn(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 2466 y(de\014nition.)75 -2552 y Fm(call-last-kbd-macro)g(\(C-x)h(e\))315 2606 -y Fn(Re-execute)19 b(the)f(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 -2661 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.)p eop -%%Page: 17 19 -17 18 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 183 y Fe(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -298 y Fm(re-read-init-file)13 b(\(C-x)h(C-r\))315 353 -y Fn(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Ff(inputrc)k -Fn(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75 -491 y Fm(abort)e(\(C-g\))315 546 y Fn(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 600 y(setting)i(of)g Fm(bell-style)p -Fn(\).)75 684 y Fm(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Ff(x)p Fm(,)h Fc(:)8 b(:)g(:)n Fm(\))315 739 y Fn(If)14 -b(the)g(meta\014ed)g(c)o(haracter)f Ff(x)k Fn(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 -794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75 -877 y Fm(prefix-meta)e(\(ESC\))315 932 y Fn(Mak)o(e)j(the)i(next)f(c)o -(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19 -b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.) -20 b(T)o(yping)15 b(`)p Fm(ESC)g(f)p Fn(')f(is)i(equiv)m(alen)o(t)h(to) -d(t)o(yping)i(`)p Fm(M-f)p Fn('.)75 1070 y Fm(undo)f(\(C-_,)f(C-x)h -(C-u\))315 1125 y Fn(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1209 y Fm(revert-line)f(\(M-r\))315 -1263 y Fn(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 Fm(undo)f -Fn(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1402 y Fm(tilde-expand)f(\(M-~\))315 -1456 y Fn(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1540 y Fm(set-mark)f(\(C-@\))315 1595 y Fn(Set)g(the)f(mark)g -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1733 y Fm(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1788 y Fn(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 1843 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 1926 -y Fm(character-search)e(\(C-]\))315 1981 y Fn(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 2036 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2119 y Fm(character-search-backward)c(\(M-C-]\))315 2174 -y Fn(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 -2229 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 2312 y Fm(insert-comment)d(\(M-#\)) -315 2367 y Fn(The)19 b(v)m(alue)i(of)e(the)g Fm(comment-begin)e -Fn(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315 -2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if) -i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506 -y Fm(dump-functions)d(\(\))315 2560 y Fn(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)h -(output)e(stream.)315 2615 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 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fn(18)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fm(dump-variables)c(\(\))315 238 y Fn(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)i(output)d(stream.)315 293 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 348 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Fm(dump-macros)f(\(\))315 -482 y Fn(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b) -q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315 -537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i -(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315 -592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Ff(inputrc)k Fn(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 647 y(default.)75 775 y Fl(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 871 y Fn(While)13 b(the)f(Readline)j(library)d(do)q -(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Fm(vi)g -Fn(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75 -926 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)i Fm(vi)e Fn(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g -(sp)q(eci\014ed)i(in)75 981 y(the)c Fi(POSIX)h Fn(1003.2)d(standard.) -137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o -(w)o(een)f Fm(emacs)e Fn(and)i Fm(vi)f Fn(editing)i(mo)q(des,)f(use)f -(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21 -b(The)15 b(Readline)j(default)d(is)h Fm(emacs)f Fn(mo)q(de.)137 -1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Fm(vi)g -Fn(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 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Fm(i)p Fn('.)18 b(Pressing)608 1223 y Fh(h)p 620 1197 -70 2 v 620 1225 a Fg(ESC)p 620 1233 V 687 1223 a Fh(i)715 -1225 y Fn(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 1280 y(text)i(of)h(the)g(line)h -(with)g(the)f(standard)f Fm(vi)h Fn(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 1335 -y(`)p Fm(k)p Fn(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Fm(j)p Fn(',)e(and)h(so)g(forth.)p eop -%%Page: -1 21 --1 20 bop 1862 -58 a Fn(i)75 183 y Fj(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fl(1)67 b(Command)22 b(Line)i(Editing)d -Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fl(1)224 423 y Fn(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)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 -(.)27 b Fn(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)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 Fn(1)374 532 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fn(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fn(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fn(2)374 697 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fa(.)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 Fn(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fn(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fa(.)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 Fn(4)374 861 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fa(.)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 Fn(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fn(8)374 971 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fa(.)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 Fn(9)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h -(Commands)6 b Fa(.)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 Fn(12)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fn(12)374 1135 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fn(12)374 1190 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fn(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fa(.)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 Fn(14)374 -1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fn(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fn(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fa(.)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 Fn(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fn(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fn(18)p eop -%%Page: -2 22 --2 21 bop 75 -58 a Fn(ii)1321 b(GNU)15 b(Readline)i(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline/doc/texinfo.tex b/readline/doc/texinfo.tex deleted file mode 100644 index e8375a310ac..00000000000 --- a/readline/doc/texinfo.tex +++ /dev/null @@ -1,4692 +0,0 @@ -%% TeX macros to handle texinfo files - -% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, -% 94, 95, 1996 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! - - -% Send bug reports to bug-texinfo@prep.ai.mit.edu. -% Please include a *precise* test case in each bug report. - - -% Make it possible to create a .fmt file just by loading this file: -% if the underlying format is not loaded, start by loading it now. -% Added by gildea November 1993. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi - -% This automatically updates the version number based on RCS. -\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 2.185 $ -\message{Loading texinfo package [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]}\message{} - \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\ptexi=\i -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexstar=\* -\let\ptext=\t -\let\ptextilde=\~ - -% 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\ } -} -\let\~ = \tie % And make it available as @~. - - -\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. -\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% -\def\putwordInfo{Info}% -\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% -\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% -\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% -\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% -\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% -\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% -\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% -\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% -\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% - -% Ignore a token. -% -\def\gobble#1{} - -\hyphenation{ap-pen-dix} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{eshell} - -% 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}% -\def\loggingall{\tracingcommands2 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen -}% - -%---------------------Begin change----------------------- -% -%%%% For @cropmarks command. -% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\cornerlong \newdimen\cornerthick -\newdimen \topandbottommargin -\newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks -\outerhsize=7in -%\outervsize=9.5in -% Alternative @smallbook page size is 9.25in -\outervsize=9.25in -\topandbottommargin=.75in -% -%---------------------End change----------------------- - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{% - \hoffset=\normaloffset - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - {% - \escapechar = `\\ % use backslash in output files. - \indexdummies - \shipout\vbox{% - {\let\hsize=\pagewidth \makeheadline}% - \pagebody{#1}% - {\let\hsize=\pagewidth \makefootline}% - }% - }% - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -%%%% For @cropmarks command %%%% - -% Here is a modification of the main output routine for Near East Publications -% This provides right-angle cropmarks at all four corners. -% The contents of the page are centerlined into the cropmarks, -% and any desired binding offset is added as an \hskip on either -% site of the centerlined box. (P. A. MacKay, 12 November, 1986) -% -\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up -{\escapechar=`\\\relax % makes sure backslash is used in output files. - \shipout - \vbox to \outervsize{\hsize=\outerhsize - \vbox{\line{\ewtop\hfill\ewtop}} - \nointerlineskip - \line{\vbox{\moveleft\cornerthick\nstop} - \hfill - \vbox{\moveright\cornerthick\nstop}} - \vskip \topandbottommargin - \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill - \boxmaxdepth\cornerthick - \line{\vbox{\moveleft\cornerthick\nsbot} - \hfill - \vbox{\moveright\cornerthick\nsbot}} - \nointerlineskip - \vbox{\line{\ewbot\hfill\ewbot}} - }} - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi} -% -% Do @cropmarks to get crop marks -\def\cropmarks{\let\onepageout=\croppageout } - -\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. Type 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{Type <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 \char '100}} - -% 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 \char '173}} -\def\myrbrace {{\tt \char '175}} -\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 -} - -% @: 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 } - -% @enddots{} is an end-of-sentence ellipsis. -\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} - -% @! is an end-of-sentence bang. -\gdef\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\gdef\?{?\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\penalty 10000 -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Go into vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % Don't add any leading before our big empty box, but allow a page - % break, since the best break might be right here. - \allowbreak - \nointerlineskip - \vtop to #1\mil{\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 -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output some dots - -\def\dots{$\ldots$} - -% @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{\catcode 64=\other \catcode 123=\other \catcode 125=\other% -\parsearg \commentxxx} - -\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } - -\let\c=\comment - -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment - -% 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\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}} - -% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text. -% -\def\ifinfo{\doignore{ifinfo}} -\def\ifhtml{\doignore{ifhtml}} -\def\html{\doignore{html}} -\def\menu{\doignore{menu}} -\def\direntry{\doignore{direntry}} - -% Also ignore @macro ... @end macro. The user must run texi2dvi, -% which runs makeinfo to do macro expansion. Ignore @unmacro, too. -\def\macro{\doignore{macro}} -\let\unmacro = \comment - - -% @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'. - \long\def\doignoretext##1\end #1{\enddoignore}% - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode32 = 10 - % - % 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.ai.mit.edu/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\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont - \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont - \let\indsf = \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}} -} - -% @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 \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. -% -\def\value#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 always succeeds; we read the text following, through @end -% iftex). But `@end iftex' should be valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\defineunmatchedend{iftex} - -% 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} - -% @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} - -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -\def\donoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\setref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\unnumbnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\appendixnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -% @refill is a no-op. -\let\refill=\relax - -% @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{% - \readauxfile - \opencontents - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - \comment % Ignore the actual filename. -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - -% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} -% \def\macroxxx#1#2 \end macro{% -% \expandafter\gdef\macrotemp#1{#2}% -% \endgroup} - -%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} -%\def\linemacroxxx#1#2 \end linemacro{% -%\let\parsearg=\relax -%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% -%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% -%\expandafter\gdef\macrotempx#1{#2}% -%\endgroup} - -%\def\butfirst#1{} - - -\message{fonts,} - -% Font-change commands. - -% Texinfo 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} - -%% Try out Computer Modern fonts at \magstephalf -\let\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 and small examples (9pt). -% We actually use the slanted font rather than the italic, -% because texinfo normally uses the slanted fonts for that. -% Do not make many font distinctions in general in the index, since they -% aren't very useful. -\setfont\ninett\ttshape{9}{1000} -\setfont\indrm\rmshape{9}{1000} -\setfont\indit\slshape{9}{1000} -\let\indsl=\indit -\let\indtt=\ninett -\let\indttsl=\ninett -\let\indsf=\indrm -\let\indbf=\indrm -\setfont\indsc\scshape{10}{900} -\font\indi=cmmi9 -\font\indsy=cmsy9 - -% 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{12}{\magstep2} -\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}{\magstep1} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled \magstep1 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% Fonts for title page: -\setfont\titlerm\rmbshape{12}{\magstep3} -\let\authorrm = \secrm - -% 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\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\indexfonts{% - \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl - \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc - \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl - \resetmathfonts \setleading{12pt}} - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% 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\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartitalic -\let\dfn=\smartitalic -\let\emph=\smartitalic -\let\cite=\smartitalic - -\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\smallrm\rmshape{8}{1000} -\font\smallsy=cmsy9 -\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% - \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -\let\file=\samp -\let\url=\samp % perhaps include a hypertex \special eventually -\def\email#1{$\langle${\tt #1}$\rangle$} - -% @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} -% The following is used by \doprintindex to insure that long function names -% wrap around. It is necessary for - and _ to be active before the index is -% read from the file, as \entry parses the arguments long before \code is -% ever called. -- mycroft -\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder} -} - -\def\realdash{-} -\def\realunder{_} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{\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. -% -\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{\ttsl\look}}\fi -\else{\tclose{\ttsl\look}}\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} - -\def\r#1{{\rm #1}} % roman font -% Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @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. -\def\titlefont#1{{\titlerm #1}} - -\newif\ifseenauthor -\newif\iffinishedtitlepage - -\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 -% I deinstalled the following change because \cmr12 is undefined. -% This change was not in the ChangeLog anyway. --rms. -% \let\subtitlerm=\cmr12 - \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{\titlefont{##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 - \HEADINGSon -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks \evenheadline % Token sequence for heading line of even pages -\newtoks \oddheadline % Token sequence for heading line of odd pages -\newtoks \evenfootline % Token sequence for footing line of even pages -\newtoks \oddfootline % Token sequence for footing line of 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{\everyheadingyyy #1@|@|@|@|\finish} -\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\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}}} - -\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish} -\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -% -}% 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 -January\or February\or March\or April\or May\or June\or -July\or August\or September\or October\or November\or December\fi -\space\number\year} - -% Use this if you want the Month Day, Year style of output. -%\def\today{\ifcase\month\or -%January\or February\or March\or April\or May\or June\or -%July\or August\or September\or October\or November\or December\fi -%\space\number\day, \number\year} - -% @settitle line... specifies the title of the document, for headings -% It generates no output of its own - -\def\thistitle{No Title} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - - -\message{tables,} - -% @tabs -- simple alignment - -% These don't work. For one thing, \+ is defined as outer. -% So these macros cannot even be defined. - -%\def\tabs{\parsearg\tabszzz} -%\def\tabszzz #1{\settabs\+#1\cr} -%\def\tabline{\parsearg\tablinezzz} -%\def\tablinezzz #1{\+#1\cr} -%\def\&{&} - -% 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. - % - % Be sure we are not still in the middle of a paragraph. - %{\parskip = 0in - %\par - %}% - % - % 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. Since that - % text will be indented by \tableindent, we make the item text be in - % a zero-width box. - \noindent - \rlap{\hskip -\tableindent\box0}\ignorespaces% - \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}{}{}{}{}} - -\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 itemsize - \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. - -%%%% -% Dimensions - -\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 - -%% 2/1/96, to allow fractions to be given with more than one digit. -\def\pickupwholefraction#1 {\global\advance\colcount by1 % -\expandafter\xdef\csname col\the\colcount\endcsname{.#1\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 % In this case arg of setuptable - % is the decimal point before the - % number given in percent of hsize. - % We don't need this so we don't use it. - \else - \global\advance\colcount by1 - \setbox0=\hbox{#1 }% 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\else\let\go\setuptable\fi% -\fi\go} - -%%%% -% multitable syntax -\def\tab{&\hskip1sp\relax} % 2/2/96 - % tiny skip here makes sure this column space is - % maintained, even if it is never used. - - -%%%% -% @multitable ... @end multitable definitions: - -\def\multitable{\parsearg\dotable} - -\def\dotable#1{\bgroup -\let\item\cr -\tolerance=9500 -\hbadness=9500 -\setmultitablespacing -\parskip=\multitableparskip -\parindent=\multitableparindent -\overfullrule=0pt -\global\colcount=0\relax% -\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% - % To parse everything between @multitable and @item : -\setuptable#1 \endsetuptable - % Need to reset this to 0 after \setuptable. -\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 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. -\ifnum\colcount=1 -\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 -\noindent##\multistrut}\cr% - % \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. -\global\everycr{\noalign{% -\filbreak%% keeps underfull box messages off when table breaks over pages. -\global\colcount=0\relax}} -} - -\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 -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -%% 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. -\else -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi -\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{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{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#1}} -} - -% @defindex foo == \newindex{foo} - -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. - -\def\newcodeindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\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. -\def\synindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\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\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{% -% 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. -%\let\{ = \lbracecmd -%\let\} = \rbracecmd -\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\char{\realbackslash char}% -\def\TeX{\realbackslash TeX}% -\def\dots{\realbackslash dots }% -\def\copyright{\realbackslash copyright }% -\def\tclose##1{\realbackslash tclose {##1}}% -\def\code##1{\realbackslash code {##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\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}}% -\unsepspaces -} - -% 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\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 %initialize! -% workhorse for all \fooindexes -% #1 is name of index, #2 is stuff to put there -\def\doind #1#2{% - % 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. - % - % First process the index-string with all font commands turned off - % to get the string to sort by. - {\indexnofonts \xdef\indexsorttmp{#2}}% - % - % Now produce the complete index entry, with both the sort key and the - % original text, including any font commands. - \toks0 = {#2}% - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - \temp - }% - }% - \penalty\count255 - }% -} - -\def\dosubind #1#2#3{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% -\def\rawbackslashxx{\indexbackslash}% -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2 #3}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% -\temp }% -}\penalty\count10}} - -% 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. - -% This is what you call to cause a particular index to get printed. -% Write -% @unnumbered Function Index -% @printindex fn - -\def\printindex{\parsearg\doprintindex} - -\def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % - \indexfonts \rm - \tolerance = 9500 - \indexbreaks - \def\indexbackslash{\rawbackslashxx}% - % 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. - \catcode`\\ = 0 - \catcode`\@ = 11 - \escapechar = `\\ - \begindoublecolumns - % - % See if the index file exists and is nonempty. - \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. - (Index is nonexistent) - \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 - (Index is empty) - \else - \input \jobname.#1s - \fi - \fi - \closein 1 - \enddoublecolumns -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -% Same as \bigskipamount except no shrink. -% \balancecolumns gets confused if there is any shrink. -\newskip\initialskipamount \initialskipamount 12pt plus4pt - -\def\initial #1{% -{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt -\ifdim\lastskip<\initialskipamount -\removelastskip \penalty-200 \vskip \initialskipamount\fi -\line{\secbf#1\hfill}\kern 2pt\penalty10000}} - -% 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 - % - % 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. - \ #2% The page number ends the paragraph. - \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 = {\global\setbox\partialpage - =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% - \eject - % - % Now switch to the double-column output routine. - \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 once. - % - % 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.) - \vsize = 2\vsize -} -\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@=\pageheight \advance\dimen@ by-\ht\partialpage - % box0 will be the left-hand column, box1 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 \penalty\outputpenalty -} -\def\pagesofar{% - % The contents of the output page -- any previous material, - % followed by the two boxes we just split. - \unvbox\partialpage - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% -} -\def\enddoublecolumns{% - \output={\balancecolumns}\eject % split what we have - \endgroup - % Back to normal single-column typesetting, but take account of the - % fact that we just accumulated some stuff on the output page. - \pagegoal=\vsize -} -\def\balancecolumns{% - % Called on the last page of the double column material. - \setbox0=\vbox{\unvbox255}% - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 - \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@ by1pt \repeat}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - \pagesofar -} -\catcode `\@=\other - - -\message{sectioning,} -% Define 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} - -\newwrite \contentsfile -% This is called from \setfilename. -\def\opencontents{\openout \contentsfile = \jobname.toc} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise - -\def\thischapter{} \def\thissection{} -\def\seccheck#1{\if \pageno<0 % -\errmessage{@#1 not allowed after generating table of contents}\fi -% -} - -\def\chapternofonts{% -\let\rawbackslash=\relax% -\let\frenchspacing=\relax% -\def\result{\realbackslash result} -\def\equiv{\realbackslash equiv} -\def\expansion{\realbackslash expansion} -\def\print{\realbackslash print} -\def\TeX{\realbackslash TeX} -\def\dots{\realbackslash dots} -\def\copyright{\realbackslash copyright} -\def\tt{\realbackslash tt} -\def\bf{\realbackslash bf } -\def\w{\realbackslash w} -\def\less{\realbackslash less} -\def\gtr{\realbackslash gtr} -\def\hat{\realbackslash hat} -\def\char{\realbackslash char} -\def\tclose##1{\realbackslash tclose {##1}} -\def\code##1{\realbackslash code {##1}} -\def\samp##1{\realbackslash samp {##1}} -\def\r##1{\realbackslash r {##1}} -\def\b##1{\realbackslash b {##1}} -\def\key##1{\realbackslash key {##1}} -\def\file##1{\realbackslash file {##1}} -\def\kbd##1{\realbackslash kbd {##1}} -% These are redefined because @smartitalic wouldn't work inside xdef. -\def\i##1{\realbackslash i {##1}} -\def\cite##1{\realbackslash cite {##1}} -\def\var##1{\realbackslash var {##1}} -\def\emph##1{\realbackslash emph {##1}} -\def\dfn##1{\realbackslash dfn {##1}} -} - -\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 -} - - -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{\seccheck{chapter}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{\putwordChapter \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}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \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{\seccheck{appendix}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \appendixno by 1 \message{Appendix \appendixletter}% -\chapmacro {#1}{\putwordAppendix{} \appendixletter}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry - {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \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}}} - -\outer\def\top{\parsearg\unnumberedyyy} -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{\seccheck{unnumbered}% -\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 the <toks register>. -\toks0 = {#1}\message{(\the\toks0)}% -% -\unnumbchapmacro {#1}% -\gdef\thischapter{#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\global\let\section = \unnumberedsec -\global\let\subsection = \unnumberedsubsec -\global\let\subsubsection = \unnumberedsubsubsec -}} - -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{\seccheck{section}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{\seccheck{appendixsection}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{\seccheck{subsection}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsubsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry % - {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} - {\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry{#1}% - {\appendixletter} - {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsubsubsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -% 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\penalty 10000 % -} - -\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\penalty 10000 % -} - -\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 printing,} -% Finish up the main text and prepare to read what we've written -% to \contentsfile. - -\newskip\contentsrightmargin \contentsrightmargin=1in -\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 \contentsfile - \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. - \fi - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - \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. -} - - -% Normal (long) toc. -\outer\def\contents{% - \startcontents{\putwordTableofContents}% - \input \jobname.toc - \endgroup - \vfill \eject -} - -% And just the chapters. -\outer\def\summarycontents{% - \startcontents{\putwordShortContents}% - % - \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{} - \input \jobname.toc - \endgroup - \vfill \eject -} -\let\shortcontents = \summarycontents - -% 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{#3}}% -} - -% 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. -\setbox0 = \hbox{\shortcontrm \putwordAppendix } -\newdimen\shortappendixwidth \shortappendixwidth = \wd0 - -\def\shortchaplabel#1{% - % 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{#2}}} - -% 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{#2}}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno{#2}}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno{#2}}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno{#2}}% -\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.) -% -% \turnoffactive is for the sake of @" used for umlauts. -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - \entry{\turnoffactive #1}{\turnoffactive #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,} - -% 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\,=\ptexcomma -\let\~=\ptextilde -\let\{=\ptexlbrace -\let\}=\ptexrbrace -\let\.=\ptexdot -\let\*=\ptexstar -\let\dots=\ptexdots -\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}} -\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} -\def\@{@}% -\let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext -% -\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: draw rectangle w/rounded corners around argument -\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 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \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 -} - -% To ending 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}% - -% This macro is -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \rawbackslash % have \ input char produce \ char from current font - \gobble -} - -% Define the \E... control sequence only if we are inside the -% environment, so the error checking in \end will work. -% -% We must call \lisp last in the definition, since it reads the -% return following the @example (or whatever) command. -% -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} -\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} -\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} - -% @smallexample and @smalllisp. This is not used unless the @smallbook -% command is given. Originally contributed by Pavel@xerox. -% -\def\smalllispx{\begingroup - \nonfillstart - \let\Esmalllisp = \nonfillfinish - \let\Esmallexample = \nonfillfinish - % - % Smaller fonts for small examples. - \indexfonts \tt - \rawbackslash % make \ output the \ character from the current font (tt) - \gobble -} - -% This is @display; same as @lisp except use roman font. -% -\def\display{\begingroup - \nonfillstart - \let\Edisplay = \nonfillfinish - \gobble -} - -% This is @format; same as @display except don't narrow margins. -% -\def\format{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eformat = \nonfillfinish - \gobble -} - -% @flushleft (same as @format) and @flushright. -% -\def\flushleft{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushleft = \nonfillfinish - \gobble -} -\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,} -% Define formatter for defuns -% First, 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`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&} -\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} - -% 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 -\dimen3=\rightskip -\advance\dimen3 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 \advance \hsize by -\dimen3 -\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% -% 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 \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % 61 is `=' -\obeylines\activeparens\spacesplit#3} - -\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 \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} - -\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 \advance \rightskip 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 \advance \rightskip 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 \advance \rightskip 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, putting the result in \tptemp. -% -\def\removeemptybraces\empty#1\relax{\def\tptemp{#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{% - \removeemptybraces#2\relax - #1{\tptemp}{#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 \advance \rightskip 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. -\hyphenchar\tensl=0 -#1% -\hyphenchar\tensl=45 -\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi% -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -} - -\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\penalty 10000\vskip -\parskip\penalty 10000% -} - -% 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}{Function}% -\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}{Function}% -\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}{Macro}% -\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}{Special Form}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% This definition is run if you use @defunx -% anywhere other than immediately after a @defun or @defunx. - -\def\deffnx #1 {\errmessage{@deffnx in invalid context}} -\def\defunx #1 {\errmessage{@defunx in invalid context}} -\def\defmacx #1 {\errmessage{@defmacx in invalid context}} -\def\defspecx #1 {\errmessage{@defspecx in invalid context}} -\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} - -% @defmethod, and so on - -% @defop {Funny Method} foo-class frobnicate argument - -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} - -\def\defopheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index -\begingroup\defname {#2}{\defoptype{} on #1}% -\defunargs {#3}\endgroup % -} - -% @defmethod == @defop Method - -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} - -\def\defmethodheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% entry in function index -\begingroup\defname {#2}{Method on #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}}{of #1}% Make entry in var index -\begingroup\defname {#2}{\defcvtype{} of #1}% -\defvarargs {#3}\endgroup % -} - -% @defivar == @defcv {Instance Variable} - -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} - -\def\defivarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{Instance Variable of #1}% -\defvarargs {#3}\endgroup % -} - -% These definitions are run if you use @defmethodx, etc., -% anywhere other than immediately after a @defmethod, etc. - -\def\defopx #1 {\errmessage{@defopx in invalid context}} -\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} -\def\defcvx #1 {\errmessage{@defcvx in invalid context}} -\def\defivarx #1 {\errmessage{@defivarx in invalid context}} - -% Now @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\penalty 10000\vskip -\parskip\penalty 10000} - -% @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}{Variable}% -\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}{User Option}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name. -\def\deftypevarheader #1#2{% -\doind {vr}{\code{#2}}% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% -\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% This definition is run if you use @defvarx -% anywhere other than immediately after a @defvar or @defvarx. - -\def\defvrx #1 {\errmessage{@defvrx in invalid context}} -\def\defvarx #1 {\errmessage{@defvarx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} - -% 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} - -% This definition is run if you use @deftpx, etc -% anywhere other than immediately after a @deftp, etc. - -\def\deftpx #1 {\errmessage{@deftpx in invalid context}} - - -\message{cross reference,} -% Define cross-reference macros -\newwrite \auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% \setref{foo} defines a cross-reference point named foo. - -\def\setref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ysectionnumberandtype}} - -\def\unnumbsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ynothing}} - -\def\appendixsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Yappendixletterandtype}} - -% \xref, \pxref, and \ref generate cross-references to specified points. -% 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 - \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. - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' in \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. - {\turnoffactive \refx{#1-snt}{}}% - \space [\printednodename],\space - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi -\endgroup} - -% \dosetq is the interface for calls from other macros - -% Use \turnoffactive so that punctuation chars such as underscore -% work in node names. -\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat% -\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% -\next}} - -% \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. - $\langle$un\-de\-fined$\rangle$% - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \else - % It's defined, so just use it. - \csname X#1\endcsname - \fi - #2% Output the suffix in any case. -} - -% Read the last existing aux file, if any. No error if none exists. - -% This is the macro invoked by entries in the aux file. -\def\xrdef #1#2{ -{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}} - -\def\readauxfile{% -\begingroup -\catcode `\^^@=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\^^C=\other -\catcode `\^^D=\other -\catcode `\^^E=\other -\catcode `\^^F=\other -\catcode `\^^G=\other -\catcode `\^^H=\other -\catcode `\=\other -\catcode `\^^L=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode 26=\other -\catcode `\^^[=\other -\catcode `\^^\=\other -\catcode `\^^]=\other -\catcode `\^^^=\other -\catcode `\^^_=\other -\catcode `\@=\other -\catcode `\^=\other -\catcode `\~=\other -\catcode `\[=\other -\catcode `\]=\other -\catcode`\"=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode `\$=\other -\catcode `\#=\other -\catcode `\&=\other -% `\+ does not work, so use 43. -\catcode 43=\other -% 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. -% 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`\^=7 % to make ^^e4 etc usable in xref tags -\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. -% -\long\gdef\footnotezzz#1{\insert\footins{% - % 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 - % - % 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 - #1\strut}% -} - -}%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} - - -% End of control word definitions. - -\message{and turning on texinfo input format.} - -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% Set some numeric style parameters, for 8.5 x 11 format. - -\hsize = 6in -\hoffset = .25in -\newdimen\defaultparindent \defaultparindent = 15pt -\parindent = \defaultparindent -\parskip 3pt plus 2pt minus 1pt -\setleading{13.2pt} -\advance\topskip by 1.2cm - -\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 - -% 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. This makes it come to about 9pt for the 8.5x11 format. -% -\ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% -\else - \emergencystretch = \hsize - \divide\emergencystretch by 45 -\fi - -% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) -\def\smallbook{ - \global\chapheadingskip = 15pt plus 4pt minus 2pt - \global\secheadingskip = 12pt plus 3pt minus 2pt - \global\subsecheadingskip = 9pt plus 2pt minus 2pt - % - \global\lispnarrowing = 0.3in - \setleading{12pt} - \advance\topskip by -1cm - \global\parskip 2pt plus 1pt - \global\hsize = 5in - \global\vsize=7.5in - \global\tolerance=700 - \global\hfuzz=1pt - \global\contentsrightmargin=0pt - \global\deftypemargin=0pt - \global\defbodyindent=.5cm - % - \global\pagewidth=\hsize - \global\pageheight=\vsize - % - \global\let\smalllisp=\smalllispx - \global\let\smallexample=\smalllispx - \global\def\Esmallexample{\Esmalllisp} -} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{ -\global\tolerance=700 -\global\hfuzz=1pt -\setleading{12pt} -\global\parskip 15pt plus 1pt - -\global\vsize= 53\baselineskip -\advance\vsize by \topskip -%\global\hsize= 5.85in % A4 wide 10pt -\global\hsize= 6.5in -\global\outerhsize=\hsize -\global\advance\outerhsize by 0.5in -\global\outervsize=\vsize -\global\advance\outervsize by 0.6in - -\global\pagewidth=\hsize -\global\pageheight=\vsize -} - -\bindingoffset=0pt -\normaloffset=\hoffset -\pagewidth=\hsize -\pageheight=\vsize - -% Allow control of the text dimensions. Parameters in order: textheight; -% textwidth; voffset; hoffset; binding offset; topskip. -% All require a dimension; -% header is additional; added length extends the bottom of the page. - -\def\changepagesizes#1#2#3#4#5#6{ - \global\vsize= #1 - \global\topskip= #6 - \advance\vsize by \topskip - \global\voffset= #3 - \global\hsize= #2 - \global\outerhsize=\hsize - \global\advance\outerhsize by 0.5in - \global\outervsize=\vsize - \global\advance\outervsize by 0.6in - \global\pagewidth=\hsize - \global\pageheight=\vsize - \global\normaloffset= #4 - \global\bindingoffset= #5} - -% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin -% 29mm, hence bottom margin 28mm, nominal side margin 3cm. -\def\afourlatex - {\global\tolerance=700 - \global\hfuzz=1pt - \setleading{12pt} - \global\parskip 15pt plus 1pt - \advance\baselineskip by 1.6pt - \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} - } - -% Use @afourwide to print on European A4 paper in wide format. -\def\afourwide{\afourpaper -\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} - -% 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 -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} - -% 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\the\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 \char '042}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt \char '176}} -\chardef\hat=`\^ -\catcode`\^=\active -\def\auxhat{\def^{'hat}} -\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 \char '174}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -%\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}} - -% Say @foo, not \foo, in error messages. -\escapechar=`\@ - -% \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} - -@def@normalturnoffactive{@let"=@normaldoublequote -@let\=@normalbackslash -@let~=@normaltilde -@let^=@normalcaret -@let_=@normalunderscore -@let|=@normalverticalbar -@let<=@normalless -@let>=@normalgreater -@let+=@normalplus} - -% 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} - -%% These look ok in all fonts, so just make them not special. The @rm below -%% makes sure that the current font starts out as the newly loaded cmr10 -@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other - -@textfonts -@rm - -@c Local variables: -@c page-delimiter: "^\\\\message" -@c End: diff --git a/readline/emacs_keymap.c b/readline/emacs_keymap.c index 4ba385843f6..daba213ba07 100644 --- a/readline/emacs_keymap.c +++ b/readline/emacs_keymap.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (BUFSIZ) #include <stdio.h> @@ -76,11 +76,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = { { ISFUNC, rl_insert }, /* & */ { ISFUNC, rl_insert }, /* ' */ { ISFUNC, rl_insert }, /* ( */ -#if defined (PAREN_MATCHING) - { ISFUNC, rl_insert_close }, /* ) */ -#else { ISFUNC, rl_insert }, /* ) */ -#endif /* !PAREN_MATCHING */ { ISFUNC, rl_insert }, /* * */ { ISFUNC, rl_insert }, /* + */ { ISFUNC, rl_insert }, /* , */ @@ -140,11 +136,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = { /* Some more punctuation. */ { ISFUNC, rl_insert }, /* [ */ { ISFUNC, rl_insert }, /* \ */ -#if defined (PAREN_MATCHING) - { ISFUNC, rl_insert_close }, /* ] */ -#else { ISFUNC, rl_insert }, /* ] */ -#endif /* !PAREN_MATCHING */ { ISFUNC, rl_insert }, /* ^ */ { ISFUNC, rl_insert }, /* _ */ { ISFUNC, rl_insert }, /* ` */ @@ -180,11 +172,7 @@ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = { /* Final punctuation. */ { ISFUNC, rl_insert }, /* { */ { ISFUNC, rl_insert }, /* | */ -#if defined (PAREN_MATCHING) - { ISFUNC, rl_insert_close }, /* } */ -#else { ISFUNC, rl_insert }, /* } */ -#endif /* !PAREN_MATCHING */ { ISFUNC, rl_insert }, /* ~ */ { ISFUNC, rl_rubout }, /* RUBOUT */ diff --git a/readline/examples/ChangeLog.Cygnus b/readline/examples/ChangeLog.Cygnus new file mode 100644 index 00000000000..43adfc10356 --- /dev/null +++ b/readline/examples/ChangeLog.Cygnus @@ -0,0 +1,6 @@ +2000-07-09 Elena Zannoni <ezannoni@kwikemart.cygnus.com> + + * Import of readline 4.1. + + New files: excallback.c, rlfe.c. + diff --git a/readline/examples/Makefile.in b/readline/examples/Makefile.in index 879aa49555b..7246e75f8ce 100644 --- a/readline/examples/Makefile.in +++ b/readline/examples/Makefile.in @@ -1,5 +1,22 @@ -# This is the Makefile for the examples subdirectory of readline. -*- text -*- # +# This is the Makefile for the readline examples subdirectory. +# +# Copyright (C) 1994 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. + SHELL = @MAKE_SHELL@ RM = rm -f @@ -11,7 +28,7 @@ BUILD_DIR = . DEFS = @DEFS@ CC = @CC@ CFLAGS = @CFLAGS@ -LOCAL_CFLAGS = @LOCAL_CFLAGS@ +LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY CPPFLAGS = @CPPFLAGS@ INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. @@ -19,6 +36,9 @@ INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) LDFLAGS = -g -L.. +READLINE_LIB = ../libreadline.a +HISTORY_LIB = ../libhistory.a + TERMCAP_LIB = @TERMCAP_LIB@ .c.o: @@ -39,12 +59,12 @@ fileman: fileman.o rltest: rltest.o $(CC) $(LDFLAGS) -o $@ rltest.o -lreadline $(TERMCAP_LIB) -rlversion: rlversion.o +rlversion: rlversion.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlversion.o -lreadline $(TERMCAP_LIB) clean mostlyclean: $(RM) $(OBJECTS) - $(RM) $(EXECUTABLES) + $(RM) $(EXECUTABLES) *.exe distclean maintainer-clean: clean $(RM) Makefile @@ -53,3 +73,13 @@ fileman.o: fileman.c rltest.o: rltest.c rl.o: rl.c rlversion.o: rlversion.c + +# Stuff for Per Bothner's `rlfe' program + +rlfe: rlfe.o $(READLINE_LIB) $(HISTORY_LIB) + $(CC) $(LDFLAGS) -o $@ rlfe.o -lreadline -lhistory ${TERMCAP_LIB} + +rlfe.o: rlfe.c + +rlfe.o: $(top_srcdir)/readline.h +rlfe.o: $(top_srcdir)/history.h diff --git a/readline/examples/fileman.c b/readline/examples/fileman.c index 0702a5badc7..dc29a40104f 100644 --- a/readline/examples/fileman.c +++ b/readline/examples/fileman.c @@ -1,22 +1,22 @@ /* 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. */ -/* - * Remove the next line if you're compiling this against an installed - * libreadline.a - */ -#define READLINE_LIBRARY #ifdef HAVE_CONFIG_H -#include <config.h> +# include <config.h> #endif #include <sys/types.h> #ifdef HAVE_SYS_FILE_H -#include <sys/file.h> +# include <sys/file.h> #endif #include <sys/stat.h> +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif + +#include <fcntl.h> #include <stdio.h> #include <errno.h> @@ -26,6 +26,10 @@ # include <strings.h> #endif /* !HAVE_STRING_H */ +#ifdef HAVE_STDLIB_H +# include <stdlib.h> +#endif + #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" @@ -34,7 +38,6 @@ # include <readline/history.h> #endif -extern char *getwd (); extern char *xmalloc (); /* The names of functions that actually do the manipulation. */ @@ -300,7 +303,12 @@ com_view (arg) if (!valid_argument ("view", arg)) return 1; +#if defined (__MSDOS__) + /* more.com doesn't grok slashes in pathnames */ + sprintf (syscom, "less %s", arg); +#else sprintf (syscom, "more %s", arg); +#endif return (system (syscom)); } @@ -406,7 +414,7 @@ com_pwd (ignore) { char dir[1024], *s; - s = getwd (dir); + s = getcwd (dir, sizeof(dir) - 1); if (s == 0) { printf ("Error getting pwd: %s\n", dir); diff --git a/readline/examples/rl.c b/readline/examples/rl.c index 17a63434f24..2d1d17e600d 100644 --- a/readline/examples/rl.c +++ b/readline/examples/rl.c @@ -2,15 +2,9 @@ * rl - command-line interface to read a line from the standard input * (or another fd) using readline. * - * usage: rl [-p prompt] [-u unit] [-d default] + * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ -/* - * Remove the next line if you're compiling this against an installed - * libreadline.a - */ -#define READLINE_LIBRARY - #if defined (HAVE_CONFIG_H) # include <config.h> #endif @@ -18,8 +12,14 @@ #include <stdio.h> #include <sys/types.h> #include "posixstat.h" -#include "readline.h" -#include "history.h" + +#if defined (READLINE_LIBRARY) +# include "readline.h" +# include "history.h" +#else +# include <readline/readline.h> +# include <readline/history.h> +#endif extern int optind; extern char *optarg; @@ -40,22 +40,24 @@ set_deftext () deftext = (char *)NULL; rl_startup_hook = (Function *)NULL; } + return 0; } static void usage() { - fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default]\n", + fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } +int main (argc, argv) int argc; char **argv; { char *temp, *prompt; struct stat sb; - int opt, fd; + int opt, fd, nch; FILE *ifp; progname = strrchr(argv[0], '/'); @@ -66,10 +68,10 @@ main (argc, argv) /* defaults */ prompt = "readline$ "; - fd = 0; + fd = nch = 0; deftext = (char *)0; - while ((opt = getopt(argc, argv, "p:u:d:")) != EOF) + while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) { switch (opt) { @@ -87,6 +89,14 @@ main (argc, argv) case 'd': deftext = optarg; break; + case 'n': + nch = atoi(optarg); + if (nch < 0) + { + fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); + exit (2); + } + break; default: usage (); exit (2); @@ -107,6 +117,9 @@ main (argc, argv) if (deftext && *deftext) rl_startup_hook = set_deftext; + if (nch > 0) + rl_num_chars_to_read = nch; + temp = readline (prompt); /* Test for EOF. */ diff --git a/readline/examples/rltest.c b/readline/examples/rltest.c index 453f8ec2ada..6250f900d42 100644 --- a/readline/examples/rltest.c +++ b/readline/examples/rltest.c @@ -4,20 +4,20 @@ /* */ /* **************************************************************** */ -/* - * Remove the next line if you're compiling this against an installed - * libreadline.a - */ -#define READLINE_LIBRARY - #if defined (HAVE_CONFIG_H) #include <config.h> #endif #include <stdio.h> #include <sys/types.h> -#include "readline.h" -#include "history.h" + +#ifdef READLINE_LIBRARY +# include "readline.h" +# include "history.h" +#else +# include <readline/readline.h> +# include <readline/history.h> +#endif extern HIST_ENTRY **history_list (); diff --git a/readline/examples/rlversion.c b/readline/examples/rlversion.c index 2d73a96c386..652d37ccb88 100644 --- a/readline/examples/rlversion.c +++ b/readline/examples/rlversion.c @@ -2,8 +2,6 @@ * rlversion -- print out readline's version number */ -#define READLINE_LIBRARY - #if defined (HAVE_CONFIG_H) # include <config.h> #endif @@ -12,7 +10,11 @@ #include <sys/types.h> #include "posixstat.h" -#include "readline.h" +#ifdef READLINE_LIBRARY +# include "readline.h" +#else +# include <readline/readline.h> +#endif main() { diff --git a/readline/funmap.c b/readline/funmap.c index f6b86286fe0..1f7ba87129d 100644 --- a/readline/funmap.c +++ b/readline/funmap.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,15 +18,13 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include <config.h> #endif -extern char *xmalloc (), *xrealloc (); - #if !defined (BUFSIZ) #include <stdio.h> #endif /* BUFSIZ */ @@ -40,6 +38,14 @@ extern char *xmalloc (), *xrealloc (); #include "rlconf.h" #include "readline.h" +#include "xmalloc.h" + +#ifdef __STDC__ +typedef int QSFUNC (const void *, const void *); +#else +typedef int QSFUNC (); +#endif + extern int _rl_qsort_string_compare (); FUNMAP **funmap; @@ -240,7 +246,7 @@ rl_funmap_names () result[result_index + 1] = (char *)NULL; } - qsort (result, result_index, sizeof (char *), _rl_qsort_string_compare); + qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); return (result); } diff --git a/readline/histexpand.c b/readline/histexpand.c index 392e6d38d9e..78da3e585a6 100644 --- a/readline/histexpand.c +++ b/readline/histexpand.c @@ -7,7 +7,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY @@ -50,6 +50,9 @@ #include "history.h" #include "histlib.h" +#include "rlshell.h" +#include "xmalloc.h" + #define HISTORY_WORD_DELIMITERS " \t\n;&()|<>" #define HISTORY_QUOTE_CHARACTERS "\"'`" @@ -60,15 +63,10 @@ static char *subst_rhs; static int subst_lhs_len; static int subst_rhs_len; -static char *get_history_word_specifier (); -static char *history_find_word (); - -extern int history_offset; - -extern char *single_quote (); -static char *quote_breaks (); +static char *get_history_word_specifier __P((char *, char *, int *)); +static char *history_find_word __P((char *, int)); -extern char *xmalloc (), *xrealloc (); +static char *quote_breaks __P((char *)); /* Variables exported by this file. */ /* The character that represents the start of a history expansion diff --git a/readline/histfile.c b/readline/histfile.c index 9437e992566..b908e2261f8 100644 --- a/readline/histfile.c +++ b/readline/histfile.c @@ -7,7 +7,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions @@ -35,7 +35,7 @@ #ifndef _MINIX # include <sys/file.h> #endif -#include <sys/stat.h> +#include "posixstat.h" #include <fcntl.h> #if defined (HAVE_STDLIB_H) @@ -54,15 +54,19 @@ # include <strings.h> #endif /* !HAVE_STRING_H */ -#if defined (__EMX__) + +/* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment + on win 95/98/nt), we want to open files with O_BINARY mode so that there + is no \n -> \r\n conversion performed. On other systems, we don't want to + mess around with O_BINARY at all, so we ensure that it's defined to 0. */ +#if defined (__EMX__) || defined (__CYGWIN__) # ifndef O_BINARY # define O_BINARY 0 # endif -#else /* !__EMX__ */ - /* If we're not compiling for __EMX__, we don't want this at all. Ever. */ +#else /* !__EMX__ && !__CYGWIN__ */ # undef O_BINARY # define O_BINARY 0 -#endif /* !__EMX__ */ +#endif /* !__EMX__ && !__CYGWIN__ */ #include <errno.h> #if !defined (errno) @@ -72,10 +76,8 @@ extern int errno; #include "history.h" #include "histlib.h" -/* Functions imported from shell.c */ -extern char *get_env_value (); - -extern char *xmalloc (), *xrealloc (); +#include "rlshell.h" +#include "xmalloc.h" /* Return the string that should be used in the place of this filename. This only matters when you don't specify the @@ -105,7 +107,11 @@ history_filename (filename) return_val = xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */ strcpy (return_val, home); return_val[home_len] = '/'; +#if defined (__MSDOS__) + strcpy (return_val + home_len + 1, "_history"); +#else strcpy (return_val + home_len + 1, ".history"); +#endif return (return_val); } @@ -132,7 +138,7 @@ read_history_range (filename, from, to) { register int line_start, line_end; char *input, *buffer; - int file, current_line; + int file, current_line, chars_read; struct stat finfo; size_t file_size; @@ -140,16 +146,6 @@ read_history_range (filename, from, to) input = history_filename (filename); file = open (input, O_RDONLY|O_BINARY, 0666); - -#ifdef __MSDOS__ - /* MSDOS doesn't allow leading dots in file names. Try again - with the dot replaced by an underscore. */ - if (file < 0 && !filename) - { - input[strlen (input) - 8] = '_'; - file = open (input, O_RDONLY|O_BINARY, 0666); - } -#endif if ((file < 0) || (fstat (file, &finfo) == -1)) goto error_and_exit; @@ -165,11 +161,9 @@ read_history_range (filename, from, to) } buffer = xmalloc (file_size + 1); -#if 0 - if (read (file, buffer, file_size) != file_size) -#else - if (read (file, buffer, file_size) < 0) -#endif + + chars_read = read (file, buffer, file_size); + if (chars_read < 0) { error_and_exit: if (file >= 0) @@ -185,15 +179,15 @@ read_history_range (filename, from, to) /* Set TO to larger than end of file if negative. */ if (to < 0) - to = file_size; + to = chars_read; /* Start at beginning of file, work to end. */ line_start = line_end = current_line = 0; /* Skip lines until we are at FROM. */ - while (line_start < file_size && current_line < from) + while (line_start < chars_read && current_line < from) { - for (line_end = line_start; line_end < file_size; line_end++) + for (line_end = line_start; line_end < chars_read; line_end++) if (buffer[line_end] == '\n') { current_line++; @@ -204,7 +198,7 @@ read_history_range (filename, from, to) } /* If there are lines left to gobble, then gobble them now. */ - for (line_end = line_start; line_end < file_size; line_end++) + for (line_end = line_start; line_end < chars_read; line_end++) if (buffer[line_end] == '\n') { buffer[line_end] = '\0'; @@ -243,19 +237,13 @@ history_truncate_file (fname, lines) filename = history_filename (fname); file = open (filename, O_RDONLY|O_BINARY, 0666); -#ifdef __MSDOS__ - /* MSDOS doesn't allow leading dots in file names. Try again - with the dot replaced by an underscore. */ - if (file < 0 && !fname) - { - filename[strlen (filename) - 8] = '_'; - file = open (filename, O_RDONLY|O_BINARY, 0666); - } -#endif - if (file == -1 || fstat (file, &finfo) == -1) goto truncate_exit; + /* Don't try to truncate non-regular files. */ + if (S_ISREG(finfo.st_mode) == 0) + goto truncate_exit; + file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ @@ -299,11 +287,11 @@ history_truncate_file (fname, lines) truncate to. */ if (i && ((file = open (filename, O_WRONLY|O_TRUNC|O_BINARY, 0600)) != -1)) { - write (file, buffer + i, file_size - i); + write (file, buffer + i, chars_read - i); #if defined (__BEOS__) /* BeOS ignores O_TRUNC. */ - ftruncate (file, file_size - i); + ftruncate (file, chars_read - i); #endif close (file); @@ -334,23 +322,8 @@ history_do_write (filename, nelements, overwrite) if ((file = open (output, mode, 0600)) == -1) { -#ifdef __MSDOS__ - /* MSDOS doesn't allow leading dots in file names. If this is - the default file name, try again with the dot replaced by an - underscore. */ - if (!filename) - { - output[strlen (output) - 8] = '_'; - if ((file = open (output, mode, 0600)) == -1) - { - FREE (output); - return (errno); - } - } -#else FREE (output); return (errno); -#endif } if (nelements > history_length) diff --git a/readline/histlib.h b/readline/histlib.h index 422cf5974db..88a34d10f1d 100644 --- a/readline/histlib.h +++ b/readline/histlib.h @@ -6,7 +6,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -17,7 +17,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_HISTLIB_H_) #define _HISTLIB_H_ @@ -31,8 +31,11 @@ typedef char *CPFunction (); typedef char **CPPFunction (); #endif /* _FUNCTION_DEF */ +#if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) -#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) +#define STREQN(a, b, n) (((n) == 0) ? (1) \ + : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) +#endif #ifndef savestring # ifndef strcpy @@ -79,4 +82,7 @@ extern char *strchr (); #define HISTORY_APPEND 0 #define HISTORY_OVERWRITE 1 +/* Some variable definitions shared across history source files. */ +extern int history_offset; + #endif /* !_HISTLIB_H_ */ diff --git a/readline/history.c b/readline/history.c index d56ffacc6a0..400f18bc602 100644 --- a/readline/history.c +++ b/readline/history.c @@ -7,7 +7,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions @@ -53,7 +53,7 @@ #include "history.h" #include "histlib.h" -extern char *xmalloc (), *xrealloc (); +#include "xmalloc.h" /* The number of slots to increase the_history by. */ #define DEFAULT_HISTORY_GROW_SIZE 50 diff --git a/readline/history.h b/readline/history.h index 8ecce726779..5210deb39a4 100644 --- a/readline/history.h +++ b/readline/history.h @@ -6,7 +6,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -17,7 +17,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #ifndef _HISTORY_H_ #define _HISTORY_H_ @@ -119,7 +119,7 @@ extern int where_history __P((void)); /* Return the history entry at the current position, as determined by history_offset. If there is no entry there, return a NULL pointer. */ -HIST_ENTRY *current_history __P((void)); +extern HIST_ENTRY *current_history __P((void)); /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ @@ -132,7 +132,7 @@ extern int history_total_bytes __P((void)); /* Moving around the history list. */ /* Set the position in the history list to POS. */ -int history_set_pos __P((int)); +extern int history_set_pos __P((int)); /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return @@ -187,7 +187,7 @@ extern int write_history __P((char *)); /* Append NELEMENT entries to FILENAME. The entries appended are from the end of the list minus NELEMENTs up to the end of the list. */ -int append_history __P((int, char *)); +extern int append_history __P((int, char *)); /* Truncate the history file, leaving only the last NLINES lines. */ extern int history_truncate_file __P((char *, int)); diff --git a/readline/histsearch.c b/readline/histsearch.c index 7e98e950acb..8d153b63edd 100644 --- a/readline/histsearch.c +++ b/readline/histsearch.c @@ -7,7 +7,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY @@ -47,9 +47,6 @@ #include "history.h" #include "histlib.h" -/* Variables imported from other history library files. */ -extern int history_offset; - /* The list of alternate characters that can delimit a history search string. */ char *history_search_delimiter_chars = (char *)NULL; diff --git a/readline/input.c b/readline/input.c index a8ba23c3c43..64a55c6f90d 100644 --- a/readline/input.c +++ b/readline/input.c @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -67,39 +67,15 @@ extern int errno; /* Some standard library routines. */ #include "readline.h" +#include "rlprivate.h" +#include "rlshell.h" +#include "xmalloc.h" + /* What kind of non-blocking I/O do we have? */ #if !defined (O_NDELAY) && defined (O_NONBLOCK) # define O_NDELAY O_NONBLOCK /* Posix style */ #endif -/* Functions imported from other files in the library. */ -extern char *xmalloc (), *xrealloc (); - -/* Variables and functions from macro.c. */ -extern void _rl_add_macro_char (); -extern void _rl_with_macro_input (); -extern int _rl_next_macro_key (); -extern int _rl_defining_kbd_macro; - -#if defined (VI_MODE) -extern void _rl_vi_set_last (); -extern int _rl_vi_textmod_command (); -#endif /* VI_MODE */ - -extern FILE *rl_instream, *rl_outstream; -extern Function *rl_last_func; -extern int rl_key_sequence_length; -extern int rl_pending_input; -extern int rl_editing_mode; - -extern Keymap _rl_keymap; - -extern int _rl_convert_meta_chars_to_ascii; - -#if defined (__GO32__) && !defined (HAVE_SELECT) -# include <pc.h> -#endif /* __GO32__ */ - /* Non-null means it is a pointer to a function to run while waiting for character input. */ Function *rl_event_hook = (Function *)NULL; @@ -176,17 +152,6 @@ rl_unget_char (key) static void rl_gather_tyi () { -#if defined (__GO32__) && !defined (HAVE_SELECT) - char input; - - if (isatty (0) && kbhit () && ibuffer_space ()) - { - int i; - i = (*rl_getc_function) (rl_instream); - rl_stuff_char (i); - } -#else /* !__GO32__ */ - int tty; register int tem, result; int chars_avail; @@ -255,7 +220,6 @@ rl_gather_tyi () if (chars_avail) rl_stuff_char (input); } -#endif /* !__GO32__ */ } /* Is there input available to be read on the readline input file @@ -394,14 +358,9 @@ int rl_getc (stream) FILE *stream; { - int result, flags; + int result; unsigned char c; -#if defined (__GO32__) && !defined (HAVE_TERMIOS_H) - if (isatty (0)) - return (getkey () & 0x7F); -#endif /* __GO32__ */ - while (1) { result = read (fileno (stream), &c, sizeof (unsigned char)); @@ -420,40 +379,31 @@ rl_getc (stream) #endif #if defined (EWOULDBLOCK) - if (errno == EWOULDBLOCK) +# define X_EWOULDBLOCK EWOULDBLOCK +#else +# define X_EWOULDBLOCK -99 +#endif + +#if defined (EAGAIN) +# define X_EAGAIN EAGAIN +#else +# define X_EAGAIN -99 +#endif + + if (errno == X_EWOULDBLOCK || errno == X_EAGAIN) { - if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0) + if (unset_nodelay_mode (fileno (stream)) < 0) return (EOF); - if (flags & O_NDELAY) - { - flags &= ~O_NDELAY; - fcntl (fileno (stream), F_SETFL, flags); - continue; - } continue; } -#endif /* EWOULDBLOCK */ -#if defined (_POSIX_VERSION) && defined (EAGAIN) && defined (O_NONBLOCK) - if (errno == EAGAIN) - { - if ((flags = fcntl (fileno (stream), F_GETFL, 0)) < 0) - return (EOF); - if (flags & O_NONBLOCK) - { - flags &= ~O_NONBLOCK; - fcntl (fileno (stream), F_SETFL, flags); - continue; - } - } -#endif /* _POSIX_VERSION && EAGAIN && O_NONBLOCK */ +#undef X_EWOULDBLOCK +#undef X_EAGAIN -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) /* If the error that we received was SIGINT, then try again, this is simply an interrupted system call to read (). Otherwise, some error ocurred, also signifying EOF. */ if (errno != EINTR) return (EOF); -#endif /* !__GO32__ */ } } diff --git a/readline/isearch.c b/readline/isearch.c index 67279e18924..952c10ddf8e 100644 --- a/readline/isearch.c +++ b/readline/isearch.c @@ -12,7 +12,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -23,7 +23,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -48,24 +48,17 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "xmalloc.h" + /* Variables exported to other files in the readline library. */ unsigned char *_rl_isearch_terminators = (unsigned char *)NULL; /* Variables imported from other files in the readline library. */ -extern Keymap _rl_keymap; extern HIST_ENTRY *saved_line_for_history; -extern int rl_line_buffer_len; -extern int rl_point, rl_end; -extern char *rl_line_buffer; - -extern int rl_execute_next (); -extern void rl_extend_line_buffer (); - -extern int _rl_input_available (); - -extern char *xmalloc (), *xrealloc (); -static int rl_search_history (); +/* Forward declarations */ +static int rl_search_history __P((int, int)); /* Last line found by the current incremental search, so we don't `find' identical lines many times in a row. */ diff --git a/readline/keymaps.c b/readline/keymaps.c index c73666bf273..8fb7de3bc1f 100644 --- a/readline/keymaps.c +++ b/readline/keymaps.c @@ -7,7 +7,7 @@ Readline 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 1, or (at your option) any + Free Software Foundation; either version 2, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with Readline; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -30,18 +30,18 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ +#include <stdio.h> /* for FILE * definition for readline.h */ + +#include "readline.h" #include "rlconf.h" -#include "keymaps.h" + #include "emacs_keymap.c" #if defined (VI_MODE) #include "vi_keymap.c" #endif -extern int rl_do_lowercase_version (); -extern int rl_rubout (), rl_insert (); - -extern char *xmalloc (), *xrealloc (); +#include "xmalloc.h" /* **************************************************************** */ /* */ diff --git a/readline/keymaps.h b/readline/keymaps.h index 5dff46f56c2..3a504fb014f 100644 --- a/readline/keymaps.h +++ b/readline/keymaps.h @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,11 +18,15 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #ifndef _KEYMAPS_H_ #define _KEYMAPS_H_ +#ifdef __cplusplus +extern "C" { +#endif + #if defined (READLINE_LIBRARY) # include "rlstdc.h" # include "chardefs.h" @@ -97,4 +101,8 @@ extern Keymap rl_get_keymap __P((void)); /* Set the current keymap to MAP. */ extern void rl_set_keymap __P((Keymap)); +#ifdef __cplusplus +} +#endif + #endif /* _KEYMAPS_H_ */ diff --git a/readline/kill.c b/readline/kill.c index 0b4714fafa8..c3241bdadd0 100644 --- a/readline/kill.c +++ b/readline/kill.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -46,17 +46,8 @@ #include "readline.h" #include "history.h" -extern int _rl_last_command_was_kill; -extern int rl_editing_mode; -extern int rl_explicit_arg; -extern Function *rl_last_func; - -extern void _rl_init_argument (); -extern int _rl_set_mark_at_pos (); -extern void _rl_fix_point (); -extern void _rl_abort_internal (); - -extern char *xmalloc (), *xrealloc (); +#include "rlprivate.h" +#include "xmalloc.h" /* **************************************************************** */ /* */ @@ -385,10 +376,12 @@ int rl_kill_region (count, ignore) int count, ignore; { - int r; + int r, npoint; + npoint = (rl_point < rl_mark) ? rl_point : rl_mark; r = region_kill_internal (1); _rl_fix_point (1); + rl_point = npoint; return r; } @@ -503,7 +496,9 @@ rl_yank_nth_arg_internal (count, ignore, history_skip) { register HIST_ENTRY *entry; char *arg; - int i; + int i, pos; + + pos = where_history (); if (history_skip) { @@ -512,16 +507,10 @@ rl_yank_nth_arg_internal (count, ignore, history_skip) } entry = previous_history (); - if (entry) - { - if (history_skip) - { - for (i = 0; i < history_skip; i++) - next_history (); - } - next_history (); - } - else + + history_set_pos (pos); + + if (entry == 0) { ding (); return -1; diff --git a/readline/macro.c b/readline/macro.c index f3c442b41c3..5a44852f46c 100644 --- a/readline/macro.c +++ b/readline/macro.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -46,19 +46,10 @@ #include "readline.h" #include "history.h" -#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) - -/* Forward definitions. */ -void _rl_push_executing_macro (), _rl_pop_executing_macro (); -void _rl_add_macro_char (); - -/* Extern declarations. */ -extern int rl_explicit_arg; -extern int rl_key_sequence_length; +#include "rlprivate.h" +#include "xmalloc.h" -extern void _rl_abort_internal (); - -extern char *xmalloc (), *xrealloc (); +#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) /* **************************************************************** */ /* */ diff --git a/readline/nls.c b/readline/nls.c index f2d413d59d5..67bed8a6fa4 100644 --- a/readline/nls.c +++ b/readline/nls.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -27,6 +27,8 @@ #include <sys/types.h> +#include <stdio.h> + #if defined (HAVE_UNISTD_H) # include <unistd.h> #endif /* HAVE_UNISTD_H */ @@ -44,13 +46,9 @@ #include <ctype.h> #include "rldefs.h" - -extern int _rl_convert_meta_chars_to_ascii; -extern int _rl_output_meta_chars; -extern int _rl_meta_flag; - -/* Functions imported from shell.c */ -extern char *get_env_value (); +#include "readline.h" +#include "rlshell.h" +#include "rlprivate.h" #if !defined (HAVE_SETLOCALE) /* A list of legal values for the LANG or LC_CTYPE environment variables. @@ -70,12 +68,11 @@ static char *legal_lang_values[] = "iso88599", "iso885910", "koi8r", - "koi8-r", 0 }; -static char *normalize_codeset (); -static char *find_codeset (); +static char *normalize_codeset __P((char *)); +static char *find_codeset __P((char *, size_t *)); #endif /* !HAVE_SETLOCALE */ /* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value diff --git a/readline/parens.c b/readline/parens.c index a500c0afac7..b6de529f1a0 100644 --- a/readline/parens.c +++ b/readline/parens.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,23 +18,11 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #include "rlconf.h" -#if !defined (PAREN_MATCHING) -extern int rl_insert (); - -int -rl_insert_close (count, invoking_key) - int count, invoking_key; -{ - return (rl_insert (count, invoking_key)); -} - -#else /* PAREN_MATCHING */ - #if defined (HAVE_CONFIG_H) # include <config.h> #endif @@ -64,8 +52,9 @@ extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ #include "readline.h" +#include "rlprivate.h" -extern int rl_explicit_arg; +static int find_matching_open __P((char *, int, int)); /* Non-zero means try to blink the matching open parenthesis when the close parenthesis is inserted. */ @@ -75,7 +64,25 @@ int rl_blink_matching_paren = 1; int rl_blink_matching_paren = 0; #endif /* !HAVE_SELECT */ -static int find_matching_open (); +/* Change emacs_standard_keymap to have bindings for paren matching when + ON_OR_OFF is 1, change them back to self_insert when ON_OR_OFF == 0. */ +void +_rl_enable_paren_matching (on_or_off) + int on_or_off; +{ + if (on_or_off) + { /* ([{ */ + rl_bind_key_in_map (')', rl_insert_close, emacs_standard_keymap); + rl_bind_key_in_map (']', rl_insert_close, emacs_standard_keymap); + rl_bind_key_in_map ('}', rl_insert_close, emacs_standard_keymap); + } + else + { /* ([{ */ + rl_bind_key_in_map (')', rl_insert, emacs_standard_keymap); + rl_bind_key_in_map (']', rl_insert, emacs_standard_keymap); + rl_bind_key_in_map ('}', rl_insert, emacs_standard_keymap); + } +} int rl_insert_close (count, invoking_key) @@ -152,5 +159,3 @@ find_matching_open (string, from, closer) } return (i); } - -#endif /* PAREN_MATCHING */ diff --git a/readline/posixdir.h b/readline/posixdir.h index 7480a93d5db..98ced75b346 100644 --- a/readline/posixdir.h +++ b/readline/posixdir.h @@ -6,7 +6,7 @@ Bash 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT @@ -16,7 +16,7 @@ You should have received a copy of the GNU General Public License along with Bash; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ /* This file should be included instead of <dirent.h> or <sys/dir.h>. */ diff --git a/readline/posixjmp.h b/readline/posixjmp.h index 1347cc07ebc..b52aa00332b 100644 --- a/readline/posixjmp.h +++ b/readline/posixjmp.h @@ -1,5 +1,23 @@ /* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */ +/* Copyright (C) 1987,1991 Free Software Foundation, Inc. + + This file is part of GNU Bash, the Bourne Again SHell. + + Bash 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. + + Bash 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 Bash; see the file COPYING. If not, write to the Free + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ + #ifndef _POSIXJMP_H_ #define _POSIXJMP_H_ diff --git a/readline/posixstat.h b/readline/posixstat.h index bfce8c04fef..c93b52887e9 100644 --- a/readline/posixstat.h +++ b/readline/posixstat.h @@ -7,7 +7,7 @@ Bash 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with Bash; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ /* This file should be included instead of <sys/stat.h>. It relies on the local sys/stat.h to work though. */ diff --git a/readline/readline.c b/readline/readline.c index 6bd25f7d939..2c6aef68f48 100644 --- a/readline/readline.c +++ b/readline/readline.c @@ -8,7 +8,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -47,7 +47,6 @@ # include <locale.h> #endif -#include <signal.h> #include <stdio.h> #include "posixjmp.h" @@ -63,119 +62,27 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "rlshell.h" +#include "xmalloc.h" + #ifndef RL_LIBRARY_VERSION -# define RL_LIBRARY_VERSION "4.0" +# define RL_LIBRARY_VERSION "4.1" #endif /* Evaluates its arguments multiple times. */ #define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) -/* NOTE: Functions and variables prefixed with `_rl_' are - pseudo-global: they are global so they can be shared - between files in the readline library, but are not intended - to be visible to readline callers. */ - -/* Variables and functions imported from terminal.c */ -extern int _rl_init_terminal_io (); -extern void _rl_enable_meta_key (); -#ifdef _MINIX -extern void _rl_output_character_function (); -#else -extern int _rl_output_character_function (); -#endif - -extern int _rl_enable_meta; -extern int _rl_term_autowrap; -extern int screenwidth, screenheight, screenchars; - -/* Variables and functions imported from rltty.c. */ -extern void rl_prep_terminal (), rl_deprep_terminal (); -extern void rltty_set_default_bindings (); - -/* Functions imported from util.c. */ -extern void _rl_abort_internal (); -extern void rl_extend_line_buffer (); -extern int alphabetic (); - -/* Functions imported from bind.c. */ -extern void _rl_bind_if_unbound (); - -/* Functions imported from input.c. */ -extern int _rl_any_typein (); -extern void _rl_insert_typein (); -extern int rl_read_key (); - -/* Functions imported from nls.c */ -extern int _rl_init_eightbit (); - -/* Functions imported from shell.c */ -extern char *get_env_value (); - -/* External redisplay functions and variables from display.c */ -extern void _rl_move_vert (); -extern void _rl_update_final (); -extern void _rl_clear_to_eol (); -extern void _rl_clear_screen (); -extern void _rl_erase_entire_line (); - -extern void _rl_erase_at_end_of_line (); -extern void _rl_move_cursor_relative (); - -extern int _rl_vis_botlin; -extern int _rl_last_c_pos; -extern int _rl_horizontal_scroll_mode; -extern int rl_display_fixed; -extern int _rl_suppress_redisplay; -extern char *rl_display_prompt; - -/* Variables imported from complete.c. */ -extern char *rl_completer_word_break_characters; -extern char *rl_basic_word_break_characters; -extern int rl_completion_query_items; -extern int rl_complete_with_tilde_expansion; - -/* Variables and functions from macro.c. */ -extern void _rl_add_macro_char (); -extern void _rl_with_macro_input (); -extern int _rl_next_macro_key (); -extern int _rl_defining_kbd_macro; - -#if defined (VI_MODE) -/* Functions imported from vi_mode.c. */ -extern void _rl_vi_set_last (); -extern void _rl_vi_reset_last (); -extern void _rl_vi_done_inserting (); -extern int _rl_vi_textmod_command (); -extern void _rl_vi_initialize_line (); -#endif /* VI_MODE */ - -extern UNDO_LIST *rl_undo_list; -extern int _rl_doing_an_undo; - /* Forward declarations used in this file. */ -void _rl_free_history_entry (); +void _rl_free_history_entry __P((HIST_ENTRY *)); -int _rl_dispatch (); -int _rl_init_argument (); +static char *readline_internal __P((void)); +static void readline_initialize_everything __P((void)); +static void start_using_history __P((void)); +static void bind_arrow_keys __P((void)); +static int rl_change_case __P((int, int)); -static char *readline_internal (); -static void readline_initialize_everything (); -static void start_using_history (); -static void bind_arrow_keys (); - -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) -static void readline_default_bindings (); -#endif /* !__GO32__ */ - -#if defined (__GO32__) -# include <go32.h> -# include <pc.h> -# if !defined (__DJGPP__) -# undef HANDLE_SIGNALS -# endif /* !__DJGPP__ */ -#endif /* __GO32__ */ - -extern char *xmalloc (), *xrealloc (); +static void readline_default_bindings __P((void)); /* **************************************************************** */ /* */ @@ -185,6 +92,8 @@ extern char *xmalloc (), *xrealloc (); char *rl_library_version = RL_LIBRARY_VERSION; +int rl_gnu_readline_p = 1; + /* A pointer to the keymap that is currently in use. By default, it is the standard emacs keymap. */ Keymap _rl_keymap = emacs_standard_keymap; @@ -247,6 +156,10 @@ int readline_echoing_p = 1; char *rl_prompt; int rl_visible_prompt_length = 0; +/* Set to non-zero by calling application if it has already printed rl_prompt + and does not want readline to do it the first time. */ +int rl_already_prompted = 0; + /* The number of characters read in order to type this complete command. */ int rl_key_sequence_length = 0; @@ -292,6 +205,10 @@ Keymap rl_executing_keymap; /* Non-zero means to erase entire line, including prompt, on empty input lines. */ int rl_erase_empty_line = 0; +/* Non-zero means to read only this many characters rather than up to a + character bound to accept-line. */ +int rl_num_chars_to_read; + /* Line buffer and maintenence. */ char *rl_line_buffer = (char *)NULL; int rl_line_buffer_len = 0; @@ -371,6 +288,8 @@ readline (prompt) STATIC_CALLBACK void readline_internal_setup () { + char *nprompt; + _rl_in_stream = rl_instream; _rl_out_stream = rl_outstream; @@ -379,15 +298,20 @@ readline_internal_setup () if (readline_echoing_p == 0) { - if (rl_prompt) + if (rl_prompt && rl_already_prompted == 0) { - fprintf (_rl_out_stream, "%s", rl_prompt); + nprompt = _rl_strip_prompt (rl_prompt); + fprintf (_rl_out_stream, "%s", nprompt); fflush (_rl_out_stream); + free (nprompt); } } else { - rl_on_new_line (); + if (rl_prompt && rl_already_prompted) + rl_on_new_line_with_prompt (); + else + rl_on_new_line (); (*rl_redisplay_function) (); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) @@ -479,7 +403,7 @@ readline_internal_charloop () } lastc = c; - _rl_dispatch (c, _rl_keymap); + _rl_dispatch ((unsigned char)c, _rl_keymap); /* If there was no change in _rl_last_command_was_kill, then no kill has taken place. Note that if input is pending we are reading @@ -494,6 +418,12 @@ readline_internal_charloop () rl_vi_check (); #endif /* VI_MODE */ + if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read) + { + (*rl_redisplay_function) (); + rl_newline (1, '\n'); + } + if (rl_done == 0) (*rl_redisplay_function) (); @@ -691,6 +621,7 @@ rl_initialize () return 0; } +#if 0 #if defined (__EMX__) static void _emx_build_environ () @@ -714,15 +645,18 @@ _emx_build_environ () *tp = 0; } #endif /* __EMX__ */ +#endif /* Initialize the entire state of the world. */ static void readline_initialize_everything () { +#if 0 #if defined (__EMX__) if (environ == 0) _emx_build_environ (); #endif +#endif /* Find out if we are running in Emacs. */ running_in_emacs = get_env_value ("EMACS") != (char *)0; @@ -747,10 +681,8 @@ readline_initialize_everything () /* Initialize the terminal interface. */ _rl_init_terminal_io ((char *)NULL); -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) /* Bind tty characters to readline functions. */ readline_default_bindings (); -#endif /* !__GO32__ || HAVE_TERMIOS_H */ /* Initialize the function names. */ rl_initialize_funmap (); @@ -799,6 +731,17 @@ bind_arrow_keys_internal () { Function *f; +#if defined (__MSDOS__) + f = rl_function_of_keyseq ("\033[0A", _rl_keymap, (int *)NULL); + if (!f || f == rl_do_lowercase_version) + { + _rl_bind_if_unbound ("\033[0A", rl_get_previous_history); + _rl_bind_if_unbound ("\033[0B", rl_backward); + _rl_bind_if_unbound ("\033[0C", rl_forward); + _rl_bind_if_unbound ("\033[0D", rl_get_next_history); + } +#endif + f = rl_function_of_keyseq ("\033[A", _rl_keymap, (int *)NULL); if (!f || f == rl_do_lowercase_version) { @@ -1123,6 +1066,10 @@ rl_forward (count, key) else rl_point = end; } + + if (rl_end < 0) + rl_end = 0; + return 0; } @@ -1257,35 +1204,14 @@ int rl_refresh_line (ignore1, ignore2) int ignore1, ignore2; { - int curr_line, nleft; + int curr_line; - /* Find out whether or not there might be invisible characters in the - editing buffer. */ - if (rl_display_prompt == rl_prompt) - nleft = _rl_last_c_pos - screenwidth - rl_visible_prompt_length; - else - nleft = _rl_last_c_pos - screenwidth; - - if (nleft > 0) - curr_line = 1 + nleft / screenwidth; - else - curr_line = 0; + curr_line = _rl_current_display_line (); _rl_move_vert (curr_line); _rl_move_cursor_relative (0, the_line); /* XXX is this right */ -#if defined (__GO32__) && !defined (__DJGPP__) - { - int row, col, width, row_start; - - ScreenGetCursor (&row, &col); - width = ScreenCols (); - row_start = ScreenPrimary + (row * width); - memset (row_start + col, 0, (width - col) * 2); - } -#else /* !__GO32__ || __DJGPP__ */ _rl_clear_to_eol (0); /* arg of 0 means to not use spaces */ -#endif /* !__GO32__ || __DJGPP__ */ rl_forced_update_display (); rl_display_fixed = 1; @@ -1423,7 +1349,14 @@ rl_quoted_insert (count, key) { int c; +#if defined (HANDLE_SIGNALS) + _rl_disable_tty_signals (); +#endif c = rl_read_key (); +#if defined (HANDLE_SIGNALS) + _rl_restore_tty_signals (); +#endif + return (rl_insert (count, c)); } @@ -1617,8 +1550,6 @@ rl_insert_comment (count, key) #define DownCase 2 #define CapCase 3 -static int rl_change_case (); - /* Uppercase the word at point. */ int rl_upcase_word (count, key) diff --git a/readline/readline.h b/readline/readline.h index dba1a0fdde9..fc28d6ececc 100644 --- a/readline/readline.h +++ b/readline/readline.h @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_READLINE_H_) #define _READLINE_H_ @@ -192,7 +192,7 @@ extern int rl_noninc_reverse_search __P((int, int)); extern int rl_noninc_forward_search_again __P((int, int)); extern int rl_noninc_reverse_search_again __P((int, int)); -/* Not available unless readline is compiled -DPAREN_MATCHING. */ +/* Bindable command used when inserting a matching close character. */ extern int rl_insert_close __P((int, int)); /* Not available unless READLINE_CALLBACKS is defined. */ @@ -331,11 +331,12 @@ extern int rl_modifying __P((int, int)); /* Functions for redisplay. */ extern void rl_redisplay __P((void)); extern int rl_on_new_line __P((void)); +extern int rl_on_new_line_with_prompt __P((void)); extern int rl_forced_update_display __P((void)); extern int rl_clear_message __P((void)); extern int rl_reset_line_state __P((void)); -#if defined (__STDC__) && defined (USE_VARARGS) && defined (PREFER_STDARG) +#if (defined (__STDC__) || defined (__cplusplus)) && defined (USE_VARARGS) && defined (PREFER_STDARG) extern int rl_message (const char *, ...); #else extern int rl_message (); @@ -405,6 +406,9 @@ extern char *filename_completion_function __P((char *, int)); /* The version of this incarnation of the readline library. */ extern char *rl_library_version; +/* True if this is real GNU readline. */ +extern int rl_gnu_readline_p; + /* The name of the calling program. You should initialize this to whatever was in argv[0]. It is used when parsing conditionals. */ extern char *rl_readline_name; @@ -468,6 +472,15 @@ extern Keymap rl_binding_keymap; rl_newline. */ extern int rl_erase_empty_line; +/* If non-zero, the application has already printed the prompt (rl_prompt) + before calling readline, so readline should not output it the first time + redisplay is done. */ +extern int rl_already_prompted; + +/* A non-zero value means to read only this many characters rather than + up to a character bound to accept-line. */ +extern int rl_num_chars_to_read; + /* Variables to control readline signal handling. */ /* If non-zero, readline will install its own signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ @@ -610,8 +623,10 @@ extern int rl_inhibit_completion; #define SINGLE_MATCH 1 #define MULT_MATCH 2 +#if 0 #if !defined (savestring) -extern char *savestring (); /* XXX backwards compatibility */ +extern char *savestring __P((char *)); /* XXX backwards compatibility */ +#endif #endif #ifdef __cplusplus diff --git a/readline/rlconf.h b/readline/rlconf.h index 1356fd87924..d2ab7040125 100644 --- a/readline/rlconf.h +++ b/readline/rlconf.h @@ -8,7 +8,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RLCONF_H_) #define _RLCONF_H_ @@ -30,10 +30,6 @@ /* Define this to get an indication of file type when listing completions. */ #define VISIBLE_STATS -/* If defined, readline shows opening parens and braces when closing - paren or brace entered. */ -/* #define PAREN_MATCHING */ - /* This definition is needed by readline.c, rltty.c, and signals.c. */ /* If on, then readline handles signals in a way that doesn't screw. */ #define HANDLE_SIGNALS diff --git a/readline/rldefs.h b/readline/rldefs.h index d4aced43e2a..e504d9b1c30 100644 --- a/readline/rldefs.h +++ b/readline/rldefs.h @@ -10,7 +10,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -21,7 +21,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RLDEFS_H_) #define _RLDEFS_H_ @@ -122,7 +122,8 @@ extern char *xmalloc (); #if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) -#define STREQN(a, b, n) (((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) +#define STREQN(a, b, n) (((n) == 0) ? (1) \ + : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif #if !defined (FREE) diff --git a/readline/rlstdc.h b/readline/rlstdc.h index 08b0f89aa2e..dac8e986e10 100644 --- a/readline/rlstdc.h +++ b/readline/rlstdc.h @@ -7,7 +7,7 @@ Bash 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. Bash is distributed in the hope that it will be useful, but WITHOUT @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with Bash; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RL_STDC_H_) #define _RL_STDC_H_ @@ -28,52 +28,12 @@ and traditional C compilers with something like this: extern char *func __P((char *, char *, int)); */ -#if defined (__STDC__) - -# if !defined (__P) +#if !defined (__P) +# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define __P(protos) protos -# endif -# define __STRING(x) #x - -# if !defined (__GNUC__) -# define inline -# endif - -#else /* !__STDC__ */ - -# if !defined (__P) +# else # define __P(protos) () # endif -# define __STRING(x) "x" - -#if defined (__GNUC__) /* gcc with -traditional */ -# if !defined (const) -# define const __const -# endif -# if !defined (inline) -# define inline __inline -# endif -# if !defined (signed) -# define signed __signed -# endif -# if !defined (volatile) -# define volatile __volatile -# endif -#else /* !__GNUC__ */ -# if !defined (const) -# define const -# endif -# if !defined (inline) -# define inline -# endif -# if !defined (signed) -# define signed -# endif -# if !defined (volatile) -# define volatile -# endif -#endif /* !__GNUC__ */ - -#endif /* !__STDC__ */ +#endif #endif /* !_RL_STDC_H_ */ diff --git a/readline/rltty.c b/readline/rltty.c index 08cd85b0f2d..203056ed093 100644 --- a/readline/rltty.c +++ b/readline/rltty.c @@ -8,7 +8,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -43,28 +43,12 @@ #include "rltty.h" #include "readline.h" +#include "rlprivate.h" #if !defined (errno) extern int errno; #endif /* !errno */ -extern int readline_echoing_p; -extern int _rl_eof_char; - -extern int _rl_enable_keypad, _rl_enable_meta; - -extern void _rl_control_keypad (); - -#if defined (__GO32__) -# include <pc.h> -# if !defined (__DJGPP__) -# undef HANDLE_SIGNALS -# endif /* !__DJGPP__ */ -#endif /* __GO32__ */ - -/* Indirect functions to allow apps control over terminal management. */ -extern void rl_prep_terminal (), rl_deprep_terminal (); - VFunction *rl_prep_term_function = rl_prep_terminal; VFunction *rl_deprep_term_function = rl_deprep_terminal; @@ -106,6 +90,7 @@ block_sigint () # endif /* HAVE_USG_SIGHOLD */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ + sigint_blocked = 1; } @@ -113,7 +98,7 @@ block_sigint () static void release_sigint () { - if (!sigint_blocked) + if (sigint_blocked == 0) return; #if defined (HAVE_POSIX_SIGNALS) @@ -140,25 +125,27 @@ release_sigint () /* Non-zero means that the terminal is in a prepped state. */ static int terminal_prepped; +static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars; + /* If non-zero, means that this process has called tcflow(fd, TCOOFF) and output is suspended. */ #if defined (__ksr1__) static int ksrflow; #endif -#if defined (TIOCGWINSZ) /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ static void set_winsize (tty) int tty; { +#if defined (TIOCGWINSZ) struct winsize w; if (ioctl (tty, TIOCGWINSZ, &w) == 0) (void) ioctl (tty, TIOCSWINSZ, &w); -} #endif /* TIOCGWINSZ */ +} #if defined (NEW_TTY_DRIVER) @@ -186,6 +173,42 @@ struct bsdtty { static TIOTYPE otio; +static void +save_tty_chars (tiop) + TIOTYPE *tiop; +{ + _rl_last_tty_chars = _rl_tty_chars; + + if (tiop->flags & SGTTY_SET) + { + _rl_tty_chars.t_erase = tiop->sgttyb.sg_erase; + _rl_tty_chars.t_kill = tiop->sgttyb.sg_kill; + } + + if (tiop->flags & TCHARS_SET) + { + _rl_tty_chars.t_intr = tiop->tchars.t_intrc; + _rl_tty_chars.t_quit = tiop->tchars.t_quitc; + _rl_tty_chars.t_start = tiop->tchars.t_startc; + _rl_tty_chars.t_stop = tiop->tchars.t_stopc + _rl_tty_chars.t_eof = tiop->tchars.t_eofc; + _rl_tty_chars.t_eol = '\n'; + _rl_tty_chars.t_eol2 = tiop->tchars.t_brkc; + } + + if (tiop->flags & LTCHARS_SET) + { + _rl_tty_chars.t_susp = tiop->ltchars.t_suspc; + _rl_tty_chars.t_dsusp = tiop->ltchars.t_dsuspc; + _rl_tty_chars.t_reprint = tiop->ltchars.t_rprntc; + _rl_tty_chars.t_flush = tiop->ltchars.t_flushc; + _rl_tty_chars.t_werase = tiop->ltchars.t_werasc; + _rl_tty_chars.t_lnext = tiop->ltchars.t_lnextc; + } + + _rl_tty_chars.t_status = -1; +} + static int get_tty_settings (tty, tiop) int tty; @@ -262,7 +285,6 @@ prepare_terminal_settings (meta_flag, otio, tiop) int meta_flag; TIOTYPE otio, *tiop; { -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) readline_echoing_p = (otio.sgttyb.sg_flags & ECHO); /* Copy the original settings to the structure we're going to use for @@ -328,7 +350,6 @@ prepare_terminal_settings (meta_flag, otio, tiop) tiop->ltchars.t_dsuspc = -1; /* C-y */ tiop->ltchars.t_lnextc = -1; /* C-v */ #endif /* TIOCGLTC */ -#endif /* !__GO32__ || HAVE_TERMIOS_H */ } #else /* !defined (NEW_TTY_DRIVER) */ @@ -366,11 +387,58 @@ static TIOTYPE otio; #endif static void +save_tty_chars (tiop) + TIOTYPE *tiop; +{ + _rl_last_tty_chars = _rl_tty_chars; + + _rl_tty_chars.t_eof = tiop->c_cc[VEOF]; + _rl_tty_chars.t_eol = tiop->c_cc[VEOL]; +#ifdef VEOL2 + _rl_tty_chars.t_eol2 = tiop->c_cc[VEOL2]; +#endif + _rl_tty_chars.t_erase = tiop->c_cc[VERASE]; +#ifdef VWERASE + _rl_tty_chars.t_werase = tiop->c_cc[VWERASE]; +#endif + _rl_tty_chars.t_kill = tiop->c_cc[VKILL]; +#ifdef VREPRINT + _rl_tty_chars.t_reprint = tiop->c_cc[VREPRINT]; +#endif + _rl_tty_chars.t_intr = tiop->c_cc[VINTR]; + _rl_tty_chars.t_quit = tiop->c_cc[VQUIT]; +#ifdef VSUSP + _rl_tty_chars.t_susp = tiop->c_cc[VSUSP]; +#endif +#ifdef VDSUSP + _rl_tty_chars.t_dsusp = tiop->c_cc[VDSUSP]; +#endif +#ifdef VSTART + _rl_tty_chars.t_start = tiop->c_cc[VSTART]; +#endif +#ifdef VSTOP + _rl_tty_chars.t_stop = tiop->c_cc[VSTOP]; +#endif +#ifdef VLNEXT + _rl_tty_chars.t_lnext = tiop->c_cc[VLNEXT]; +#endif +#ifdef VDISCARD + _rl_tty_chars.t_flush = tiop->c_cc[VDISCARD]; +#endif +#ifdef VSTATUS + _rl_tty_chars.t_status = tiop->c_cc[VSTATUS]; +#endif +} + +#if defined (_AIX) || defined (_AIX41) +/* Currently this is only used on AIX */ +static void rltty_warning (msg) char *msg; { fprintf (stderr, "readline: warning: %s\n", msg); } +#endif #if defined (_AIX) void @@ -386,16 +454,12 @@ TIOTYPE *tp; #endif static int -get_tty_settings (tty, tiop) +_get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { int ioctl_ret; -#if defined (TIOCGWINSZ) - set_winsize (tty); -#endif - while (1) { ioctl_ret = GETATTR (tty, tiop); @@ -419,6 +483,21 @@ get_tty_settings (tty, tiop) break; } + return 0; +} + +static int +get_tty_settings (tty, tiop) + int tty; + TIOTYPE *tiop; +{ +#if defined (TIOCGWINSZ) + set_winsize (tty); +#endif + + if (_get_tty_settings (tty, tiop) < 0) + return -1; + #if defined (_AIX) setopost(tiop); #endif @@ -427,7 +506,7 @@ get_tty_settings (tty, tiop) } static int -set_tty_settings (tty, tiop) +_set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { @@ -437,7 +516,17 @@ set_tty_settings (tty, tiop) return -1; errno = 0; } + return 0; +} +static int +set_tty_settings (tty, tiop) + int tty; + TIOTYPE *tiop; +{ + if (_set_tty_settings (tty, tiop) < 0) + return -1; + #if 0 #if defined (TERMIOS_TTY_DRIVER) @@ -454,7 +543,7 @@ set_tty_settings (tty, tiop) ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */ #endif /* !TERMIOS_TTY_DRIVER */ -#endif +#endif /* 0 */ return 0; } @@ -526,7 +615,6 @@ void rl_prep_terminal (meta_flag) int meta_flag; { -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) int tty; TIOTYPE tio; @@ -546,6 +634,8 @@ rl_prep_terminal (meta_flag) otio = tio; + save_tty_chars (&otio); + prepare_terminal_settings (meta_flag, otio, &tio); if (set_tty_settings (tty, &tio) < 0) @@ -561,14 +651,12 @@ rl_prep_terminal (meta_flag) terminal_prepped = 1; release_sigint (); -#endif /* !__GO32__ || HAVE_TERMIOS_H */ } /* Restore the terminal's normal settings and modes. */ void rl_deprep_terminal () { -#if !defined (__GO32__) || defined (HAVE_TERMIOS_H) int tty; if (!terminal_prepped) @@ -593,7 +681,6 @@ rl_deprep_terminal () terminal_prepped = 0; release_sigint (); -#endif /* !__GO32__ || HAVE_TERMIOS_H */ } /* **************************************************************** */ @@ -731,3 +818,54 @@ rltty_set_default_bindings (kmap) } #endif /* !NEW_TTY_DRIVER */ } + +#if defined (HANDLE_SIGNALS) + +#if defined (NEW_TTY_DRIVER) +int +_rl_disable_tty_signals () +{ + return 0; +} + +int +_rl_restore_tty_signals () +{ + return 0; +} +#else + +static TIOTYPE sigstty, nosigstty; +static int tty_sigs_disabled = 0; + +int +_rl_disable_tty_signals () +{ + if (tty_sigs_disabled) + return 0; + + if (_get_tty_settings (fileno (rl_instream), &sigstty) < 0) + return -1; + + nosigstty = sigstty; + + nosigstty.c_lflag &= ~ISIG; + + if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0) + return (_set_tty_settings (fileno (rl_instream), &sigstty)); + + tty_sigs_disabled = 1; + return 0; +} + +int +_rl_restore_tty_signals () +{ + if (tty_sigs_disabled == 0) + return 0; + + return (_set_tty_settings (fileno (rl_instream), &sigstty)); +} +#endif /* !NEW_TTY_DRIVER */ + +#endif /* HANDLE_SIGNALS */ diff --git a/readline/rltty.h b/readline/rltty.h index fe783463f6a..029a3fbc0e1 100644 --- a/readline/rltty.h +++ b/readline/rltty.h @@ -8,7 +8,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -19,10 +19,10 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RLTTY_H_) -#define _RLTTY_H +#define _RLTTY_H_ /* Posix systems use termios and the Posix signal functions. */ #if defined (TERMIOS_TTY_DRIVER) @@ -60,4 +60,23 @@ # endif /* !_SVR4_DISABLE */ #endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */ +typedef struct _rl_tty_chars { + char t_eof; + char t_eol; + char t_eol2; + char t_erase; + char t_werase; + char t_kill; + char t_reprint; + char t_intr; + char t_quit; + char t_susp; + char t_dsusp; + char t_start; + char t_stop; + char t_lnext; + char t_flush; + char t_status; +} _RL_TTY_CHARS; + #endif /* _RLTTY_H_ */ diff --git a/readline/rlwinsize.h b/readline/rlwinsize.h index 92b3de174bf..7838154d023 100644 --- a/readline/rlwinsize.h +++ b/readline/rlwinsize.h @@ -9,7 +9,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -20,7 +20,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RLWINSIZE_H_) #define _RLWINSIZE_H_ @@ -55,4 +55,3 @@ #endif /* _RL_WINSIZE_H */ - diff --git a/readline/savestring.c b/readline/savestring.c index 3f53a87bcd1..485890ea57c 100644 --- a/readline/savestring.c +++ b/readline/savestring.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ extern char *strcpy (); extern char *xmalloc (); diff --git a/readline/search.c b/readline/search.c index 6c76e1a1c96..112f8072866 100644 --- a/readline/search.c +++ b/readline/search.c @@ -8,7 +8,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -43,30 +43,51 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "xmalloc.h" + #ifdef abs # undef abs #endif #define abs(x) (((x) >= 0) ? (x) : -(x)) -extern char *xmalloc (), *xrealloc (); - -/* Variables imported from readline.c */ -extern int rl_point, rl_end, rl_line_buffer_len; -extern int rl_editing_mode; -extern char *rl_prompt; -extern char *rl_line_buffer; extern HIST_ENTRY *saved_line_for_history; -extern Function *rl_last_func; /* Functions imported from the rest of the library. */ -extern int _rl_free_history_entry (); -extern char *_rl_make_prompt_for_search (); -extern void rl_extend_line_buffer (); +extern int _rl_free_history_entry __P((HIST_ENTRY *)); static char *noninc_search_string = (char *) NULL; static int noninc_history_pos; + static char *prev_line_found = (char *) NULL; +static int rl_history_search_len; +static int rl_history_search_pos; +static char *history_search_string; +static int history_string_size; + +/* Make the data from the history entry ENTRY be the contents of the + current line. This doesn't do anything with rl_point; the caller + must set it. */ +static void +make_history_line_current (entry) + HIST_ENTRY *entry; +{ + int line_len; + + line_len = strlen (entry->line); + if (line_len >= rl_line_buffer_len) + rl_extend_line_buffer (line_len); + strcpy (rl_line_buffer, entry->line); + + rl_undo_list = (UNDO_LIST *)entry->data; + rl_end = line_len; + + if (saved_line_for_history) + _rl_free_history_entry (saved_line_for_history); + saved_line_for_history = (HIST_ENTRY *)NULL; +} + /* Search the history list for STRING starting at absolute history position POS. If STRING begins with `^', the search must match STRING at the beginning of a history line, otherwise a full substring match is performed @@ -102,7 +123,7 @@ noninc_dosearch (string, dir) char *string; int dir; { - int oldpos, pos, line_len; + int oldpos, pos; HIST_ENTRY *entry; if (string == 0 || *string == '\0' || noninc_history_pos < 0) @@ -132,19 +153,10 @@ noninc_dosearch (string, dir) #endif history_set_pos (oldpos); - line_len = strlen (entry->line); - if (line_len >= rl_line_buffer_len) - rl_extend_line_buffer (line_len); - strcpy (rl_line_buffer, entry->line); + make_history_line_current (entry); - rl_undo_list = (UNDO_LIST *)entry->data; - rl_end = strlen (rl_line_buffer); rl_point = 0; rl_clear_message (); - - if (saved_line_for_history) - _rl_free_history_entry (saved_line_for_history); - saved_line_for_history = (HIST_ENTRY *)NULL; } /* Search non-interactively through the history list. DIR < 0 means to @@ -235,8 +247,7 @@ noninc_search (dir, pchar) { /* We want to start the search from the current history position. */ noninc_history_pos = where_history (); - if (noninc_search_string) - free (noninc_search_string); + FREE (noninc_search_string); noninc_search_string = savestring (rl_line_buffer); } @@ -295,59 +306,84 @@ rl_noninc_reverse_search_again (count, key) } static int -rl_history_search_internal (count, direction) - int count, direction; +rl_history_search_internal (count, dir) + int count, dir; { - HIST_ENTRY *temp, *old_temp; - int line_len; + HIST_ENTRY *temp; + int ret, oldpos; maybe_save_line (); + temp = (HIST_ENTRY *)NULL; - temp = old_temp = (HIST_ENTRY *)NULL; + /* Search COUNT times through the history for a line whose prefix + matches history_search_string. When this loop finishes, TEMP, + if non-null, is the history line to copy into the line buffer. */ while (count) { - temp = (direction < 0) ? previous_history () : next_history (); - if (temp == 0) - break; - /* On an empty prefix, make this the same as previous-history. */ - if (rl_point == 0) - { - count--; - continue; - } - if (STREQN (rl_line_buffer, temp->line, rl_point)) - { - /* Don't find multiple instances of the same line. */ - if (prev_line_found && STREQ (prev_line_found, temp->line)) - continue; - if (direction < 0) - old_temp = temp; - prev_line_found = temp->line; - count--; - } + ret = noninc_search_from_pos (history_search_string, rl_history_search_pos + dir, dir); + if (ret == -1) + break; + + /* Get the history entry we found. */ + rl_history_search_pos = ret; + oldpos = where_history (); + history_set_pos (rl_history_search_pos); + temp = current_history (); + history_set_pos (oldpos); + + /* Don't find multiple instances of the same line. */ + if (prev_line_found && STREQ (prev_line_found, temp->line)) + continue; + prev_line_found = temp->line; + count--; } + /* If we didn't find anything at all, return. */ if (temp == 0) { - if (direction < 0 && old_temp) - temp = old_temp; - else - { - maybe_unsave_line (); - ding (); - return 1; - } + maybe_unsave_line (); + ding (); + /* If you don't want the saved history line (last match) to show up + in the line buffer after the search fails, change the #if 0 to + #if 1 */ +#if 0 + if (rl_point > rl_history_search_len) + { + rl_point = rl_end = rl_history_search_len; + rl_line_buffer[rl_end] = '\0'; + } +#else + rl_point = rl_history_search_len; /* maybe_unsave_line changes it */ +#endif + return 1; } - line_len = strlen (temp->line); - if (line_len >= rl_line_buffer_len) - rl_extend_line_buffer (line_len); - strcpy (rl_line_buffer, temp->line); - rl_undo_list = (UNDO_LIST *)temp->data; - rl_end = line_len; + /* Copy the line we found into the current line buffer. */ + make_history_line_current (temp); + + rl_point = rl_history_search_len; return 0; } +static void +rl_history_search_reinit () +{ + rl_history_search_pos = where_history (); + rl_history_search_len = rl_point; + prev_line_found = (char *)NULL; + if (rl_point) + { + if (rl_history_search_len >= history_string_size - 2) + { + history_string_size = rl_history_search_len + 2; + history_search_string = xrealloc (history_search_string, history_string_size); + } + history_search_string[0] = '^'; + strncpy (history_search_string + 1, rl_line_buffer, rl_point); + history_search_string[rl_point + 1] = '\0'; + } +} + /* Search forward in the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. */ @@ -357,8 +393,13 @@ rl_history_search_forward (count, ignore) { if (count == 0) return (0); - if (rl_last_func != rl_history_search_forward) - prev_line_found = (char *)NULL; + + if (rl_last_func != rl_history_search_forward && + rl_last_func != rl_history_search_backward) + rl_history_search_reinit (); + + if (rl_history_search_len == 0) + return (rl_get_next_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1)); } @@ -371,7 +412,12 @@ rl_history_search_backward (count, ignore) { if (count == 0) return (0); - if (rl_last_func != rl_history_search_backward) - prev_line_found = (char *)NULL; + + if (rl_last_func != rl_history_search_forward && + rl_last_func != rl_history_search_backward) + rl_history_search_reinit (); + + if (rl_history_search_len == 0) + return (rl_get_previous_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1)); } diff --git a/readline/shell.c b/readline/shell.c index f0ddc897fe4..b32726c690a 100644 --- a/readline/shell.c +++ b/readline/shell.c @@ -8,7 +8,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -45,13 +45,21 @@ # include <strings.h> #endif /* !HAVE_STRING_H */ +#include <fcntl.h> #include <pwd.h> +#include <stdio.h> + +#include "rlshell.h" +#include "xmalloc.h" + #if !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid (); #endif /* !HAVE_GETPW_DECLS */ -extern char *xmalloc (); +#ifndef NULL +# define NULL 0 +#endif /* All of these functions are resolved from bash if we are linking readline as part of bash. */ @@ -64,7 +72,7 @@ single_quote (string) register int c; char *result, *r, *s; - result = (char *)xmalloc (3 + (3 * strlen (string))); + result = (char *)xmalloc (3 + (4 * strlen (string))); r = result; *r++ = '\''; @@ -132,3 +140,37 @@ get_home_dir () home_dir = entry->pw_dir; return (home_dir); } + +#if !defined (O_NDELAY) +# if defined (FNDELAY) +# define O_NDELAY FNDELAY +# endif +#endif + +int +unset_nodelay_mode (fd) + int fd; +{ + int flags, bflags; + + if ((flags = fcntl (fd, F_GETFL, 0)) < 0) + return -1; + + bflags = 0; + +#ifdef O_NONBLOCK + bflags |= O_NONBLOCK; +#endif + +#ifdef O_NDELAY + bflags |= O_NDELAY; +#endif + + if (flags & bflags) + { + flags &= ~bflags; + return (fcntl (fd, F_SETFL, flags)); + } + + return 0; +} diff --git a/readline/shlib/Makefile.in b/readline/shlib/Makefile.in index bff52f7d9bf..b1f70dee09a 100644 --- a/readline/shlib/Makefile.in +++ b/readline/shlib/Makefile.in @@ -15,7 +15,8 @@ # 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., 675 Mass Ave, Cambridge, MA 02139, USA. +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA. + RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline @@ -75,9 +76,9 @@ SHLIB_LIBVERSION = @SHLIB_LIBVERSION@ SHLIB_STATUS = @SHLIB_STATUS@ # shared library versioning -SHLIB_MAJOR= 4 +SHLIB_MAJOR= @SHLIB_MAJOR@ # shared library systems like SVR4's do not use minor versions -SHLIB_MINOR= .0 +SHLIB_MINOR= .@SHLIB_MINOR@ # For libraries which include headers from other libraries. INCLUDES = -I. -I.. -I$(topdir) -I$(includedir) @@ -112,7 +113,7 @@ CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \ # The header files for this library. HSOURCES = readline.h rldefs.h chardefs.h keymaps.h history.h histlib.h \ posixstat.h posixdir.h posixjmp.h tilde.h rlconf.h rltty.h \ - ansi_stdlib.h tcap.h + ansi_stdlib.h tcap.h xmalloc.h rlprivate.h rlshell.h SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so SHARED_TILDEOBJ = tilde.so @@ -131,7 +132,7 @@ unsupported: @echo "Your system and compiler (${host_os}-${CC}) are not supported by the" @echo "${topdir}/support/shobj-conf script." @echo "If your operating system provides facilities for creating" - @echo "shared libraries, please update the script and re-run configure. + @echo "shared libraries, please update the script and re-run configure." @echo "Please send the changes you made to bash-maintainers@gnu.org" @echo "for inclusion in future bash and readline releases." @@ -222,6 +223,8 @@ macro.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h macro.so: $(topdir)/tilde.h $(topdir)/history.h nls.so: $(topdir)/ansi_stdlib.h nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h +nls.o: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h +nls.o: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rlstdc.h parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h parens.so: $(topdir)/tilde.h @@ -257,6 +260,54 @@ vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h xmalloc.so: ${BUILD_DIR}/config.h xmalloc.so: $(topdir)/ansi_stdlib.h +bind.so: $(topdir)/rlshell.h +histfile.so: $(topdir)/rlshell.h +nls.so: $(topdir)/rlshell.h +readline.so: $(topdir)/rlshell.h +shell.so: $(topdir)/rlshell.h +terminal.so: $(topdir)/rlshell.h +histexpand.so: $(topdir)/rlshell.h + +bind.so: $(topdir)/rlprivate.h +callback.so: $(topdir)/rlprivate.h +complete.so: $(topdir)/rlprivate.h +display.so: $(topdir)/rlprivate.h +input.so: $(topdir)/rlprivate.h +isearch.so: $(topdir)/rlprivate.h +kill.so: $(topdir)/rlprivate.h +macro.so: $(topdir)/rlprivate.h +nls.so: $(topdir)/rlprivate.h +parens.so: $(topdir)/rlprivate.h +readline.so: $(topdir)/rlprivate.h +rltty.so: $(topdir)/rlprivate.h +search.so: $(topdir)/rlprivate.h +signals.so: $(topdir)/rlprivate.h +terminal.so: $(topdir)/rlprivate.h +undo.so: $(topdir)/rlprivate.h +util.so: $(topdir)/rlprivate.h +vi_mode.so: $(topdir)/rlprivate.h + +bind.so: $(topdir)/xmalloc.h +complete.so: $(topdir)/xmalloc.h +display.so: $(topdir)/xmalloc.h +funmap.so: $(topdir)/xmalloc.h +histexpand.so: $(topdir)/xmalloc.h +histfile.so: $(topdir)/xmalloc.h +history.so: $(topdir)/xmalloc.h +input.so: $(topdir)/xmalloc.h +isearch.so: $(topdir)/xmalloc.h +keymaps.so: $(topdir)/xmalloc.h +kill.so: $(topdir)/xmalloc.h +macro.so: $(topdir)/xmalloc.h +readline.so: $(topdir)/xmalloc.h +savestring.so: $(topdir)/xmalloc.h +search.so: $(topdir)/xmalloc.h +shell.so: $(topdir)/xmalloc.h +tilde.so: $(topdir)/xmalloc.h +tilde.so: $(topdir)/xmalloc.h +util.so: $(topdir)/xmalloc.h +vi_mode.so: $(topdir)/xmalloc.h + readline.so: $(topdir)/readline.c vi_mode.so: $(topdir)/vi_mode.c funmap.so: $(topdir)/funmap.c diff --git a/readline/signals.c b/readline/signals.c index 40e09121c57..283a115906c 100644 --- a/readline/signals.c +++ b/readline/signals.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -40,15 +40,13 @@ # include <sys/ioctl.h> #endif /* GWINSZ_IN_SYS_IOCTL */ -#if defined (__GO32__) && !defined(__DJGPP__) -# undef HANDLE_SIGNALS -#endif /* __GO32__ && !__DJGPP__ */ - #if defined (HANDLE_SIGNALS) /* Some standard library routines. */ #include "readline.h" #include "history.h" +#include "rlprivate.h" + #if !defined (RETSIGTYPE) # if defined (VOID_SIGHANDLER) # define RETSIGTYPE void @@ -67,19 +65,15 @@ to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */ typedef RETSIGTYPE SigHandler (); -extern int readline_echoing_p; -extern int rl_pending_input; -extern int _rl_meta_flag; - -extern void free_undo_list (); -extern void _rl_get_screen_size (); -extern void _rl_redisplay_after_sigwinch (); -extern void _rl_clean_up_for_exit (); -extern void _rl_kill_kbd_macro (); -extern void _rl_init_argument (); -extern void rl_deprep_terminal (), rl_prep_terminal (); +#if defined (HAVE_POSIX_SIGNALS) +typedef struct sigaction sighandler_cxt; +# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh) +#else +typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt; +# define sigemptyset(m) +#endif /* !HAVE_POSIX_SIGNALS */ -static SigHandler *rl_set_sighandler (); +static SigHandler *rl_set_sighandler __P((int, SigHandler *, sighandler_cxt *)); /* Exported variables for use by applications. */ @@ -103,14 +97,6 @@ static int sigwinch_set_flag; /* */ /* **************************************************************** */ -#if defined (HAVE_POSIX_SIGNALS) -typedef struct sigaction sighandler_cxt; -# define rl_sigaction(s, nh, oh) sigaction(s, nh, oh) -#else -typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt; -# define sigemptyset(m) -#endif /* !HAVE_POSIX_SIGNALS */ - static sighandler_cxt old_int, old_term, old_alrm, old_quit; #if defined (SIGTSTP) static sighandler_cxt old_tstp, old_ttou, old_ttin; @@ -167,6 +153,10 @@ rl_signal_handler (sig) # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ +#if defined (__EMX__) + signal (sig, SIG_ACK); +#endif + kill (getpid (), sig); /* Let the signal that we just sent through. */ @@ -234,6 +224,7 @@ rl_set_sighandler (sig, handler, ohandler) SigHandler *handler; sighandler_cxt *ohandler; { + sighandler_cxt old_handler; #if defined (HAVE_POSIX_SIGNALS) struct sigaction act; @@ -241,10 +232,17 @@ rl_set_sighandler (sig, handler, ohandler) act.sa_flags = 0; sigemptyset (&act.sa_mask); sigemptyset (&ohandler->sa_mask); - sigaction (sig, &act, ohandler); + sigaction (sig, &act, &old_handler); #else - ohandler->sa_handler = (SigHandler *)signal (sig, handler); + old_handler.sa_handler = (SigHandler *)signal (sig, handler); #endif /* !HAVE_POSIX_SIGNALS */ + + /* XXX -- assume we have memcpy */ + /* If rl_set_signals is called twice in a row, don't set the old handler to + rl_signal_handler, because that would cause infinite recursion. */ + if (handler != rl_signal_handler || old_handler.sa_handler != rl_signal_handler) + memcpy (ohandler, &old_handler, sizeof (sighandler_cxt)); + return (ohandler->sa_handler); } diff --git a/readline/support/config.guess b/readline/support/config.guess index 66a24282a47..ad5983e7618 100755 --- a/readline/support/config.guess +++ b/readline/support/config.guess @@ -35,6 +35,19 @@ # (but try to keep the structure clean). # +# Use $HOST_CC if defined. $CC may point to a cross-compiler +if test x"$CC_FOR_BUILD" = x; then + if test x"$HOST_CC" != x; then + CC_FOR_BUILD="$HOST_CC" + else + if test x"$CC" != x; then + CC_FOR_BUILD="$CC" + else + CC_FOR_BUILD=cc + fi + fi +fi + # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 8/24/94.) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then @@ -57,7 +70,8 @@ esac REL_LEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.\([0-9]*\)'` # 1 REL_SUBLEVEL=`expr "$UNAME_RELEASE" : '[^0-9]*[0-9]*.[0-9]*.\([0-9]*\)'` # 2 -trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15 +dummy=dummy-$$ +trap 'rm -f $dummy.c $dummy.o $dummy; exit 1' 1 2 15 # Some versions of i386 SVR4.2 make `uname' equivalent to `uname -n', which # is contrary to all other versions of uname @@ -81,9 +95,6 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in i?86:OpenBSD:*:*) echo ${UNAME_MACHINE}-pc-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; - i?86:FreeBSD:*:*) - echo ${UNAME_MACHINE}-pc-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` - exit 0 ;; sparc:NetBSD:*:*) echo sparc-unknown-netbsd${UNAME_RELEASE} exit 0 ;; @@ -151,17 +162,11 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:QNX:*:42*) echo i386-qssl-qnx`echo ${UNAME_VERSION}` exit 0 ;; - BeBox:BeOS:*:*) - echo powerpc-be-beos - exit 0 ;; - BeMac:BeOS:*:*) - echo powerpc-apple-beos - exit 0 ;; - BePC:BeOS:*:*) - echo i586-pc-beos + Alpha*:Windows:NT:*:SP*) + echo alpha-pc-opennt exit 0 ;; - SX-4:SUPER-UX:*:*) - echo sx4-nec-superux${UNAME_RELEASE} + *:Windows:NT:*:SP*) + echo intel-pc-opennt exit 0 ;; # end cases added for Bash alpha:OSF1:*:*) @@ -172,7 +177,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - cat <<EOF >dummy.s + cat <<EOF >$dummy.s .globl main .ent main main: @@ -189,9 +194,9 @@ main: ret \$31,(\$26),1 .end main EOF - ${CC-cc} dummy.s -o dummy 2>/dev/null + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./dummy + ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" @@ -210,9 +215,15 @@ EOF ;; esac fi - rm -f dummy.s dummy - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]` - exit 0 ;; + rm -f $dummy.s $dummy + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + exit 0 ;; + Alpha\ *:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # Should we change UNAME_MACHINE based on the output of uname instead + # of the specific Alpha model? + echo alpha-pc-interix + exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; @@ -255,7 +266,7 @@ EOF SR2?01:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; - Pyramid*:OSx*:*:*|MIS*:OSx*:*:*) + Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 @@ -263,9 +274,12 @@ EOF echo pyramid-pyramid-bsd fi exit 0 ;; - NILE:*:*:dcosx) + NILE:*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; + sun4H:SunOS:5.*:*) + echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` + exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; @@ -287,7 +301,7 @@ EOF # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; - sun3*:SunOS:*:*|sun:SunOS:*:*) + sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) @@ -309,19 +323,45 @@ EOF echo m68k-atari-netbsd${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) - echo m68k-atari-openbsd${UNAME_RELEASE} + echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + # The situation for MiNT is a little confusing. The machine name + # can be virtually everything (everything which is not + # "atarist" or "atariste" at least should have a processor + # > m68000). The system name ranges from "MiNT" over "FreeMiNT" + # to the lowercase version "mint" (or "freemint"). Finally + # the system name "TOS" denotes a system which is actually not + # MiNT. But MiNT is downward compatible to TOS, so this should + # be no problem. + atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) + echo m68k-atari-mint${UNAME_RELEASE} + exit 0 ;; + milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) + echo m68k-milan-mint${UNAME_RELEASE} + exit 0 ;; + hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) + echo m68k-hades-mint${UNAME_RELEASE} + exit 0 ;; + *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) + echo m68k-unknown-mint${UNAME_RELEASE} + exit 0 ;; sun3*:NetBSD:*:*) echo m68k-sun-netbsd${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) - echo m68k-sun-openbsd${UNAME_RELEASE} + echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:NetBSD:*:*) echo m68k-apple-netbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) - echo m68k-apple-openbsd${UNAME_RELEASE} + echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} @@ -329,15 +369,15 @@ EOF mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; - Power?Macintosh:Rhapsody:*:*) - echo powerpc-apple-rhapsody${UNAME_RELEASE} - exit 0 ;; - *:Rhapsody:*:*) - echo ${UNAME_MACHINE}-unknown-rhapsody${UNAME_RELEASE} - exit 0 ;; + *:"Mac OS":*:*) + echo `uname -p`-apple-macos${UNAME_RELEASE} + exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; + macppc:NetBSD:*:*) + echo powerpc-apple-netbsd${UNAME_RELEASE} + exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; @@ -347,12 +387,16 @@ EOF VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; - 2020:CLIX:*:*) + 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) - sed 's/^ //' << EOF >dummy.c - int main (argc, argv) int argc; char **argv; { + sed 's/^ //' << EOF >$dummy.c +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); @@ -367,10 +411,10 @@ EOF exit (-1); } EOF - ${CC-cc} dummy.c -o dummy \ - && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ - && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy \ + && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ + && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Night_Hawk:Power_UNIX:*:*) @@ -389,13 +433,14 @@ EOF # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then - if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ + if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \ -o ${TARGET_BINARY_INTERFACE}x = x ] ; then echo m88k-dg-dgux${UNAME_RELEASE} - else + else echo m88k-dg-dguxbcs${UNAME_RELEASE} - fi - else echo i586-dg-dgux${UNAME_RELEASE} + fi + else + echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) @@ -422,7 +467,7 @@ EOF exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() @@ -433,8 +478,8 @@ EOF exit(0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 @@ -443,7 +488,8 @@ EOF fi exit 0 ;; *:AIX:*:4) - if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then + IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` + if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc @@ -484,17 +530,46 @@ EOF case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; - 9000/78? | 9000/80[24] | 9000/8[67]1 | 9000/8[78]9 | 9000/893 ) - HP_ARCH=hppa2.0 ;; - 9000/7?? | 9000/8?[13679] | 9000/892 ) - HP_ARCH=hppa1.1 ;; - 9000/[68]?? ) HP_ARCH=hppa1.0 ;; + 9000/[678][0-9][0-9]) + sed 's/^ //' << EOF >$dummy.c + #include <stdlib.h> + #include <unistd.h> + + int main () + { + #if defined(_SC_KERNEL_BITS) + long bits = sysconf(_SC_KERNEL_BITS); + #endif + long cpu = sysconf (_SC_CPU_VERSION); + + switch (cpu) + { + case CPU_PA_RISC1_0: puts ("hppa1.0"); break; + case CPU_PA_RISC1_1: puts ("hppa1.1"); break; + case CPU_PA_RISC2_0: + #if defined(_SC_KERNEL_BITS) + switch (bits) + { + case 64: puts ("hppa2.0w"); break; + case 32: puts ("hppa2.0n"); break; + default: puts ("hppa2.0"); break; + } break; + #else /* !defined(_SC_KERNEL_BITS) */ + puts ("hppa2.0"); break; + #endif + default: puts ("hppa1.0"); break; + } + exit (0); + } +EOF + ($CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` + rm -f $dummy.c $dummy esac HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) - sed 's/^ //' << EOF >dummy.c + sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () @@ -519,8 +594,8 @@ EOF exit (0); } EOF - ${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) @@ -529,6 +604,9 @@ EOF 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; + *9??*:MPE/iX:*:*) + echo hppa1.0-hp-mpeix + exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; @@ -537,14 +615,17 @@ EOF exit 0 ;; i?86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then - echo ${UNAME_MACHINE}-pc-osf1mk + echo ${UNAME_MACHINE}-unknown-osf1mk else - echo ${UNAME_MACHINE}-pc-osf1 + echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; + hppa*:OpenBSD:*:*) + echo hppa-unknown-openbsd + exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; @@ -577,11 +658,14 @@ EOF CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} exit 0 ;; + CRAY*T3E:*:*:*) + echo alpha-cray-unicosmk${UNAME_RELEASE} + exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F300:UNIX_System_V:*:*) - FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'` + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; @@ -591,14 +675,26 @@ EOF hp3[0-9][05]:NetBSD:*:*) echo m68k-hp-netbsd${UNAME_RELEASE} exit 0 ;; - hp3[0-9][05]:OpenBSD:*:*) - echo m68k-hp-openbsd${UNAME_RELEASE} - exit 0 ;; - i?86:BSD/386:*:* | *:BSD/OS:*:*) + hp300:OpenBSD:*:*) + echo m68k-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; + i?86:BSD/386:*:* | i?86:BSD/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; + sparc*:BSD/OS:*:*) + echo sparc-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; + *:BSD/OS:*:*) + echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} + exit 0 ;; *:FreeBSD:*:*) - echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + if test -x /usr/bin/objformat; then + if test "elf" = "`/usr/bin/objformat`"; then + echo ${UNAME_MACHINE}-unknown-freebsdelf`echo ${UNAME_RELEASE}|sed -e 's/[-_].*//'` + exit 0 + fi + fi + echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-=(].*//'` exit 0 ;; *:NetBSD:*:*) echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` @@ -607,14 +703,23 @@ EOF echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) - echo i386-pc-cygwin32 + echo ${UNAME_MACHINE}-pc-cygwin32 exit 0 ;; i*:MINGW*:*) - echo i386-pc-mingw32 + echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; + i*:Windows_NT*:* | Pentium*:Windows_NT*:*) + # How do we know it's Interix rather than the generic POSIX subsystem? + # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we + # UNAME_MACHINE based on the output of uname instead of i386? + echo i386-pc-interix + exit 0 ;; + i*:UWIN*:*) + echo ${UNAME_MACHINE}-pc-uwin + exit 0 ;; p*:CYGWIN*:*) - echo powerpcle-unknown-cygwin32 - exit 0 ;; + echo powerpcle-unknown-cygwin + exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; @@ -622,9 +727,17 @@ EOF echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; *:Linux:*:*) + # uname on the ARM produces all sorts of strangeness, and we need to + # filter it out. + case "$UNAME_MACHINE" in + armv*) UNAME_MACHINE=$UNAME_MACHINE ;; + arm* | sa110*) UNAME_MACHINE="arm" ;; + esac + # The BFD linker knows what the default object file format is, so - # first see if it will tell us. - ld_help_string=`ld --help 2>&1` + # first see if it will tell us. cd to the root directory to prevent + # problems with other programs or directories called `ld' in the path. + ld_help_string=`cd /; ld --help 2>&1` ld_supported_emulations=`echo $ld_help_string \ | sed -ne '/supported emulations:/!d s/[ ][ ]*/ /g @@ -632,15 +745,46 @@ EOF s/ .*// p'` case "$ld_supported_emulations" in + *ia64) echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 ;; i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;; i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;; sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; + armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;; - elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;; - esac + elf32ppc | elf32ppclinux) + # Determine Lib Version + cat >$dummy.c <<EOF +#include <features.h> +#if defined(__GLIBC__) +extern char __libc_version[]; +extern char __libc_release[]; +#endif +main(argc, argv) + int argc; + char *argv[]; +{ +#if defined(__GLIBC__) + printf("%s %s\n", __libc_version, __libc_release); +#else + printf("unkown\n"); +#endif + return 0; +} +EOF + LIBC="" + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null + if test "$?" = 0 ; then + ./$dummy | grep 1\.99 > /dev/null + if test "$?" = 0 ; then + LIBC="libc1" + fi + fi + rm -f $dummy.c $dummy + echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;; + esac if test "${UNAME_MACHINE}" = "alpha" ; then - sed 's/^ //' <<EOF >dummy.s + sed 's/^ //' <<EOF >$dummy.s .globl main .ent main main: @@ -658,9 +802,9 @@ EOF .end main EOF LIBC="" - ${CC-cc} dummy.s -o dummy 2>/dev/null + $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then - ./dummy + ./$dummy case "$?" in 7) UNAME_MACHINE="alpha" @@ -679,20 +823,21 @@ EOF ;; esac - objdump --private-headers dummy | \ + objdump --private-headers $dummy | \ grep ld.so.1 > /dev/null if test "$?" = 0 ; then LIBC="libc1" fi fi - rm -f dummy.s dummy + rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0 elif test "${UNAME_MACHINE}" = "mips" ; then - cat >dummy.c <<EOF -main(argc, argv) - int argc; - char *argv[]; -{ + cat >$dummy.c <<EOF +#ifdef __cplusplus +int main (int argc, char *argv[]) { +#else +int main (argc, argv) int argc; char *argv[]; { +#endif #ifdef __MIPSEB__ printf ("%s-unknown-linux-gnu\n", argv[1]); #endif @@ -702,8 +847,8 @@ main(argc, argv) return 0; } EOF - ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy else # Either a pre-BFD a.out linker (linux-gnuoldld) # or one that does not give us useful --help. @@ -722,12 +867,13 @@ EOF ;; esac # Determine whether the default compiler is a.out or elf - cat >dummy.c <<EOF + cat >$dummy.c <<EOF #include <features.h> -main(argc, argv) - int argc; - char *argv[]; -{ +#ifdef __cplusplus + int main (int argc, char *argv[]) { +#else + int main (argc, argv) int argc; char *argv[]; { +#endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 @@ -744,8 +890,8 @@ main(argc, argv) return 0; } EOF - ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0 - rm -f dummy.c dummy + ${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm $dummy.c $dummy && exit 0 + rm -f $dummy.c $dummy fi ;; # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. earlier versions # are messed up and put the nodename in both sysname and nodename. @@ -754,9 +900,9 @@ EOF exit 0 ;; # added by chet for bash based on usenet posting from <hops@sco.com> and # documentation on SCO's web site -- UnixWare 7 (SVR5) - i?86:UnixWare:5*:*) - echo ${UNAME_MACHINE}-pc-sysv5uw${UNAME_VERSION} - exit 0 ;; +# i?86:UnixWare:5*:*) +# echo ${UNAME_MACHINE}-pc-sysv5uw${UNAME_VERSION} +# exit 0 ;; i?86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... @@ -772,6 +918,14 @@ EOF echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE} fi exit 0 ;; + i?86:*:5:7*) + UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` + (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 + (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent.*II' >/dev/null) && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) && UNAME_MACHINE=i585 + echo ${UNAME_MACHINE}-${UNAME_SYSTEM}${UNAME_VERSION}-sysv${UNAME_RELEASE} + exit 0 ;; i?86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` @@ -781,6 +935,10 @@ EOF (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 + (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ + && UNAME_MACHINE=i686 + (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ + && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 @@ -827,7 +985,7 @@ EOF m68*:LynxOS:2.*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; - i?86:LynxOS:2.*:*) + i?86:LynxOS:2.*:* | i?86:LynxOS:3.[01]*:*) echo i386-pc-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) @@ -872,23 +1030,40 @@ EOF news*:NEWS-OS:*:6*) echo mips-sony-newsos6 exit 0 ;; - R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*) + R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; - PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort - # says <Richard.M.Bartel@ccMail.Census.GOV> - echo i586-unisys-sysv4 + BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. + echo powerpc-apple-beos + exit 0 ;; + BeMac:BeOS:*:*) + echo powerpc-apple-beos + exit 0 ;; + BePC:BeOS:*:*) + echo i586-pc-beos + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; + SX-5:SUPER-UX:*:*) + echo sx5-nec-superux${UNAME_RELEASE} + exit 0 ;; + Power*:Rhapsody:*:*) + echo powerpc-apple-rhapsody${UNAME_RELEASE} + exit 0 ;; + *:Rhapsody:*:*) + echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 -cat >dummy.c <<EOF +cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> @@ -930,7 +1105,10 @@ main () #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; - printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + if (version < 4) + printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); + else + printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif @@ -1097,8 +1275,8 @@ main () } EOF -${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0 -rm -f dummy.c dummy +${CC-cc} $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm $dummy.c $dummy && exit 0 +rm -f $dummy.c $dummy # Apollos put the system type in the environment. diff --git a/readline/support/config.sub b/readline/support/config.sub index c1ec2df8f0b..7d0c026d9bd 100755 --- a/readline/support/config.sub +++ b/readline/support/config.sub @@ -98,6 +98,16 @@ case $os in os= basic_machine=$1 ;; + -sim | -cisco | -oki | -wec | -winbond) + os= + basic_machine=$1 + ;; + -scout) + ;; + -wrs) + os=vxworks + basic_machine=$1 + ;; -hiux*) os=-hiuxwe2 ;; @@ -121,6 +131,9 @@ case $os in os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; + -udk*) + basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` + ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` @@ -149,19 +162,27 @@ esac case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. - tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \ - | arme[lb] | pyramid \ - | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \ - | hppa2.0 | alpha | we32k | ns16k | clipper | i370 | sh \ - | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \ - | pdp11 | mips64el | mips64orion | mips64orionel \ - | sparc | sparclet | sparclite | sparc64) + tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \ + | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \ + | 580 | i960 | h8300 \ + | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ + | alpha | alphaev[4-7] | alphaev56 | alphapca5[67] \ + | we32k | ns16k | clipper | i370 | sh | powerpc | powerpcle \ + | 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \ + | mips64orion | mips64orionel | mipstx39 | mipstx39el \ + | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ + | mips64vr5000 | miprs64vr5000el | mcore \ + | sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \ + | thumb | d10v) basic_machine=$basic_machine-unknown ;; + m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | z8k | v70 | h8500 | w65) + ;; + # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. - i[3456]86) + i[34567]86) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. @@ -170,30 +191,53 @@ case $basic_machine in exit 1 ;; # Recognize the basic CPU types with company name. - vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \ - | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \ - | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \ - | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ - | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ - | alpha-* | alphaev5-* | alphaev56-* | alphapca56-* | alphaev6-* \ - | we32k-* | cydra-* | ns16k-* \ - | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ - | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \ - | mips64el-* | mips64orion-* | mips64orionel-* | f301-* \ - | butterfly-bbn* \ - | cadmus-* | ews*-nec | ibmrt-ibm* | masscomp-masscomp \ + # FIXME: clean up the formatting here. + vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ + | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \ + | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ + | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ + | xmp-* | ymp-* \ + | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* | hppa2.0n-* \ + | alpha-* | alphaev[4-7]-* | alphaev56-* | alphapca5[67]-* \ + | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ + | clipper-* | orion-* \ + | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \ + | sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \ + | mips64el-* | mips64orion-* | mips64orionel-* \ + | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ + | mipstx39-* | mipstx39el-* | mcore-* \ + | f301-* | armv*-* | t3e-* \ + | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ + | thumb-* | v850-* | d30v-* | tic30-* | c30-* ) + ;; + # BEGIN cases added for Bash + butterfly-bbn* | cadmus-* | ews*-nec | ibmrt-ibm* | masscomp-masscomp \ | tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \ | concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \ - | *-convex | sx4*-nec) + | *-convex | sx[45]*-nec ) ;; + # END cases added for Bash + # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. + 386bsd) + basic_machine=i386-unknown + os=-bsd + ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; + a29khif) + basic_machine=a29k-amd + os=-udi + ;; + adobe68k) + basic_machine=m68010-adobe + os=-scout + ;; alliant | fx80) basic_machine=fx80-alliant ;; @@ -212,13 +256,9 @@ case $basic_machine in # basic_machine=m68k-cbm basic_machine=m68k-unknown ;; - amigaos) - basic_machine=m68k-unknown - os=-amigaos - ;; - amigados) + amigaos | amigados) basic_machine=m68k-cbm - os=-amigados + os=-amigaos ;; amigaunix | amix) basic_machine=m68k-cbm @@ -228,6 +268,10 @@ case $basic_machine in basic_machine=m68k-apollo os=-sysv ;; + apollo68bsd) + basic_machine=m68k-apollo + os=-bsd + ;; aux) basic_machine=m68k-apple os=-aux @@ -307,6 +351,10 @@ case $basic_machine in encore | umax | mmax | multimax) basic_machine=ns32k-encore ;; + es1800 | OSE68k | ose68k | ose | OSE) + basic_machine=m68k-ericsson + os=-ose + ;; fx2800) basic_machine=i860-alliant ;; @@ -325,6 +373,14 @@ case $basic_machine in basic_machine=h8300-hitachi os=-hms ;; + h8300xray) + basic_machine=h8300-hitachi + os=-xray + ;; + h8500hms) + basic_machine=h8500-hitachi + os=-hms + ;; harris) basic_machine=m88k-harris os=-sysv3 @@ -340,13 +396,30 @@ case $basic_machine in basic_machine=m68k-hp os=-hpux ;; + hp3k9[0-9][0-9] | hp9[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; - hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7) + hp9k6[0-9][0-9] | hp6[0-9][0-9]) + basic_machine=hppa1.0-hp + ;; + hp9k7[0-79][0-9] | hp7[0-79][0-9]) + basic_machine=hppa1.1-hp + ;; + hp9k78[0-9] | hp78[0-9]) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) + # FIXME: really hppa2.0-hp + basic_machine=hppa1.1-hp + ;; + hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) @@ -355,6 +428,14 @@ case $basic_machine in hppa-next) os=-nextstep3 ;; + hppaosf) + basic_machine=hppa1.1-hp + os=-osf + ;; + hppro) + basic_machine=hppa1.1-hp + os=-proelf + ;; ibm032-*) basic_machine=ibmrt-ibm ;; @@ -363,22 +444,38 @@ case $basic_machine in os=-mvs ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? - i[3456]86v32) + i[34567]86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; - i[3456]86v4*) + i[34567]86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; - i[3456]86v) + i[34567]86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; - i[3456]86sol2) + i[34567]86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; + i386mach) + basic_machine=i386-mach + os=-mach + ;; + i386-vsta | vsta) + basic_machine=i386-unknown + os=-vsta + ;; + i386-go32 | go32) + basic_machine=i386-unknown + os=-go32 + ;; + i386-mingw32 | mingw32) + basic_machine=i386-unknown + os=-mingw32 + ;; iris | iris4d) basic_machine=mips-sgi case $os in @@ -410,13 +507,17 @@ case $basic_machine in miniframe) basic_machine=m68000-convergent ;; + *mint | *MiNT) + basic_machine=m68k-atari + os=-mint + ;; mipsel*-linux*) basic_machine=mipsel-unknown - os=-linux + os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown - os=-linux + os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` @@ -424,10 +525,26 @@ case $basic_machine in mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; + monitor) + basic_machine=m68k-rom68k + os=-coff + ;; + msdos) + basic_machine=i386-unknown + os=-msdos + ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; + netbsd386) + basic_machine=i386-unknown + os=-netbsd + ;; + netwinder) + basic_machine=armv4l-corel + os=-linux + ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos @@ -440,6 +557,10 @@ case $basic_machine in basic_machine=mips-sony os=-newsos ;; + necv70) + basic_machine=v70-nec + os=-sysv + ;; next | m*-next ) basic_machine=m68k-next case $os in @@ -465,6 +586,10 @@ case $basic_machine in basic_machine=i960-intel os=-nindy ;; + mon960) + basic_machine=i960-intel + os=-mon960 + ;; np1) basic_machine=np1-gould ;; @@ -476,6 +601,18 @@ case $basic_machine in basic_machine=i386-pc os=-sco3.2v4 ;; + op50n-* | op60c-*) + basic_machine=hppa1.1-oki + os=-proelf + ;; + OSE68000 | ose68000) + basic_machine=m68000-ericsson + os=-ose + ;; + os68k) + basic_machine=m68k-none + os=-os68k + ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 @@ -490,28 +627,26 @@ case $basic_machine in pbb) basic_machine=m68k-tti ;; - pc532 | pc532-*) + pc532 | pc532-*) basic_machine=ns32k-pc532 ;; - pentium | p5) + pentium | p5 | k5 | k6 | nexen) basic_machine=i586-intel ;; - pentiumpro | p6) - basic_machine=i686-intel + pentiumpro | p6 | 6x86) + basic_machine=i686-pc + ;; + pentiumii | pentium2) + basic_machine=i786-pc ;; - pentium-* | p5-*) + pentium-* | p5-* | k5-* | k6-* | nexen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - pentiumpro-* | p6-*) + pentiumpro-* | p6-* | 6x86*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - k5) - # We don't have specific support for AMD's K5 yet, so just call it a Pentium - basic_machine=i586-amd - ;; - nexen) - # We don't have specific support for Nexgen yet, so just call it a Pentium - basic_machine=i586-nexgen + pentiumii-* | pentium2-*) + basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould @@ -519,24 +654,32 @@ case $basic_machine in power) basic_machine=rs6000-ibm ;; ppc) basic_machine=powerpc-unknown - ;; + ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown - ;; + ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; + rom68k) + basic_machine=m68k-rom68k + os=-coff + ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; + sa29200) + basic_machine=a29k-amd + os=-udi + ;; sequent) basic_machine=i386-sequent ;; @@ -544,6 +687,10 @@ case $basic_machine in basic_machine=sh-hitachi os=-hms ;; + sparclite-wrs) + basic_machine=sparclite-wrs + os=-vxworks + ;; sps7) basic_machine=m68k-bull os=-sysv2 @@ -551,6 +698,13 @@ case $basic_machine in spur) basic_machine=spur-unknown ;; + st2000) + basic_machine=m68k-tandem + ;; + stratus) + basic_machine=i860-stratus + os=-sysv4 + ;; sun2) basic_machine=m68000-sun ;; @@ -595,6 +749,16 @@ case $basic_machine in basic_machine=i386-sequent os=-dynix ;; + t3e) + basic_machine=t3e-cray + os=-unicos + ;; + tx39) + basic_machine=mipstx39-unknown + ;; + tx39el) + basic_machine=mipstx39el-unknown + ;; tower | tower-32) basic_machine=m68k-ncr ;; @@ -614,6 +778,10 @@ case $basic_machine in basic_machine=i386-pc os=-sysv5uw7 ;; + v810 | necv810) + basic_machine=v810-nec + os=-none + ;; vaxv) basic_machine=vax-dec os=-sysv @@ -637,13 +805,25 @@ case $basic_machine in basic_machine=a29k-wrs os=-vxworks ;; + w65*) + basic_machine=w65-wdc + os=-none + ;; + w89k-*) + basic_machine=hppa1.1-winbond + os=-proelf + ;; xmp) basic_machine=xmp-cray os=-unicos ;; - xps | xps100) + xps | xps100) basic_machine=xps100-honeywell ;; + z8k-*-coff) + basic_machine=z8k-unknown + os=-sim + ;; none) basic_machine=none-none os=-none @@ -651,8 +831,17 @@ case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. + w89k) + basic_machine=hppa1.1-winbond + ;; + op50n) + basic_machine=hppa1.1-oki + ;; + op60c) + basic_machine=hppa1.1-oki + ;; mips) - if test "x$os" = "x-linux" ; then + if test "x$os" = "x-linux-gnu" ; then basic_machine=mips-unknown else basic_machine=mips-mips @@ -673,10 +862,10 @@ case $basic_machine in we32k) basic_machine=we32k-att ;; - sparc) + sparc | sparcv9) basic_machine=sparc-sun ;; - cydra) + cydra) basic_machine=cydra-cydrome ;; orion) @@ -685,6 +874,16 @@ case $basic_machine in orion105) basic_machine=clipper-highlevel ;; + mac | mpw | mac-mpw) + basic_machine=m68k-apple + ;; + pmac | pmac-mpw) + basic_machine=powerpc-apple + ;; + c4x*) + basic_machine=c4x-none + os=-coff + ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 @@ -717,7 +916,7 @@ case $os in -solaris) os=-solaris2 ;; - svr4*) + -svr4*) os=-sysv4 ;; -unixware | -uw | -unixware2* | -uw2*) @@ -726,6 +925,9 @@ case $os in -unixware7* | -uw7*) os=-sysv5uw7 ;; + -unixware*) + os=-sysv4.2uw + ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; @@ -736,18 +938,31 @@ case $os in -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ + | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ + | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \ + | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -linux-gnu* | -uxpv* | -qnx* | -powerux* | -beos* | -rhapsody* \ - | -superux* ) + | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*) # Remember, each alternative MUST END IN *, to match a version number. ;; + # BEGIN CASES ADDED FOR Bash + -qnx* | -powerux* | -superux* ) + ;; + # END CASES ADDED FOR Bash + -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ + | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ + | -macos* | -mpw* | -magic* | -mon960* | -lnews*) + ;; + -mac*) + os=`echo $os | sed -e 's|mac|macos|'` + ;; + -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; @@ -772,11 +987,14 @@ case $os in -acis*) os=-aos ;; + -386bsd) + os=-bsd + ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) - os=-nextstep2 + os=-nextstep2 ;; # Preserve the version number of sinix5. -sinix5.*) @@ -806,9 +1024,18 @@ case $os in # This must come after -sysvr[45]. -sysv*) ;; + -ose*) + os=-ose + ;; + -es1800*) + os=-ose + ;; -xenix) os=-xenix ;; + -*mint | -*MiNT) + os=-mint + ;; -none) ;; *) @@ -837,7 +1064,7 @@ case $basic_machine in arm*-semi) os=-aout ;; - pdp11-*) + pdp11-*) os=-none ;; *-dec | vax-*) @@ -855,6 +1082,15 @@ case $basic_machine in # default. # os=-sunos4 ;; + m68*-cisco) + os=-aout + ;; + mips*-cisco) + os=-elf + ;; + mips*-*) + os=-elf + ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; @@ -867,6 +1103,15 @@ case $basic_machine in *-ibm) os=-aix ;; + *-wec) + os=-proelf + ;; + *-winbond) + os=-proelf + ;; + *-oki) + os=-proelf + ;; *-hp) os=-hpux ;; @@ -909,19 +1154,19 @@ case $basic_machine in *-next) os=-nextstep3 ;; - *-gould) + *-gould) os=-sysv ;; - *-highlevel) + *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; - *-sgi) + *-sgi) os=-irix ;; - *-siemens) + *-siemens) os=-sysv4 ;; *-masscomp) @@ -930,6 +1175,18 @@ case $basic_machine in f301-fujitsu) os=-uxpv ;; + *-rom68k) + os=-coff + ;; + *-*bug) + os=-coff + ;; + *-apple) + os=-macos + ;; + *-atari*) + os=-mint + ;; *) os=-none ;; @@ -954,6 +1211,9 @@ case $basic_machine in -aix*) vendor=ibm ;; + -beos*) + vendor=be + ;; -hpux*) vendor=hp ;; @@ -984,6 +1244,15 @@ case $basic_machine in -aux*) vendor=apple ;; + -hms*) + vendor=hitachi + ;; + -mpw* | -macos*) + vendor=apple + ;; + -*mint | -*MiNT) + vendor=atari + ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; diff --git a/readline/support/shlib-install b/readline/support/shlib-install index e43a7c0935f..471fec78b52 100755 --- a/readline/support/shlib-install +++ b/readline/support/shlib-install @@ -49,7 +49,7 @@ LN="ln -s" if [ -z "$uninstall" ]; then ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$INSTALLDIR/$LIBNAME" ]; then - ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}${OLDSUFF} + ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} fi fi @@ -63,6 +63,14 @@ fi # post-install/uninstall +# HP-UX requires that a shared library have execute permission +case "$host_os" in +hpux*) if [ -z "$uninstall" ]; then + chmod 755 ${INSTALLDIR}/${LIBNAME} + fi ;; +*) ;; +esac + case "$LIBNAME" in *.*.[0-9].[0-9]) # libname.so.M.N LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M @@ -71,6 +79,9 @@ case "$LIBNAME" in *.*.[0-9]) # libname.so.M LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so ;; +*.[0-9]) # libname.M + LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname + ;; esac # @@ -91,7 +102,7 @@ case "$host_os" in fi ;; -solaris2*|aix4.[2-9]*|hpux1*) +solaris2*|aix4.[2-9]*|osf*|irix[56]*) # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then @@ -99,6 +110,38 @@ solaris2*|aix4.[2-9]*|hpux1*) fi ;; + +# FreeBSD 3.x can have either a.out or ELF shared libraries +freebsd3*) + if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then + # libname.so -> libname.so.M + ${echo} ${RM} ${INSTALLDIR}/$LINK1 + if [ -z "$uninstall" ]; then + ${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1 + fi + else + # libname.so.M -> libname.so.M.N + ${echo} ${RM} ${INSTALLDIR}/$LINK2 + if [ -z "$uninstall" ]; then + ${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK2 + fi + + # libname.so -> libname.so.M.N + ${echo} ${RM} ${INSTALLDIR}/$LINK1 + if [ -z "$uninstall" ]; then + ${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1 + fi + fi + ;; + +hpux1*) + # libname.sl -> libname.M + ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl + if [ -z "$uninstall" ]; then + ${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LINK1}.sl + fi + ;; + *) ;; esac diff --git a/readline/support/shobj-conf b/readline/support/shobj-conf index 86f8c32b683..6649c700588 100755 --- a/readline/support/shobj-conf +++ b/readline/support/shobj-conf @@ -62,9 +62,9 @@ sunos4*) sunos5*-gcc*|solaris2*-gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared -Wl,-i' + SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' - SHLIB_XLDFLAGS='-R $(libdir)' +# SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; @@ -73,7 +73,7 @@ sunos5*|solaris2*) SHOBJ_LD=/usr/ccs/bin/ld SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' - SHLIB_XLDFLAGS='-R $(libdir)' +# SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; @@ -86,13 +86,32 @@ freebsd2* | netbsd* | openbsd*) SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; +# FreeBSD-3.x can have either a.out or ELF object files +#freebsd3*) +# SHOBJ_CFLAGS=-fpic +# SHOBJ_LD='${CC}' +# SHOBJ_LDFLAGS='-shared' +# +# SHLIB_XLDFLAGS='-R$(libdir)' +# SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' +# ;; + +# FreeBSD-3.x ELF freebsd3*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' - SHOBJ_LDFLAGS='-shared' - SHLIB_XLDFLAGS='-R$(libdir)' - SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then + SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' + + SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + else + SHOBJ_LDFLAGS='-shared' + + SHLIB_XLDFLAGS='-R$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + fi ;; linux*) @@ -142,6 +161,15 @@ bsdi4*) SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; +osf*-gcc*) + # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' + + SHLIB_XLDFLAGS='-rpath $(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + osf*) SHOBJ_LD=ld SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' @@ -187,7 +215,9 @@ irix[56]*-gcc*) irix[56]*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld - SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' +# SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' +# Change from David Kaelbling <drk@sgi.com> + SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' @@ -306,7 +336,7 @@ dgux*) SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; -msdosdjgpp*) +msdos*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; diff --git a/readline/tcap.h b/readline/tcap.h index acb2d76ab48..58ab894d93e 100644 --- a/readline/tcap.h +++ b/readline/tcap.h @@ -8,7 +8,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_RLTCAP_H_) #define _RLTCAP_H_ diff --git a/readline/terminal.c b/readline/terminal.c index 627a3854392..20ad126ec37 100644 --- a/readline/terminal.c +++ b/readline/terminal.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -46,9 +46,7 @@ # include <locale.h> #endif -#include <signal.h> #include <stdio.h> -#include <setjmp.h> /* System-specific feature definitions and include files. */ #include "rldefs.h" @@ -57,10 +55,6 @@ # include <sys/ioctl.h> #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ -#if defined (__GO32__) -# include <pc.h> -#endif - #include "rltty.h" #include "tcap.h" @@ -68,21 +62,8 @@ #include "readline.h" #include "history.h" -/* Variables and functions imported from readline.c */ -extern FILE *_rl_in_stream, *_rl_out_stream; -extern int readline_echoing_p; -extern int _rl_bell_preference; -extern Keymap _rl_keymap; - -/* Functions imported from bind.c */ -extern void _rl_bind_if_unbound (); - -/* Functions imported from shell.c */ -extern void set_lines_and_columns (); -extern char *get_env_value (); - -/* Functions imported from display.c */ -extern void _rl_redisplay_after_sigwinch (); +#include "rlprivate.h" +#include "rlshell.h" /* **************************************************************** */ /* */ @@ -90,15 +71,13 @@ extern void _rl_redisplay_after_sigwinch (); /* */ /* **************************************************************** */ -#ifndef __DJGPP__ static char *term_buffer = (char *)NULL; static char *term_string_buffer = (char *)NULL; +static int tcap_initialized; + /* Non-zero means this terminal can't really do anything. */ static int dumb_term; -#endif - -static int tcap_initialized; #if !defined (__linux__) # if defined (__EMX__) || defined (NEED_EXTERN_PC) @@ -158,6 +137,22 @@ int _rl_enable_keypad; /* Non-zero means the user wants to enable a meta key. */ int _rl_enable_meta = 1; +#if defined (__EMX__) +static void +_emx_get_screensize (swp, shp) + int *swp, *shp; +{ + int sz[2]; + + _scrsize (sz); + + if (swp) + *swp = sz[0]; + if (shp) + *shp = sz[1]; +} +#endif + /* Get readline's idea of the screen size. TTY is a file descriptor open to the terminal. If IGNORE_ENV is true, we do not pay attention to the values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being @@ -170,9 +165,6 @@ _rl_get_screen_size (tty, ignore_env) #if defined (TIOCGWINSZ) struct winsize window_size; #endif /* TIOCGWINSZ */ -#if defined (__EMX__) - int sz[2]; -#endif #if defined (TIOCGWINSZ) if (ioctl (tty, TIOCGWINSZ, &window_size) == 0) @@ -183,9 +175,7 @@ _rl_get_screen_size (tty, ignore_env) #endif /* TIOCGWINSZ */ #if defined (__EMX__) - _scrsize (sz); - screenwidth = sz[0]; - screenheight = sz[1]; + _emx_get_screensize (&screenwidth, &screenheight); #endif /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV @@ -195,11 +185,7 @@ _rl_get_screen_size (tty, ignore_env) if (ignore_env == 0 && (ss = get_env_value ("COLUMNS"))) screenwidth = atoi (ss); -#if defined(__DJGPP__) - tty = tty; - if (screenwidth <= 0) - screenwidth = ScreenCols (); -#else +#if !defined (__DJGPP__) if (screenwidth <= 0 && term_string_buffer) screenwidth = tgetnum ("co"); #endif @@ -212,10 +198,7 @@ _rl_get_screen_size (tty, ignore_env) if (ignore_env == 0 && (ss = get_env_value ("LINES"))) screenheight = atoi (ss); -#if defined(__DJGPP__) - if (screenheight <= 0) - screenheight = ScreenRows (); -#else +#if !defined (__DJGPP__) if (screenheight <= 0 && term_string_buffer) screenheight = tgetnum ("li"); #endif @@ -233,7 +216,7 @@ _rl_get_screen_size (tty, ignore_env) do a pair of putenv () or setenv () calls. */ set_lines_and_columns (screenheight, screenwidth); - if (!_rl_term_autowrap) + if (_rl_term_autowrap == 0) screenwidth--; screenchars = screenwidth * screenheight; @@ -271,32 +254,32 @@ struct _tc_string { search algorithm to something smarter. */ static struct _tc_string tc_strings[] = { - "DC", &term_DC, - "IC", &term_IC, - "ce", &term_clreol, - "cl", &term_clrpag, - "cr", &term_cr, - "dc", &term_dc, - "ei", &term_ei, - "ic", &term_ic, - "im", &term_im, - "kd", &term_kd, - "kh", &term_kh, /* home */ - "kH", &term_kH, /* end */ - "kl", &term_kl, - "kr", &term_kr, - "ku", &term_ku, - "ks", &term_ks, - "ke", &term_ke, - "le", &term_backspace, - "mm", &term_mm, - "mo", &term_mo, + { "DC", &term_DC }, + { "IC", &term_IC }, + { "ce", &term_clreol }, + { "cl", &term_clrpag }, + { "cr", &term_cr }, + { "dc", &term_dc }, + { "ei", &term_ei }, + { "ic", &term_ic }, + { "im", &term_im }, + { "kd", &term_kd }, + { "kh", &term_kh }, /* home */ + { "kH", &term_kH }, /* end */ + { "kl", &term_kl }, + { "kr", &term_kr }, + { "ku", &term_ku }, + { "ks", &term_ks }, + { "ke", &term_ke }, + { "le", &term_backspace }, + { "mm", &term_mm }, + { "mo", &term_mo }, #if defined (HACK_TERMCAP_MOTION) - "nd", &term_forward_char, + { "nd", &term_forward_char }, #endif - "pc", &term_pc, - "up", &term_up, - "vb", &visible_bell, + { "pc", &term_pc }, + { "up", &term_up }, + { "vb", &visible_bell }, }; #define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string)) @@ -307,9 +290,7 @@ static void get_term_capabilities (bp) char **bp; { -#if defined(__DJGPP__) - bp = bp; -#else +#if !defined (__DJGPP__) /* XXX - doesn't DJGPP have a termcap library? */ register int i; for (i = 0; i < NUM_TC_STRINGS; i++) @@ -318,66 +299,87 @@ get_term_capabilities (bp) tcap_initialized = 1; } +#define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) +#define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) + int _rl_init_terminal_io (terminal_name) char *terminal_name; { -#if defined (__GO32__) - terminal_name = terminal_name; - screenwidth = screenheight = 0; - _rl_get_screen_size (rl_instream ? fileno (rl_instream) : 0, 0); - - term_cr = "\r"; - term_im = term_ei = term_ic = term_IC = (char *)NULL; - term_up = term_dc = term_DC = visible_bell = (char *)NULL; - - /* Does the __GO32__ have a meta key? I don't know. */ - term_has_meta = 0; - term_mm = term_mo = (char *)NULL; - - /* It probably has arrow keys, but I don't know what they are. */ - term_ku = term_kd = term_kr = term_kl = (char *)NULL; - -#if defined (HACK_TERMCAP_MOTION) - term_forward_char = (char *)NULL; -#endif /* HACK_TERMCAP_MOTION */ - terminal_can_insert = _rl_term_autowrap = 0; - return 0; -#else /* !__GO32__ */ - char *term, *buffer; - int tty; + int tty, tgetent_ret; Keymap xkeymap; term = terminal_name ? terminal_name : get_env_value ("TERM"); + term_clrpag = term_cr = term_clreol = (char *)NULL; + tty = rl_instream ? fileno (rl_instream) : 0; + screenwidth = screenheight = 0; - if (term_string_buffer == 0) - term_string_buffer = xmalloc (2032); + if (term == 0) + term = "dumb"; - if (term_buffer == 0) - term_buffer = xmalloc (4080); + /* I've separated this out for later work on not calling tgetent at all + if the calling application has supplied a custom redisplay function, + (and possibly if the application has supplied a custom input function). */ + if (CUSTOM_REDISPLAY_FUNC()) + { + tgetent_ret = -1; + } + else + { + if (term_string_buffer == 0) + term_string_buffer = xmalloc(2032); - buffer = term_string_buffer; + if (term_buffer == 0) + term_buffer = xmalloc(4080); - term_clrpag = term_cr = term_clreol = (char *)NULL; + buffer = term_string_buffer; - if (term == 0) - term = "dumb"; + tgetent_ret = tgetent (term_buffer, term); + } - if (tgetent (term_buffer, term) <= 0) + if (tgetent_ret <= 0) { + FREE (term_string_buffer); + FREE (term_buffer); + buffer = term_buffer = term_string_buffer = (char *)NULL; + dumb_term = 1; - screenwidth = 79; - screenheight = 24; - screenchars = 79 * 24; + _rl_term_autowrap = 0; /* used by _rl_get_screen_size */ + +#if defined (__EMX__) + _emx_get_screensize (&screenwidth, &screenheight); + screenwidth--; +#else /* !__EMX__ */ + _rl_get_screen_size (tty, 0); +#endif /* !__EMX__ */ + + /* Defaults. */ + if (screenwidth <= 0 || screenheight <= 0) + { + screenwidth = 79; + screenheight = 24; + } + + /* Everything below here is used by the redisplay code (tputs). */ + screenchars = screenwidth * screenheight; term_cr = "\r"; term_im = term_ei = term_ic = term_IC = (char *)NULL; term_up = term_dc = term_DC = visible_bell = (char *)NULL; term_ku = term_kd = term_kl = term_kr = (char *)NULL; + term_mm = term_mo = (char *)NULL; #if defined (HACK_TERMCAP_MOTION) term_forward_char = (char *)NULL; #endif - terminal_can_insert = 0; + terminal_can_insert = term_has_meta = 0; + + /* Reasonable defaults for tgoto(). Readline currently only uses + tgoto if term_IC or term_DC is defined, but just in case we + change that later... */ + PC = '\0'; + BC = term_backspace = "\b"; + UP = term_up; + return 0; } @@ -392,10 +394,6 @@ _rl_init_terminal_io (terminal_name) if (!term_cr) term_cr = "\r"; - tty = rl_instream ? fileno (rl_instream) : 0; - - screenwidth = screenheight = 0; - _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn"); _rl_get_screen_size (tty, 0); @@ -438,7 +436,6 @@ _rl_init_terminal_io (terminal_name) _rl_keymap = xkeymap; -#endif /* !__GO32__ */ return 0; } @@ -484,6 +481,7 @@ _rl_output_character_function (c) return putc (c, _rl_out_stream); } #endif /* !_MINIX */ + /* Write COUNT characters from STRING to the output stream. */ void _rl_output_some_chars (string, count) @@ -500,12 +498,10 @@ _rl_backspace (count) { register int i; -#if !defined (__GO32__) if (term_backspace) for (i = 0; i < count; i++) tputs (term_backspace, 1, _rl_output_character_function); else -#endif /* !__GO32__ */ for (i = 0; i < count; i++) putc ('\b', _rl_out_stream); return 0; @@ -535,16 +531,11 @@ ding () default: break; case VISIBLE_BELL: -#if defined (__GO32__) - ScreenVisualBell (); - break; -#else if (visible_bell) { tputs (visible_bell, 1, _rl_output_character_function); break; } -#endif /* FALLTHROUGH */ case AUDIBLE_BELL: fprintf (stderr, "\007"); @@ -565,7 +556,7 @@ ding () void _rl_enable_meta_key () { -#if !defined(__DJGPP__) +#if !defined (__DJGPP__) if (term_has_meta && term_mm) tputs (term_mm, 1, _rl_output_character_function); #endif @@ -575,9 +566,7 @@ void _rl_control_keypad (on) int on; { -#if defined(__DJGPP__) - on = on; -#else +#if !defined (__DJGPP__) if (on && term_ks) tputs (term_ks, 1, _rl_output_character_function); else if (!on && term_ke) diff --git a/readline/tilde.c b/readline/tilde.c index d1853bd63d6..777b6559223 100644 --- a/readline/tilde.c +++ b/readline/tilde.c @@ -7,7 +7,7 @@ Readline 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 1, or (at your option) any + Free Software Foundation; either version 2, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but @@ -17,7 +17,7 @@ You should have received a copy of the GNU General Public License along with Readline; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if defined (HAVE_CONFIG_H) # include <config.h> @@ -47,12 +47,22 @@ #include "tilde.h" +#if defined (TEST) || defined (STATIC_MALLOC) +static char *xmalloc (), *xrealloc (); +#else +# if defined __STDC__ +extern char *xmalloc (int); +extern char *xrealloc (void *, int); +# else +extern char *xmalloc (), *xrealloc (); +# endif /* !__STDC__ */ +#endif /* TEST || STATIC_MALLOC */ + #if !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid (), *getpwnam (); #endif /* !HAVE_GETPW_DECLS */ #if !defined (savestring) -extern char *xmalloc (); # ifndef strcpy extern char *strcpy (); # endif @@ -67,17 +77,11 @@ extern char *strcpy (); # endif /* !__STDC__ */ #endif /* !NULL */ -#if defined (TEST) || defined (STATIC_MALLOC) -static char *xmalloc (), *xrealloc (); -#else -extern char *xmalloc (), *xrealloc (); -#endif /* TEST || STATIC_MALLOC */ - /* If being compiled as part of bash, these will be satisfied from variables.o. If being compiled as part of readline, they will be satisfied from shell.o. */ -extern char *get_home_dir (); -extern char *get_env_value (); +extern char *get_home_dir __P((void)); +extern char *get_env_value __P((char *)); /* The default value of tilde_additional_prefixes. This is set to whitespace preceding a tilde so that simple programs which do not @@ -122,7 +126,9 @@ tilde_find_prefix (string, len) int *len; { register int i, j, string_len; - register char **prefixes = tilde_additional_prefixes; + register char **prefixes; + + prefixes = tilde_additional_prefixes; string_len = strlen (string); *len = 0; @@ -161,7 +167,11 @@ tilde_find_suffix (string) for (i = 0; i < string_len; i++) { +#if defined (__MSDOS__) + if (string[i] == '/' || string[i] == '\\' /* || !string[i] */) +#else if (string[i] == '/' /* || !string[i] */) +#endif break; for (j = 0; suffixes && suffixes[j]; j++) @@ -225,11 +235,18 @@ tilde_expand (string) free (tilde_word); len = strlen (expansion); - if ((result_index + len + 1) > result_size) - result = xrealloc (result, 1 + (result_size += (len + 20))); +#ifdef __CYGWIN32__ + /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when + $HOME for `user' is /. On cygwin, // denotes a network drive. */ + if (len > 1 || *expansion != '/' || *string != '/') +#endif + { + if ((result_index + len + 1) > result_size) + result = xrealloc (result, 1 + (result_size += (len + 20))); - strcpy (result + result_index, expansion); - result_index += len; + strcpy (result + result_index, expansion); + result_index += len; + } free (expansion); } @@ -250,7 +267,11 @@ isolate_tilde_prefix (fname, lenp) int i; ret = xmalloc (strlen (fname)); +#if defined (__MSDOS__) + for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++) +#else for (i = 1; fname[i] && fname[i] != '/'; i++) +#endif ret[i - 1] = fname[i]; ret[i - 1] = '\0'; if (lenp) @@ -271,7 +292,7 @@ glue_prefix_and_suffix (prefix, suffix, suffind) plen = (prefix && *prefix) ? strlen (prefix) : 0; slen = strlen (suffix + suffind); ret = xmalloc (plen + slen + 1); - if (prefix && *prefix) + if (plen) strcpy (ret, prefix); strcpy (ret + plen, suffix + suffind); return ret; diff --git a/readline/tilde.h b/readline/tilde.h index 634b95449aa..7783fd6101a 100644 --- a/readline/tilde.h +++ b/readline/tilde.h @@ -8,7 +8,7 @@ The Library 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 1, or (at your option) + the Free Software Foundation; either version 2, or (at your option) any later version. The Library is distributed in the hope that it will be useful, but @@ -19,11 +19,27 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (_TILDE_H_) # define _TILDE_H_ +#ifdef __cplusplus +extern "C" { +#endif + +/* A function can be defined using prototypes and compile on both ANSI C + and traditional C compilers with something like this: + extern char *func __P((char *, char *, int)); */ + +#if !defined (__P) +# if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) +# define __P(protos) protos +# else +# define __P(protos) () +# endif +#endif + /* Function pointers can be declared as (Function *)foo. */ #if !defined (_FUNCTION_DEF) # define _FUNCTION_DEF @@ -56,10 +72,14 @@ extern char **tilde_additional_prefixes; extern char **tilde_additional_suffixes; /* Return a new string which is the result of tilde expanding STRING. */ -extern char *tilde_expand (); +extern char *tilde_expand __P((char *)); /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. */ -extern char *tilde_expand_word (); +extern char *tilde_expand_word __P((char *)); + +#ifdef __cplusplus +} +#endif #endif /* _TILDE_H_ */ diff --git a/readline/undo.c b/readline/undo.c index 28ebcc85b93..f7f30d17d9d 100644 --- a/readline/undo.c +++ b/readline/undo.c @@ -8,7 +8,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -47,6 +47,8 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" + #define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) /* Non-zero tells rl_delete_text and rl_insert_text to not add to diff --git a/readline/util.c b/readline/util.c index 1dc3b664f1c..be9e0a9869a 100644 --- a/readline/util.c +++ b/readline/util.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) @@ -52,24 +52,10 @@ /* Some standard library routines. */ #include "readline.h" -#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) - -/* Pseudo-globals imported from readline.c */ -extern int readline_echoing_p; -extern procenv_t readline_top_level; -extern int rl_line_buffer_len; -extern Function *rl_last_func; - -extern int _rl_defining_kbd_macro; -extern char *_rl_executing_macro; +#include "rlprivate.h" +#include "xmalloc.h" -/* Pseudo-global functions imported from other library files. */ -extern void _rl_replace_text (); -extern void _rl_pop_executing_macro (); -extern void _rl_set_the_line (); -extern void _rl_init_argument (); - -extern char *xmalloc (), *xrealloc (); +#define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) /* **************************************************************** */ /* */ diff --git a/readline/vi_keymap.c b/readline/vi_keymap.c index 14929a31930..cf6724cef13 100644 --- a/readline/vi_keymap.c +++ b/readline/vi_keymap.c @@ -7,7 +7,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -18,7 +18,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #if !defined (BUFSIZ) #include <stdio.h> diff --git a/readline/vi_mode.c b/readline/vi_mode.c index d4868bf3b13..be7f9496434 100644 --- a/readline/vi_mode.c +++ b/readline/vi_mode.c @@ -8,7 +8,7 @@ The GNU Readline Library 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 1, or + as published by the Free Software Foundation; either version 2, or (at your option) any later version. The GNU Readline Library is distributed in the hope that it will be @@ -19,7 +19,7 @@ The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, - 675 Mass Ave, Cambridge, MA 02139, USA. */ + 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ #define READLINE_LIBRARY /* **************************************************************** */ @@ -54,6 +54,9 @@ #include "readline.h" #include "history.h" +#include "rlprivate.h" +#include "xmalloc.h" + #ifndef _rl_digit_p #define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') #endif @@ -74,26 +77,6 @@ #define exchange(x, y) do {int temp = x; x = y; y = temp;} while (0) #endif -extern char *xmalloc (), *xrealloc (); - -/* Variables imported from readline.c */ -extern int rl_point, rl_end, rl_mark; -extern FILE *rl_instream; -extern int rl_line_buffer_len, rl_explicit_arg, rl_numeric_arg; -extern Keymap _rl_keymap; -extern char *rl_prompt; -extern char *rl_line_buffer; -extern int rl_arg_sign; - -extern int _rl_doing_an_undo; -extern int _rl_undo_group_level; - -extern void _rl_dispatch (); -extern int _rl_char_search_internal (); - -extern void rl_extend_line_buffer (); -extern int rl_vi_check (); - /* Non-zero means enter insertion mode. */ static int _rl_vi_doing_insert; @@ -131,7 +114,7 @@ static char *vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; /* Arrays for the saved marks. */ static int vi_mark_chars[27]; -static int rl_digit_loop1 (); +static int rl_digit_loop1 __P((void)); void _rl_vi_initialize_line () @@ -1043,7 +1026,7 @@ rl_vi_char_search (count, key) if (vi_redoing) target = _rl_vi_last_search_char; else - _rl_vi_last_search_char = target = rl_getc (rl_instream); + _rl_vi_last_search_char = target = (*rl_getc_function) (rl_instream); switch (key) { @@ -1159,7 +1142,7 @@ rl_vi_change_char (count, key) if (vi_redoing) c = _rl_vi_last_replacement; else - _rl_vi_last_replacement = c = rl_getc (rl_instream); + _rl_vi_last_replacement = c = (*rl_getc_function) (rl_instream); if (c == '\033' || c == CTRL ('C')) return -1; diff --git a/readline/xmalloc.c b/readline/xmalloc.c index 4160651191b..c0d06403a3c 100644 --- a/readline/xmalloc.c +++ b/readline/xmalloc.c @@ -7,7 +7,7 @@ Readline 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 1, or (at your option) any + Free Software Foundation; either version 2, or (at your option) any later version. Readline is distributed in the hope that it will be useful, but @@ -17,7 +17,8 @@ You should have received a copy of the GNU General Public License along with Readline; see the file COPYING. If not, write to the Free - Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */ +#define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) #include <config.h> @@ -31,7 +32,7 @@ # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ -static void memory_error_and_abort (); +#include "xmalloc.h" /* **************************************************************** */ /* */ @@ -39,6 +40,14 @@ static void memory_error_and_abort (); /* */ /* **************************************************************** */ +static void +memory_error_and_abort (fname) + char *fname; +{ + fprintf (stderr, "%s: out of virtual memory\n", fname); + exit (2); +} + /* Return a pointer to free()able block of memory large enough to hold BYTES number of bytes. If the memory cannot be allocated, print an error message and abort. */ @@ -56,7 +65,7 @@ xmalloc (bytes) char * xrealloc (pointer, bytes) - char *pointer; + PTR_T pointer; int bytes; { char *temp; @@ -68,19 +77,11 @@ xrealloc (pointer, bytes) return (temp); } -static void -memory_error_and_abort (fname) - char *fname; -{ - fprintf (stderr, "%s: out of virtual memory\n", fname); - exit (2); -} - /* Use this as the function to call when adding unwind protects so we don't need to know what free() returns. */ void xfree (string) - char *string; + PTR_T string; { if (string) free (string); |