diff -aNrc2 readline-2.2.1/CHANGELOG readline-4.0/CHANGELOG *** readline-2.2.1/CHANGELOG Thu Apr 2 14:49:42 1998 --- readline-4.0/CHANGELOG Fri Feb 19 11:38:10 1999 *************** *** 76,77 **** --- 76,216 ---- configure.in - bumped LIBVERSION up to 2.2 + + 4/18 + ---- + [readline-2.2 released] + + 4/20 + ---- + Makefile.in + - make `libhistory.a' a dependency of `install' + - fixed a typo in the recipe for `install' that copied libreadline.a + to libhistory.old right after installing it + + 4/27 + ---- + doc/Makefile.in + - install {readline,history}.info out of the source directory if + they are not found in the current (build) directory -- only an + issue if the libraries are built in a different directory than + the source directory + + 5/1 + --- + support/shobj-conf + - script from the bash distribution to do shared object and library + configuration + + shlib/Makefile.in + - new directory and makefile to handle building shared versions of + libreadline and libhistory, controlled by support/shobj-conf + + 5/7 + --- + doc/Makefile.in + - set SHELL to /bin/sh, rather than relying on make to be correct + + 5/14 + ---- + savestring.c + - new file, moved from shell.c, for backwards compatibility + + Makefile.in, shlib/Makefile.in + - make sure savestring.c is compiled and added to libreadline and + libhistory + + [THERE ARE NO MORE #ifdef SHELL LINES IN THE C SOURCE FILES.] + + 5/15 + ---- + README + - updated description of shared library creation for the new scheme + + [THERE ARE NO MORE #ifdef SHELL LINES IN ANY OF THE SOURCE FILES.] + + Makefile.in + - bumped SHLIB_MAJOR up to 4 since we've augmented the library + API + - rlconf.h is now one of the installed headers, so applications can + find out whether things like vi-mode are available in the installed + libreadline + + 5/20 + ---- + configure.in + - changed RL_LIBRARY_VERSION to 4.0 to match the version of the + installed shared libraries + + 6/5 + --- + rlstdc.h + - new file + + Makefile.in + - rlstdc.h is now one of the installed headers + + 8/3 + --- + shlib/Makefile.in + - made the suffix rule that creates xx.so from xx.c write the + compiler output to `a.o', which is then mv'd to xx.so, because + some compilers (Sun WSpro 4.2, for example) don't allow any + suffixes other than `.o' for `cc -c' (not even `a.out') + + 9/15 + ---- + + Makefile.in + - AR and ARFLAGS are now substituted by configure, used in recipes + that build the libraries + + configure.in + - use AC_CHECK_PROG to check for ar + - set ARFLAGS if it has not already been set in the environment + + 10/5 + ---- + Makefile.in + - removed savestring.o from object file list + + 10/28 + ----- + shlib/Makefile.in + - don't use a fixed filename in the .c.so suffix rule to avoid + problems with parallel makes + + 12/21 + ----- + support/shlib-install + - new script to install shared readline and history libraries + + shlib/Makefile.in + - changed to call shlib-install for install and uninstall targets + + [readline-4.0-beta1 frozen] + + 12/22 + ----- + configure.in + - call AC_SUBST for SHOBJ_XLDFLAGS and SHLIB_LIBS + + shlib/Makefile.in + - SHOBJ_XLDFLAGS and SHLIB_LIBS are now substituted by configure + - add $(SHLIB_LIBS) at end of command line that builds the shared + libraries (currently needed only by AIX 4.2) + + 12/31 + ----- + MANIFEST, MANIFEST.doc + - the TOC html files are no longer generated and no longer part of + the distribution + + 2/18/1999 + --------- + configure.in + - set MAKE_SHELL to /bin/sh and substitute into the Makefiles + + Makefile.in,{doc,examples,shlib}/Makefile.in + - set SHELL from @MAKE_SHELL@ + + [readline-4.0 released] diff -aNrc2 readline-2.2.1/CHANGES readline-4.0/CHANGES *** readline-2.2.1/CHANGES Fri Jul 17 11:18:01 1998 --- readline-4.0/CHANGES Fri Feb 19 11:46:40 1999 *************** *** 1,21 **** ! This document details the changes between this version, readline-2.2.1, and the previous version, readline-2.2. 1. Changes to Readline ! a. The `make install' target was corrected so that it did not move the ! newly-installed libreadline.a to libhistory.old ! b. The `make install' target for the documentation will now install the ! info files from the source directory if they do not appear in the ! build directory, since they are shipped in the readline tar file. ! c. Fixed a problem with redisplay that showed up when the prompt string was ! longer than the screen width and the prompt contained invisible characters. ! d. Fixed a problem with the paren matching code -- the blink was far too ! short (it's specified in microseconds, not milliseconds, Chet!). ! ------------------------------------------------------------------------------ This document details the changes between this version, readline-2.2, and the previous version, readline-2.1. --- 1,130 ---- ! This document details the changes between this version, readline-4.0, and the previous version, readline-2.2. 1. Changes to Readline ! a. The version number is now 4.0, to match the major and minor version ! numbers on the shared readline and history libraries. Future ! releases will maintain the identical numbering. ! b. Fixed a typo in the `make install' recipe that copied libreadline.a ! to libhistory.old right after installing it. ! c. The readline and history info files are now installed out of the source ! directory if they are not found in the build directory. ! d. The library no longer exports a function named `savestring' -- backwards ! compatibility be damned. ! e. There is no longer any #ifdef SHELL code in the source files. ! ! f. Some changes were made to the key binding code to fix memory leaks and ! better support Win32 systems. ! ! g. Fixed a silly typo in the paren matching code -- it's microseconds, not ! milliseconds. ! ! h. The readline library should be compilable by C++ compilers. ! ! i. The readline.h public header file now includes function prototypes for ! all readline functions, and some changes were made to fix errors in the ! source files uncovered by the use of prototypes. ! ! j. The maximum numeric argument is now clamped at 1000000. ! ! k. Fixes to rl_yank_last_arg to make it behave better. ! ! l. Fixed a bug in the display code that caused core dumps if the prompt ! string length exceeded 1024 characters. ! ! m. The menu completion code was fixed to properly insert a single completion ! if there is only one match. ! ! n. A bug was fixed that caused the display code to improperly display tabs ! after newlines. ! ! o. A fix was made to the completion code in which a typo caused the wrong ! value to be passed to the function that computed the longest common ! prefix of the list of matches. ! ! p. The completion code now checks the value of rl_filename_completion_desired, ! which is set by application-supplied completion functions to indicate ! that filename completion is being performed, to decide whether or not to ! call an application-supplied `ignore completions' function. ! ! q. Code was added to the history library to catch history substitutions ! using `&' without a previous history substitution or search having been ! performed. ! ! ! 2. New Features in Readline ! ! a. There is a new script, support/shobj-conf, to do system-specific shared ! object and library configuration. It generates variables for configure ! to substitute into makefiles. The README file provides a detailed ! explanation of the shared library creation process. ! ! b. Shared libraries and objects are now built in the `shlib' subdirectory. ! There is a shlib/Makefile.in to control the build process. `make shared' ! from the top-level directory is still the right way to build shared ! versions of the libraries. ! ! c. rlconf.h is now installed, so applications can find out which features ! have been compiled into the installed readline and history libraries. ! ! d. rlstdc.h is now an installed header file. ! ! e. Many changes to the signal handling: ! o Readline now catches SIGQUIT and cleans up the tty before returning; ! o A new variable, rl_catch_signals, is available to application writers ! to indicate to readline whether or not it should install its own ! signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, ! SIGTTIN, and SIGTTOU; ! o A new variable, rl_catch_sigwinch, is available to application ! writers to indicate to readline whether or not it should install its ! own signal handler for SIGWINCH, which will chain to the calling ! applications's SIGWINCH handler, if one is installed; ! o There is a new function, rl_free_line_state, for application signal ! handlers to call to free up the state associated with the current ! line after receiving a signal; ! o There is a new function, rl_cleanup_after_signal, to clean up the ! display and terminal state after receiving a signal; ! o There is a new function, rl_reset_after_signal, to reinitialize the ! terminal and display state after an application signal handler ! returns and readline continues ! ! f. There is a new function, rl_resize_terminal, to reset readline's idea of ! the screen size after a SIGWINCH. ! ! g. New public functions: rl_save_prompt and rl_restore_prompt. These were ! previously private functions with a `_' prefix. These functions are ! used when an application wants to write a message to the `message area' ! with rl_message and have the prompt restored correctly when the message ! is erased. ! ! h. New function hook: rl_pre_input_hook, called just before readline starts ! reading input, after initialization. ! ! i. New function hook: rl_display_matches_hook, called when readline would ! display the list of completion matches. The new function ! rl_display_match_list is what readline uses internally, and is available ! for use by application functions called via this hook. ! ! j. New bindable function, delete-char-or-list, like tcsh. ! ! k. A new variable, rl_erase_empty_line, which, if set by an application using ! readline, will cause readline to erase, prompt and all, lines on which the ! only thing typed was a newline. ! ! l. There is a new script, support/shlib-install, to install and uninstall ! the shared readline and history libraries. ! ! m. A new bindable variable, `isearch-terminators', which is a string ! containing the set of characters that should terminate an incremental ! search without being executed as a command. ! ! n. A new bindable function, forward-backward-delete-char. ! ! ------------------------------------------------------------------------------- This document details the changes between this version, readline-2.2, and the previous version, readline-2.1. diff -aNrc2 readline-2.2.1/MANIFEST readline-4.0/MANIFEST *** readline-2.2.1/MANIFEST Thu Sep 4 10:47:05 1997 --- readline-4.0/MANIFEST Thu Dec 31 12:07:24 1998 *************** *** 5,8 **** --- 5,9 ---- examples d support d + shlib d COPYING f README f *************** *** 28,31 **** --- 29,33 ---- rlconf.h f rldefs.h f + rlstdc.h f rltty.h f rlwinsize.h f *************** *** 46,49 **** --- 48,52 ---- readline.c f rltty.c f + savestring.c f search.c f shell.c f *************** *** 61,64 **** --- 64,68 ---- histfile.c f histsearch.c f + shlib/Makefile.in f support/config.guess f support/config.sub f *************** *** 66,71 **** --- 70,78 ---- support/mkdirs f support/mkdist f + support/shobj-conf f + support/shlib-install f doc/Makefile.in f doc/texinfo.tex f + doc/manvers.texinfo f doc/rlman.texinfo f doc/rltech.texinfo f *************** *** 82,85 **** --- 89,103 ---- examples/rltest.c f examples/rl.c f + examples/rlversion.c f examples/histexamp.c f examples/Inputrc f + # formatted documentation, from MANIFEST.doc + doc/readline.ps f + doc/history.ps f + doc/readline.dvi f + doc/history.dvi f + doc/readline.info f + doc/history.info f + doc/readline.html f + doc/history.html f + doc/readline.0 f diff -aNrc2 readline-2.2.1/MANIFEST.doc readline-4.0/MANIFEST.doc *** readline-2.2.1/MANIFEST.doc Thu Apr 16 10:28:49 1998 --- readline-4.0/MANIFEST.doc Wed Dec 31 19:00:00 1969 *************** *** 1,16 **** - # - # Master Manifest file for documentation-only distribution - # - doc d - MANIFEST.doc f - doc/readline.ps f - doc/history.ps f - doc/readline.dvi f - doc/history.dvi f - doc/readline.info f - doc/history.info f - doc/readline.html f - doc/readline_toc.html f - doc/history.html f - doc/history_toc.html f - doc/readline.0 f --- 0 ---- diff -aNrc2 readline-2.2.1/Makefile.in readline-4.0/Makefile.in *** readline-2.2.1/Makefile.in Fri Jul 17 11:00:54 1998 --- readline-4.0/Makefile.in Thu Feb 18 12:24:11 1999 *************** *** 29,39 **** CC = @CC@ - LD = ld # needed when building shared libraries RANLIB = @RANLIB@ ! AR = ar RM = rm -f CP = cp MV = mv prefix = @prefix@ exec_prefix = @exec_prefix@ --- 29,41 ---- CC = @CC@ RANLIB = @RANLIB@ ! AR = @AR@ ! ARFLAGS = @ARFLAGS@ RM = rm -f CP = cp MV = mv + SHELL = @MAKE_SHELL@ + prefix = @prefix@ exec_prefix = @exec_prefix@ *************** *** 48,53 **** man3dir = $(mandir)/man3 - SHELL = /bin/sh - # Programs to make tags files. ETAGS = etags -tw --- 50,53 ---- *************** *** 57,61 **** LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ - LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@ @CFLAGS@ DEFS = @DEFS@ --- 57,60 ---- *************** *** 67,98 **** CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS) - # these two options need tweaking for compiler/OS versions other than gcc - # and SunOS4 - PICFLAG= -fpic # -pic for some versions of cc - SHLIB_OPTS= -assert pure-text -ldl # -Bshareable for some versions of gcc - - MAJOR= 3 - # shared library systems like SVR4's do not use minor versions - MINOR= .0 - - .SUFFIXES: .so - .c.o: $(CC) -c $(CCFLAGS) $< - .c.so: - -mv $*.o z$*.o - $(CC) -c $(PICFLAG) $(CCFLAGS) $< - mv $*.o $@ - -mv z$*.o $*.o - # The name of the main library target. LIBRARY_NAME = libreadline.a STATIC_LIBS = libreadline.a libhistory.a - SHARED_READLINE = libreadline.so.$(MAJOR)$(MINOR) - SHARED_HISTORY = libhistory.so.$(MAJOR)$(MINOR) - SHARED_LIBS = $(SHARED_READLINE) $(SHARED_HISTORY) - # The C code source files for this library. CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ --- 66,77 ---- CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS) .c.o: + ${RM} $@ $(CC) -c $(CCFLAGS) $< # The name of the main library target. LIBRARY_NAME = libreadline.a STATIC_LIBS = libreadline.a libhistory.a # The C code source files for this library. CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ *************** *** 105,116 **** $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \ $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \ ! $(srcdir)/shell.c $(srcdir)/tilde.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 ! HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o TILDEOBJ = tilde.o OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \ --- 84,95 ---- $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \ $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \ ! $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.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 ! HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o TILDEOBJ = tilde.o OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \ *************** *** 119,129 **** nls.o xmalloc.o $(HISTOBJ) $(TILDEOBJ) - SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so - SHARED_TILDEOBJ = tilde.so - SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \ - rltty.so complete.so bind.so isearch.so display.so signals.so \ - util.so kill.so undo.so macro.so input.so callback.so terminal.so \ - nls.so xmalloc.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) - # The texinfo files which document this library. DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo --- 98,101 ---- *************** *** 132,141 **** DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT) ! CREATED_MAKEFILES = Makefile doc/Makefile examples/Makefile CREATED_CONFIGURE = config.status config.h config.cache config.log \ stamp-config stamp-h CREATED_TAGS = TAGS tags ! INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h ########################################################################## --- 104,114 ---- DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT) ! CREATED_MAKEFILES = Makefile doc/Makefile examples/Makefile shlib/Makefile CREATED_CONFIGURE = config.status config.h config.cache config.log \ stamp-config stamp-h CREATED_TAGS = TAGS tags ! INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \ ! rlstdc.h rlconf.h ########################################################################## *************** *** 144,167 **** static: $(STATIC_LIBS) - shared: $(SHARED_LIBS) libreadline.a: $(OBJECTS) $(RM) $@ ! $(AR) cr $@ $(OBJECTS) -test -n "$(RANLIB)" && $(RANLIB) $@ libhistory.a: $(HISTOBJ) xmalloc.o $(RM) $@ ! $(AR) cr $@ $(HISTOBJ) xmalloc.o -test -n "$(RANLIB)" && $(RANLIB) $@ - $(SHARED_READLINE): $(SHARED_OBJ) - $(RM) $@ - $(LD) ${SHLIB_OPTS} -o $@ $(SHARED_OBJ) - - $(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so - $(RM) $@ - $(LD) ${SHLIB_OPTS} -o $@ $(SHARED_HISTOBJ) xmalloc.so - readline: $(OBJECTS) readline.h rldefs.h chardefs.h $(CC) $(CCFLAGS) -o $@ ./examples/rl.c ./libreadline.a -ltermcap --- 117,131 ---- static: $(STATIC_LIBS) libreadline.a: $(OBJECTS) $(RM) $@ ! $(AR) $(ARFLAGS) $@ $(OBJECTS) -test -n "$(RANLIB)" && $(RANLIB) $@ libhistory.a: $(HISTOBJ) xmalloc.o $(RM) $@ ! $(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 *************** *** 187,190 **** --- 151,159 ---- cd $(srcdir) && autoconf ## Comment-me-out in distribution + + shared: force + -test -d shlib || mkdir shlib + -( cd shlib ; ${MAKE} ${MFLAGS} all ) + documentation: force -test -d doc || mkdir doc *************** *** 223,233 **** install-shared: installdirs shared ! -$(MV) $(libdir)/$(SHARED_HISTORY) $(libdir)/$(SHARED_HISTORY).old ! $(INSTALL_DATA) $(SHARED_HISTORY) $(libdir)/$(SHARED_HISTORY) ! -$(MV) $(libdir)/$(SHARED_READLINE) $(libdir)/$(SHARED_READLINE).old ! $(INSTALL_DATA) $(SHARED_READLINE) $(libdir)/$(SHARED_READLINE) uninstall-shared: ! -test -n "$(libdir)" && cd $(libdir) && ${RM} ${SHARED_LIBS} TAGS: force --- 192,199 ---- install-shared: installdirs shared ! -( cd shlib ; ${MAKE} ${MFLAGS} install ) uninstall-shared: ! -( cd shlib; ${MAKE} ${MFLAGS} uninstall ) TAGS: force *************** *** 239,251 **** clean: force $(RM) $(OBJECTS) $(STATIC_LIBS) ! $(RM) $(SHARED_OBJ) $(SHARED_LIBS) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) mostlyclean: clean -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) distclean maintainer-clean: clean -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) --- 205,219 ---- clean: force $(RM) $(OBJECTS) $(STATIC_LIBS) ! -( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) mostlyclean: clean + -( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) distclean maintainer-clean: clean + -( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) *************** *** 275,348 **** bind.o: ansi_stdlib.h posixstat.h bind.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! bind.o: readline.h keymaps.h chardefs.h tilde.h bind.o: history.h callback.o: rlconf.h callback.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! callback.o: readline.h keymaps.h chardefs.h tilde.h complete.o: ansi_stdlib.h posixdir.h posixstat.h complete.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! complete.o: readline.h keymaps.h chardefs.h tilde.h display.o: ansi_stdlib.h posixstat.h display.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h display.o: tcap.h display.o: readline.h keymaps.h chardefs.h tilde.h ! display.o: history.h funmap.o: readline.h keymaps.h chardefs.h tilde.h ! funmap.o: rlconf.h ansi_stdlib.h funmap.o: ${BUILD_DIR}/config.h histexpand.o: ansi_stdlib.h ! histexpand.o: history.h histlib.h histexpand.o: ${BUILD_DIR}/config.h histfile.o: ansi_stdlib.h ! histfile.o: history.h histlib.h histfile.o: ${BUILD_DIR}/config.h history.o: ansi_stdlib.h ! history.o: history.h histlib.h history.o: ${BUILD_DIR}/config.h histsearch.o: ansi_stdlib.h ! histsearch.o: history.h histlib.h histsearch.o: ${BUILD_DIR}/config.h input.o: ansi_stdlib.h input.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! input.o: readline.h keymaps.h chardefs.h tilde.h isearch.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h isearch.o: readline.h keymaps.h chardefs.h tilde.h ! isearch.o: ansi_stdlib.h history.h keymaps.o: emacs_keymap.c vi_keymap.c keymaps.o: keymaps.h chardefs.h rlconf.h ansi_stdlib.h keymaps.o: readline.h keymaps.h chardefs.h tilde.h ! keymaps.o: ${BUILD_DIR}/config.h kill.o: ansi_stdlib.h kill.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h kill.o: readline.h keymaps.h chardefs.h tilde.h ! kill.o: history.h macro.o: ansi_stdlib.h macro.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h macro.o: readline.h keymaps.h chardefs.h tilde.h ! macro.o: history.h nls.o: ansi_stdlib.h nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h parens.o: rlconf.h parens.o: ${BUILD_DIR}/config.h ! parens.o: readline.h keymaps.h chardefs.h tilde.h readline.o: readline.h keymaps.h chardefs.h tilde.h readline.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! readline.o: history.h readline.o: posixstat.h ansi_stdlib.h posixjmp.h rltty.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h rltty.o: rltty.h ! rltty.o: readline.h keymaps.h chardefs.h tilde.h search.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h search.o: readline.h keymaps.h chardefs.h tilde.h ! search.o: ansi_stdlib.h history.h shell.o: ${BUILD_DIR}/config.h shell.o: ansi_stdlib.h signals.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h signals.o: readline.h keymaps.h chardefs.h tilde.h ! signals.o: history.h terminal.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h terminal.o: tcap.h terminal.o: readline.h keymaps.h chardefs.h tilde.h ! terminal.o: history.h tilde.o: ansi_stdlib.h tilde.o: ${BUILD_DIR}/config.h --- 243,316 ---- bind.o: ansi_stdlib.h posixstat.h bind.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! bind.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h bind.o: history.h callback.o: rlconf.h callback.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! callback.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h complete.o: ansi_stdlib.h posixdir.h posixstat.h complete.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! complete.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h display.o: ansi_stdlib.h posixstat.h display.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h display.o: tcap.h display.o: readline.h keymaps.h chardefs.h tilde.h ! display.o: history.h rlstdc.h funmap.o: readline.h keymaps.h chardefs.h tilde.h ! funmap.o: rlconf.h ansi_stdlib.h rlstdc.h funmap.o: ${BUILD_DIR}/config.h histexpand.o: ansi_stdlib.h ! histexpand.o: history.h histlib.h rlstdc.h histexpand.o: ${BUILD_DIR}/config.h histfile.o: ansi_stdlib.h ! histfile.o: history.h histlib.h rlstdc.h histfile.o: ${BUILD_DIR}/config.h history.o: ansi_stdlib.h ! history.o: history.h histlib.h rlstdc.h history.o: ${BUILD_DIR}/config.h histsearch.o: ansi_stdlib.h ! histsearch.o: history.h histlib.h rlstdc.h histsearch.o: ${BUILD_DIR}/config.h input.o: ansi_stdlib.h input.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! input.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h isearch.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h isearch.o: readline.h keymaps.h chardefs.h tilde.h ! isearch.o: ansi_stdlib.h history.h rlstdc.h keymaps.o: emacs_keymap.c vi_keymap.c keymaps.o: keymaps.h chardefs.h rlconf.h ansi_stdlib.h keymaps.o: readline.h keymaps.h chardefs.h tilde.h ! keymaps.o: ${BUILD_DIR}/config.h rlstdc.h kill.o: ansi_stdlib.h kill.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h kill.o: readline.h keymaps.h chardefs.h tilde.h ! kill.o: history.h rlstdc.h macro.o: ansi_stdlib.h macro.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h 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 parens.o: rlconf.h parens.o: ${BUILD_DIR}/config.h ! parens.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h readline.o: readline.h keymaps.h chardefs.h tilde.h readline.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! readline.o: history.h rlstdc.h readline.o: posixstat.h ansi_stdlib.h posixjmp.h rltty.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h rltty.o: rltty.h ! rltty.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h search.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h search.o: readline.h keymaps.h chardefs.h tilde.h ! search.o: ansi_stdlib.h history.h rlstdc.h shell.o: ${BUILD_DIR}/config.h shell.o: ansi_stdlib.h signals.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h signals.o: readline.h keymaps.h chardefs.h tilde.h ! signals.o: history.h rlstdc.h terminal.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h terminal.o: tcap.h terminal.o: readline.h keymaps.h chardefs.h tilde.h ! terminal.o: history.h rlstdc.h tilde.o: ansi_stdlib.h tilde.o: ${BUILD_DIR}/config.h *************** *** 351,361 **** undo.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h undo.o: readline.h keymaps.h chardefs.h tilde.h ! undo.o: history.h util.o: posixjmp.h ansi_stdlib.h util.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! util.o: readline.h keymaps.h chardefs.h tilde.h vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h vi_mode.o: readline.h keymaps.h chardefs.h tilde.h ! vi_mode.o: history.h ansi_stdlib.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h --- 319,329 ---- undo.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h undo.o: readline.h keymaps.h chardefs.h tilde.h ! undo.o: history.h rlstdc.h util.o: posixjmp.h ansi_stdlib.h util.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h ! util.o: readline.h keymaps.h chardefs.h tilde.h rlstdc.h vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h vi_mode.o: readline.h keymaps.h chardefs.h tilde.h ! vi_mode.o: history.h ansi_stdlib.h rlstdc.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h *************** *** 386,478 **** histfile.o: $(srcdir)/histfile.c histsearch.o: $(srcdir)/histsearch.c shell.o: $(srcdir)/shell.c tilde.o: $(srcdir)/tilde.c - bind.so: ansi_stdlib.h posixstat.h - bind.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - bind.so: readline.h keymaps.h chardefs.h tilde.h - bind.so: history.h - callback.so: rlconf.h - callback.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - callback.so: readline.h keymaps.h chardefs.h tilde.h - complete.so: ansi_stdlib.h posixdir.h posixstat.h - complete.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - complete.so: readline.h keymaps.h chardefs.h tilde.h - display.so: ansi_stdlib.h posixstat.h - display.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - display.so: tcap.h - display.so: readline.h keymaps.h chardefs.h tilde.h - display.so: history.h - funmap.so: readline.h keymaps.h chardefs.h tilde.h - funmap.so: rlconf.h ansi_stdlib.h - funmap.so: ${BUILD_DIR}/config.h - histexpand.so: ansi_stdlib.h - histexpand.so: history.h histlib.h - histexpand.so: ${BUILD_DIR}/config.h - histfile.so: ansi_stdlib.h - histfile.so: history.h histlib.h - histfile.so: ${BUILD_DIR}/config.h - history.so: ansi_stdlib.h - history.so: history.h histlib.h - history.so: ${BUILD_DIR}/config.h - histsearch.so: ansi_stdlib.h - histsearch.so: history.h histlib.h - histsearch.so: ${BUILD_DIR}/config.h - input.so: ansi_stdlib.h - input.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - input.so: readline.h keymaps.h chardefs.h tilde.h - isearch.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - isearch.so: readline.h keymaps.h chardefs.h tilde.h - isearch.so: ansi_stdlib.h history.h - keymaps.so: emacs_keymap.c vi_keymap.c - keymaps.so: keymaps.h chardefs.h rlconf.h ansi_stdlib.h - keymaps.so: readline.h keymaps.h chardefs.h tilde.h - keymaps.so: ${BUILD_DIR}/config.h - kill.so: ansi_stdlib.h - kill.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - kill.so: readline.h keymaps.h chardefs.h tilde.h - kill.so: history.h - macro.so: ansi_stdlib.h - macro.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - macro.so: readline.h keymaps.h chardefs.h tilde.h - macro.so: history.h - nls.so: ansi_stdlib.h - nls.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - parens.so: rlconf.h - parens.so: ${BUILD_DIR}/config.h - parens.so: readline.h keymaps.h chardefs.h tilde.h - readline.so: readline.h keymaps.h chardefs.h tilde.h - readline.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - readline.so: history.h - readline.so: posixstat.h ansi_stdlib.h posixjmp.h - rltty.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - rltty.so: rltty.h - rltty.so: readline.h keymaps.h chardefs.h tilde.h - search.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - search.so: readline.h keymaps.h chardefs.h tilde.h - search.so: ansi_stdlib.h history.h - signals.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - signals.so: readline.h keymaps.h chardefs.h tilde.h - signals.so: history.h - terminal.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - terminal.so: tcap.h - terminal.so: readline.h keymaps.h chardefs.h tilde.h - terminal.so: history.h - tilde.so: ansi_stdlib.h - tilde.so: ${BUILD_DIR}/config.h - tilde.so: tilde.h - undo.so: ansi_stdlib.h - undo.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - undo.so: readline.h keymaps.h chardefs.h tilde.h - undo.so: history.h - util.so: posixjmp.h ansi_stdlib.h - util.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - util.so: readline.h keymaps.h chardefs.h tilde.h - vi_mode.so: rldefs.h ${BUILD_DIR}/config.h rlconf.h - vi_mode.so: readline.h keymaps.h chardefs.h tilde.h - vi_mode.so: history.h ansi_stdlib.h - xmalloc.so: ${BUILD_DIR}/config.h - xmalloc.so: ansi_stdlib.h - readline.o: readline.c vi_mode.o: vi_mode.c --- 354,361 ---- histfile.o: $(srcdir)/histfile.c histsearch.o: $(srcdir)/histsearch.c + savestring.o: $(srcdir)/savestring.c shell.o: $(srcdir)/shell.c tilde.o: $(srcdir)/tilde.c readline.o: readline.c vi_mode.o: vi_mode.c *************** *** 500,559 **** histfile.o: histfile.c histsearch.o: histsearch.c shell.o: shell.c tilde.o: tilde.c - - readline.so: $(srcdir)/readline.c - vi_mode.so: $(srcdir)/vi_mode.c - funmap.so: $(srcdir)/funmap.c - keymaps.so: $(srcdir)/keymaps.c - parens.so: $(srcdir)/parens.c - search.so: $(srcdir)/search.c - rltty.so: $(srcdir)/rltty.c - complete.so: $(srcdir)/complete.c - bind.so: $(srcdir)/bind.c - isearch.so: $(srcdir)/isearch.c - display.so: $(srcdir)/display.c - signals.so: $(srcdir)/signals.c - util.so: $(srcdir)/util.c - kill.so: $(srcdir)/kill.c - undo.so: $(srcdir)/undo.c - macro.so: $(srcdir)/macro.c - input.so: $(srcdir)/input.c - callback.so: $(srcdir)/callback.c - terminal.so: $(srcdir)/terminal.c - nls.so: $(srcdir)/nls.c - xmalloc.so: $(srcdir)/xmalloc.c - history.so: $(srcdir)/history.c - histexpand.so: $(srcdir)/histexpand.c - histfile.so: $(srcdir)/histfile.c - histsearch.so: $(srcdir)/histsearch.c - shell.so: $(srcdir)/shell.c - tilde.so: $(srcdir)/tilde.c - - readline.so: readline.c - vi_mode.so: vi_mode.c - funmap.so: funmap.c - keymaps.so: keymaps.c - parens.so: parens.c - search.so: search.c - rltty.so: rltty.c - complete.so: complete.c - bind.so: bind.c - isearch.so: isearch.c - display.so: display.c - signals.so: signals.c - util.so: util.c - kill.so: kill.c - undo.so: undo.c - macro.so: macro.c - input.so: input.c - callback.so: callback.c - terminal.so: terminal.c - nls.so: nls.c - xmalloc.so: xmalloc.c - history.so: history.c - histexpand.so: histexpand.c - histfile.so: histfile.c - histsearch.so: histsearch.c - shell.so: shell.c - tilde.so: tilde.c --- 383,387 ---- histfile.o: histfile.c histsearch.o: histsearch.c + savestring.o: savestring.c shell.o: shell.c tilde.o: tilde.c diff -aNrc2 readline-2.2.1/README readline-4.0/README *** readline-2.2.1/README Thu Apr 2 14:48:59 1998 --- readline-4.0/README Tue Dec 22 13:40:27 1998 *************** *** 2,6 **** ============ ! This is the Gnu Readline library, version 2.2 The Readline library provides a set of functions for use by applications --- 2,6 ---- ============ ! This is the Gnu Readline library, version 4.0. The Readline library provides a set of functions for use by applications *************** *** 35,40 **** to customize and control the build process. ! The file rlconf.h contains defines that enable and disable certain ! Readline features. Examples --- 35,40 ---- to customize and control the build process. ! The file rlconf.h contains C preprocessor defines that enable and disable ! certain Readline features. Examples *************** *** 50,79 **** There is skeletal support for building shared versions of the ! Readline and History libraries. ! ! Typing `make shared' will cause shared versions of the Readline and ! History libraries to be built on SunOS 4.1.x. For versions of Unix ! other than SunOS, you will have to make some changes to Makefile.in. ! The relevant variables are: ! ! PICFLAG Options to give to the compiler to produce position-independent ! code. The value `-fpic' works for most versions of gcc. ! SHLIB_OPTS Options to give to the linker to produce a shared library. ! The value `-assert pure-text -ldl' works on SunOS 4.1.x. ! The value `-Bshareable' works for some versions of GNU ld. ! ! MAJOR The major version number of the shared library. You should ! not need to change this. ! MINOR The minor version number of the shared library. Some systems, ! such as SVR4 and its descendents (e.g., Solaris, Unixware), ! do not use minor version numbers. For those systems, this ! variable should be left unset. ! ! LD The linker. The value of `ld' is correct for SunOS 4.1.x. ! You may need to change it to `gcc'; make sure to change ! SHLIB_OPTS if you do so. ! ! Once you have edited Makefile.in, type `make Makefile' to rebuild the ! Makefile, then `make shared' to build the shared libraries. Documentation --- 50,130 ---- There is skeletal support for building shared versions of the ! Readline and History libraries. The configure script creates ! a Makefile in the `shlib' subdirectory, and typing `make shared' ! will cause shared versions of the Readline and History libraries ! to be built on supported platforms. ! ! Configure calls the script support/shobj-conf to test whether or ! not shared library creation is supported and to generate the values ! of variables that are substituted into shlib/Makefile. If you ! try to build shared libraries on an unsupported platform, `make' ! will display a message asking you to update support/shobj-conf for ! your platform. ! ! If you need to update support/shobj-conf, you will need to create ! a `stanza' for your operating system and compiler. The script uses ! the value of host_os and ${CC} as determined by configure. For ! instance, FreeBSD 2.2.5 with any version of gcc is identified as ! `freebsd2.2.5-gcc*'. ! ! In the stanza for your operating system-compiler pair, you will need to ! define several variables. They are: ! ! SHOBJ_CC The C compiler used to compile source files into shareable ! object files. This is normally set to the value of ${CC} ! by configure, and should not need to be changed. ! ! SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create ! position-independent code. If you are using gcc, this ! should probably be set to `-fpic'. ! ! SHOBJ_LD The link editor to be used to create the shared library from ! the object files created by $SHOBJ_CC. If you are using ! gcc, a value of `gcc' will probably work. ! ! SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation. ! If you are using gcc, `-shared' may be all that is necessary. ! These should be the flags needed for generic shared object ! creation. ! ! SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library ! creation. Many systems use the -R option to the link ! editor to embed a path within the library for run-time ! library searches. A reasonable value for such systems would ! be `-R$(libdir)'. ! ! SHLIB_LIBS Any additional libraries that shared libraries should be ! linked against when they are created. ! ! SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when ! generating the filename of the shared library. Many systems ! use `so'; HP-UX uses `sl'. ! ! SHLIB_LIBVERSION The string to append to the filename to indicate the version ! of the shared library. It should begin with $(SHLIB_LIBSUFF), ! and possibly include version information that allows the ! run-time loader to load the version of the shared library ! appropriate for a particular program. Systems using shared ! libraries similar to SunOS 4.x use major and minor library ! version numbers; for those systems a value of ! `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate. ! Systems based on System V Release 4 don't use minor version ! numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems. ! Other Unix versions use different schemes. ! ! SHLIB_STATUS Set this to `supported' when you have defined the other ! necessary variables. Make uses this to determine whether ! or not shared library creation should be attempted. ! ! You should look at the existing stanzas in support/shobj-conf for ideas. ! ! Once you have updated support/shobj-conf, re-run configure and type ! `make shared'. The shared libraries will be created in the shlib ! subdirectory. ! ! Since shared libraries are not created on all platforms, `make install' ! will not automatically install the shared libraries. To install them, ! change the current directory to shlib and type `make install'. Running ! `make install-shared' from the top-level build directory will also work. Documentation *************** *** 94,98 **** When reporting a bug, please include the following information: ! * the version number and release status of Readline (e.g., 2.2-release) * the machine and OS that it is running on * a list of the compilation flags or the contents of `config.h', if --- 145,149 ---- When reporting a bug, please include the following information: ! * the version number and release status of Readline (e.g., 4.0-release) * the machine and OS that it is running on * a list of the compilation flags or the contents of `config.h', if diff -aNrc2 readline-2.2.1/aclocal.m4 readline-4.0/aclocal.m4 *** readline-2.2.1/aclocal.m4 Fri Mar 27 12:04:31 1998 --- readline-4.0/aclocal.m4 Wed Dec 30 11:06:41 1998 *************** *** 27,31 **** } ], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no, ! [AC_MSG_ERROR(cannot check dup2 if cross compiling -- defaulting to no) bash_cv_dup2_broken=no]) ]) --- 27,31 ---- } ], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no, ! [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no) bash_cv_dup2_broken=no]) ]) *************** *** 130,134 **** } ], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, ! [AC_MSG_ERROR(cannot check pgrp synchronization if cross compiling -- defaulting to no) bash_cv_pgrp_pipe=no]) ]) --- 130,134 ---- } ], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, ! [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) bash_cv_pgrp_pipe=no]) ]) *************** *** 188,192 **** exit(1); }], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long, ! [AC_MSG_ERROR(cannot check quad_t if cross compiling -- defaulting to long) bash_cv_type_rlimit=long])]) ]) --- 188,192 ---- exit(1); }], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long, ! [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long) bash_cv_type_rlimit=long])]) ]) *************** *** 212,216 **** #endif], [ char *msg = _sys_siglist[2]; ], bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no, ! [AC_MSG_ERROR(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl AC_MSG_RESULT($bash_cv_decl_under_sys_siglist) if test $bash_cv_decl_under_sys_siglist = yes; then --- 212,216 ---- #endif], [ char *msg = _sys_siglist[2]; ], bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no, ! [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl AC_MSG_RESULT($bash_cv_decl_under_sys_siglist) if test $bash_cv_decl_under_sys_siglist = yes; then *************** *** 238,242 **** }], bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no, ! [AC_MSG_ERROR(cannot check for _sys_siglist[] if cross compiling -- defaulting to no) bash_cv_under_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_under_sys_siglist) --- 238,242 ---- }], bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no, ! [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no) bash_cv_under_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_under_sys_siglist) *************** *** 265,269 **** }], bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no, ! [AC_MSG_ERROR(cannot check for sys_siglist if cross compiling -- defaulting to no) bash_cv_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_sys_siglist) --- 265,269 ---- }], bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no, ! [AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no) bash_cv_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_sys_siglist) *************** *** 326,330 **** exit (dir == 0); }], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, ! [AC_MSG_ERROR(cannot check opendir if cross compiling -- defaulting to no) bash_cv_opendir_not_robust=no] )]) --- 326,330 ---- 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) bash_cv_opendir_not_robust=no] )]) *************** *** 357,391 **** AC_DEFUN(BASH_TYPE_INT32_T, [ ! if test "X$bash_cv_type_int32_t" = "X"; then ! _bash_needmsg=yes else ! AC_MSG_CHECKING(which builtin C type is 32 bits wide) ! _bash_needmsg= ! fi ! AC_CACHE_VAL(bash_cv_type_int32_t, ! [AC_TRY_RUN([ ! main() ! { ! #if SIZEOF_INT == 4 ! exit (0); ! #else ! # if SIZEOF_LONG == 4 ! exit (1); ! # else ! # error cannot find 32 bit type... ! # endif ! #endif ! }], bash_cv_type_int32_t=int, bash_cv_type_int32_t=long, ! [AC_MSG_ERROR(cannot check type sizes if cross-compiling -- defaulting to int) ! bash_cv_type_int32_t=int] ! )]) ! if test "X$_bash_needmsg" = "Xyes"; then ! AC_MSG_CHECKING(which builtin C type is 32 bits wide) ! fi ! AC_MSG_RESULT($bash_cv_type_int32_t); ! if test "$bash_cv_type_int32_t" = "int"; then ! AC_DEFINE(int32_t, int) ! else ! AC_DEFINE(int32_t, long) fi ]) --- 357,366 ---- AC_DEFUN(BASH_TYPE_INT32_T, [ ! if test "$ac_cv_sizeof_int" = 4; then ! AC_CHECK_TYPE(int32_t, int) ! elif test "$ac_cv_sizeof_long" = 4; then ! AC_CHECK_TYPE(int32_t, long) else ! AC_CHECK_TYPE(int32_t, int) fi ]) *************** *** 393,427 **** AC_DEFUN(BASH_TYPE_U_INT32_T, [ ! if test "X$bash_cv_type_u_int32_t" = "X"; then ! _bash_needmsg=yes ! else ! AC_MSG_CHECKING(which unsigned builtin C type is 32 bits wide) ! _bash_needmsg= ! fi ! AC_CACHE_VAL(bash_cv_type_u_int32_t, ! [AC_TRY_RUN([ ! main() ! { ! #if SIZEOF_INT == 4 ! exit (0); ! #else ! # if SIZEOF_LONG == 4 ! exit (1); ! # else ! # error cannot find 32 bit type... ! # endif ! #endif ! }], bash_cv_type_u_int32_t=int, bash_cv_type_u_int32_t=long, ! [AC_MSG_ERROR(cannot check type sizes if cross-compiling -- defaulting to int) ! bash_cv_type_u_int32_t=int] ! )]) ! if test "X$_bash_needmsg" = "Xyes"; then ! AC_MSG_CHECKING(which unsigned builtin C type is 32 bits wide) ! fi ! AC_MSG_RESULT($bash_cv_type_u_int32_t); ! if test "$bash_cv_type_u_int32_t" = "int"; then ! AC_DEFINE(u_int32_t, unsigned int) else ! AC_DEFINE(u_int32_t, unsigned long) fi ]) --- 368,377 ---- AC_DEFUN(BASH_TYPE_U_INT32_T, [ ! if test "$ac_cv_sizeof_int" = 4; then ! AC_CHECK_TYPE(u_int32_t, unsigned int) ! elif test "$ac_cv_sizeof_long" = 4; then ! AC_CHECK_TYPE(u_int32_t, unsigned long) else ! AC_CHECK_TYPE(u_int32_t, unsigned int) fi ]) *************** *** 429,463 **** AC_DEFUN(BASH_TYPE_PTRDIFF_T, [ ! if test "X$bash_cv_type_ptrdiff_t" = "X"; then ! _bash_needmsg=yes else ! AC_MSG_CHECKING(which builtin C type is correct for ptrdiff_t) ! _bash_needmsg= fi ! AC_CACHE_VAL(bash_cv_type_ptrdiff_t, ! [AC_TRY_RUN([ ! main() ! { ! #if SIZEOF_CHAR_P == SIZEOF_INT ! exit (0); ! #else ! # if SIZEOF_CHAR_P == SIZEOF_LONG ! exit (1); ! # else ! # error cannot find type for pointer arithmetic... ! # endif ! #endif ! }], bash_cv_type_ptrdiff_t=int, bash_cv_type_ptrdiff_t=long, ! [AC_MSG_ERROR(cannot check type sizes if cross-compiling -- defaulting to int) ! bash_cv_type_ptrdiff_t=int] ! )]) ! if test "X$_bash_needmsg" = "Xyes"; then ! AC_MSG_CHECKING(which builtin C type is correct for ptrdiff_t) ! fi ! AC_MSG_RESULT($bash_cv_type_ptrdiff_t); ! if test "$bash_cv_type_ptrdiff_t" = "int"; then ! AC_DEFINE(ptrdiff_t, int) else ! AC_DEFINE(ptrdiff_t, long) fi ]) --- 379,401 ---- AC_DEFUN(BASH_TYPE_PTRDIFF_T, [ ! if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then ! AC_CHECK_TYPE(ptrdiff_t, int) ! elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then ! AC_CHECK_TYPE(ptrdiff_t, long) else ! AC_CHECK_TYPE(ptrdiff_t, int) fi ! ]) ! ! AC_DEFUN(BASH_TYPE_BITS64_T, ! [ ! if test "$ac_sv_sizeof_char_p" = 8; then ! AC_CHECK_TYPE(bits64_t, char *) ! elif test "$ac_cv_sizeof_double" = 8; then ! AC_CHECK_TYPE(bits64_t, double) ! elif test "$ac_cv_sizeof_long" = 8; then ! AC_CHECK_TYPE(bits64_t, long) else ! AC_CHECK_TYPE(bits64_t, double) fi ]) *************** *** 549,553 **** } ], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no, ! [AC_MSG_ERROR(cannot check getenv redefinition if cross compiling -- defaulting to yes) bash_cv_getenv_redef=yes] )]) --- 487,491 ---- } ], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no, ! [AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes) bash_cv_getenv_redef=yes] )]) *************** *** 575,579 **** } ], bash_cv_printf_declared=yes, bash_cv_printf_declared=no, ! [AC_MSG_ERROR(cannot check printf declaration if cross compiling -- defaulting to yes) bash_cv_printf_declared=yes] )]) --- 513,517 ---- } ], bash_cv_printf_declared=yes, bash_cv_printf_declared=no, ! [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes) bash_cv_printf_declared=yes] )]) *************** *** 594,598 **** } ], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no, ! [AC_MSG_ERROR(cannot check ulimit if cross compiling -- defaulting to no) bash_cv_ulimit_maxfds=no] )]) --- 532,536 ---- } ], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no, ! [AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no) bash_cv_ulimit_maxfds=no] )]) *************** *** 691,695 **** } ], bash_cv_getcwd_calls_popen=no, bash_cv_getcwd_calls_popen=yes, ! [AC_MSG_ERROR(cannot check whether getcwd calls popen if cross compiling -- defaulting to no) bash_cv_getcwd_calls_popen=no] )]) --- 629,633 ---- } ], bash_cv_getcwd_calls_popen=no, bash_cv_getcwd_calls_popen=yes, ! [AC_MSG_WARN(cannot check whether getcwd calls popen if cross compiling -- defaulting to no) bash_cv_getcwd_calls_popen=no] )]) *************** *** 815,819 **** } ], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes, ! [AC_MSG_ERROR(cannot check signal handling if cross compiling -- defaulting to no) bash_cv_must_reinstall_sighandlers=no] )]) --- 753,757 ---- } ], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes, ! [AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no) bash_cv_must_reinstall_sighandlers=no] )]) *************** *** 884,888 **** exit(0); }], bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing, ! [AC_MSG_ERROR(cannot check job control if cross-compiling -- defaulting to missing) bash_cv_job_control_missing=missing] )]) --- 822,826 ---- exit(0); }], bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing, ! [AC_MSG_WARN(cannot check job control if cross-compiling -- defaulting to missing) bash_cv_job_control_missing=missing] )]) *************** *** 929,933 **** exit(0); }], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, ! [AC_MSG_ERROR(cannot check for named pipes if cross-compiling -- defaulting to missing) bash_cv_sys_named_pipes=missing] )]) --- 867,871 ---- 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) bash_cv_sys_named_pipes=missing] )]) *************** *** 980,984 **** #endif }], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing, ! [AC_MSG_ERROR(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing) bash_cv_func_sigsetjmp=missing] )]) --- 918,922 ---- #endif }], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing, ! [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing) bash_cv_func_sigsetjmp=missing] )]) *************** *** 1247,1251 **** } ], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no, ! [AC_MSG_ERROR(cannot check strcoll if cross compiling -- defaulting to no) bash_cv_func_strcoll_broken=no] )]) --- 1185,1189 ---- } ], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no, ! [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no) bash_cv_func_strcoll_broken=no] )]) *************** *** 1337,1341 **** } ], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no, ! AC_MSG_ERROR(cannot check restartable syscalls if cross compiling)) ]) if test $bash_cv_sys_restartable_syscalls = yes; then --- 1275,1279 ---- } ], bash_cv_sys_restartable_syscalls=yes, bash_cv_sys_restartable_syscalls=no, ! AC_MSG_WARN(cannot check restartable syscalls if cross compiling)) ]) if test $bash_cv_sys_restartable_syscalls = yes; then *************** *** 1343,1344 **** --- 1281,1301 ---- fi ]) + dnl + dnl Check for 64-bit off_t -- used for malloc alignment + dnl + dnl C does not allow duplicate case labels, so the compile will fail if + dnl sizeof(off_t) is > 4. + dnl + AC_DEFUN(BASH_CHECK_OFF_T_64, + [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64, + AC_TRY_COMPILE([ + #ifdef HAVE_UNISTD_H + #include + #endif + #include + ],[ + switch (0) case 0: case (sizeof (off_t) <= 4):; + ], bash_cv_off_t_64=no, bash_cv_off_t_64=yes)) + if test $bash_cv_off_t_64 = yes; then + AC_DEFINE(HAVE_OFF_T_64) + fi]) diff -aNrc2 readline-2.2.1/bind.c readline-4.0/bind.c *** readline-2.2.1/bind.c Mon Oct 6 13:45:33 1997 --- readline-4.0/bind.c Tue Feb 2 13:26:20 1999 *************** *** 84,87 **** --- 84,88 ---- extern int rl_inhibit_completion; extern char *_rl_comment_begin; + extern unsigned char *_rl_isearch_terminators; extern int rl_explicit_arg; *************** *** 208,218 **** Keymap map; { ! register int i; ! for (i = 0; i < KEYMAP_SIZE; i++) { if (map[i].type == ISFUNC && map[i].function == func) ! map[i].function = (Function *)NULL; } } --- 209,223 ---- Keymap map; { ! register int i, rval; ! for (i = rval = 0; i < KEYMAP_SIZE; i++) { if (map[i].type == ISFUNC && map[i].function == func) ! { ! map[i].function = (Function *)NULL; ! rval = 1; ! } } + return rval; } *************** *** 223,227 **** { Function *func; - register int i; func = rl_named_function (command); --- 228,231 ---- *************** *** 664,668 **** --- 668,676 ---- close (file); + #if 0 if (i < file_size) + #else + if (i < 0) + #endif { free (buffer); *************** *** 728,731 **** --- 736,741 ---- openname = tilde_expand (filename); buffer = _rl_read_file (openname, &file_size); + free (openname); + if (buffer == 0) return (errno); *************** *** 1339,1343 **** --- 1349,1380 ---- _rl_bell_preference = AUDIBLE_BELL; } + else if (_rl_stricmp (name, "isearch-terminators") == 0) + { + /* Isolate the value and translate it into a character string. */ + int beg, end; + char *v; + + 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'; + /* 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. */ return 0; *************** *** 1493,1497 **** { char *keyname; ! int i, c, v; keyname = (char *)xmalloc (8); --- 1530,1534 ---- { char *keyname; ! int i, c; keyname = (char *)xmalloc (8); *************** *** 1898,1901 **** --- 1935,1953 ---- else fprintf (rl_outstream, "keymap is set to `%s'\n", kname ? kname : "none"); + + /* isearch-terminators */ + if (_rl_isearch_terminators) + { + char *disp; + + disp = _rl_untranslate_macro_value (_rl_isearch_terminators); + + if (print_readably) + fprintf (rl_outstream, "set isearch-terminators \"%s\"\n", disp); + else + fprintf (rl_outstream, "isearch-terminators is set to \"%s\"\n", disp); + + free (disp); + } } diff -aNrc2 readline-2.2.1/callback.c readline-4.0/callback.c *** readline-2.2.1/callback.c Thu Feb 5 13:40:46 1998 --- readline-4.0/callback.c Wed Jun 3 13:34:10 1998 *************** *** 37,41 **** #include "readline.h" ! extern void readline_internal_startup (); extern char *readline_internal_teardown (); extern int readline_internal_char (); --- 37,41 ---- #include "readline.h" ! extern void readline_internal_setup (); extern char *readline_internal_teardown (); extern int readline_internal_char (); diff -aNrc2 readline-2.2.1/complete.c readline-4.0/complete.c *** readline-2.2.1/complete.c Thu Jan 29 15:19:46 1998 --- readline-4.0/complete.c Thu Feb 18 12:35:57 1999 *************** *** 86,89 **** --- 86,98 ---- extern int rl_display_fixed; + /* 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 instead of actually doing the display. + It takes three arguments: (char **matches, int num_matches, int max_length) + where MATCHES is the array of strings that matched, NUM_MATCHES is the + number of strings in that array, and MAX_LENGTH is the length of the + longest string in that array. */ + VFunction *rl_completion_display_matches_hook = (VFunction *)NULL; + /* Forward declarations for functions defined and used in this file. */ char *filename_completion_function (); *************** *** 675,678 **** --- 684,688 ---- filename dequoting function. */ temp = (char *)NULL; + if (found_quote && our_func == (Function *)filename_completion_function && rl_filename_dequoting_function) *************** *** 683,687 **** } ! matches = completion_matches (text, our_func); FREE (temp); return matches; --- 693,697 ---- } ! matches = completion_matches (text, (CPFunction *)our_func); FREE (temp); return matches; *************** *** 814,819 **** static int ! postprocess_matches (text, matchesp, matching_filenames) ! char *text; char ***matchesp; int matching_filenames; --- 824,828 ---- static int ! postprocess_matches (matchesp, matching_filenames) char ***matchesp; int matching_filenames; *************** *** 846,850 **** { FREE (matches); - ding (); *matchesp = (char **)0; return 0; --- 855,858 ---- *************** *** 858,862 **** { t = matches[0]; ! compute_lcd_of_matches (matches, i - 1, text); FREE (t); } --- 866,870 ---- { t = matches[0]; ! compute_lcd_of_matches (matches, i - 1, t); FREE (t); } *************** *** 868,931 **** } ! static void ! display_matches (matches) char **matches; { ! int len, count, limit, max, printed_len; int i, j, k, l; char *temp; - /* Move to the last visible line of a possibly-multiple-line command. */ - _rl_move_vert (_rl_vis_botlin); - - /* Handle simple case first. What if there is only one answer? */ - if (matches[1] == 0) - { - temp = printable_part (matches[0]); - crlf (); - print_filename (temp, matches[0]); - crlf (); - #if 0 - rl_on_new_line (); - #else - rl_forced_update_display (); - rl_display_fixed = 1; - #endif - return; - } - - /* There is more than one answer. Find out how many there are, - and find the maximum printed length of a single entry. */ - for (max = 0, i = 1; matches[i]; i++) - { - temp = printable_part (matches[i]); - len = strlen (temp); - - if (len > max) - max = len; - } - - len = i - 1; - - /* If there are many items, then ask the user if she really wants to - see them all. */ - if (len >= rl_completion_query_items) - { - crlf (); - fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len); - fflush (rl_outstream); - if (get_y_or_n () == 0) - { - crlf (); - #if 0 - rl_on_new_line (); - #else - rl_forced_update_display (); - rl_display_fixed = 1; - #endif - return; - } - } - /* How many items of MAX length can we fit in the screen window? */ max += 2; --- 876,892 ---- } ! /* 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, LEN is the number of strings in MATCHES, ! and MAX is the length of the longest string in MATCHES. */ ! void ! rl_display_match_list (matches, len, max) char **matches; + int len, max; { ! int count, limit, printed_len; int i, j, k, l; char *temp; /* How many items of MAX length can we fit in the screen window? */ max += 2; *************** *** 994,1004 **** crlf (); } - #if 0 - rl_on_new_line (); - #else rl_forced_update_display (); rl_display_fixed = 1; - #endif } --- 955,1037 ---- crlf (); } + } + + /* Display MATCHES, a list of matching filenames in argv format. This + handles the simple case -- a single match -- first. If there is more + than one match, we compute the number of strings in the list and the + length of the longest string, which will be needed by the display + function. If the application wants to handle displaying the list of + matches itself, it sets RL_COMPLETION_DISPLAY_MATCHES_HOOK to the + address of a function, and we just call it. If we're handling the + display ourselves, we just call rl_display_match_list. We also check + that the list of matches doesn't exceed the user-settable threshold, + and ask the user if he wants to see the list if there are more matches + than RL_COMPLETION_QUERY_ITEMS. */ + static void + display_matches (matches) + char **matches; + { + int len, max, i; + char *temp; + + /* Move to the last visible line of a possibly-multiple-line command. */ + _rl_move_vert (_rl_vis_botlin); + + /* Handle simple case first. What if there is only one answer? */ + if (matches[1] == 0) + { + temp = printable_part (matches[0]); + crlf (); + print_filename (temp, matches[0]); + crlf (); + + rl_forced_update_display (); + rl_display_fixed = 1; + + return; + } + + /* There is more than one answer. Find out how many there are, + and find the maximum printed length of a single entry. */ + for (max = 0, i = 1; matches[i]; i++) + { + temp = printable_part (matches[i]); + len = strlen (temp); + + if (len > max) + max = len; + } + + len = i - 1; + + /* If the caller has defined a display hook, then call that now. */ + if (rl_completion_display_matches_hook) + { + (*rl_completion_display_matches_hook) (matches, len, max); + return; + } + + /* If there are many items, then ask the user if she really wants to + see them all. */ + if (len >= rl_completion_query_items) + { + crlf (); + fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len); + fflush (rl_outstream); + if (get_y_or_n () == 0) + { + crlf (); + + rl_forced_update_display (); + rl_display_fixed = 1; + + return; + } + } + + rl_display_match_list (matches, len, max); rl_forced_update_display (); rl_display_fixed = 1; } *************** *** 1027,1035 **** if (should_quote) ! #if defined (SHELL) ! should_quote = should_quote && (!qc || !*qc || *qc == '"' || *qc == '\''); ! #else /* !SHELL */ ! should_quote = should_quote && (!qc || !*qc); ! #endif /* !SHELL */ if (should_quote) --- 1060,1065 ---- if (should_quote) ! should_quote = should_quote && (!qc || !*qc || ! (rl_completer_quote_characters && strchr (rl_completer_quote_characters, *qc))); if (should_quote) *************** *** 1169,1172 **** --- 1199,1213 ---- } + static void + free_match_list (matches) + char **matches; + { + register int i; + + for (i = 0; matches[i]; i++) + free (matches[i]); + free (matches); + } + /* Complete the word at or before point. WHAT_TO_DO says what to do with the completion. *************** *** 1211,1214 **** --- 1252,1256 ---- text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); + free (text); if (matches == 0) *************** *** 1216,1235 **** ding (); FREE (saved_line_buffer); - free (text); return (0); } /* If we are matching filenames, our_func will have been set to filename_completion_function */ i = our_func == (Function *)filename_completion_function; ! if (postprocess_matches (text, &matches, i) == 0) { FREE (saved_line_buffer); ! free (text); return (0); } - free (text); - switch (what_to_do) { --- 1258,1283 ---- ding (); FREE (saved_line_buffer); return (0); } + #if 0 /* If we are matching filenames, our_func will have been set to filename_completion_function */ i = our_func == (Function *)filename_completion_function; ! #else ! /* If we are matching filenames, the attempted completion function will ! have set rl_filename_completion_desired to a non-zero value. The basic ! filename_completion_function does this. */ ! i = rl_filename_completion_desired; ! #endif ! ! if (postprocess_matches (&matches, i) == 0) { + ding (); FREE (saved_line_buffer); ! completion_changed_buffer = 0; return (0); } switch (what_to_do) { *************** *** 1278,1284 **** } ! for (i = 0; matches[i]; i++) ! free (matches[i]); ! free (matches); /* Check to see if the line has changed through all of this manipulation. */ --- 1326,1330 ---- } ! free_match_list (matches); /* Check to see if the line has changed through all of this manipulation. */ *************** *** 1359,1366 **** char * username_completion_function (text, state) - int state; char *text; { ! #if defined (__GO32__) || defined (__WIN32__) return (char *)NULL; #else /* !__GO32__ */ --- 1405,1412 ---- char * username_completion_function (text, state) char *text; + int state; { ! #if defined (__GO32__) || defined (__WIN32__) || defined (__OPENNT) return (char *)NULL; #else /* !__GO32__ */ *************** *** 1416,1421 **** char * filename_completion_function (text, state) - int state; char *text; { static DIR *directory = (DIR *)NULL; --- 1462,1467 ---- char * filename_completion_function (text, state) char *text; + int state; { static DIR *directory = (DIR *)NULL; *************** *** 1575,1579 **** } ! strcpy (temp + dirlen, entry->d_name); /* strcat (temp, entry->d_name); */ } else --- 1621,1625 ---- } ! strcpy (temp + dirlen, entry->d_name); } else *************** *** 1650,1657 **** our_func, found_quote, quote_char); /* If we are matching filenames, our_func will have been set to filename_completion_function */ matching_filenames = our_func == (Function *)filename_completion_function; ! if (matches == 0 || postprocess_matches (orig_text, &matches, matching_filenames) == 0) { ding (); --- 1696,1710 ---- our_func, found_quote, quote_char); + #if 0 /* If we are matching filenames, our_func will have been set to filename_completion_function */ matching_filenames = our_func == (Function *)filename_completion_function; ! #else ! /* If we are matching filenames, the attempted completion function will ! have set rl_filename_completion_desired to a non-zero value. The basic ! filename_completion_function does this. */ ! matching_filenames = rl_filename_completion_desired; ! #endif ! if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) { ding (); *************** *** 1687,1691 **** match_list_index += match_list_size; ! if (match_list_index == 0) { ding (); --- 1740,1744 ---- match_list_index += match_list_size; ! if (match_list_index == 0 && match_list_size > 1) { ding (); diff -aNrc2 readline-2.2.1/configure readline-4.0/configure *** readline-2.2.1/configure Fri Apr 3 11:12:13 1998 --- readline-4.0/configure Thu Feb 18 15:44:06 1999 *************** *** 1,6 **** #! /bin/sh ! # From configure.in for Readline 2.2, version 2.07, from autoconf version 2.12 ! LIBVERSION=2.2 --- 1,9 ---- #! /bin/sh ! # From configure.in for Readline 4.0, version 2.14, from autoconf version 2.12 ! LIBVERSION=4.0 ! ! ! *************** *** 640,644 **** echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:643: checking host system type" >&5 host_alias=$host --- 643,647 ---- echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:646: checking host system type" >&5 host_alias=$host *************** *** 681,685 **** set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:684: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 684,688 ---- set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:687: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 710,714 **** set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:713: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 713,717 ---- set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:716: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 758,762 **** echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:761: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c --- 761,765 ---- echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6 ! echo "configure:764: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5 ac_ext=c *************** *** 768,776 **** cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. --- 771,779 ---- cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then ac_cv_prog_cc_works=yes # If we can't run a trivial program, we are probably using a cross compiler. *************** *** 792,801 **** fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:795: 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:800: 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 --- 795,804 ---- fi echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6 ! echo "configure:798: 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:803: 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 *************** *** 806,810 **** #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:809: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else --- 809,813 ---- #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else *************** *** 821,825 **** CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:824: 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 --- 824,828 ---- CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:827: 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 *************** *** 849,853 **** echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:852: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then --- 852,856 ---- echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:855: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then *************** *** 864,868 **** # not just through cpp. cat > conftest.$ac_ext < --- 867,871 ---- # not just through cpp. cat > conftest.$ac_ext < *************** *** 870,874 **** EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 873,877 ---- EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:876: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** *** 881,885 **** CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < --- 884,888 ---- CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < *************** *** 887,891 **** EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:890: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 890,894 ---- EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:893: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** *** 911,925 **** ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 ! echo "configure:914: 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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:924: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 914,928 ---- ac_safe=`echo "minix/config.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for minix/config.h""... $ac_c" 1>&6 ! echo "configure:917: 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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:927: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** *** 964,968 **** if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 ! echo "configure:967: 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 --- 967,971 ---- if test $ac_cv_prog_gcc = yes; then echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6 ! echo "configure:970: 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 *************** *** 970,974 **** ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < --- 973,977 ---- ac_pattern="Autoconf.*'x'" cat > conftest.$ac_ext < *************** *** 988,992 **** if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < --- 991,995 ---- if test $ac_cv_prog_gcc_traditional = no; then cat > conftest.$ac_ext < *************** *** 1020,1024 **** # ./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:1023: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then --- 1023,1027 ---- # ./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:1026: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then *************** *** 1069,1076 **** test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' # 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:1075: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1072,1108 ---- 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:1078: 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 + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. + else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_AR="ar" + break + fi + done + IFS="$ac_save_ifs" + fi + fi + AR="$ac_cv_prog_AR" + if test -n "$AR"; then + echo "$ac_t""$AR" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + 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:1107: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** *** 1099,1109 **** echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:1103: 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 < --- 1131,1144 ---- + MAKE_SHELL=/bin/sh + + echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:1138: 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 < *************** *** 1122,1126 **** ; return 0; } EOF ! if { (eval echo configure:1125: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void --- 1157,1161 ---- ; return 0; } EOF ! if { (eval echo configure:1160: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void *************** *** 1142,1151 **** echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 ! echo "configure:1145: 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 < --- 1177,1186 ---- echo $ac_n "checking whether stat file-mode macros are broken""... $ac_c" 1>&6 ! echo "configure:1180: 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 < *************** *** 1202,1211 **** ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 ! echo "configure:1205: 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 < --- 1237,1246 ---- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6 ! echo "configure:1240: 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 < *************** *** 1215,1219 **** ; return 0; } EOF ! if { (eval echo configure:1218: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" --- 1250,1254 ---- ; return 0; } EOF ! if { (eval echo configure:1253: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* eval "ac_cv_header_dirent_$ac_safe=yes" *************** *** 1240,1244 **** if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 ! echo "configure:1243: 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 --- 1275,1279 ---- if test $ac_header_dirent = dirent.h; then echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6 ! echo "configure:1278: 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 *************** *** 1248,1252 **** LIBS="-ldir $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 1294,1298 ---- ; return 0; } EOF ! if { (eval echo configure:1297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 1281,1285 **** else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 ! echo "configure:1284: 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 --- 1316,1320 ---- else echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6 ! echo "configure:1319: 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 *************** *** 1289,1293 **** LIBS="-lx $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 1335,1339 ---- ; return 0; } EOF ! if { (eval echo configure:1338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 1326,1335 **** do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1329: 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 <&6 ! echo "configure:1364: 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 <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" --- 1389,1393 ---- ; return 0; } EOF ! if { (eval echo configure:1392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" *************** *** 1380,1384 **** echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 ! echo "configure:1383: 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 --- 1415,1419 ---- echo $ac_n "checking for working strcoll""... $ac_c" 1>&6 ! echo "configure:1418: 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 *************** *** 1388,1392 **** else cat > conftest.$ac_ext < --- 1423,1427 ---- else cat > conftest.$ac_ext < *************** *** 1398,1402 **** } EOF ! if { (eval echo configure:1401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_strcoll_works=yes --- 1433,1437 ---- } EOF ! if { (eval echo configure:1436: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then ac_cv_func_strcoll_works=yes *************** *** 1427,1441 **** ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1430: 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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1440: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then --- 1462,1476 ---- ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1465: 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 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1475: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out` if test -z "$ac_err"; then *************** *** 1466,1470 **** echo $ac_n "checking for type of signal functions""... $ac_c" 1>&6 ! echo "configure:1469: 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 --- 1501,1505 ---- echo $ac_n "checking for type of signal functions""... $ac_c" 1>&6 ! echo "configure:1504: 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 *************** *** 1472,1476 **** cat > conftest.$ac_ext < --- 1507,1511 ---- cat > conftest.$ac_ext < *************** *** 1485,1489 **** ; return 0; } EOF ! if { (eval echo configure:1488: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=posix --- 1520,1524 ---- ; return 0; } EOF ! if { (eval echo configure:1523: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=posix *************** *** 1494,1498 **** cat > conftest.$ac_ext < --- 1529,1533 ---- cat > conftest.$ac_ext < *************** *** 1504,1508 **** ; return 0; } EOF ! if { (eval echo configure:1507: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=4.2bsd --- 1539,1543 ---- ; return 0; } EOF ! if { (eval echo configure:1542: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=4.2bsd *************** *** 1513,1517 **** cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=svr3 --- 1561,1565 ---- ; return 0; } EOF ! if { (eval echo configure:1564: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_signal_vintage=svr3 *************** *** 1567,1581 **** echo $ac_n "checking if signal handlers must be reinstalled when invoked""... $ac_c" 1>&6 ! echo "configure:1570: 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 if test "$cross_compiling" = yes; then ! { echo "configure: error: cannot check signal handling if cross compiling -- defaulting to no" 1>&2; exit 1; } bash_cv_must_reinstall_sighandlers=no else cat > conftest.$ac_ext <&6 ! echo "configure:1605: 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 if test "$cross_compiling" = yes; then ! echo "configure: warning: cannot check signal handling if cross compiling -- defaulting to no" 1>&2 bash_cv_must_reinstall_sighandlers=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_must_reinstall_sighandlers=no --- 1659,1663 ---- EOF ! if { (eval echo configure:1662: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_must_reinstall_sighandlers=no *************** *** 1649,1663 **** echo $ac_n "checking for presence of POSIX-style sigsetjmp/siglongjmp""... $ac_c" 1>&6 ! echo "configure:1652: 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 if test "$cross_compiling" = yes; then ! { echo "configure: error: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" 1>&2; exit 1; } bash_cv_func_sigsetjmp=missing else cat > conftest.$ac_ext <&6 ! echo "configure:1687: 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 if test "$cross_compiling" = yes; then ! echo "configure: warning: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" 1>&2 bash_cv_func_sigsetjmp=missing else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_func_sigsetjmp=present --- 1735,1739 ---- } EOF ! if { (eval echo configure:1738: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_func_sigsetjmp=present *************** *** 1723,1732 **** echo $ac_n "checking for lstat""... $ac_c" 1>&6 ! echo "configure:1726: 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 <&6 ! echo "configure:1761: 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 <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_func_lstat=yes --- 1773,1777 ---- ; return 0; } EOF ! if { (eval echo configure:1776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* bash_cv_func_lstat=yes *************** *** 1759,1768 **** echo $ac_n "checking whether programs are able to redeclare getpw functions""... $ac_c" 1>&6 ! echo "configure:1762: 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 < --- 1794,1803 ---- echo $ac_n "checking whether programs are able to redeclare getpw functions""... $ac_c" 1>&6 ! echo "configure:1797: 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 < *************** *** 1775,1779 **** ; return 0; } EOF ! if { (eval echo configure:1778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_can_redecl_getpw=yes --- 1810,1814 ---- ; return 0; } EOF ! if { (eval echo configure:1813: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_can_redecl_getpw=yes *************** *** 1797,1811 **** echo $ac_n "checking whether or not strcoll and strcmp differ""... $ac_c" 1>&6 ! echo "configure:1800: 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 if test "$cross_compiling" = yes; then ! { echo "configure: error: cannot check strcoll if cross compiling -- defaulting to no" 1>&2; exit 1; } bash_cv_func_strcoll_broken=no else cat > conftest.$ac_ext <&6 ! echo "configure:1835: 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 if test "$cross_compiling" = yes; then ! echo "configure: warning: cannot check strcoll if cross compiling -- defaulting to no" 1>&2 bash_cv_func_strcoll_broken=no else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_func_strcoll_broken=yes --- 1881,1885 ---- EOF ! if { (eval echo configure:1884: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null then bash_cv_func_strcoll_broken=yes *************** *** 1870,1879 **** echo $ac_n "checking whether signal handlers are of type void""... $ac_c" 1>&6 ! echo "configure:1873: 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 < --- 1905,1914 ---- echo $ac_n "checking whether signal handlers are of type void""... $ac_c" 1>&6 ! echo "configure:1908: 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 < *************** *** 1890,1894 **** ; return 0; } EOF ! if { (eval echo configure:1893: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_void_sighandler=yes --- 1925,1929 ---- ; return 0; } EOF ! if { (eval echo configure:1928: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_void_sighandler=yes *************** *** 1910,1919 **** echo $ac_n "checking for TIOCGWINSZ in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:1913: 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 < --- 1945,1954 ---- echo $ac_n "checking for TIOCGWINSZ in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:1948: 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 < *************** *** 1923,1927 **** ; return 0; } EOF ! if { (eval echo configure:1926: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocgwinsz_in_ioctl=yes --- 1958,1962 ---- ; return 0; } EOF ! if { (eval echo configure:1961: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocgwinsz_in_ioctl=yes *************** *** 1944,1953 **** echo $ac_n "checking for TIOCSTAT in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:1947: 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 < --- 1979,1988 ---- echo $ac_n "checking for TIOCSTAT in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:1982: 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 < *************** *** 1957,1961 **** ; return 0; } EOF ! if { (eval echo configure:1960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocstat_in_ioctl=yes --- 1992,1996 ---- ; return 0; } EOF ! if { (eval echo configure:1995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_tiocstat_in_ioctl=yes *************** *** 1978,1987 **** echo $ac_n "checking for FIONREAD in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:1981: 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 < --- 2013,2022 ---- echo $ac_n "checking for FIONREAD in sys/ioctl.h""... $ac_c" 1>&6 ! echo "configure:2016: 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 < *************** *** 1991,1995 **** ; return 0; } EOF ! if { (eval echo configure:1994: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_fionread_in_ioctl=yes --- 2026,2030 ---- ; return 0; } EOF ! if { (eval echo configure:2029: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_fionread_in_ioctl=yes *************** *** 2012,2021 **** echo $ac_n "checking for speed_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:2015: 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 < --- 2047,2056 ---- echo $ac_n "checking for speed_t in sys/types.h""... $ac_c" 1>&6 ! echo "configure:2050: 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 < *************** *** 2024,2028 **** ; return 0; } EOF ! if { (eval echo configure:2027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_speed_t_in_sys_types=yes --- 2059,2063 ---- ; return 0; } EOF ! if { (eval echo configure:2062: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_speed_t_in_sys_types=yes *************** *** 2045,2054 **** echo $ac_n "checking for struct winsize in sys/ioctl.h and termios.h""... $ac_c" 1>&6 ! echo "configure:2048: 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 < --- 2080,2089 ---- echo $ac_n "checking for struct winsize in sys/ioctl.h and termios.h""... $ac_c" 1>&6 ! echo "configure:2083: 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 < *************** *** 2058,2062 **** ; return 0; } EOF ! if { (eval echo configure:2061: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=ioctl_h --- 2093,2097 ---- ; return 0; } EOF ! if { (eval echo configure:2096: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=ioctl_h *************** *** 2066,2070 **** rm -rf conftest* cat > conftest.$ac_ext < --- 2101,2105 ---- rm -rf conftest* cat > conftest.$ac_ext < *************** *** 2074,2078 **** ; return 0; } EOF ! if { (eval echo configure:2077: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=termios_h --- 2109,2113 ---- ; return 0; } EOF ! if { (eval echo configure:2112: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_struct_winsize_header=termios_h *************** *** 2107,2116 **** echo $ac_n "checking if struct dirent has a d_ino member""... $ac_c" 1>&6 ! echo "configure:2110: 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 <&6 ! echo "configure:2145: 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 <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_dino=yes --- 2176,2180 ---- ; return 0; } EOF ! if { (eval echo configure:2179: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_dino=yes *************** *** 2163,2172 **** echo $ac_n "checking if struct dirent has a d_fileno member""... $ac_c" 1>&6 ! echo "configure:2166: 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 <&6 ! echo "configure:2201: 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 <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_d_fileno=yes --- 2232,2236 ---- ; return 0; } EOF ! if { (eval echo configure:2235: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* bash_cv_dirent_has_d_fileno=yes *************** *** 2226,2230 **** else echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 ! echo "configure:2229: checking which library has the termcap functions" >&5 _bash_needmsg= fi --- 2261,2265 ---- else echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 ! echo "configure:2264: checking which library has the termcap functions" >&5 _bash_needmsg= fi *************** *** 2233,2237 **** else echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 ! echo "configure:2236: 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 --- 2268,2272 ---- else echo $ac_n "checking for tgetent in -ltermcap""... $ac_c" 1>&6 ! echo "configure:2271: 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 *************** *** 2241,2245 **** LIBS="-ltermcap $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2287,2291 ---- ; return 0; } EOF ! if { (eval echo configure:2290: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 2271,2275 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 ! echo "configure:2274: 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 --- 2306,2310 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lcurses""... $ac_c" 1>&6 ! echo "configure:2309: 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 *************** *** 2279,2283 **** LIBS="-lcurses $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2325,2329 ---- ; return 0; } EOF ! if { (eval echo configure:2328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 2309,2313 **** echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 ! echo "configure:2312: 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 --- 2344,2348 ---- echo "$ac_t""no" 1>&6 echo $ac_n "checking for tgetent in -lncurses""... $ac_c" 1>&6 ! echo "configure:2347: 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 *************** *** 2317,2321 **** LIBS="-lncurses $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" --- 2363,2367 ---- ; return 0; } EOF ! if { (eval echo configure:2366: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" *************** *** 2357,2361 **** if test "X$_bash_needmsg" = "Xyes"; then echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 ! echo "configure:2360: checking which library has the termcap functions" >&5 fi echo "$ac_t""using $bash_cv_termcap_lib" 1>&6 --- 2392,2396 ---- if test "X$_bash_needmsg" = "Xyes"; then echo $ac_n "checking which library has the termcap functions""... $ac_c" 1>&6 ! echo "configure:2395: checking which library has the termcap functions" >&5 fi echo "$ac_t""using $bash_cv_termcap_lib" 1>&6 *************** *** 2387,2390 **** --- 2422,2449 ---- esac + # shared library configuration section + # + # Shared object configuration section. These values are generated by + # ${srcdir}/support/shobj-conf + # + if test -f ${srcdir}/support/shobj-conf; then + echo $ac_n "checking configuration for building shared libraries""... $ac_c" 1>&6 + echo "configure:2432: 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 "$ac_t""$SHLIB_STATUS" 1>&6 + fi + BUILD_DIR=`pwd` *************** *** 2402,2405 **** --- 2461,2467 ---- + + + trap '' 1 2 15 cat > confcache <<\EOF *************** *** 2503,2507 **** ac_given_INSTALL="$INSTALL" ! trap 'rm -fr `echo "Makefile doc/Makefile examples/Makefile config.h" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15 EOF cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF --- 2667,2671 ---- cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF diff -aNrc2 readline-2.2.1/configure.in readline-4.0/configure.in *** readline-2.2.1/configure.in Fri Apr 3 11:12:06 1998 --- readline-4.0/configure.in Thu Feb 18 12:23:02 1999 *************** *** 5,10 **** dnl dnl Process this file with autoconf to produce a configure script. ! AC_REVISION([for Readline 2.2, version 2.07, from autoconf version] AC_ACVERSION) ! LIBVERSION=2.2 AC_INIT(readline.h) --- 5,10 ---- 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_INIT(readline.h) *************** *** 40,45 **** --- 40,52 ---- AC_PROG_GCC_TRADITIONAL AC_PROG_INSTALL + AC_CHECK_PROG(AR, ar, ar) + dnl Set default for ARFLAGS, since autoconf does not have a macro for it. + dnl This allows people to set it when running configure or make + test -n "$ARFLAGS" || ARFLAGS="cr" AC_PROG_RANLIB + MAKE_SHELL=/bin/sh + AC_SUBST(MAKE_SHELL) + AC_RETSIGTYPE *************** *** 89,92 **** --- 96,122 ---- esac + # shared library configuration section + # + # Shared object configuration section. These values are generated by + # ${srcdir}/support/shobj-conf + # + 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}` + AC_SUBST(SHOBJ_CC) + AC_SUBST(SHOBJ_CFLAGS) + AC_SUBST(SHOBJ_LD) + AC_SUBST(SHOBJ_LDFLAGS) + AC_SUBST(SHOBJ_XLDFLAGS) + AC_SUBST(SHOBJ_LIBS) + AC_SUBST(SHOBJ_STATUS) + AC_SUBST(SHLIB_STATUS) + AC_SUBST(SHLIB_XLDFLAGS) + AC_SUBST(SHLIB_LIBSUFF) + AC_SUBST(SHLIB_LIBVERSION) + AC_SUBST(SHLIB_LIBS) + AC_MSG_RESULT($SHLIB_STATUS) + fi + BUILD_DIR=`pwd` AC_SUBST(BUILD_DIR) *************** *** 97,100 **** --- 127,133 ---- AC_SUBST(LOCAL_DEFS) + AC_SUBST(AR) + AC_SUBST(ARFLAGS) + AC_SUBST(host_cpu) AC_SUBST(host_os) *************** *** 104,108 **** AC_SUBST(TERMCAP_LIB) ! AC_OUTPUT([Makefile doc/Makefile examples/Makefile], [ # Makefile uses this timestamp file to record whether config.h is up to date. --- 137,141 ---- AC_SUBST(TERMCAP_LIB) ! AC_OUTPUT([Makefile doc/Makefile examples/Makefile shlib/Makefile], [ # Makefile uses this timestamp file to record whether config.h is up to date. diff -aNrc2 readline-2.2.1/display.c readline-4.0/display.c *** readline-2.2.1/display.c Fri Jul 17 11:02:49 1998 --- readline-4.0/display.c Thu Dec 17 15:36:30 1998 *************** *** 281,285 **** free (local_prompt_prefix); local_prompt = local_prompt_prefix = (char *)0; ! last_invisible = 0; if (prompt == 0 || *prompt == 0) --- 281,285 ---- free (local_prompt_prefix); local_prompt = local_prompt_prefix = (char *)0; ! last_invisible = visible_length = 0; if (prompt == 0 || *prompt == 0) *************** *** 374,377 **** --- 374,384 ---- if (local_len > 0) { + temp = local_len + out + 2; + if (temp >= line_size) + { + line_size = (temp + 1024) - (temp % 1024); + visible_line = xrealloc (visible_line, line_size); + line = invisible_line = xrealloc (invisible_line, line_size); + } strncpy (line + out, local_prompt, local_len); out += local_len; *************** *** 400,403 **** --- 407,417 ---- pmtlen = strlen (prompt_this_line); + temp = pmtlen + out + 2; + if (temp >= line_size) + { + line_size = (temp + 1024) - (temp % 1024); + visible_line = xrealloc (visible_line, line_size); + line = invisible_line = xrealloc (invisible_line, line_size); + } strncpy (line + out, prompt_this_line, pmtlen); out += pmtlen; *************** *** 408,417 **** #define CHECK_LPOS() \ do { \ ! lpos++; \ ! if (lpos >= screenwidth) \ ! { \ ! inv_lbreaks[++newlines] = out; \ ! lpos = 0; \ ! } \ } while (0) --- 422,431 ---- #define CHECK_LPOS() \ do { \ ! lpos++; \ ! if (lpos >= screenwidth) \ ! { \ ! inv_lbreaks[++newlines] = out; \ ! lpos = 0; \ ! } \ } while (0) *************** *** 482,486 **** --- 496,505 ---- { register int temp, newout; + + #if 0 newout = (out | (int)7) + 1; + #else + newout = out + 8 - lpos % 8; + #endif temp = newout - out; if (lpos + temp >= screenwidth) *************** *** 502,510 **** #endif else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up) ! { ! line[out++] = '\0'; /* XXX - sentinel */ ! inv_lbreaks[++newlines] = out; ! lpos = 0; ! } else if (CTRL_CHAR (c) || c == RUBOUT) { --- 521,529 ---- #endif else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && term_up && *term_up) ! { ! line[out++] = '\0'; /* XXX - sentinel */ ! inv_lbreaks[++newlines] = out; ! lpos = 0; ! } else if (CTRL_CHAR (c) || c == RUBOUT) { *************** *** 617,625 **** _rl_move_vert (cursor_linenum); /* If we moved up to the line with the prompt using term_up, ! the physical cursor position on the screen stays the same, ! but the buffer position needs to be adjusted to account ! for invisible characters. */ if (cursor_linenum == 0 && wrap_offset) ! _rl_last_c_pos += wrap_offset; } --- 636,644 ---- _rl_move_vert (cursor_linenum); /* If we moved up to the line with the prompt using term_up, ! the physical cursor position on the screen stays the same, ! but the buffer position needs to be adjusted to account ! for invisible characters. */ if (cursor_linenum == 0 && wrap_offset) ! _rl_last_c_pos += wrap_offset; } *************** *** 674,687 **** nleft = visible_length + wrap_offset; /* Where the new cursor position will be on the screen. This can be ! longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset); t = screenwidth / 3; /* If the number of characters had already exceeded the screenwidth, ! last_lmargin will be > 0. */ /* If the number of characters to be displayed is more than the screen ! width, compute the starting offset so that the cursor is about ! two-thirds of the way across the screen. */ if (phys_c_pos > screenwidth - 2) { --- 693,706 ---- nleft = visible_length + wrap_offset; /* Where the new cursor position will be on the screen. This can be ! longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset); t = screenwidth / 3; /* If the number of characters had already exceeded the screenwidth, ! last_lmargin will be > 0. */ /* If the number of characters to be displayed is more than the screen ! width, compute the starting offset so that the cursor is about ! two-thirds of the way across the screen. */ if (phys_c_pos > screenwidth - 2) { *************** *** 695,699 **** } else if (ndisp < screenwidth - 2) /* XXX - was -1 */ ! lmargin = 0; else if (phys_c_pos < 1) { --- 714,718 ---- } else if (ndisp < screenwidth - 2) /* XXX - was -1 */ ! lmargin = 0; else if (phys_c_pos < 1) { *************** *** 705,709 **** } else ! lmargin = last_lmargin; /* If the first character on the screen isn't the first character --- 724,728 ---- } else ! lmargin = last_lmargin; /* If the first character on the screen isn't the first character *************** *** 713,722 **** /* If SCREENWIDTH characters starting at LMARGIN do not encompass ! the whole line, indicate that with a special characters at the ! right edge of the screen. If LMARGIN is 0, we need to take the ! wrap offset into account. */ t = lmargin + M_OFFSET (lmargin, wrap_offset) + screenwidth; if (t < out) ! line[t - 1] = '>'; if (!rl_display_fixed || forced_display || lmargin != last_lmargin) --- 732,741 ---- /* If SCREENWIDTH characters starting at LMARGIN do not encompass ! the whole line, indicate that with a special character at the ! right edge of the screen. If LMARGIN is 0, we need to take the ! wrap offset into account. */ t = lmargin + M_OFFSET (lmargin, wrap_offset) + screenwidth; if (t < out) ! line[t - 1] = '>'; if (!rl_display_fixed || forced_display || lmargin != last_lmargin) *************** *** 783,787 **** All are character pointers for the sake of speed. Special cases for ! no differences, as well as for end of line additions must be handeled. Could be made even smarter, but this works well enough */ --- 802,806 ---- All are character pointers for the sake of speed. Special cases for ! no differences, as well as for end of line additions must be handled. Could be made even smarter, but this works well enough */ *************** *** 811,815 **** _rl_last_v_pos++; if (old[0] && new[0]) ! old[0] = new[0]; } --- 830,834 ---- _rl_last_v_pos++; if (old[0] && new[0]) ! old[0] = new[0]; } *************** *** 896,903 **** if (current_line == 0 && !_rl_horizontal_scroll_mode && current_invis_chars != visible_wrap_offset) ! { ! temp = visible_wrap_offset - current_invis_chars; ! lendiff += temp; ! } /* Insert (diff (len (old), len (new)) ch. */ --- 915,919 ---- if (current_line == 0 && !_rl_horizontal_scroll_mode && current_invis_chars != visible_wrap_offset) ! lendiff += visible_wrap_offset - current_invis_chars; /* Insert (diff (len (old), len (new)) ch. */ *************** *** 928,932 **** be "inserted". They can just be placed on the screen. */ /* However, this screws up the rest of this block, which ! assumes you've done the insert because you can. */ _rl_output_some_chars (nfd, lendiff); _rl_last_c_pos += lendiff; --- 944,948 ---- be "inserted". They can just be placed on the screen. */ /* However, this screws up the rest of this block, which ! assumes you've done the insert because you can. */ _rl_output_some_chars (nfd, lendiff); _rl_last_c_pos += lendiff; *************** *** 988,995 **** } lendiff = (oe - old) - (ne - new); ! if (_rl_term_autowrap && current_line < inv_botlin) ! space_to_eol (lendiff); ! else ! _rl_clear_to_eol (lendiff); } } --- 1004,1014 ---- } lendiff = (oe - old) - (ne - new); ! if (lendiff) ! { ! if (_rl_term_autowrap && current_line < inv_botlin) ! space_to_eol (lendiff); ! else ! _rl_clear_to_eol (lendiff); ! } } } *************** *** 1020,1024 **** while (*temp) ! *temp++ = '\0'; } rl_on_new_line (); --- 1039,1043 ---- while (*temp) ! *temp++ = '\0'; } rl_on_new_line (); *************** *** 1081,1085 **** #endif /* HACK_TERMCAP_MOTION */ } ! else if (_rl_last_c_pos != new) _rl_backspace (_rl_last_c_pos - new); _rl_last_c_pos = new; --- 1100,1104 ---- #endif /* HACK_TERMCAP_MOTION */ } ! else if (_rl_last_c_pos > new) _rl_backspace (_rl_last_c_pos - new); _rl_last_c_pos = new; *************** *** 1246,1250 **** void ! _rl_save_prompt () { saved_local_prompt = local_prompt; --- 1265,1269 ---- void ! rl_save_prompt () { saved_local_prompt = local_prompt; *************** *** 1258,1262 **** void ! _rl_restore_prompt () { if (local_prompt) --- 1277,1281 ---- void ! rl_restore_prompt () { if (local_prompt) *************** *** 1278,1282 **** char *pmt; ! _rl_save_prompt (); if (saved_local_prompt == 0) --- 1297,1301 ---- char *pmt; ! rl_save_prompt (); if (saved_local_prompt == 0) *************** *** 1285,1289 **** pmt = xmalloc (len + 2); if (len) ! strcpy (pmt, rl_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; --- 1304,1308 ---- pmt = xmalloc (len + 2); if (len) ! strcpy (pmt, rl_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; *************** *** 1294,1298 **** pmt = xmalloc (len + 2); if (len) ! strcpy (pmt, saved_local_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; --- 1313,1317 ---- pmt = xmalloc (len + 2); if (len) ! strcpy (pmt, saved_local_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; *************** *** 1541,1545 **** _rl_vis_botlin = 0; fflush (rl_outstream); ! rl_restart_output (); } } --- 1560,1573 ---- _rl_vis_botlin = 0; fflush (rl_outstream); ! rl_restart_output (1, 0); } + } + + void + _rl_erase_entire_line () + { + cr (); + _rl_clear_to_eol (0); + cr (); + fflush (rl_outstream); } diff -aNrc2 readline-2.2.1/doc/Makefile.in readline-4.0/doc/Makefile.in *** readline-2.2.1/doc/Makefile.in Fri Jul 17 11:02:36 1998 --- readline-4.0/doc/Makefile.in Thu Feb 18 12:24:36 1999 *************** *** 11,14 **** --- 11,15 ---- man3dir = $(mandir)/man3 + SHELL = @MAKE_SHELL@ RM = rm -f *************** *** 26,32 **** RLSRC = $(srcdir)/rlman.texinfo $(srcdir)/rluser.texinfo \ ! $(srcdir)/rltech.texinfo HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \ ! $(srcdir)/hstech.texinfo # This should be a program that converts troff to an ascii-readable format --- 27,33 ---- RLSRC = $(srcdir)/rlman.texinfo $(srcdir)/rluser.texinfo \ ! $(srcdir)/rltech.texinfo $(srcdir)/manvers.texinfo HISTSRC = $(srcdir)/hist.texinfo $(srcdir)/hsuser.texinfo \ ! $(srcdir)/hstech.texinfo $(srcdir)/manvers.texinfo # This should be a program that converts troff to an ascii-readable format *************** *** 43,46 **** --- 44,49 ---- TEXTOBJ = readline.0 + INTERMEDIATE_OBJ = rlman.dvi hist.dvi + CREATED_DOCS = $(DVIOBJ) $(INFOOBJ) $(PSOBJ) $(HTMLOBJ) $(HTMLTOC) $(TEXTOBJ) *************** *** 77,90 **** readline.html: ${RLSRC} ! $(TEXI2HTML) -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo ! sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman.html > readline.html ! sed -e 's:rlman.html:readline.html:' -e 's:rlman_toc.html:readline_toc.html:' rlman_toc.html > readline_toc.html ! $(RM) rlman.html rlman_toc.html history.html: ${HISTSRC} ! $(TEXI2HTML) -I $(TEXINPUTDIR) $(srcdir)/hist.texinfo ! sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist.html > history.html ! sed -e 's:hist.html:history.html:' -e 's:hist_toc.html:history_toc.html:' hist_toc.html > history_toc.html ! $(RM) hist.html hist_toc.html info: $(INFOOBJ) --- 80,91 ---- readline.html: ${RLSRC} ! $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texinfo ! sed -e 's:rlman.html:readline.html:' rlman.html > readline.html ! $(RM) rlman.html history.html: ${HISTSRC} ! $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/hist.texinfo ! sed -e 's:hist.html:history.html:' hist.html > history.html ! $(RM) hist.html info: $(INFOOBJ) *************** *** 102,105 **** --- 103,107 ---- distclean: clean $(RM) $(CREATED_DOCS) + $(RM) $(INTERMEDIATE_OBJ) $(RM) Makefile *************** *** 108,111 **** --- 110,114 ---- maintainer-clean: clean $(RM) $(CREATED_DOCS) + $(RM) $(INTERMEDIATE_OBJ) $(RM) Makefile *************** *** 113,117 **** -$(SHELL) $(top_srcdir)/support/mkdirs $(infodir) $(man3dir) ! install: installdirs info if test -f readline.info; then \ ${INSTALL_DATA} readline.info $(infodir)/readline.info; \ --- 116,120 ---- -$(SHELL) $(top_srcdir)/support/mkdirs $(infodir) $(man3dir) ! install: installdirs if test -f readline.info; then \ ${INSTALL_DATA} readline.info $(infodir)/readline.info; \ diff -aNrc2 readline-2.2.1/doc/hist.texinfo readline-4.0/doc/hist.texinfo *** readline-2.2.1/doc/hist.texinfo Thu Apr 2 14:38:53 1998 --- readline-4.0/doc/hist.texinfo Thu Dec 31 12:04:50 1998 *************** *** 7,19 **** @setchapternewpage odd ! @ignore ! last change: Thu Apr 2 14:38:22 EST 1998 ! @end ignore ! ! @set EDITION 2.2 ! @set VERSION 2.2 ! @set UPDATED 2 April 1998 ! @set UPDATE-MONTH April 1998 @dircategory Libraries @direntry --- 7,13 ---- @setchapternewpage odd ! @include manvers.texinfo + @ifinfo @dircategory Libraries @direntry *************** *** 21,30 **** @end direntry - @ifinfo This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. ! Copyright (C) 1988, 1991, 1993, 1995, 1996, 1998 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of --- 15,23 ---- @end direntry This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. ! Copyright (C) 1988-1999 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of *************** *** 47,51 **** into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Foundation. @end ifinfo --- 40,44 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation. @end ifinfo *************** *** 78,85 **** 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. @vskip 0pt plus 1filll ! Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. @end titlepage --- 71,78 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation. @vskip 0pt plus 1filll ! Copyright @copyright{} 1988-1999 Free Software Foundation, Inc. @end titlepage diff -aNrc2 readline-2.2.1/doc/history.dvi readline-4.0/doc/history.dvi *** readline-2.2.1/doc/history.dvi Thu Apr 2 14:45:23 1998 --- readline-4.0/doc/history.dvi Thu Dec 31 12:08:49 1998 *************** *** 1,24 **** ! ÷ƒ’À;è TeX output 1998.04.02:1444‹ÿÿÿÿŸòŽ ƒ3Ú þ#¾ã‘GóZÂÖN ¼j cmbx12ëZGNU–ƧHistory“LibraryŽ‘GŸ 0‰±ž¸Ÿ šª’Õ@„ó2Kñ`y ó3 ! cmr10ÝEdition–¦f2.1,“for“ó3ßê‘!GÝThese–¤functions“return“information“abMÞout“the“enš²!tire“history“list“or“individual“list“en˜tries.Ž©U’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜**“çhistory‘Óõ‰ˆŠ#ØŽ‘÷Ílist‘yšâ()Ž¤ 33‘.ùœÝReturn–oÝa“ÞNULL“Ýterminated“arraš²!y“of“ÞHIST_ENTRY“Ýwhic˜h“is“the“curren˜t“inputŽ¡‘.ùœhistory‘ÿe.›HÔElemen²!t–c0“of“this“list“is“the“bMÞeginning“of“time.˜If“there“is“no“history‘ÿe,Ž¡‘.ùœreturn‘¦fÞNULLÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çwhere‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝReturns–¦fthe“o set“of“the“currenš²!t“history“elemen˜t.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çcurrenÞt‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝReturn–O‰the“history“enš²!try“at“the“curren˜t“pMÞosition,‘¹Òas“determined“b˜y“Þwhere_Ž¡‘.ùœhistory–¦f()Ý.‘ÝÝIf“there“is“no“enš²!try“there,“return“a“ÞNULL“ÝpMÞoin˜ter.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ‘÷Íget‘yšâ(Þint‘¦foffsetâ)Ž¡‘.ùœÝReturn–öÏthe“history“en²!try“at“pMÞosition“áo setÝ,‘Jéstarting“from“Þhistory_baseÝ.‘ÏIfŽ¡‘.ùœthere–ììis“no“en²!try“there,›þor“if“áo set‘)ìÝis“greater“than“the“history“length,˜return“aŽ¡‘.ùœÞNULL‘¦fÝpMÞoin²!ter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ítotal‘Óõ‰ˆŠ#ØŽ“bÞytes‘yšâ()Ž¡‘.ùœÝReturn–Z+the“n•²!um“bMÞer–Z+of“bš²!ytes“that“the“primary“history“en˜tries“are“using.‘ù-ThisŽ¡‘.ùœfunction–¦freturns“the“sum“of“the“lengths“of“all“the“lines“in“the“history‘ÿe.ŽŸß"‘GëQ2.3.4‘d(Mo–áving–íMAround“the“History“ListŽŽŸ(>‘!GÝThese–¦ffunctions“alloš²!w“the“curren˜t“index“in˜to“the“history“list“to“bMÞe“set“or“c˜hanged.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íset‘Óõ‰ˆŠ#ØŽ“pb"os‘yšâ(Þint‘¦fposâ)Ž¡‘.ùœÝSet–¦fthe“pšMÞosition“in“the“history“list“to“áp˜osÝ,“an“absolute“index“in²!to“the“list.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çprevious‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝBacš²!k–iup“the“curren˜t“history“o set“to“the“previous“history“en˜try‘ÿe,‘‘!GÝThese–5²functions“alloš²!w“searc˜hing“of“the“history“list“for“en˜tries“con˜taining“a“spMÞeci c“string.Ž¡‘GSearc•²!hing›LØma“y˜b•MÞe˜p“erformed˜b“oth˜forw•²!ard˜and˜bac“kw“ard˜from˜the˜curren“t˜history˜pMÞosition.Ž¡‘GThe–Ãsearcš²!h“ma˜y“bMÞe“áanc˜horedÝ,‘ÊÅmeaning“that“the“string“m˜ust“matc˜h“at“the“bMÞeginning“of“theŽ¡‘Ghistory‘¦fen²!try‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍsearcÞh‘yšâ(Þchar–¦f*string,“int“directionâ)Ž¡‘.ùœÝSearcš²!h–£Àthe“history“for“ástringÝ,‘¤Hstarting“at“the“curren˜t“history“o set.‘ÜûIf“ádirectionŽ¡‘.ùœÞ<–‘1Ý0,‘Ëäthen“the“searcš²!h“is“through“previous“en˜tries,‘Ëäelse“through“subsequen˜t.‘ž>IfŽŽŸŒ‹6³Ÿò‘GÝ6’D¦ñGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœástring‘™ëÝis–©Ófound,‘ª¯then“the“currenš²!t“history“index“is“set“to“that“history“en˜try‘ÿe,‘ª¯andŽ¤ 33‘.ùœthe–‡øv‘ÿdDalue“returned“is“the“o set“in“the“line“of“the“enš²!try“where“ástring‘xÝw˜as“found.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.Ž©Ø’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcÞh‘Óõ‰ˆŠ#ØŽ“pre x‘yšâ(Þchar–¦f*string,“int“directionâ)Ž¡‘.ùœÝSearcš²!h–³¢the“history“for“ástringÝ,‘¶ñstarting“at“the“curren˜t“history“o set.‘The“searc˜hŽ¡‘.ùœis›òanc•²!hored:‘˜õmatc“hing˜lines˜m“ust˜bMÞegin˜with˜ástringÝ.‘ö€If˜ádirection˜Þ<˜Ý0,‘Uthen˜theŽ¡‘.ùœsearcš²!h–Éãis“through“previous“en˜tries,‘ÒÂelse“through“subsequen˜t.‘HSIf“ástring‘¹ûÝis“found,Ž¡‘.ùœthen–O…the“currenš²!t“history“index“is“set“to“that“en˜try‘ÿe,‘yÌand“the“return“v‘ÿdDalue“is“0.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcÞh‘Óõ‰ˆŠ#ØŽ“pb"os‘yšâ(Þchar–¦f*string,“int“direction,“intŽ¡‘DGposâ)Ž¡‘.ùœÝSearc²!h–Ÿ-for“ástring‘EÝin“the“history“list,› žstarting“at“ápMÞosÝ,˜an“absolute“index“in²!to“theŽ¡‘.ùœlist.‘Ú†If–œaádirection“Ýis“negativš²!e,‘žbthe“searc˜h“proMÞceeds“bac˜kw˜ard“from“ápMÞosÝ,‘žbotherwiseŽ¡‘.ùœforwš²!ard.‘ÉReturns–J&the“absolute“index“of“the“history“elemen˜t“where“ástring‘:>Ýw˜asŽ¡‘.ùœfound,–¦for“-1“otherwise.ŽŸ¥]‘GëQ2.3.6‘d(Managing–íMthe“History“FileŽŽŸ…á‘!GÝThe–ÌeHistory“library“can“read“the“history“from“and“write“it“to“a“ le.‘OÛThis“section“doMÞcu-Ž¡‘Gmen²!ts–¦fthe“functions“for“managing“a“history“ le.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çread‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝAdd–™þthe“con•²!ten“ts–™þof“á lename›7Ýto“the“history“list,‘œya“line“at“a“time.‘ÙºIf“á lename˜ÝisŽ¡‘.ùœÞNULLÝ,–¦fthen“read“from“`Þ~/.historyÝ'.‘ÝÝReturns“0“if“successful,“or“errno“if“not.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çread‘Óõ‰ˆŠ#ØŽ–÷Íhistory‘Óõ‰ˆŠ#ØŽ“range‘yšâ(Þchar–¦f*filename,“int“from,“int“toâ)Ž¡‘.ùœÝRead–è0a“range“of“lines“from“á lenameÝ,‘8¢adding“them“to“the“history“list.‘£;StartŽ¡‘.ùœreading–hat“line“áfrom“Ýand“end“at“átoÝ.›ÉIf“áfrom“Ýis“zero,‘t‹start“at“the“bMÞeginning.˜If“átoŽ¡‘.ùœÝis–ñÄless“than“áfromÝ,››then“read“un²!til“the“end“of“the“ le.‘¿÷If“á lename‘ŽËÝis“ÞNULLÝ,˜thenŽ¡‘.ùœread–¦ffrom“`Þ~/.historyÝ'.‘ÝÝReturns“0“if“successful,“or“Þerrno“Ýif“not.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çwrite‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝW‘ÿerite–d¨the“currenš²!t“history“to“á lenameÝ,‘Ô8o˜v˜erwriting“á lename‘¯Ýif“necessary‘ÿe.‘ ! £IfŽ¡‘.ùœá lename‘ŽÝis–ñÞNULLÝ,‘Àthen“write“the“history“list“to“`Þ~/.historyÝ'.‘½êV‘ÿealues“returnedŽ¡‘.ùœare–¦fas“in“Þread_history“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çappb"end‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þint–¦fnelements,“char“*filenameâ)Ž¡‘.ùœÝAppMÞend–¦fthe“last“ánelemen²!ts‘èÝof“the“history“list“to“á lenameÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ítruncate‘Óõ‰ˆŠ#ØŽ“ le‘yšâ(Þchar–¦f*filename,“int“nlinesâ)Ž¡‘.ùœÝT‘ÿeruncate–¦fthe“history“ le“á lenameÝ,“lea²!ving“only“the“last“ánlines‘èÝlines.ŽŸ¥]‘GëQ2.3.7‘d(History‘íMExpansionŽŽŸ…á‘!GÝThese–¦ffunctions“implemenš²!t“ÞcshÝ-lik˜e“history“expansion.ŽŽŸŒ‹CПò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ7ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷Íexpand‘yšâ(Þchar–¦f*string,“char“**outputâ)Ž¤ 33‘.ùœÝExpand–˜ðástringÝ,››¡placing“the“result“in²!to“áoutputÝ,˜a“pMÞoin²!ter“to“a“string“(see“æhÝunde-Ž¡‘.ùœ nedæi–¦fÝ[History“In²!teraction],“page“æhÝunde nedæiÝ).‘ÝÝReturns:Ž©žÛ‘.ùœÞ0ŽŽ‘hÊÝIf–Îno“expansions“toMÞok“place“(or,‘×ëif“the“only“cš²!hange“in“the“text“w˜asŽ¡‘hÊthe–¦fde-slashifying“of“the“history“expansion“c²!haracter);Ž¦‘.ùœÞ1ŽŽ‘hÊÝif–¦fexpansions“did“tak²!e“place;Ž¦‘.ùœÞ-1ŽŽ‘hÊÝif–¦fthere“w²!as“an“error“in“expansion;Ž¦‘.ùœÞ2ŽŽ‘hÊÝif–̘the“returned“line“should“only“bMÞe“displa•²!y“ed,›Ö%but–̘not“executed,˜asŽ¡‘hÊwith–{Sthe“Þ:p“ÝmošMÞdi er“(see“æhÝunde nedæi“Ý[Mo˜di ers],‘·$page“æhÝunde nedæiÝ).Ž¦‘.ùœIf–™tan“error“oMÞcurred“in“expansion,‘œ then“áoutput‘ÖtÝconš²!tains“a“descriptiv˜e“error“mes-Ž¡‘.ùœsage.Ž©T¯’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íarg‘Óõ‰ˆŠ#ØŽ“extract‘yšâ(Þint–¦ffirst,“int“last,“charŽ¡‘DG*stringâ)Ž¡‘.ùœÝExtract–}»a“string“segmen²!t“consisting“of“the“á rst›º»Ýthrough“álast˜Ýargumenš²!ts“presen˜tŽ¡‘.ùœin–¦fástringÝ.‘ÝÝArgumenš²!ts“are“brok˜en“up“as“in“Bash.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çget‘Óõ‰ˆŠ#ØŽ–÷Íhistory‘Óõ‰ˆŠ#ØŽ“ev•Þen“t‘yšâ(Þchar–¦f*string,“int“*cindex,“intŽ¡‘DGqcharâ)Ž¡‘.ùœÝReturns–ƒdthe“text“of“the“history“ev•²!en“t–ƒdbMÞeginning“at“ástring‘s|Þ+“á*cindexÝ.‘Ò2á*cindex‘DÃÝisŽ¡‘.ùœmošMÞdi ed–Ã’to“p˜oinš²!t“to“after“the“ev˜en˜t“spMÞeci er.‘5`A˜t“function“en˜try‘ÿe,‘ÊÝácindex‘„ñÝpMÞoin˜tsŽ¡‘.ùœto–ìthe“index“inš²!to“ástring‘òÝwhere“the“history“ev˜en˜t“spšMÞeci cation“b˜egins.‘ðnáqc²!har‘ËÝisŽ¡‘.ùœa–éacš²!haracter“that“is“allo˜w˜ed“to“end“the“ev˜en˜t“spMÞeci cation“in“addition“to“theŽ¡‘.ùœ\normal"–¦fterminating“c²!haracters.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍtokÞenize‘yšâ(Þchar‘¦f*stringâ)Ž¡‘.ùœÝReturn–¼an“arraš²!y“of“tok˜ens“parsed“out“of“ástringÝ,‘!Rm˜uc˜h“as“the“shell“migh˜t.‘àTheŽ¡‘.ùœtokš²!ens–p7are“split“on“white“space“and“on“the“c˜haracters“Þ()<>;&|$Ý,‘â«and“shellŽ¡‘.ùœquoting›¦fcon•²!v“en“tions˜are˜obMÞey“ed.ŽŸ!}‘GëH2.4‘™History‘f@V‘þ¦fariablesŽŽŸé‘!GÝThis–:ßsection“describšMÞes“the“externally“visible“v‘ÿdDariables“exp˜orted“b²!y“the“GNU‘:wHistoryŽ¡‘GLibrary‘ÿe.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍbaseŽ¡‘.ùœÝThe–¦flogical“o set“of“the“ rst“en²!try“in“the“history“list.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍlengthŽ¡‘.ùœÝThe›¦fn•²!um“bMÞer˜of˜en“tries˜curren“tly˜stored˜in˜the˜history˜list.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çmax‘Óõ‰ˆŠ#ØŽ–÷Íinput‘Óõ‰ˆŠ#ØŽ“historyŽ¡‘.ùœÝThe–4Êmaximš²!um“n˜um˜bMÞer“of“history“en˜tries.‘·ÿThis“m˜ust“bMÞe“c˜hanged“using“Þstifle_Ž¡‘.ùœhistory‘¦f()Ý.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íexpansion‘Óõ‰ˆŠ#ØŽ“cÞharŽ¡‘.ùœÝThe–¦fcš²!haracter“that“starts“a“history“ev˜en˜t.‘ÝÝThe“default“is“`Þ!Ý'.ŽŽŸŒ‹Q:Ÿò‘GÝ8’D¦ñGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ísubst‘Óõ‰ˆŠ#ØŽ“cÞharŽ¤ 33‘.ùœÝThe–ùcš²!haracter“that“in˜v˜ok˜es“w˜ord“substitution“if“found“at“the“start“of“a“line.‘¤TheŽ¡‘.ùœdefault–¦fis“`Þ^Ý'.Ž©þ‘’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍcommenšÞt‘Óõ‰ˆŠ#ØŽ“c˜harŽ¡‘.ùœÝDuring–R·tokš²!enization,‘}Ëif“this“c˜haracter“is“seen“as“the“ rst“c˜haracter“of“a“w˜ord,Ž¡‘.ùœthen–ÑÃit“and“all“subsequenš²!t“c˜haracters“up“to“a“newline“are“ignored,‘ÜšsuppressingŽ¡‘.ùœhistory–¦fexpansion“for“the“remainder“of“the“line.‘ÝÝThis“is“disabled“b²!y“default.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íno‘Óõ‰ˆŠ#ØŽ“expand‘Óõ‰ˆŠ#ØŽ“cÞharsŽ¡‘.ùœÝThe–N)list“of“cš²!haracters“whic˜h“inhibit“history“expansion“if“found“immediatelyŽ¡‘.ùœfolloš²!wing‘¦fáhistory‘¨/‰x³HøŽ–ñ'expansion‘¨/‰x³HøŽ“c˜harÝ.‘ÝÝThe–¦fdefault“is“whitespace“and“`Þ=Ý'.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcšÞh‘Óõ‰ˆŠ#ØŽ“delimiter‘Óõ‰ˆŠ#ØŽ“c˜harsŽ¡‘.ùœÝThe–Eslist“of“additional“cš²!haracters“whic˜h“can“delimit“a“history“searc˜h“string,‘m6inŽ¡‘.ùœaddition–ýŽto“whitespace,‘S`Þ:Ý'“and“`Þ?Ý'“in“the“case“of“a“substring“searc²!h.‘¥•The“defaultŽ¡‘.ùœis‘¦fempt²!y‘ÿe.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íquotes‘Óõ‰ˆŠ#ØŽ“inhibit‘Óõ‰ˆŠ#ØŽ“expansionŽ¡‘.ùœÝIf–øÌnon-zero,‘…single-quoted“wš²!ords“are“not“scanned“for“the“history“expansion“c˜har-Ž¡‘.ùœacter.‘ÝÝThe–¦fdefault“v‘ÿdDalue“is“0.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íinhibit‘Óõ‰ˆŠ#ØŽ“expansion‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–±should“bMÞe“set“to“the“address“of“a“function“that“takš²!es“t˜w˜o“argumen˜ts:‘c8a“ÞcharŽ¡‘.ùœ*–bÖÝ(ástring‘ðÝ)“and“an“inš²!teger“index“in˜to“that“string“(ái‘”ƒÝ).‘ÇXIt“should“return“a“non-zeroŽ¡‘.ùœv‘ÿdDalue–öàif“the“history“expansion“starting“at“ástring[i]‘UáÝshould“not“bšMÞe“p˜erformed;‘1bzeroŽ¡‘.ùœif–tthe“expansion“should“bMÞe“done.‘°It“is“inš²!tended“for“use“b˜y“applications“lik˜e“BashŽ¡‘.ùœthat–?use“the“history“expansion“c²!haracter“for“additional“purpMÞoses.‘§ÀBy“default,Ž¡‘.ùœthis–¦fv‘ÿdDariable“is“set“to“NULL.ŽŸþ5‘GëH2.5‘™History–f@Programming“ExampleŽŽŸ˜â‘!GÝThe–¦ffollo²!wing“program“demonstrates“simple“use“of“the“GNU“History“Library‘ÿe.ŽŸ寑.ùœÞmain‘¿ª()Ž¤ €‘.ùœ{Ž¡‘:xðchar–¿ªline[1024],“*t;Ž¡‘:xðint–¿ªlen,“done“=“0;Ž¤‘:xðline[0]–¿ª=“0;Ž¡‘:xðusing_history‘¿ª();Ž¤ €‘:xðwhile‘¿ª(!done)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("history$“");Ž¡‘Qw˜fflush‘¿ª(stdout);Ž¡‘Qw˜t–¿ª=“fgets“(line,“sizeof“(line)“-“1,“stdin);Ž¡‘Qw˜if–¿ª(t“&&“*t)Ž¡‘\öì{ŽŽŸŒ‹ ]•Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ9ŽŽŽ ƒ3Ú ý¨ðБhv@Þlen–¿ª=“strlen“(t);Ž¤ €‘hv@if–¿ª(t[len“-“1]“==“'\n')Ž¡‘sõ”t[len–¿ª-“1]“=“'\0';Ž¡‘\öì}Ž©‘Qw˜if‘¿ª(!t)Ž¡‘\öìstrcpy–¿ª(line,“"quit");Ž¦‘Qw˜if‘¿ª(line[0])Ž¡‘\öì{Ž¡‘hv@char‘¿ª*expansion;Ž¡‘hv@int‘¿ªresult;Ž¦‘hv@result–¿ª=“history_expand“(line,“&expansion);Ž¡‘hv@if‘¿ª(result)Ž¡‘sõ”fprintf–¿ª(stderr,“"%s\n",“expansion);Ž¦‘hv@if–¿ª(result“<“0“||“result“==“2)Ž¡‘sõ”{Ž¡‘tèfree‘¿ª(expansion);Ž¡‘tècontinue;Ž¡‘sõ”}Ž¦‘hv@add_history‘¿ª(expansion);Ž¡‘hv@strncpy–¿ª(line,“expansion,“sizeof“(line)“-“1);Ž¡‘hv@free‘¿ª(expansion);Ž¡‘\öì}Ž¦‘Qw˜if–¿ª(strcmp“(line,“"quit")“==“0)Ž¡‘\öìdone–¿ª=“1;Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"save")“==“0)Ž¡‘\öìwrite_history‘¿ª("history_file");Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"read")“==“0)Ž¡‘\öìread_history‘¿ª("history_file");Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"list")“==“0)Ž¡‘\öì{Ž¡‘hv@register–¿ªHIST_ENTRY“**the_list;Ž¡‘hv@register–¿ªint“i;Ž¦‘hv@the_list–¿ª=“history_list“();Ž¡‘hv@if‘¿ª(the_list)Ž¡‘sõ”for–¿ª(i“=“0;“the_list[i];“i++)Ž¡‘tèprintf–¿ª("%d:“%s\n",“i“+“history_base,“the_list[i]->line);Ž¡‘\öì}Ž¡‘Qw˜else–¿ªif“(strncmp“(line,“"delete",“6)“==“0)Ž¡‘\öì{Ž¡‘hv@int‘¿ªwhich;Ž¡‘hv@if–¿ª((sscanf“(line“+“6,“"%d",“&which))“==“1)ŽŽŸŒ‹ ! h‹Ÿò‘GÝ10’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðБsõ”Þ{Ž¤ €‘tèHIST_ENTRY–¿ª*entry“=“remove_history“(which);Ž¡‘tèif‘¿ª(!entry)Ž¡’Šôline);Ž¡’–sfree‘¿ª(entry);Ž¡’Šô<}Ž¡‘sõ”}Ž¡‘hv@elseŽ¡‘sõ”{Ž¡‘tèfprintf–¿ª(stderr,“"non-numeric“arg“given“to“`delete'\n");Ž¡‘sõ”}Ž¡‘\öì}Ž¡‘EøD}Ž¡‘.ùœ}ŽŽŸŒ‹ mÚŸò‘GÝAppMÞendix–¦fA:“Concept“Index’ž¬11ŽŽŽ ƒ3Ú ý¨ðБGêApp‘Š=endix‘záA‘ ¸QConcept‘z³IndexŽŽŸ$\(Ÿ‘!Góo´‹Ç cmr9¬(Index–Tis“nonexisten¾9t)ŽŽŽŽŸŒ‹ o¢Ÿò‘GÝ12’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3ÚŸŒ‹ p†Ÿò‘GÝAppMÞendix–¦fB:“F›ÿeunction“and“V˜ariable“Index’Üú13ŽŽŽ ƒ3Ú ý¨ðБGêApp‘Š=endix‘záB‘ ¸QF›þaGunction–z³and“V˜ariable“IndexŽŽŸ$\(Ÿ‘!G¬(Index–Tis“nonexisten¾9t)ŽŽŽŽŸŒ‹péŸò‘GÝ14’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3ÚŸŒ‹ÿÿÿÿqߟò’À¥TÝiŽŽŽ ƒ3Ú ý¨ðБGêT‘þaGable–z³of“Con–ÿuÂten“tsŽŽŸ)33‘GëH1‘32Using–ffHistory“In•ŒÌteractiv“ely‘%‘32óIF C–ff cmbxti10ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘ ð›ëH1Ž©ÿ‘6GÝ1.1‘ ó5History‘¦fExpansion*•‘é˜ó5ý': --- 1,24 ---- ! ÷ƒ’À;è TeX output 1998.12.31:1208‹ÿÿÿÿŸòŽ ƒ3Ú þ#¾ã‘GóZÂÖN ¼j cmbx12ëZGNU–ƧHistory“LibraryŽ‘GŸ 0‰±ž¸Ÿ šª’Õ@„ó2Kñ`y ó3 ! cmr10ÝEdition–¦f4.0,“for“ó3ßê‘!GÝThese–¤functions“return“information“abMÞout“the“enš²!tire“history“list“or“individual“list“en˜tries.Ž©U’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜**“çhistory‘Óõ‰ˆŠ#ØŽ‘÷Ílist‘yšâ()Ž¤ 33‘.ùœÝReturn–oÝa“ÞNULL“Ýterminated“arraš²!y“of“ÞHIST_ENTRY“Ýwhic˜h“is“the“curren˜t“inputŽ¡‘.ùœhistory‘ÿe.›HÔElemen²!t–c0“of“this“list“is“the“bMÞeginning“of“time.˜If“there“is“no“history‘ÿe,Ž¡‘.ùœreturn‘¦fÞNULLÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çwhere‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝReturns–¦fthe“o set“of“the“currenš²!t“history“elemen˜t.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çcurrenÞt‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝReturn–O‰the“history“enš²!try“at“the“curren˜t“pMÞosition,‘¹Òas“determined“b˜y“Þwhere_Ž¡‘.ùœhistory–¦f()Ý.‘ÝÝIf“there“is“no“enš²!try“there,“return“a“ÞNULL“ÝpMÞoin˜ter.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ‘÷Íget‘yšâ(Þint‘¦foffsetâ)Ž¡‘.ùœÝReturn–öÏthe“history“en²!try“at“pMÞosition“áo setÝ,‘Jéstarting“from“Þhistory_baseÝ.‘ÏIfŽ¡‘.ùœthere–ììis“no“en²!try“there,›þor“if“áo set‘)ìÝis“greater“than“the“history“length,˜return“aŽ¡‘.ùœÞNULL‘¦fÝpMÞoin²!ter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ítotal‘Óõ‰ˆŠ#ØŽ“bÞytes‘yšâ()Ž¡‘.ùœÝReturn–Z+the“n•²!um“bMÞer–Z+of“bš²!ytes“that“the“primary“history“en˜tries“are“using.‘ù-ThisŽ¡‘.ùœfunction–¦freturns“the“sum“of“the“lengths“of“all“the“lines“in“the“history‘ÿe.ŽŸß"‘GëQ2.3.4‘d(Mo–áving–íMAround“the“History“ListŽŽŸ(>‘!GÝThese–¦ffunctions“alloš²!w“the“curren˜t“index“in˜to“the“history“list“to“bMÞe“set“or“c˜hanged.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íset‘Óõ‰ˆŠ#ØŽ“pb"os‘yšâ(Þint‘¦fposâ)Ž¡‘.ùœÝSet–¦fthe“pšMÞosition“in“the“history“list“to“áp˜osÝ,“an“absolute“index“in²!to“the“list.Ž¦’sF‘ÿeunctionŽŽ‘GèHIST_ENTRY–™˜*“çprevious‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ()Ž¡‘.ùœÝBacš²!k–iup“the“curren˜t“history“o set“to“the“previous“history“en˜try‘ÿe,‘‘!GÝThese–5²functions“alloš²!w“searc˜hing“of“the“history“list“for“en˜tries“con˜taining“a“spMÞeci c“string.Ž¡‘GSearc•²!hing›LØma“y˜b•MÞe˜p“erformed˜b“oth˜forw•²!ard˜and˜bac“kw“ard˜from˜the˜curren“t˜history˜pMÞosition.Ž¡‘GThe–Ãsearcš²!h“ma˜y“bMÞe“áanc˜horedÝ,‘ÊÅmeaning“that“the“string“m˜ust“matc˜h“at“the“bMÞeginning“of“theŽ¡‘Ghistory‘¦fen²!try‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍsearcÞh‘yšâ(Þchar–¦f*string,“int“directionâ)Ž¡‘.ùœÝSearcš²!h–£Àthe“history“for“ástringÝ,‘¤Hstarting“at“the“curren˜t“history“o set.‘ÜûIf“ádirectionŽ¡‘.ùœÞ<–‘1Ý0,‘Ëäthen“the“searcš²!h“is“through“previous“en˜tries,‘Ëäelse“through“subsequen˜t.‘ž>IfŽŽŸŒ‹6¨Ÿò‘GÝ6’D¦ñGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœástring‘™ëÝis–©Ófound,‘ª¯then“the“currenš²!t“history“index“is“set“to“that“history“en˜try‘ÿe,‘ª¯andŽ¤ 33‘.ùœthe–‡øv‘ÿdDalue“returned“is“the“o set“in“the“line“of“the“enš²!try“where“ástring‘xÝw˜as“found.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.Ž©Ø’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcÞh‘Óõ‰ˆŠ#ØŽ“pre x‘yšâ(Þchar–¦f*string,“int“directionâ)Ž¡‘.ùœÝSearcš²!h–³¢the“history“for“ástringÝ,‘¶ñstarting“at“the“curren˜t“history“o set.‘The“searc˜hŽ¡‘.ùœis›òanc•²!hored:‘˜õmatc“hing˜lines˜m“ust˜bMÞegin˜with˜ástringÝ.‘ö€If˜ádirection˜Þ<˜Ý0,‘Uthen˜theŽ¡‘.ùœsearcš²!h–Éãis“through“previous“en˜tries,‘ÒÂelse“through“subsequen˜t.‘HSIf“ástring‘¹ûÝis“found,Ž¡‘.ùœthen–O…the“currenš²!t“history“index“is“set“to“that“en˜try‘ÿe,‘yÌand“the“return“v‘ÿdDalue“is“0.Ž¡‘.ùœOtherwise,–¦fnothing“is“c²!hanged,“and“a“-1“is“returned.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcÞh‘Óõ‰ˆŠ#ØŽ“pb"os‘yšâ(Þchar–¦f*string,“int“direction,“intŽ¡‘DGposâ)Ž¡‘.ùœÝSearc²!h–Ÿ-for“ástring‘EÝin“the“history“list,› žstarting“at“ápMÞosÝ,˜an“absolute“index“in²!to“theŽ¡‘.ùœlist.‘Ú†If–œaádirection“Ýis“negativš²!e,‘žbthe“searc˜h“proMÞceeds“bac˜kw˜ard“from“ápMÞosÝ,‘žbotherwiseŽ¡‘.ùœforwš²!ard.‘ÉReturns–J&the“absolute“index“of“the“history“elemen˜t“where“ástring‘:>Ýw˜asŽ¡‘.ùœfound,–¦for“-1“otherwise.ŽŸ¥]‘GëQ2.3.6‘d(Managing–íMthe“History“FileŽŽŸ…á‘!GÝThe–ÌeHistory“library“can“read“the“history“from“and“write“it“to“a“ le.‘OÛThis“section“doMÞcu-Ž¡‘Gmen²!ts–¦fthe“functions“for“managing“a“history“ le.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çread‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝAdd–™þthe“con•²!ten“ts–™þof“á lename›7Ýto“the“history“list,‘œya“line“at“a“time.‘ÙºIf“á lename˜ÝisŽ¡‘.ùœÞNULLÝ,–¦fthen“read“from“`Þ~/.historyÝ'.‘ÝÝReturns“0“if“successful,“or“errno“if“not.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çread‘Óõ‰ˆŠ#ØŽ–÷Íhistory‘Óõ‰ˆŠ#ØŽ“range‘yšâ(Þchar–¦f*filename,“int“from,“int“toâ)Ž¡‘.ùœÝRead–è0a“range“of“lines“from“á lenameÝ,‘8¢adding“them“to“the“history“list.‘£;StartŽ¡‘.ùœreading–hat“line“áfrom“Ýand“end“at“átoÝ.›ÉIf“áfrom“Ýis“zero,‘t‹start“at“the“bMÞeginning.˜If“átoŽ¡‘.ùœÝis–ñÄless“than“áfromÝ,››then“read“un²!til“the“end“of“the“ le.‘¿÷If“á lename‘ŽËÝis“ÞNULLÝ,˜thenŽ¡‘.ùœread–¦ffrom“`Þ~/.historyÝ'.‘ÝÝReturns“0“if“successful,“or“Þerrno“Ýif“not.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çwrite‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝW‘ÿerite–d¨the“currenš²!t“history“to“á lenameÝ,‘Ô8o˜v˜erwriting“á lename‘¯Ýif“necessary‘ÿe.‘ ! £IfŽ¡‘.ùœá lename‘ŽÝis–ñÞNULLÝ,‘Àthen“write“the“history“list“to“`Þ~/.historyÝ'.‘½êV‘ÿealues“returnedŽ¡‘.ùœare–¦fas“in“Þread_history“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çappb"end‘Óõ‰ˆŠ#ØŽ‘÷Íhistory‘yšâ(Þint–¦fnelements,“char“*filenameâ)Ž¡‘.ùœÝAppMÞend–¦fthe“last“ánelemen²!ts‘èÝof“the“history“list“to“á lenameÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ítruncate‘Óõ‰ˆŠ#ØŽ“ le‘yšâ(Þchar–¦f*filename,“int“nlinesâ)Ž¡‘.ùœÝT‘ÿeruncate–¦fthe“history“ le“á lenameÝ,“lea²!ving“only“the“last“ánlines‘èÝlines.ŽŸ¥]‘GëQ2.3.7‘d(History‘íMExpansionŽŽŸ…á‘!GÝThese–¦ffunctions“implemenš²!t“ÞcshÝ-lik˜e“history“expansion.ŽŽŸŒ‹CÅŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ7ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷Íexpand‘yšâ(Þchar–¦f*string,“char“**outputâ)Ž¤ 33‘.ùœÝExpand–uástringÝ,›¨«placing“the“result“in²!to“áoutputÝ,˜a“pMÞoin²!ter“to“a“string“(see“Sec-Ž¡‘.ùœtion–¦f1.1“[History“In²!teraction],“page“1).‘ÝÝReturns:Ž©žÛ‘.ùœÞ0ŽŽ‘hÊÝIf–Îno“expansions“toMÞok“place“(or,‘×ëif“the“only“cš²!hange“in“the“text“w˜asŽ¡‘hÊthe–¦fde-slashifying“of“the“history“expansion“c²!haracter);Ž¦‘.ùœÞ1ŽŽ‘hÊÝif–¦fexpansions“did“tak²!e“place;Ž¦‘.ùœÞ-1ŽŽ‘hÊÝif–¦fthere“w²!as“an“error“in“expansion;Ž¦‘.ùœÞ2ŽŽ‘hÊÝif–̘the“returned“line“should“only“bMÞe“displa•²!y“ed,›Ö%but–̘not“executed,˜asŽ¡‘hÊwith–¦fthe“Þ:p“ÝmošMÞdi er“(see“Section“1.1.3“[Mo˜di ers],“page“2).Ž¦‘.ùœIf–™tan“error“oMÞcurred“in“expansion,‘œ then“áoutput‘ÖtÝconš²!tains“a“descriptiv˜e“error“mes-Ž¡‘.ùœsage.Ž©T¯’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íarg‘Óõ‰ˆŠ#ØŽ“extract‘yšâ(Þint–¦ffirst,“int“last,“charŽ¡‘DG*stringâ)Ž¡‘.ùœÝExtract–}»a“string“segmen²!t“consisting“of“the“á rst›º»Ýthrough“álast˜Ýargumenš²!ts“presen˜tŽ¡‘.ùœin–¦fástringÝ.‘ÝÝArgumenš²!ts“are“brok˜en“up“as“in“Bash.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çget‘Óõ‰ˆŠ#ØŽ–÷Íhistory‘Óõ‰ˆŠ#ØŽ“ev•Þen“t‘yšâ(Þchar–¦f*string,“int“*cindex,“intŽ¡‘DGqcharâ)Ž¡‘.ùœÝReturns–ƒdthe“text“of“the“history“ev•²!en“t–ƒdbMÞeginning“at“ástring‘s|Þ+“á*cindexÝ.‘Ò2á*cindex‘DÃÝisŽ¡‘.ùœmošMÞdi ed–Ã’to“p˜oinš²!t“to“after“the“ev˜en˜t“spMÞeci er.‘5`A˜t“function“en˜try‘ÿe,‘ÊÝácindex‘„ñÝpMÞoin˜tsŽ¡‘.ùœto–ìthe“index“inš²!to“ástring‘òÝwhere“the“history“ev˜en˜t“spšMÞeci cation“b˜egins.‘ðnáqc²!har‘ËÝisŽ¡‘.ùœa–éacš²!haracter“that“is“allo˜w˜ed“to“end“the“ev˜en˜t“spMÞeci cation“in“addition“to“theŽ¡‘.ùœ\normal"–¦fterminating“c²!haracters.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍtokÞenize‘yšâ(Þchar‘¦f*stringâ)Ž¡‘.ùœÝReturn–¼an“arraš²!y“of“tok˜ens“parsed“out“of“ástringÝ,‘!Rm˜uc˜h“as“the“shell“migh˜t.‘àTheŽ¡‘.ùœtokš²!ens–p7are“split“on“white“space“and“on“the“c˜haracters“Þ()<>;&|$Ý,‘â«and“shellŽ¡‘.ùœquoting›¦fcon•²!v“en“tions˜are˜obMÞey“ed.ŽŸ!}‘GëH2.4‘™History‘f@V‘þ¦fariablesŽŽŸé‘!GÝThis–:ßsection“describšMÞes“the“externally“visible“v‘ÿdDariables“exp˜orted“b²!y“the“GNU‘:wHistoryŽ¡‘GLibrary‘ÿe.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍbaseŽ¡‘.ùœÝThe–¦flogical“o set“of“the“ rst“en²!try“in“the“history“list.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ‘÷ÍlengthŽ¡‘.ùœÝThe›¦fn•²!um“bMÞer˜of˜en“tries˜curren“tly˜stored˜in˜the˜history˜list.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çmax‘Óõ‰ˆŠ#ØŽ–÷Íinput‘Óõ‰ˆŠ#ØŽ“historyŽ¡‘.ùœÝThe–4Êmaximš²!um“n˜um˜bMÞer“of“history“en˜tries.‘·ÿThis“m˜ust“bMÞe“c˜hanged“using“Þstifle_Ž¡‘.ùœhistory‘¦f()Ý.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íexpansion‘Óõ‰ˆŠ#ØŽ“cÞharŽ¡‘.ùœÝThe–¦fcš²!haracter“that“starts“a“history“ev˜en˜t.‘ÝÝThe“default“is“`Þ!Ý'.ŽŽŸŒ‹Q/Ÿò‘GÝ8’D¦ñGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Ísubst‘Óõ‰ˆŠ#ØŽ“cÞharŽ¤ 33‘.ùœÝThe–ùcš²!haracter“that“in˜v˜ok˜es“w˜ord“substitution“if“found“at“the“start“of“a“line.‘¤TheŽ¡‘.ùœdefault–¦fis“`Þ^Ý'.Ž©þ‘’‰V‘ÿeariableŽŽ‘Gèchar‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍcommenšÞt‘Óõ‰ˆŠ#ØŽ“c˜harŽ¡‘.ùœÝDuring–R·tokš²!enization,‘}Ëif“this“c˜haracter“is“seen“as“the“ rst“c˜haracter“of“a“w˜ord,Ž¡‘.ùœthen–ÑÃit“and“all“subsequenš²!t“c˜haracters“up“to“a“newline“are“ignored,‘ÜšsuppressingŽ¡‘.ùœhistory–¦fexpansion“for“the“remainder“of“the“line.‘ÝÝThis“is“disabled“b²!y“default.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íno‘Óõ‰ˆŠ#ØŽ“expand‘Óõ‰ˆŠ#ØŽ“cÞharsŽ¡‘.ùœÝThe–N)list“of“cš²!haracters“whic˜h“inhibit“history“expansion“if“found“immediatelyŽ¡‘.ùœfolloš²!wing‘¦fáhistory‘¨/‰x³HøŽ–ñ'expansion‘¨/‰x³HøŽ“c˜harÝ.‘ÝÝThe–¦fdefault“is“whitespace“and“`Þ=Ý'.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷ÍsearcšÞh‘Óõ‰ˆŠ#ØŽ“delimiter‘Óõ‰ˆŠ#ØŽ“c˜harsŽ¡‘.ùœÝThe–Eslist“of“additional“cš²!haracters“whic˜h“can“delimit“a“history“searc˜h“string,‘m6inŽ¡‘.ùœaddition–ýŽto“whitespace,‘S`Þ:Ý'“and“`Þ?Ý'“in“the“case“of“a“substring“searc²!h.‘¥•The“defaultŽ¡‘.ùœis‘¦fempt²!y‘ÿe.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çhistory‘Óõ‰ˆŠ#ØŽ–÷Íquotes‘Óõ‰ˆŠ#ØŽ“inhibit‘Óõ‰ˆŠ#ØŽ“expansionŽ¡‘.ùœÝIf–øÌnon-zero,‘…single-quoted“wš²!ords“are“not“scanned“for“the“history“expansion“c˜har-Ž¡‘.ùœacter.‘ÝÝThe–¦fdefault“v‘ÿdDalue“is“0.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çhistory‘Óõ‰ˆŠ#ØŽ–÷Íinhibit‘Óõ‰ˆŠ#ØŽ“expansion‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–±should“bMÞe“set“to“the“address“of“a“function“that“takš²!es“t˜w˜o“argumen˜ts:‘c8a“ÞcharŽ¡‘.ùœ*–bÖÝ(ástring‘ðÝ)“and“an“inš²!teger“index“in˜to“that“string“(ái‘”ƒÝ).‘ÇXIt“should“return“a“non-zeroŽ¡‘.ùœv‘ÿdDalue–öàif“the“history“expansion“starting“at“ástring[i]‘UáÝshould“not“bšMÞe“p˜erformed;‘1bzeroŽ¡‘.ùœif–tthe“expansion“should“bMÞe“done.‘°It“is“inš²!tended“for“use“b˜y“applications“lik˜e“BashŽ¡‘.ùœthat–?use“the“history“expansion“c²!haracter“for“additional“purpMÞoses.‘§ÀBy“default,Ž¡‘.ùœthis–¦fv‘ÿdDariable“is“set“to“NULL.ŽŸþ5‘GëH2.5‘™History–f@Programming“ExampleŽŽŸ˜â‘!GÝThe–¦ffollo²!wing“program“demonstrates“simple“use“of“the“GNU“History“Library‘ÿe.ŽŸ寑.ùœÞmain‘¿ª()Ž¤ €‘.ùœ{Ž¡‘:xðchar–¿ªline[1024],“*t;Ž¡‘:xðint–¿ªlen,“done“=“0;Ž¤‘:xðline[0]–¿ª=“0;Ž¡‘:xðusing_history‘¿ª();Ž¤ €‘:xðwhile‘¿ª(!done)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("history$“");Ž¡‘Qw˜fflush‘¿ª(stdout);Ž¡‘Qw˜t–¿ª=“fgets“(line,“sizeof“(line)“-“1,“stdin);Ž¡‘Qw˜if–¿ª(t“&&“*t)Ž¡‘\öì{ŽŽŸŒ‹ ]iŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“History’Ö5ˆ9ŽŽŽ ƒ3Ú ý¨ðБhv@Þlen–¿ª=“strlen“(t);Ž¤ €‘hv@if–¿ª(t[len“-“1]“==“'\n')Ž¡‘sõ”t[len–¿ª-“1]“=“'\0';Ž¡‘\öì}Ž©‘Qw˜if‘¿ª(!t)Ž¡‘\öìstrcpy–¿ª(line,“"quit");Ž¦‘Qw˜if‘¿ª(line[0])Ž¡‘\öì{Ž¡‘hv@char‘¿ª*expansion;Ž¡‘hv@int‘¿ªresult;Ž¦‘hv@result–¿ª=“history_expand“(line,“&expansion);Ž¡‘hv@if‘¿ª(result)Ž¡‘sõ”fprintf–¿ª(stderr,“"%s\n",“expansion);Ž¦‘hv@if–¿ª(result“<“0“||“result“==“2)Ž¡‘sõ”{Ž¡‘tèfree‘¿ª(expansion);Ž¡‘tècontinue;Ž¡‘sõ”}Ž¦‘hv@add_history‘¿ª(expansion);Ž¡‘hv@strncpy–¿ª(line,“expansion,“sizeof“(line)“-“1);Ž¡‘hv@free‘¿ª(expansion);Ž¡‘\öì}Ž¦‘Qw˜if–¿ª(strcmp“(line,“"quit")“==“0)Ž¡‘\öìdone–¿ª=“1;Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"save")“==“0)Ž¡‘\öìwrite_history‘¿ª("history_file");Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"read")“==“0)Ž¡‘\öìread_history‘¿ª("history_file");Ž¡‘Qw˜else–¿ªif“(strcmp“(line,“"list")“==“0)Ž¡‘\öì{Ž¡‘hv@register–¿ªHIST_ENTRY“**the_list;Ž¡‘hv@register–¿ªint“i;Ž¦‘hv@the_list–¿ª=“history_list“();Ž¡‘hv@if‘¿ª(the_list)Ž¡‘sõ”for–¿ª(i“=“0;“the_list[i];“i++)Ž¡‘tèprintf–¿ª("%d:“%s\n",“i“+“history_base,“the_list[i]->line);Ž¡‘\öì}Ž¡‘Qw˜else–¿ªif“(strncmp“(line,“"delete",“6)“==“0)Ž¡‘\öì{Ž¡‘hv@int‘¿ªwhich;Ž¡‘hv@if–¿ª((sscanf“(line“+“6,“"%d",“&which))“==“1)ŽŽŸŒ‹ ! h_Ÿò‘GÝ10’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3Ú ý¨ðБsõ”Þ{Ž¤ €‘tèHIST_ENTRY–¿ª*entry“=“remove_history“(which);Ž¡‘tèif‘¿ª(!entry)Ž¡’Šôline);Ž¡’–sfree‘¿ª(entry);Ž¡’Šô<}Ž¡‘sõ”}Ž¡‘hv@elseŽ¡‘sõ”{Ž¡‘tèfprintf–¿ª(stderr,“"non-numeric“arg“given“to“`delete'\n");Ž¡‘sõ”}Ž¡‘\öì}Ž¡‘EøD}Ž¡‘.ùœ}ŽŽŸŒ‹ m®Ÿò‘GÝAppMÞendix–¦fA:“Concept“Index’ž¬11ŽŽŽ ƒ3Ú ý¨ðБGêApp‘Š=endix‘záA‘ ¸QConcept‘z³IndexŽŽŸ^\(ŸÌ‘GëHAŽ¤‘Góo´‹Ç cmr9¬anc•¾9hored‘Tsearc“h 4‘ÅUó"”q[˜ cmsl9Í.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘=ï¬5ŽŸ‘GëHEŽ¡‘G¬ev•¾9en“t‘Tdesignators‘q ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘£Z¬1ŽŽŸÌ’óáðëHHŽŸ’óáð¬history‘Tev•¾9en“tsK‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘:¬1Ž¤ ’óáðhistory‘Texpansion‘ΑÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ÿ̬1Ž¡’óáðHistory‘TSearc¾9hingo~‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¡9¬5ŽŽŽŽŸŒ‹ ovŸò‘GÝ12’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3ÚŸŒ‹ vXŸò‘GÝAppMÞendix–¦fB:“F›ÿeunction“and“V˜ariable“Index’Üú13ŽŽŽ ƒ3Ú ý¨ðБGêApp‘Š=endix‘záB‘ ¸QF›þaGunction–z³and“V˜ariable“IndexŽŽ š\( þ‘GëHAŽ¤‘GóߤN cmtt9Éadd‘‘$‰c4ÕÂŽ‘fæhistory‘¹"‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘êݬ4Ž© ‘GÉappend‘‘$‰c4ÕÂŽ‘fæhistory‘Û¡‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ \¬6ŽŸ‘GëHCŽ¡‘GÉclear‘‘$‰c4ÕÂŽ‘fæhistoryü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M·¬4Ž¦‘GÉcurrent‘‘$‰c4ÕÂŽ‘fæhistory‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¾É¬5Ž©‘GëHGŽ¡‘GÉget‘‘$‰c4ÕÂŽ–fæhistory‘‘$‰c4ÕÂŽ“event‘™@‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Êû¬7Ž¦‘GëHHŽ¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæarg‘‘$‰c4ÕÂŽ“extract‘ü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘-Õ¬7Ž¤ ‘GÉhistory‘‘$‰c4ÕÂŽ‘fæbase‘q‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ج7Ž¡‘GÉhistory_comment_char‘ñ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ X¬8Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ‘fæexpand‘Û¡‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ \¬7Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæexpansion‘‘$‰c4ÕÂŽ“char‘©C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ū¬7Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ‘fæget‘¹"‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘êݬ5Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæget‘‘$‰c4ÕÂŽ“history‘‘$‰c4ÕÂŽ“state‘Ü8‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ó¬4Ž¡‘GÉhistory_inhibit_expansion_function‘ÒW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘8Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæis‘‘$‰c4ÕÂŽ“stifled‘J­‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘|h¬4Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ‘fælength‘fK‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‚²¬7Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ‘fælistj‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘œJ¬5Ž¡‘GÉhistory_no_expand_chars‘8‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘2Ÿ¬8Ž¡‘GÉhistory_quotes_inhibit_expansion‘aE‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘}¬¬8Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ‘fæsearch‘Û¡‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ \¬5Ž¡‘GÉhistory_search_delimiter_chars‘þk‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ò¬8Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæsearch‘‘$‰c4ÕÂŽ“pos‘J­‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘|h¬6Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæsearch‘‘$‰c4ÕÂŽ“prefix^ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¯¬6Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæset‘‘$‰c4ÕÂŽ“history‘‘$‰c4ÕÂŽ“state‘Ü8‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ó¬4Ž¡‘GÉhistory‘‘$‰c4ÕÂŽ–fæset‘‘$‰c4ÕÂŽ“pos(.‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Yé¬5ŽŽ þ’óáðÉhistory_subst_char‘ß‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘­F¬8Ž¤ ’óáðÉhistory‘‘$‰c4ÕÂŽ‘fætokenize‘>{‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘p6¬7Ž¡’óáðÉhistory‘‘$‰c4ÕÂŽ–fætotal‘‘$‰c4ÕÂŽ“bytes‘ü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘-Õ¬5Ž¡’óáðÉhistory‘‘$‰c4ÕÂŽ–fætruncate‘‘$‰c4ÕÂŽ“file^ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¯¬6Ž¤Ûn’óáðëHMŽ©’óáðÉmax‘‘$‰c4ÕÂŽ–fæinput‘‘$‰c4ÕÂŽ“history‘#ê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘@Q¬7Ž¡’óáðëHNŽ¦’óáðÉnext‘‘$‰c4ÕÂŽ‘fæhistoryj‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘œJ¬5Ž¡’óáðëHPŽ¦’óáðÉprevious‘‘$‰c4ÕÂŽ‘fæhistory‘>{‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘p6¬5Ž¡’óáðëHRŽ¦’óáðÉread‘‘$‰c4ÕÂŽ‘fæhistoryj‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘œJ¬6Ž¤ ’óáðÉread‘‘$‰c4ÕÂŽ–fæhistory‘‘$‰c4ÕÂŽ“range‘J­‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘|h¬6Ž¡’óáðÉremove‘‘$‰c4ÕÂŽ‘fæhistory‘Û¡‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ \¬4Ž¡’óáðÉreplace‘‘$‰c4ÕÂŽ–fæhistory‘‘$‰c4ÕÂŽ“entry^ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¯¬4Ž¤Ûn’óáðëHSŽ¦’óáðÉstifle‘‘$‰c4ÕÂŽ‘fæhistory‘Û¡‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ \¬4Ž¡’óáðëHUŽ¦’óáðÉunstifle‘‘$‰c4ÕÂŽ‘fæhistory‘>{‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘p6¬4ŽŸ ’óáðÉusing‘‘$‰c4ÕÂŽ‘fæhistoryü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M·¬4Ž¡’óáðëHWŽ¦’óáðÉwhere‘‘$‰c4ÕÂŽ‘fæhistoryü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M·¬5ŽŸ ’óáðÉwrite‘‘$‰c4ÕÂŽ‘fæhistoryü‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M·¬6ŽŽŽŽŸŒ‹v»Ÿò‘GÝ14’?-WGNU–¦fHistory“LibraryŽŽŽ ƒ3ÚŸŒ‹ÿÿÿÿ¤òŸò’À¥TÝiŽŽŽ ƒ3Ú ý¨ðБGêT‘þaGable–z³of“Con–ÿuÂten“tsŽŽŸ)33‘GëH1‘32Using–ffHistory“In•ŒÌteractiv“ely‘%‘32óIF C–ff cmbxti10ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘ ð›ëH1Ž©ÿ‘6GÝ1.1‘ ó5History‘¦fExpansion*•‘é˜ó5ý': *************** *** 47,51 **** ]Ý6Ž¡‘6G2.4‘ ó5History‘¦fV‘ÿeariables‘†{‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ [«Ý7Ž¡‘6G2.5‘ ! ó5History–¦fProgramming“Example‘Åh‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ š™Ý8ŽŸ33‘GëHApps3endix–ffA‘32Concept“Index‘q†‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘\ûëH11ŽŸ ÿ‘GApps3endix–ffB‘32F›þ¦function“and“V˜ariable“Index‘fò‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž‘RhëH13ŽŽŸŒ‹ÿÿÿþrBŸò‘GÝii’D 5GNU–¦fHistory“LibraryŽŽŽ ƒ3ÚŸŒø‡?ƒ’À;è›3ÚïÿóZÂÖN ¼j cmbx12óQÂÖN  #× cmbx12óIF C–ff cmbxti10óHÂÖN ff cmbx12ó?ÂÖN G® cmbx12ó=ßê ! GNU History Library --- 1,6 ---- ! GNU History Library *************** *** 8,24 ****

GNU History Library

!

Edition 2.1, for History Library Version 2.1.

!

March 1996

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


! !

! @dircategory Libraries ! @direntry ! * History: (history). The GNU history library API ! !

--- 8,49 ----

GNU History Library

!

Edition 4.0, for History Library Version 4.0.

!

December 1998

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


!

Table of Contents

! !


*************** *** 51,59 **** into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Foundation.

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

--- 76,84 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation.

! Copyright (C) 1988-1999 Free Software Foundation, Inc.

*************** *** 61,65 **** !

Using History Interactively

--- 86,90 ---- !

Using History Interactively

*************** *** 71,77 ****

!

History Expansion

--- 96,106 ----

+ + !

History Expansion

*************** *** 96,101 **** 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 --- 125,130 ---- 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 *************** *** 107,112 **** !

Event Designators

--- 136,148 ---- +

! ! !

Event Designators

*************** *** 162,166 **** !

Word Designators

--- 198,202 ---- !

Word Designators

*************** *** 222,226 **** !

Modifiers

--- 258,262 ---- !

Modifiers

*************** *** 276,280 **** !

Programming with GNU History

--- 312,316 ---- !

Programming with GNU History

*************** *** 286,292 ****

!

Introduction to History

--- 322,336 ----

+ + !

Introduction to History

*************** *** 302,306 **** 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. --- 346,350 ---- 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. *************** *** 323,327 **** !

History Storage

--- 367,371 ---- !

History Storage

*************** *** 370,374 **** !

History Functions

--- 414,418 ---- !

History Functions

*************** *** 378,384 ****

!

Initializing History and State Management

--- 422,446 ----

+ ! !

Initializing History and State Management

*************** *** 415,419 **** !

History List Management

--- 477,481 ---- !

History List Management

*************** *** 487,491 **** !

Information About the History List

--- 549,553 ---- !

Information About the History List

*************** *** 544,548 **** !

Moving Around the History List

--- 606,610 ---- !

Moving Around the History List

*************** *** 582,586 **** !

Searching the History List

--- 644,648 ---- !

Searching the History List

*************** *** 590,594 **** 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. --- 652,656 ---- 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. *************** *** 635,639 **** !

Managing the History File

--- 697,701 ---- !

Managing the History File

*************** *** 695,699 **** !

History Expansion

--- 757,761 ---- !

History Expansion

*************** *** 767,771 **** !

History Variables

--- 829,833 ---- !

History Variables

*************** *** 873,877 **** !

History Programming Example

--- 935,939 ---- !

History Programming Example

*************** *** 965,979 **** !

Concept Index

!

a

  • anchored search
  • !

    e

  • event designators
  • !

    h

  • history events --- 1027,1048 ---- !

    Concept Index

    !

    ! Jump to: ! a ! - ! e ! - ! h

    !

    a

  • anchored search
  • !

    e

  • event designators
  • !

    h

  • history events *************** *** 985,1005 **** !

    Function and Variable Index

    !

    a

  • add_history
  • append_history
  • !

    c

  • clear_history
  • current_history
  • !

    g

  • get_history_event
  • !

    h

  • history_arg_extract --- 1054,1097 ---- !

    Function and Variable Index

    !

    ! Jump to: ! a ! - ! c ! - ! g ! - ! h ! - ! m ! - ! n ! - ! p ! - ! r ! - ! s ! - ! u ! - ! w

    !

    a

  • add_history
  • append_history
  • !

    c

  • clear_history
  • current_history
  • !

    g

  • get_history_event
  • !

    h

  • history_arg_extract *************** *** 1027,1043 ****
  • history_truncate_file
  • !

    m

  • max_input_history
  • !

    n

  • next_history
  • !

    p

  • previous_history
  • !

    r

  • read_history --- 1119,1135 ----
  • history_truncate_file
  • !

    m

  • max_input_history
  • !

    n

  • next_history
  • !

    p

  • previous_history
  • !

    r

  • read_history *************** *** 1046,1059 ****
  • replace_history_entry
  • !

    s

  • stifle_history
  • !

    u

  • unstifle_history
  • using_history
  • !

    w

  • where_history --- 1138,1151 ----
  • replace_history_entry
  • !

    s

  • stifle_history
  • !

    u

  • unstifle_history
  • using_history
  • !

    w

  • where_history *************** *** 1063,1069 ****


    ! This document was generated on 2 April 1998 using the ! texi2html ! translator version 1.51.

    --- 1155,1161 ----


    ! This document was generated on 31 December 1998 using the ! texi2html ! translator version 1.52.

    diff -aNrc2 readline-2.2.1/doc/history.info readline-4.0/doc/history.info *** readline-2.2.1/doc/history.info Thu Apr 2 14:44:10 1998 --- readline-4.0/doc/history.info Thu Dec 31 12:08:33 1998 *************** *** 1,4 **** This is Info file history.info, produced by Makeinfo version 1.67 from ! the input file /usr/homes/chet/src/bash/readline-2.2/doc/hist.texinfo. INFO-DIR-SECTION Libraries --- 1,4 ---- This is Info file history.info, produced by Makeinfo version 1.67 from ! the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. INFO-DIR-SECTION Libraries *************** *** 11,16 **** previously typed input. ! Copyright (C) 1988, 1991, 1993, 1995, 1996 Free Software Foundation, ! Inc. Permission is granted to make and distribute verbatim copies of this --- 11,15 ---- previously typed input. ! Copyright (C) 1988-1999 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this *************** *** 26,30 **** 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.  --- 25,29 ---- 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.  *************** *** 765,789 ****  Tag Table: ! Node: Top1167 ! Node: Using History Interactively1747 ! Node: History Interaction2255 ! Node: Event Designators3674 ! Node: Word Designators4601 ! Node: Modifiers5850 ! Node: Programming with GNU History6988 ! Node: Introduction to History7714 ! Node: History Storage9035 ! Node: History Functions10128 ! Node: Initializing History and State Management11099 ! Node: History List Management11891 ! Node: Information About the History List13412 ! Node: Moving Around the History List14718 ! Node: Searching the History List15603 ! Node: Managing the History File17435 ! Node: History Expansion18941 ! Node: History Variables20785 ! Node: History Programming Example23103 ! Node: Concept Index25707 ! Node: Function and Variable Index26193  End Tag Table --- 764,788 ----  Tag Table: ! Node: Top1162 ! Node: Using History Interactively1742 ! Node: History Interaction2250 ! Node: Event Designators3669 ! Node: Word Designators4596 ! Node: Modifiers5845 ! Node: Programming with GNU History6983 ! Node: Introduction to History7709 ! Node: History Storage9030 ! Node: History Functions10123 ! Node: Initializing History and State Management11094 ! Node: History List Management11886 ! Node: Information About the History List13407 ! Node: Moving Around the History List14713 ! Node: Searching the History List15598 ! Node: Managing the History File17430 ! Node: History Expansion18936 ! Node: History Variables20780 ! Node: History Programming Example23098 ! Node: Concept Index25702 ! Node: Function and Variable Index26188  End Tag Table diff -aNrc2 readline-2.2.1/doc/history.ps readline-4.0/doc/history.ps *** readline-2.2.1/doc/history.ps Thu Apr 2 14:45:33 1998 --- readline-4.0/doc/history.ps Thu Dec 31 12:09:10 1998 *************** *** 9,13 **** %DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi %DVIPSParameters: dpi=300, comments removed ! %DVIPSSource: TeX output 1998.04.02:1444 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N --- 9,13 ---- %DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi %DVIPSParameters: dpi=300, comments removed ! %DVIPSSource: TeX output 1998.12.31:1208 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N *************** *** 61,89 **** @start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1 47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46 ! D E /Fc 11 121 df<00800100020004000C000800180030003000300060006000600060 ! 00E000E000E000E000E000E000E000E000E000E000600060006000600030003000300018 ! 0008000C00040002000100008009267D9B0F>40 D<8000400020001000180008000C0006 ! 000600060003000300030003000380038003800380038003800380038003800380030003 ! 00030003000600060006000C0008001800100020004000800009267E9B0F>I73 D<003F0000070000070000070000070000 ! 070000070000070000070000070003E7000C1700180F00300700700700E00700E00700E0 ! 0700E00700E00700E00700600700700700380F001C370007C7E0131A7F9915>100 ! D<07C01C3030187018600CE00CFFFCE000E000E000E0006000700438081C1807E00E107F ! 8F11>I<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C1C1C1C1C1CFF081A80990A> ! 105 D110 D<07E01C38300C700E6006E007 ! E007E007E007E007E0076006700E381C1C3807E010107F8F13>I<1F2060E04020C020C0 ! 20F0007F003FC01FE000F080708030C030C020F0408F800C107F8F0F>115 ! D<0800080008000800180018003800FFC038003800380038003800380038003800382038 ! 203820382018201C4007800B177F960F>I ! 120 D E /Fd 2 42 df<00E001C00380078007000F001E001E001C003C003C0038007800 ! 780078007000F000F000F000F000F000F000F000F000F000F000F000F000F000F0007000 ! 78007800780038003C003C001C001E001E000F0007000780038001C000E00B2E7CA112> ! 40 DI ! E /Fe 27 123 df<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000FC03F00 0FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800FC01F80 0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80 --- 61,153 ---- @start /Fa 1 47 df<70F8F8F0E005057B840E>46 D E /Fb 1 47 df<0E003F007F807F80FF80FF80FF007E003C000909798815>46 ! D E /Fc 26 123 df95 D<1FC0007FF00070780020180000 ! 1C00001C0007FC001FFC003C1C00701C00E01C00E01C00E01C00707C003FFF800F8F8011 ! 107E8F14>97 DI<03F80FFE1C0E380470006000E000E000E000E0006000700038 ! 0E1C1E0FFC03F00F107E8F14>I<007E00007E00000E00000E00000E00000E00000E0007 ! CE000FFE001C3E00301E00700E00E00E00E00E00E00E00E00E00E00E00E00E00700E0030 ! 1E00383E001FEFC007CFC012177F9614>I<07E00FF01C38301C700CE00EE00EFFFEFFFE ! E00060007000380E1C1E0FFC03F00F107E8F14>I<00FC01FE038E07040700070007007F ! FEFFFE070007000700070007000700070007000700070007000700FFF8FFF80F177F9614 ! >I<07CF001FFF80383B80301800701C00701C00701C003018003838003FF00037C00070 ! 00007000003FF8001FFC003FFE00700F00E00380E00380E00380E003807007003C1E001F ! FC0007F00011197F8F14>II<06000F000F0006000000000000000000FF00FF00 ! 070007000700070007000700070007000700070007000700FFF8FFF80D187C9714>I107 DIII<07C01FF03C78701C701CE00E ! E00EE00EE00EE00EE00E701C783C3C781FF007C00F107E8F14>II<03E7 ! 000FF7001C1F00300F00700F00E00700E00700E00700E00700E00700E00700700F00300F ! 001C3F000FF70007C700000700000700000700000700000700000700003FE0003FE01318 ! 7F8F14>II<0FD83FF86038C038C038F000 ! 7F803FF007F8001C6006E006F006F81CFFF8CFE00F107E8F14>I<06000E000E000E000E ! 007FFCFFFC0E000E000E000E000E000E000E000E000E0E0E0E0E0E0E1C07F801F00F157F ! 9414>IIII<7E3F007E3F001E3C000E78 ! 0007700007E00003E00001C00003C00003E0000770000E78000E38001C1C00FE3F80FE3F ! 8011107F8F14>II<3FFF7FFF700E701C7038007000E001C0038007000E ! 001C0738077007FFFFFFFF10107F8F14>I E /Fd 1 47 df<7070F06004047D830B>46 ! D E /Fe 24 122 df<03000700FF00070007000700070007000700070007000700070007 ! 000700070007000700070007000700070007007FF80D187D9713>49 ! D<001800180038007800F800B8013802380238043808381838103820384038C038FFFF00 ! 380038003800380038003803FF10187F9713>52 D<30183FF03FE03F8020002000200020 ! 0020002FC03060203000380018001C001C401CE01CE01C80184038403030E00F800E187E ! 9713>I<01F807040C06180E300E300070006000E000E3E0E418E80CF00EE006E007E007 ! E007600760077006300E180C0C3807E010187F9713>I<40007FFF7FFE7FFE4004800880 ! 108010002000400040008001800100030003000700060006000E000E000E000E000E0004 ! 0010197E9813>I<07E01818300C2006600660067006780C3E181F3007C003E00CF8307C ! 601E600FC007C003C003C00360022004181807E010187F9713>I72 ! D<0FC21836200E6006C006C002C002C002E00070007E003FE01FF803FC007E000E000700 ! 03800380038003C002C006E004D81887E0101A7E9915>83 D<1FC000387000383800101C ! 00001C00001C0003FC001E1C00381C00701C00E01C00E01C80E01C80E03C80705F801F8F ! 0011107F8F13>97 D<07F81C1C381C70087000E000E000E000E000E000E0007000700438 ! 081C1807E00E107F8F11>99 D<003F000007000007000007000007000007000007000007 ! 0000070000070003E7000C1700180F00300700700700E00700E00700E00700E00700E007 ! 00E00700600700700700380F001C370007C7E0131A7F9915>I<07C01C3030187018600C ! E00CFFFCE000E000E000E0006000700438081C1807E00E107F8F11>I<0FCF0018718030 ! 30007038007038007038007038003030001860002FC0006000006000007000003FF0003F ! FC001FFE00600F00C00300C00300C00300C00300600600381C0007E00011187F8F13> ! 103 DI<183C3C18000000000000FC1C1C1C1C1C1C1C1C1C ! 1C1C1C1C1CFF081A80990A>I110 ! D<07E01C38300C700E6006E007E007E007E007E007E0076006700E381C1C3807E010107F ! 8F13>II114 D<1F2060E04020C020C020F0007F003FC01FE000F0807080 ! 30C030C020F0408F800C107F8F0F>I<0800080008000800180018003800FFC038003800 ! 380038003800380038003800382038203820382018201C4007800B177F960F>I118 D ! 120 DI E /Ff 2 42 df<00E001C00380078007000F001E001E001C003C003C00 ! 38007800780078007000F000F000F000F000F000F000F000F000F000F000F000F000F000 ! F000700078007800780038003C003C001C001E001E000F0007000780038001C000E00B2E ! 7CA112>40 DI ! E /Fg 27 123 df<0007F800007FFC0001FC0E0003F01F0007E03F000FC03F000FC03F00 0FC03F000FC01E000FC00C000FC000000FC000000FC0FF80FFFFFF80FFFFFF800FC01F80 0FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F800FC01F80 *************** *** 168,172 **** C0601FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0 701F80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E ! /Ff 24 119 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC 0001F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E0001315 7D991A>42 D<003800007C00007C00006C0000EE0000EE0000EE0000C60000C60001C700 --- 232,236 ---- C0601FC0E01F80C03F00C07F00C07E0000FC0001FC0003F80003F03007E0300FE0300FC0 701F80703F80603F00E07E03E0FFFFE0FFFFE014167E9519>I E ! /Fh 24 119 df<00E00000E00000E00000E00000E000F0E1E0FCE7E07EEFC01FFF0007FC 0001F00007FC001FFF007EEFC0FCE7E0F0E1E000E00000E00000E00000E00000E0001315 7D991A>42 D<003800007C00007C00006C0000EE0000EE0000EE0000C60000C60001C700 *************** *** 225,229 **** E00F03E007FFFE03FFFE00FCFE17157F941A>I<7FC7FCFFC7FE7FC7FC0E00E00E00E00E 00E00701C00701C00701C003838003838003838001C70001C70001C70000EE0000EE0000 ! EE00007C00007C0000380017157F941A>I E /Fg 41 123 df<0007FC00003FFF0000FE 078003F007C007E00FC007E00FC00FC00FC00FC00FC00FC00FC00FC003000FC000000FC0 00000FC000000FC07FE0FFFFFFE0FFFFFFE00FC007E00FC007E00FC007E00FC007E00FC0 --- 289,293 ---- E00F03E007FFFE03FFFE00FCFE17157F941A>I<7FC7FCFFC7FE7FC7FC0E00E00E00E00E 00E00701C00701C00701C003838003838003838001C70001C70001C70000EE0000EE0000 ! EE00007C00007C0000380017157F941A>I E /Fi 41 123 df<0007FC00003FFF0000FE 078003F007C007E00FC007E00FC00FC00FC00FC00FC00FC00FC00FC003000FC000000FC0 00000FC000000FC07FE0FFFFFFE0FFFFFFE00FC007E00FC007E00FC007E00FC007E00FC0 *************** *** 382,386 **** 0FC0E01F80C03F80C03F00C07E0000FE0000FC0001F80003F80C03F00C07E00C0FE00C0F C01C1F80183F80387F00787E01F8FFFFF8FFFFF816187E971B>I ! E /Fh 30 122 df<0003F07C001E0DC600380F0F00701E0F00E01E0E00E00C0001C01C00 01C01C0001C01C0001C01C0001C01C00038038007FFFFFC0038038000380380003803800 038038000700700007007000070070000700700007007000070070000E00E0000E00E000 --- 446,450 ---- 0FC0E01F80C03F80C03F00C07E0000FE0000FC0001F80003F80C03F00C07E00C0FE00C0F C01C1F80183F80387F00787E01F8FFFFF8FFFFF816187E971B>I ! E /Fj 30 122 df<0003F07C001E0DC600380F0F00701E0F00E01E0E00E00C0001C01C00 01C01C0001C01C0001C01C0001C01C00038038007FFFFFC0038038000380380003803800 038038000700700007007000070070000700700007007000070070000E00E0000E00E000 *************** *** 455,459 **** 40000070400000708000007080000071000000390000003A0000003E0000003C00000038 000000180000001000000010000000200000002000000040000070C00000F0800000F100 ! 0000E600000078000000191D809318>I E /Fi 36 122 df<0001C0000003C000000FC0 00007FC0001FFFC000FFFFC000FFBFC000E03FC000003FC000003FC000003FC000003FC0 00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0 --- 519,523 ---- 40000070400000708000007080000071000000390000003A0000003E0000003C00000038 000000180000001000000010000000200000002000000040000070C00000F0800000F100 ! 0000E600000078000000191D809318>I E /Fk 36 122 df<0001C0000003C000000FC0 00007FC0001FFFC000FFFFC000FFBFC000E03FC000003FC000003FC000003FC000003FC0 00003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC000003FC0 *************** *** 698,702 **** 0000780000000070000000007000000000F000000000E000000001E000007C01C00000FE 03C00000FE03800000FE07000000FE0F000000FC1E000000787C0000003FF00000000FC0 ! 000000262E7E9F2B>I E /Fj 3 106 df<0000FF00000007FFE000001F00F8000078001E 0000E0000700018000018003000000C006000000600C000000300C000000301800000018 300000000C300000000C6000000006600000000660000000066000000006C000000003C0 --- 762,766 ---- 0000780000000070000000007000000000F000000000E000000001E000007C01C00000FE 03C00000FE03800000FE07000000FE0F000000FC1E000000787C0000003FF00000000FC0 ! 000000262E7E9F2B>I E /Fl 1 14 df<0000FF00000007FFE000001F00F8000078001E 0000E0000700018000018003000000C006000000600C000000300C000000301800000018 300000000C300000000C6000000006600000000660000000066000000006C000000003C0 *************** *** 704,955 **** 0000036000000006600000000660000000066000000006300000000C300000000C180000 00180C000000300C00000030060000006003000000C0018000018000E00007000078001E ! 00001F00F8000007FFE0000000FF0000282B7EA02D>13 D<0020006000C000C000C00180 ! 0180030003000300060006000C000C0018001800180030003000600060006000C000C000 ! 600060006000300030001800180018000C000C00060006000300030003000180018000C0 ! 00C000C0006000200B2E7CA112>104 DI E /Fk 44 122 df<3C007F00FF80FF80FFC0FFC0FFC07FC03EC000C0 ! 00C00180018001800300030006000E001C00380010000A157B8813>44 ! D<1C007F007F00FF80FF80FF807F007F001C0009097B8813>46 D<000E00001E00007E00 ! 07FE00FFFE00FFFE00F8FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 ! 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00FFFFFEFFFFFEFFFFFE ! 17277BA622>49 D<00FF800007FFF0000FFFFC001E03FE003800FF807C003F80FE003FC0 ! FF001FC0FF001FE0FF000FE0FF000FE07E000FE03C001FE000001FE000001FC000001FC0 ! 00003F8000003F0000007E000000FC000000F8000001F0000003E00000078000000F0000 ! 001E0000003C00E0007000E000E000E001C001C0038001C0060001C00FFFFFC01FFFFFC0 ! 3FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFFFF801B277DA622>I<007F800003FFF00007 ! FFFC000F81FE001F007F003F807F003F803F803F803F803F803F801F803F801F003F8000 ! 007F0000007F0000007E000000FC000001F8000007F00000FFC00000FFC0000001F80000 ! 007E0000003F0000003F8000001FC000001FC000001FE000001FE03C001FE07E001FE0FF ! 001FE0FF001FE0FF001FC0FF003FC0FE003F807C007F003F01FE001FFFFC0007FFF00000 ! FF80001B277DA622>I<00000F0000000F0000001F0000003F0000007F000000FF000001 ! FF000001FF000003BF0000073F00000E3F00001C3F00003C3F0000383F0000703F0000E0 ! 3F0001C03F0003803F0007803F0007003F000E003F001C003F0038003F0070003F00F000 ! 3F00FFFFFFF8FFFFFFF8FFFFFFF800007F0000007F0000007F0000007F0000007F000000 ! 7F0000007F0000007F00001FFFF8001FFFF8001FFFF81D277EA622>I<180003001F801F ! 001FFFFE001FFFFC001FFFF8001FFFF0001FFFC0001FFF00001C0000001C0000001C0000 ! 001C0000001C0000001C0000001C0000001C7FC0001DFFF8001F80FC001E003F0008003F ! 0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001F ! E0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF0 ! 0000FF80001B277DA622>I<00000780000000000780000000000FC0000000000FC00000 ! 00000FC0000000001FE0000000001FE0000000003FF0000000003FF0000000003FF00000 ! 000077F80000000077F800000000F7FC00000000E3FC00000000E3FC00000001C1FE0000 ! 0001C1FE00000003C1FF0000000380FF0000000380FF00000007007F80000007007F8000 ! 000F007FC000000E003FC000000E003FC000001C001FE000001C001FE000003FFFFFF000 ! 003FFFFFF000003FFFFFF00000700007F80000700007F80000F00007FC0000E00003FC00 ! 01E00003FE0001C00001FE0001C00001FE0003C00001FF00FFFE003FFFFCFFFE003FFFFC ! FFFE003FFFFC2E297EA833>65 DI<00007FE0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01 ! FC0000FF03F800007F07F000003F0FE000001F1FC000001F1FC000000F3F8000000F3F80 ! 0000077F800000077F800000077F00000000FF00000000FF00000000FF00000000FF0000 ! 0000FF00000000FF00000000FF00000000FF00000000FF000000007F000000007F800000 ! 007F800000073F800000073F800000071FC00000071FC000000E0FE000000E07F000001C ! 03F800003C01FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000007FF00028 ! 297CA831>I69 DI<00 ! 007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC0000FF0003 ! F800007F0007F000003F000FE000001F001FC000001F001FC000000F003F8000000F003F ! 80000007007F80000007007F80000007007F0000000000FF0000000000FF0000000000FF ! 0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF ! 0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F800000FF001F ! C00000FF001FC00000FF000FE00000FF0007F00000FF0003F80000FF0001FC0000FF0000 ! FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D297CA835>I< ! FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF03FC00003FC003FC00003FC003FC00003FC0 ! 03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0 ! 03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0 ! 03FFFFFFFFC003FFFFFFFFC003FFFFFFFFC003FC00003FC003FC00003FC003FC00003FC0 ! 03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0 ! 03FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC003FC00003FC0 ! 03FC00003FC003FC00003FC0FFFFF00FFFFFFFFFF00FFFFFFFFFF00FFFFF30297EA835> ! II78 D80 D82 D<00FF806003FFF0E00FFFF8E0 ! 1F80FDE03F001FE03E0007E07C0003E07C0003E0FC0001E0FC0001E0FC0000E0FE0000E0 ! FE0000E0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE001FFFFF0007FFFF80 ! 03FFFFC000FFFFC0000FFFE000007FE000001FF000000FF0000007F0E00003F0E00003F0 ! E00003F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F80FFE03F80E3FFFE00 ! E1FFFC00C01FF0001C297CA825>I85 DII<03FF ! 80000FFFF0001F01FC003F80FE003F807F003F803F003F803F801F003F8000003F800000 ! 3F8000003F8000003F80003FFF8001FC3F800FE03F801F803F803F003F807E003F80FC00 ! 3F80FC003F80FC003F80FC003F80FC005F807E00DF803F839FFC1FFE0FFC03FC03FC1E1B ! 7E9A21>97 D ! I<003FF00001FFFC0003F03E000FC07F001F807F003F007F003F007F007F003E007E0000 ! 007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000 ! 007E0000007F0000003F0003803F8003801F8007000FE00E0003F83C0001FFF800003FC0 ! 00191B7E9A1E>I<00007FF000007FF000007FF0000007F0000007F0000007F0000007F0 ! 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0003F87F0 ! 01FFF7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E0007F0 ! FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E0007F0 ! 7E0007F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF202A7EA9 ! 25>I<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E000F807E ! 000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE0000007E ! 0000007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FFFC0000 ! 3FE0001A1B7E9A1F>I<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F03E07F0 ! 0007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F0 ! 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 ! 0007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00 ! FF80F003FFE3F80FC1FE1C1F007C7C3F007E7C3E003E107E003F007E003F007E003F007E ! 003F007E003F007E003F003E003E003F007E001F007C000FC1F8000BFFE00018FF800018 ! 00000038000000380000003C0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01F ! FFFFF03C0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F07C0001F03F ! 0007E00FC01F8007FFFF00007FF0001E287E9A22>II<07000F801FC03FE03FE03FE01FC00F80070000 ! 00000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00F ! E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12 ! >I108 DII<003FE00001FFFC0003F07E000FC01F801F800FC03F0007E03F00 ! 07E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE00 ! 03F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC00FC01F8007F0 ! 7F0001FFFC00003FE0001D1B7E9A22>II< ! FFC1F0FFC7FCFFC63E0FCC7F0FD87F0FD07F0FD07F0FF03E0FE0000FE0000FE0000FE000 ! 0FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE000 ! FFFF00FFFF00FFFF00181B7F9A1B>114 D<03FE300FFFF03E03F07800F07000F0F00070 ! F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF80007FC0000FC ! E0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E9A1B>I<00E0 ! 0000E00000E00000E00001E00001E00001E00003E00003E00007E0000FE0001FFFE0FFFF ! E0FFFFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0 ! 000FE0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE07007F0E003F0C001FF ! 80007F0014267FA51A>IIIIII E /Fl 75 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070 ! F8F8F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E038E038 ! E03860300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007FFFC0FF ! FFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07F ! FFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C00001C000 ! 01C00001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780F1C000 ! 79C0003FC0001FE0000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380E1C380 ! E1C70071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D9F18> ! I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C ! 00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C00007C0 ! 000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C01803 ! 8013247E9F18>I<01C00007E0000FF0000E70001C38001C38001C38001C38001C73F81C ! F3F81CE3F80FC1C00FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0FC00E0 ! 7C00E07870E0787070FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E0E0E1C ! 1C38F8F0C0070E789B18>I<007000F001E003C007800F001E001C003800380070007000 ! 70007000E000E000E000E000E000E000E000E0007000700070007000380038001C001E00 ! 0F00078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780038001 ! C001C000E000E000E000E00070007000700070007000700070007000E000E000E000E001 ! C001C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001 ! C00041C100F1C780FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1C78041 ! C10001C00001C00001C00001C00011147D9718>I<00600000F00000F00000F00000F000 ! 00F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F000 ! 00F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFF ! C0FFFFE0FFFFE07FFFC013047E8F18>I<3078FCFC78300606778518>I<00030000078000 ! 0780000F80000F00001F00001E00001E00003E00003C00007C0000780000780000F80000 ! F00001F00001E00003E00003C00003C00007C0000780000F80000F00000F00001F00001E ! 00003E00003C00003C00007C0000780000F80000F00000F0000060000011247D9F18>I< ! 01F00007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0E000E0 ! E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C0700 ! 1F1F000FFE0007FC0001F000131C7E9B18>I<01800380038007800F803F80FF80FB8043 ! 8003800380038003800380038003800380038003800380038003800380038003807FFCFF ! FE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E06000 ! E00000E00000E00001C00001C00003C0000780000F00001E00003C0000780000F00001E0 ! 0007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F00003F0000 ! 770000770000E70001E70001C7000387000787000707000E07001E07003C070038070078 ! 0700F00700FFFFF8FFFFF8FFFFF8000700000700000700000700000700000700007FF000 ! 7FF0007FF0151C7F9B18>52 D<007E0001FF0007FF800F83C01E03C01C03C03801803800 ! 00700000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000 ! E07000E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>54 D<3078FCFC783000000000000000003078FCFC78300614779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I<0000 --- 768,1023 ---- 0000036000000006600000000660000000066000000006300000000C300000000C180000 00180C000000300C00000030060000006003000000C0018000018000E00007000078001E ! 00001F00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fm ! 45 122 df<3C007F00FF80FF80FFC0FFC0FFC07FC03EC000C000C0018001800180030003 ! 0006000E001C00380010000A157B8813>44 D<1C007F007F00FF80FF80FF807F007F001C ! 0009097B8813>46 D<000E00001E00007E0007FE00FFFE00FFFE00F8FE0000FE0000FE00 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 ! 00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE00 ! 00FE0000FE0000FE00FFFFFEFFFFFEFFFFFE17277BA622>49 D<00FF800007FFF0000FFF ! FC001E03FE003800FF807C003F80FE003FC0FF001FC0FF001FE0FF000FE0FF000FE07E00 ! 0FE03C001FE000001FE000001FC000001FC000003F8000003F0000007E000000FC000000 ! F8000001F0000003E00000078000000F0000001E0000003C00E0007000E000E000E001C0 ! 01C0038001C0060001C00FFFFFC01FFFFFC03FFFFFC07FFFFFC0FFFFFF80FFFFFF80FFFF ! FF801B277DA622>I<007F800003FFF00007FFFC000F81FE001F007F003F807F003F803F ! 803F803F803F803F801F803F801F003F8000007F0000007F0000007E000000FC000001F8 ! 000007F00000FFC00000FFC0000001F80000007E0000003F0000003F8000001FC000001F ! C000001FE000001FE03C001FE07E001FE0FF001FE0FF001FE0FF001FC0FF003FC0FE003F ! 807C007F003F01FE001FFFFC0007FFF00000FF80001B277DA622>I<00000F0000000F00 ! 00001F0000003F0000007F000000FF000001FF000001FF000003BF0000073F00000E3F00 ! 001C3F00003C3F0000383F0000703F0000E03F0001C03F0003803F0007803F0007003F00 ! 0E003F001C003F0038003F0070003F00F0003F00FFFFFFF8FFFFFFF8FFFFFFF800007F00 ! 00007F0000007F0000007F0000007F0000007F0000007F0000007F00001FFFF8001FFFF8 ! 001FFFF81D277EA622>I<180003001F801F001FFFFE001FFFFC001FFFF8001FFFF0001F ! FFC0001FFF00001C0000001C0000001C0000001C0000001C0000001C0000001C0000001C ! 7FC0001DFFF8001F80FC001E003F0008003F0000001F8000001FC000001FC000001FE000 ! 001FE018001FE07C001FE0FE001FE0FE001FE0FE001FE0FE001FC0FC001FC078003F8078 ! 003F803C007F001F01FE000FFFFC0003FFF00000FF80001B277DA622>I<000007800000 ! 00000780000000000FC0000000000FC0000000000FC0000000001FE0000000001FE00000 ! 00003FF0000000003FF0000000003FF00000000077F80000000077F800000000F7FC0000 ! 0000E3FC00000000E3FC00000001C1FE00000001C1FE00000003C1FF0000000380FF0000 ! 000380FF00000007007F80000007007F8000000F007FC000000E003FC000000E003FC000 ! 001C001FE000001C001FE000003FFFFFF000003FFFFFF000003FFFFFF00000700007F800 ! 00700007F80000F00007FC0000E00003FC0001E00003FE0001C00001FE0001C00001FE00 ! 03C00001FF00FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E297EA833>65 ! DI<00007F ! E0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000FF03F800007F07F00000 ! 3F0FE000001F1FC000001F1FC000000F3F8000000F3F800000077F800000077F80000007 ! 7F00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF ! 00000000FF00000000FF000000007F000000007F800000007F800000073F800000073F80 ! 0000071FC00000071FC000000E0FE000000E07F000001C03F800003C01FC00007800FF00 ! 01F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA831>I69 DI<00007FE003000007FFFC0700001F ! FFFF0F00007FF00F9F0000FF0001FF0001FC0000FF0003F800007F0007F000003F000FE0 ! 00001F001FC000001F001FC000000F003F8000000F003F80000007007F80000007007F80 ! 000007007F0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF00 ! 00000000FF0000000000FF0000000000FF0000000000FF0000FFFFF87F0000FFFFF87F80 ! 00FFFFF87F800000FF003F800000FF003F800000FF001FC00000FF001FC00000FF000FE0 ! 0000FF0007F00000FF0003F80000FF0001FC0000FF0000FF0001FF00007FF007FF00001F ! FFFF9F000007FFFE0F0000007FF003002D297CA835>III77 DI80 D82 D<00FF806003FFF0E00FFFF8E01F80 ! FDE03F001FE03E0007E07C0003E07C0003E0FC0001E0FC0001E0FC0000E0FE0000E0FE00 ! 00E0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE001FFFFF0007FFFF8003FF ! FFC000FFFFC0000FFFE000007FE000001FF000000FF0000007F0E00003F0E00003F0E000 ! 03F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F80FFE03F80E3FFFE00E1FF ! FC00C01FF0001C297CA825>I85 DII<03FF8000 ! 0FFFF0001F01FC003F80FE003F807F003F803F003F803F801F003F8000003F8000003F80 ! 00003F8000003F80003FFF8001FC3F800FE03F801F803F803F003F807E003F80FC003F80 ! FC003F80FC003F80FC003F80FC005F807E00DF803F839FFC1FFE0FFC03FC03FC1E1B7E9A ! 21>97 DI<00 ! 3FF00001FFFC0003F03E000FC07F001F807F003F007F003F007F007F003E007E0000007E ! 000000FE000000FE000000FE000000FE000000FE000000FE000000FE0000007E0000007E ! 0000007F0000003F0003803F8003801F8007000FE00E0003F83C0001FFF800003FC00019 ! 1B7E9A1E>I<00007FF000007FF000007FF0000007F0000007F0000007F0000007F00000 ! 07F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0003F87F001FF ! F7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E0007F0FE00 ! 07F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E0007F07E00 ! 07F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF202A7EA925> ! I<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E000F807E000F ! C07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE0000007E0000 ! 007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FFFC00003FE0 ! 001A1B7E9A1F>I<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F03E07F00007 ! F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F00007F00007 ! F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007 ! F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915>I<00FF80 ! F003FFE3F80FC1FE1C1F007C7C3F007E7C3E003E107E003F007E003F007E003F007E003F ! 007E003F007E003F003E003E003F007E001F007C000FC1F8000BFFE00018FF8000180000 ! 0038000000380000003C0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FFFFF01FFFFF ! F03C0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F07C0001F03F0007 ! E00FC01F8007FFFF00007FF0001E287E9A22>II<07000F801FC03FE03FE03FE01FC00F800700000000 ! 0000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F ! E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B7EAA12>I< ! FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0 ! 0FE00FE00FE0FFFEFFFEFFFE0F2A7EA912>108 D ! II<003FE00001FFFC0003F07E000FC01F801F800FC03F0007E03F0007E0 ! 7E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8 ! FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC00FC01F8007F07F00 ! 01FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF03E03F07800F07000F0F00070F000 ! 70F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF80007FC0000FCE000 ! 7CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E9A1B>I<00E00000 ! E00000E00000E00001E00001E00001E00003E00003E00007E0000FE0001FFFE0FFFFE0FF ! FFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000F ! E0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE07007F0E003F0C001FF8000 ! 7F0014267FA51A>IIIIII E /Fn 75 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8 ! F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E038E038E038 ! 60300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007FFFC0FFFFE0 ! FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC0 ! 1E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C00001C00001C0 ! 0001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780F1C00079C0 ! 003FC0001FE0000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380E1C380E1C7 ! 0071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D9F18>I<38 ! 03007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C0038 ! 7C0000780000780000F80000F00001F00001E00001E00003E00003C00003C00007C00007 ! 83800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C018038013 ! 247E9F18>I<01C00007E0000FF0000E70001C38001C38001C38001C38001C73F81CF3F8 ! 1CE3F80FC1C00FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0FC00E07C00 ! E07870E0787070FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E0E0E1C1C38 ! F8F0C0070E789B18>I<007000F001E003C007800F001E001C0038003800700070007000 ! 7000E000E000E000E000E000E000E000E0007000700070007000380038001C001E000F00 ! 078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780038001C001 ! C000E000E000E000E00070007000700070007000700070007000E000E000E000E001C001 ! C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C000 ! 41C100F1C780FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1C78041C100 ! 01C00001C00001C00001C00011147D9718>I<00600000F00000F00000F00000F00000F0 ! 0000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F0 ! 0000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFFC0FF ! FFE0FFFFE07FFFC013047E8F18>I<3078FCFC78300606778518>I<000300000780000780 ! 000F80000F00001F00001E00001E00003E00003C00007C0000780000780000F80000F000 ! 01F00001E00003E00003C00003C00007C0000780000F80000F00000F00001F00001E0000 ! 3E00003C00003C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F0 ! 0007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0E000E0E000 ! E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C07001F1F ! 000FFE0007FC0001F000131C7E9B18>I<01800380038007800F803F80FF80FB80438003 ! 800380038003800380038003800380038003800380038003800380038003807FFCFFFE7F ! FC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E06000E000 ! 00E00000E00001C00001C00003C0000780000F00001E00003C0000780000F00001E00007 ! C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F00003F00007700 ! 00770000E70001E70001C7000387000787000707000E07001E07003C0700380700780700 ! F00700FFFFF8FFFFF8FFFFF8000700000700000700000700000700000700007FF0007FF0 ! 007FF0151C7F9B18>52 D<007E0001FF0007FF800F83C01E03C01C03C038018038000070 ! 0000700000E1F800E7FE00FFFF00FE0780F803C0F001C0F000E0E000E0F000E07000E070 ! 00E07000E03801C03C03C01E07800FFF0007FE0001F800131C7E9B18>54 D<3078FCFC783000000000000000003078FCFC78300614779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318>I<0000 *************** *** 1069,1073 **** 0000E00000F000007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00003C000FFC000FF00007C000013247E9F18 ! >I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I E /Fm 74 123 df<001F83E000F06E3001C078780380F8780300F0300700700007007000070070000700 7000070070000700700007007000FFFFFF80070070000700700007007000070070000700 --- 1137,1141 ---- 0000E00000F000007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E0 0000E00000E00000E00000E00000E00000E00003C000FFC000FF00007C000013247E9F18 ! >I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I E /Fo 74 123 df<001F83E000F06E3001C078780380F8780300F0300700700007007000070070000700 7000070070000700700007007000FFFFFF80070070000700700007007000070070000700 *************** *** 1260,1264 **** 00002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318 >I<7FFF700E600E401C40384078407000E001E001C00380078007010E011E011C033802 ! 7006700EFFFE10147F9314>I E /Fn 13 122 df<0000001FFC0000C000000003FFFFC0 01C00000001FFFFFF003C00000007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F 9FC000000FFE000007FFC000003FF8000003FFC000007FF0000000FFC00000FFE0000000 --- 1328,1332 ---- 00002000002000004000004000004000F08000F08000F100006200003C0000151D7F9318 >I<7FFF700E600E401C40384078407000E001E001C00380078007010E011E011C033802 ! 7006700EFFFE10147F9314>I E /Fp 13 122 df<0000001FFC0000C000000003FFFFC0 01C00000001FFFFFF003C00000007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F 9FC000000FFE000007FFC000003FF8000003FFC000007FF0000000FFC00000FFE0000000 *************** *** 1396,1408 **** %%EndSetup %%Page: 1 1 ! 1 0 bop 75 693 a Fn(GNU)33 b(History)f(Library)p 75 743 ! 1800 17 v 960 791 a Fm(Edition)16 b(2.1,)e(for)h Fl(History)f(Library)g ! Fm(V)l(ersion)i(2.1.)1643 845 y(Marc)o(h)e(1996)75 2467 ! y Fk(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F) ! -6 b(oundation)75 2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 ! b(estern)23 b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 ! 1800 9 v eop %%Page: 2 2 ! 2 1 bop 75 250 a Fm(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 --- 1464,1476 ---- %%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.0,)e(for)h Fn(History)f(Library)g ! Fo(V)l(ersion)i(4.0.)1572 845 y(Decem)o(b)q(er)g(1998)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 *************** *** 1425,1448 **** (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(oundation.)75 ! 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 2661 y Fj(\015)g ! Fm(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l(oundation,)h(Inc.)p ! eop %%Page: 1 3 ! 1 2 bop 75 -58 a Fm(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o ! (ely)1007 b(1)75 183 y Fi(1)41 b(Using)26 b(History)h(In)n(teractiv)n ! (ely)137 317 y Fm(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)15 b(Library)h(in)g(y)o(our)f(o)o ! (wn)g(programs,)e(see)j Fj(h)p Fm(unde\014ned)p Fj(i)g ! Fm([Programming)e(with)i(GNU)f(History],)75 482 y(page)g ! Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(.)75 625 y Fk(1.1)33 ! b(History)22 b(Expansion)137 727 y Fm(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 ! Fl(csh)p Fm(.)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 --- 1493,1515 ---- (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(3.)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 *************** *** 1456,1463 **** (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 Fh(ev)o(en)o(t)p ! Fm(,)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 Fh(w)o(ords)p Fm(.)i(V)l(arious)c ! Fh(mo)q(di\014ers)75 1311 y Fm(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 --- 1523,1530 ---- (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 *************** *** 1466,1573 **** 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 Fl(!)p Fm(')e(b)o(y)h(default.)75 ! 1599 y Fg(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137 ! 1701 y Fm(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 Fl(!)216 b Fm(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 Fl(=)p Fm(')d(or)h(`)p Fl(\()p ! Fm('.)75 1929 y Fl(!)p Fh(n)191 b Fm(Refer)16 b(to)e(command)h(line)i ! Fh(n)p Fm(.)75 2015 y Fl(!-)p Fh(n)167 b Fm(Refer)16 ! b(to)e(the)i(command)f Fh(n)g Fm(lines)i(bac)o(k.)75 ! 2100 y Fl(!!)192 b Fm(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 Fl(!-1)p Fm('.)75 ! 2186 y Fl(!)p Fh(string)102 b Fm(Refer)16 b(to)e(the)i(most)e(recen)o ! (t)h(command)g(starting)g(with)g Fh(string)p Fm(.)75 ! 2271 y Fl(!?)p Fh(string)t Fl([?])315 2326 y Fm(Refer)i(to)f(the)h ! (most)f(recen)o(t)h(command)g(con)o(taining)g Fh(string)p ! Fm(.)25 b(The)17 b(trailing)g(`)p Fl(?)p Fm(')f(ma)o(y)g(b)q(e)315 ! 2381 y(omitted)f(if)h(the)f Fh(string)k Fm(is)d(follo)o(w)o(ed)f ! (immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fl(^)p ! Fh(string1)t Fl(^)p Fh(string2)t Fl(^)315 2521 y Fm(Quic)o(k)i (Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h ! Fh(string1)i Fm(with)e Fh(string2)p Fm(.)315 2576 y(Equiv)m(alen)o(t)g ! (to)d Fl(!!:s/)p Fh(string1)t Fl(/)p Fh(string2)t Fl(/)p ! Fm(.)75 2661 y Fl(!#)192 b Fm(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 Fm(2)1347 b(GNU)15 b(History)g(Library)75 ! 183 y Fg(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279 ! y Fm(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 Fl(:)p ! Fm(')e(separates)h(the)75 333 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 388 y(b)q(egins)f(with)g ! (a)e(`)p Fl(^)p Fm(',)h(`)p Fl($)p Fm(',)f(`)p Fl(*)p ! Fm(',)g(`)p Fl(-)p Fm(',)g(or)h(`)p Fl(\045)p Fm('.)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 443 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.)75 575 y Fl(0)e(\(zero\))57 b Fm(The)15 b Fl(0)p ! Fm(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 653 y Fh(n)215 b Fm(The)15 ! b Fh(n)p Fm(th)h(w)o(ord.)75 731 y Fl(^)216 b Fm(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)75 ! 808 y Fl($)216 b Fm(The)15 b(last)h(argumen)o(t.)75 886 ! y Fl(\045)216 b Fm(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g(most)g ! (recen)o(t)g(`)p Fl(?)p Fh(string)t Fl(?)p Fm(')f(searc)o(h.)75 ! 964 y Fh(x)p Fl(-)p Fh(y)168 b Fm(A)15 b(range)g(of)g(w)o(ords;)f(`)p ! Fl(-)p Fh(y)t Fm(')g(abbreviates)i(`)p Fl(0-)p Fh(y)t ! Fm('.)75 1042 y Fl(*)216 b Fm(All)15 b(of)f(the)f(w)o(ords,)g(except)i ! (the)f Fl(0)p Fm(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p ! Fl(1-$)p Fm('.)18 b(It)c(is)g(not)g(an)g(error)315 1096 ! y(to)g(use)h(`)p Fl(*)p Fm(')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 1151 y(that)f(case.)75 1229 y Fh(x)s Fl(*)189 ! b Fm(Abbreviates)16 b(`)p Fh(x)p Fl(-$)p Fm(')75 1307 ! y Fh(x)p Fl(-)192 b Fm(Abbreviates)16 b(`)p Fh(x)p Fl(-$)p ! Fm(')e(lik)o(e)i(`)p Fh(x)s Fl(*)p Fm(',)e(but)i(omits)f(the)g(last)g (w)o(ord.)137 1384 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 1439 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 ! 1548 y Fg(1.1.3)30 b(Mo)r(di\014ers)137 1643 y Fm(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 1698 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p ! Fl(:)p Fm('.)75 1776 y Fl(h)216 b Fm(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 1854 y Fl(t)216 b Fm(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 ! 1931 y Fl(r)216 b Fm(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g ! (the)g(form)g(`)p Fl(.)p Fh(su\016x)s Fm(',)f(lea)o(ving)i(the)f ! (basename.)75 2009 y Fl(e)216 b Fm(Remo)o(v)o(e)15 b(all)h(but)g(the)f ! (trailing)h(su\016x.)75 2087 y Fl(p)216 b Fm(Prin)o(t)15 b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)75 ! 2164 y Fl(s/)p Fh(old)r Fl(/)p Fh(new)t Fl(/)315 2219 ! y Fm(Substitute)h Fh(new)j Fm(for)c(the)h(\014rst)e(o)q(ccurrence)j(of) ! e Fh(old)i Fm(in)f(the)g(ev)o(en)o(t)f(line.)25 b(An)o(y)16 b(delimiter)315 2274 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g(of)f(`)p ! Fl(/)p Fm('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h(quoted)f(in)i ! Fh(old)g Fm(and)f Fh(new)k Fm(with)12 b(a)315 2329 y(single)j(bac)o ! (kslash.)20 b(If)15 b(`)p Fl(&)p Fm(')e(app)q(ears)h(in)h ! Fh(new)p Fm(,)f(it)g(is)h(replaced)g(b)o(y)f Fh(old)p ! Fm(.)20 b(A)14 b(single)i(bac)o(kslash)315 2383 y(will)j(quote)e(the)h ! (`)p Fl(&)p Fm('.)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 2438 ! y(the)e(input)h(line.)75 2516 y Fl(&)216 b Fm(Rep)q(eat)16 ! b(the)f(previous)h(substitution.)75 2594 y Fl(g)216 b ! Fm(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 ! 2648 y(with)c(`)p Fl(s)p Fm(',)d(as)i(in)h Fl(gs/)p Fh(old)r ! Fl(/)p Fh(new)t Fl(/)p Fm(,)f(or)g(with)g(`)p Fl(&)p ! Fm('.)p eop %%Page: 3 5 ! 3 4 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(3)75 183 y Fi(2)41 b(Programming)28 b(with)e(GNU)i ! (History)137 323 y Fm(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 378 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 ! 433 y(of)e(GNU)g(History)l(,)g(see)g Fj(h)p Fm(unde\014ned)p ! Fj(i)i Fm([Using)e(History)g(In)o(teractiv)o(ely],)g(page)g ! Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(.)75 581 y Fk(2.1)33 ! b(In)n(tro)r(duction)24 b(to)e(History)137 685 y Fm(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 740 y(is)k(able)g(to)e(k)o(eep)i --- 1533,1639 ---- 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 333 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 388 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 443 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.)75 575 y Fn(0)e(\(zero\))57 b Fo(The)15 b Fn(0)p ! Fo(th)g(w)o(ord.)20 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g ! (the)f(command)g(w)o(ord.)75 653 y Fj(n)215 b Fo(The)15 ! b Fj(n)p Fo(th)h(w)o(ord.)75 731 y Fn(^)216 b Fo(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)75 ! 808 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)75 886 ! 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 ! 964 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 1042 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 1096 ! 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 1151 y(that)f(case.)75 1229 y Fj(x)s Fn(*)189 ! b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')75 1307 ! 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 1384 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 1439 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 ! 1548 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 1643 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 1698 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p ! Fn(:)p Fo('.)75 1776 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 1854 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 ! 1931 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 2009 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f ! (trailing)h(su\016x.)75 2087 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.)75 ! 2164 y Fn(s/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)315 2219 ! y Fo(Substitute)h 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 2274 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 2329 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 2383 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 2438 ! y(the)e(input)h(line.)75 2516 y Fn(&)216 b Fo(Rep)q(eat)16 ! b(the)f(previous)h(substitution.)75 2594 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 ! 2648 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: 3 5 ! 3 4 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(3)75 183 y Fk(2)41 b(Programming)28 b(with)e(GNU)i ! (History)137 323 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 378 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 ! 433 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 581 y Fm(2.1)33 ! b(In)n(tro)r(duction)24 b(to)e(History)137 685 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 740 y(is)k(able)g(to)e(k)o(eep)i *************** *** 1582,1586 **** (taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o (y)e(line)i(in)75 1034 y(the)c(list)i(directly)l(.)22 ! b(In)16 b(addition,)g(a)f(history)g Fh(expansion)h Fm(function)h(is)e (a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75 1089 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g --- 1648,1652 ---- (taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o (y)e(line)i(in)75 1034 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 1089 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g *************** *** 1592,1609 **** (commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d (are)75 1328 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o ! (vided)g(b)o(y)g Fl(csh)p Fm(.)137 1403 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 1458 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.)75 1606 y Fk(2.2)33 b(History)22 b(Storage)137 ! 1710 y Fm(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 1782 y Fl(typedef)23 b(struct)g(_hist_entry)f({)243 1834 y(char)h(*line;)243 1886 y(char)g(*data;)195 1938 ! y(})h(HIST_ENTRY;)137 2013 y Fm(The)16 b(history)f(list)h(itself)g (migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2085 ! y Fl(HIST_ENTRY)22 b(**the_history_list;)137 2160 y Fm(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 2232 y Fl(/*)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 2242 21 42 v 195 2284 a(typedef)g(struct)g --- 1658,1675 ---- (commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d (are)75 1328 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o ! (vided)g(b)o(y)g Fn(csh)p Fo(.)137 1403 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 1458 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.)75 1606 y Fm(2.2)33 b(History)22 b(Storage)137 ! 1710 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 1782 y Fn(typedef)23 b(struct)g(_hist_entry)f({)243 1834 y(char)h(*line;)243 1886 y(char)g(*data;)195 1938 ! y(})h(HIST_ENTRY;)137 2013 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 2085 ! y Fn(HIST_ENTRY)22 b(**the_history_list;)137 2160 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 2232 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 2242 21 42 v 195 2284 a(typedef)g(struct)g *************** *** 1616,1741 **** (allocated)g(to)g(this)h(array.)f(*/)p 2057 2501 V 243 2543 a(int)g(flags;)195 2595 y(})h(HISTORY_STATE;)137 ! 2670 y Fm(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j ! Fl(HS_STIFLED)p Fm(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)p eop %%Page: 4 6 ! 4 5 bop 75 -58 a Fm(4)1347 b(GNU)15 b(History)g(Library)75 ! 183 y Fk(2.3)33 b(History)22 b(F)-6 b(unctions)137 278 ! y Fm(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 Fg(2.3.1)30 b(Initializing)20 ! b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fm(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 Ff(void)20 b Fe(using)p 333 679 18 3 v 20 w(history)j ! Fd(\(\))195 734 y Fm(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 Ff(HISTORY_STATE)21 b(*)e Fe(history)p 657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877 ! V 21 w(state)j Fd(\(\))195 931 y Fm(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 Ff(void)20 b Fe(history)p 377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019 ! V 21 w(state)j Fd(\()p Fl(HISTORY_STATE)13 b(*state)p ! Fd(\))195 1074 y Fm(Set)i(the)h(state)e(of)h(the)g(history)g(list)h ! (according)g(to)e Fh(state)p Fm(.)75 1182 y Fg(2.3.2)30 ! b(History)20 b(List)h(Managemen)n(t)137 1277 y Fm(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 Ff(void)20 ! b Fe(add)p 294 1420 V 20 w(history)j Fd(\()p Fl(char)14 ! b(*string)p Fd(\))195 1475 y Fm(Place)i Fh(string)j Fm(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 ! Fl(NULL)p Fm(.)1650 1618 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21 ! b(*)e Fe(remo)n(v)n(e)p 584 1618 V 20 w(history)k Fd(\()p ! Fl(int)14 b(which)p Fd(\))195 1673 y Fm(Remo)o(v)o(e)g(history)g(en)o ! (try)f(at)h(o\013set)f Fh(whic)o(h)h Fm(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 Ff(HIST_ENTRY)21 ! b(*)e Fe(replace)p 580 1816 V 22 w(history)p 777 1816 ! V 20 w(en)n(try)24 b Fd(\()p Fl(int)14 b(which,)g(char)283 ! 1870 y(*line,)g(char)g(*data)p Fd(\))195 1925 y Fm(Mak)o(e)f(the)h ! (history)f(en)o(try)g(at)g(o\013set)g Fh(whic)o(h)h Fm(ha)o(v)o(e)g ! Fh(line)k Fm(and)13 b Fh(data)p Fm(.)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 ! Fh(whic)o(h)p Fm(,)g(a)e Fl(NULL)195 2035 y Fm(p)q(oin)o(ter)f(is)f ! (returned.)1650 2123 y(F)l(unction)-1749 b Ff(void)20 ! b Fe(clear)p 320 2123 V 21 w(history)j Fd(\(\))195 2178 ! y Fm(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 Ff(void)20 ! b Fe(sti\015e)p 320 2266 V 21 w(history)j Fd(\()p Fl(int)14 ! b(max)p Fd(\))195 2321 y Fm(Sti\015e)i(the)f(history)h(list,)f(remem)o ! (b)q(ering)h(only)g(the)f(last)g Fh(max)j Fm(en)o(tries.)1650 ! 2409 y(F)l(unction)-1749 b Ff(int)20 b Fe(unsti\015e)p ! 358 2409 V 21 w(history)i Fd(\(\))195 2463 y Fm(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 Ff(int)20 b Fe(history)p 351 ! 2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Fd(\(\))195 ! 2661 y Fm(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: 5 7 ! 5 6 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(5)75 183 y Fg(2.3.3)30 b(Information)19 ! b(Ab)r(out)i(the)f(History)h(List)137 279 y Fm(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 Ff(HIST_ENTRY)21 b(**)e Fe(history)p ! 605 371 18 3 v 21 w(list)24 b Fd(\(\))195 426 y Fm(Return)f(a)g ! Fl(NULL)f Fm(terminated)g(arra)o(y)g(of)g Fl(HIST_ENTRY)f ! Fm(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 Fl(NULL)p Fm(.)1650 627 y(F)l(unction)-1749 ! b Ff(int)20 b Fe(where)p 325 627 V 20 w(history)j Fd(\(\))195 ! 682 y Fm(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 Ff(HIST_ENTRY)21 ! b(*)e Fe(curren)n(t)p 587 773 V 21 w(history)k Fd(\(\))195 ! 828 y Fm(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 Fl(where_)195 ! 883 y(history)14 b(\(\))p Fm(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try) ! g(there,)g(return)g(a)g Fl(NULL)g Fm(p)q(oin)o(ter.)1650 ! 975 y(F)l(unction)-1749 b Ff(HIST_ENTRY)21 b(*)e Fe(history)p ! 579 975 V 21 w(get)j Fd(\()p Fl(int)15 b(offset)p Fd(\))195 ! 1029 y Fm(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i ! Fh(o\013set)p Fm(,)e(starting)g(from)g Fl(history_base)p ! Fm(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g ! (if)g Fh(o\013set)h Fm(is)g(greater)e(than)h(the)h(history)f(length,)h ! (return)f(a)195 1139 y Fl(NULL)f Fm(p)q(oin)o(ter.)1650 ! 1231 y(F)l(unction)-1749 b Ff(int)20 b Fe(history)p 351 ! 1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Fd(\(\))195 ! 1285 y Fm(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 ! Fg(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137 ! 1548 y Fm(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 Ff(int)20 b Fe(history)p ! 351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Fd(\()p ! Fl(int)15 b(pos)p Fd(\))195 1694 y Fm(Set)g(the)h(p)q(osition)g(in)g ! (the)f(history)g(list)h(to)f Fh(p)q(os)p Fm(,)g(an)g(absolute)g(index)i (in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749 ! b Ff(HIST_ENTRY)21 b(*)e Fe(previous)p 615 1786 V 20 ! w(history)k Fd(\(\))195 1841 y Fm(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 ! Fl(NULL)f Fm(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749 ! b Ff(HIST_ENTRY)21 b(*)e Fe(next)p 514 1987 V 21 w(history)k ! Fd(\(\))195 2042 y Fm(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 Fl(NULL)g Fm(p)q(oin)o(ter.)75 2208 y Fg(2.3.5)30 ! b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fm(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 --- 1682,1807 ---- (allocated)g(to)g(this)h(array.)f(*/)p 2057 2501 V 243 2543 a(int)g(flags;)195 2595 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: 4 6 ! 4 5 bop 75 -58 a Fo(4)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: 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 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 *************** *** 1743,1908 **** (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 ! Fh(anc)o(hored)p Fm(,)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 Ff(int)20 b Fe(history)p ! 351 2560 V 20 w(searc)n(h)j Fd(\()p Fl(char)14 b(*string,)g(int)h ! (direction)p Fd(\))195 2615 y Fm(Searc)o(h)g(the)h(history)f(for)f ! Fh(string)p Fm(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g ! (o\013set.)k(If)d Fh(direction)195 2670 y Fl(<)j Fm(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: 6 8 ! 6 7 bop 75 -58 a Fm(6)1347 b(GNU)15 b(History)g(Library)195 ! 183 y Fh(string)k Fm(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 Fh(string)j Fm(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 Ff(int)20 b ! Fe(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396 ! V 21 w(pre\014x)i Fd(\()p Fl(char)15 b(*string,)f(int)g(direction)p ! Fd(\))195 451 y Fm(Searc)o(h)i(the)f(history)g(for)g ! Fh(string)p Fm(,)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 ! Fh(string)p Fm(.)25 b(If)17 b Fh(direction)h Fl(<)e Fm(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 Fh(string)k Fm(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 Ff(int)20 b ! Fe(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21 ! w(p)r(os)h Fd(\()p Fl(char)15 b(*string,)f(int)g(direction,)g(int)283 ! 828 y(pos)p Fd(\))195 883 y Fm(Searc)o(h)h(for)g Fh(string)k ! Fm(in)d(the)f(history)g(list,)g(starting)g(at)f Fh(p)q(os)p ! Fm(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937 ! y(list.)21 b(If)15 b Fh(direction)h Fm(is)g(negativ)o(e,)f(the)g(searc) ! o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fh(p)q(os)p ! Fm(,)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 ! Fh(string)k Fm(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75 ! 1170 y Fg(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137 ! 1272 y Fm(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 Ff(int)20 b Fe(read)p 286 1430 V 20 w(history)i Fd(\()p ! Fl(char)15 b(*filename)p Fd(\))195 1485 y Fm(Add)h(the)f(con)o(ten)o ! (ts)f(of)h Fh(\014lename)j Fm(to)d(the)g(history)g(list,)g(a)g(line)h ! (at)f(a)f(time.)21 b(If)15 b Fh(\014lename)j Fm(is)195 ! 1539 y Fl(NULL)p Fm(,)c(then)i(read)f(from)f(`)p Fl(~/.history)p ! Fm('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650 ! 1643 y(F)l(unction)-1749 b Ff(int)20 b Fe(read)p 286 ! 1643 V 20 w(history)p 481 1643 V 20 w(range)i Fd(\()p ! Fl(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Fd(\))195 ! 1697 y Fm(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fh(\014lename)p ! Fm(,)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 Fh(from)e ! Fm(and)g(end)h(at)e Fh(to)p Fm(.)19 b(If)c Fh(from)e ! Fm(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15 ! b Fh(to)195 1807 y Fm(is)i(less)g(than)f Fh(from)p Fm(,)g(then)h(read)f (un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17 ! b Fh(\014lename)j Fm(is)d Fl(NULL)p Fm(,)f(then)195 1862 ! y(read)f(from)g(`)p Fl(~/.history)p Fm('.)i(Returns)f(0)f(if)h ! (successful,)g(or)e Fl(errno)h Fm(if)h(not.)1650 1965 ! y(F)l(unction)-1749 b Ff(int)20 b Fe(write)p 304 1965 ! V 22 w(history)i Fd(\()p Fl(char)15 b(*filename)p Fd(\))195 ! 2020 y Fm(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f ! Fh(\014lename)p Fm(,)j(o)o(v)o(erwriting)d Fh(\014lename)k ! Fm(if)d(necessary)l(.)42 b(If)195 2074 y Fh(\014lename)20 ! b Fm(is)d Fl(NULL)p Fm(,)f(then)g(write)h(the)f(history)h(list)g(to)f ! (`)p Fl(~/.history)p Fm('.)21 b(V)l(alues)d(returned)195 ! 2129 y(are)d(as)g(in)h Fl(read_history)d(\(\))p Fm(.)1650 ! 2232 y(F)l(unction)-1749 b Ff(int)20 b Fe(app)r(end)p ! 360 2232 V 19 w(history)j Fd(\()p Fl(int)14 b(nelements,)g(char)h ! (*filename)p Fd(\))195 2287 y Fm(App)q(end)i(the)e(last)g ! Fh(nelemen)o(ts)j Fm(of)d(the)g(history)g(list)h(to)f ! Fh(\014lename)p Fm(.)1650 2390 y(F)l(unction)-1749 b ! Ff(int)20 b Fe(history)p 351 2390 V 20 w(truncate)p 582 ! 2390 V 21 w(\014le)k Fd(\()p Fl(char)14 b(*filename,)g(int)h(nlines)p ! Fd(\))195 2445 y Fm(T)l(runcate)g(the)h(history)f(\014le)h ! Fh(\014lename)p Fm(,)g(lea)o(ving)g(only)g(the)f(last)g ! Fh(nlines)k Fm(lines.)75 2568 y Fg(2.3.7)30 b(History)20 ! b(Expansion)137 2670 y Fm(These)c(functions)g(implemen)o(t)g ! Fl(csh)p Fm(-lik)o(e)g(history)g(expansion.)p eop %%Page: 7 9 ! 7 8 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(7)1650 183 y(F)l(unction)-1749 b Ff(int)20 ! b Fe(history)p 351 183 18 3 v 20 w(expand)j Fd(\()p Fl(char)14 ! b(*string,)g(char)h(**output)p Fd(\))195 238 y Fm(Expand)g ! Fh(string)p Fm(,)g(placing)h(the)f(result)h(in)o(to)f ! Fh(output)p Fm(,)f(a)h(p)q(oin)o(ter)g(to)g(a)f(string)h(\(see)g ! Fj(h)p Fm(unde-)195 293 y(\014ned)p Fj(i)h Fm([History)e(In)o ! (teraction],)h(page)g Fj(h)p Fm(unde\014ned)p Fj(i)p ! Fm(\).)21 b(Returns:)195 370 y Fl(0)216 b Fm(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 Fl(1)216 b Fm(if)16 ! b(expansions)g(did)g(tak)o(e)e(place;)195 580 y Fl(-1)192 ! b Fm(if)16 b(there)f(w)o(as)f(an)h(error)g(in)h(expansion;)195 ! 657 y Fl(2)216 b Fm(if)16 b(the)g(returned)g(line)i(should)f(only)f(b)q ! (e)h(displa)o(y)o(ed,)f(but)g(not)g(executed,)g(as)435 ! 712 y(with)11 b(the)f Fl(:p)g Fm(mo)q(di\014er)h(\(see)g ! Fj(h)p Fm(unde\014ned)p Fj(i)g Fm([Mo)q(di\014ers],)g(page)f ! Fj(h)p Fm(unde\014ned)p Fj(i)p Fm(\).)195 789 y(If)15 ! b(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h ! Fh(output)f Fm(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 Ff(char)20 ! b(*)f Fe(history)p 422 932 V 21 w(arg)p 524 932 V 19 ! w(extract)24 b Fd(\()p Fl(int)14 b(first,)h(int)g(last,)f(char)283 ! 987 y(*string)p Fd(\))195 1042 y Fm(Extract)g(a)g(string)g(segmen)o(t)g ! (consisting)i(of)e(the)g Fh(\014rst)i Fm(through)e Fh(last)h ! Fm(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fh(string)p ! Fm(.)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 Ff(char)20 b(*)f Fe(get)p 324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25 ! b Fd(\()p Fl(char)14 b(*string,)g(int)h(*cindex,)f(int)283 ! 1240 y(qchar)p Fd(\))195 1295 y Fm(Returns)h(the)g(text)f(of)g(the)h ! (history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fh(string)k ! Fl(+)d Fh(*cindex)p Fm(.)20 b Fh(*cindex)f Fm(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 ! Fh(cindex)21 b Fm(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o ! (to)e Fh(string)21 b Fm(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q ! (eci\014cation)h(b)q(egins.)26 b Fh(qc)o(har)19 b Fm(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 Ff(char)20 b(**)f Fe(history)p ! 448 1602 V 21 w(tok)n(enize)25 b Fd(\()p Fl(char)14 b(*string)p ! Fd(\))195 1657 y Fm(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h ! (out)g(of)f Fh(string)p Fm(,)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 Fl(\(\)<>;&|$)p Fm(,)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 Fk(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987 ! y Fm(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 Ff(int)20 ! b Fe(history)p 351 2130 V 20 w(base)195 2185 y Fm(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 Ff(int)20 ! b Fe(history)p 351 2274 V 20 w(length)195 2329 y Fm(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 Ff(int)20 ! b Fe(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195 ! 2472 y Fm(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 ! Fl(stifle_)195 2527 y(history)g(\(\))p Fm(.)1661 2615 ! y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377 2615 V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y ! Fm(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 Fl(!)p Fm('.)p eop %%Page: 8 10 ! 8 9 bop 75 -58 a Fm(8)1347 b(GNU)15 b(History)g(Library)1661 ! 183 y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377 183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238 ! y Fm(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 Fl(^)p Fm('.)1661 ! 388 y(V)l(ariable)-1749 b Ff(char)20 b Fe(history)p 377 388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443 ! y Fm(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 --- 1809,1971 ---- (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: 6 8 ! 6 7 bop 75 -58 a Fo(6)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: 7 9 ! 7 8 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(7)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)g(line)i(should)f(only)f(b)q(e)h(displa)o(y)o(ed,)f ! (but)g(not)g(executed,)g(as)435 712 y(with)g(the)f Fn(:p)g ! Fo(mo)q(di\014er)h(\(see)f(Section)h(1.1.3)e([Mo)q(di\014ers],)g(page)i ! (2\).)195 789 y(If)f(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: 8 10 ! 8 9 bop 75 -58 a Fo(8)1347 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 *************** *** 1910,1941 **** (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 Ff(char)20 b(*)f Fe(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 Fm(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 Fh(history)p 528 758 14 2 v 16 ! w(expansion)p 739 758 V 18 w(c)o(har)p Fm(.)j(The)d(default)f(is)h ! (whitespace)g(and)g(`)p Fl(=)p Fm('.)1661 853 y(V)l(ariable)-1749 ! b Ff(char)20 b(*)f Fe(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 Fm(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 Fl(:)p Fm(')d(and)i(`)p ! Fl(?)p Fm(')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 Ff(int)20 b Fe(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 Fm(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 Ff(Function)20 b(*)g Fe(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 Fm(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 Fl(char)195 1428 y(*)j Fm(\()p ! Fh(string)t Fm(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g ! (string)g(\()p Fh(i)r Fm(\).)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 Fh(string[i])i Fm(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 --- 1973,2004 ---- (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 *************** *** 1943,1950 **** (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 Fk(2.5)33 b(History)22 b(Programming)h(Example)137 ! 1878 y Fm(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 Fl(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 --- 2006,2013 ---- (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 *************** *** 1954,1959 **** 2670 y({)p eop %%Page: 9 11 ! 9 10 bop 75 -58 a Fm(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (History)889 b(9)434 183 y Fl(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 --- 2017,2022 ---- 2670 y({)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)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 *************** *** 1982,1987 **** (+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop %%Page: 10 12 ! 10 11 bop 75 -58 a Fm(10)1324 b(GNU)15 b(History)g(Library)481 ! 183 y Fl({)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 --- 2045,2050 ---- (+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop %%Page: 10 12 ! 10 11 bop 75 -58 a Fo(10)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 *************** *** 1992,2068 **** 1013 y(})p eop %%Page: 11 13 ! 11 12 bop 75 -58 a Fm(App)q(endix)17 b(A:)e(Concept)g(Index)1196 ! b(11)75 183 y Fi(App)r(endix)25 b(A)41 b(Concept)27 b(Index)137 ! 359 y Fc(\(Index)14 b(is)f(nonexisten)o(t\))p eop %%Page: 12 14 ! 12 13 bop 75 -58 a Fm(12)1324 b(GNU)15 b(History)g(Library)p eop %%Page: 13 15 ! 13 14 bop 75 -58 a Fm(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l ! (ariable)g(Index)919 b(13)75 183 y Fi(App)r(endix)25 b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 ! b(Index)137 359 y Fc(\(Index)14 b(is)f(nonexisten)o(t\))p ! eop %%Page: 14 16 ! 14 15 bop 75 -58 a Fm(14)1324 b(GNU)15 b(History)g(Library)p eop %%Page: -1 17 ! -1 16 bop 1862 -58 a Fm(i)75 183 y Fi(T)-7 b(able)27 ! b(of)f(Con)n(ten)n(ts)75 354 y Fk(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 Fk(1)224 423 y Fm(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 Fm(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 Fm(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 Fm(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 Fm(2)75 708 y Fk(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 Fk(3)224 777 y Fm(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 Fm(3)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 Fm(3)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 Fm(4)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 ! Fm(4)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 Fm(4)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 Fm(5)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 Fm(5)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 Fm(5)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 Fm(6)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 Fm(6)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 Fm(7)224 1380 y(2.5)45 b(History)15 b(Programming)f(Example)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(.)h(.)f(.)22 ! b Fm(8)75 1501 y Fk(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 Fk(11)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 Fk(13)p eop %%Page: -2 18 ! -2 17 bop 75 -58 a Fm(ii)1346 b(GNU)15 b(History)g(Library)p eop %%Trailer --- 2055,2262 ---- 1013 y(})p eop %%Page: 11 13 ! 11 12 bop 75 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1196 ! b(11)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(5)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(5)p eop %%Page: 12 14 ! 12 13 bop 75 -58 a Fo(12)1324 b(GNU)15 b(History)g(Library)p eop %%Page: 13 15 ! 13 14 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(13)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(4)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(6)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(4)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(5)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(7)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(7)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(7)75 1090 y Fc(history_co)o(mm)o(ent)o(_c)o(har)h ! Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Fe(8)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(7)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(7)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(5)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(4)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)d Fd(.)6 ! b(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(8)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(4)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(7)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(5)75 1538 y Fc(history_no)o(_e)o(xpa)o(nd)o ! (_ch)o(ars)f Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Fe(8)75 1588 y Fc(history_qu)o(ot)o ! (es_)o(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)14 b Fd(.)6 ! b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(8)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(5)75 1687 ! y Fc(history_se)o(ar)o(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)16 ! b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 ! b Fe(8)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(6)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(6)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(4)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(5)1012 359 y Fc(history_sub)o(st)o(_ch)o(ar)e ! 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(.)18 b Fe(8)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(7)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(5)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(6)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(7)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(5)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(5)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(6)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(6)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(4)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(4)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(4)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(4)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(4)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(5)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(6)p eop %%Page: 14 16 ! 14 15 bop 75 -58 a Fo(14)1324 b(GNU)15 b(History)g(Library)p eop %%Page: -1 17 ! -1 16 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(3)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(3)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(3)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(4)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(4)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(4)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(5)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(5)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(5)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(6)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(6)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(7)224 1380 y(2.5)45 b(History)15 b(Programming)f(Example)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(.)h(.)f(.)22 ! b Fo(8)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(11)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(13)p eop %%Page: -2 18 ! -2 17 bop 75 -58 a Fo(ii)1346 b(GNU)15 b(History)g(Library)p eop %%Trailer diff -aNrc2 readline-2.2.1/doc/history_toc.html readline-4.0/doc/history_toc.html *** readline-2.2.1/doc/history_toc.html Thu Apr 2 14:45:29 1998 --- readline-4.0/doc/history_toc.html Wed Dec 31 19:00:00 1969 *************** *** 1,51 **** - - - - - GNU History Library - Table of Contents - - -

    GNU History Library

    -

    Edition 2.1, for History Library Version 2.1.

    -

    March 1996

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

    -


    -

    -


    - This document was generated on 2 April 1998 using the - texi2html - translator version 1.51.

    - - --- 0 ---- diff -aNrc2 readline-2.2.1/doc/manvers.texinfo readline-4.0/doc/manvers.texinfo *** readline-2.2.1/doc/manvers.texinfo Wed Dec 31 19:00:00 1969 --- readline-4.0/doc/manvers.texinfo Thu Dec 31 10:50:36 1998 *************** *** 0 **** --- 1,6 ---- + @set EDITION 4.0 + @set VERSION 4.0 + @set UPDATED 31 December 1998 + @set UPDATE-MONTH December 1998 + + @set LASTCHANGE Thu Dec 31 10:17:05 EST 1998 diff -aNrc2 readline-2.2.1/doc/readline.0 readline-4.0/doc/readline.0 *** readline-2.2.1/doc/readline.0 Thu Apr 2 14:45:34 1998 --- readline-4.0/doc/readline.0 Thu Dec 31 10:26:57 1998 *************** *** 9,12 **** --- 9,13 ---- SSYYNNOOPPSSIISS + ##iinncclluuddee <> ##iinncclluuddee <> ##iinncclluuddee <> *************** *** 58,66 **** When a command is described as _k_i_l_l_i_n_g text, the text - deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). ! GNU 1998 Feb 19 1 --- 59,66 ---- When a command is described as _k_i_l_l_i_n_g text, the text ! GNU 1998 Dec 31 1 *************** *** 71,74 **** --- 71,75 ---- + deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive kills cause the text to be accumulated into one unit, *************** *** 127,132 **** ! ! GNU 1998 Feb 19 2 --- 128,132 ---- ! GNU 1998 Dec 31 2 *************** *** 194,198 **** ! GNU 1998 Feb 19 3 --- 194,198 ---- ! GNU 1998 Dec 31 3 *************** *** 260,264 **** ! GNU 1998 Feb 19 4 --- 260,264 ---- ! GNU 1998 Dec 31 4 *************** *** 275,278 **** --- 275,290 ---- single screen line when it becomes longer than the screen width rather than wrapping to a new line. + iinnppuutt--mmeettaa ((OOffff)) + If set to OOnn, readline will enable eight-bit input + (that is, it will not strip the high bit from the + characters it reads), regardless of what the termi- + nal claims it can support. The name mmeettaa--ffllaagg is a + synonym for this variable. + iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) + The string of characters that should terminate an + incremental search without subsequently executing + the character as a command. If this variable has + not been given a value, the characters _E_S_C and _C_-_J + will terminate an incremental search. kkeeyymmaapp ((eemmaaccss)) Set the current readline keymap. The set of legal *************** *** 289,330 **** If set to OOnn, history lines that have been modified are displayed with a preceding asterisk (**). - mmeettaa--ffllaagg ((OOffff)) - If set to OOnn, readline will enable eight-bit input - (that is, it will not strip the high bit from the - characters it reads), regardless of what the termi- - nal claims it can support. oouuttppuutt--mmeettaa ((OOffff)) If set to OOnn, readline will display characters with ! the eighth bit set directly rather than as a meta- prefixed escape sequence. pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) ! If set to OOnn, readline will display completions ! with matches sorted horizontally in alphabetical order, rather than down the screen. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) ! This alters the default behavior of the completion ! functions. If set to oonn, words which have more ! than one possible completion cause the matches to ! be listed immediately instead of ringing the bell. vviissiibbllee--ssttaattss ((OOffff)) If set to OOnn, a character denoting a file's type as ! reported by ssttaatt(2) is appended to the filename when listing possible completions. CCoonnddiittiioonnaall CCoonnssttrruuccttss ! Readline implements a facility similar in spirit to the ! conditional compilation features of the C preprocessor ! which allows key bindings and variable settings to be per- ! formed as the result of tests. There are four parser ! directives used. ! ! $$iiff The $$iiff construct allows bindings to be made based ! on the editing mode, the terminal being used, or ! the application using readline. The text of the ! test extends to the end of the line; no characters ! GNU 1998 Feb 19 5 --- 301,330 ---- If set to OOnn, history lines that have been modified are displayed with a preceding asterisk (**). oouuttppuutt--mmeettaa ((OOffff)) If set to OOnn, readline will display characters with ! the eighth bit set directly rather than as a meta- prefixed escape sequence. pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) ! If set to OOnn, readline will display completions ! with matches sorted horizontally in alphabetical order, rather than down the screen. sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) ! This alters the default behavior of the completion ! functions. If set to oonn, words which have more ! than one possible completion cause the matches to ! be listed immediately instead of ringing the bell. vviissiibbllee--ssttaattss ((OOffff)) If set to OOnn, a character denoting a file's type as ! reported by ssttaatt(2) is appended to the filename when listing possible completions. CCoonnddiittiioonnaall CCoonnssttrruuccttss ! Readline implements a facility similar in spirit to the ! conditional compilation features of the C preprocessor ! which allows key bindings and variable settings to be ! GNU 1998 Dec 31 5 *************** *** 335,353 **** are required to isolate it. ! mmooddee The mmooddee== form of the $$iiff directive is used ! to test whether readline is in emacs or vi ! mode. This may be used in conjunction with the sseett kkeeyymmaapp command, for instance, to set ! bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_- ! _c_t_l_x keymaps only if readline is starting out in emacs mode. tteerrmm The tteerrmm== form may be used to include termi- ! nal-specific key bindings, perhaps to bind ! the key sequences output by the terminal's ! function keys. The word on the right side ! of the == is tested against the full name of the terminal and the portion of the terminal name before the first --. This allows _s_u_n to --- 335,360 ---- + performed as the result of tests. There are four parser + directives used. + + $$iiff The $$iiff construct allows bindings to be made based + on the editing mode, the terminal being used, or + the application using readline. The text of the + test extends to the end of the line; no characters are required to isolate it. ! mmooddee The mmooddee== form of the $$iiff directive is used ! to test whether readline is in emacs or vi ! mode. This may be used in conjunction with the sseett kkeeyymmaapp command, for instance, to set ! bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_- ! _c_t_l_x keymaps only if readline is starting out in emacs mode. tteerrmm The tteerrmm== form may be used to include termi- ! nal-specific key bindings, perhaps to bind ! the key sequences output by the terminal's ! function keys. The word on the right side ! of the == is tested against the full name of the terminal and the portion of the terminal name before the first --. This allows _s_u_n to *************** *** 358,367 **** application-specific settings. Each program using the readline library sets the _a_p_p_l_i_c_a_- ! _t_i_o_n _n_a_m_e, and an initialization file can ! test for a particular value. This could be used to bind key sequences to functions use- ! ful for a specific program. For instance, ! the following command adds a key sequence ! that quotes the current or previous word in Bash: --- 365,374 ---- application-specific settings. Each program using the readline library sets the _a_p_p_l_i_c_a_- ! _t_i_o_n _n_a_m_e, and an initialization file can ! test for a particular value. This could be used to bind key sequences to functions use- ! ful for a specific program. For instance, ! the following command adds a key sequence ! that quotes the current or previous word in Bash: *************** *** 374,396 **** minates an $$iiff command. ! $$eellssee Commands in this branch of the $$iiff directive are executed if the test fails. $$iinncclluuddee ! This directive takes a single filename as an argu- ! ment and reads commands and bindings from that ! file. For example, the following directive would read _/_e_t_c_/_i_n_p_u_t_r_c: - $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c - - SSEEAARRCCHHIINNGG - Readline provides commands for searching through the com- - mand history for lines containing a specified string. - There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_- - ! GNU 1998 Feb 19 6 --- 381,396 ---- minates an $$iiff command. ! $$eellssee Commands in this branch of the $$iiff directive are executed if the test fails. $$iinncclluuddee ! This directive takes a single filename as an argu- ! ment and reads commands and bindings from that ! file. For example, the following directive would read _/_e_t_c_/_i_n_p_u_t_r_c: ! GNU 1998 Dec 31 6 *************** *** 401,434 **** ! _i_n_c_r_e_m_e_n_t_a_l. ! Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, readline displays the next entry from the ! history matching the string typed so far. An incremental ! search requires only as many characters as needed to find ! the desired history entry. The Escape character is used ! to terminate an incremental search. Control-J will also ! terminate the search. Control-G will abort an incremental ! search and restore the original line. When the search is ! terminated, the history entry containing the search string ! becomes the current line. To find other matching entries ! in the history list, type Control-S or Control-R as appro- ! priate. This will search backward or forward in the his- ! tory for the next line matching the search string typed so ! far. Any other key sequence bound to a readline command ! will terminate the search and execute that command. For ! instance, a _n_e_w_l_i_n_e will terminate the search and accept ! the line, thereby executing the command from the history ! list. ! Non-incremental searches read the entire search string before starting to search for matching history lines. The ! search string may be typed by the user or be part of the contents of the current line. EEDDIITTIINNGG CCOOMMMMAANNDDSS ! The following is a list of the names of the commands and ! the default key sequences to which they are bound. Com- mand names without an accompanying key sequence are unbound by default. --- 401,442 ---- ! $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c ! ! SSEEAARRCCHHIINNGG ! Readline provides commands for searching through the com- ! mand history for lines containing a specified string. ! There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_- ! _t_a_l. ! Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, readline displays the next entry from the ! history matching the string typed so far. An incremental ! search requires only as many characters as needed to find ! the desired history entry. The characters present in the ! value of the _i_s_e_a_r_c_h_-_t_e_r_m_i_n_a_t_o_r_s variable are used to ter- ! minate an incremental search. If that variable has not ! been assigned a value the Escape and Control-J characters ! will terminate an incremental search. Control-G will ! abort an incremental search and restore the original line. ! When the search is terminated, the history entry contain- ! ing the search string becomes the current line. To find ! other matching entries in the history list, type Control-S ! or Control-R as appropriate. This will search backward or ! forward in the history for the next line matching the ! search string typed so far. Any other key sequence bound ! to a readline command will terminate the search and exe- ! cute that command. For instance, a _n_e_w_l_i_n_e will terminate ! the search and accept the line, thereby executing the com- ! mand 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. EEDDIITTIINNGG CCOOMMMMAANNDDSS ! The following is a list of the names of the commands and ! the default key sequences to which they are bound. Com- mand names without an accompanying key sequence are unbound by default. *************** *** 444,462 **** Move back a character. ffoorrwwaarrdd--wwoorrdd ((MM--ff)) ! Move forward to the end of the next word. Words ! are composed of alphanumeric characters (letters and digits). - bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of this, or the previous, - word. Words are composed of alphanumeric charac- - ters (letters and digits). - cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen leaving the current line at the - top of the screen. With an argument, refresh the - current line without clearing the screen. ! GNU 1998 Feb 19 7 --- 452,462 ---- Move back a character. ffoorrwwaarrdd--wwoorrdd ((MM--ff)) ! Move forward to the end of the next word. Words ! are composed of alphanumeric characters (letters and digits). ! GNU 1998 Dec 31 7 *************** *** 467,470 **** --- 467,478 ---- + bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) + Move back to the start of this, or the previous, + word. Words are composed of alphanumeric charac- + ters (letters and digits). + cclleeaarr--ssccrreeeenn ((CC--ll)) + Clear the screen leaving the current line at the + top of the screen. With an argument, refresh the + current line without clearing the screen. rreeddrraaww--ccuurrrreenntt--lliinnee Refresh the current line. *************** *** 472,528 **** CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) ! Accept the line regardless of where the cursor is. ! If this line is non-empty, add it to the history ! list. If the line is a modified history line, then restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) ! Fetch the previous command from the history list, moving back in the list. nneexxtt--hhiissttoorryy ((CC--nn)) ! Fetch the next command from the history list, mov- ing forward in the list. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. eenndd--ooff--hhiissttoorryy ((MM-->>)) ! Move to the end of the input history, i.e., the line currently being entered. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) ! Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) ! Search forward starting at the current line and ! moving `down' through the history as necessary. This is an incremental search. nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) Search backward through the history starting at the ! current line using a non-incremental search for a string supplied by the user. nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) ! Search forward through the history using a non- ! incremental search for a string supplied by the user. hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd ! Search forward through the history for the string of characters between the start of the current line ! and the current cursor position (the _p_o_i_n_t). This is a non-incremental search. hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd ! Search backward through the history for the string of characters between the start of the current line and the point. This is a non-incremental search. - yyaannkk--nntthh--aarrgg ((MM--CC--yy)) - Insert the first argument to the previous command - (usually the second word on the previous line) at - point (the current cursor position). With an argu- - ment _n, insert the _nth word from the previous com- - mand (the words in the previous command begin with - word 0). A negative argument inserts the _nth word - from the end of the previous command. ! GNU 1998 Feb 19 8 --- 480,528 ---- CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) ! Accept the line regardless of where the cursor is. ! If this line is non-empty, add it to the history ! list. If the line is a modified history line, then restore the history line to its original state. pprreevviioouuss--hhiissttoorryy ((CC--pp)) ! Fetch the previous command from the history list, moving back in the list. nneexxtt--hhiissttoorryy ((CC--nn)) ! Fetch the next command from the history list, mov- ing forward in the list. bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) Move to the first line in the history. eenndd--ooff--hhiissttoorryy ((MM-->>)) ! Move to the end of the input history, i.e., the line currently being entered. rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) ! Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) ! Search forward starting at the current line and ! moving `down' through the history as necessary. This is an incremental search. nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) Search backward through the history starting at the ! current line using a non-incremental search for a string supplied by the user. nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) ! Search forward through the history using a non- ! incremental search for a string supplied by the user. hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd ! Search forward through the history for the string of characters between the start of the current line ! and the current cursor position (the _p_o_i_n_t). This is a non-incremental search. hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd ! Search backward through the history for the string of characters between the start of the current line and the point. This is a non-incremental search. ! GNU 1998 Dec 31 8 *************** *** 533,542 **** yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) ! Insert the last argument to the previous command ! (the last word of the previous history entry). With an argument, behave exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg move back through ! the history list, inserting the last argument of each line in turn. --- 533,550 ---- + yyaannkk--nntthh--aarrgg ((MM--CC--yy)) + Insert the first argument to the previous command + (usually the second word on the previous line) at + point (the current cursor position). With an argu- + ment _n, insert the _nth word from the previous com- + mand (the words in the previous command begin with + word 0). A negative argument inserts the _nth word + from the end of the previous command. yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) ! Insert the last argument to the previous command ! (the last word of the previous history entry). With an argument, behave exactly like yyaannkk--nntthh--aarrgg. Successive calls to yyaannkk--llaasstt--aarrgg move back through ! the history list, inserting the last argument of each line in turn. *************** *** 544,554 **** ddeelleettee--cchhaarr ((CC--dd)) Delete the character under the cursor. If point is ! at the beginning of the line, there are no charac- ! ters in the line, and the last character typed was not bound to BBddeelleettee--cchhaarr, then return EEOOFF. bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) Delete the character behind the cursor. When given ! a numeric argument, save the deleted text on the kill ring. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) Add the next character that you type to the line --- 552,567 ---- ddeelleettee--cchhaarr ((CC--dd)) Delete the character under the cursor. If point is ! at the beginning of the line, there are no charac- ! ters in the line, and the last character typed was not bound to BBddeelleettee--cchhaarr, then return EEOOFF. bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) Delete the character behind the cursor. When given ! a numeric argument, save the deleted text on the kill ring. + ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr + Delete the character under the cursor, unless the + cursor is at the end of the line, in which case the + character behind the cursor is deleted. By + default, this is not bound to a key. qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) Add the next character that you type to the line *************** *** 573,576 **** --- 586,602 ---- negative argument, uppercase the previous word, but do not move point. + + + + + GNU 1998 Dec 31 9 + + + + + + READLINE(3) READLINE(3) + + ddoowwnnccaassee--wwoorrdd ((MM--ll)) Lowercase the current (or following) word. With a *************** *** 586,602 **** Kill the text from the current cursor position to the end of the line. - - - - - GNU 1998 Feb 19 9 - - - - - - READLINE(3) READLINE(3) - - bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) Kill backward to the beginning of the line. --- 612,615 ---- *************** *** 640,643 **** --- 653,668 ---- works following yyaannkk or yyaannkk--ppoopp. + + + + GNU 1998 Dec 31 10 + + + + + + READLINE(3) READLINE(3) + + NNuummeerriicc AArrgguummeennttss ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) *************** *** 652,669 **** digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the numeric argument, but is otherwise ignored. As a ! special case, if this command is immediately ! ! ! ! GNU 1998 Feb 19 10 ! ! ! ! ! ! READLINE(3) READLINE(3) ! ! ! 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 ini- --- 677,682 ---- digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the numeric argument, but is otherwise ignored. As a ! special case, if this command is immediately fol- ! lowed by a character that is neither a digit or minus sign, the argument count for the next command is multiplied by four. The argument count is ini- *************** *** 706,733 **** TTAABB, but is unbound by default. - KKeeyybbooaarrdd MMaaccrrooss - ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current - keyboard macro. - eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) - Stop saving the characters typed into the current - keyboard macro and store the definition. - ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by mak- - ing the characters in the macro appear as if typed - at the keyboard. - GNU 1998 Feb 19 11 ! READLINE(3) READLINE(3) MMiisscceellllaanneeoouuss --- 719,752 ---- TTAABB, but is unbound by default. + GNU 1998 Dec 31 11 + READLINE(3) READLINE(3) ! ddeelleettee--cchhaarr--oorr--lliisstt ! Deletes the character under the cursor if not at ! the beginning or end of the line (like ddeelleettee-- ! cchhaarr). If at the end of the line, behaves identi- ! cally to ppoossssiibbllee--ccoommpplleettiioonnss. This command is ! unbound by default. + KKeeyybbooaarrdd MMaaccrrooss + ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) + Begin saving the characters typed into the current + keyboard macro. + eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) + Stop saving the characters typed into the current + keyboard macro and store the definition. + ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) + Re-execute the last keyboard macro defined, by mak- + ing the characters in the macro appear as if typed + at the keyboard. MMiisscceellllaanneeoouuss *************** *** 754,758 **** executing the uunnddoo command enough times to return the line to its initial state. ! ttiillddee--eexxppaanndd ((MM--~~)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) --- 773,777 ---- executing the uunnddoo command enough times to return the line to its initial state. ! ttiillddee--eexxppaanndd ((MM--&&)) Perform tilde expansion on the current word. sseett--mmaarrkk ((CC--@@,, MM--<>)) *************** *** 766,769 **** --- 785,800 ---- cchhaarraacctteerr--sseeaarrcchh ((CC--]])) A character is read and point is moved to the next + + + + GNU 1998 Dec 31 12 + + + + + + READLINE(3) READLINE(3) + + occurrence of that character. A negative count searches for previous occurrences. *************** *** 784,801 **** way that it can be made part of an _i_n_p_u_t_r_c file. dduummpp--vvaarriiaabblleess ! Print all of the settable variables and their ! ! ! ! GNU 1998 Feb 19 12 ! ! ! ! ! ! READLINE(3) READLINE(3) ! ! ! 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 _i_n_p_u_t_r_c --- 815,820 ---- way that it can be made part of an _i_n_p_u_t_r_c file. dduummpp--vvaarriiaabblleess ! Print all of the settable variables and their val- ! ues to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an _i_n_p_u_t_r_c *************** *** 831,834 **** --- 850,866 ---- able). + + + + + GNU 1998 Dec 31 13 + + + + + + READLINE(3) READLINE(3) + + EEmmaaccss MMooddee Emacs Standard bindings *************** *** 851,866 **** "C-Q" quoted-insert "C-R" reverse-search-history - - - - GNU 1998 Feb 19 13 - - - - - - READLINE(3) READLINE(3) - - "C-S" forward-search-history "C-T" transpose-chars --- 883,886 ---- *************** *** 897,900 **** --- 917,932 ---- "M-2" digit-argument "M-3" digit-argument + + + + GNU 1998 Dec 31 14 + + + + + + READLINE(3) READLINE(3) + + "M-4" digit-argument "M-5" digit-argument *************** *** 917,932 **** "M-T" transpose-words "M-U" upcase-word - - - - GNU 1998 Feb 19 14 - - - - - - READLINE(3) READLINE(3) - - "M-Y" yank-pop "M-\" delete-horizontal-space --- 949,952 ---- *************** *** 963,966 **** --- 983,998 ---- "C-Y" yank "C-[" vi-movement-mode + + + + GNU 1998 Dec 31 15 + + + + + + READLINE(3) READLINE(3) + + "C-_" undo " " to "~" self-insert *************** *** 983,998 **** "C-S" forward-search-history "C-T" transpose-chars - - - - GNU 1998 Feb 19 15 - - - - - - READLINE(3) READLINE(3) - - "C-U" unix-line-discard "C-V" quoted-insert --- 1015,1018 ---- *************** *** 1029,1032 **** --- 1049,1064 ---- "T" vi-char-search "U" revert-line + + + + GNU 1998 Dec 31 16 + + + + + + READLINE(3) READLINE(3) + + "W" vi-next-word "X" backward-delete-char *************** *** 1049,1064 **** "m" vi-set-mark "n" vi-search-again - - - - GNU 1998 Feb 19 16 - - - - - - READLINE(3) READLINE(3) - - "p" vi-put "r" vi-change-char --- 1081,1084 ---- *************** *** 1095,1098 **** --- 1115,1130 ---- Once you have determined that a bug actually exists, mail + + + + GNU 1998 Dec 31 17 + + + + + + READLINE(3) READLINE(3) + + a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, you are welcome to mail that as well! Suggestions and *************** *** 1118,1122 **** ! GNU 1998 Feb 19 17 --- 1150,1188 ---- ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! GNU 1998 Dec 31 18 diff -aNrc2 readline-2.2.1/doc/readline.3 readline-4.0/doc/readline.3 *** readline-2.2.1/doc/readline.3 Thu Feb 19 10:26:51 1998 --- readline-4.0/doc/readline.3 Thu Dec 31 10:16:52 1998 *************** *** 7,13 **** .\" chet@ins.CWRU.Edu .\" ! .\" Last Change: Thu Feb 19 10:26:47 EST 1998 .\" ! .TH READLINE 3 "1998 Feb 19" GNU .\" .\" File Name macro. This used to be `.PN', for Path Name, --- 7,13 ---- .\" chet@ins.CWRU.Edu .\" ! .\" Last Change: Thu Dec 31 10:16:30 EST 1998 .\" ! .TH READLINE 3 "1998 Dec 31" GNU .\" .\" File Name macro. This used to be `.PN', for Path Name, *************** *** 23,26 **** --- 23,27 ---- .nf .ft B + #include #include #include *************** *** 381,384 **** --- 382,398 ---- becomes longer than the screen width rather than wrapping to a new line. .TP + .B input\-meta (Off) + If set to \fBOn\fP, readline will enable eight-bit input (that is, + it will not strip the high bit from the characters it reads), + regardless of what the terminal claims it can support. The name + .B meta\-flag + is a synonym for this variable. + .TP + .B isearch\-terminators (``C\-[C\-J'') + The string of characters that should terminate an incremental + search without subsequently executing the character as a command. + If this variable has not been given a value, the characters + \fIESC\fP and \fIC\-J\fP will terminate an incremental search. + .TP .B keymap (emacs) Set the current readline keymap. The set of legal keymap names is *************** *** 401,409 **** with a preceding asterisk (\fB*\fP). .TP - .B meta\-flag (Off) - If set to \fBOn\fP, readline will enable eight-bit input (that is, - it will not strip the high bit from the characters it reads), - regardless of what the terminal claims it can support. - .TP .B output\-meta (Off) If set to \fBOn\fP, readline will display characters with the --- 415,418 ---- *************** *** 510,515 **** An incremental search requires only as many characters as needed to find the desired history entry. ! The Escape character is used to terminate an incremental search. ! Control-J will also terminate the search. Control-G will abort an incremental search and restore the original line. --- 519,526 ---- An incremental search requires only as many characters as needed to find the desired history entry. ! The characters present in the value of the \fIisearch-terminators\fP ! variable are used to terminate an incremental search. ! If that variable has not been assigned a value the Escape and ! Control-J characters will terminate an incremental search. Control-G will abort an incremental search and restore the original line. *************** *** 648,651 **** --- 659,667 ---- save the deleted text on the kill ring. .TP + .B forward\-backward\-delete\-char + Delete the character under the cursor, unless the cursor is at the + end of the line, in which case the character behind the cursor is + deleted. By default, this is not bound to a key. + .TP .B quoted\-insert (C\-q, C\-v) Add the next character that you type to the line verbatim. This is *************** *** 799,802 **** --- 815,825 ---- This command is intended to be bound to \fBTAB\fP, but is unbound by default. + .TP + .B delete\-char\-or\-list + Deletes the character under the cursor if not at the beginning or + end of the line (like \fBdelete-char\fP). + If at the end of the line, behaves identically to + \fBpossible-completions\fP. + This command is unbound by default. .PD .SS Keyboard Macros *************** *** 848,852 **** command enough times to return the line to its initial state. .TP ! .B tilde\-expand (M\-~) Perform tilde expansion on the current word. .TP --- 871,875 ---- command enough times to return the line to its initial state. .TP ! .B tilde\-expand (M\-&) Perform tilde expansion on the current word. .TP diff -aNrc2 readline-2.2.1/doc/readline.dvi readline-4.0/doc/readline.dvi *** readline-2.2.1/doc/readline.dvi Thu Apr 2 14:44:20 1998 --- readline-4.0/doc/readline.dvi Thu Dec 31 12:53:15 1998 *************** *** 1,9 **** ! ÷ƒ’À;è TeX output 1998.04.02:1444‹ÿÿÿÿŸòŽ ƒ3Ú þ#¾ã‘GóZÂÖN ¼j cmbx12ëZGNU–ƧReadline“LibraryŽ‘GŸ 0‰±ž¸Ÿ šª’Ï€Úó2Kñ`y ó3 ! cmr10ÝEdition–¦f2.2,“for“ó3ßêÝ,›9and‘8©ž™š¸hŽ‘#uŸù@‰ffÐlŸÀ­T‘ÿJªABŽŽ‘#uŸÙš‰ffÐlŽ‘qSž™š¸iŽŽ‘"BÞÝall–8©stand“for“themselv²!es“when“seen“in“this“text,˜or“in“an“init“ le“(seeŽ¦‘GSection–¦f1.3“[Readline“Init“File],“page“3).ŽŸ6‘GëH1.2‘™Readline‘f@InŒÌteractionŽŽ¤ãð‘!GÝOften–kduring“an“in•²!teractiv“e–ksession“yš²!ou“t˜ypMÞe“in“a“long“line“of“text,‘&jonly“to“notice“that“theŽ¦‘G rst–ãÒwš²!ord“on“the“line“is“misspMÞelled.‘–"The“Readline“library“giv˜es“y˜ou“a“set“of“commands“forŽ¦‘Gmanipulating–“¡the“text“as“yš²!ou“t˜ypMÞe“it“in,‘—ballo˜wing“y˜ou“to“just“ x“y˜our“t˜ypMÞo,‘—band“not“forcingŽ¦‘Gyš²!ou–`ùto“ret˜ypMÞe“the“ma‘›»jorit˜y“of“the“line.‘ƹUsing“these“editing“commands,‘nÛy˜ou“mo˜v˜e“the“cursorŽ¦‘Gto–the“place“that“needs“correction,‘;Zand“delete“or“insert“the“text“of“the“corrections.‘CZThen,Ž¦‘Gwhen–¼yš²!ou“are“satis ed“with“the“line,‘Â+y˜ou“simply“press“ž™š¸hŽ‘§iŸù@‰ff%(¬ŸÀ­RETURNŽŽ‘§iŸÙš‰ff%(¬Ž‘+M‡ž™š¸iŽŽ‘.æiÝ.‘ ƒY‘ÿeou“do“not“ha˜v˜e“to“bMÞe“atŽ¦‘Gthe–óIend“of“the“line“to“press“ž™š¸hŽ‘ÞŸù@‰ff%(¬ŸÀ­RETURNŽŽ‘ÞŸÙš‰ff%(¬Ž‘+„3ž™š¸iŽŽ‘/Ý;‘ºthe“en²!tire“line“is“accepted“regardless“of“the“loMÞcationŽ¦‘Gof–¦fthe“cursor“within“the“line.ŽŸ6‘GóQÂÖN  #× cmbx12ëQ1.2.1‘d(Readline–íMBare“Essen–átialsŽŽ¡‘!GÝIn–Äiorder“to“enš²!ter“c˜haracters“in˜to“the“line,‘ñ›simply“t˜ypMÞe“them.‘’‰The“t˜ypMÞed“c˜haracter“appMÞearsŽ¦‘Gwhere–æNthe“cursor“wš²!as,‘öHand“then“the“cursor“mo˜v˜es“one“space“to“the“righ˜t.‘–If“y˜ou“mist˜ypMÞe“aŽ¦‘Gc•²!haracter,›¦fy“ou˜can˜use˜y“our˜erase˜c“haracter˜to˜bac“k˜up˜and˜delete˜the˜mist“ypMÞed˜c“haracter.Ž¤ãð‘!GSometimes–s9yš²!ou“ma˜y“miss“t˜yping“a“c˜haracter“that“y˜ou“w˜an˜ted“to“t˜ypMÞe,‘¦mand“not“noticeŽ¦‘Gyš²!our–e¿error“un˜til“y˜ou“ha˜v˜e“t˜ypMÞed“sev˜eral“other“c˜haracters.‘ÈPIn“that“case,‘r­y˜ou“can“t˜ypMÞe“ž™š¸hŽ‘P‹Ÿù@‰ff ±ÔŸÀ­C-bŽŽ‘P‹ŸÙš‰ff ±ÔŽ‘Ñž™š¸iŽŽ‘~rÝtoŽ¦‘Gmo•²!v“e–Ô9the“cursor“to“the“left,‘ß®and“then“correct“yš²!our“mistak˜e.‘gVAfterw˜ards,‘ß®y˜ou“can“mo˜v˜e“theŽ¦‘Gcursor–¦fto“the“righ²!t“with“ž™š¸hŽ‘‘2Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘‘2ŸÙš‰ff ‘ÒŽ‘ vž™š¸iŽŽ‘9XÝ.Ž¡‘!GWhen–é"yš²!ou“add“text“in“the“middle“of“a“line,‘ùÑy˜ou“will“notice“that“c˜haracters“to“the“righ˜tŽ¦‘Gof–q”the“cursor“are“`pushed“o•²!v“er'–q”to“makš²!e“roMÞom“for“the“text“that“y˜ou“ha˜v˜e“inserted.‘ÌBLik˜ewise,Ž¦‘Gwhen–‚ùyš²!ou“delete“text“bMÞehind“the“cursor,‘ºc˜haracters“to“the“righ˜t“of“the“cursor“are“`pulledŽ¦‘Gbacš²!k'–ÑÇto“ ll“in“the“blank“space“created“b˜y“the“remo˜v‘ÿdDal“of“the“text.‘`A‘Ѽlist“of“the“basic“bareŽ¦‘Gessenš²!tials–¦ffor“editing“the“text“of“an“input“line“follo˜ws.ŽŸ”­‘Gž™š¸hŽ‘üŸù@‰ff ±ÔŸÀ­C-bŽŽ‘üŸÙš‰ff ±ÔŽ‘"+Yž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fbac“k˜one˜c“haracter.ŽŽŸŒ‹JŸò‘GÝ2’>‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGž™š¸hŽ‘üŸù@‰ff ‘ÒŸÀ­C-fŽŽ‘üŸÙš‰ff ‘ÒŽ‘ Wž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fforw“ard˜one˜c“haracter.Ž¤z‘Gž™š¸hŽ‘üŸù@‰ff“úŸÀ­DELŽŽ‘üŸÙš‰ff“úŽ‘& ž™š¸iŽŽŽŽ‘Kâ:ÝDelete–¦fthe“c²!haracter“to“the“left“of“the“cursor.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff ±ÔŸÀ­C-dŽŽ‘üŸÙš‰ff ±ÔŽ‘"+Yž™š¸iŽŽŽŽ‘Kâ:ÝDelete–¦fthe“c²!haracter“underneath“the“cursor.Ž¡‘GPrin•²!ting‘¦fc“haractersŽŽ© 33‘Kâ:Insert–¦fthe“cš²!haracter“in˜to“the“line“at“the“cursor.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff JŸÀ­C-‘‚Ž‰X.ŒÐŽŽŽ‘üŸÙš‰ff JŽ‘ Ïž™š¸iŽŽŽŽ‘Kâ:ÝUndo–jthe“last“editing“command.‘÷éY‘ÿeou“can“undo“all“the“w•²!a“y›jbac“k˜to˜an˜empt“yŽ¦‘Kâ:line.ŽŸêL‘GëQ1.2.2‘d(Readline›íMMo•–áv“emen“t˜CommandsŽŽŸÖ¢‘!GÝThe›Ú abMÞo•²!v“e˜table˜describ•MÞes˜the˜most˜basic˜p“ossible˜k•²!eystrok“es˜that˜y“ou˜need˜in˜order˜toŽ¦‘Gdo–bÍediting“of“the“input“line.‘ÇUF‘ÿeor“yš²!our“con˜v˜enience,‘pRman˜y“other“commands“ha˜v˜e“bMÞeen“addedŽ¦‘Gin–Þaddition“to“ž™š¸hŽ‘ªŸù@‰ff ±ÔŸÀ­C-bŽŽ‘ªŸÙš‰ff ±ÔŽ‘1𞙚¸iŽŽ‘ÊÒÝ,‘4`ž™š¸hŽ‘,Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘,ŸÙš‰ff ‘ÒŽ‘.pž™š¸iŽŽ‘ÇRÝ,‘4`ž™š¸hŽ‘,Ÿù@‰ff ±ÔŸÀ­C-dŽŽ‘,ŸÙš‰ff ±ÔŽ‘Nrž™š¸iŽŽ‘çTÝ,‘4`and“ž™š¸hŽ‘ªŸù@‰ff“úŸÀ­DELŽŽ‘ªŸÙš‰ff“úŽ‘ž™š¸iŽŽ‘¬øÝ.‘®[Here“are“some“commands“for“mo²!ving“more“rapidlyŽ¦‘GabMÞout–¦fthe“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff 8ðŸÀ­C-aŽŽ‘üŸÙš‰ff 8ðŽ‘!²už™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e–¦fto“the“start“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff À ŸÀ­C-eŽŽ‘üŸÙš‰ff À Ž‘!9‘ž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff 6ΟÀ­M-fŽŽ‘üŸÙš‰ff 6ÎŽ‘!°Sž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fforw“ard˜a˜w“ord,˜where˜a˜w“ord˜is˜compMÞosed˜of˜letters˜and˜digits.Ž¡‘Gž™š¸hŽ‘üŸù@‰ffVПÀ­M-bŽŽ‘üŸÙš‰ffVÐŽ‘#ÐUž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fbac“kw“ard˜a˜w“ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff U`ŸÀ­C-lŽŽ‘üŸÙš‰ff U`Ž‘Îåž™š¸iŽŽŽŽ‘Kâ:ÝClear–¦fthe“screen,“reprinš²!ting“the“curren˜t“line“at“the“top.Ž¡‘!GNotice–Íahoš²!w“ž™š¸hŽ‘¸-Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘¸-ŸÙš‰ff ‘ÒŽ‘Çqž™š¸iŽŽ‘-´Ýmo˜v˜es“forw˜ard“a“c˜haracter,‘øÉwhile“ž™š¸hŽ‘¸-Ÿù@‰ff 6ΟÀ­M-fŽŽ‘¸-ŸÙš‰ff 6ÎŽ‘lmž™š¸iŽŽ‘Ò°Ýmo˜v˜es“forw˜ard“a“w˜ord.‘•†It“is“a“loMÞoseŽ¦‘Gcon•²!v“en“tion–—†that“conš²!trol“k˜eystrok˜es“opMÞerate“on“c˜haracters“while“meta“k˜eystrok˜es“opMÞerate“onŽ¦‘Gw²!ords.ŽŸêL‘GëQ1.2.3‘d(Readline–íMKilling“CommandsŽŽŸÖ¢‘!GáKilling‘lÝtext–{émeans“to“delete“the“text“from“the“line,‘±Jbut“to“sa•²!v“e–{éit“a•²!w“a“y–{éfor“later“use,Ž¦‘Gusually–fµbš²!y“áy˜anking‘VÍÝ(re-inserting)“it“bac˜k“in˜to“the“line.‘ÉIf“the“description“for“a“commandŽ¦‘Gsaš²!ys–ñ¡that“it“`kills'“text,‘pthen“y˜ou“can“bMÞe“sure“that“y˜ou“can“get“the“text“bac˜k“in“a“di eren˜tŽ¦‘G(or–¦fthe“same)“place“later.Ž¤Ö¢‘!GWhen–Ê›yš²!ou“use“a“kill“command,‘ö‘the“text“is“sa˜v˜ed“in“a“ákill-ringÝ.‘”šAn˜y“n˜um˜bMÞer“of“consecutiv˜eŽ¦‘Gkills›¸$sa•²!v“e˜all˜of˜the˜killed˜text˜together,‘¼“so˜that˜when˜y“ou˜y“ank˜it˜bac“k,‘¼“y“ou˜get˜it˜all.‘TheŽ¦‘Gkill–âèring“is“not“line“spMÞeci c;‘(the“text“that“yš²!ou“killed“on“a“previously“t˜ypMÞed“line“is“a˜v‘ÿdDailableŽ¦‘Gto–¦fbMÞe“y•²!ank“ed›¦fbac“k˜later,˜when˜y“ou˜are˜t“yping˜another˜line.Ž¡‘!GHere–¦fis“the“list“of“commands“for“killing“text.Ž¤z‘Gž™š¸hŽ‘üŸù@‰ff ubŸÀ­C-kŽŽ‘üŸÙš‰ff ubŽ‘!îçž™š¸iŽŽŽŽ‘Kâ:ÝKill–¦fthe“text“from“the“curren²!t“cursor“pMÞosition“to“the“end“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ffVПÀ­M-dŽŽ‘üŸÙš‰ffVÐŽ‘#ÐUž™š¸iŽŽŽŽ‘Kâ:ÝKill–]from“the“cursor“to“the“end“of“the“currenš²!t“w˜ord,‘kÆor“if“bMÞet˜w˜een“w˜ords,‘kÆto“theŽ¦‘Kâ:end–¦fof“the“next“w²!ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff1âŸÀ­M-DELŽŽ‘üŸÙš‰ff1⎑0«gž™š¸iŽŽŽŽ‘Kâ:ÝKill–€¡from“the“cursor“the“start“of“the“previous“wš²!ord,‘ˆ/or“if“bMÞet˜w˜een“w˜ords,‘ˆ/to“theŽ¦‘Kâ:start–¦fof“the“previous“w²!ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff€ŸÀ­C-wŽŽ‘üŸÙš‰ff€Ž‘#–ž™š¸iŽŽŽŽ‘Kâ:ÝKill–Ð’from“the“cursor“to“the“previous“whitespace.‘\aThis“is“di eren²!t“than“ž™š¸hŽ‘»^Ÿù@‰ff1âŸÀ­M-DELŽŽ‘»^ŸÙš‰ff1⎑"j²ž™š¸iŽŽŽ¦‘Kâ:ÝbšMÞecause–¦fthe“w²!ord“b˜oundaries“di er.ŽŽŸŒ‹”Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH3ŽŽŽ ƒ3Ú ý¨ðБ!GHere–ýáis“hoš²!w“to“áy˜ank‘§åÝthe“text“bac˜k“in˜to“the“line.‘äNY‘ÿeanking“means“to“cop˜y“the“most-Ž¤ 33‘Grecen²!tly-killed–¦ftext“from“the“kill“bu er.ŽŸ =‘Gž™š¸hŽ‘üŸù@‰ff ubŸÀ­C-yŽŽ‘üŸÙš‰ff ubŽ‘!îçž™š¸iŽŽŽŽ‘Kâ:ÝY‘ÿeank–¦fthe“most“recenš²!tly“killed“text“bac˜k“in˜to“the“bu er“at“the“cursor.ŽŸ&‘Gž™š¸hŽ‘üŸù@‰ff^ŸÀ­M-yŽŽ‘üŸÙš‰ff^Ž‘#“ãž™š¸iŽŽŽŽ‘Kâ:ÝRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can“only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“ž™š¸hŽ‘‘2Ÿù@‰ff ubŸÀ­C-yŽŽ‘‘2ŸÙš‰ff ubŽ‘„ž™š¸iŽŽ‘ÃNÝor“ž™š¸hŽ‘‘2Ÿù@‰ff^ŸÀ­M-yŽŽ‘‘2ŸÙš‰ff^Ž‘)ž™š¸iŽŽ‘ÁäÝ.Ž©湑GëQ1.2.4‘d(Readline‘íMArgumen–átsŽŽŸ&‘!GÝY‘ÿeou–‚Ücan“pass“nš²!umeric“argumen˜ts“to“Readline“commands.‘ÒSometimes“the“argumen˜t“actsŽ¡‘Gas–ÞDa“repMÞeat“counš²!t,‘,;other“times“it“is“the“ásign“Ýof“the“argumen˜t“that“is“signi can˜t.‘…wIf“y˜ouŽ¡‘Gpass–a“negativš²!e“argumen˜t“to“a“command“whic˜h“normally“acts“in“a“forw˜ard“direction,‘ìthatŽ¡‘Gcommand–=Üwill“act“in“a“bac•²!kw“ard–=Üdirection.‘¤?F‘ÿeor“example,‘c¹to“kill“text“bac²!k“to“the“start“ofŽ¡‘Gthe–¦fline,“yš²!ou“migh˜t“t˜ypMÞe“`ÞM--“C-kÝ'.ŽŸ&‘!GThe–bOgeneral“w•²!a“y–bOto“pass“nš²!umeric“argumen˜ts“to“a“command“is“to“t˜ypšMÞe“meta“digits“b˜eforeŽ¡‘Gthe–Ü_command.‘ÈIf“the“ rst“`digit'“tš²!ypMÞed“is“a“min˜us“sign“(ž™š¸hŽ‘êÌŸù@‰ffÕXŸÀ­-ŽŽ‘êÌŸÙš‰ffÕXŽ‘=–ž™š¸iŽŽ‘ÖxÝ),‘éÝthen“the“sign“of“the“argumen˜tŽ¡‘Gwill–dˆbMÞe“negativš²!e.‘ÇèOnce“y˜ou“ha˜v˜e“t˜ypMÞed“one“meta“digit“to“get“the“argumen˜t“started,‘q´y˜ou“canŽ¡‘Gt²!ypMÞe–±the“remainder“of“the“digits,›¶and“then“the“command.‘i½F‘ÿeor“example,˜to“giv²!e“the“ž™š¸hŽ‘j}Ÿù@‰ff ±ÔŸÀ­C-dŽŽ‘j}ŸÙš‰ff ±ÔŽ‘™Ãž™š¸iŽŽŽ¡‘GÝcommand–¦fan“argumenš²!t“of“10,“y˜ou“could“t˜ypMÞe“`ÞM-1“0“C-dÝ'.Ž¦‘GëQ1.2.5‘d(Searc–áhing–íMfor“Commands“in“the“HistoryŽŽŸ&‘!GÝReadline–àTproš²!vides“commands“for“searc˜hing“through“the“command“history“for“lines“con-Ž¡‘Gtaining–¦fa“spMÞeci ed“string.‘ÝÝThere“are“t•²!w“o›¦fsearc“h˜moMÞdes:‘ÝÝáincremen“tal‘¸Ýand˜ánon-incremen“talÝ.Ž©&‘!GIncremen•²!tal›¸searc“hes˜b•MÞegin˜b“efore˜the˜user˜has˜ nished˜t•²!yping˜the˜searc“h˜string.‘­£As˜eac“hŽ¡‘Gcš²!haracter–@|of“the“searc˜h“string“is“t˜ypMÞed,‘gReadline“displa˜ys“the“next“en˜try“from“the“historyŽ¡‘Gmatcš²!hing–Ýkthe“string“t˜ypMÞed“so“far.‘‚ìAn“incremen˜tal“searc˜h“requires“only“as“man˜y“c˜haractersŽ¡‘Gas–—needed“to“ nd“the“desired“history“enš²!try‘ÿe.‘¯æThe“ž™š¸hŽ‘àŸù@‰ff¤TŸÀ­ESCŽŽ‘àŸÙš‰ff¤TŽ‘£¦ž™š¸iŽŽ‘ÓœÝc˜haracter“is“used“to“terminate“anŽ¡‘Gincremen•²!tal›½ˆsearc“h.‘>ž™š¸hŽ‘{ ! Ÿù@‰ff ‘ÒŸÀ­C-jŽŽ‘{ ! ŸÙš‰ff ‘ÒŽ‘ŠNž™š¸iŽŽ‘à¸Ýwill˜also˜terminate˜the˜searc“h.‘>ž™š¸hŽ‘{ ! Ÿù@‰ff 8ðŸÀ­C-gŽŽ‘{ ! ŸÙš‰ff 8ðŽ‘1lž™š¸iŽŽ‘‡ÖÝwill˜abMÞort˜an˜incremen“tal˜searc“hŽ¡‘Gand–ø™restore“the“original“line.‘ÔvWhen“the“searcš²!h“is“terminated,‘ &the“history“en˜try“con˜tainingŽ¡‘Gthe–P=searcš²!h“string“bMÞecomes“the“curren˜t“line.‘ÛcT‘ÿeo“ nd“other“matc˜hing“en˜tries“in“the“historyŽ¡‘Glist,‘)êtš²!ypMÞe‘ž™š¸hŽ‘úiŸù@‰ff S?ŸÀ­C-sŽŽ‘úiŸÙš‰ff S?Ž‘Ëž™š¸iŽŽ‘s™Ýor‘ž™š¸hŽ‘úiŸù@‰ff HïŸÀ­C-rŽŽ‘úiŸÙš‰ff HÀÊž™š¸iŽŽ‘iIÝas–appropriate.‘This“will“searc˜h“bac˜kw˜ard“or“forw˜ard“in“the“historyŽ¡‘Gfor–¹¡the“next“enš²!try“matc˜hing“the“searc˜h“string“t˜ypMÞed“so“far.‘An˜y“other“k˜ey“sequence“bMÞoundŽ¡‘Gto–Üa“Readline“command“will“terminate“the“searc²!h“and“execute“that“command.‘¯ZF‘ÿeor“instance,Ž¡‘Ga‘e•ž™š¸hŽ‘PaŸù@‰ff,(ŸÀ­RETŽŽ‘PaŸÙš‰ff,(Ž‘ùûž™š¸iŽŽ‘ørÝwill–e•terminate“the“searcš²!h“and“accept“the“line,‘rŒthereb˜y“executing“the“command“fromŽ¡‘Gthe–¦fhistory“list.Ž¦‘!GNon-incremen•²!tal›–searc“hes˜read˜the˜en“tire˜searc“h˜string˜bMÞefore˜starting˜to˜searc“h˜forŽ¡‘Gmatcš²!hing–Àhistory“lines.‘ FêThe“searc˜h“string“ma˜y“bMÞe“t˜ypMÞed“b˜y“the“user“or“bMÞe“part“of“theŽ¡‘Gcon•²!ten“ts–¦fof“the“curren²!t“line.ŽŸ!`g‘GëH1.3‘™Readline–f@Init“FileŽŽŸ&‘!GÝAlthough–7the“Readline“library“comes“with“a“set“of“ÞemacsÝ-likš²!e“k˜eybindings“installed“b˜yŽ¡‘Gdefault,‘it–øKis“pMÞossible“to“use“a“di erenš²!t“set“of“k˜eybindings.‘£ÔAn˜y“user“can“customize“programsŽ¡‘Gthat–Zmuse“Readline“b²!y“putting“commands“in“an“áinputrc‘qÝ le“in“his“home“directory‘ÿe.‘ÄŠThe“nameŽŽŸŒ‹,ßò‘GÝ4’>‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGof–½Tthis“ le“is“takš²!en“from“the“v‘ÿdDalue“of“the“en˜vironmen˜t“v›ÿdDariable“ÞINPUTRCÝ.‘"¦If“that“v˜ariable“isŽ¤ 33‘Gunset,–¦fthe“default“is“`Þ~/.inputrcÝ'.Ž©@´‘!GWhen–Ž\a“program“whic²!h“uses“the“Readline“library“starts“up,›“*the“init“ le“is“read,˜and“theŽ¡‘Gk²!ey–¦fbindings“are“set.Ž¦‘!GIn–8âaddition,›NÉthe“ÞC-x‘¦fC-r“Ýcommand“re-reads“this“init“ le,˜thš²!us“incorpMÞorating“an˜y“c˜hangesŽ¡‘Gthat–¦fyš²!ou“migh˜t“ha˜v˜e“made“to“it.ŽŸ‘GëQ1.3.1‘d(Readline–íMInit“File“Syn–átaxŽŽŸ@´‘!GÝThere– are“only“a“few“basic“constructs“allo•²!w“ed– in“the“Readline“init“ le.‘ RBlank“lines“areŽ¡‘Gignored.›­zLines–ëšbMÞeginning“with“a“`Þ#Ý'“are“commen²!ts.˜Lines“bMÞeginning“with“a“`Þ$Ý'“indicateŽ¡‘Gconditional–R¡constructs“(see“Section“1.3.2“[Conditional“Init“Constructs],‘cbpage“7).‘ÁñOther“linesŽ¡‘Gdenote–¦fv‘ÿdDariable“settings“and“k²!ey“bindings.ŽŸÇu‘GV‘ÿeariable‘¦fSettingsŽ¡‘Kâ:Y‘ÿeou–Ú½can“mošMÞdify“the“run-time“b˜ehaš²!vior“of“Readline“b˜y“altering“the“v‘ÿdDalues“ofŽ¡‘Kâ:v‘ÿdDariables–âÞin“Readline“using“the“Þset“Ýcommand“within“the“init“ le.‘œ°Here“is“ho²!w“toŽ¡‘Kâ:cš²!hange–rLfrom“the“default“Emacs-lik˜e“k˜ey“binding“to“use“Þvi“Ýline“editing“commands:ŽŸÁ‘hÊÞset–¿ªediting-mode“viŽŸ¹ô‘Kâ:ÝA–¦fgreat“deal“of“run-time“bMÞehaš²!vior“is“c˜hangeable“with“the“follo˜wing“v‘ÿdDariables.Ž©@µ‘Kâ:Þbell-styleŽ¡’…³-ÝConš²!trols–Fwhat“happMÞens“when“Readline“w˜an˜ts“to“ring“the“termi-Ž¡’…³-nal–xzbšMÞell.‘TIf“set“to“`ÞnoneÝ',‘¬þReadline“nev²!er“rings“the“b˜ell.‘TIf“set“toŽ¡’…³-`ÞvisibleÝ',‘ ! dReadline–öeuses“a“visible“bMÞell“if“one“is“a²!v‘ÿdDailable.‘ÍÙIf“set“toŽ¡’…³-`ÞaudibleÝ'–Ù(the“default),‘¶6Readline“attempts“to“ring“the“terminal'sŽ¡’…³-bMÞell.Ž¦‘Kâ:Þcomment-beginŽ¡’…³-ÝThe–‚÷string“to“insert“at“the“bMÞeginning“of“the“line“when“the“Þinsert-Ž¡’…³-comment–¦fÝcommand“is“executed.‘ÝÝThe“default“v‘ÿdDalue“is“Þ"#"Ý.Ž¦‘Kâ:Þcompletion-ignore-caseŽ¡’…³-ÝIf–IÓset“to“`ÞonÝ',‘\WReadline“pMÞerforms“ lename“matc²!hing“and“completionŽ¡’…³-in–¦fa“case-insensitiv²!e“fashion.‘ÝÝThe“default“v‘ÿdDalue“is“`ÞoffÝ'.Ž¦‘Kâ:Þcompletion-query-itemsŽ¡’…³-ÝThe›%Ðn•²!um“b•MÞer˜of˜p“ossible˜completions˜that˜determines˜when˜the˜userŽ¡’…³-is–çaskš²!ed“whether“he“w˜an˜ts“to“see“the“list“of“pMÞossibilities.‘ `If“theŽ¡’…³-n•²!um“bšMÞer–9of“p˜ossible“completions“is“greater“than“this“v‘ÿdDalue,‘NãReadlineŽ¡’…³-will–.ƒask“the“user“whether“or“not“he“wishes“to“view“them;‘Vzotherwise,Ž¡’…³-they–¦fare“simply“listed.‘ÝÝThe“default“limit“is“Þ100Ý.Ž¦‘Kâ:Þconvert-metaŽ¡’…³-ÝIf–¦set“to“`ÞonÝ',‘ÙÅReadline“will“con•²!v“ert›¦c“haracters˜with˜the˜eigh“th˜bit˜setŽ¡’…³-to–IÚŸò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH5ŽŽŽ ƒ3Ú ý¨ðБKâ:Þdisable-completionŽ¤ 33’…³-ÝIf–gset“to“`ÞOnÝ',‘—@Readline“will“inhibit“w²!ord“completion.‘èCompletionŽ¡’…³-cš²!haracters–!Ÿwill“bMÞe“inserted“in˜to“the“line“as“if“they“had“bšMÞeen“mapp˜edŽ¡’…³-to–¦fÞself-insertÝ.‘ÝÝThe“default“is“`ÞoffÝ'.Ž©»‘Kâ:Þediting-modeŽ¡’…³-ÝThe–rÖÞediting-mode“Ýv‘ÿdDariable“conš²!trols“whic˜h“default“set“of“k˜ey“bind-Ž¡’…³-ings–?is“used.‘§%By“default,‘#Readline“starts“up“in“Emacs“editing“moMÞde,Ž¡’…³-where–~«the“k•²!eystrok“es–~«are“most“similar“to“Emacs.‘ПThis“v‘ÿdDariable“canŽ¡’…³-bMÞe–¦fset“to“either“`ÞemacsÝ'“or“`ÞviÝ'.Ž¦‘Kâ:Þenable-keypadŽ¡’…³-ÝWhen–Ìïset“to“`ÞonÝ',‘ømReadline“will“try“to“enable“the“application“k²!eypadŽ¡’…³-when–1Ûit“is“called.‘·Some“systems“need“this“to“enable“the“arroš²!w“k˜eys.Ž¡’…³-The–¦fdefault“is“`ÞoffÝ'.Ž¦‘Kâ:Þexpand-tildeŽ¡’…³-ÝIf–Pset“to“`ÞonÝ',‘a[tilde“expansion“is“pMÞerformed“when“Readline“attemptsŽ¡’…³-w²!ord–¦fcompletion.‘ÝÝThe“default“is“`ÞoffÝ'.Ž¦‘Kâ:Þhorizontal-scroll-modeŽ¡’…³-ÝThis–NËv‘ÿdDariable“can“bMÞe“set“to“either“`ÞonÝ'“or“`ÞoffÝ'.‘× Setting“it“to“`ÞonÝ'Ž¡’…³-means–$jthat“the“text“of“the“lines“bMÞeing“edited“will“scroll“horizon²!tallyŽ¡’…³-on–ÎÁa“single“screen“line“when“they“are“longer“than“the“width“of“theŽ¡’…³-screen,›:Åinstead–Ýof“wrapping“on²!to“a“new“screen“line.‘±By“default,˜thisŽ¡’…³-v‘ÿdDariable–¦fis“set“to“`ÞoffÝ'.Ž¦‘Kâ:ÞkeymapŽŽ’‰ïéÝSets–<¼Readline's“idea“of“the“currenš²!t“k˜eymap“for“k˜ey“binding“com-Ž¡’…³-mands.‘ ä™Acceptable–SOÞkeymap“Ýnames“are“ÞemacsÝ,‘¾‰Þemacs-standardÝ,Ž¡’…³-Þemacs-metaÝ,– ‡Þemacs-ctlxÝ,“ÞviÝ,“Þvi-commandÝ,“and–Þvi-insertÝ.‘ùÞvi“ÝisŽ¡’…³-equiv›ÿdDalen²!t–>to“Þvi-commandÝ;‘BLÞemacs“Ýis“equiv˜alen²!t“to“Þemacs-standardÝ.Ž¡’…³-The–¢rdefault“v›ÿdDalue“is“ÞemacsÝ.‘‡7The“v˜alue“of“the“Þediting-mode“Ýv˜ariableŽ¡’…³-also–¦fa ects“the“default“k²!eymap.Ž¦‘Kâ:Þmark-directoriesŽ¡’…³-ÝIf––¿set“to“`ÞonÝ',‘ÒÕcompleted“directory“names“ha•²!v“e––¿a“slash“appMÞended.Ž¡’…³-The–¦fdefault“is“`ÞonÝ'.Ž¦‘Kâ:Þmark-modified-linesŽ¡’…³-ÝThis–N”v‘ÿdDariable,›xŸwhen“set“to“`ÞonÝ',˜causes“Readline“to“displa²!y“an“as-Ž¡’…³-terisk– š(`Þ*Ý')“at“the“start“of“history“lines“whicš²!h“ha˜v˜e“bšMÞeen“mo˜di ed.Ž¡’…³-This–¦fv‘ÿdDariable“is“`ÞoffÝ'“b²!y“default.Ž¦‘Kâ:Þinput-metaŽ¡’…³-ÝIf–Ê=set“to“`ÞonÝ',‘Ó2Readline“will“enable“eigh²!t-bit“input“(it“will“not“stripŽ¡’…³-the–˜@eighš²!th“bit“from“the“c˜haracters“it“reads),‘›regardless“of“what“theŽ¡’…³-terminal–ÌÖclaims“it“can“suppMÞort.›Q-The“default“v‘ÿdDalue“is“`ÞoffÝ'.˜TheŽ¡’…³-name–¦fÞmeta-flag“Ýis“a“synon²!ym“for“this“v‘ÿdDariable.ŽŽŸŒ‹KŸò‘GÝ6’>‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБKâ:Þoutput-metaŽ¤ 33’…³-ÝIf–Aset“to“`ÞonÝ',‘gªReadline“will“displaš²!y“c˜haracters“with“the“eigh˜th“bitŽ¡’…³-set–`!directly“rather“than“as“a“meta-pre xed“escapMÞe“sequence.‘ TheŽ¡’…³-default–¦fis“`ÞoffÝ'.Ž©õ‘Kâ:Þprint-completions-horizontallyŽ¡’…³-ÝIf–àset“to“`ÞonÝ',‘»Readline“will“displaš²!y“completions“with“matc˜hes“sortedŽ¡’…³-horizonš²!tally–8Ôin“alphabMÞetical“order,‘orather“than“do˜wn“the“screen.Ž¡’…³-The–¦fdefault“is“`ÞoffÝ'.Ž¦‘Kâ:Þshow-all-if-ambiguousŽ¡’…³-ÝThis–™]alters“the“default“bMÞeha²!vior“of“the“completion“functions.‘Ù…If“setŽ¡’…³-to–L`ÞonÝ',‘^.wš²!ords“whic˜h“ha˜v˜e“more“than“one“pMÞossible“completion“causeŽ¡’…³-the–­matc²!hes“to“bšMÞe“listed“immediately“instead“of“ringing“the“b˜ell.Ž¡’…³-The–¦fdefault“v‘ÿdDalue“is“`ÞoffÝ'.Ž¦‘Kâ:Þvisible-statsŽ¡’…³-ÝIf–Ôvset“to“`ÞonÝ',‘ßúa“cš²!haracter“denoting“a“ le's“t˜ypšMÞe“is“app˜ended“to“theŽ¡’…³- lename–¦fwhen“listing“pMÞossible“completions.‘ÝÝThe“default“is“`ÞoffÝ'.Ž¦‘GKey‘¦fBindingsŽ¡‘Kâ:The–Rþsynš²!tax“for“con˜trolling“k˜ey“bindings“in“the“init“ le“is“simple.‘ÂFirst“y˜ou“ha˜v˜eŽ¡‘Kâ:to–knoš²!w“the“name“of“the“command“that“y˜ou“w˜an˜t“to“c˜hange.‘ÁâThe“follo˜wingŽ¡‘Kâ:sections–Oconš²!tain“tables“of“the“command“name,‘yLthe“default“k˜eybinding,‘yLif“an˜y‘ÿe,Ž¡‘Kâ:and–¦fa“short“description“of“what“the“command“doMÞes.ŽŸ&‘Kâ:Once–0¿yš²!ou“kno˜w“the“name“of“the“command,‘STsimply“place“the“name“of“the“k˜eyŽ¡‘Kâ:y²!ou–=nwish“to“bind“the“command“to,›Rla“colon,˜and“then“the“name“of“the“commandŽ¡‘Kâ:on–¥Fa“line“in“the“init“ le.‘Ú~The“name“of“the“kš²!ey“can“bMÞe“expressed“in“di eren˜tŽ¡‘Kâ:w•²!a“ys,–¦fdepMÞending“on“whicš²!h“is“most“comfortable“for“y˜ou.Ž¦‘Kâ:ák²!eyname‘Ý:‘ÝÝáfunction-name‘CmÝor‘¦fámacroŽŽ¡’…³-kš²!eyname‘jÝis–tcthe“name“of“a“k˜ey“spMÞelled“out“in“English.‘Í1F‘ÿeor“example:ŽŸ`ó’¢›‚ÞControl-u:‘¿ªuniversal-argumentŽ¤ €’¢›‚Meta-Rubout:‘¿ªbackward-kill-wordŽ¡’¢›‚Control-o:–¿ª">“output"ŽŸ&’…³-ÝIn–gïthe“abšMÞo•²!v“e–gïexample,‘˜Qž™š¸hŽ‘ƒŸù@‰ff ±ÔŸÀ­C-uŽŽ‘ƒŸÙš‰ff ±ÔŽ‘²cž™š¸iŽŽ‘³4Ýis“b˜ound“to“the“function“Þuniversal-Ž¤ 33’…³-argumentÝ,‘ðGand‘®Mž™š¸hŽ‘™Ÿù@‰ff 8ðŸÀ­C-oŽŽ‘™ŸÙš‰ff 8ðŽ‘O{ž™š¸iŽŽ‘–ªÝis–®MbMÞound“to“run“the“macro“expressed“on“theŽ¡’…³-righš²!t–E§hand“side“(that“is,‘Yto“insert“the“text“`Þ>‘¦foutputÝ'“in˜to“the“line).Ž¦‘Kâ:Þ"ák²!eyseq@æÞ"Ý:‘ÝÝáfunction-name‘CmÝor‘¦fámacroŽŽ¡’…³-kš²!eyseq‘ú«Ýdi ers–¹Åfrom“ák˜eyname‘VÌÝabMÞo˜v˜e“in“that“strings“denoting“an“en-Ž¡’…³-tire– hk²!ey“sequence“can“bšMÞe“sp˜eci ed,‘%èbš²!y“placing“the“k˜ey“sequence“inŽ¡’…³-double– quotes.‘­ðSome“GNU‘{Emacs“stš²!yle“k˜ey“escapšMÞes“can“b˜e“used,‘3aasŽ¡’…³-in–Ãthe“folloš²!wing“example,‘(Ùbut“the“spMÞecial“c˜haracter“names“are“notŽ¡’…³-recognized.ŽŸ`ó’¢›‚Þ"\C-u":‘¿ªuniversal-argumentŽ¤ €’¢›‚"\C-x\C-r":‘¿ªre-read-init-fileŽ¡’¢›‚"\e[11~":–¿ª"Function“Key“1"ŽŽŸŒ‹UåŸò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH7ŽŽŽ ƒ3Ú ý¨ðÐ’…³-In–gïthe“abšMÞo•²!v“e–gïexample,‘˜Qž™š¸hŽ‘ƒŸù@‰ff ±ÔŸÀ­C-uŽŽ‘ƒŸÙš‰ff ±ÔŽ‘²cž™š¸iŽŽ‘³4Ýis“b˜ound“to“the“function“Þuniversal-Ž¤ 33’…³-argument–ŠÌÝ(just“as“it“w²!as“in“the“ rst“example),‘Ä`ž™š¸hŽ‘êÌŸù@‰ff ubŸÀ­C-xŽŽ‘êÌŸÙš‰ff ubŽ‘Ý ž™š¸iŽŽ‘èž™šhŽ‘´Ÿù@‰ff HïŸÀ­C-rŽŽ‘´ŸÙš‰ff H%Ξ™š¸iŽŽ‘)f÷Ý'“is“bMÞound“toŽ¡’…³-the–ð!function“Þre-read-init-fileÝ,‘and“`ž™š¸hŽ‘êÌŸù@‰ff¤TŸÀ­ESCŽŽ‘êÌŸÙš‰ff¤TŽ‘ ’ž™š¸iŽŽ‘KÚž™šhŽ‘6¦Ÿù@‰ff\tŸÀ­[ŽŽ‘6¦Ÿ‰ff\tŽ‘Œž™š¸iŽŽ‘&OÔž™šhŽ‘): Ÿù@‰ff@ŸÀ­1ŽŽ‘): ŸÙš‰ff@Ž‘,øž™š¸iŽŽ‘47^ž™šhŽ‘7"*Ÿù@‰ff@ŸÀ­1ŽŽ‘7"*ŸÙš‰ff@Ž‘:ß ž™š¸iŽŽ‘Bèž™šhŽ‘E ´Ÿù@‰ff¿ªŸÀÞ~ŽŽ‘E ´ŸÙš‰ff¿ªŽ‘JFО™š¸iŽŽ‘Mß²Ý'“is“bMÞoundŽ¡’…³-to–¦finsert“the“text“`ÞFunction“Key“1Ý'.Ž©ÿ‘Kâ:The–æfolloš²!wing“GNU‘ÃEmacs“st˜yle“escapMÞe“sequences“are“a˜v‘ÿdDailable“when“spMÞecifyingŽ¡‘Kâ:k²!ey‘¦fsequences:Ž¦‘Kâ:ó9ßê‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÞ$ifŽŽ‘Kâ:ÝThe–ÃNÞ$if“Ýconstruct“allo²!ws“bindings“to“bšMÞe“made“based“on“the“editing“mo˜de,‘ʈtheŽ¤ 33‘Kâ:terminal–’ŽbMÞeing“used,‘͘or“the“application“using“Readline.‘¢VThe“text“of“the“testŽ¡‘Kâ:extends–¦fto“the“end“of“the“line;“no“c²!haracters“are“required“to“isolate“it.Ž©33‘Kâ:ÞmodeŽŽ’…³-ÝThe–[Þmode=“Ýform“of“the“Þ$if“Ýdirectiv²!e“is“used“to“test“whether“ReadlineŽ¡’…³-is–‰›in“Þemacs“Ýor“Þvi“ÝmošMÞde.‘ÔDThis“ma²!y“b˜e“used“in“conjunction“with“theŽ¡’…³-`Þset‘¦fkeymapÝ'–N ! command,›_¶for“instance,˜to“set“bindings“in“the“Þemacs-Ž¡’…³-standard–_Ýand“Þemacs-ctlx“Ýk²!eymaps“only“if“Readline“is“starting“outŽ¡’…³-in–¦fÞemacs“ÝmoMÞde.Ž¦‘Kâ:ÞtermŽŽ’…³-ÝThe–<Þterm=“Ýform“ma²!y“bšMÞe“used“to“include“terminal-sp˜eci c“k²!ey“bind-Ž¡’…³-ings,‘ƒpMÞerhaps–Vîto“bind“the“kš²!ey“sequences“output“b˜y“the“terminal'sŽ¡’…³-function–Þ€kš²!eys.‘›;The“w˜ord“on“the“righ˜t“side“of“the“`Þ=Ý'“is“tested“againstŽ¡’…³-bšMÞoth–šPthe“full“name“of“the“terminal“and“the“p˜ortion“of“the“terminalŽ¡’…³-name–×bMÞefore“the“ rst“`Þ-Ý'.‘ÿ/This“alloš²!ws“Þsun“Ýto“matc˜h“bMÞoth“Þsun“ÝandŽ¡’…³-Þsun-cmdÝ,–¦ffor“instance.Ž¦‘Kâ:ÞapplicationŽ¡’…³-ÝThe–¢âáapplication“Ýconstruct“is“used“to“include“application-spMÞeci c“set-Ž¡’…³-tings.‘£mEac²!h–÷program“using“the“Readline“library“sets“the“áapplicationŽ¡’…³-nameÝ,‘rand–úpyš²!ou“can“test“for“it.‘ÙúThis“could“bMÞe“used“to“bind“k˜ey“se-Ž¡’…³-quences–Þ^to“functions“useful“for“a“spMÞeci c“program.‘›0F‘ÿeor“instance,‘`theŽ¡’…³-folloš²!wing–\¸command“adds“a“k˜ey“sequence“that“quotes“the“curren˜t“orŽ¡’…³-previous–¦fw²!ord“in“Bash:ŽŸ€’¢›‚Þ$if‘¿ªBashŽ¤ €’¢›‚#–¿ªQuote“the“current“or“previous“wordŽ¡’¢›‚"\C-xq":‘¿ª"\eb\"\ef\""Ž¡’¢›‚$endifŽ¦‘G$endifŽŽ‘Kâ:ÝThis–£™command,›¤(as“seen“in“the“previous“example,˜terminates“an“Þ$if“Ýcommand.Ž¦‘GÞ$elseŽŽ‘Kâ:ÝCommands–¦fin“this“brancš²!h“of“the“Þ$if“Ýdirectiv˜e“are“executed“if“the“test“fails.Ž¦‘GÞ$includeŽŽ‘Kâ:ÝThis–R)directivš²!e“tak˜es“a“single“ lename“as“an“argumen˜t“and“reads“commands“andŽ¤ 33‘Kâ:bindings–¦ffrom“that“ le.ŽŸ€‘hÊÞ$include‘¿ª/etc/inputrcŽŸ‘GëQ1.3.3‘d(Sample–íMInit“FileŽŽŸ33‘!GÝHere–´is“an“example“of“an“inputrc“ le.‘øThis“illustrates“kš²!ey“binding,‘·‡v‘ÿdDariable“assignmen˜t,Ž¡‘Gand–¦fconditional“syn²!tax.ŽŽŸŒ‹ mПò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH9ŽŽŽ ƒ3Ú ýµpБ.ùœÞ#–¿ªThis“file“controls“the“behaviour“of“line“input“editing“forŽ¤ €‘.ùœ#–¿ªprograms“that“use“the“Gnu“Readline“library.‘ TExisting“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:‘ Tbackward-kill-word–¿ªText“after“the“function“name“is“ignoredŸnï„ Ž¦‘.ùœ#Ž¡‘.ùœ#–¿ªArrow“keys“in“keypad“modeŽ¡‘.ùœ#Ž¡‘.ùœ#"\M-OD":‘-ýPbackward-charŽ¡‘.ùœ#"\M-OC":‘-ýPforward-charŽ¡‘.ùœ#"\M-OA":‘-ýPprevious-historyŽ¡‘.ùœ#"\M-OB":‘-ýPnext-historyŽ¡‘.ùœ#Ž¡‘.ùœ#–¿ªArrow“keys“in“ANSI“modeŽ¡‘.ùœ#Ž¡‘.ùœ"\M-[D":‘-ýPbackward-charŽ¡‘.ùœ"\M-[C":‘-ýPforward-charŽ¡‘.ùœ"\M-[A":‘-ýPprevious-historyŽ¡‘.ùœ"\M-[B":‘-ýPnext-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ŽŽŸŒ‹ ! woŸò‘GÝ10’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ#"\M-\C-[B":‘(=¦next-historyŽ¤‘.ùœC-q:‘¿ªquoted-insertŽ¡‘.ùœ$endifŽ¡‘.ùœ#–¿ªAn“old-style“binding.‘ TThis“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-?"ŽŽŸŒ‹ }^Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®11ŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ"\M-.":‘¿ªyank-last-argŽŸ €‘.ùœ$endifŽŸ *q‘GëH1.4‘™Bindable–f@Readline“CommandsŽŽŸª“‘!GÝThis–¦fsection“describšMÞes“Readline“commands“that“ma²!y“b˜e“b˜ound“to“k²!ey“sequences.ŽŸîÁ‘GëQ1.4.1‘d(Commands–íMF‘þÄ£or“Mo–ávingŽŽŸæC‘GÞbeginning-of-line‘¦f(C-a)Ž¤ 33‘Kâ:ÝMo•²!v“e–¦fto“the“start“of“the“curren²!t“line.Ž©ª“‘GÞend-of-line‘¦f(C-e)Ž¡‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“line.Ž¦‘GÞforward-char‘¦f(C-f)Ž¡‘Kâ:ÝMo•²!v“e›¦fforw“ard˜a˜c“haracter.Ž¦‘GÞbackward-char‘¦f(C-b)Ž¡‘Kâ:ÝMo•²!v“e›¦fbac“k˜a˜c“haracter.Ž¦‘GÞforward-word‘¦f(M-f)Ž¡‘Kâ:ÝMo•²!v“e›¢kforw“ard˜to˜the˜end˜of˜the˜next˜w“ord.‘܉W‘ÿeords˜are˜compMÞosed˜of˜letters˜andŽ¡‘Kâ:digits.Ž¦‘GÞbackward-word‘¦f(M-b)Ž¡‘Kâ:ÝMo•²!v“e›ã]bac“k˜to˜the˜start˜of˜this,–òšor˜the˜previous,“w²!ord.‘”ÁW‘ÿeords˜are˜compMÞosed˜ofŽ¡‘Kâ:letters–¦fand“digits.Ž¦‘GÞclear-screen‘¦f(C-l)Ž¡‘Kâ:ÝClear–2Ôthe“screen“and“redraš²!w“the“curren˜t“line,‘Iòlea˜ving“the“curren˜t“line“at“the“topŽ¡‘Kâ:of–¦fthe“screen.Ž¦‘GÞredraw-current-line‘¦f()Ž¡‘Kâ:ÝRefresh–¦fthe“currenš²!t“line.‘ÝÝBy“default,“this“is“un˜bMÞound.ŽŸîÁ‘GëQ1.4.2‘d(Commands–íMF‘þÄ£or“Manipulating“The“HistoryŽŽŸæC‘GÞaccept-line–¦f(Newline,“Return)Ž¡‘Kâ:ÝAccept–“‰the“line“regardless“of“where“the“cursor“is.‘דIf“this“line“is“non-empt²!y‘ÿe,‘—OaddŽ¡‘Kâ:it–\fto“the“history“list.‘Å2If“this“line“w²!as“a“history“line,‘k3then“restore“the“history“lineŽ¡‘Kâ:to–¦fits“original“state.Ž¦‘GÞprevious-history‘¦f(C-p)Ž¡‘Kâ:ÝMo•²!v“e–¦f`up'“through“the“history“list.Ž¦‘GÞnext-history‘¦f(C-n)Ž¡‘Kâ:ÝMo•²!v“e›¦f`do“wn'˜through˜the˜history˜list.Ž¦‘GÞbeginning-of-history‘¦f(M-<)Ž¡‘Kâ:ÝMo•²!v“e–¦fto“the“ rst“line“in“the“history‘ÿe.ŽŽŸŒ‹ ƒûŸò‘GÝ12’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÞend-of-history‘¦f(M->)Ž¤ 33‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“input“history‘ÿe,“i.e.,“the“line“currenš²!tly“bMÞeing“en˜tered.Ž©©-‘GÞreverse-search-history‘¦f(C-r)Ž¡‘Kâ:ÝSearc•²!h›½:bac“kw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`up'˜through˜the˜his-Ž¡‘Kâ:tory–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.Ž¦‘GÞforward-search-history‘¦f(C-s)Ž¡‘Kâ:ÝSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.Ž¦‘GÞnon-incremental-reverse-search-history‘¦f(M-p)Ž¡‘Kâ:ÝSearc•²!h›½:bac“kw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`up'˜through˜the˜his-Ž¡‘Kâ:tory–Ryas“necessary“using“a“non-incremenš²!tal“searc˜h“for“a“string“supplied“b˜y“theŽ¡‘Kâ:user.Ž¦‘GÞnon-incremental-forward-search-history‘¦f(M-n)Ž¡‘Kâ:ÝSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–3ªas“necessary“using“a“non-incremenš²!tal“searc˜h“for“a“string“supplied“b˜y“theŽ¡‘Kâ:user.Ž¦‘GÞhistory-search-forward‘¦f()Ž¡‘Kâ:ÝSearc•²!h›úOforw“ard˜through˜the˜history˜for˜the˜string˜of˜c“haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–ï‘of“the“currenš²!t“line“and“the“curren˜t“cursor“pšMÞosition“(the“áp˜oin²!t=Ý).‘¹_This“is“aŽ¡‘Kâ:non-incremen•²!tal›¦fsearc“h.‘ÝÝBy˜default,˜this˜command˜is˜un“bMÞound.Ž¦‘GÞhistory-search-backward‘¦f()Ž¡‘Kâ:ÝSearc•²!h›-»bac“kw“ard˜through˜the˜history˜for˜the˜string˜of˜c“haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–7®of“the“currenš²!t“line“and“the“pMÞoin˜t.‘‘¶This“is“a“non-incremen˜tal“searc˜h.‘‘¶ByŽ¡‘Kâ:default,–¦fthis“command“is“un²!bMÞound.Ž¦‘GÞyank-nth-arg‘¦f(M-C-y)Ž¡‘Kâ:ÝInsert–@the“ rst“argumenš²!t“to“the“previous“command“(usually“the“second“w˜ord“onŽ¡‘Kâ:the–uprevious“line).‘ÍnWith“an“argumenš²!t“ánÝ,‘~õinsert“the“ánÝth“w˜ord“from“the“previousŽ¡‘Kâ:command–Dø(the“wš²!ords“in“the“previous“command“bMÞegin“with“w˜ord“0).‘½cA‘Dßnegativ˜eŽ¡‘Kâ:argumenš²!t–¦finserts“the“ánÝth“w˜ord“from“the“end“of“the“previous“command.Ž¦‘GÞyank-last-arg–¦f(M-.,“M-_)Ž¡‘Kâ:ÝInsert–5Elast“argumenš²!t“to“the“previous“command“(the“last“w˜ord“of“the“previousŽ¡‘Kâ:history–¬fenš²!try).‘ïÜWith“an“argumen˜t,‘­æbMÞeha˜v˜e“exactly“lik˜e“Þyank-nth-argÝ.‘ïÜSucces-Ž¡‘Kâ:sivš²!e–&—calls“to“Þyank-last-arg“Ýmo˜v˜e“bac˜k“through“the“history“list,‘F£inserting“theŽ¡‘Kâ:last–¦fargumenš²!t“of“eac˜h“line“in“turn.ŽŸëõ‘GëQ1.4.3‘d(Commands–íMF›þÄ£or“Changing“T˜extŽŽŸd+‘GÞdelete-char‘¦f(C-d)Ž¡‘Kâ:ÝDelete–é)the“c²!haracter“under“the“cursor.‘¦&If“the“cursor“is“at“the“bMÞeginning“of“theŽ¡‘Kâ:line,›<6there–@are“no“c²!haracters“in“the“line,˜and“the“last“cš²!haracter“t˜ypMÞed“w˜as“notŽ¡‘Kâ:bMÞound–¦fto“Þdelete-charÝ,“then“return“ÞEOFÝ.ŽŽŸŒ‹ ‹DŸò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®13ŽŽŽ ƒ3Ú ý¨ðБGÞbackward-delete-char‘¦f(Rubout)Ž¤ 33‘Kâ:ÝDelete–Ÿ§the“cš²!haracter“bMÞehind“the“cursor.‘ÛA‘Ÿ¥n˜umeric“argumen˜t“means“to“kill“theŽ¡‘Kâ:c²!haracters–¦finstead“of“deleting“them.Ž©nƒ‘GÞquoted-insert–¦f(C-q,“C-v)Ž¡‘Kâ:ÝAdd–¸the“next“cš²!haracter“t˜ypMÞed“to“the“line“v˜erbatim.‘CÔThis“is“ho˜w“to“insert“k˜eyŽ¡‘Kâ:sequences–¦flik²!e“ž™š¸hŽ‘‘2Ÿù@‰ff ubŸÀ­C-qŽŽ‘‘2ŸÙš‰ff ubŽ‘„ž™š¸iŽŽ‘èÝ,“for“example.Ž¦‘GÞtab-insert‘¦f(M-TAB)Ž¡‘Kâ:ÝInsert–¦fa“tab“c²!haracter.Ž¦‘GÞself-insert–¦f(a,“b,“A,“1,“!,“...)Ž¡‘Kâ:ÝInsert‘¦fy²!ourself.Ž¦‘GÞtranspose-chars‘¦f(C-t)Ž¡‘Kâ:ÝDrag–Õãthe“cš²!haracter“bMÞefore“the“cursor“forw˜ard“o˜v˜er“the“c˜haracter“at“the“cursor,Ž¡‘Kâ:moš²!ving–C"the“cursor“forw˜ard“as“w˜ell.‘´If“the“insertion“pMÞoin˜t“is“at“the“end“of“theŽ¡‘Kâ:line,‘ÕÍthen–¡¦this“transpMÞoses“the“last“t•²!w“o›¡¦c“haracters˜of˜the˜line.‘†óNegativ“e˜argumen“tsŽ¡‘Kâ:don't‘¦fw²!ork.Ž¦‘GÞtranspose-words‘¦f(M-t)Ž¡‘Kâ:ÝDrag–the“wš²!ord“bMÞehind“the“cursor“past“the“w˜ord“in“fron˜t“of“the“cursor“mo˜vingŽ¡‘Kâ:the–¦fcursor“o•²!v“er–¦fthat“wš²!ord“as“w˜ell.Ž¦‘GÞupcase-word‘¦f(M-u)Ž¡‘Kâ:ÝUppMÞercase–ÖÓthe“currenš²!t“(or“follo˜wing)“w˜ord.‘o#With“a“negativ˜e“argumen˜t,‘âîuppMÞer-Ž¡‘Kâ:case–¦fthe“previous“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.Ž¦‘GÞdowncase-word‘¦f(M-l)Ž¡‘Kâ:ÝLo•²!w“ercase–”ãthe“currenš²!t“(or“follo˜wing)“w˜ord.‘‚²With“a“negativ˜e“argumen˜t,‘Ë–lo˜w˜ercaseŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.Ž¦‘GÞcapitalize-word‘¦f(M-c)Ž¡‘Kâ:ÝCapitalize–6the“currenš²!t“(or“follo˜wing)“w˜ord.‘€#With“a“negativ˜e“argumen˜t,‘ÅrcapitalizeŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ŽŸvŸ‘GëQ1.4.4‘d(Killing–íMAnd“Y‘þÄ£ankingŽŽŸ +‘GÞkill-line‘¦f(C-k)Ž¡‘Kâ:ÝKill–¦fthe“text“from“the“curren²!t“cursor“pMÞosition“to“the“end“of“the“line.Ž¦‘GÞbackward-kill-line–¦f(C-x“Rubout)Ž¡‘Kâ:ÝKill›¦fbac•²!kw“ard˜to˜the˜bMÞeginning˜of˜the˜line.Ž¦‘GÞunix-line-discard‘¦f(C-u)Ž¡‘Kâ:ÝKill›Ó¨bac•²!kw“ard˜from˜the˜cursor˜to˜the˜bMÞeginning˜of˜the˜curren“t˜line.‘e¢The˜killedŽ¡‘Kâ:text–¦fis“sa•²!v“ed–¦fon“the“kill-ring.Ž¦‘GÞkill-whole-line‘¦f()Ž¡‘Kâ:ÝKill–¼èall“cš²!haracters“on“the“curren˜t“line,‘ë›no“matter“where“the“cursor“is.‘By“default,Ž¡‘Kâ:this–¦fis“un²!bMÞound.ŽŽŸŒ‹–šŸò‘GÝ14’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÞkill-word‘¦f(M-d)Ž¤ 33‘Kâ:ÝKill–]from“the“cursor“to“the“end“of“the“currenš²!t“w˜ord,‘kÆor“if“bMÞet˜w˜een“w˜ords,‘kÆto“theŽ¡‘Kâ:end–¦fof“the“next“w²!ord.‘ÝÝW‘ÿeord“bMÞoundaries“are“the“same“as“Þforward-wordÝ.Ž©ÿ+‘GÞbackward-kill-word‘¦f(M-DEL)Ž¡‘Kâ:ÝKill–·2the“w²!ord“bšMÞehind“the“cursor.‘BW‘ÿeord“b˜oundaries“are“the“same“as“Þbackward-Ž¡‘Kâ:wordÝ.Ž¦‘GÞunix-word-rubout‘¦f(C-w)Ž¡‘Kâ:ÝKill–6{the“wš²!ord“bMÞehind“the“cursor,‘Z€using“white“space“as“a“w˜ord“bMÞoundary‘ÿe.‘ŽTheŽ¡‘Kâ:killed–¦ftext“is“sa•²!v“ed–¦fon“the“kill-ring.Ž¦‘GÞdelete-horizontal-space‘¦f()Ž¡‘Kâ:ÝDelete–¦fall“spaces“and“tabs“around“pMÞoinš²!t.‘ÝÝBy“default,“this“is“un˜bMÞound.Ž¦‘GÞkill-region‘¦f()Ž¡‘Kâ:ÝKill–[the“text“bšMÞet•²!w“een–[the“p˜oinš²!t“and“the“ámark‘º_Ý(sa˜v˜ed“cursor“pMÞosition).‘«ÙThis“textŽ¡‘Kâ:is–¦freferred“to“as“the“áregionÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-region-as-kill‘¦f()Ž¡‘Kâ:ÝCopš²!y–³the“text“in“the“region“to“the“kill“bu er,‘0Eso“it“can“bMÞe“y˜ank˜ed“righ˜t“a˜w˜a˜y‘ÿe.Ž¡‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-backward-word‘¦f()Ž¡‘Kâ:ÝCopš²!y–žthe“w˜ord“bšMÞefore“p˜oinš²!t“to“the“kill“bu er.‘ÄÿThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“Þbackward-wordÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-forward-word‘¦f()Ž¡‘Kâ:ÝCopš²!y–º8the“w˜ord“follo˜wing“pMÞoin˜t“to“the“kill“bu er.‘SThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“Þforward-wordÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞyank‘¦f(C-y)Ž¡‘Kâ:ÝY‘ÿeank–¦fthe“top“of“the“kill“ring“inš²!to“the“bu er“at“the“curren˜t“cursor“pMÞosition.Ž¦‘GÞyank-pop‘¦f(M-y)Ž¡‘Kâ:ÝRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can“only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“yš²!ank“or“y˜ank-pMÞop.ŽŸ±ô‘GëQ1.4.5‘d(Spiecifying–íMNumeric“Argumen–átsŽŽŸÿ+‘GÞdigit-argument–¦f(M-0,“M-1,“...“M--)Ž¡‘Kâ:ÝAdd–:Lthis“digit“to“the“argumenš²!t“already“accum˜ulating,‘Oëor“start“a“new“argumen˜t.Ž¡‘Kâ:ž™š¸hŽ‘NÍŸù@‰ff ”ŸÀ­M{ŽŽ‘NÍŸÙš‰ff ”Ž‘ZS ž™š¸iŽŽ‘a’TÝstarts–¦fa“negativš²!e“argumen˜t.Ž¦‘GÞuniversal-argument‘¦f()Ž¡‘Kâ:ÝThis–kis“another“w•²!a“y–kto“spMÞecify“an“argumenš²!t.‘«ßIf“this“command“is“follo˜w˜ed“b˜y“oneŽ¡‘Kâ:or–more“digits,›“³optionally“with“a“leading“min²!us“sign,˜those“digits“de ne“the“ar-Ž¡‘Kâ:gumenš²!t.‘ÐÚIf–\the“command“is“follo˜w˜ed“b˜y“digits,‘‡+executing“Þuniversal-argumentŽ¡‘Kâ:Ýagain–Ñ«ends“the“nš²!umeric“argumen˜t,‘Ü|but“is“otherwise“ignored.‘_«As“a“spMÞecial“case,Ž¡‘Kâ:if–ñúthis“command“is“immediately“follo•²!w“ed›ñúb“y˜a˜c“haracter˜that˜is˜neither˜a˜digitŽ¡‘Kâ:or–Zwminš²!us“sign,‘i§the“argumen˜t“coun˜t“for“the“next“command“is“m˜ultiplied“b˜y“four.Ž¡‘Kâ:The–{targumenš²!t“coun˜t“is“initially“one,‘°¸so“executing“this“function“the“ rst“timeŽŽŸŒ‹ 9Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®15ŽŽŽ ƒ3Ú ý¨ðБKâ:makš²!es–Ï2the“argumen˜t“coun˜t“four,‘Ùea“second“time“mak˜es“the“argumen˜t“coun˜t“six-Ž¤ 33‘Kâ:teen,–¦fand“so“on.‘ÝÝBy“default,“this“is“not“bMÞound“to“a“k²!ey‘ÿe.ŽŸå?‘GëQ1.4.6‘d(Letting–íMReadline“T–áypie“F›þÄ£or“Y˜ouŽŽŸÌ‘GÞcomplete‘¦f(TAB)Ž¡‘Kâ:ÝA²!ttempt–@to“do“completion“on“the“text“bMÞefore“the“cursor.‘ª±This“is“application-Ž¡‘Kâ:spMÞeci c.‘ÓÑGenerally‘ÿe,‘ŽJif–ˆByš²!ou“are“t˜yping“a“ lename“argumen˜t,‘ŽJy˜ou“can“do“ lenameŽ¡‘Kâ:completion;‘²æif–®»yš²!ou“are“t˜yping“a“command,‘°Ñy˜ou“can“do“command“completion;‘²æifŽ¡‘Kâ:yš²!ou–aare“t˜yping“in“a“sym˜bMÞol“to“GDB,“y˜ou“can“do“sym˜bMÞol“name“completion;‘¾vifŽ¡‘Kâ:yš²!ou–%­are“t˜yping“in“a“v‘ÿdDariable“to“Bash,‘?ly˜ou“can“do“v‘ÿdDariable“name“completion,‘?landŽ¡‘Kâ:so‘¦fon.Ž©Ì‘GÞpossible-completions‘¦f(M-?)Ž¡‘Kâ:ÝList–¦fthe“pšMÞossible“completions“of“the“text“b˜efore“the“cursor.Ž¦‘GÞinsert-completions‘¦f(M-*)Ž¡‘Kâ:ÝInsert–«µall“completions“of“the“text“bšMÞefore“p˜oinš²!t“that“w˜ould“ha˜v˜e“bMÞeen“generatedŽ¡‘Kâ:b²!y‘¦fÞpossible-completionsÝ.Ž¦‘GÞmenu-complete‘¦f()Ž¡‘Kâ:ÝSimilar–ÛVto“ÞcompleteÝ,‘óbut“replaces“the“wš²!ord“to“bMÞe“completed“with“a“single“matc˜hŽ¡‘Kâ:from–‹æthe“list“of“pšMÞossible“completions.‘Ž^Rep˜eated“execution“of“Þmenu-completeŽ¡‘Kâ:Ýsteps–Õ¯through“the“list“of“pMÞossible“completions,‘!inserting“eacš²!h“matc˜h“in“turn.Ž¡‘Kâ:A²!t–/ the“end“of“the“list“of“completions,‘Q7the“bMÞell“is“rung“and“the“original“text“isŽ¡‘Kâ:restored.‘`^An–' ó3 ! cmmi10å:–Ó1:“:Ž‘lÉÞ)Ž¤ 33‘Kâ:ÝIf–Qõthe“meta ed“cš²!haracter“áx‘TÝis“lo˜w˜ercase,‘bØrun“the“command“that“is“bMÞound“to“theŽ¡‘Kâ:corresp•MÞonding›¦fupp“ercase˜c²!haracter.Ž©#‘GÞprefix-meta‘¦f(ESC)Ž¡‘Kâ:ÝMakš²!e–[Cthe“next“c˜haracter“t˜ypšMÞed“b˜e“meta ed.‘üsThis“is“for“k²!eyb˜oards“without“aŽ¡‘Kâ:meta›¦fk•²!ey‘ÿe.‘ÝÝT“yping˜`ÞESC˜fÝ'˜is˜equiv‘ÿdDalen“t˜to˜t“yping˜`ÞM-fÝ'.Ž¦‘GÞundo–¦f(C-_,“C-x“C-u)Ž¡‘Kâ:ÝIncremenš²!tal–¦fundo,“separately“remem˜bMÞered“for“eac˜h“line.Ž¦‘GÞrevert-line‘¦f(M-r)Ž¡‘Kâ:ÝUndo–úall“cš²!hanges“made“to“this“line.‘ØäThis“is“lik˜e“executing“the“Þundo“ÝcommandŽ¡‘Kâ:enough–¦ftimes“to“get“bac²!k“to“the“bMÞeginning.Ž¦‘GÞtilde-expand‘¦f(M-~)Ž¡‘Kâ:ÝPš²!erform–¦ftilde“expansion“on“the“curren˜t“w˜ord.Ž¦‘GÞset-mark‘¦f(C-@)Ž¡‘Kâ:ÝSet–D®the“mark“to“the“currenš²!t“pMÞoin˜t.‘½JIf“a“n˜umeric“argumen˜t“is“supplied,‘X9the“markŽ¡‘Kâ:is–¦fset“to“that“pMÞosition.Ž¦‘GÞexchange-point-and-mark–¦f(C-x“C-x)Ž¡‘Kâ:ÝSwš²!ap–¾Òthe“pMÞoin˜t“with“the“mark.‘'!The“curren˜t“cursor“pMÞosition“is“set“to“the“sa˜v˜edŽ¡‘Kâ:pšMÞosition,–¦fand“the“old“cursor“p˜osition“is“sa•²!v“ed–¦fas“the“mark.Ž¦‘GÞcharacter-search‘¦f(C-])Ž¡‘Kâ:ÝA‘ü&cš²!haracter–üQis“read“and“pMÞoin˜t“is“mo˜v˜ed“to“the“next“oMÞccurrence“of“that“c˜haracter.Ž¡‘Kâ:A–¦fnegativš²!e“coun˜t“searc˜hes“for“previous“oMÞccurrences.Ž¦‘GÞcharacter-search-backward‘¦f(M-C-])Ž¡‘Kâ:ÝA‘c"cš²!haracter–c•is“read“and“pMÞoin˜t“is“mo˜v˜ed“to“the“previous“oMÞccurrence“of“thatŽ¡‘Kâ:c•²!haracter.‘ÝÝA›¦fnegativ“e˜coun“t˜searc“hes˜for˜subsequen“t˜oMÞccurrences.Ž¦‘GÞinsert-comment‘¦f(M-#)Ž¡‘Kâ:ÝThe–živ›ÿdDalue“of“the“Þcomment-begin“Ýv˜ariable“is“inserted“at“the“bMÞeginning“of“theŽ¡‘Kâ:currenš²!t–¦fline,“and“the“line“is“accepted“as“if“a“newline“had“bMÞeen“t˜ypMÞed.Ž¦‘GÞdump-functions‘¦f()Ž¡‘Kâ:ÝPrinš²!t–,Qall“of“the“functions“and“their“k˜ey“bindings“to“the“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t“is“supplied,‘Ùthe“output“is“formatted“in“suc˜h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“áinputrc‘PjÝ le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.Ž¦‘GÞdump-variables‘¦f()Ž¡‘Kâ:ÝPrin²!t–ŽÉall“of“the“settable“v›ÿdDariables“and“their“v˜alues“to“the“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t“is“supplied,‘Ùthe“output“is“formatted“in“suc˜h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“áinputrc‘PjÝ le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.Ž¦‘GÞdump-macros‘¦f()Ž¡‘Kâ:ÝPrinš²!t– ˆall“of“the“Readline“k˜ey“sequences“bMÞound“to“macros“and“the“strings“theyŽ¡‘Kâ:ouput.‘HþIf–tÆa“nš²!umeric“argumen˜t“is“supplied,‘¨^the“output“is“formatted“in“suc˜h“aŽ¡‘Kâ:w•²!a“y–šthat“it“can“bšMÞe“made“part“of“an“áinputrc‘DÝ le.‘ÙÃThis“command“is“un²!b˜ound“b²!yŽ¡‘Kâ:default.ŽŽŸŒ‹¶÷Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®17ŽŽŽ ƒ3Ú ý¨ðБGëH1.5‘™Readline–f@vi“Mos3deŽŽŸ33‘!GÝWhile–×Uthe“Readline“library“došMÞes“not“ha•²!v“e–×Ua“full“set“of“Þvi“Ýediting“functions,‘¿it“do˜es“con²!tainŽ¤ 33‘Genough–to“allo²!w“simple“editing“of“the“line.‘.ƒThe“Readline“Þvi“ÝmošMÞde“b˜eha•²!v“es–as“sp˜eci ed“inŽ¡‘Gthe–¦fãPOSIX“Ý1003.2“standard.Ž©33‘!GIn–|Uorder“to“switcš²!h“in˜teractiv˜ely“bMÞet˜w˜een“Þemacs“Ýand“Þvi“Ýediting“moMÞdes,‘„¿use“the“commandŽ¡‘GM-C-j–¦f(toggle-editing-mošMÞde).‘ÝÝThe“Readline“default“is“Þemacs“Ýmo˜de.Ž¦‘!GWhen–›‰yš²!ou“en˜ter“a“line“in“Þvi“ÝmoMÞde,‘µy˜ou“are“already“placed“in“`insertion'“moMÞde,‘µas“if“y˜ouŽ¡‘Ghad–&Gtš²!ypMÞed“an“`ÞiÝ'.‘³(Pressing“ž™š¸hŽ‘Ÿù@‰ff¤TŸÀ­ESCŽŽ‘ŸÙš‰ff¤TŽ‘2Ùž™š¸iŽŽ‘òÝswitc˜hes“y˜ou“in˜to“`command'“moMÞde,‘?çwhere“y˜ou“can“edit“theŽ¡‘Gtext–of“the“line“with“the“standard“Þvi“Ýmo•²!v“emen“t›k“eys,‘)These“functions“allo˜w“y˜ou“to“c˜hange“whic˜hŽ¡‘Gkš²!eymap–¦fis“activ˜e.Ž¦’sF‘ÿeunctionŽŽ‘GèKeymap‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kÞeymap‘yšâ()Ž¡‘.ùœÝReturns–¦fthe“currenš²!tly“activ˜e“k˜eymap.ŽŽŸŒ‹÷Ÿò‘GÝ24’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íset‘Óõ‰ˆŠ#ØŽ“kÞeymap‘yšâ(ÞKeymap‘¦fkeymapâ)Ž¤ 33‘.ùœÝMak•²!es›¦fák“eymap‘ûgÝthe˜curren“tly˜activ“e˜k“eymap.Ž©¨ó’sF‘ÿeunctionŽŽ‘GèKeymap‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kšÞeymap‘Óõ‰ˆŠ#ØŽ“b˜y‘Óõ‰ˆŠ#ØŽ“name‘yšâ(Þchar‘¦f*nameâ)Ž¡‘.ùœÝReturn–pÄthe“kš²!eymap“matc˜hing“ánameÝ.‘Ëüáname‘ ËÝis“one“whic˜h“w˜ould“bMÞe“supplied“in“aŽ¡‘.ùœÞset–¦fkeymap“Ýinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“3).Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kÞeymap‘Óõ‰ˆŠ#ØŽ“name‘yšâ(ÞKeymap‘¦fkeymapâ)Ž¡‘.ùœÝReturn–pÄthe“name“matcš²!hing“ák˜eymapÝ.‘Ëüáname‘ ËÝis“one“whic˜h“w˜ould“bMÞe“supplied“in“aŽ¡‘.ùœÞset–¦fkeymap“Ýinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“3).ŽŸu¿‘GëQ2.4.3‘d(Binding‘íMKeysŽŽŸî‘!GÝY‘ÿeou–]YassoMÞciate“kš²!eys“with“functions“through“the“k˜eymap.‘ ! ·Readline“has“sev˜eral“in˜ter-Ž¡‘Gnal‘Xk²!eymaps:‘«ÂÞemacs_standard_keymapÝ,–Þemacs_meta_keymapÝ,“Þemacs_ctlx_keymapÝ,“Þvi_Ž¡‘Gmovement_keymapÝ,‘qxand–¨Þvi_insertion_keymapÝ.‘ +¢Þemacs_standard_keymap“Ýis“the“default,Ž¡‘Gand–¦fthe“examples“in“this“man²!ual“assume“that.ŽŸî‘!GThese–¦ffunctions“manage“k²!ey“bindings.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbind‘Óõ‰ˆŠ#ØŽ“kÞey‘yšâ(Þint–¦fkey,“Function“*functionâ)Ž¡‘.ùœÝBinds–Mákš²!ey‘eÝto“áfunction“Ýin“the“curren˜tly“activ˜e“k˜eymap.‘Ö*Returns“non-zero“in“theŽ¡‘.ùœcase–¦fof“an“inš²!v‘ÿdDalid“ák˜eyÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbind‘Óõ‰ˆŠ#ØŽ“kÞey‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þint–¦fkey,“Function“*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝBind–¦fákš²!ey‘–~Ýto“áfunction“Ýin“ámapÝ.‘ÝÝReturns“non-zero“in“the“case“of“an“in˜v‘ÿdDalid“ák˜eyÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunšÞbind‘Óõ‰ˆŠ#ØŽ“k˜ey‘yšâ(Þint‘¦fkeyâ)Ž¡‘.ùœÝBind–)žákš²!ey‘¶Ýto“the“n˜ull“function“in“the“curren˜tly“activ˜e“k˜eymap.‘´EReturns“non-zeroŽ¡‘.ùœin–¦fcase“of“error.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunšÞbind‘Óõ‰ˆŠ#ØŽ“k˜ey‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þint–¦fkey,“Keymap“mapâ)Ž¡‘.ùœÝBind–¦fákš²!ey‘–~Ýto“the“n˜ull“function“in“ámapÝ.‘ÝÝReturns“non-zero“in“case“of“error.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunÞbind‘Óõ‰ˆŠ#ØŽ“function‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(ÞFunction‘¦f*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝUnš²!bind–¦fall“k˜eys“that“execute“áfunction“Ýin“ámapÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunÞbind‘Óõ‰ˆŠ#ØŽ“command‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þchar–¦f*command,“KeymapŽ¡‘DGmapâ)Ž¡‘.ùœÝUnš²!bind–¦fall“k˜eys“that“are“bMÞound“to“ácommand‘¸Ýin“ámapÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ígeneric‘Óõ‰ˆŠ#ØŽ“bind‘yšâ(Þint–¦ftype,“char“*keyseq,“char“*data,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝBind–"™the“kš²!ey“sequence“represen˜ted“b˜y“the“string“ák˜eyseq‘cÝto“the“arbitrary“pMÞoin˜terŽ¡‘.ùœádataÝ.‘Ì át•²!ypšMÞe‘ üÝsa“ys–põwhat“kind“of“data“is“p˜oinš²!ted“to“b˜y“ádataÝ;‘‚Åthis“can“bMÞe“a“functionŽ¡‘.ùœ(ÞISFUNCÝ),›œa–‹*macro“(ÞISMACRÝ),˜or“a“kš²!eymap“(ÞISKMAPÝ).‘ÔÉThis“mak˜es“new“k˜eymapsŽ¡‘.ùœas–¦fnecessary‘ÿe.‘ÝÝThe“initial“kš²!eymap“in“whic˜h“to“do“bindings“is“ámapÝ.ŽŽŸŒ‹Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—25ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íparse‘Óõ‰ˆŠ#ØŽ“and‘Óõ‰ˆŠ#ØŽ“bind‘yšâ(Þchar‘¦f*lineâ)Ž¤ 33‘.ùœÝP²!arse–„áline‘!¤Ýas“if“it“had“bšMÞeen“read“from“the“Þinputrc“Ý le“and“p˜erform“anš²!y“k˜eyŽ¡‘.ùœbindings–Týand“v‘ÿdDariable“assignmen²!ts“found“(see“Section“1.3“[Readline“Init“File],Ž¡‘.ùœpage‘¦f3).Ž©o)’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íread‘Óõ‰ˆŠ#ØŽ“init‘Óõ‰ˆŠ#ØŽ“ le‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝRead–ñ ! kš²!eybindings“and“v‘ÿdDariable“assignmen˜ts“from“á lename‘ŽÝ(see“Section“1.3Ž¡‘.ùœ[Readline–¦fInit“File],“page“3).ŽŸ;÷‘GëQ2.4.4‘d(Assoiciating–íMF‘þÄ£unction“Names“and“BindingsŽŽŸQ.‘!GÝThese–ŒQfunctions“alloš²!w“y˜ou“to“ nd“out“what“k˜eys“in˜v˜ok˜e“named“functions“and“the“functionsŽ¡‘Gin•²!v“ok“ed›¦fb“y˜a˜particular˜k“ey˜sequence.Ž¦’sF‘ÿeunctionŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ínamed‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar‘¦f*nameâ)Ž¡‘.ùœÝReturn–¦fthe“function“with“name“ánameÝ.Ž¦’sF‘ÿeunctionŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ífunction‘Óõ‰ˆŠ#ØŽ“of‘Óõ‰ˆŠ#ØŽ“kÞeyseq‘yšâ(Þchar–¦f*keyseq,“KeymapŽ¡‘DGmap,–¦fint“*typeâ)Ž¡‘.ùœÝReturn–Qthe“function“in•²!v“ok“ed›Qb“y˜ák“eyseq‘R7Ýin˜k“eymap˜ámapÝ.‘ŸIf˜ámap‘fRÝis˜NULL,˜theŽ¡‘.ùœcurren•²!t›5ùk“eymap˜is˜used.‘¸cIf˜át“ypMÞe‘ÓÝis˜not˜NULL,˜the˜t“ypMÞe˜of˜the˜ob‘›»ject˜is˜returnedŽ¡‘.ùœin–¦fit“(one“of“ÞISFUNCÝ,“ÞISKMAPÝ,“or“ÞISMACRÝ).Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çrl‘Óõ‰ˆŠ#ØŽ›÷Íin•Þv“oking‘Óõ‰ˆŠ#ØŽ˜k“eyseqs‘yšâ(ÞFunction‘¦f*functionâ)Ž¡‘.ùœÝReturn–®Tan“arraš²!y“of“strings“represen˜ting“the“k˜ey“sequences“used“to“in˜v˜ok˜e“áfunc-Ž¡‘.ùœtion–¦fÝin“the“currenš²!t“k˜eymap.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çrl‘Óõ‰ˆŠ#ØŽ›÷Íin•Þv“oking‘Óõ‰ˆŠ#ØŽ˜k“eyseqs‘Óõ‰ˆŠ#ØŽ˜in‘Óõ‰ˆŠ#ØŽ˜map‘yšâ(ÞFunction‘¦f*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝReturn–®Tan“arraš²!y“of“strings“represen˜ting“the“k˜ey“sequences“used“to“in˜v˜ok˜e“áfunc-Ž¡‘.ùœtion–¦fÝin“the“k²!eymap“ámapÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ífunction‘Óõ‰ˆŠ#ØŽ“dumpb"er‘yšâ(Þint‘¦freadableâ)Ž¡‘.ùœÝPrinš²!t–žOthe“readline“function“names“and“the“k˜ey“sequences“curren˜tly“bMÞound“toŽ¡‘.ùœthem–Ãto“Þrl_outstreamÝ.‘3ÄIf“áreadable‘`Ýis“non-zero,‘Ê1the“list“is“formatted“in“suc²!h“aŽ¡‘.ùœw•²!a“y–¦fthat“it“can“bMÞe“made“part“of“an“Þinputrc“Ý le“and“re-read.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ílist‘Óõ‰ˆŠ#ØŽ“funmap‘Óõ‰ˆŠ#ØŽ“names‘yšâ()Ž¡‘.ùœÝPrin²!t–¦fthe“names“of“all“bindable“Readline“functions“to“Þrl_outstreamÝ.ŽŸ;÷‘GëQ2.4.5‘d(Allo–áwing‘íMUndoingŽŽŸQ.‘!GÝSuppMÞorting–&Œthe“undo“command“is“a“painless“thing,‘@and“makš²!es“y˜our“functions“m˜uc˜h“moreŽ¡‘Guseful.‘€:It–1Úis“certainly“easy“to“try“something“if“yš²!ou“kno˜w“y˜ou“can“undo“it.‘€:I‘1¶could“use“anŽ¡‘Gundo–¦ffunction“for“the“stoMÞcš²!k“mark˜et.ŽŸQ.‘!GIf–+ôy²!our“function“simply“inserts“text“once,›Dqor“deletes“text“once,˜and“uses“Þrl_insert_textŽ¡‘G()–¦fÝor“Þrl_delete_text“()“Ýto“do“it,“then“undoing“is“already“done“for“y²!ou“automatically‘ÿe.ŽŽŸŒ‹Οò‘GÝ26’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ!GIf–u†yš²!ou“do“m˜ultiple“insertions“or“m˜ultiple“deletions,‘²€or“an˜y“com˜bination“of“these“opMÞerations,Ž¤ 33‘Gyš²!ou–‘should“group“them“together“in˜to“one“opMÞeration.‘œ]This“is“done“with“Þrl_begin_undo_Ž¡‘Ggroup–¦f()“Ýand“Þrl_end_undo_group“()Ý.Ž¤9m‘!GThe–¦ftš²!ypMÞes“of“ev˜en˜ts“that“can“bMÞe“undone“are:ŽŸ†:‘.ùœÞenum–¿ªundo_code“{“UNDO_DELETE,“UNDO_INSERT,“UNDO_BEGIN,“UNDO_END“};Ž¡‘!GÝNotice–£¯that“ÞUNDO_DELETE“Ýmeans“to“insert“some“text,‘¤:and“ÞUNDO_INSERT“Ýmeans“to“deleteŽ¤ 33‘Gsome–é°text.‘žöThat“is,›nthe“undo“coMÞde“tells“undo“what“to“undo,˜not“ho²!w“to“undo“it.‘žöÞUNDO_BEGINŽ¡‘GÝand–¦fÞUNDO_END“Ýare“tags“added“b²!y“Þrl_begin_undo_group“()“Ýand“Þrl_end_undo_group“()Ý.Ž©?§’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbb"egin‘Óõ‰ˆŠ#ØŽ“undo‘Óõ‰ˆŠ#ØŽ“group‘yšâ()Ž¡‘.ùœÝBegins–o²sa²!ving“undo“information“in“a“group“construct.‘9ÀThe“undo“informationŽ¡‘.ùœusually–comes“from“calls“to“Þrl_insert_text›¦f()“Ýand“Þrl_delete_text˜()Ý,‘¸butŽ¡‘.ùœcould–¦fbMÞe“the“result“of“calls“to“Þrl_add_undo“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íend‘Óõ‰ˆŠ#ØŽ“undo‘Óõ‰ˆŠ#ØŽ“group‘yšâ()Ž¡‘.ùœÝCloses–ƒthe“curren²!t“undo“group“started“with“Þrl_begin_undo_group‘¦f()Ý.‘14ThereŽ¡‘.ùœshould–ºbMÞe“one“call“to“Þrl_end_undo_group‘¦f()“Ýfor“eac²!h“call“to“Þrl_begin_undo_Ž¡‘.ùœgroup‘¦f()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íadd‘Óõ‰ˆŠ#ØŽ“undo‘yšâ(Þenum–¦fundo_code“what,“int“start,“int“end,Ž¡‘DGchar‘¦f*textâ)Ž¡‘.ùœÝRemem•²!bMÞer›ç°ho“w˜to˜undo˜an˜ev“en“t˜(according˜to˜áwhat=Ý).‘¡ºThe˜a ected˜text˜runsŽ¡‘.ùœfrom–¦fástart‘ãfÝto“áendÝ,“and“encompasses“átextÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çfree‘Óõ‰ˆŠ#ØŽ–÷Íundo‘Óõ‰ˆŠ#ØŽ“list‘yšâ()Ž¡‘.ùœÝF‘ÿeree–¦fthe“existing“undo“list.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ído‘Óõ‰ˆŠ#ØŽ“undo‘yšâ()Ž¡‘.ùœÝUndo–Áûthe“ rst“thing“on“the“undo“list.‘0Returns“Þ0“Ýif“there“w²!as“nothing“to“undo,Ž¡‘.ùœnon-zero–¦fif“something“w²!as“undone.Ž¦‘!GFinally‘ÿe,›Á#if–»Êy²!ou“neither“insert“nor“delete“text,˜but“directly“moMÞdify“the“existing“text“(e.g.,Ž¡‘Gc²!hange–jÕits“case),››ñcall“Þrl_modifying‘¦f()“Ýonce,˜just“bšMÞefore“y²!ou“mo˜dify“the“text.‘++Y‘ÿeou“m²!ustŽ¡‘Gsupply–¦fthe“indices“of“the“text“range“that“y²!ou“are“going“to“moMÞdify‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ímob"difying‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝT‘ÿeell–ØmReadline“to“sa•²!v“e–Ømthe“text“bMÞet•²!w“een–Ømástart‘mÝand“áend‘F¿Ýas“a“single“undo“unit.‘sñItŽ¡‘.ùœis–¦fassumed“that“yš²!ou“will“subsequen˜tly“moMÞdify“that“text.ŽŸ t‘GëQ2.4.6‘d(Redispla–áyŽŽŸ?§’sÝF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷ÍredisplaÞy‘yšâ()Ž¡‘.ùœÝChange–‡what's“displa•²!y“ed–‡on“the“screen“to“re ect“the“currenš²!t“con˜ten˜ts“of“Þrl_Ž¡‘.ùœline_bufferÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íforced‘Óõ‰ˆŠ#ØŽ“upb"date‘Óõ‰ˆŠ#ØŽ“displaÞy‘yšâ()Ž¡‘.ùœÝF‘ÿeorce– Uthe“line“to“bšMÞe“up˜dated“and“redispla•²!y“ed,‘#Qwhether– ! Uor“not“Readline“thinksŽ¡‘.ùœthe–¦fscreen“displa²!y“is“correct.ŽŽŸŒ‹¯Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—27ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íon‘Óõ‰ˆŠ#ØŽ“new‘Óõ‰ˆŠ#ØŽ“line‘yšâ()Ž¤ 33‘.ùœÝT‘ÿeell–¾ the“upMÞdate“routines“that“wš²!e“ha˜v˜e“mo˜v˜ed“on˜to“a“new“(empt˜y)“line,‘ÃñusuallyŽ¡‘.ùœafter–¦fouputting“a“newline.Ž©銒sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íreset‘Óõ‰ˆŠ#ØŽ“line‘Óõ‰ˆŠ#ØŽ“state‘yšâ()Ž¡‘.ùœÝReset–äÒthe“displaš²!y“state“to“a“clean“state“and“redispla˜y“the“curren˜t“line“startingŽ¡‘.ùœon–¦fa“new“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ímessage‘yšâ(Þva_alistâ)Ž¡‘.ùœÝThe–ò“argumenš²!ts“are“a“string“as“w˜ould“bMÞe“supplied“to“ÞprintfÝ.‘ÂdThe“resultingŽ¡‘.ùœstring–C3is“displa•²!y“ed–C3in“the“áecš²!ho“areaÝ.‘ ´EThe“ec˜ho“area“is“also“used“to“displa˜yŽ¡‘.ùœn•²!umeric›¦fargumen“ts˜and˜searc“h˜strings.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íclear‘Óõ‰ˆŠ#ØŽ“message‘yšâ()Ž¡‘.ùœÝClear–¦fthe“message“in“the“ec²!ho“area.ŽŸ¶W‘GëQ2.4.7‘d(Moidifying‘íMT‘þÄ£extŽŽŸ銒sÝF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinsert‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þchar‘¦f*textâ)Ž¡‘.ùœÝInsert–¦fátext‘ãfÝinš²!to“the“line“at“the“curren˜t“cursor“pMÞosition.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ídelete‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝDelete–¦fthe“text“bMÞet•²!w“een–¦fástart‘ãfÝand“áend‘¸Ýin“the“curren²!t“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcopÞy‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝReturn–¦fa“copš²!y“of“the“text“bMÞet˜w˜een“ástart‘ãfÝand“áend‘¸Ýin“the“curren˜t“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íkill‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝCopš²!y–vSthe“text“bMÞet˜w˜een“ástart‘³SÝand“áend‘ä¥Ýin“the“curren˜t“line“to“the“kill“ring,‘ªNap-Ž¡‘.ùœpšMÞending–FLor“prep˜ending“to“the“last“kill“if“the“last“command“w²!as“a“kill“command.Ž¡‘.ùœThe–4¡text“is“deleted.‘ˆIf“ástart‘q¡Ýis“less“than“áendÝ,›X/the“text“is“appMÞended,˜otherwiseŽ¡‘.ùœprepMÞended.‘ÝÝIf–¦fthe“last“command“w²!as“not“a“kill,“a“new“kill“ring“slot“is“used.ŽŸ¶W‘GëQ2.4.8‘d(Utilit–áy‘íMF‘þÄ£unctionsŽŽŸ銒sÝF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íread‘Óõ‰ˆŠ#ØŽ“kÞey‘yšâ()Ž¡‘.ùœÝReturn–Dšthe“next“cš²!haracter“a˜v‘ÿdDailable.‘½DThis“handles“input“inserted“in˜to“the“inputŽ¡‘.ùœstream–r(via“ápMÞending“input‘¯(Ý(see“Section“2.3“[Readline“V‘ÿeariables],‘¥page“21)“andŽ¡‘.ùœÞrl_stuff_char–¦f()Ý,“macros,“and“cš²!haracters“read“from“the“k˜eybMÞoard.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ígetc‘yšâ(ÞFILE‘¦f*â)Ž¡‘.ùœÝReturn–¦fthe“next“cš²!haracter“a˜v‘ÿdDailable“from“the“k˜eybMÞoard.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ístu ‘Óõ‰ˆŠ#ØŽ“cÞhar‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝInsert–5gác‘ßkÝin²!to“the“Readline“input“stream.‘ ŠáIt“will“bšMÞe“Þ"ÝreadÞ"“Ýb˜efore“ReadlineŽ¡‘.ùœattempts–¦fto“read“c²!haracters“from“the“terminal“with“Þrl_read_key“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèrl_extend_line_buffer‘™˜ç(inÞt‘yšÞlenâ)Ž¡‘.ùœÝEnsure–6that“Þrl_line_buffer“Ýhas“enough“space“to“hold“álen“Ýc²!haracters,‘LîpMÞossiblyŽ¡‘.ùœrealloMÞcating–¦fit“if“necessary‘ÿe.ŽŽŸŒ‹+©Ÿò‘GÝ28’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Íinitialize‘yšâ()Ž¤ 33‘.ùœÝInitialize–¦for“re-initialize“Readline's“in²!ternal“state.Ž©š½’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íreset‘Óõ‰ˆŠ#ØŽ“terminal‘yšâ(Þchar‘¦f*terminal_nameâ)Ž¡‘.ùœÝReinitialize–CÜReadline's“idea“of“the“terminal“settings“using“áterminal‘¨/‰x³HøŽ‘ñ'name‘àãÝas“theŽ¡‘.ùœterminal–¦ft²!ypMÞe“(e.g.,“Þvt100Ý).Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çalphabb"etic‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“an“alphabMÞetic“c²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çnÞumeric‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“nš²!umeric“c˜haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çding‘yšâ()Ž¡‘.ùœÝRing–¦fthe“terminal“bšMÞell,“ob˜eying“the“setting“of“Þbell-styleÝ.Ž¦‘!GThe–¦ffolloš²!wing“are“implemen˜ted“as“macros,“de ned“in“Þchartypes.hÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çuppb"ercase‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“an“uppšMÞercase“alphab˜etic“c²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çlo•Þw“ercase‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“lo•²!w“ercase–¦falphabMÞetic“c²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çdigit‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“nš²!umeric“c˜haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çto‘Óõ‰ˆŠ#ØŽ‘÷Íuppb"er‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–ò«ác‘œ¯Ýis“a“lo•²!w“ercase–ò«alphabšMÞetic“c²!haracter,‘E¼return“the“corresp˜onding“upp˜ercaseŽ¡‘.ùœc²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çto‘Óõ‰ˆŠ#ØŽ‘÷Ílo•Þw“er‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–Z¼ác‘ÀÝis“an“uppšMÞercase“alphab˜etic“c²!haracter,‘‡Ñreturn“the“corresp˜onding“lo•²!w“ercaseŽ¡‘.ùœc²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çdigit‘Óõ‰ˆŠ#ØŽ‘÷Ív‘ÿ;¼alue‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–¦fác‘PjÝis“a“n•²!um“bMÞer,–¦freturn“the“v‘ÿdDalue“it“represen²!ts.ŽŸg‹‘GëQ2.4.9‘d(Alternate‘íMIn–áterfaceŽŽŸa‘!GÝAn–_Âalternate“inš²!terface“is“a˜v‘ÿdDailable“to“plain“Þreadline()Ý.‘ ! ñSome“applications“need“toŽ¡‘Gin•²!terlea“v“e›|™k“eybMÞoard˜I/O‘|Žwith˜ le,–„õdevice,“or˜windo•²!w˜system˜I/O,˜t“ypically˜b“y˜using˜a˜mainŽ¡‘GlošMÞop–Seto“Þselect()“Ýon“v‘ÿdDarious“ le“descriptors.‘Â2T‘ÿeo“accomo˜date“this“need,‘cÿreadline“can“also“b˜eŽ¡‘Gin•²!v“ok“ed–¾=as“a“`callbacš²!k'“function“from“an“ev˜en˜t“loMÞop.‘%cThere“are“functions“a˜v‘ÿdDailable“to“mak˜eŽ¡‘Gthis‘¦feasy‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacÞk‘Óõ‰ˆŠ#ØŽ“handler‘Óõ‰ˆŠ#ØŽ“install‘yšâ(Þchar–¦f*prompt,“VfunctionŽ¡‘DG*lhandlerâ)Ž¡‘.ùœÝSet–îiup“the“terminal“for“readline“I/O‘îVand“displa²!y“the“initial“expanded“v‘ÿdDalue“ofŽ¡‘.ùœápromptÝ.‘hSa•²!v“e–?the“v‘ÿdDalue“of“álhandler‘×hÝto“use“as“a“callbac²!k“when“a“complete“lineŽ¡‘.ùœof–¦finput“has“bMÞeen“en²!tered.ŽŽŸŒ‹8ÅŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—29ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacšÞk‘Óõ‰ˆŠ#ØŽ“read‘Óõ‰ˆŠ#ØŽ“c˜har‘yšâ()Ž¤ 33‘.ùœÝWhenevš²!er–4'an“application“determines“that“k˜eybMÞoard“input“is“a˜v‘ÿdDailable,‘Kit“shouldŽ¡‘.ùœcall–„ÝÞrl_callback_read_char()Ý,‘¼zwhicš²!h“will“read“the“next“c˜haracter“from“theŽ¡‘.ùœcurrenš²!t–øoinput“source.‘ Ó÷If“that“c˜haracter“completes“the“line,‘ŒðÞrl_callback_Ž¡‘.ùœread_char–ÈçÝwill“in•²!v“ok“e–Èçthe“álhandler‘’Ýfunction“sa•²!v“ed›Èçb“y˜Þrl_callback_handler_Ž¡‘.ùœinstall–jÝto“proMÞcess“the“line.‘<éÞEOF“Ýis“indicated“b²!y“calling“álhandler‘ä“Ýwith“a“ÞNULLŽ¡‘.ùœÝline.ŽŸZg’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacšÞk‘Óõ‰ˆŠ#ØŽ“handler‘Óõ‰ˆŠ#ØŽ“remo˜v˜e‘yšâ()Ž¡‘.ùœÝRestore–’Uthe“terminal“to“its“initial“state“and“remo•²!v“e–’Uthe“line“handler.‘×-This“ma²!yŽ¡‘.ùœbMÞe–¦fcalled“from“within“a“callbacš²!k“as“w˜ell“as“indepMÞenden˜tly‘ÿe.ŽŸ'3‘GëQ2.4.10‘d(An‘íMExampleŽŽŸÆÍ‘!GÝHere–¯½is“a“function“whicš²!h“c˜hanges“lo˜w˜ercase“c˜haracters“to“their“uppMÞercase“equiv‘ÿdDalen˜ts,Ž¡‘Gand–ž ! uppMÞercase“cš²!haracters“to“lo˜w˜ercase.‘ÄÈIf“this“function“w˜as“bMÞound“to“`ÞM-cÝ',‘Ûòthen“t˜ypingŽ¡‘G`ÞM-cÝ'–(Äwš²!ould“c˜hange“the“case“of“the“c˜haracter“under“pMÞoin˜t.‘³ýT˜yping“`ÞM-1–¦f0“M-cÝ'–(Äw˜ould“c˜hangeŽ¡‘Gthe–¦fcase“of“the“folloš²!wing“10“c˜haracters,“lea˜ving“the“cursor“on“the“last“c˜haracter“c˜hanged.ŽŸš‘.ùœÞ/*–¿ªInvert“the“case“of“the“COUNT“following“characters.“*/Ž¤ €‘.ùœintŽ¡‘.ùœinvert_case_line–¿ª(count,“key)Ž¡‘K·îint–¿ªcount,“key;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“start,“end,“i;Ž¤‘:xðstart–¿ª=“rl_point;Ž¡‘:xðif–¿ª(rl_point“>=“rl_end)Ž© €‘EøDreturn‘¿ª(0);Ž¡‘:xðif–¿ª(count“<“0)Ž¦‘EøD{Ž¦‘Qw˜direction–¿ª=“-1;Ž¦‘Qw˜count–¿ª=“-count;Ž¦‘EøD}Ž¦‘:xðelseŽ¦‘EøDdirection–¿ª=“1;Ž¡‘:xð/*–¿ªFind“the“end“of“the“range“to“modify.“*/Ž¦‘:xðend–¿ª=“start“+“(count“*“direction);Ž¡‘:xð/*–¿ªForce“it“to“be“within“range.“*/Ž¦‘:xðif–¿ª(end“>“rl_end)Ž¦‘EøDend–¿ª=“rl_end;Ž¦‘:xðelse–¿ªif“(end“<“0)Ž¦‘EøDend–¿ª=“0;Ž¡‘:xðif–¿ª(start“==“end)ŽŽŸŒ‹D}Ÿò‘GÝ30’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБEøDÞreturn‘¿ª(0);Ž©‘:xðif–¿ª(start“>“end)Ž¤ €‘EøD{Ž¡‘Qw˜int–¿ªtemp“=“start;Ž¡‘Qw˜start–¿ª=“end;Ž¡‘Qw˜end–¿ª=“temp;Ž¡‘EøD}Ž¦‘:xð/*–¿ªTell“readline“that“we“are“modifying“the“line,“so“it“will“saveŽ¡‘K·îthe–¿ªundo“information.“*/Ž¡‘:xðrl_modifying–¿ª(start,“end);Ž¦‘:xðfor–¿ª(i“=“start;“i“!=“end;“i++)Ž¡‘EøD{Ž¡‘Qw˜if–¿ª(uppercase_p“(rl_line_buffer[i]))Ž¡‘\öìrl_line_buffer[i]–¿ª=“to_lower“(rl_line_buffer[i]);Ž¡‘Qw˜else–¿ªif“(lowercase_p“(rl_line_buffer[i]))Ž¡‘\öìrl_line_buffer[i]–¿ª=“to_upper“(rl_line_buffer[i]);Ž¡‘EøD}Ž¡‘:xð/*–¿ªMove“point“to“on“top“of“the“last“character“changed.“*/Ž¡‘:xðrl_point–¿ª=“(direction“==“1)“?“end“-“1“:“start;Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}ŽŸíâ‘GëH2.5‘™Custom‘f@CompletersŽŽ©’Z‘!GÝTš²!ypically‘ÿe,‘ÿa–ýGprogram“that“reads“commands“from“the“user“has“a“w˜a˜y“of“disam˜biguatingŽ¤ 33‘Gcommands–B and“data.‘± If“yš²!our“program“is“one“of“these,‘ithen“it“can“pro˜vide“completion“forŽ¡‘Gcommands,–ˆÃdata,“or–[bšMÞoth.‘Ñ„The“follo²!wing“sections“describ˜e“hoš²!w“y˜our“program“and“ReadlineŽ¡‘Gco•MÞop“erate–¦fto“pro²!vide“this“service.ŽŸ¾N‘GëQ2.5.1‘d(Ho–áw–íMCompleting“W‘þÄ£orksŽŽ¦‘!GÝIn–úorder“to“complete“some“text,‘;ßthe“full“list“of“pšMÞossible“completions“m²!ust“b˜e“a²!v‘ÿdDailable.Ž¡‘GThat–is,‘3&it“is“not“pMÞossible“to“accurately“expand“a“partial“wš²!ord“without“kno˜wing“all“of“theŽ¡‘GpMÞossible–3—wš²!ords“whic˜h“mak˜e“sense“in“that“con˜text.‘…pThe“Readline“library“pro˜vides“the“userŽ¡‘Ginš²!terface–ÿ!to“completion,‘Pand“t˜w˜o“of“the“most“common“completion“functions:‘S lename“andŽ¡‘Gusername.‘„F‘ÿeor–˜Úcompleting“other“tš²!ypMÞes“of“text,‘ÎÂy˜ou“m˜ust“write“y˜our“o˜wn“completion“function.Ž¡‘GThis–¦fsection“describMÞes“exactly“what“sucš²!h“functions“m˜ust“do,“and“pro˜vides“an“example.Ž¤’Z‘!GThere–¦fare“three“ma‘›»jor“functions“used“to“pMÞerform“completion:Ž¡‘-1.Ž‘'¿«The–èbuser-in²!terface“function“Þrl_complete‘¦f()Ý.‘£ÒThis“function“is“called“with“the“sameŽ¤ 33‘'¿«argumenš²!ts– &as“other“Readline“functions“in˜tended“for“in˜teractiv˜e“use:‘«]ácoun˜t‘J&Ýand“áin˜v˜ok-Ž¡‘'¿«ing‘¨/‰x³HøŽ‘ñ'kš²!eyÝ.‘HKIt–Éàisolates“the“w˜ord“to“bMÞe“completed“and“calls“Þcompletion_matches‘¦f()“ÝtoŽ¡‘'¿«generate–†¥a“list“of“pšMÞossible“completions.‘~™It“then“either“lists“the“p˜ossible“completions,Ž¡‘'¿«inserts–¯Gthe“pšMÞossible“completions,‘ñor“actually“p˜erforms“the“completion,‘ñdep˜ending“onŽ¡‘'¿«whic•²!h›¦fbMÞeha“vior˜is˜desired.ŽŽŸŒ‹M?Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—31ŽŽŽ ƒ3Ú ý¨ðБ-2.Ž‘'¿«The–~Øinš²!ternal“function“Þcompletion_matches‘¦f()“Ýuses“y˜our“ágenerator‘HÝfunction“to“generateŽ¤ 33‘'¿«the–Ü¢list“of“pMÞossible“matcš²!hes,‘ê1and“then“returns“the“arra˜y“of“these“matc˜hes.‘€‘Y‘ÿeou“shouldŽ¡‘'¿«place–¦fthe“address“of“y²!our“generator“function“in“Þrl_completion_entry_functionÝ.ŽŸ3Ü‘-3.Ž‘'¿«The–q‰generator“function“is“called“repMÞeatedly“from“Þcompletion_matches‘¦f()Ý,‘¤QreturningŽ¡‘'¿«a–ñÒstring“eacš²!h“time.‘À The“argumen˜ts“to“the“generator“function“are“átext‘.ÒÝand“ástateÝ.‘À átextŽ¡‘'¿«Ýis–Ùâthe“partial“w²!ord“to“bMÞe“completed.‘xQástate‘véÝis“zero“the“ rst“time“the“function“is“called,Ž¡‘'¿«alloš²!wing–Šithe“generator“to“pMÞerform“an˜y“necessary“initialization,‘and“a“pMÞositiv˜e“non-zeroŽ¡‘'¿«inš²!teger–6–for“eac˜h“subsequen˜t“call.‘ŽmWhen“the“generator“function“returns“Þ(char‘¦f*)NULLŽ¡‘'¿«Ýthis–Ñ_signals“Þcompletion_matches‘¦f()“Ýthat“there“are“no“more“pMÞossibilities“left.‘^ÈUsuallyŽ¡‘'¿«the–§^generator“function“computes“the“list“of“pMÞossible“completions“when“ástate‘DeÝis“zero,Ž¡‘'¿«and–jreturns“them“one“at“a“time“on“subsequenš²!t“calls.‘«ßEac˜h“string“the“generator“functionŽ¡‘'¿«returns–Ô¨as“a“matcš²!h“m˜ust“bšMÞe“allo˜cated“with“Þmalloc()Ý;‘ëÉReadline“frees“the“strings“whenŽ¡‘'¿«it–¦fhas“ nished“with“them.Ž©5/’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ícomplete‘yšâ(Þint–¦fignore,“int“invoking_keyâ)Ž¡‘.ùœÝComplete–¼žthe“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘ „Y‘ÿeou“ha˜v˜e“supplied“the“function“thatŽ¡‘.ùœdoMÞes–ƒœthe“initial“simple“matc²!hing“selection“algorithm“(see“Þcompletion_matchesŽ¡‘.ùœ()Ý).‘ÝÝThe–¦fdefault“is“to“do“ lename“completion.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“enÞtry‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–œÍis“a“pMÞoin²!ter“to“the“generator“function“for“Þcompletion_matches‘¦f()Ý.‘ÚªIf“theŽ¡‘.ùœv‘ÿdDalue–¸eof“Þrl_completion_entry_function“Ýis“Þ(Function‘¦f*)NULL“Ýthen“the“de-Ž¡‘.ùœfault–O lename“generator“function,–Ç Þfilename_completion_function‘¦f()Ý,“is‘Oused.ŽŸü‘GëQ2.5.2‘d(Completion‘íMF‘þÄ£unctionsŽŽŸ3Ü‘!GÝHere–¦fis“the“complete“list“of“callable“completion“functions“presen²!t“in“Readline.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícomplete‘Óõ‰ˆŠ#ØŽ“inÞternal‘yšâ(Þint‘¦fwhat_to_doâ)Ž¡‘.ùœÝComplete–l%the“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘/áwhat‘¨/‰x³HøŽ–ñ'to‘¨/‰x³HøŽ“do‘øõÝsa˜ys–l%what“to“do“with“theŽ¡‘.ùœcompletion.›µŠA‘˜·v‘ÿdDalue–˜õof“`Þ?Ý'“means“list“the“pMÞossible“completions.˜`ÞTABÝ'“meansŽ¡‘.ùœdo–bóstandard“completion.›…`Þ*Ý'“means“insert“all“of“the“pMÞossible“completions.˜`Þ!Ý'Ž¡‘.ùœmeans– to“displa²!y“all“of“the“pMÞossible“completions,›%jif“there“is“more“than“one,˜asŽ¡‘.ùœw²!ell–¦fas“pMÞerforming“partial“completion.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ícomplete‘yšâ(Þint–¦fignore,“int“invoking_keyâ)Ž¡‘.ùœÝComplete–¼žthe“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘ „Y‘ÿeou“ha˜v˜e“supplied“the“function“thatŽ¡‘.ùœdoMÞes–ƒœthe“initial“simple“matc²!hing“selection“algorithm“(see“Þcompletion_matchesŽ¡‘.ùœ()–½öÝand“Þrl_completion_entry_functionÝ).‘$The“default“is“to“do“ lename“com-Ž¡‘.ùœpletion.‘ÌøThis–s·calls“Þrl_complete_internal‘¦f()“Ýwith“an“argumen²!t“depMÞending“onŽ¡‘.ùœáin•²!v“oking‘¨/‰x³HøŽ‘ñ'k“eyÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘Z çrl‘Óõ‰ˆŠ#ØŽ–÷Ípb"ossible‘Óõ‰ˆŠ#ØŽ“completions‘yšâ(Þint–¦fcount,“int“invoking_keyâ))Ž¡‘.ùœÝList–Y the“pMÞossible“completions.›õËSee“description“of“Þrl_complete‘¦f()Ý.˜This“callsŽ¡‘.ùœÞrl_complete_internal–¦f()“Ýwith“an“argumen²!t“of“`Þ?Ý'.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinsert‘Óõ‰ˆŠ#ØŽ“completions‘yšâ(Þint–¦fcount,“int“invoking_keyâ))Ž¡‘.ùœÝInsert–Ëlthe“list“of“pMÞossible“completions“in²!to“the“line,‘T­deleting“the“partially-Ž¡‘.ùœcompleted–‘²w²!ord.›ÖöSee“description“of“Þrl_complete‘¦f()Ý.˜This“calls“Þrl_complete_Ž¡‘.ùœinternal–¦f()“Ýwith“an“argumen²!t“of“`Þ*Ý'.ŽŽŸŒ‹ W‡Ÿò‘GÝ32’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çcompletion‘Óõ‰ˆŠ#ØŽ‘÷ÍmatcÞhes‘yšâ(Þchar–¦f*text,“CPFunctionŽ¤ 33‘DG*entry_funcâ)Ž¡‘.ùœÝReturns–úPan“arraš²!y“of“Þ(char‘¦f*)“Ýwhic˜h“is“a“list“of“completions“for“átextÝ.‘¤If“there“areŽ¡‘.ùœno–ûcompletions,‘Ereturns“Þ(char‘¦f**)NULLÝ.‘ÛôThe“ rst“enš²!try“in“the“returned“arra˜yŽ¡‘.ùœis–©the“substitution“for“átextÝ.‘¯ôThe“remaining“en²!tries“are“the“pMÞossible“completions.Ž¡‘.ùœThe–¦farraš²!y“is“terminated“with“a“ÞNULL“ÝpMÞoin˜ter.ŽŸŸÊ‘.ùœáenš²!try‘¨/‰x³HøŽ‘ñ'func‘m¿Ýis–ûa“function“of“t˜w˜o“args,‘ñand“returns“a“Þ(char‘¦f*)Ý.‘’OThe“ rst“argumen˜tŽ¡‘.ùœis–<ÃátextÝ.‘º§The“second“is“a“state“argumen²!t;‘_úit“is“zero“on“the“ rst“call,‘Qäand“non-zeroŽ¡‘.ùœon–Vsubsequenš²!t“calls.‘Ã@áen˜try‘¨/‰x³HøŽ‘ñ'func‘“Ýreturns“a“ÞNULL“ÝpMÞoin˜ter“to“the“caller“when“thereŽ¡‘.ùœare–¦fno“more“matc²!hes.Ž©xø’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“ç lename‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar–¦f*text,“intŽ¡‘DGstateâ)Ž¡‘.ùœÝA‘§@generator–§‚function“for“ lename“completion“in“the“general“case.‘á1Note“thatŽ¡‘.ùœcompletion–±éin“Bash“is“a“little“di erenš²!t“bMÞecause“of“all“the“pathnames“that“m˜ustŽ¡‘.ùœbMÞe›ÿƒfollo•²!w“ed˜when˜loMÞoking˜up˜completions˜for˜a˜command.‘é3The˜Bash˜source˜isŽ¡‘.ùœa–¦fuseful“reference“for“writing“custom“completion“functions.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çusername‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar–¦f*text,“intŽ¡‘DGstateâ)Ž¡‘.ùœÝA‘= completion–=4generator“for“usernames.‘¢Fátext‘z4Ýcon²!tains“a“partial“username“pre-Ž¡‘.ùœceded–Ùqbš²!y“a“random“c˜haracter“(usually“`Þ~Ý').‘vÿAs“with“all“completion“generators,Ž¡‘.ùœástate‘CmÝis–¦fzero“on“the“ rst“call“and“non-zero“for“subsequen²!t“calls.ŽŸEÅ‘GëQ2.5.3‘d(Completion‘íMV‘þÄ£ariablesŽŽŸxø’‰ÝV‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“enÞtry‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘áKpMÞoin²!ter–áZto“the“generator“function“for“Þcompletion_matches‘¦f()Ý.‘Ž¸ÞNULL“ÝmeansŽ¡‘.ùœto–¦fuse“Þfilename_entry_function“()Ý,“the“default“ lename“completer.Ž¦’‰V‘ÿeariableŽŽ‘GèCPPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íattempted‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘í¥pMÞoinš²!ter–í¸to“an“alternativ˜e“function“to“create“matc˜hes.‘³ÒThe“function“is“calledŽ¡‘.ùœwith›œšátextÝ,–žástartÝ,“and˜áendÝ.‘Ú™ástart‘ÙšÝand˜áend‘ ìÝare˜indices˜in˜Þrl_line_buffer˜Ýsa²!yingŽ¡‘.ùœwhat–r–the“bMÞoundaries“of“átext‘¯–Ýare.‘ ! BmIf“this“function“exists“and“returns“ÞNULLÝ,Ž¡‘.ùœor–´zif“this“v›ÿdDariable“is“set“to“ÞNULLÝ,‘÷ÿthen“Þrl_complete‘¦f()“Ýwill“call“the“v˜alue“ofŽ¡‘.ùœÞrl_completion_entry_function–"6Ýto“generate“matcš²!hes,‘A*otherwise“the“arra˜y“ofŽ¡‘.ùœstrings–¦freturned“will“bMÞe“used.Ž¦’‰V‘ÿeariableŽŽ‘GèCPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quoting‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘…$pšMÞoin²!ter–…]to“a“function“that“will“quote“a“ lename“in“an“application-“sp˜eci cŽ¡‘.ùœfashion.‘ésThis–ªCis“called“if“ lename“completion“is“bMÞeing“attempted“and“one“ofŽ¡‘.ùœthe– c²!haracters“in“Þrl_filename_quote_characters“ÝappMÞears“in“a“completed“ le-Ž¡‘.ùœname.‘zThe–^šfunction“is“called“with“átextÝ,›Œ§ámatc•²!h‘¨/‰x³HøŽ‘ñ't“yp•MÞeÝ,˜and‘^šáquote‘¨/‰x³HøŽ‘ñ'p“oin²!terÝ.‘zTheŽ¡‘.ùœátext‘HKÝis– Kthe“ lename“to“bšMÞe“quoted.‘ The“ámatc•²!h‘¨/‰x³HøŽ‘ñ't“yp˜e‘¨RÝis– Keither“ÞSINGLE_MATCHÝ,‘$…ifŽ¡‘.ùœthere–Nis“only“one“completion“matc²!h,‘wïor“ÞMULT_MATCHÝ.‘Ô¿Some“functions“use“thisŽ¡‘.ùœto–Jdecide“whether“or“not“to“insert“a“closing“quote“cš²!haracter.‘¿The“áquote‘¨/‰x³HøŽ‘ñ'pMÞoin˜terŽ¡‘.ùœÝis–¹Öa“pMÞoinš²!ter“to“an˜y“opMÞening“quote“c˜haracter“the“user“t˜ypMÞed.‘,Some“functionsŽ¡‘.ùœcš²!hoMÞose–¦fto“reset“this“c˜haracter.ŽŽŸŒ‹!gìŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—33ŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘GèCPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“dequoting‘Óõ‰ˆŠ#ØŽ“functionŽ¤ 33‘.ùœÝA‘>êpMÞoinš²!ter–?to“a“function“that“will“remo˜v˜e“application-spMÞeci c“quoting“c˜haractersŽ¡‘.ùœfrom–ca“ lename“bMÞefore“completion“is“attempted,‘|aso“those“c²!haracters“do“notŽ¡‘.ùœinš²!terfere–eKwith“matc˜hing“the“text“against“names“in“the“ lesystem.‘ŒIt“is“calledŽ¡‘.ùœwith–UwátextÝ,›:the“text“of“the“w²!ord“to“bMÞe“dequoted,˜and“áquote‘¨/‰x³HøŽ‘ñ'c•²!harÝ,˜whic“h–Uwis“theŽ¡‘.ùœquoting–cš²!haracter“that“delimits“the“ lename“(usually“`Þ'Ý'“or“`Þ"Ý').‘ê¹If“áquote‘¨/‰x³HøŽ‘ñ'c˜harŽ¡‘.ùœÝis–¦fzero,“the“ lename“wš²!as“not“in“an“em˜bMÞedded“string.Ž©»’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcÞhar‘Óõ‰ˆŠ#ØŽ“is‘Óõ‰ˆŠ#ØŽ“quoted‘Óõ‰ˆŠ#ØŽ“pŽ¡‘.ùœÝA‘Ë2pšMÞoin²!ter–Ë;to“a“function“to“call“that“determines“whether“or“not“a“sp˜eci c“c²!har-Ž¡‘.ùœacter–üin“the“line“bu er“is“quoted,‘6according“to“whatevš²!er“quoting“mec˜hanism“theŽ¡‘.ùœprogram–2+calling“readline“uses.‘·The“function“is“called“with“t•²!w“o‘2+argumen“ts:‘£ÀátextÝ,Ž¡‘.ùœthe–­¹text“of“the“line,›ßuand“áindexÝ,˜the“index“of“the“c²!haracter“in“the“line.‘ŠùIt“is“used“toŽ¡‘.ùœdecide–dBwhether“a“c²!haracter“found“in“Þrl_completer_word_break_charactersŽ¡‘.ùœÝshould–¦fbMÞe“used“to“break“w²!ords“for“the“completer.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“query‘Óõ‰ˆŠ#ØŽ“itemsŽ¡‘.ùœÝUp–ìŸto“this“manš²!y“items“will“bMÞe“displa˜y˜ed“in“respšMÞonse“to“a“p˜ossible-completionsŽ¡‘.ùœcall.‘…After–óthat,‘ Vwš²!e“ask“the“user“if“she“is“sure“she“w˜an˜ts“to“see“them“all.‘…TheŽ¡‘.ùœdefault–¦fv‘ÿdDalue“is“100.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íbasic‘Óõ‰ˆŠ#ØŽ“wšÞord‘Óõ‰ˆŠ#ØŽ“break‘Óõ‰ˆŠ#ØŽ“c˜haractersŽ¡‘.ùœÝThe–-basic“list“of“cš²!haracters“that“signal“a“break“bMÞet˜w˜een“w˜ords“for“the“completerŽ¡‘.ùœroutine.‘ßåThe–§default“v›ÿdDalue“of“this“v˜ariable“is“the“cš²!haracters“whic˜h“break“w˜ordsŽ¡‘.ùœfor–¦fcompletion“in“Bash,“i.e.,“Þ"“\t\n\"\\'`@$><=;|&{("Ý.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íbasic‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¡‘.ùœÝList–¦fof“quote“cš²!haracters“whic˜h“can“cause“a“w˜ord“break.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompleter‘Óõ‰ˆŠ#ØŽ“wšÞord‘Óõ‰ˆŠ#ØŽ“break‘Óõ‰ˆŠ#ØŽ“c˜haractersŽ¡‘.ùœÝThe–.½list“of“cš²!haracters“that“signal“a“break“bMÞet˜w˜een“w˜ords“for“Þrl_complete_Ž¡‘.ùœinternal‘¦f()Ý.‘v The–nïdefault“list“is“the“v‘ÿdDalue“of“Þrl_basic_word_break_charactersÝ.‘èUŸ ! ¯„¥YŽ¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompleter‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¡‘.ùœÝList–˜"of“cš²!haracters“whic˜h“can“bMÞe“used“to“quote“a“substring“of“the“line.‘ƒÇCompletionŽ¡‘.ùœoMÞccurs–Çron“the“en²!tire“substring,‘ϵand“within“the“substring“Þrl_completer_word_Ž¡‘.ùœbreak_characters–ŒaÝare“treated“as“anš²!y“other“c˜haracter,‘‘•unless“they“also“appMÞearŽ¡‘.ùœwithin–¦fthis“list.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¡‘.ùœÝA‘Å£list–Å«of“cš²!haracters“that“cause“a“ lename“to“bMÞe“quoted“b˜y“the“completer“whenŽ¡‘.ùœthey–¦fappMÞear“in“a“completed“ lename.‘ÝÝThe“default“is“the“n²!ull“string.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íspb"ecial‘Óõ‰ˆŠ#ØŽ“pre xesŽ¡‘.ùœÝThe–L>list“of“cš²!haracters“that“are“w˜ord“break“c˜haracters,‘^Fbut“should“bMÞe“left“in“átextŽ¡‘.ùœÝwhen–nãit“is“passed“to“the“completion“function.‘7UPrograms“can“use“this“to“helpŽ¡‘.ùœdetermine–„úwhat“kind“of“completing“to“do.‘Ò¹F‘ÿeor“instance,‘‹ªBash“sets“this“v‘ÿdDariableŽ¡‘.ùœto–¦fÞ"Ý$Þ@"“Ýso“that“it“can“complete“shell“v‘ÿdDariables“and“hostnames.ŽŽŸŒ‹"wŽŸò‘GÝ34’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“appb"end‘Óõ‰ˆŠ#ØŽ“cÞharacterŽ¤ 33‘.ùœÝWhen–e¦a“single“completion“alternativš²!e“matc˜hes“at“the“end“of“the“command“line,Ž¡‘.ùœthis–xc²!haracter“is“appMÞended“to“the“inserted“completion“text.‘ÃThe“default“is“aŽ¡‘.ùœspace–P©cš²!haracter“(`‘¦f').‘ÁISetting“this“to“the“n˜ull“c˜haracter“(`Þ\0Ý')“prev˜en˜ts“an˜ythingŽ¡‘.ùœb•MÞeing›e9app“ended˜automatically‘ÿe.‘ ! WThis˜can˜b“e˜c²!hanged˜in˜custom˜completionŽ¡‘.ùœfunctions–^îto“proš²!vide“the“\most“sensible“w˜ord“separator“c˜haracter"“according“toŽ¡‘.ùœan–¦fapplication-spšMÞeci c“command“line“syn²!tax“sp˜eci cation.Ž©ý‘’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íignore‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“duplicatesŽ¡‘.ùœÝIf–¦fnon-zero,“then“disalloš²!w“duplicates“in“the“matc˜hes.‘ÝÝDefault“is“1.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“desiredŽ¡‘.ùœÝNon-zero–¥îmeans“that“the“results“of“the“matc²!hes“are“to“bMÞe“treated“as“ lenames.Ž¡‘.ùœThis–ÐÄis“áalw•²!a“ys‘DFÝzero–ÐÄon“enš²!try‘ÿe,‘û~and“can“only“bMÞe“c˜hanged“within“a“completion“en˜tryŽ¡‘.ùœgenerator–/ófunction.‘¶aIf“it“is“set“to“a“non-zero“v‘ÿdDalue,‘G¤directory“names“ha•²!v“e–/óa“slashŽ¡‘.ùœappMÞended–³and“Readline“attempts“to“quote“completed“ lenames“if“they“con²!tainŽ¡‘.ùœan•²!y›¦fem“bMÞedded˜w“ord˜break˜c“haracters.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quoting‘Óõ‰ˆŠ#ØŽ“desiredŽ¡‘.ùœÝNon-zero–Å­means“that“the“results“of“the“matc²!hes“are“to“bMÞe“quoted“using“doubleŽ¡‘.ùœquotes–Õ6(or“an“application-spMÞeci c“quoting“mec²!hanism)“if“the“completed“ lenameŽ¡‘.ùœcon•²!tains›ò[an“y˜c“haracters˜in˜Þrl_filename_quote_charsÝ.‘¡ÙThis˜is˜áalw“a“ys‘eÝÝnon-zeroŽ¡‘.ùœon–¬renš²!try‘ÿe,‘Þoand“can“only“bMÞe“c˜hanged“within“a“completion“en˜try“generator“function.Ž¡‘.ùœThe–åpquoting“is“e ected“via“a“call“to“the“function“pMÞoinš²!ted“to“b˜y“Þrl_filename_Ž¡‘.ùœquoting_functionÝ.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinhibit‘Óõ‰ˆŠ#ØŽ“completionŽ¡‘.ùœÝIf–pthis“v‘ÿdDariable“is“non-zero,‘zæcompletion“is“inhibitÞ<Ýed.‘˽The“completion“c²!haracterŽ¡‘.ùœwill–¦fbšMÞe“inserted“as“an²!y“other“b˜ound“to“Þself-insertÝ.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íignore‘Óõ‰ˆŠ#ØŽ“some‘Óõ‰ˆŠ#ØŽ“completions‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–ivfunction,›u¦if“de ned,˜is“called“b²!y“the“completer“when“real“ lename“comple-Ž¡‘.ùœtion–ydis“done,‘®#after“all“the“matcš²!hing“names“ha˜v˜e“bMÞeen“generated.‘VÖIt“is“passedŽ¡‘.ùœa–ËrÞNULL“Ýterminated“arraš²!y“of“matc˜hes.‘MThe“ rst“elemen˜t“(Þmatches[0]Ý)“is“theŽ¡‘.ùœmaximal–dªsubstring“common“to“all“matc²!hes.‘©This“function“can“re-arrange“theŽ¡‘.ùœlist–L@of“matcš²!hes“as“required,‘u·but“eac˜h“elemen˜t“deleted“from“the“arra˜y“m˜ust“bMÞeŽ¡‘.ùœfreed.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ídirectory‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“hob"okŽ¡‘.ùœÝThis–åfunction,›3˜if“de ned,˜is“allo•²!w“ed–åto“mošMÞdify“the“directory“p˜ortion“of“ lenamesŽ¡‘.ùœReadline–ƒÐcompletes.‘ÒVIt“is“called“with“the“address“of“a“string“(the“curren²!t“direc-Ž¡‘.ùœtory–Š~name)“as“an“argumenš²!t.‘ÔIt“could“bMÞe“used“to“expand“sym˜bMÞolic“links“or“shellŽ¡‘.ùœv‘ÿdDariables–¦fin“pathnames.ŽŸÊ^‘GëQ2.5.4‘d(A–íMShort“Completion“ExampleŽŽŸËý‘!GÝHere–q}is“a“small“application“demonstrating“the“use“of“the“GNU‘q/Readline“library‘ÿe.‘våIt“is“calledŽ¡‘GÞfilemanÝ,‘lGand–D´the“source“coMÞde“resides“in“`Þexamples/fileman.cÝ'.‘¸ÆThis“sample“applicationŽ¡‘Gpro²!vides–#þcompletion“of“command“names,›>line“editing“features,˜and“access“to“the“history“list.ŽŽŸŒ‹#‡`Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—35ŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ/*–¿ªfileman.c“--“A“tiny“application“which“demonstrates“how“to“use“theŽ¤ €‘@8šGNU–¿ªReadline“library.‘ TThis“application“interactively“allows“usersŽ¡‘@8što–¿ªmanipulate“files“and“their“modes.“*/Ž©‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœextern–¿ªchar“*getwd“();Ž¡‘.ùœextern–¿ªchar“*xmalloc“();Ž¦‘.ùœ/*–¿ªThe“names“of“functions“that“actually“do“the“manipulation.“*/Ž¡‘.ùœint–¿ªcom_list“(),“com_view“(),“com_rename“(),“com_stat“(),“com_pwd“();Ž¡‘.ùœint–¿ªcom_delete“(),“com_help“(),“com_cd“(),“com_quit“();Ž¦‘.ùœ/*–¿ªA“structure“which“contains“information“on“the“commands“this“programŽ¡‘@8šcan–¿ªunderstand.“*/Ž¦‘.ùœtypedef–¿ªstruct“{Ž¡‘:xðchar–¿ª*name;“/*“User“printable“name“of“the“function.“*/Ž¡‘:xðFunction–¿ª*func;“/*“Function“to“call“to“do“the“job.“*/Ž¡‘:xðchar–¿ª*doc;“/*“Documentation“for“this“function.‘ T*/Ž¡‘.ùœ}‘¿ªCOMMAND;Ž¦‘.ùœCOMMAND–¿ªcommands[]“=“{Ž¡‘:xð{–¿ª"cd",“com_cd,“"Change“to“directory“DIR"“},Ž¡‘:xð{–¿ª"delete",“com_delete,“"Delete“FILE"“},Ž¡‘:xð{–¿ª"help",“com_help,“"Display“this“text"“},Ž¡‘:xð{–¿ª"?",“com_help,“"Synonym“for“`help'"“},Ž¡‘:xð{–¿ª"list",“com_list,“"List“files“in“DIR"“},Ž¡‘:xð{–¿ª"ls",“com_list,“"Synonym“for“`list'"“},Ž¡‘:xð{–¿ª"pwd",“com_pwd,“"Print“the“current“working“directory"“},Ž¡‘:xð{–¿ª"quit",“com_quit,“"Quit“using“Fileman"“},Ž¡‘:xð{–¿ª"rename",“com_rename,“"Rename“FILE“to“NEWNAME"“},Ž¡‘:xð{–¿ª"stat",“com_stat,“"Print“out“statistics“on“FILE"“},Ž¡‘:xð{–¿ª"view",“com_view,“"View“the“contents“of“FILE"“},Ž¡‘:xð{–¿ª(char“*)NULL,“(Function“*)NULL,“(char“*)NULL“}Ž¡‘.ùœ};Ž¦‘.ùœ/*–¿ªForward“declarations.“*/Ž¡‘.ùœchar–¿ª*stripwhite“();Ž¡‘.ùœCOMMAND–¿ª*find_command“();ŽŽŸŒ‹$–¼Ÿò‘GÝ36’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ/*–¿ª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.“*/Ÿnï„ ! ™Ž¡‘.ùœint‘¿ªdone;Ž¦‘.ùœchar‘¿ª*Ž¡‘.ùœdupstr‘¿ª(s)Ž¡‘K·îint‘¿ªs;Ž¡‘.ùœ{Ž¡‘:xðchar‘¿ª*r;Ž¦‘:xðr–¿ª=“xmalloc“(strlen“(s)“+“1);Ž¡‘:xðstrcpy–¿ª(r,“s);Ž¡‘:xðreturn‘¿ª(r);Ž¡‘.ùœ}Ž¦‘.ùœmain–¿ª(argc,“argv)Ž¡‘K·îint‘¿ªargc;Ž¡‘K·îchar‘¿ª**argv;Ž¡‘.ùœ{Ž¡‘:xðchar–¿ª*line,“*s;Ž¦‘:xðprogname–¿ª=“argv[0];Ž¦‘:xðinitialize_readline–¿ª();“/*“Bind“our“completer.“*/Ž¦‘:xð/*–¿ªLoop“reading“and“executing“lines“until“the“user“quits.“*/Ž¡‘:xðfor–¿ª(“;“done“==“0;“)Ž¡‘EøD{Ž¡‘Qw˜line–¿ª=“readline“("FileMan:“");Ž¦‘Qw˜if‘¿ª(!line)Ž¡‘\öìbreak;Ž¦‘Qw˜/*–¿ªRemove“leading“and“trailing“whitespace“from“the“line.Ž¡‘b¶–Then,–¿ªif“there“is“anything“left,“add“it“to“the“history“listŽ¡‘b¶–and–¿ªexecute“it.“*/Ž¡‘Qw˜s–¿ª=“stripwhite“(line);Ž¦‘Qw˜if‘¿ª(*s)Ž¡‘\öì{Ž¡‘hv@add_history‘¿ª(s);Ž¡‘hv@execute_line‘¿ª(s);Ž¡‘\öì}Ž¦‘Qw˜free‘¿ª(line);Ž¡‘EøD}ŽŽŸŒ‹%ž›Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—37ŽŽŽ ƒ3Ú ý¨ðБ:xðÞexit‘¿ª(0);Ž¤ €‘.ùœ}Ž©‘.ùœ/*–¿ªExecute“a“command“line.“*/Ž¡‘.ùœintŽ¡‘.ùœexecute_line‘¿ª(line)Ž¡‘K·îchar‘¿ª*line;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“i;Ž¡‘:xðCOMMAND‘¿ª*command;Ž¡‘:xðchar‘¿ª*word;Ž¦‘:xð/*–¿ªIsolate“the“command“word.“*/Ž¡‘:xði–¿ª=“0;Ž¡‘:xðwhile–¿ª(line[i]“&&“whitespace“(line[i]))Ž¡‘EøDi++;Ž¡‘:xðword–¿ª=“line“+“i;Ž¦‘:xðwhile–¿ª(line[i]“&&“!whitespace“(line[i]))Ž¡‘EøDi++;Ž¦‘:xðif‘¿ª(line[i])Ž¡‘EøDline[i++]–¿ª=“'\0';Ž¦‘:xðcommand–¿ª=“find_command“(word);Ž¦‘:xðif‘¿ª(!command)Ž¡‘EøD{Ž¡‘Qw˜fprintf–¿ª(stderr,“"%s:“No“such“command“for“FileMan.\n",“word);Ž¡‘Qw˜return‘¿ª(-1);Ž¡‘EøD}Ž¦‘:xð/*–¿ªGet“argument“to“command,“if“any.“*/Ž¡‘:xðwhile–¿ª(whitespace“(line[i]))Ž¡‘EøDi++;Ž¦‘:xðword–¿ª=“line“+“i;Ž¦‘:xð/*–¿ªCall“the“function.“*/Ž¡‘:xðreturn–¿ª((*(command->func))“(word));Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªLook“up“NAME“as“the“name“of“a“command,“and“return“a“pointer“to“thatŽ¡‘@8šcommand.‘ TReturn–¿ªa“NULL“pointer“if“NAME“isn't“a“command“name.“*/Ž¡‘.ùœCOMMAND‘¿ª*Ž¡‘.ùœfind_command‘¿ª(name)Ž¡‘K·îchar‘¿ª*name;Ž¡‘.ùœ{ŽŽŸŒ‹&£-Ÿò‘GÝ38’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ:xðÞregister–¿ªint“i;Ž©‘:xðfor–¿ª(i“=“0;“commands[i].name;“i++)Ž¤ €‘EøDif–¿ª(strcmp“(name,“commands[i].name)“==“0)Ž¡‘Qw˜return‘¿ª(&commands[i]);Ž¦‘:xðreturn–¿ª((COMMAND“*)NULL);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªStrip“whitespace“from“the“start“and“end“of“STRING.‘ TReturn“a“pointerŽ¡‘@8šinto–¿ªSTRING.“*/Ž¡‘.ùœchar‘¿ª*Ž¡‘.ùœstripwhite‘¿ª(string)Ž¡‘K·îchar‘¿ª*string;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªchar“*s,“*t;Ž¦‘:xðfor–¿ª(s“=“string;“whitespace“(*s);“s++)Ž¡‘EøD;Ž¦‘:xðif–¿ª(*s“==“0)Ž¡‘EøDreturn‘¿ª(s);Ž¦‘:xðt–¿ª=“s“+“strlen“(s)“-“1;Ž¡‘:xðwhile–¿ª(t“>“s“&&“whitespace“(*t))Ž¡‘EøDt--;Ž¡‘:xð*++t–¿ª=“'\0';Ž¦‘:xðreturn‘¿ªs;Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ª****************************************************************“*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*‘gyôInterface–¿ªto“Readline“Completion‘[ú */Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*–¿ª****************************************************************“*/Ž¦‘.ùœchar–¿ª*command_generator“();Ž¡‘.ùœchar–¿ª**fileman_completion“();Ž¦‘.ùœ/*–¿ªTell“the“GNU“Readline“library“how“to“complete.‘ TWe“want“to“try“to“completeŸnï„ ! ™Ž¡‘@8šon–¿ªcommand“names“if“this“is“the“first“word“in“the“line,“or“on“filenamesŸ…T„6eŽ¡‘@8šif–¿ªnot.“*/Ž¡‘.ùœinitialize_readline‘¿ª()Ž¡‘.ùœ{Ž¡‘:xð/*–¿ªAllow“conditional“parsing“of“the“~/.inputrc“file.“*/Ž¡‘:xðrl_readline_name–¿ª=“"FileMan";ŽŽŸŒ‹'§èŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—39ŽŽŽ ƒ3Ú ý¨ðБ:xðÞ/*–¿ªTell“the“completer“that“we“want“a“crack“first.“*/Ž¤ €‘:xðrl_attempted_completion_function–¿ª=“(CPPFunction“*)fileman_completion;Ž¡‘.ùœ}Ž©‘.ùœ/*–¿ªAttempt“to“complete“on“the“contents“of“TEXT.‘ TSTART“and“END“bound“theŽ¡‘@8šregion–¿ªof“rl_line_buffer“that“contains“the“word“to“complete.‘ TTEXT“isŽ¡‘@8šthe–¿ªword“to“complete.‘ TWe“can“use“the“entire“contents“of“rl_line_bufferŸnï„ Ž¡‘@8šin–¿ªcase“we“want“to“do“some“simple“parsing.‘ TReturn“the“array“of“matches,Ÿnï„ Ž¡‘@8šor–¿ªNULL“if“there“aren't“any.“*/Ž¡‘.ùœchar‘¿ª**Ž¡‘.ùœfileman_completion–¿ª(text,“start,“end)Ž¡‘K·îchar‘¿ª*text;Ž¡‘K·îint–¿ªstart,“end;Ž¡‘.ùœ{Ž¡‘:xðchar‘¿ª**matches;Ž¦‘:xðmatches–¿ª=“(char“**)NULL;Ž¦‘:xð/*–¿ªIf“this“word“is“at“the“start“of“the“line,“then“it“is“a“commandŽ¡‘K·îto–¿ªcomplete.‘ TOtherwise“it“is“the“name“of“a“file“in“the“currentŽ¡‘K·îdirectory.‘¿ª*/Ž¡‘:xðif–¿ª(start“==“0)Ž¡‘EøDmatches–¿ª=“completion_matches“(text,“command_generator);Ž¦‘:xðreturn‘¿ª(matches);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªGenerator“function“for“command“completion.‘ TSTATE“lets“us“know“whetherŸnï„ ™Ž¡‘@8što–¿ªstart“from“scratch;“without“any“state“(i.e.“STATE“==“0),“then“weŽ¡‘@8šstart–¿ªat“the“top“of“the“list.“*/Ž¡‘.ùœchar‘¿ª*Ž¡‘.ùœcommand_generator–¿ª(text,“state)Ž¡‘K·îchar‘¿ª*text;Ž¡‘K·îint‘¿ªstate;Ž¡‘.ùœ{Ž¡‘:xðstatic–¿ªint“list_index,“len;Ž¡‘:xðchar‘¿ª*name;Ž¦‘:xð/*–¿ªIf“this“is“a“new“word“to“complete,“initialize“now.‘ TThis“includesŽ¡‘K·îsaving–¿ªthe“length“of“TEXT“for“efficiency,“and“initializing“the“indexŸnï„ Ž¡‘K·îvariable–¿ªto“0.“*/Ž¡‘:xðif‘¿ª(!state)Ž¡‘EøD{Ž¡‘Qw˜list_index–¿ª=“0;Ž¡‘Qw˜len–¿ª=“strlen“(text);Ž¡‘EøD}Ž¦‘:xð/*–¿ªReturn“the“next“name“which“partially“matches“from“the“command“list.“*/Ÿnï„ ! ™ŽŽŸŒ‹(­‡Ÿò‘GÝ40’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ:xðÞwhile–¿ª(name“=“commands[list_index].name)Ž¤ €‘EøD{Ž¡‘Qw˜list_index++;Ž©‘Qw˜if–¿ª(strncmp“(name,“text,“len)“==“0)Ž¡‘\öìreturn‘¿ª(dupstr(name));Ž¡‘EøD}Ž¦‘:xð/*–¿ªIf“no“names“matched,“then“return“NULL.“*/Ž¡‘:xðreturn–¿ª((char“*)NULL);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ª****************************************************************“*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*’„8FFileMan‘¿ªCommands’›6î*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*–¿ª****************************************************************“*/Ž¦‘.ùœ/*–¿ªString“to“pass“to“system“().‘ TThis“is“for“the“LIST,“VIEW“and“RENAMEŽ¡‘@8šcommands.‘¿ª*/Ž¡‘.ùœstatic–¿ªchar“syscom[1024];Ž¦‘.ùœ/*–¿ªList“the“file(s)“named“in“arg.“*/Ž¡‘.ùœcom_list‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif‘¿ª(!arg)Ž¡‘EøDarg–¿ª=“"";Ž¦‘:xðsprintf–¿ª(syscom,“"ls“-FClg“%s",“arg);Ž¡‘:xðreturn–¿ª(system“(syscom));Ž¡‘.ùœ}Ž¦‘.ùœcom_view‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(!valid_argument“("view",“arg))Ž¡‘EøDreturn‘¿ª1;Ž¦‘:xðsprintf–¿ª(syscom,“"more“%s",“arg);Ž¡‘:xðreturn–¿ª(system“(syscom));Ž¡‘.ùœ}Ž¦‘.ùœcom_rename‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðtoo_dangerous‘¿ª("rename");Ž¡‘:xðreturn‘¿ª(1);ŽŽŸŒ‹)µ Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—41ŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ}Ž©‘.ùœcom_stat‘¿ª(arg)Ž¤ €‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðstruct–¿ªstat“finfo;Ž¦‘:xðif–¿ª(!valid_argument“("stat",“arg))Ž¡‘EøDreturn‘¿ª(1);Ž¦‘:xðif–¿ª(stat“(arg,“&finfo)“==“-1)Ž¡‘EøD{Ž¡‘Qw˜perror‘¿ª(arg);Ž¡‘Qw˜return‘¿ª(1);Ž¡‘EøD}Ž¦‘:xðprintf–¿ª("Statistics“for“`%s':\n",“arg);Ž¦‘:xðprintf–¿ª("%s“has“%d“link%s,“and“is“%d“byte%s“in“length.\n",“arg,Ž¡‘hv@finfo.st_nlink,Ž¡‘hv@(finfo.st_nlink–¿ª==“1)“?“""“:“"s",Ž¡‘hv@finfo.st_size,Ž¡‘hv@(finfo.st_size–¿ª==“1)“?“""“:“"s");Ž¡‘:xðprintf–¿ª("Inode“Last“Change“at:“%s",“ctime“(&finfo.st_ctime));Ž¡‘:xðprintf–¿ª("‘"}üLast“access“at:“%s",“ctime“(&finfo.st_atime));Ž¡‘:xðprintf–¿ª("‘þ¨Last“modified“at:“%s",“ctime“(&finfo.st_mtime));Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœcom_delete‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðtoo_dangerous‘¿ª("delete");Ž¡‘:xðreturn‘¿ª(1);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªPrint“out“help“for“ARG,“or“for“all“of“the“commands“if“ARG“isŽ¡‘@8šnot–¿ªpresent.“*/Ž¡‘.ùœcom_help‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“i;Ž¡‘:xðint–¿ªprinted“=“0;Ž¦‘:xðfor–¿ª(i“=“0;“commands[i].name;“i++)Ž¡‘EøD{Ž¡‘Qw˜if–¿ª(!*arg“||“(strcmp“(arg,“commands[i].name)“==“0))Ž¡‘\öì{ŽŽŸŒ‹*º Ÿò‘GÝ42’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБhv@Þprintf–¿ª("%s\t\t%s.\n",“commands[i].name,“commands[i].doc);Ž¤ €‘hv@printed++;Ž¡‘\öì}Ž¡‘EøD}Ž©‘:xðif‘¿ª(!printed)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("No“commands“match“`%s'.‘ TPossibilties“are:\n",“arg);Ž¦‘Qw˜for–¿ª(i“=“0;“commands[i].name;“i++)Ž¡‘\öì{Ž¡‘hv@/*–¿ªPrint“in“six“columns.“*/Ž¡‘hv@if–¿ª(printed“==“6)Ž¡‘sõ”{Ž¡‘tèprinted–¿ª=“0;Ž¡‘tèprintf‘¿ª("\n");Ž¡‘sõ”}Ž¦‘hv@printf–¿ª("%s\t",“commands[i].name);Ž¡‘hv@printed++;Ž¡‘\öì}Ž¦‘Qw˜if‘¿ª(printed)Ž¡‘\öìprintf‘¿ª("\n");Ž¡‘EøD}Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªChange“to“the“directory“ARG.“*/Ž¡‘.ùœcom_cd‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(chdir“(arg)“==“-1)Ž¡‘EøD{Ž¡‘Qw˜perror‘¿ª(arg);Ž¡‘Qw˜return‘¿ª1;Ž¡‘EøD}Ž¦‘:xðcom_pwd‘¿ª("");Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªPrint“out“the“current“working“directory.“*/Ž¡‘.ùœcom_pwd‘¿ª(ignore)Ž¡‘K·îchar‘¿ª*ignore;Ž¡‘.ùœ{Ž¡‘:xðchar–¿ªdir[1024],“*s;ŽŽŸŒ‹+¿2Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—43ŽŽŽ ƒ3Ú ý¨ðБ:xðÞs–¿ª=“getwd“(dir);Ž¤ €‘:xðif–¿ª(s“==“0)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("Error“getting“pwd:“%s\n",“dir);Ž¡‘Qw˜return‘¿ª1;Ž¡‘EøD}Ž©‘:xðprintf–¿ª("Current“directory“is“%s\n",“dir);Ž¡‘:xðreturn‘¿ª0;Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªThe“user“wishes“to“quit“using“this“program.‘ TJust“set“DONE“non-zero.“*/Ÿnï„ ™Ž¡‘.ùœcom_quit‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðdone–¿ª=“1;Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªFunction“which“tells“you“that“you“can't“do“this.“*/Ž¡‘.ùœtoo_dangerous‘¿ª(caller)Ž¡‘K·îchar‘¿ª*caller;Ž¡‘.ùœ{Ž¡‘:xðfprintf‘¿ª(stderr,Ž¡‘n5ê"%s:–¿ªToo“dangerous“for“me“to“distribute.‘ TWrite“it“yourself.\n",Ÿnï„ ! ™Ž¡‘n5êcaller);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªReturn“non-zero“if“ARG“is“a“valid“argument“for“CALLER,“else“printŽ¡‘@8šan–¿ªerror“message“and“return“zero.“*/Ž¡‘.ùœintŽ¡‘.ùœvalid_argument–¿ª(caller,“arg)Ž¡‘K·îchar–¿ª*caller,“*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(!arg“||“!*arg)Ž¡‘EøD{Ž¡‘Qw˜fprintf–¿ª(stderr,“"%s:“Argument“required.\n",“caller);Ž¡‘Qw˜return‘¿ª(0);Ž¡‘EøD}Ž¦‘:xðreturn‘¿ª(1);Ž¡‘.ùœ}ŽŽŸŒ‹,Ã4Ÿò‘GÝ44’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3ÚŸŒ‹-ÇÍŸò‘GÝConcept‘¦fIndex’`¶)45ŽŽŽ ƒ3Ú ý¨ðБGêConcept‘z³IndexŽŽ ¶\( ÿt‘GëHCŽ¤‘Góo´‹Ç cmr9¬command‘Tediting‘ar‘ÅUó"”q[˜ cmsl9Í.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘“,¬1Ž©‘GëHEŽ¡‘G¬editing–Tcommand“lines‘¥‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘J`¬1Ž¦‘GëHIŽ¡‘G¬initialization–T le,“readline‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Mج3ŽŸ ‘Gin¾9teraction,‘Treadline‘ÿ«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 1f¬1Ž¦‘GëHKŽ¡‘G¬kill‘Tring‘ª‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 5e¬2ŽŽ ÿt’óáðkilling‘Ttext‘å‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ º¬2Ž¤ ª«’óáðëHNŽ©’óáð¬notation,‘Treadline‘™‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ê»¬1Ž¡’óáðëHRŽ¦’óáð¬readline,‘Tfunction‘¹ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘러19Ž¡’óáðëHYŽ¦’óáð¬y¾9anking‘Ttext‘œ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Í׬2ŽŽŽŽŸŒ‹.È1Ÿò‘GÝ46’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3ÚŸŒ‹/ÓŸò‘GÝF›ÿeunction–¦fand“V˜ariable“Index’œÃ47ŽŽŽ ƒ3Ú ý¨ðБGêF›þaGunction–z³and“V˜ariable“IndexŽŽ W0 ýÏðБGëH(Ž¤‘GóߤN cmtt9É(int‘ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ %ì27Ž©ƒÌ‘GëHAŽ¡‘GÉabort‘T(C-g)‘ $‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ñ߬15Ž¤ ‘GÉaccept-line–T(Newline,“Return)_‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘:¬11Ž¡‘GÉalphabetic–‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘NQ¬28Ž¦‘GëHBŽŸ‘GÉbackward-char‘T(C-b)9Ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k¬11Ž¡‘GÉbackward-delete-char‘T(Rubout)‘Dv‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘v1¬12Ž¡‘GÉbackward-kill-line–T(C-x“Rubout)‘yq‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘«,¬13Ž¡‘GÉbackward-kill-word‘T(M-DEL)!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬14Ž¡‘GÉbackward-word‘T(M-b)9Ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k¬11Ž¡‘GÉbeginning-of-history‘T(M-<)!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬11Ž¡‘GÉbeginning-of-line‘T(C-a)‘ °‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘?k¬11Ž¡‘GbAÇell-st¾9yle‘½‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘îѬ4Ž¦‘GëHCŽŸ‘GÉcall-last-kbd-macro–T(C-x“e)‘¥…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×@¬15Ž¡‘GÉcapitalize-word‘T(M-c)‘ªÖ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ü‘¬13Ž¡‘GÉcharacter-search‘T(C-])‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬16Ž¡‘GÉcharacter-search-backward‘T(M-C-]) ! *‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘;å¬16Ž¡‘GÉclear-screen‘T(C-l)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡‘Gcommen¾9t-bAÇegin‘a‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘’»¬4Ž¡‘GÉcomplete‘T(TAB)‘£‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ô^¬15Ž¡‘Gcompletion-query-items‘WP‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‰ ¬4Ž¡‘GÉcompletion‘‘$‰c4ÕÂŽ‘fæmatches_Ž‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‘I¬32Ž¡‘Gcon•¾9v“ert-meta‘Á‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ò»¬4Ž¡‘GÉcopy-backward-word‘T()‘ªÖ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ü‘¬14Ž¡‘GÉcopy-forward-word‘T()‘ùi‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ +$¬14Ž¡‘GÉcopy-region-as-kill‘T()‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬14Ž¦‘GëHDŽŸ‘GÉdelete-char‘T(C-d)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬12Ž¡‘GÉdelete-horizontal-space‘T()!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬14Ž¡‘GÉdigit-argument–T(M-0,“M-1,“...“M--)#‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘U}¬14Ž¡‘GÉdigit‘‘$‰c4ÕÂŽ‘fæp‘±§‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãb¬28Ž¡‘GÉdigit‘‘$‰c4ÕÂŽ‘fævaluew[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘©¬28Ž¡‘GÉding‘ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ %ì28Ž¡‘Gdisable-completion‘ÖÞ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘™¬5Ž¡‘GÉdo-uppercase-version–T(M-a,“M-b,“M-ÍxÉ,“ó5ùž" cmmi9²:–Šª:“:Ž‘ ßúÉ)‘¨ì‘ÅUÍ.Ž‘p‘ÅU.Ž‘Ú¦¬16Ž¡‘GÉdowncase-word‘T(M-l)9Ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k¬13Ž¡‘GÉdump-functions‘T()‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉdump-macros‘T()‘£‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ô^¬16Ž¡‘GÉdump-variables‘T()‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16ŽŽ ýÏðÐ’óáðëHEŽ©’óáð¬editing-moAÇde‘ë‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘õe¬5Ž¤ ’óáðenable-k¾9eypad‘r‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘³-¬5Ž¡’óáðÉend-kbd-macro–T(C-x“))n¿‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ z¬15Ž¡’óáðÉend-of-history‘T(M->)‘ùi‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ +$¬12Ž¡’óáðÉend-of-line‘T(C-e)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬11Ž¡’óáðÉexchange-point-and-mark–T(C-x“C-x)‘ÜK‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬16Ž¡’óáðexpand-tilde‘þV‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘0¬5ŽŸKP’óáðëHFŽ¦’óáðÉfilename‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“function`‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘7¬32Ž¡’óáðÉforward-char‘T(C-f)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡’óáðÉforward-search-history‘T(C-s)‘“ ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ÄĬ12Ž¡’óáðÉforward-word‘T(M-f)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡’óáðÉfree‘‘$‰c4ÕÂŽ–fæundo‘‘$‰c4ÕÂŽ“list4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬26ŽŸKP’óáðëHHŽ¦’óáðÉhistory-search-backward‘T()!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬12Ž¡’óáðÉhistory-search-forward‘T()pŠ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¢E¬12Ž¡’óáðhorizon¾9tal-scroll-moAÇde‘Ù‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ! Ѭ5ŽŸKP’óáðëHIŽ¦’óáð¬input-meta‘£9‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ôó¬5Ž¡’óáðÉinsert-comment‘T(M-#)‘ùi‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ +$¬16Ž¡’óáðÉinsert-completions‘T(M-*)‘¿‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ðج15ŽŸKP’óáðëHKŽ¦’óáð¬k¾9eymap9r‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k-¬5Ž¡’óáðÉkill-line‘T(C-k)‘t‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥Ë¬13Ž¡’óáðÉkill-region‘T()‘£‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ô^¬14Ž¡’óáðÉkill-whole-line‘T()‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬13Ž¡’óáðÉkill-word‘T(M-d)‘t‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥Ë¬14Ž¤KP’óáðëHLŽ¦’óáðÉlowercase‘‘$‰c4ÕÂŽ‘fæpw[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘©¬28Ž¡’óáðëHMŽ¦’óáð¬mark-moAÇdi ed-lines‘’m‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ä'¬5Ž¤ ’óáðÉmenu-complete‘T()‘%}‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘W8¬15Ž¡’óáðmeta- ag‘«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Qe¬5ŽŸKP’óáðëHNŽ¦’óáðÉnext-history‘T(C-n)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡’óáðÉnon-incremental-forward-search-history‘T(M-n)Ž¡’zè‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘J»¬12ŽŽŽŽŸŒ‹0ÓñŸò‘GÝ48’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÉnon-incremental-reverse-search-history‘T(M-p)Ž¤ ‘$ª?‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘J»¬12Ž¡‘GÉnumeric‘O‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘: ! ¬28Ž¤ÃÌ‘GëHOŽ©‘G¬output-meta‘Ýä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ž¬6Ž¡‘GëHPŽ¦‘GÉpossible-completions‘T(M-?)!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬15Ž¤ ‘GÉprefix-meta‘T(ESC)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉprevious-history‘T(C-p)‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬11Ž¤ÃÌ‘GëHQŽ¦‘GÉquoted-insert–T(C-q,“C-v)‘‘>‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Âù¬13Ž¡‘GëHRŽ¦‘GÉre-read-init-file–T(C-x“C-r)‘¥…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×@¬15Ž¤ ‘GÉreadline‘¹¼‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ëw¬19Ž¡‘GÉredraw-current-line‘T()‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬11Ž¡‘GÉreverse-search-history‘T(C-r)‘“ ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ÄĬ12Ž¡‘GÉrevert-line‘T(M-r)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæadd‘‘$‰c4ÕÂŽ“defun‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬23Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæadd‘‘$‰c4ÕÂŽ“undo‘ ³‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Rn¬26Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæattempted‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“function‘†‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 7í¬32Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbasic‘‘$‰c4ÕÂŽ“quote‘‘$‰c4ÕÂŽ“characters‘%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘A‚¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbasic‘‘$‰c4ÕÂŽ“word‘‘$‰c4ÕÂŽ“break‘‘$‰c4ÕÂŽ“characters‘SÌ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘p3¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbegin‘‘$‰c4ÕÂŽ“undo‘‘$‰c4ÕÂŽ“group‘c«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘•f¬26Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbind‘‘$‰c4ÕÂŽ“key‘ ³‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Rn¬24Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbind‘‘$‰c4ÕÂŽ“key‘‘$‰c4ÕÂŽ“in‘‘$‰c4ÕÂŽ“mapM^‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬24Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbinding‘‘$‰c4ÕÂŽ“keymap‘ð[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ¬22Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcallback‘‘$‰c4ÕÂŽ“handler‘‘$‰c4ÕÂŽ“install‘ýK‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘/¬28Ž¡‘GÉrl_callback_handler_remove‘^‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ɬ29Ž¡‘GÉrl_callback_read_char‘ص‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ! p¬29Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæchar‘‘$‰c4ÕÂŽ“is‘‘$‰c4ÕÂŽ“quoted‘‘$‰c4ÕÂŽ“p‘—­‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘´¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæclear‘‘$‰c4ÕÂŽ“message‘¦ ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×Ǭ27Ž¡‘GÉrl‘‘$‰c4ÕÂŽ‘fæcompletew[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘©¬31Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcomplete‘‘$‰c4ÕÂŽ“internalkÀ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘{¬31Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompleter‘‘$‰c4ÕÂŽ“quote‘‘$‰c4ÕÂŽ“characters‘ù‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘n¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompleter‘‘$‰c4ÕÂŽ“word‘‘$‰c4ÕÂŽ“break‘‘$‰c4ÕÂŽ“characters‘€‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘5ç¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“append‘‘$‰c4ÕÂŽ“character‘ªt‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ÆÛ¬34Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“entry‘‘$‰c4ÕÂŽ“function‘ ï‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ )V¬31,‘T32Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“query‘‘$‰c4ÕÂŽ“items‘%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘A‚¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcopy‘‘$‰c4ÕÂŽ“keymap4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬23Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcopy‘‘$‰c4ÕÂŽ“text‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬27Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fædelete‘‘$‰c4ÕÂŽ“text4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬27Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fædirectory‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“hook‘Gš‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘d¬34Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fædiscard‘‘$‰c4ÕÂŽ“keymap‘Wy‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‰4¬23Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fædo‘‘$‰c4ÕÂŽ“undo‘oF‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¡¬26Ž¡‘GÉrl‘‘$‰c4ÕÂŽ‘fædone‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãù¬24Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fægetc‘±§‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãb¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fægetc‘‘$‰c4ÕÂŽ“function‘0¶‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæignore‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“duplicates‘[á‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘xH¬34Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæignore‘‘$‰c4ÕÂŽ“some‘‘$‰c4ÕÂŽ“completions‘‘$‰c4ÕÂŽ“function‘Ù%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘õŒ¬34Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinhibit‘‘$‰c4ÕÂŽ“completion‘¶‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Òv¬34Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæinitialize‘èm‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ (¬28Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinsert‘‘$‰c4ÕÂŽ“completions-‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Nè¬31Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinsert‘‘$‰c4ÕÂŽ“text4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæinstream‘=‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘,¤¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinvoking‘‘$‰c4ÕÂŽ“keyseqs‘ºS‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ì¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinvoking‘‘$‰c4ÕÂŽ“keyseqs‘‘$‰c4ÕÂŽ“in‘‘$‰c4ÕÂŽ“map‘õ6‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ &ñ¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fækill‘‘$‰c4ÕÂŽ“text‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fælibrary‘‘$‰c4ÕÂŽ“version‘¡È‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¾/¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæline‘‘$‰c4ÕÂŽ“buffer‘ÍÜ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘êC¬21Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fælist‘‘$‰c4ÕÂŽ“funmap‘‘$‰c4ÕÂŽ“names‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘FÓ¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæmake‘‘$‰c4ÕÂŽ“bare‘‘$‰c4ÕÂŽ“keymap‘c«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘•f¬23Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæmake‘‘$‰c4ÕÂŽ“keymap4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬23Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæmark‘Ý,›9and‘8©ž™š¸hŽ‘#uŸù@‰ffÐlŸÀ­T‘ÿJªABŽŽ‘#uŸÙš‰ffÐlŽ‘qSž™š¸iŽŽ‘"BÞÝall–8©stand“for“themselv²!es“when“seen“in“this“text,˜or“in“an“init“ le“(seeŽ¦‘GSection–¦f1.3“[Readline“Init“File],“page“3).ŽŸ6‘GëH1.2‘™Readline‘f@InŒÌteractionŽŽ¤ãð‘!GÝOften–kduring“an“in•²!teractiv“e–ksession“yš²!ou“t˜ypMÞe“in“a“long“line“of“text,‘&jonly“to“notice“that“theŽ¦‘G rst–ãÒwš²!ord“on“the“line“is“misspMÞelled.‘–"The“Readline“library“giv˜es“y˜ou“a“set“of“commands“forŽ¦‘Gmanipulating–“¡the“text“as“yš²!ou“t˜ypMÞe“it“in,‘—ballo˜wing“y˜ou“to“just“ x“y˜our“t˜ypMÞo,‘—band“not“forcingŽ¦‘Gyš²!ou–`ùto“ret˜ypMÞe“the“ma‘›»jorit˜y“of“the“line.‘ƹUsing“these“editing“commands,‘nÛy˜ou“mo˜v˜e“the“cursorŽ¦‘Gto–the“place“that“needs“correction,‘;Zand“delete“or“insert“the“text“of“the“corrections.‘CZThen,Ž¦‘Gwhen–¼yš²!ou“are“satis ed“with“the“line,‘Â+y˜ou“simply“press“ž™š¸hŽ‘§iŸù@‰ff%(¬ŸÀ­RETURNŽŽ‘§iŸÙš‰ff%(¬Ž‘+M‡ž™š¸iŽŽ‘.æiÝ.‘ ƒY‘ÿeou“do“not“ha˜v˜e“to“bMÞe“atŽ¦‘Gthe–óIend“of“the“line“to“press“ž™š¸hŽ‘ÞŸù@‰ff%(¬ŸÀ­RETURNŽŽ‘ÞŸÙš‰ff%(¬Ž‘+„3ž™š¸iŽŽ‘/Ý;‘ºthe“en²!tire“line“is“accepted“regardless“of“the“loMÞcationŽ¦‘Gof–¦fthe“cursor“within“the“line.ŽŸ6‘GóQÂÖN  #× cmbx12ëQ1.2.1‘d(Readline–íMBare“Essen–átialsŽŽ¡‘!GÝIn–Äiorder“to“enš²!ter“c˜haracters“in˜to“the“line,‘ñ›simply“t˜ypMÞe“them.‘’‰The“t˜ypMÞed“c˜haracter“appMÞearsŽ¦‘Gwhere–æNthe“cursor“wš²!as,‘öHand“then“the“cursor“mo˜v˜es“one“space“to“the“righ˜t.‘–If“y˜ou“mist˜ypMÞe“aŽ¦‘Gc•²!haracter,›¦fy“ou˜can˜use˜y“our˜erase˜c“haracter˜to˜bac“k˜up˜and˜delete˜the˜mist“ypMÞed˜c“haracter.Ž¤ãð‘!GSometimes–s9yš²!ou“ma˜y“miss“t˜yping“a“c˜haracter“that“y˜ou“w˜an˜ted“to“t˜ypMÞe,‘¦mand“not“noticeŽ¦‘Gyš²!our–e¿error“un˜til“y˜ou“ha˜v˜e“t˜ypMÞed“sev˜eral“other“c˜haracters.‘ÈPIn“that“case,‘r­y˜ou“can“t˜ypMÞe“ž™š¸hŽ‘P‹Ÿù@‰ff ±ÔŸÀ­C-bŽŽ‘P‹ŸÙš‰ff ±ÔŽ‘Ñž™š¸iŽŽ‘~rÝtoŽ¦‘Gmo•²!v“e–Ô9the“cursor“to“the“left,‘ß®and“then“correct“yš²!our“mistak˜e.‘gVAfterw˜ards,‘ß®y˜ou“can“mo˜v˜e“theŽ¦‘Gcursor–¦fto“the“righ²!t“with“ž™š¸hŽ‘‘2Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘‘2ŸÙš‰ff ‘ÒŽ‘ vž™š¸iŽŽ‘9XÝ.Ž¡‘!GWhen–é"yš²!ou“add“text“in“the“middle“of“a“line,‘ùÑy˜ou“will“notice“that“c˜haracters“to“the“righ˜tŽ¦‘Gof–q”the“cursor“are“`pushed“o•²!v“er'–q”to“makš²!e“roMÞom“for“the“text“that“y˜ou“ha˜v˜e“inserted.‘ÌBLik˜ewise,Ž¦‘Gwhen–‚ùyš²!ou“delete“text“bMÞehind“the“cursor,‘ºc˜haracters“to“the“righ˜t“of“the“cursor“are“`pulledŽ¦‘Gbacš²!k'–ÑÇto“ ll“in“the“blank“space“created“b˜y“the“remo˜v‘ÿdDal“of“the“text.‘`A‘Ѽlist“of“the“basic“bareŽ¦‘Gessenš²!tials–¦ffor“editing“the“text“of“an“input“line“follo˜ws.ŽŸ”­‘Gž™š¸hŽ‘üŸù@‰ff ±ÔŸÀ­C-bŽŽ‘üŸÙš‰ff ±ÔŽ‘"+Yž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fbac“k˜one˜c“haracter.ŽŽŸŒ‹\Ÿò‘GÝ2’>‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGž™š¸hŽ‘üŸù@‰ff ‘ÒŸÀ­C-fŽŽ‘üŸÙš‰ff ‘ÒŽ‘ Wž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fforw“ard˜one˜c“haracter.Ž¤z‘Gž™š¸hŽ‘üŸù@‰ff“úŸÀ­DELŽŽ‘üŸÙš‰ff“úŽ‘& ž™š¸iŽŽŽŽ‘Kâ:ÝDelete–¦fthe“c²!haracter“to“the“left“of“the“cursor.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff ±ÔŸÀ­C-dŽŽ‘üŸÙš‰ff ±ÔŽ‘"+Yž™š¸iŽŽŽŽ‘Kâ:ÝDelete–¦fthe“c²!haracter“underneath“the“cursor.Ž¡‘GPrin•²!ting‘¦fc“haractersŽŽ© 33‘Kâ:Insert–¦fthe“cš²!haracter“in˜to“the“line“at“the“cursor.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff JŸÀ­C-‘‚Ž‰X.ŒÐŽŽŽ‘üŸÙš‰ff JŽ‘ Ïž™š¸iŽŽŽŽ‘Kâ:ÝUndo–jthe“last“editing“command.‘÷éY‘ÿeou“can“undo“all“the“w•²!a“y›jbac“k˜to˜an˜empt“yŽ¦‘Kâ:line.ŽŸêL‘GëQ1.2.2‘d(Readline›íMMo•–áv“emen“t˜CommandsŽŽŸÖ¢‘!GÝThe›Ú abMÞo•²!v“e˜table˜describ•MÞes˜the˜most˜basic˜p“ossible˜k•²!eystrok“es˜that˜y“ou˜need˜in˜order˜toŽ¦‘Gdo–bÍediting“of“the“input“line.‘ÇUF‘ÿeor“yš²!our“con˜v˜enience,‘pRman˜y“other“commands“ha˜v˜e“bMÞeen“addedŽ¦‘Gin–Þaddition“to“ž™š¸hŽ‘ªŸù@‰ff ±ÔŸÀ­C-bŽŽ‘ªŸÙš‰ff ±ÔŽ‘1𞙚¸iŽŽ‘ÊÒÝ,‘4`ž™š¸hŽ‘,Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘,ŸÙš‰ff ‘ÒŽ‘.pž™š¸iŽŽ‘ÇRÝ,‘4`ž™š¸hŽ‘,Ÿù@‰ff ±ÔŸÀ­C-dŽŽ‘,ŸÙš‰ff ±ÔŽ‘Nrž™š¸iŽŽ‘çTÝ,‘4`and“ž™š¸hŽ‘ªŸù@‰ff“úŸÀ­DELŽŽ‘ªŸÙš‰ff“úŽ‘ž™š¸iŽŽ‘¬øÝ.‘®[Here“are“some“commands“for“mo²!ving“more“rapidlyŽ¦‘GabMÞout–¦fthe“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff 8ðŸÀ­C-aŽŽ‘üŸÙš‰ff 8ðŽ‘!²už™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e–¦fto“the“start“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff À ŸÀ­C-eŽŽ‘üŸÙš‰ff À Ž‘!9‘ž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff 6ΟÀ­M-fŽŽ‘üŸÙš‰ff 6ÎŽ‘!°Sž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fforw“ard˜a˜w“ord,˜where˜a˜w“ord˜is˜compMÞosed˜of˜letters˜and˜digits.Ž¡‘Gž™š¸hŽ‘üŸù@‰ffVПÀ­M-bŽŽ‘üŸÙš‰ffVÐŽ‘#ÐUž™š¸iŽŽŽŽ‘Kâ:ÝMo•²!v“e›¦fbac“kw“ard˜a˜w“ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff U`ŸÀ­C-lŽŽ‘üŸÙš‰ff U`Ž‘Îåž™š¸iŽŽŽŽ‘Kâ:ÝClear–¦fthe“screen,“reprinš²!ting“the“curren˜t“line“at“the“top.Ž¡‘!GNotice–Íahoš²!w“ž™š¸hŽ‘¸-Ÿù@‰ff ‘ÒŸÀ­C-fŽŽ‘¸-ŸÙš‰ff ‘ÒŽ‘Çqž™š¸iŽŽ‘-´Ýmo˜v˜es“forw˜ard“a“c˜haracter,‘øÉwhile“ž™š¸hŽ‘¸-Ÿù@‰ff 6ΟÀ­M-fŽŽ‘¸-ŸÙš‰ff 6ÎŽ‘lmž™š¸iŽŽ‘Ò°Ýmo˜v˜es“forw˜ard“a“w˜ord.‘•†It“is“a“loMÞoseŽ¦‘Gcon•²!v“en“tion–—†that“conš²!trol“k˜eystrok˜es“opMÞerate“on“c˜haracters“while“meta“k˜eystrok˜es“opMÞerate“onŽ¦‘Gw²!ords.ŽŸêL‘GëQ1.2.3‘d(Readline–íMKilling“CommandsŽŽŸÖ¢‘!GáKilling‘lÝtext–{émeans“to“delete“the“text“from“the“line,‘±Jbut“to“sa•²!v“e–{éit“a•²!w“a“y–{éfor“later“use,Ž¦‘Gusually–fµbš²!y“áy˜anking‘VÍÝ(re-inserting)“it“bac˜k“in˜to“the“line.‘ÉIf“the“description“for“a“commandŽ¦‘Gsaš²!ys–ñ¡that“it“`kills'“text,‘pthen“y˜ou“can“bMÞe“sure“that“y˜ou“can“get“the“text“bac˜k“in“a“di eren˜tŽ¦‘G(or–¦fthe“same)“place“later.Ž¤Ö¢‘!GWhen–Ê›yš²!ou“use“a“kill“command,‘ö‘the“text“is“sa˜v˜ed“in“a“ákill-ringÝ.‘”šAn˜y“n˜um˜bMÞer“of“consecutiv˜eŽ¦‘Gkills›¸$sa•²!v“e˜all˜of˜the˜killed˜text˜together,‘¼“so˜that˜when˜y“ou˜y“ank˜it˜bac“k,‘¼“y“ou˜get˜it˜all.‘TheŽ¦‘Gkill–âèring“is“not“line“spMÞeci c;‘(the“text“that“yš²!ou“killed“on“a“previously“t˜ypMÞed“line“is“a˜v‘ÿdDailableŽ¦‘Gto–¦fbMÞe“y•²!ank“ed›¦fbac“k˜later,˜when˜y“ou˜are˜t“yping˜another˜line.Ž¡‘!GHere–¦fis“the“list“of“commands“for“killing“text.Ž¤z‘Gž™š¸hŽ‘üŸù@‰ff ubŸÀ­C-kŽŽ‘üŸÙš‰ff ubŽ‘!îçž™š¸iŽŽŽŽ‘Kâ:ÝKill–¦fthe“text“from“the“curren²!t“cursor“pMÞosition“to“the“end“of“the“line.Ž¡‘Gž™š¸hŽ‘üŸù@‰ffVПÀ­M-dŽŽ‘üŸÙš‰ffVÐŽ‘#ÐUž™š¸iŽŽŽŽ‘Kâ:ÝKill–]from“the“cursor“to“the“end“of“the“currenš²!t“w˜ord,‘kÆor“if“bMÞet˜w˜een“w˜ords,‘kÆto“theŽ¦‘Kâ:end–¦fof“the“next“w²!ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff1âŸÀ­M-DELŽŽ‘üŸÙš‰ff1⎑0«gž™š¸iŽŽŽŽ‘Kâ:ÝKill–€¡from“the“cursor“the“start“of“the“previous“wš²!ord,‘ˆ/or“if“bMÞet˜w˜een“w˜ords,‘ˆ/to“theŽ¦‘Kâ:start–¦fof“the“previous“w²!ord.Ž¡‘Gž™š¸hŽ‘üŸù@‰ff€ŸÀ­C-wŽŽ‘üŸÙš‰ff€Ž‘#–ž™š¸iŽŽŽŽ‘Kâ:ÝKill–Ð’from“the“cursor“to“the“previous“whitespace.‘\aThis“is“di eren²!t“than“ž™š¸hŽ‘»^Ÿù@‰ff1âŸÀ­M-DELŽŽ‘»^ŸÙš‰ff1⎑"j²ž™š¸iŽŽŽ¦‘Kâ:ÝbšMÞecause–¦fthe“w²!ord“b˜oundaries“di er.ŽŽŸŒ‹¦Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH3ŽŽŽ ƒ3Ú ý¨ðБ!GHere–ýáis“hoš²!w“to“áy˜ank‘§åÝthe“text“bac˜k“in˜to“the“line.‘äNY‘ÿeanking“means“to“cop˜y“the“most-Ž¤ 33‘Grecen²!tly-killed–¦ftext“from“the“kill“bu er.ŽŸNR‘Gž™š¸hŽ‘üŸù@‰ff ubŸÀ­C-yŽŽ‘üŸÙš‰ff ubŽ‘!îçž™š¸iŽŽŽŽ‘Kâ:ÝY‘ÿeank–¦fthe“most“recenš²!tly“killed“text“bac˜k“in˜to“the“bu er“at“the“cursor.ŽŸEG‘Gž™š¸hŽ‘üŸù@‰ff^ŸÀ­M-yŽŽ‘üŸÙš‰ff^Ž‘#“ãž™š¸iŽŽŽŽ‘Kâ:ÝRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can“only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“ž™š¸hŽ‘‘2Ÿù@‰ff ubŸÀ­C-yŽŽ‘‘2ŸÙš‰ff ubŽ‘„ž™š¸iŽŽ‘ÃNÝor“ž™š¸hŽ‘‘2Ÿù@‰ff^ŸÀ­M-yŽŽ‘‘2ŸÙš‰ff^Ž‘)ž™š¸iŽŽ‘ÁäÝ.Ž©$)‘GëQ1.2.4‘d(Readline‘íMArgumen–átsŽŽŸEH‘!GÝY‘ÿeou–‚Ücan“pass“nš²!umeric“argumen˜ts“to“Readline“commands.‘ÒSometimes“the“argumen˜t“actsŽ¡‘Gas–ÞDa“repMÞeat“counš²!t,‘,;other“times“it“is“the“ásign“Ýof“the“argumen˜t“that“is“signi can˜t.‘…wIf“y˜ouŽ¡‘Gpass–a“negativš²!e“argumen˜t“to“a“command“whic˜h“normally“acts“in“a“forw˜ard“direction,‘ìthatŽ¡‘Gcommand–=Üwill“act“in“a“bac•²!kw“ard–=Üdirection.‘¤?F‘ÿeor“example,‘c¹to“kill“text“bac²!k“to“the“start“ofŽ¡‘Gthe–¦fline,“yš²!ou“migh˜t“t˜ypMÞe“`ÞM--“C-kÝ'.ŽŸEH‘!GThe–bOgeneral“w•²!a“y–bOto“pass“nš²!umeric“argumen˜ts“to“a“command“is“to“t˜ypšMÞe“meta“digits“b˜eforeŽ¡‘Gthe–Ü_command.‘ÈIf“the“ rst“`digit'“tš²!ypMÞed“is“a“min˜us“sign“(ž™š¸hŽ‘êÌŸù@‰ffÕXŸÀ­-ŽŽ‘êÌŸÙš‰ffÕXŽ‘=–ž™š¸iŽŽ‘ÖxÝ),‘éÝthen“the“sign“of“the“argumen˜tŽ¡‘Gwill–dˆbMÞe“negativš²!e.‘ÇèOnce“y˜ou“ha˜v˜e“t˜ypMÞed“one“meta“digit“to“get“the“argumen˜t“started,‘q´y˜ou“canŽ¡‘Gt²!ypMÞe–±the“remainder“of“the“digits,›¶and“then“the“command.‘i½F‘ÿeor“example,˜to“giv²!e“the“ž™š¸hŽ‘j}Ÿù@‰ff ±ÔŸÀ­C-dŽŽ‘j}ŸÙš‰ff ±ÔŽ‘™Ãž™š¸iŽŽŽ¡‘GÝcommand–¦fan“argumenš²!t“of“10,“y˜ou“could“t˜ypMÞe“`ÞM-1“0“C-dÝ'.Ž¦‘GëQ1.2.5‘d(Searc–áhing–íMfor“Commands“in“the“HistoryŽŽŸEH‘!GÝReadline–àTproš²!vides“commands“for“searc˜hing“through“the“command“history“for“lines“con-Ž¡‘Gtaining–¦fa“spMÞeci ed“string.‘ÝÝThere“are“t•²!w“o›¦fsearc“h˜moMÞdes:‘ÝÝáincremen“tal‘¸Ýand˜ánon-incremen“talÝ.Ž©EH‘!GIncremen•²!tal›¸searc“hes˜b•MÞegin˜b“efore˜the˜user˜has˜ nished˜t•²!yping˜the˜searc“h˜string.‘­£As˜eac“hŽ¡‘Gcš²!haracter–@|of“the“searc˜h“string“is“t˜ypMÞed,‘gReadline“displa˜ys“the“next“en˜try“from“the“historyŽ¡‘Gmatcš²!hing–Ýkthe“string“t˜ypMÞed“so“far.‘‚ìAn“incremen˜tal“searc˜h“requires“only“as“man˜y“c˜haractersŽ¡‘Gas–needed“to“ nd“the“desired“history“enš²!try‘ÿe.‘ò-The“c˜haracters“presen˜t“in“the“v‘ÿdDalue“of“theŽ¡‘Gáisearcš²!h-terminators‘Ž3Ýv‘ÿdDariable–±are“used“to“terminate“an“incremen˜tal“searc˜h.‘:½If“that“v‘ÿdDariableŽ¡‘Ghas–ɬ“bMÞeen“assigned“a“v‘ÿdDalue,‘ÑÖthe“ž™š¸hŽ‘³òŸù@‰ff¤TŸÀ­ESCŽŽ‘³òŸÙš‰ff¤TŽ‘Õ¸ž™š¸iŽŽ‘7ÀÝand“ž™š¸hŽ‘³òŸù@‰ff VŸÀ­C-JŽŽ‘³òŸÙš‰ff VŽ‘‡|ž™š¸iŽŽ‘é„Ýcš²!haracters“will“terminate“an“incremen˜talŽ¡‘Gsearcš²!h.‘¶ž™š¸hŽ‘¡KŸù@‰ff 8ðŸÀ­C-gŽŽ‘¡KŸÙš‰ff 8ðŽ‘W­ž™š¸iŽŽ‘ ÚÝwill–0KabMÞort“an“incremen˜tal“searc˜h“and“restore“the“original“line.‘¶When“the“searc˜hŽ¡‘Gis–÷”terminated,‘ ßthe“history“enš²!try“con˜taining“the“searc˜h“string“bMÞecomes“the“curren˜t“line.‘ÑfT‘ÿeoŽ¡‘G nd–5other“matcš²!hing“en˜tries“in“the“history“list,‘X¿t˜ypMÞe“ž™š¸hŽ‘àŸù@‰ff S?ŸÀ­C-sŽŽ‘àŸÙš‰ff S?Ž‘ð‘ž™š¸iŽŽ‘¾‡Ýor“ž™š¸hŽ‘àŸù@‰ff HïŸÀ­C-rŽŽ‘àŸÙš‰ff HæAž™š¸iŽŽ‘´7Ýas“appropriate.‘‰æThis“willŽ¡‘Gsearc•²!h›”qbac“kw“ard˜or˜forw“ard˜in˜the˜history˜for˜the˜next˜en“try˜matc“hing˜the˜searc“h˜stringŽ¡‘Gtš²!ypMÞed–ˆ5so“far.‘ƒIAn˜y“other“k˜ey“sequence“bMÞound“to“a“Readline“command“will“terminate“theŽ¡‘Gsearcš²!h–ë5and“execute“that“command.‘¬KF‘ÿeor“instance,‘‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGof–½Tthis“ le“is“takš²!en“from“the“v‘ÿdDalue“of“the“en˜vironmen˜t“v›ÿdDariable“ÞINPUTRCÝ.‘"¦If“that“v˜ariable“isŽ¤ 33‘Gunset,–¦fthe“default“is“`Þ~/.inputrcÝ'.Ž©@´‘!GWhen–Ž\a“program“whic²!h“uses“the“Readline“library“starts“up,›“*the“init“ le“is“read,˜and“theŽ¡‘Gk²!ey–¦fbindings“are“set.Ž¦‘!GIn–8âaddition,›NÉthe“ÞC-x‘¦fC-r“Ýcommand“re-reads“this“init“ le,˜thš²!us“incorpMÞorating“an˜y“c˜hangesŽ¡‘Gthat–¦fyš²!ou“migh˜t“ha˜v˜e“made“to“it.ŽŸ‘GëQ1.3.1‘d(Readline–íMInit“File“Syn–átaxŽŽŸ@´‘!GÝThere– are“only“a“few“basic“constructs“allo•²!w“ed– in“the“Readline“init“ le.‘ RBlank“lines“areŽ¡‘Gignored.›­zLines–ëšbMÞeginning“with“a“`Þ#Ý'“are“commen²!ts.˜Lines“bMÞeginning“with“a“`Þ$Ý'“indicateŽ¡‘Gconditional–R¡constructs“(see“Section“1.3.2“[Conditional“Init“Constructs],‘cbpage“8).‘ÁñOther“linesŽ¡‘Gdenote–¦fv‘ÿdDariable“settings“and“k²!ey“bindings.ŽŸÇu‘GV‘ÿeariable‘¦fSettingsŽ¡‘Kâ:Y‘ÿeou–Ú½can“mošMÞdify“the“run-time“b˜ehaš²!vior“of“Readline“b˜y“altering“the“v‘ÿdDalues“ofŽ¡‘Kâ:v‘ÿdDariables–âÞin“Readline“using“the“Þset“Ýcommand“within“the“init“ le.‘œ°Here“is“ho²!w“toŽ¡‘Kâ:cš²!hange–rLfrom“the“default“Emacs-lik˜e“k˜ey“binding“to“use“Þvi“Ýline“editing“commands:ŽŸÁ‘hÊÞset–¿ªediting-mode“viŽŸ¹ô‘Kâ:ÝA–¦fgreat“deal“of“run-time“bMÞehaš²!vior“is“c˜hangeable“with“the“follo˜wing“v‘ÿdDariables.Ž©@µ‘Kâ:Þbell-styleŽ¡’…³-ÝConš²!trols–Fwhat“happMÞens“when“Readline“w˜an˜ts“to“ring“the“termi-Ž¡’…³-nal–xzbšMÞell.‘TIf“set“to“`ÞnoneÝ',‘¬þReadline“nev²!er“rings“the“b˜ell.‘TIf“set“toŽ¡’…³-`ÞvisibleÝ',‘ ! dReadline–öeuses“a“visible“bMÞell“if“one“is“a²!v‘ÿdDailable.‘ÍÙIf“set“toŽ¡’…³-`ÞaudibleÝ'–Ù(the“default),‘¶6Readline“attempts“to“ring“the“terminal'sŽ¡’…³-bMÞell.Ž¦‘Kâ:Þcomment-beginŽ¡’…³-ÝThe–‚÷string“to“insert“at“the“bMÞeginning“of“the“line“when“the“Þinsert-Ž¡’…³-comment–¦fÝcommand“is“executed.‘ÝÝThe“default“v‘ÿdDalue“is“Þ"#"Ý.Ž¦‘Kâ:Þcompletion-ignore-caseŽ¡’…³-ÝIf–IÓset“to“`ÞonÝ',‘\WReadline“pMÞerforms“ lename“matc²!hing“and“completionŽ¡’…³-in–¦fa“case-insensitiv²!e“fashion.‘ÝÝThe“default“v‘ÿdDalue“is“`ÞoffÝ'.Ž¦‘Kâ:Þcompletion-query-itemsŽ¡’…³-ÝThe›%Ðn•²!um“b•MÞer˜of˜p“ossible˜completions˜that˜determines˜when˜the˜userŽ¡’…³-is–çaskš²!ed“whether“he“w˜an˜ts“to“see“the“list“of“pMÞossibilities.‘ `If“theŽ¡’…³-n•²!um“bšMÞer–9of“p˜ossible“completions“is“greater“than“this“v‘ÿdDalue,‘NãReadlineŽ¡’…³-will–.ƒask“the“user“whether“or“not“he“wishes“to“view“them;‘Vzotherwise,Ž¡’…³-they–¦fare“simply“listed.‘ÝÝThe“default“limit“is“Þ100Ý.Ž¦‘Kâ:Þconvert-metaŽ¡’…³-ÝIf–¦set“to“`ÞonÝ',‘ÙÅReadline“will“con•²!v“ert›¦c“haracters˜with˜the˜eigh“th˜bit˜setŽ¡’…³-to–IIf“this“v‘ÿdDariable“hasŽ¡’…³-not–2ObMÞeen“givš²!en“a“v‘ÿdDalue,‘I‡the“c˜haracters“ž™š¸hŽ‘Ÿù@‰ff¤TŸÀ­ESCŽŽ‘ŸÙš‰ff¤TŽ‘>áž™š¸iŽŽ‘ ! Ýand“ž™š¸hŽ‘Ÿù@‰ff VŸÀ­C-JŽŽ‘ŸÙš‰ff VŽ‘𥞙š¸iŽŽ‘»ÖÝwill“terminateŽ¡’…³-an–¦fincremenš²!tal“searc˜h.Ž¦‘Kâ:ÞkeymapŽŽ’‰ïéÝSets–<¼Readline's“idea“of“the“currenš²!t“k˜eymap“for“k˜ey“binding“com-Ž¡’…³-mands.‘ ä™Acceptable–SOÞkeymap“Ýnames“are“ÞemacsÝ,‘¾‰Þemacs-standardÝ,Ž¡’…³-Þemacs-metaÝ,– ‡Þemacs-ctlxÝ,“ÞviÝ,“Þvi-commandÝ,“and–Þvi-insertÝ.‘ùÞvi“ÝisŽ¡’…³-equiv›ÿdDalen²!t–>to“Þvi-commandÝ;‘BLÞemacs“Ýis“equiv˜alen²!t“to“Þemacs-standardÝ.Ž¡’…³-The–¢rdefault“v›ÿdDalue“is“ÞemacsÝ.‘‡7The“v˜alue“of“the“Þediting-mode“Ýv˜ariableŽ¡’…³-also–¦fa ects“the“default“k²!eymap.Ž¦‘Kâ:Þmark-directoriesŽ¡’…³-ÝIf––¿set“to“`ÞonÝ',‘ÒÕcompleted“directory“names“ha•²!v“e––¿a“slash“appMÞended.Ž¡’…³-The–¦fdefault“is“`ÞonÝ'.ŽŽŸŒ‹KÁŸò‘GÝ6’>‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБKâ:Þmark-modified-linesŽ¤ 33’…³-ÝThis–N”v‘ÿdDariable,›xŸwhen“set“to“`ÞonÝ',˜causes“Readline“to“displa²!y“an“as-Ž¡’…³-terisk– š(`Þ*Ý')“at“the“start“of“history“lines“whicš²!h“ha˜v˜e“bšMÞeen“mo˜di ed.Ž¡’…³-This–¦fv‘ÿdDariable“is“`ÞoffÝ'“b²!y“default.Ž©³{‘Kâ:Þoutput-metaŽ¡’…³-ÝIf–Aset“to“`ÞonÝ',‘gªReadline“will“displaš²!y“c˜haracters“with“the“eigh˜th“bitŽ¡’…³-set–`!directly“rather“than“as“a“meta-pre xed“escapMÞe“sequence.‘ TheŽ¡’…³-default–¦fis“`ÞoffÝ'.Ž¦‘Kâ:Þprint-completions-horizontallyŽ¡’…³-ÝIf–àset“to“`ÞonÝ',‘»Readline“will“displaš²!y“completions“with“matc˜hes“sortedŽ¡’…³-horizonš²!tally–8Ôin“alphabMÞetical“order,‘orather“than“do˜wn“the“screen.Ž¡’…³-The–¦fdefault“is“`ÞoffÝ'.Ž¦‘Kâ:Þshow-all-if-ambiguousŽ¡’…³-ÝThis–™]alters“the“default“bMÞeha²!vior“of“the“completion“functions.‘Ù…If“setŽ¡’…³-to–L`ÞonÝ',‘^.wš²!ords“whic˜h“ha˜v˜e“more“than“one“pMÞossible“completion“causeŽ¡’…³-the–­matc²!hes“to“bšMÞe“listed“immediately“instead“of“ringing“the“b˜ell.Ž¡’…³-The–¦fdefault“v‘ÿdDalue“is“`ÞoffÝ'.Ž¦‘Kâ:Þvisible-statsŽ¡’…³-ÝIf–Ôvset“to“`ÞonÝ',‘ßúa“cš²!haracter“denoting“a“ le's“t˜ypšMÞe“is“app˜ended“to“theŽ¡’…³- lename–¦fwhen“listing“pMÞossible“completions.‘ÝÝThe“default“is“`ÞoffÝ'.Ž¦‘GKey‘¦fBindingsŽ¡‘Kâ:The–Rþsynš²!tax“for“con˜trolling“k˜ey“bindings“in“the“init“ le“is“simple.‘ÂFirst“y˜ou“ha˜v˜eŽ¡‘Kâ:to–knoš²!w“the“name“of“the“command“that“y˜ou“w˜an˜t“to“c˜hange.‘ÁâThe“follo˜wingŽ¡‘Kâ:sections–Oconš²!tain“tables“of“the“command“name,‘yLthe“default“k˜eybinding,‘yLif“an˜y‘ÿe,Ž¡‘Kâ:and–¦fa“short“description“of“what“the“command“doMÞes.ŽŸóW‘Kâ:Once–0¿yš²!ou“kno˜w“the“name“of“the“command,‘STsimply“place“the“name“of“the“k˜eyŽ¡‘Kâ:y²!ou–=nwish“to“bind“the“command“to,›Rla“colon,˜and“then“the“name“of“the“commandŽ¡‘Kâ:on–¥Fa“line“in“the“init“ le.‘Ú~The“name“of“the“kš²!ey“can“bMÞe“expressed“in“di eren˜tŽ¡‘Kâ:w•²!a“ys,–¦fdepMÞending“on“whicš²!h“is“most“comfortable“for“y˜ou.Ž¦‘Kâ:ák²!eyname‘Ý:‘ÝÝáfunction-name‘CmÝor‘¦fámacroŽŽ¡’…³-kš²!eyname‘jÝis–tcthe“name“of“a“k˜ey“spMÞelled“out“in“English.‘Í1F‘ÿeor“example:ŽŸ@$’¢›‚ÞControl-u:‘¿ªuniversal-argumentŽ¤ €’¢›‚Meta-Rubout:‘¿ªbackward-kill-wordŽ¡’¢›‚Control-o:–¿ª">“output"ŽŸóW’…³-ÝIn–gïthe“abšMÞo•²!v“e–gïexample,‘˜Qž™š¸hŽ‘ƒŸù@‰ff ±ÔŸÀ­C-uŽŽ‘ƒŸÙš‰ff ±ÔŽ‘²cž™š¸iŽŽ‘³4Ýis“b˜ound“to“the“function“Þuniversal-Ž¤ 33’…³-argumentÝ,‘ðGand‘®Mž™š¸hŽ‘™Ÿù@‰ff 8ðŸÀ­C-oŽŽ‘™ŸÙš‰ff 8ðŽ‘O{ž™š¸iŽŽ‘–ªÝis–®MbMÞound“to“run“the“macro“expressed“on“theŽ¡’…³-righš²!t–E§hand“side“(that“is,‘Yto“insert“the“text“`Þ>‘¦foutputÝ'“in˜to“the“line).Ž¦‘Kâ:Þ"ák²!eyseq@æÞ"Ý:‘ÝÝáfunction-name‘CmÝor‘¦fámacroŽŽ¡’…³-kš²!eyseq‘ú«Ýdi ers–¹Åfrom“ák˜eyname‘VÌÝabMÞo˜v˜e“in“that“strings“denoting“an“en-Ž¡’…³-tire– hk²!ey“sequence“can“bšMÞe“sp˜eci ed,‘%èbš²!y“placing“the“k˜ey“sequence“inŽ¡’…³-double– quotes.‘­ðSome“GNU‘{Emacs“stš²!yle“k˜ey“escapšMÞes“can“b˜e“used,‘3aasŽ¡’…³-in–Ãthe“folloš²!wing“example,‘(Ùbut“the“spMÞecial“c˜haracter“names“are“notŽ¡’…³-recognized.ŽŽŸŒ‹W²Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH7ŽŽŽ ƒ3Ú ý¨ðÐ’¢›‚Þ"\C-u":‘¿ªuniversal-argumentŽ¤ €’¢›‚"\C-x\C-r":‘¿ªre-read-init-fileŽ¡’¢›‚"\e[11~":–¿ª"Function“Key“1"ŽŸüv’…³-ÝIn–gïthe“abšMÞo•²!v“e–gïexample,‘˜Qž™š¸hŽ‘ƒŸù@‰ff ±ÔŸÀ­C-uŽŽ‘ƒŸÙš‰ff ±ÔŽ‘²cž™š¸iŽŽ‘³4Ýis“b˜ound“to“the“function“Þuniversal-Ž¤ 33’…³-argument–ŠÌÝ(just“as“it“w²!as“in“the“ rst“example),‘Ä`ž™š¸hŽ‘êÌŸù@‰ff ubŸÀ­C-xŽŽ‘êÌŸÙš‰ff ubŽ‘Ý ž™š¸iŽŽ‘èž™šhŽ‘´Ÿù@‰ff HïŸÀ­C-rŽŽ‘´ŸÙš‰ff H%Ξ™š¸iŽŽ‘)f÷Ý'“is“bMÞound“toŽ¡’…³-the–ð!function“Þre-read-init-fileÝ,‘and“`ž™š¸hŽ‘êÌŸù@‰ff¤TŸÀ­ESCŽŽ‘êÌŸÙš‰ff¤TŽ‘ ’ž™š¸iŽŽ‘KÚž™šhŽ‘6¦Ÿù@‰ff\tŸÀ­[ŽŽ‘6¦Ÿ‰ff\tŽ‘Œž™š¸iŽŽ‘&OÔž™šhŽ‘): Ÿù@‰ff@ŸÀ­1ŽŽ‘): ŸÙš‰ff@Ž‘,øž™š¸iŽŽ‘47^ž™šhŽ‘7"*Ÿù@‰ff@ŸÀ­1ŽŽ‘7"*ŸÙš‰ff@Ž‘:ß ž™š¸iŽŽ‘Bèž™šhŽ‘E ´Ÿù@‰ff¿ªŸÀÞ~ŽŽ‘E ´ŸÙš‰ff¿ªŽ‘JFО™š¸iŽŽ‘Mß²Ý'“is“bMÞoundŽ¡’…³-to–¦finsert“the“text“`ÞFunction“Key“1Ý'.Ž©Ź‘Kâ:The–æfolloš²!wing“GNU‘ÃEmacs“st˜yle“escapMÞe“sequences“are“a˜v‘ÿdDailable“when“spMÞecifyingŽ¡‘Kâ:k²!ey‘¦fsequences:Ž¦‘Kâ:ó9ßê‚ ! GNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGëQ1.3.2‘d(Conditional–íMInit“ConstructsŽŽŸ33‘!GÝReadline–?äimplemenš²!ts“a“facilit˜y“similar“in“spirit“to“the“conditional“compilation“featuresŽ¤ 33‘Gof–$the“C‘#ùpreproMÞcessor“whicš²!h“allo˜ws“k˜ey“bindings“and“v‘ÿdDariable“settings“to“bšMÞe“p˜erformed“asŽ¡‘Gthe–¦fresult“of“tests.‘ÝÝThere“are“four“parser“directiv²!es“used.Ž©33‘GÞ$ifŽŽ‘Kâ:ÝThe–ÃNÞ$if“Ýconstruct“allo²!ws“bindings“to“bšMÞe“made“based“on“the“editing“mo˜de,‘ʈtheŽ¡‘Kâ:terminal–’ŽbMÞeing“used,‘͘or“the“application“using“Readline.‘¢VThe“text“of“the“testŽ¡‘Kâ:extends–¦fto“the“end“of“the“line;“no“c²!haracters“are“required“to“isolate“it.Ž¦‘Kâ:ÞmodeŽŽ’…³-ÝThe–[Þmode=“Ýform“of“the“Þ$if“Ýdirectiv²!e“is“used“to“test“whether“ReadlineŽ¡’…³-is–‰›in“Þemacs“Ýor“Þvi“ÝmošMÞde.‘ÔDThis“ma²!y“b˜e“used“in“conjunction“with“theŽ¡’…³-`Þset‘¦fkeymapÝ'–N ! command,›_¶for“instance,˜to“set“bindings“in“the“Þemacs-Ž¡’…³-standard–_Ýand“Þemacs-ctlx“Ýk²!eymaps“only“if“Readline“is“starting“outŽ¡’…³-in–¦fÞemacs“ÝmoMÞde.Ž¦‘Kâ:ÞtermŽŽ’…³-ÝThe–<Þterm=“Ýform“ma²!y“bšMÞe“used“to“include“terminal-sp˜eci c“k²!ey“bind-Ž¡’…³-ings,‘ƒpMÞerhaps–Vîto“bind“the“kš²!ey“sequences“output“b˜y“the“terminal'sŽ¡’…³-function–Þ€kš²!eys.‘›;The“w˜ord“on“the“righ˜t“side“of“the“`Þ=Ý'“is“tested“againstŽ¡’…³-bšMÞoth–šPthe“full“name“of“the“terminal“and“the“p˜ortion“of“the“terminalŽ¡’…³-name–×bMÞefore“the“ rst“`Þ-Ý'.‘ÿ/This“alloš²!ws“Þsun“Ýto“matc˜h“bMÞoth“Þsun“ÝandŽ¡’…³-Þsun-cmdÝ,–¦ffor“instance.Ž¦‘Kâ:ÞapplicationŽ¡’…³-ÝThe–¢âáapplication“Ýconstruct“is“used“to“include“application-spMÞeci c“set-Ž¡’…³-tings.‘£mEac²!h–÷program“using“the“Readline“library“sets“the“áapplicationŽ¡’…³-nameÝ,‘rand–úpyš²!ou“can“test“for“it.‘ÙúThis“could“bMÞe“used“to“bind“k˜ey“se-Ž¡’…³-quences–Þ^to“functions“useful“for“a“spMÞeci c“program.‘›0F‘ÿeor“instance,‘`theŽ¡’…³-folloš²!wing–\¸command“adds“a“k˜ey“sequence“that“quotes“the“curren˜t“orŽ¡’…³-previous–¦fw²!ord“in“Bash:ŽŸ€’¢›‚Þ$if‘¿ªBashŽ¤ €’¢›‚#–¿ªQuote“the“current“or“previous“wordŽ¡’¢›‚"\C-xq":‘¿ª"\eb\"\ef\""Ž¡’¢›‚$endifŽ¦‘G$endifŽŽ‘Kâ:ÝThis–£™command,›¤(as“seen“in“the“previous“example,˜terminates“an“Þ$if“Ýcommand.Ž¦‘GÞ$elseŽŽ‘Kâ:ÝCommands–¦fin“this“brancš²!h“of“the“Þ$if“Ýdirectiv˜e“are“executed“if“the“test“fails.Ž¦‘GÞ$includeŽŽ‘Kâ:ÝThis–R)directivš²!e“tak˜es“a“single“ lename“as“an“argumen˜t“and“reads“commands“andŽ¤ 33‘Kâ:bindings–¦ffrom“that“ le.ŽŸ€‘hÊÞ$include‘¿ª/etc/inputrcŽŸ‘GëQ1.3.3‘d(Sample–íMInit“FileŽŽŸ33‘!GÝHere–´is“an“example“of“an“inputrc“ le.‘øThis“illustrates“kš²!ey“binding,‘·‡v‘ÿdDariable“assignmen˜t,Ž¡‘Gand–¦fconditional“syn²!tax.ŽŽŸŒ‹ oCŸò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’MH9ŽŽŽ ƒ3Ú ýµpБ.ùœÞ#–¿ªThis“file“controls“the“behaviour“of“line“input“editing“forŽ¤ €‘.ùœ#–¿ªprograms“that“use“the“Gnu“Readline“library.‘ TExisting“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:‘ Tbackward-kill-word–¿ªText“after“the“function“name“is“ignoredŸnï„ Ž¦‘.ùœ#Ž¡‘.ùœ#–¿ªArrow“keys“in“keypad“modeŽ¡‘.ùœ#Ž¡‘.ùœ#"\M-OD":‘-ýPbackward-charŽ¡‘.ùœ#"\M-OC":‘-ýPforward-charŽ¡‘.ùœ#"\M-OA":‘-ýPprevious-historyŽ¡‘.ùœ#"\M-OB":‘-ýPnext-historyŽ¡‘.ùœ#Ž¡‘.ùœ#–¿ªArrow“keys“in“ANSI“modeŽ¡‘.ùœ#Ž¡‘.ùœ"\M-[D":‘-ýPbackward-charŽ¡‘.ùœ"\M-[C":‘-ýPforward-charŽ¡‘.ùœ"\M-[A":‘-ýPprevious-historyŽ¡‘.ùœ"\M-[B":‘-ýPnext-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ŽŽŸŒ‹ ! z>Ÿò‘GÝ10’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ#"\M-\C-[B":‘(=¦next-historyŽ¤‘.ùœC-q:‘¿ªquoted-insertŽ¡‘.ùœ$endifŽ¡‘.ùœ#–¿ªAn“old-style“binding.‘ TThis“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-?"ŽŽŸŒ‹ €-Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®11ŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ"\M-.":‘¿ªyank-last-argŽŸ €‘.ùœ$endifŽŸ *q‘GëH1.4‘™Bindable–f@Readline“CommandsŽŽŸª“‘!GÝThis–¦fsection“describšMÞes“Readline“commands“that“ma²!y“b˜e“b˜ound“to“k²!ey“sequences.ŽŸîÁ‘GëQ1.4.1‘d(Commands–íMF‘þÄ£or“Mo–ávingŽŽŸæC‘GÞbeginning-of-line‘¦f(C-a)Ž¤ 33‘Kâ:ÝMo•²!v“e–¦fto“the“start“of“the“curren²!t“line.Ž©ª“‘GÞend-of-line‘¦f(C-e)Ž¡‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“line.Ž¦‘GÞforward-char‘¦f(C-f)Ž¡‘Kâ:ÝMo•²!v“e›¦fforw“ard˜a˜c“haracter.Ž¦‘GÞbackward-char‘¦f(C-b)Ž¡‘Kâ:ÝMo•²!v“e›¦fbac“k˜a˜c“haracter.Ž¦‘GÞforward-word‘¦f(M-f)Ž¡‘Kâ:ÝMo•²!v“e›¢kforw“ard˜to˜the˜end˜of˜the˜next˜w“ord.‘܉W‘ÿeords˜are˜compMÞosed˜of˜letters˜andŽ¡‘Kâ:digits.Ž¦‘GÞbackward-word‘¦f(M-b)Ž¡‘Kâ:ÝMo•²!v“e›ã]bac“k˜to˜the˜start˜of˜this,–òšor˜the˜previous,“w²!ord.‘”ÁW‘ÿeords˜are˜compMÞosed˜ofŽ¡‘Kâ:letters–¦fand“digits.Ž¦‘GÞclear-screen‘¦f(C-l)Ž¡‘Kâ:ÝClear–2Ôthe“screen“and“redraš²!w“the“curren˜t“line,‘Iòlea˜ving“the“curren˜t“line“at“the“topŽ¡‘Kâ:of–¦fthe“screen.Ž¦‘GÞredraw-current-line‘¦f()Ž¡‘Kâ:ÝRefresh–¦fthe“currenš²!t“line.‘ÝÝBy“default,“this“is“un˜bMÞound.ŽŸîÁ‘GëQ1.4.2‘d(Commands–íMF‘þÄ£or“Manipulating“The“HistoryŽŽŸæC‘GÞaccept-line–¦f(Newline,“Return)Ž¡‘Kâ:ÝAccept–“‰the“line“regardless“of“where“the“cursor“is.‘דIf“this“line“is“non-empt²!y‘ÿe,‘—OaddŽ¡‘Kâ:it–\fto“the“history“list.‘Å2If“this“line“w²!as“a“history“line,‘k3then“restore“the“history“lineŽ¡‘Kâ:to–¦fits“original“state.Ž¦‘GÞprevious-history‘¦f(C-p)Ž¡‘Kâ:ÝMo•²!v“e–¦f`up'“through“the“history“list.Ž¦‘GÞnext-history‘¦f(C-n)Ž¡‘Kâ:ÝMo•²!v“e›¦f`do“wn'˜through˜the˜history˜list.Ž¦‘GÞbeginning-of-history‘¦f(M-<)Ž¡‘Kâ:ÝMo•²!v“e–¦fto“the“ rst“line“in“the“history‘ÿe.ŽŽŸŒ‹ †ÊŸò‘GÝ12’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÞend-of-history‘¦f(M->)Ž¤ 33‘Kâ:ÝMo•²!v“e–¦fto“the“end“of“the“input“history‘ÿe,“i.e.,“the“line“currenš²!tly“bMÞeing“en˜tered.Ž©©-‘GÞreverse-search-history‘¦f(C-r)Ž¡‘Kâ:ÝSearc•²!h›½:bac“kw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`up'˜through˜the˜his-Ž¡‘Kâ:tory–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.Ž¦‘GÞforward-search-history‘¦f(C-s)Ž¡‘Kâ:ÝSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–¦fas“necessary‘ÿe.‘ÝÝThis“is“an“incremenš²!tal“searc˜h.Ž¦‘GÞnon-incremental-reverse-search-history‘¦f(M-p)Ž¡‘Kâ:ÝSearc•²!h›½:bac“kw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`up'˜through˜the˜his-Ž¡‘Kâ:tory–Ryas“necessary“using“a“non-incremenš²!tal“searc˜h“for“a“string“supplied“b˜y“theŽ¡‘Kâ:user.Ž¦‘GÞnon-incremental-forward-search-history‘¦f(M-n)Ž¡‘Kâ:ÝSearc•²!h›‰÷forw“ard˜starting˜at˜the˜curren“t˜line˜and˜mo“ving˜`do“wn'˜through˜the˜theŽ¡‘Kâ:history–3ªas“necessary“using“a“non-incremenš²!tal“searc˜h“for“a“string“supplied“b˜y“theŽ¡‘Kâ:user.Ž¦‘GÞhistory-search-forward‘¦f()Ž¡‘Kâ:ÝSearc•²!h›úOforw“ard˜through˜the˜history˜for˜the˜string˜of˜c“haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–ï‘of“the“currenš²!t“line“and“the“curren˜t“cursor“pšMÞosition“(the“áp˜oin²!t=Ý).‘¹_This“is“aŽ¡‘Kâ:non-incremen•²!tal›¦fsearc“h.‘ÝÝBy˜default,˜this˜command˜is˜un“bMÞound.Ž¦‘GÞhistory-search-backward‘¦f()Ž¡‘Kâ:ÝSearc•²!h›-»bac“kw“ard˜through˜the˜history˜for˜the˜string˜of˜c“haracters˜bMÞet“w“een˜theŽ¡‘Kâ:start–7®of“the“currenš²!t“line“and“the“pMÞoin˜t.‘‘¶This“is“a“non-incremen˜tal“searc˜h.‘‘¶ByŽ¡‘Kâ:default,–¦fthis“command“is“un²!bMÞound.Ž¦‘GÞyank-nth-arg‘¦f(M-C-y)Ž¡‘Kâ:ÝInsert–@the“ rst“argumenš²!t“to“the“previous“command“(usually“the“second“w˜ord“onŽ¡‘Kâ:the–uprevious“line).‘ÍnWith“an“argumenš²!t“ánÝ,‘~õinsert“the“ánÝth“w˜ord“from“the“previousŽ¡‘Kâ:command–Dø(the“wš²!ords“in“the“previous“command“bMÞegin“with“w˜ord“0).‘½cA‘Dßnegativ˜eŽ¡‘Kâ:argumenš²!t–¦finserts“the“ánÝth“w˜ord“from“the“end“of“the“previous“command.Ž¦‘GÞyank-last-arg–¦f(M-.,“M-_)Ž¡‘Kâ:ÝInsert–5Elast“argumenš²!t“to“the“previous“command“(the“last“w˜ord“of“the“previousŽ¡‘Kâ:history–¬fenš²!try).‘ïÜWith“an“argumen˜t,‘­æbMÞeha˜v˜e“exactly“lik˜e“Þyank-nth-argÝ.‘ïÜSucces-Ž¡‘Kâ:sivš²!e–&—calls“to“Þyank-last-arg“Ýmo˜v˜e“bac˜k“through“the“history“list,‘F£inserting“theŽ¡‘Kâ:last–¦fargumenš²!t“of“eac˜h“line“in“turn.ŽŸëõ‘GëQ1.4.3‘d(Commands–íMF›þÄ£or“Changing“T˜extŽŽŸd+‘GÞdelete-char‘¦f(C-d)Ž¡‘Kâ:ÝDelete–é)the“c²!haracter“under“the“cursor.‘¦&If“the“cursor“is“at“the“bMÞeginning“of“theŽ¡‘Kâ:line,›<6there–@are“no“c²!haracters“in“the“line,˜and“the“last“cš²!haracter“t˜ypMÞed“w˜as“notŽ¡‘Kâ:bMÞound–¦fto“Þdelete-charÝ,“then“return“ÞEOFÝ.ŽŽŸŒ‹ ŽŸò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®13ŽŽŽ ƒ3Ú ý¨ðБGÞbackward-delete-char‘¦f(Rubout)Ž¤ 33‘Kâ:ÝDelete–Ÿ§the“cš²!haracter“bMÞehind“the“cursor.‘ÛA‘Ÿ¥n˜umeric“argumen˜t“means“to“kill“theŽ¡‘Kâ:c²!haracters–¦finstead“of“deleting“them.Ž©…w‘GÞforward-backward-delete-char‘¦f()Ž¡‘Kâ:ÝDelete–˜‘the“c²!haracter“under“the“cursor,‘Õunless“the“cursor“is“at“the“end“of“theŽ¡‘Kâ:line,‘×~in–Í­whicš²!h“case“the“c˜haracter“bMÞehind“the“cursor“is“deleted.‘S±By“default,‘×~thisŽ¡‘Kâ:is–¦fnot“bMÞound“to“a“k²!ey‘ÿe.Ž¦‘GÞquoted-insert–¦f(C-q,“C-v)Ž¡‘Kâ:ÝAdd–¸the“next“cš²!haracter“t˜ypMÞed“to“the“line“v˜erbatim.‘CÔThis“is“ho˜w“to“insert“k˜eyŽ¡‘Kâ:sequences–¦flik²!e“ž™š¸hŽ‘‘2Ÿù@‰ff ubŸÀ­C-qŽŽ‘‘2ŸÙš‰ff ubŽ‘„ž™š¸iŽŽ‘èÝ,“for“example.Ž¦‘GÞtab-insert‘¦f(M-TAB)Ž¡‘Kâ:ÝInsert–¦fa“tab“c²!haracter.Ž¦‘GÞself-insert–¦f(a,“b,“A,“1,“!,“...)Ž¡‘Kâ:ÝInsert‘¦fy²!ourself.Ž¦‘GÞtranspose-chars‘¦f(C-t)Ž¡‘Kâ:ÝDrag–Õãthe“cš²!haracter“bMÞefore“the“cursor“forw˜ard“o˜v˜er“the“c˜haracter“at“the“cursor,Ž¡‘Kâ:moš²!ving–C"the“cursor“forw˜ard“as“w˜ell.‘´If“the“insertion“pMÞoin˜t“is“at“the“end“of“theŽ¡‘Kâ:line,‘ÕÍthen–¡¦this“transpMÞoses“the“last“t•²!w“o›¡¦c“haracters˜of˜the˜line.‘†óNegativ“e˜argumen“tsŽ¡‘Kâ:don't‘¦fw²!ork.Ž¦‘GÞtranspose-words‘¦f(M-t)Ž¡‘Kâ:ÝDrag–the“wš²!ord“bMÞehind“the“cursor“past“the“w˜ord“in“fron˜t“of“the“cursor“mo˜vingŽ¡‘Kâ:the–¦fcursor“o•²!v“er–¦fthat“wš²!ord“as“w˜ell.Ž¦‘GÞupcase-word‘¦f(M-u)Ž¡‘Kâ:ÝUppMÞercase–ÖÓthe“currenš²!t“(or“follo˜wing)“w˜ord.‘o#With“a“negativ˜e“argumen˜t,‘âîuppMÞer-Ž¡‘Kâ:case–¦fthe“previous“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.Ž¦‘GÞdowncase-word‘¦f(M-l)Ž¡‘Kâ:ÝLo•²!w“ercase–”ãthe“currenš²!t“(or“follo˜wing)“w˜ord.‘‚²With“a“negativ˜e“argumen˜t,‘Ë–lo˜w˜ercaseŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.Ž¦‘GÞcapitalize-word‘¦f(M-c)Ž¡‘Kâ:ÝCapitalize–6the“currenš²!t“(or“follo˜wing)“w˜ord.‘€#With“a“negativ˜e“argumen˜t,‘ÅrcapitalizeŽ¡‘Kâ:the–¦fprevious“wš²!ord,“but“do“not“mo˜v˜e“the“cursor.ŽŸ¤‡‘GëQ1.4.4‘d(Killing–íMAnd“Y‘þÄ£ankingŽŽŸ®˜‘GÞkill-line‘¦f(C-k)Ž¡‘Kâ:ÝKill–¦fthe“text“from“the“curren²!t“cursor“pMÞosition“to“the“end“of“the“line.Ž¦‘GÞbackward-kill-line–¦f(C-x“Rubout)Ž¡‘Kâ:ÝKill›¦fbac•²!kw“ard˜to˜the˜bMÞeginning˜of˜the˜line.Ž¦‘GÞunix-line-discard‘¦f(C-u)Ž¡‘Kâ:ÝKill›Ó¨bac•²!kw“ard˜from˜the˜cursor˜to˜the˜bMÞeginning˜of˜the˜curren“t˜line.‘e¢The˜killedŽ¡‘Kâ:text–¦fis“sa•²!v“ed–¦fon“the“kill-ring.ŽŽŸŒ‹™iŸò‘GÝ14’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGÞkill-whole-line‘¦f()Ž¤ 33‘Kâ:ÝKill–¼èall“cš²!haracters“on“the“curren˜t“line,‘ë›no“matter“where“the“cursor“is.‘By“default,Ž¡‘Kâ:this–¦fis“un²!bMÞound.Ž©…w‘GÞkill-word‘¦f(M-d)Ž¡‘Kâ:ÝKill–]from“the“cursor“to“the“end“of“the“currenš²!t“w˜ord,‘kÆor“if“bMÞet˜w˜een“w˜ords,‘kÆto“theŽ¡‘Kâ:end–¦fof“the“next“w²!ord.‘ÝÝW‘ÿeord“bMÞoundaries“are“the“same“as“Þforward-wordÝ.Ž¦‘GÞbackward-kill-word‘¦f(M-DEL)Ž¡‘Kâ:ÝKill–·2the“w²!ord“bšMÞehind“the“cursor.‘BW‘ÿeord“b˜oundaries“are“the“same“as“Þbackward-Ž¡‘Kâ:wordÝ.Ž¦‘GÞunix-word-rubout‘¦f(C-w)Ž¡‘Kâ:ÝKill–6{the“wš²!ord“bMÞehind“the“cursor,‘Z€using“white“space“as“a“w˜ord“bMÞoundary‘ÿe.‘ŽTheŽ¡‘Kâ:killed–¦ftext“is“sa•²!v“ed–¦fon“the“kill-ring.Ž¦‘GÞdelete-horizontal-space‘¦f()Ž¡‘Kâ:ÝDelete–¦fall“spaces“and“tabs“around“pMÞoinš²!t.‘ÝÝBy“default,“this“is“un˜bMÞound.Ž¦‘GÞkill-region‘¦f()Ž¡‘Kâ:ÝKill–[the“text“bšMÞet•²!w“een–[the“p˜oinš²!t“and“the“ámark‘º_Ý(sa˜v˜ed“cursor“pMÞosition).‘«ÙThis“textŽ¡‘Kâ:is–¦freferred“to“as“the“áregionÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-region-as-kill‘¦f()Ž¡‘Kâ:ÝCopš²!y–³the“text“in“the“region“to“the“kill“bu er,‘0Eso“it“can“bMÞe“y˜ank˜ed“righ˜t“a˜w˜a˜y‘ÿe.Ž¡‘Kâ:By–¦fdefault,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-backward-word‘¦f()Ž¡‘Kâ:ÝCopš²!y–žthe“w˜ord“bšMÞefore“p˜oinš²!t“to“the“kill“bu er.‘ÄÿThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“Þbackward-wordÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞcopy-forward-word‘¦f()Ž¡‘Kâ:ÝCopš²!y–º8the“w˜ord“follo˜wing“pMÞoin˜t“to“the“kill“bu er.‘SThe“w˜ord“bMÞoundaries“are“theŽ¡‘Kâ:same–¦fas“Þforward-wordÝ.‘ÝÝBy“default,“this“command“is“un²!bMÞound.Ž¦‘GÞyank‘¦f(C-y)Ž¡‘Kâ:ÝY‘ÿeank–¦fthe“top“of“the“kill“ring“inš²!to“the“bu er“at“the“curren˜t“cursor“pMÞosition.Ž¦‘GÞyank-pop‘¦f(M-y)Ž¡‘Kâ:ÝRotate–'!the“kill-ring,‘GPand“y²!ank“the“new“top.‘`Y‘ÿeou“can“only“do“this“if“the“priorŽ¡‘Kâ:command–¦fis“yš²!ank“or“y˜ank-pMÞop.ŽŸ¤‡‘GëQ1.4.5‘d(Spiecifying–íMNumeric“Argumen–átsŽŽŸ®˜‘GÞdigit-argument–¦f(M-0,“M-1,“...“M--)Ž¡‘Kâ:ÝAdd–:Lthis“digit“to“the“argumenš²!t“already“accum˜ulating,‘Oëor“start“a“new“argumen˜t.Ž¡‘Kâ:ž™š¸hŽ‘NÍŸù@‰ff ”ŸÀ­M{ŽŽ‘NÍŸÙš‰ff ”Ž‘ZS ž™š¸iŽŽ‘a’TÝstarts–¦fa“negativš²!e“argumen˜t.Ž¦‘GÞuniversal-argument‘¦f()Ž¡‘Kâ:ÝThis–kis“another“w•²!a“y–kto“spMÞecify“an“argumenš²!t.‘«ßIf“this“command“is“follo˜w˜ed“b˜y“oneŽ¡‘Kâ:or–more“digits,›“³optionally“with“a“leading“min²!us“sign,˜those“digits“de ne“the“ar-Ž¡‘Kâ:gumenš²!t.‘ÐÚIf–\the“command“is“follo˜w˜ed“b˜y“digits,‘‡+executing“Þuniversal-argumentŽŽŸŒ‹£Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®15ŽŽŽ ƒ3Ú ý¨ðБKâ:again–Ñ«ends“the“nš²!umeric“argumen˜t,‘Ü|but“is“otherwise“ignored.‘_«As“a“spMÞecial“case,Ž¤ 33‘Kâ:if–ñúthis“command“is“immediately“follo•²!w“ed›ñúb“y˜a˜c“haracter˜that˜is˜neither˜a˜digitŽ¡‘Kâ:or–Zwminš²!us“sign,‘i§the“argumen˜t“coun˜t“for“the“next“command“is“m˜ultiplied“b˜y“four.Ž¡‘Kâ:The–{targumenš²!t“coun˜t“is“initially“one,‘°¸so“executing“this“function“the“ rst“timeŽ¡‘Kâ:makš²!es–Ï2the“argumen˜t“coun˜t“four,‘Ùea“second“time“mak˜es“the“argumen˜t“coun˜t“six-Ž¡‘Kâ:teen,–¦fand“so“on.‘ÝÝBy“default,“this“is“not“bMÞound“to“a“k²!ey‘ÿe.ŽŸû=‘GëQ1.4.6‘d(Letting–íMReadline“T–áypie“F›þÄ£or“Y˜ouŽŽŸ…[‘GÞcomplete‘¦f(TAB)Ž¡‘Kâ:ÝA²!ttempt–@to“do“completion“on“the“text“bMÞefore“the“cursor.‘ª±This“is“application-Ž¡‘Kâ:spMÞeci c.‘ÓÑGenerally‘ÿe,‘ŽJif–ˆByš²!ou“are“t˜yping“a“ lename“argumen˜t,‘ŽJy˜ou“can“do“ lenameŽ¡‘Kâ:completion;‘²æif–®»yš²!ou“are“t˜yping“a“command,‘°Ñy˜ou“can“do“command“completion;‘²æifŽ¡‘Kâ:yš²!ou–aare“t˜yping“in“a“sym˜bMÞol“to“GDB,“y˜ou“can“do“sym˜bMÞol“name“completion;‘¾vifŽ¡‘Kâ:yš²!ou–%­are“t˜yping“in“a“v‘ÿdDariable“to“Bash,‘?ly˜ou“can“do“v‘ÿdDariable“name“completion,‘?landŽ¡‘Kâ:so‘¦fon.Ž©…[‘GÞpossible-completions‘¦f(M-?)Ž¡‘Kâ:ÝList–¦fthe“pšMÞossible“completions“of“the“text“b˜efore“the“cursor.Ž¦‘GÞinsert-completions‘¦f(M-*)Ž¡‘Kâ:ÝInsert–«µall“completions“of“the“text“bšMÞefore“p˜oinš²!t“that“w˜ould“ha˜v˜e“bMÞeen“generatedŽ¡‘Kâ:b²!y‘¦fÞpossible-completionsÝ.Ž¦‘GÞmenu-complete‘¦f()Ž¡‘Kâ:ÝSimilar–ÛVto“ÞcompleteÝ,‘óbut“replaces“the“wš²!ord“to“bMÞe“completed“with“a“single“matc˜hŽ¡‘Kâ:from–‹æthe“list“of“pšMÞossible“completions.‘Ž^Rep˜eated“execution“of“Þmenu-completeŽ¡‘Kâ:Ýsteps–Õ¯through“the“list“of“pMÞossible“completions,‘!inserting“eacš²!h“matc˜h“in“turn.Ž¡‘Kâ:A²!t–/ the“end“of“the“list“of“completions,‘Q7the“bMÞell“is“rung“and“the“original“text“isŽ¡‘Kâ:restored.‘`^An–' ó3 ! cmmi10å:–Ó1:“:Ž‘lÉÞ)Ž¡‘Kâ:ÝIf–Qõthe“meta ed“cš²!haracter“áx‘TÝis“lo˜w˜ercase,‘bØrun“the“command“that“is“bMÞound“to“theŽ¡‘Kâ:corresp•MÞonding›¦fupp“ercase˜c²!haracter.Ž¦‘GÞprefix-meta‘¦f(ESC)Ž¡‘Kâ:ÝMakš²!e–[Cthe“next“c˜haracter“t˜ypšMÞed“b˜e“meta ed.‘üsThis“is“for“k²!eyb˜oards“without“aŽ¡‘Kâ:meta›¦fk•²!ey‘ÿe.‘ÝÝT“yping˜`ÞESC˜fÝ'˜is˜equiv‘ÿdDalen“t˜to˜t“yping˜`ÞM-fÝ'.Ž¦‘GÞundo–¦f(C-_,“C-x“C-u)Ž¡‘Kâ:ÝIncremenš²!tal–¦fundo,“separately“remem˜bMÞered“for“eac˜h“line.Ž¦‘GÞrevert-line‘¦f(M-r)Ž¡‘Kâ:ÝUndo–úall“cš²!hanges“made“to“this“line.‘ØäThis“is“lik˜e“executing“the“Þundo“ÝcommandŽ¡‘Kâ:enough–¦ftimes“to“get“bac²!k“to“the“bMÞeginning.Ž¦‘GÞtilde-expand‘¦f(M-~)Ž¡‘Kâ:ÝPš²!erform–¦ftilde“expansion“on“the“curren˜t“w˜ord.Ž¦‘GÞset-mark‘¦f(C-@)Ž¡‘Kâ:ÝSet–D®the“mark“to“the“currenš²!t“pMÞoin˜t.‘½JIf“a“n˜umeric“argumen˜t“is“supplied,‘X9the“markŽ¡‘Kâ:is–¦fset“to“that“pMÞosition.Ž¦‘GÞexchange-point-and-mark–¦f(C-x“C-x)Ž¡‘Kâ:ÝSwš²!ap–¾Òthe“pMÞoin˜t“with“the“mark.‘'!The“curren˜t“cursor“pMÞosition“is“set“to“the“sa˜v˜edŽ¡‘Kâ:pšMÞosition,–¦fand“the“old“cursor“p˜osition“is“sa•²!v“ed–¦fas“the“mark.Ž¦‘GÞcharacter-search‘¦f(C-])Ž¡‘Kâ:ÝA‘ü&cš²!haracter–üQis“read“and“pMÞoin˜t“is“mo˜v˜ed“to“the“next“oMÞccurrence“of“that“c˜haracter.Ž¡‘Kâ:A–¦fnegativš²!e“coun˜t“searc˜hes“for“previous“oMÞccurrences.Ž¦‘GÞcharacter-search-backward‘¦f(M-C-])Ž¡‘Kâ:ÝA‘c"cš²!haracter–c•is“read“and“pMÞoin˜t“is“mo˜v˜ed“to“the“previous“oMÞccurrence“of“thatŽ¡‘Kâ:c•²!haracter.‘ÝÝA›¦fnegativ“e˜coun“t˜searc“hes˜for˜subsequen“t˜oMÞccurrences.Ž¦‘GÞinsert-comment‘¦f(M-#)Ž¡‘Kâ:ÝThe–živ›ÿdDalue“of“the“Þcomment-begin“Ýv˜ariable“is“inserted“at“the“bMÞeginning“of“theŽ¡‘Kâ:currenš²!t–¦fline,“and“the“line“is“accepted“as“if“a“newline“had“bMÞeen“t˜ypMÞed.Ž¦‘GÞdump-functions‘¦f()Ž¡‘Kâ:ÝPrinš²!t–,Qall“of“the“functions“and“their“k˜ey“bindings“to“the“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t“is“supplied,‘Ùthe“output“is“formatted“in“suc˜h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“áinputrc‘PjÝ le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.ŽŽŸŒ‹º„Ÿò‘GÝChapter–¦f1:‘ÝÝCommand“Line“Editing’ýÓ®17ŽŽŽ ƒ3Ú ý¨ðБGÞdump-variables‘¦f()Ž¤ 33‘Kâ:ÝPrin²!t–ŽÉall“of“the“settable“v›ÿdDariables“and“their“v˜alues“to“the“Readline“output“stream.Ž¡‘Kâ:If–Îïa“nš²!umeric“argumen˜t“is“supplied,‘Ùthe“output“is“formatted“in“suc˜h“a“w˜a˜y“thatŽ¡‘Kâ:it–¦fcan“bšMÞe“made“part“of“an“áinputrc‘PjÝ le.‘ÝÝThis“command“is“un²!b˜ound“b²!y“default.ŽŸ33‘GÞdump-macros‘¦f()Ž¡‘Kâ:ÝPrinš²!t– ˆall“of“the“Readline“k˜ey“sequences“bMÞound“to“macros“and“the“strings“theyŽ¡‘Kâ:ouput.‘HþIf–tÆa“nš²!umeric“argumen˜t“is“supplied,‘¨^the“output“is“formatted“in“suc˜h“aŽ¡‘Kâ:w•²!a“y–šthat“it“can“bšMÞe“made“part“of“an“áinputrc‘DÝ le.‘ÙÃThis“command“is“un²!b˜ound“b²!yŽ¡‘Kâ:default.ŽŸ‘GëH1.5‘™Readline–f@vi“Mos3deŽŽŸ33‘!GÝWhile–×Uthe“Readline“library“došMÞes“not“ha•²!v“e–×Ua“full“set“of“Þvi“Ýediting“functions,‘¿it“do˜es“con²!tainŽ¡‘Genough–to“allo²!w“simple“editing“of“the“line.‘.ƒThe“Readline“Þvi“ÝmošMÞde“b˜eha•²!v“es–as“sp˜eci ed“inŽ¡‘Gthe–¦fãPOSIX“Ý1003.2“standard.Ž©33‘!GIn–|Uorder“to“switcš²!h“in˜teractiv˜ely“bMÞet˜w˜een“Þemacs“Ýand“Þvi“Ýediting“moMÞdes,‘„¿use“the“commandŽ¡‘GM-C-j–¦f(toggle-editing-mošMÞde).‘ÝÝThe“Readline“default“is“Þemacs“Ýmo˜de.Ž¦‘!GWhen–›‰yš²!ou“en˜ter“a“line“in“Þvi“ÝmoMÞde,‘µy˜ou“are“already“placed“in“`insertion'“moMÞde,‘µas“if“y˜ouŽ¡‘Ghad–&Gtš²!ypMÞed“an“`ÞiÝ'.‘³(Pressing“ž™š¸hŽ‘Ÿù@‰ff¤TŸÀ­ESCŽŽ‘ŸÙš‰ff¤TŽ‘2Ùž™š¸iŽŽ‘òÝswitc˜hes“y˜ou“in˜to“`command'“moMÞde,‘?çwhere“y˜ou“can“edit“theŽ¡‘Gtext–of“the“line“with“the“standard“Þvi“Ýmo•²!v“emen“t›k“eys,‘)These“functions“allo˜w“y˜ou“to“c˜hange“whic˜hŽ¡‘Gkš²!eymap–¦fis“activ˜e.Ž¦’sF‘ÿeunctionŽŽ‘GèKeymap‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kÞeymap‘yšâ()Ž¡‘.ùœÝReturns–¦fthe“currenš²!tly“activ˜e“k˜eymap.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íset‘Óõ‰ˆŠ#ØŽ“kÞeymap‘yšâ(ÞKeymap‘¦fkeymapâ)Ž¡‘.ùœÝMak•²!es›¦fák“eymap‘ûgÝthe˜curren“tly˜activ“e˜k“eymap.Ž¦’sF‘ÿeunctionŽŽ‘GèKeymap‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kšÞeymap‘Óõ‰ˆŠ#ØŽ“b˜y‘Óõ‰ˆŠ#ØŽ“name‘yšâ(Þchar‘¦f*nameâ)Ž¡‘.ùœÝReturn–pÄthe“kš²!eymap“matc˜hing“ánameÝ.‘Ëüáname‘ ËÝis“one“whic˜h“w˜ould“bMÞe“supplied“in“aŽ¡‘.ùœÞset–¦fkeymap“Ýinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“3).Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íget‘Óõ‰ˆŠ#ØŽ“kÞeymap‘Óõ‰ˆŠ#ØŽ“name‘yšâ(ÞKeymap‘¦fkeymapâ)Ž¡‘.ùœÝReturn–pÄthe“name“matcš²!hing“ák˜eymapÝ.‘Ëüáname‘ ËÝis“one“whic˜h“w˜ould“bMÞe“supplied“in“aŽ¡‘.ùœÞset–¦fkeymap“Ýinputrc“line“(see“Section“1.3“[Readline“Init“File],“page“3).ŽŸØÈ‘GëQ2.4.3‘d(Binding‘íMKeysŽŽŸ& ‘!GÝY‘ÿeou–]YassoMÞciate“kš²!eys“with“functions“through“the“k˜eymap.‘ ! ·Readline“has“sev˜eral“in˜ter-Ž¡‘Gnal‘Xk²!eymaps:‘«ÂÞemacs_standard_keymapÝ,–Þemacs_meta_keymapÝ,“Þemacs_ctlx_keymapÝ,“Þvi_Ž¡‘Gmovement_keymapÝ,‘qxand–¨Þvi_insertion_keymapÝ.‘ +¢Þemacs_standard_keymap“Ýis“the“default,Ž¡‘Gand–¦fthe“examples“in“this“man²!ual“assume“that.ŽŸ& ‘!GThese–¦ffunctions“manage“k²!ey“bindings.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbind‘Óõ‰ˆŠ#ØŽ“kÞey‘yšâ(Þint–¦fkey,“Function“*functionâ)Ž¡‘.ùœÝBinds–Mákš²!ey‘eÝto“áfunction“Ýin“the“curren˜tly“activ˜e“k˜eymap.‘Ö*Returns“non-zero“in“theŽ¡‘.ùœcase–¦fof“an“inš²!v‘ÿdDalid“ák˜eyÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbind‘Óõ‰ˆŠ#ØŽ“kÞey‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þint–¦fkey,“Function“*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝBind–¦fákš²!ey‘–~Ýto“áfunction“Ýin“ámapÝ.‘ÝÝReturns“non-zero“in“the“case“of“an“in˜v‘ÿdDalid“ák˜eyÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunšÞbind‘Óõ‰ˆŠ#ØŽ“k˜ey‘yšâ(Þint‘¦fkeyâ)Ž¡‘.ùœÝBind–)žákš²!ey‘¶Ýto“the“n˜ull“function“in“the“curren˜tly“activ˜e“k˜eymap.‘´EReturns“non-zeroŽ¡‘.ùœin–¦fcase“of“error.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunšÞbind‘Óõ‰ˆŠ#ØŽ“k˜ey‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þint–¦fkey,“Keymap“mapâ)Ž¡‘.ùœÝBind–¦fákš²!ey‘–~Ýto“the“n˜ull“function“in“ámapÝ.‘ÝÝReturns“non-zero“in“case“of“error.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunÞbind‘Óõ‰ˆŠ#ØŽ“function‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(ÞFunction‘¦f*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝUnš²!bind–¦fall“k˜eys“that“execute“áfunction“Ýin“ámapÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍunÞbind‘Óõ‰ˆŠ#ØŽ“command‘Óõ‰ˆŠ#ØŽ“in‘Óõ‰ˆŠ#ØŽ“map‘yšâ(Þchar–¦f*command,“KeymapŽ¡‘DGmapâ)Ž¡‘.ùœÝUnš²!bind–¦fall“k˜eys“that“are“bMÞound“to“ácommand‘¸Ýin“ámapÝ.ŽŽŸŒ‹ ! IŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—25ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ígeneric‘Óõ‰ˆŠ#ØŽ“bind‘yšâ(Þint–¦ftype,“char“*keyseq,“char“*data,Ž¤ 33‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝBind–"™the“kš²!ey“sequence“represen˜ted“b˜y“the“string“ák˜eyseq‘cÝto“the“arbitrary“pMÞoin˜terŽ¡‘.ùœádataÝ.‘Ì át•²!ypšMÞe‘ üÝsa“ys–põwhat“kind“of“data“is“p˜oinš²!ted“to“b˜y“ádataÝ;‘‚Åthis“can“bMÞe“a“functionŽ¡‘.ùœ(ÞISFUNCÝ),›œa–‹*macro“(ÞISMACRÝ),˜or“a“kš²!eymap“(ÞISKMAPÝ).‘ÔÉThis“mak˜es“new“k˜eymapsŽ¡‘.ùœas–¦fnecessary‘ÿe.‘ÝÝThe“initial“kš²!eymap“in“whic˜h“to“do“bindings“is“ámapÝ.Ž©nõ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íparse‘Óõ‰ˆŠ#ØŽ“and‘Óõ‰ˆŠ#ØŽ“bind‘yšâ(Þchar‘¦f*lineâ)Ž¡‘.ùœÝP²!arse–„áline‘!¤Ýas“if“it“had“bšMÞeen“read“from“the“Þinputrc“Ý le“and“p˜erform“anš²!y“k˜eyŽ¡‘.ùœbindings–Týand“v‘ÿdDariable“assignmen²!ts“found“(see“Section“1.3“[Readline“Init“File],Ž¡‘.ùœpage‘¦f3).Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íread‘Óõ‰ˆŠ#ØŽ“init‘Óõ‰ˆŠ#ØŽ“ le‘yšâ(Þchar‘¦f*filenameâ)Ž¡‘.ùœÝRead–ñ ! kš²!eybindings“and“v‘ÿdDariable“assignmen˜ts“from“á lename‘ŽÝ(see“Section“1.3Ž¡‘.ùœ[Readline–¦fInit“File],“page“3).ŽŸ;ÑGëQ2.4.4‘d(Assoiciating–íMF‘þÄ£unction“Names“and“BindingsŽŽŸQ‘!GÝThese–ŒQfunctions“alloš²!w“y˜ou“to“ nd“out“what“k˜eys“in˜v˜ok˜e“named“functions“and“the“functionsŽ¡‘Gin•²!v“ok“ed›¦fb“y˜a˜particular˜k“ey˜sequence.Ž¦’sF‘ÿeunctionŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ínamed‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar‘¦f*nameâ)Ž¡‘.ùœÝReturn–¦fthe“function“with“name“ánameÝ.Ž¦’sF‘ÿeunctionŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ífunction‘Óõ‰ˆŠ#ØŽ“of‘Óõ‰ˆŠ#ØŽ“kÞeyseq‘yšâ(Þchar–¦f*keyseq,“KeymapŽ¡‘DGmap,–¦fint“*typeâ)Ž¡‘.ùœÝReturn–Qthe“function“in•²!v“ok“ed›Qb“y˜ák“eyseq‘R7Ýin˜k“eymap˜ámapÝ.‘ŸIf˜ámap‘fRÝis˜NULL,˜theŽ¡‘.ùœcurren•²!t›5ùk“eymap˜is˜used.‘¸cIf˜át“ypMÞe‘ÓÝis˜not˜NULL,˜the˜t“ypMÞe˜of˜the˜ob‘›»ject˜is˜returnedŽ¡‘.ùœin–¦fit“(one“of“ÞISFUNCÝ,“ÞISKMAPÝ,“or“ÞISMACRÝ).Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çrl‘Óõ‰ˆŠ#ØŽ›÷Íin•Þv“oking‘Óõ‰ˆŠ#ØŽ˜k“eyseqs‘yšâ(ÞFunction‘¦f*functionâ)Ž¡‘.ùœÝReturn–®Tan“arraš²!y“of“strings“represen˜ting“the“k˜ey“sequences“used“to“in˜v˜ok˜e“áfunc-Ž¡‘.ùœtion–¦fÝin“the“currenš²!t“k˜eymap.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çrl‘Óõ‰ˆŠ#ØŽ›÷Íin•Þv“oking‘Óõ‰ˆŠ#ØŽ˜k“eyseqs‘Óõ‰ˆŠ#ØŽ˜in‘Óõ‰ˆŠ#ØŽ˜map‘yšâ(ÞFunction‘¦f*function,Ž¡‘DGKeymap‘¦fmapâ)Ž¡‘.ùœÝReturn–®Tan“arraš²!y“of“strings“represen˜ting“the“k˜ey“sequences“used“to“in˜v˜ok˜e“áfunc-Ž¡‘.ùœtion–¦fÝin“the“k²!eymap“ámapÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ífunction‘Óõ‰ˆŠ#ØŽ“dumpb"er‘yšâ(Þint‘¦freadableâ)Ž¡‘.ùœÝPrinš²!t–žOthe“readline“function“names“and“the“k˜ey“sequences“curren˜tly“bMÞound“toŽ¡‘.ùœthem–Ãto“Þrl_outstreamÝ.‘3ÄIf“áreadable‘`Ýis“non-zero,‘Ê1the“list“is“formatted“in“suc²!h“aŽ¡‘.ùœw•²!a“y–¦fthat“it“can“bMÞe“made“part“of“an“Þinputrc“Ý le“and“re-read.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ílist‘Óõ‰ˆŠ#ØŽ“funmap‘Óõ‰ˆŠ#ØŽ“names‘yšâ()Ž¡‘.ùœÝPrin²!t–¦fthe“names“of“all“bindable“Readline“functions“to“Þrl_outstreamÝ.ŽŽŸŒ‹“Ÿò‘GÝ26’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGëQ2.4.5‘d(Allo–áwing‘íMUndoingŽŽŸëè‘!GÝSuppMÞorting–&Œthe“undo“command“is“a“painless“thing,‘@and“makš²!es“y˜our“functions“m˜uc˜h“moreŽ¤ 33‘Guseful.‘€:It–1Úis“certainly“easy“to“try“something“if“yš²!ou“kno˜w“y˜ou“can“undo“it.‘€:I‘1¶could“use“anŽ¡‘Gundo–¦ffunction“for“the“stoMÞcš²!k“mark˜et.Ž©ëè‘!GIf–+ôy²!our“function“simply“inserts“text“once,›Dqor“deletes“text“once,˜and“uses“Þrl_insert_textŽ¡‘G()–¦fÝor“Þrl_delete_text“()“Ýto“do“it,“then“undoing“is“already“done“for“y²!ou“automatically‘ÿe.Ž¦‘!GIf–u†yš²!ou“do“m˜ultiple“insertions“or“m˜ultiple“deletions,‘²€or“an˜y“com˜bination“of“these“opMÞerations,Ž¡‘Gyš²!ou–‘should“group“them“together“in˜to“one“opMÞeration.‘œ]This“is“done“with“Þrl_begin_undo_Ž¡‘Ggroup–¦f()“Ýand“Þrl_end_undo_group“()Ý.Ž¦‘!GThe–¦ftš²!ypMÞes“of“ev˜en˜ts“that“can“bMÞe“undone“are:ŽŸ8µ‘.ùœÞenum–¿ªundo_code“{“UNDO_DELETE,“UNDO_INSERT,“UNDO_BEGIN,“UNDO_END“};Ž¦‘!GÝNotice–£¯that“ÞUNDO_DELETE“Ýmeans“to“insert“some“text,‘¤:and“ÞUNDO_INSERT“Ýmeans“to“deleteŽ¡‘Gsome–é°text.‘žöThat“is,›nthe“undo“coMÞde“tells“undo“what“to“undo,˜not“ho²!w“to“undo“it.‘žöÞUNDO_BEGINŽ¡‘GÝand–¦fÞUNDO_END“Ýare“tags“added“b²!y“Þrl_begin_undo_group“()“Ýand“Þrl_end_undo_group“()Ý.Ž©¤’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íbb"egin‘Óõ‰ˆŠ#ØŽ“undo‘Óõ‰ˆŠ#ØŽ“group‘yšâ()Ž¡‘.ùœÝBegins–o²sa²!ving“undo“information“in“a“group“construct.‘9ÀThe“undo“informationŽ¡‘.ùœusually–comes“from“calls“to“Þrl_insert_text›¦f()“Ýand“Þrl_delete_text˜()Ý,‘¸butŽ¡‘.ùœcould–¦fbMÞe“the“result“of“calls“to“Þrl_add_undo“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íend‘Óõ‰ˆŠ#ØŽ“undo‘Óõ‰ˆŠ#ØŽ“group‘yšâ()Ž¡‘.ùœÝCloses–ƒthe“curren²!t“undo“group“started“with“Þrl_begin_undo_group‘¦f()Ý.‘14ThereŽ¡‘.ùœshould–ºbMÞe“one“call“to“Þrl_end_undo_group‘¦f()“Ýfor“eac²!h“call“to“Þrl_begin_undo_Ž¡‘.ùœgroup‘¦f()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íadd‘Óõ‰ˆŠ#ØŽ“undo‘yšâ(Þenum–¦fundo_code“what,“int“start,“int“end,Ž¡‘DGchar‘¦f*textâ)Ž¡‘.ùœÝRemem•²!bMÞer›ç°ho“w˜to˜undo˜an˜ev“en“t˜(according˜to˜áwhat=Ý).‘¡ºThe˜a ected˜text˜runsŽ¡‘.ùœfrom–¦fástart‘ãfÝto“áendÝ,“and“encompasses“átextÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çfree‘Óõ‰ˆŠ#ØŽ–÷Íundo‘Óõ‰ˆŠ#ØŽ“list‘yšâ()Ž¡‘.ùœÝF‘ÿeree–¦fthe“existing“undo“list.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ído‘Óõ‰ˆŠ#ØŽ“undo‘yšâ()Ž¡‘.ùœÝUndo–Áûthe“ rst“thing“on“the“undo“list.‘0Returns“Þ0“Ýif“there“w²!as“nothing“to“undo,Ž¡‘.ùœnon-zero–¦fif“something“w²!as“undone.Ž¦‘!GFinally‘ÿe,›Á#if–»Êy²!ou“neither“insert“nor“delete“text,˜but“directly“moMÞdify“the“existing“text“(e.g.,Ž¡‘Gc²!hange–jÕits“case),››ñcall“Þrl_modifying‘¦f()“Ýonce,˜just“bšMÞefore“y²!ou“mo˜dify“the“text.‘++Y‘ÿeou“m²!ustŽ¡‘Gsupply–¦fthe“indices“of“the“text“range“that“y²!ou“are“going“to“moMÞdify‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ímob"difying‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝT‘ÿeell–ØmReadline“to“sa•²!v“e–Ømthe“text“bMÞet•²!w“een–Ømástart‘mÝand“áend‘F¿Ýas“a“single“undo“unit.‘sñItŽ¡‘.ùœis–¦fassumed“that“yš²!ou“will“subsequen˜tly“moMÞdify“that“text.ŽŽŸŒ‹$’Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—27ŽŽŽ ƒ3Ú ý¨ðБGëQ2.4.6‘d(Redispla–áyŽŽŸ"’sÝF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷ÍredisplaÞy‘yšâ()Ž¤ 33‘.ùœÝChange–‡what's“displa•²!y“ed–‡on“the“screen“to“re ect“the“currenš²!t“con˜ten˜ts“of“Þrl_Ž¡‘.ùœline_bufferÝ.Ž©"’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íforced‘Óõ‰ˆŠ#ØŽ“upb"date‘Óõ‰ˆŠ#ØŽ“displaÞy‘yšâ()Ž¡‘.ùœÝF‘ÿeorce– Uthe“line“to“bšMÞe“up˜dated“and“redispla•²!y“ed,‘#Qwhether– ! Uor“not“Readline“thinksŽ¡‘.ùœthe–¦fscreen“displa²!y“is“correct.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íon‘Óõ‰ˆŠ#ØŽ“new‘Óõ‰ˆŠ#ØŽ“line‘yšâ()Ž¡‘.ùœÝT‘ÿeell–¾ the“upMÞdate“routines“that“wš²!e“ha˜v˜e“mo˜v˜ed“on˜to“a“new“(empt˜y)“line,‘ÃñusuallyŽ¡‘.ùœafter–¦fouputting“a“newline.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íreset‘Óõ‰ˆŠ#ØŽ“line‘Óõ‰ˆŠ#ØŽ“state‘yšâ()Ž¡‘.ùœÝReset–äÒthe“displaš²!y“state“to“a“clean“state“and“redispla˜y“the“curren˜t“line“startingŽ¡‘.ùœon–¦fa“new“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ímessage‘yšâ(Þva_alistâ)Ž¡‘.ùœÝThe–ò“argumenš²!ts“are“a“string“as“w˜ould“bMÞe“supplied“to“ÞprintfÝ.‘ÂdThe“resultingŽ¡‘.ùœstring–C3is“displa•²!y“ed–C3in“the“áecš²!ho“areaÝ.‘ ´EThe“ec˜ho“area“is“also“used“to“displa˜yŽ¡‘.ùœn•²!umeric›¦fargumen“ts˜and˜searc“h˜strings.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íclear‘Óõ‰ˆŠ#ØŽ“message‘yšâ()Ž¡‘.ùœÝClear–¦fthe“message“in“the“ec²!ho“area.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ›÷Ísa•Þv“e‘Óõ‰ˆŠ#ØŽ˜prompt‘yšâ()Ž¡‘.ùœÝSa•²!v“e–º the“loMÞcal“Readline“prompt“displaš²!y“state“in“preparation“for“displa˜ying“aŽ¡‘.ùœnew–¦fmessage“in“the“message“area“with“Þrl_messageÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Írestore‘Óõ‰ˆŠ#ØŽ“prompt‘yšâ()Ž¡‘.ùœÝRestore–õ´the“loMÞcal“Readline“prompt“displaš²!y“state“sa˜v˜ed“b˜y“the“most“recen˜t“callŽ¡‘.ùœto‘¦fÞrl_save_promptÝ.ŽŸêï‘GëQ2.4.7‘d(Moidifying‘íMT‘þÄ£extŽŽŸ"’sÝF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinsert‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þchar‘¦f*textâ)Ž¡‘.ùœÝInsert–¦fátext‘ãfÝinš²!to“the“line“at“the“curren˜t“cursor“pMÞosition.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ídelete‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝDelete–¦fthe“text“bMÞet•²!w“een–¦fástart‘ãfÝand“áend‘¸Ýin“the“curren²!t“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcopÞy‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝReturn–¦fa“copš²!y“of“the“text“bMÞet˜w˜een“ástart‘ãfÝand“áend‘¸Ýin“the“curren˜t“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íkill‘Óõ‰ˆŠ#ØŽ“text‘yšâ(Þint–¦fstart,“int“endâ)Ž¡‘.ùœÝCopš²!y–vSthe“text“bMÞet˜w˜een“ástart‘³SÝand“áend‘ä¥Ýin“the“curren˜t“line“to“the“kill“ring,‘ªNap-Ž¡‘.ùœpšMÞending–FLor“prep˜ending“to“the“last“kill“if“the“last“command“w²!as“a“kill“command.Ž¡‘.ùœThe–4¡text“is“deleted.‘ˆIf“ástart‘q¡Ýis“less“than“áendÝ,›X/the“text“is“appMÞended,˜otherwiseŽ¡‘.ùœprepMÞended.‘ÝÝIf–¦fthe“last“command“w²!as“not“a“kill,“a“new“kill“ring“slot“is“used.ŽŽŸŒ‹1Ÿò‘GÝ28’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGëQ2.4.8‘d(Utilit–áy‘íMF‘þÄ£unctionsŽŽŸ0o’sÝF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íread‘Óõ‰ˆŠ#ØŽ“kÞey‘yšâ()Ž¤ 33‘.ùœÝReturn–Dšthe“next“cš²!haracter“a˜v‘ÿdDailable.‘½DThis“handles“input“inserted“in˜to“the“inputŽ¡‘.ùœstream–r(via“ápMÞending“input‘¯(Ý(see“Section“2.3“[Readline“V‘ÿeariables],‘¥page“21)“andŽ¡‘.ùœÞrl_stuff_char–¦f()Ý,“macros,“and“cš²!haracters“read“from“the“k˜eybMÞoard.Ž©0o’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ígetc‘yšâ(ÞFILE‘¦f*â)Ž¡‘.ùœÝReturn–¦fthe“next“cš²!haracter“a˜v‘ÿdDailable“from“the“k˜eybMÞoard.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ístu ‘Óõ‰ˆŠ#ØŽ“cÞhar‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝInsert–5gác‘ßkÝin²!to“the“Readline“input“stream.‘ ŠáIt“will“bšMÞe“Þ"ÝreadÞ"“Ýb˜efore“ReadlineŽ¡‘.ùœattempts–¦fto“read“c²!haracters“from“the“terminal“with“Þrl_read_key“()Ý.Ž¦’sF‘ÿeunctionŽŽ‘Gèrl_extend_line_buffer‘™˜ç(inÞt‘yšÞlenâ)Ž¡‘.ùœÝEnsure–6that“Þrl_line_buffer“Ýhas“enough“space“to“hold“álen“Ýc²!haracters,‘LîpMÞossiblyŽ¡‘.ùœrealloMÞcating–¦fit“if“necessary‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Íinitialize‘yšâ()Ž¡‘.ùœÝInitialize–¦for“re-initialize“Readline's“in²!ternal“state.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íreset‘Óõ‰ˆŠ#ØŽ“terminal‘yšâ(Þchar‘¦f*terminal_nameâ)Ž¡‘.ùœÝReinitialize–CÜReadline's“idea“of“the“terminal“settings“using“áterminal‘¨/‰x³HøŽ‘ñ'name‘àãÝas“theŽ¡‘.ùœterminal–¦ft²!ypMÞe“(e.g.,“Þvt100Ý).Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çalphabb"etic‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“an“alphabMÞetic“c²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çnÞumeric‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“nš²!umeric“c˜haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çding‘yšâ()Ž¡‘.ùœÝRing–¦fthe“terminal“bšMÞell,“ob˜eying“the“setting“of“Þbell-styleÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍdisplašÞy‘Óõ‰ˆŠ#ØŽ“matc˜h‘Óõ‰ˆŠ#ØŽ“list‘yšâ(Þchar–¦f**matches,“int“len,“intŽ¡‘DGmaxâ)Ž¡‘.ùœÝA‘jùcon•²!v“enience–k+function“for“displa²!ying“a“list“of“strings“in“columnar“format“onŽ¡‘.ùœReadline's–‘output“stream.‘¯–Þmatches“Ýis“the“list“of“strings,›7Uin“argv“format,˜suc²!h“asŽ¡‘.ùœa–bõlist“of“completion“matcš²!hes.‘ÇbÞlen“Ýis“the“n˜um˜bMÞer“of“strings“in“ÞmatchesÝ,‘prand“ÞmaxŽ¡‘.ùœÝis–Kthe“length“of“the“longest“string“in“ÞmatchesÝ.‘ËçThis“function“uses“the“settingŽ¡‘.ùœof–VÝÞprint-completions-horizontally“Ýto“select“hoš²!w“the“matc˜hes“are“displa˜y˜edŽ¡‘.ùœ(see–¦fSection“1.3.1“[Readline“Init“File“Syn²!tax],“page“4).Ž¦‘!GThe–¦ffolloš²!wing“are“implemen˜ted“as“macros,“de ned“in“Þchartypes.hÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çuppb"ercase‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“an“uppšMÞercase“alphab˜etic“c²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çlo•Þw“ercase‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“lo•²!w“ercase–¦falphabMÞetic“c²!haracter.ŽŽŸŒ‹>HŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—29ŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘™˜çdigit‘Óõ‰ˆŠ#ØŽ‘÷Íp‘yšâ(Þint‘¦fcâ)Ž¤ 33‘.ùœÝReturn–¦f1“if“ác‘PjÝis“a“nš²!umeric“c˜haracter.Ž©£Ò’sF‘ÿeunctionŽŽ‘Gèint‘™˜çto‘Óõ‰ˆŠ#ØŽ‘÷Íuppb"er‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–ò«ác‘œ¯Ýis“a“lo•²!w“ercase–ò«alphabšMÞetic“c²!haracter,‘E¼return“the“corresp˜onding“upp˜ercaseŽ¡‘.ùœc²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çto‘Óõ‰ˆŠ#ØŽ‘÷Ílo•Þw“er‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–Z¼ác‘ÀÝis“an“uppšMÞercase“alphab˜etic“c²!haracter,‘‡Ñreturn“the“corresp˜onding“lo•²!w“ercaseŽ¡‘.ùœc²!haracter.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çdigit‘Óõ‰ˆŠ#ØŽ‘÷Ív‘ÿ;¼alue‘yšâ(Þint‘¦fcâ)Ž¡‘.ùœÝIf–¦fác‘PjÝis“a“n•²!um“bMÞer,–¦freturn“the“v‘ÿdDalue“it“represen²!ts.ŽŸp ‘GëQ2.4.9‘d(Alternate‘íMIn–áterfaceŽŽŸh‘!GÝAn–_Âalternate“inš²!terface“is“a˜v‘ÿdDailable“to“plain“Þreadline()Ý.‘ ! ñSome“applications“need“toŽ¡‘Gin•²!terlea“v“e›|™k“eybMÞoard˜I/O‘|Žwith˜ le,–„õdevice,“or˜windo•²!w˜system˜I/O,˜t“ypically˜b“y˜using˜a˜mainŽ¡‘GlošMÞop–Seto“Þselect()“Ýon“v‘ÿdDarious“ le“descriptors.‘Â2T‘ÿeo“accomo˜date“this“need,‘cÿreadline“can“also“b˜eŽ¡‘Gin•²!v“ok“ed–¾=as“a“`callbacš²!k'“function“from“an“ev˜en˜t“loMÞop.‘%cThere“are“functions“a˜v‘ÿdDailable“to“mak˜eŽ¡‘Gthis‘¦feasy‘ÿe.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacÞk‘Óõ‰ˆŠ#ØŽ“handler‘Óõ‰ˆŠ#ØŽ“install‘yšâ(Þchar–¦f*prompt,“VfunctionŽ¡‘DG*lhandlerâ)Ž¡‘.ùœÝSet–îiup“the“terminal“for“readline“I/O‘îVand“displa²!y“the“initial“expanded“v‘ÿdDalue“ofŽ¡‘.ùœápromptÝ.‘hSa•²!v“e–?the“v‘ÿdDalue“of“álhandler‘×hÝto“use“as“a“callbac²!k“when“a“complete“lineŽ¡‘.ùœof–¦finput“has“bMÞeen“en²!tered.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacšÞk‘Óõ‰ˆŠ#ØŽ“read‘Óõ‰ˆŠ#ØŽ“c˜har‘yšâ()Ž¡‘.ùœÝWhenevš²!er–4'an“application“determines“that“k˜eybMÞoard“input“is“a˜v‘ÿdDailable,‘Kit“shouldŽ¡‘.ùœcall–„ÝÞrl_callback_read_char()Ý,‘¼zwhicš²!h“will“read“the“next“c˜haracter“from“theŽ¡‘.ùœcurrenš²!t–øoinput“source.‘ Ó÷If“that“c˜haracter“completes“the“line,‘ŒðÞrl_callback_Ž¡‘.ùœread_char–ÈçÝwill“in•²!v“ok“e–Èçthe“álhandler‘’Ýfunction“sa•²!v“ed›Èçb“y˜Þrl_callback_handler_Ž¡‘.ùœinstall–jÝto“proMÞcess“the“line.‘<éÞEOF“Ýis“indicated“b²!y“calling“álhandler‘ä“Ýwith“a“ÞNULLŽ¡‘.ùœÝline.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcallbacšÞk‘Óõ‰ˆŠ#ØŽ“handler‘Óõ‰ˆŠ#ØŽ“remo˜v˜e‘yšâ()Ž¡‘.ùœÝRestore–’Uthe“terminal“to“its“initial“state“and“remo•²!v“e–’Uthe“line“handler.‘×-This“ma²!yŽ¡‘.ùœbMÞe–¦fcalled“from“within“a“callbacš²!k“as“w˜ell“as“indepMÞenden˜tly‘ÿe.ŽŸp ‘GëQ2.4.10‘d(An‘íMExampleŽŽŸh‘!GÝHere–¯½is“a“function“whicš²!h“c˜hanges“lo˜w˜ercase“c˜haracters“to“their“uppMÞercase“equiv‘ÿdDalen˜ts,Ž¡‘Gand–ž ! uppMÞercase“cš²!haracters“to“lo˜w˜ercase.‘ÄÈIf“this“function“w˜as“bMÞound“to“`ÞM-cÝ',‘Ûòthen“t˜ypingŽ¡‘G`ÞM-cÝ'–(Äwš²!ould“c˜hange“the“case“of“the“c˜haracter“under“pMÞoin˜t.‘³ýT˜yping“`ÞM-1–¦f0“M-cÝ'–(Äw˜ould“c˜hangeŽ¡‘Gthe–¦fcase“of“the“folloš²!wing“10“c˜haracters,“lea˜ving“the“cursor“on“the“last“c˜haracter“c˜hanged.ŽŸP5‘.ùœÞ/*–¿ªInvert“the“case“of“the“COUNT“following“characters.“*/Ž¤ €‘.ùœintŽ¡‘.ùœinvert_case_line–¿ª(count,“key)ŽŽŸŒ‹J|Ÿò‘GÝ30’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБK·îÞint–¿ªcount,“key;Ž¤ €‘.ùœ{Ž¡‘:xðregister–¿ªint“start,“end,“i;Ž¤‘:xðstart–¿ª=“rl_point;Ž¡‘:xðif–¿ª(rl_point“>=“rl_end)Ž© €‘EøDreturn‘¿ª(0);Ž¡‘:xðif–¿ª(count“<“0)Ž¦‘EøD{Ž¦‘Qw˜direction–¿ª=“-1;Ž¦‘Qw˜count–¿ª=“-count;Ž¦‘EøD}Ž¦‘:xðelseŽ¦‘EøDdirection–¿ª=“1;Ž¡‘:xð/*–¿ªFind“the“end“of“the“range“to“modify.“*/Ž¦‘:xðend–¿ª=“start“+“(count“*“direction);Ž¡‘:xð/*–¿ªForce“it“to“be“within“range.“*/Ž¦‘:xðif–¿ª(end“>“rl_end)Ž¦‘EøDend–¿ª=“rl_end;Ž¦‘:xðelse–¿ªif“(end“<“0)Ž¦‘EøDend–¿ª=“0;Ž¡‘:xðif–¿ª(start“==“end)Ž¦‘EøDreturn‘¿ª(0);Ž¡‘:xðif–¿ª(start“>“end)Ž¦‘EøD{Ž¦‘Qw˜int–¿ªtemp“=“start;Ž¦‘Qw˜start–¿ª=“end;Ž¦‘Qw˜end–¿ª=“temp;Ž¦‘EøD}Ž¡‘:xð/*–¿ªTell“readline“that“we“are“modifying“the“line,“so“it“will“saveŽ¦‘K·îthe–¿ªundo“information.“*/Ž¦‘:xðrl_modifying–¿ª(start,“end);Ž¡‘:xðfor–¿ª(i“=“start;“i“!=“end;“i++)Ž¦‘EøD{Ž¦‘Qw˜if–¿ª(uppercase_p“(rl_line_buffer[i]))Ž¦‘\öìrl_line_buffer[i]–¿ª=“to_lower“(rl_line_buffer[i]);Ž¦‘Qw˜else–¿ªif“(lowercase_p“(rl_line_buffer[i]))Ž¦‘\öìrl_line_buffer[i]–¿ª=“to_upper“(rl_line_buffer[i]);Ž¦‘EøD}Ž¦‘:xð/*–¿ªMove“point“to“on“top“of“the“last“character“changed.“*/ŽŽŸŒ‹W¶Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—31ŽŽŽ ƒ3Ú ý¨ðБ:xðÞrl_point–¿ª=“(direction“==“1)“?“end“-“1“:“start;Ž¤ €‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}ŽŸ>E‘GëH2.5‘™Readline–f@Signal“HandlingŽŽŸJ‘!GÝSignals–žare“asyncš²!hronous“ev˜en˜ts“sen˜t“to“a“proMÞcess“b˜y“the“Unix“k˜ernel,‘Xlsometimes“onŽ¤ 33‘GbšMÞehalf–Æ_of“another“pro˜cess.‘=ÈThey“are“inš²!tended“to“indicate“exceptional“ev˜en˜ts,‘]lik˜e“a“userŽ¡‘Gpressing–šˆthe“inš²!terrupt“k˜ey“on“his“terminal,‘œèor“a“net˜w˜ork“connection“bMÞeing“brok˜en.‘ÙèThere“isŽ¡‘Ga–*Çclass“of“signals“that“can“bšMÞe“sen²!t“to“the“pro˜cess“currenš²!tly“reading“input“from“the“k˜eybMÞoard.Ž¡‘GSince–3ÙReadline“c²!hanges“the“terminal“attributes“when“it“is“called,‘JÂit“needs“to“pšMÞerform“sp˜ecialŽ¡‘GproMÞcessing–^when“a“signal“is“receivš²!ed“to“restore“the“terminal“to“a“sane“state,‘h[or“pro˜videŽ¡‘Gapplication–¦fwriters“with“functions“to“do“so“man²!ually‘ÿe.Ž©J‘!GReadline–Øúconš²!tains“an“in˜ternal“signal“handler“that“is“installed“for“a“n˜um˜bMÞer“of“signalsŽ¡‘G(ÞSIGINTÝ,–h]ÞSIGQUITÝ,“ÞSIGTERMÝ,“ÞSIGALRMÝ,“ÞSIGTSTPÝ,“ÞSIGTTINÝ,“and–_ÞSIGTTOUÝ).‘ ÈWhen“one“ofŽ¡‘Gthese–Ï_signals“is“receiv²!ed,‘Ùžthe“signal“handler“will“reset“the“terminal“attributes“to“those“thatŽ¡‘Gwš²!ere–Mäin“e ect“bMÞefore“Þreadline‘¦f()“Ýw˜as“called,‘·Ãreset“the“signal“handling“to“what“it“w˜asŽ¡‘GbMÞefore–çÞreadline‘¦f()“Ýw²!as“called,‘7:and“resend“the“signal“to“the“calling“application.‘ŸÚIf“andŽ¡‘Gwhen–lµthe“calling“application's“signal“handler“returns,‘x?Readline“will“reinitialize“the“terminalŽ¡‘Gand› Ucon•²!tin“ue˜to˜accept˜input.‘ ©When˜a˜ÞSIGINT˜Ýis˜receiv“ed,‘eÐthe˜Readline˜signal˜handlerŽ¡‘GpMÞerforms–Tsome“additional“w•²!ork,‘€whic“h–Twill“cause“anš²!y“partially-en˜tered“line“to“bšMÞe“ab˜ortedŽ¡‘G(see–¦fthe“description“of“Þrl_free_line_state“()Ý).Ž¦‘!GThere––>is“an“additional“Readline“signal“handler,›™yfor“ÞSIGWINCHÝ,˜whicš²!h“the“k˜ernel“sends“toŽ¡‘Ga–€mproMÞcess“whenevš²!er“the“terminal's“size“c˜hanges“(for“example,‘¶îif“a“user“resizes“an“ÞxtermÝ).Ž¡‘GThe–ÛReadline“ÞSIGWINCH“Ýhandler“upMÞdates“Readline's“in²!ternal“screen“size“state,‘zwand“thenŽ¡‘Gcalls–÷an²!y“ÞSIGWINCH“Ýsignal“handler“the“calling“application“has“installed.‘Readline“calls“theŽ¡‘Gapplication's–;ÞSIGWINCH“Ýsignal“handler“without“resetting“the“terminal“to“its“original“state.Ž¡‘GIf–Ö«the“application's“signal“handler“došMÞes“more“than“up˜date“its“idea“of“the“terminal“size“andŽ¡‘Greturn–“ (for“example,‘–êa“Þlongjmp“Ýbac²!k“to“a“main“prošMÞcessing“lo˜op),‘–êit“ám²!ust‘Ð Ýcall“Þrl_cleanup_Ž¡‘Gafter_signal–¦f()“Ý(describšMÞed“b˜elo²!w),“to“restore“the“terminal“state.Ž¦‘!GReadline–o#proš²!vides“t˜w˜o“v‘ÿdDariables“that“allo˜w“application“writers“to“con˜trol“whether“or“notŽ¡‘Git–û.will“catcš²!h“certain“signals“and“act“on“them“when“they“are“receiv˜ed.‘Ü6It“is“impMÞortan˜t“thatŽ¡‘Gapplications– c²!hange“the“v›ÿdDalues“of“these“v˜ariables“only“when“calling“Þreadline‘¦f()Ý,‘>wnot“in“aŽ¡‘Gsignal–¦fhandler,“so“Readline's“in²!ternal“signal“state“is“not“corrupted.ŽŸqx’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcatcÞh‘Óõ‰ˆŠ#ØŽ“signalsŽ¡‘.ùœÝIf–Üthis“v‘ÿdDariable“is“non-zero,‘j9Readline“will“install“signal“handlers“for“ÞSIGINTÝ,Ž¡‘.ùœÞSIGQUITÝ,–¦fÞSIGTERMÝ,“ÞSIGALRMÝ,“ÞSIGTSTPÝ,“ÞSIGTTINÝ,“and“ÞSIGTTOUÝ.Ž¦‘.ùœThe–¦fdefault“v‘ÿdDalue“of“Þrl_catch_signals“Ýis“1.ŽŸqx’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcatcšÞh‘Óõ‰ˆŠ#ØŽ“sigwinc˜hŽ¡‘.ùœÝIf–Qthis“v‘ÿdDariable“is“non-zero,‘Ÿ"Readline“will“install“a“signal“handler“for“ÞSIGWINCHÝ.Ž¦‘.ùœThe–¦fdefault“v‘ÿdDalue“of“Þrl_catch_sigwinch“Ýis“1.ŽŸqx‘!GIf–¸0an“application“doMÞes“not“wish“to“ha•²!v“e–¸0Readline“catcš²!h“an˜y“signals,‘¼¢or“to“handle“signalsŽ¡‘Gother–¤Ãthan“those“Readline“catc²!hes“(ÞSIGHUPÝ,›äZfor“example),˜Readline“proš²!vides“con˜v˜enienceŽ¡‘Gfunctions–¦fto“do“the“necessary“terminal“and“inš²!ternal“state“clean˜up“upMÞon“receipt“of“a“signal.ŽŽŸŒ‹ \«Ÿò‘GÝ32’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcleanÞup‘Óõ‰ˆŠ#ØŽ“after‘Óõ‰ˆŠ#ØŽ“signal‘yšâ(Þvoidâ)Ž¤ 33‘.ùœÝThis–ÔJfunction“will“reset“the“state“of“the“terminal“to“what“it“w²!as“bMÞefore“ÞreadlineŽ¡‘.ùœ()–¦ÌÝwš²!as“called,‘Ùëand“remo˜v˜e“the“Readline“signal“handlers“for“all“signals,‘ÙëdepMÞendingŽ¡‘.ùœon–¦fthe“v‘ÿdDalues“of“Þrl_catch_signals“Ýand“Þrl_catch_sigwinchÝ.Ž©…’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ífree‘Óõ‰ˆŠ#ØŽ“line‘Óõ‰ˆŠ#ØŽ“state‘yšâ(Þvoidâ)Ž¡‘.ùœÝThis–Ùwwill“free“anš²!y“partial“state“assoMÞciated“with“the“curren˜t“input“line“(undoŽ¡‘.ùœinformation,‘œ×anš²!y–kpartial“history“en˜try‘ÿe,‘œ×an˜y“partially-en˜tered“k˜eybMÞoard“macro,Ž¡‘.ùœand–9Kanš²!y“partially-en˜tered“n˜umeric“argumen˜t).‘¹This“should“bšMÞe“called“b˜efore“Þrl_Ž¡‘.ùœcleanup_after_signal‘¦f()Ý.‘™gThe–äéReadline“signal“handler“for“ÞSIGINT“Ýcalls“thisŽ¡‘.ùœto–¦fabMÞort“the“curren²!t“input“line.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íreset‘Óõ‰ˆŠ#ØŽ“after‘Óõ‰ˆŠ#ØŽ“signal‘yšâ(Þvoidâ)Ž¡‘.ùœÝThis–­Âwill“reinitialize“the“terminal“and“reinstall“an²!y“Readline“signal“handlers,Ž¡‘.ùœdepMÞending–¦fon“the“v‘ÿdDalues“of“Þrl_catch_signals“Ýand“Þrl_catch_sigwinchÝ.Ž¦‘!GIf–»µan“application“doMÞes“not“wish“Readline“to“catcš²!h“ÞSIGWINCHÝ,‘ it“ma˜y“call“Þrl_resize_Ž¡‘Gterminal‘¦f()–ôÌÝto“force“Readline“to“upMÞdate“its“idea“of“the“terminal“size“when“a“ÞSIGWINCH“ÝisŽ¡‘Greceiv²!ed.Ž¦’sF‘ÿeunctionŽŽ‘Gèvoid‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íresize‘Óõ‰ˆŠ#ØŽ“terminal‘yšâ(Þvoidâ)Ž¡‘.ùœÝUpMÞdate–¦fReadline's“in²!ternal“screen“size.Ž¦‘!GThe–¦ffolloš²!wing“functions“install“and“remo˜v˜e“Readline's“signal“handlers.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íset‘Óõ‰ˆŠ#ØŽ“signals‘yšâ(Þvoidâ)Ž¡‘.ùœÝInstall–[âReadline's“signal“handler“for“ÞSIGINTÝ,– @ÞSIGQUITÝ,“ÞSIGTERMÝ,“ÞSIGALRMÝ,Ž¡‘.ùœÞSIGTSTPÝ,–+ÞSIGTTINÝ,“ÞSIGTTOUÝ,“and›¾7ÞSIGWINCHÝ,“depMÞending˜on˜the˜v‘ÿdDalues˜of˜Þrl_Ž¡‘.ùœcatch_signals–¦fÝand“Þrl_catch_sigwinchÝ.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íclear‘Óõ‰ˆŠ#ØŽ“signals‘yšâ(Þvoidâ)Ž¡‘.ùœÝRemo•²!v“e–¦fall“of“the“Readline“signal“handlers“installed“b²!y“Þrl_set_signals“()Ý.ŽŸNR‘GëH2.6‘™Custom‘f@CompletersŽŽ©÷ù‘!GÝTš²!ypically‘ÿe,‘ÿa–ýGprogram“that“reads“commands“from“the“user“has“a“w˜a˜y“of“disam˜biguatingŽ¡‘Gcommands–B and“data.‘± If“yš²!our“program“is“one“of“these,‘ithen“it“can“pro˜vide“completion“forŽ¡‘Gcommands,–ˆÃdata,“or–[bšMÞoth.‘Ñ„The“follo²!wing“sections“describ˜e“hoš²!w“y˜our“program“and“ReadlineŽ¡‘Gco•MÞop“erate–¦fto“pro²!vide“this“service.ŽŸNR‘GëQ2.6.1‘d(Ho–áw–íMCompleting“W‘þÄ£orksŽŽ¦‘!GÝIn–úorder“to“complete“some“text,‘;ßthe“full“list“of“pšMÞossible“completions“m²!ust“b˜e“a²!v‘ÿdDailable.Ž¡‘GThat–is,‘3&it“is“not“pMÞossible“to“accurately“expand“a“partial“wš²!ord“without“kno˜wing“all“of“theŽ¡‘GpMÞossible–3—wš²!ords“whic˜h“mak˜e“sense“in“that“con˜text.‘…pThe“Readline“library“pro˜vides“the“userŽ¡‘Ginš²!terface–ÿ!to“completion,‘Pand“t˜w˜o“of“the“most“common“completion“functions:‘S lename“andŽ¡‘Gusername.‘„F‘ÿeor–˜Úcompleting“other“tš²!ypMÞes“of“text,‘ÎÂy˜ou“m˜ust“write“y˜our“o˜wn“completion“function.Ž¡‘GThis–¦fsection“describMÞes“exactly“what“sucš²!h“functions“m˜ust“do,“and“pro˜vides“an“example.ŽŸ÷ù‘!GThere–¦fare“three“ma‘›»jor“functions“used“to“pMÞerform“completion:ŽŽŸŒ‹!lÚŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—33ŽŽŽ ƒ3Ú ý¨ðБ-1.Ž‘'¿«The–èbuser-in²!terface“function“Þrl_complete‘¦f()Ý.‘£ÒThis“function“is“called“with“the“sameŽ¤ 33‘'¿«argumenš²!ts– &as“other“Readline“functions“in˜tended“for“in˜teractiv˜e“use:‘«]ácoun˜t‘J&Ýand“áin˜v˜ok-Ž¡‘'¿«ing‘¨/‰x³HøŽ‘ñ'kš²!eyÝ.‘HKIt–Éàisolates“the“w˜ord“to“bMÞe“completed“and“calls“Þcompletion_matches‘¦f()“ÝtoŽ¡‘'¿«generate–†¥a“list“of“pšMÞossible“completions.‘~™It“then“either“lists“the“p˜ossible“completions,Ž¡‘'¿«inserts–¯Gthe“pšMÞossible“completions,‘ñor“actually“p˜erforms“the“completion,‘ñdep˜ending“onŽ¡‘'¿«whic•²!h›¦fbMÞeha“vior˜is˜desired.Ž©kM‘-2.Ž‘'¿«The–~Øinš²!ternal“function“Þcompletion_matches‘¦f()“Ýuses“y˜our“ágenerator‘HÝfunction“to“generateŽ¡‘'¿«the–Ü¢list“of“pMÞossible“matcš²!hes,‘ê1and“then“returns“the“arra˜y“of“these“matc˜hes.‘€‘Y‘ÿeou“shouldŽ¡‘'¿«place–¦fthe“address“of“y²!our“generator“function“in“Þrl_completion_entry_functionÝ.Ž¦‘-3.Ž‘'¿«The–q‰generator“function“is“called“repMÞeatedly“from“Þcompletion_matches‘¦f()Ý,‘¤QreturningŽ¡‘'¿«a–ñÒstring“eacš²!h“time.‘À The“argumen˜ts“to“the“generator“function“are“átext‘.ÒÝand“ástateÝ.‘À átextŽ¡‘'¿«Ýis–Ùâthe“partial“w²!ord“to“bMÞe“completed.‘xQástate‘véÝis“zero“the“ rst“time“the“function“is“called,Ž¡‘'¿«alloš²!wing–Šithe“generator“to“pMÞerform“an˜y“necessary“initialization,‘and“a“pMÞositiv˜e“non-zeroŽ¡‘'¿«inš²!teger–6–for“eac˜h“subsequen˜t“call.‘ŽmWhen“the“generator“function“returns“Þ(char‘¦f*)NULLŽ¡‘'¿«Ýthis–Ñ_signals“Þcompletion_matches‘¦f()“Ýthat“there“are“no“more“pMÞossibilities“left.‘^ÈUsuallyŽ¡‘'¿«the–§^generator“function“computes“the“list“of“pMÞossible“completions“when“ástate‘DeÝis“zero,Ž¡‘'¿«and–jreturns“them“one“at“a“time“on“subsequenš²!t“calls.‘«ßEac˜h“string“the“generator“functionŽ¡‘'¿«returns–Ô¨as“a“matcš²!h“m˜ust“bšMÞe“allo˜cated“with“Þmalloc()Ý;‘ëÉReadline“frees“the“strings“whenŽ¡‘'¿«it–¦fhas“ nished“with“them.Ž©›’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ícomplete‘yšâ(Þint–¦fignore,“int“invoking_keyâ)Ž¡‘.ùœÝComplete–¼žthe“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘ „Y‘ÿeou“ha˜v˜e“supplied“the“function“thatŽ¡‘.ùœdoMÞes–ƒœthe“initial“simple“matc²!hing“selection“algorithm“(see“Þcompletion_matchesŽ¡‘.ùœ()Ý).‘ÝÝThe–¦fdefault“is“to“do“ lename“completion.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“enÞtry‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–œÍis“a“pMÞoin²!ter“to“the“generator“function“for“Þcompletion_matches‘¦f()Ý.‘ÚªIf“theŽ¡‘.ùœv‘ÿdDalue–¸eof“Þrl_completion_entry_function“Ýis“Þ(Function‘¦f*)NULL“Ýthen“the“de-Ž¡‘.ùœfault–O lename“generator“function,–Ç Þfilename_completion_function‘¦f()Ý,“is‘Oused.ŽŸàg‘GëQ2.6.2‘d(Completion‘íMF‘þÄ£unctionsŽŽŸ£g‘!GÝHere–¦fis“the“complete“list“of“callable“completion“functions“presen²!t“in“Readline.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícomplete‘Óõ‰ˆŠ#ØŽ“inÞternal‘yšâ(Þint‘¦fwhat_to_doâ)Ž¡‘.ùœÝComplete–l%the“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘/áwhat‘¨/‰x³HøŽ–ñ'to‘¨/‰x³HøŽ“do‘øõÝsa˜ys–l%what“to“do“with“theŽ¡‘.ùœcompletion.›µŠA‘˜·v‘ÿdDalue–˜õof“`Þ?Ý'“means“list“the“pMÞossible“completions.˜`ÞTABÝ'“meansŽ¡‘.ùœdo–bóstandard“completion.›…`Þ*Ý'“means“insert“all“of“the“pMÞossible“completions.˜`Þ!Ý'Ž¡‘.ùœmeans– to“displa²!y“all“of“the“pMÞossible“completions,›%jif“there“is“more“than“one,˜asŽ¡‘.ùœw²!ell–¦fas“pMÞerforming“partial“completion.Ž¦’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ‘÷Ícomplete‘yšâ(Þint–¦fignore,“int“invoking_keyâ)Ž¡‘.ùœÝComplete–¼žthe“w²!ord“at“or“bšMÞefore“p˜oinš²!t.‘ „Y‘ÿeou“ha˜v˜e“supplied“the“function“thatŽ¡‘.ùœdoMÞes–ƒœthe“initial“simple“matc²!hing“selection“algorithm“(see“Þcompletion_matchesŽ¡‘.ùœ()–½öÝand“Þrl_completion_entry_functionÝ).‘$The“default“is“to“do“ lename“com-Ž¡‘.ùœpletion.‘ÌøThis–s·calls“Þrl_complete_internal‘¦f()“Ýwith“an“argumen²!t“depMÞending“onŽ¡‘.ùœáin•²!v“oking‘¨/‰x³HøŽ‘ñ'k“eyÝ.ŽŽŸŒ‹"zêŸò‘GÝ34’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’sF‘ÿeunctionŽŽ‘Gèint‘Z çrl‘Óõ‰ˆŠ#ØŽ–÷Ípb"ossible‘Óõ‰ˆŠ#ØŽ“completions‘yšâ(Þint–¦fcount,“int“invoking_keyâ))Ž¤ 33‘.ùœÝList–Y the“pMÞossible“completions.›õËSee“description“of“Þrl_complete‘¦f()Ý.˜This“callsŽ¡‘.ùœÞrl_complete_internal–¦f()“Ýwith“an“argumen²!t“of“`Þ?Ý'.Ž©Ò=’sF‘ÿeunctionŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinsert‘Óõ‰ˆŠ#ØŽ“completions‘yšâ(Þint–¦fcount,“int“invoking_keyâ))Ž¡‘.ùœÝInsert–Ëlthe“list“of“pMÞossible“completions“in²!to“the“line,‘T­deleting“the“partially-Ž¡‘.ùœcompleted–‘²w²!ord.›ÖöSee“description“of“Þrl_complete‘¦f()Ý.˜This“calls“Þrl_complete_Ž¡‘.ùœinternal–¦f()“Ýwith“an“argumen²!t“of“`Þ*Ý'.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜**“çcompletion‘Óõ‰ˆŠ#ØŽ‘÷ÍmatcÞhes‘yšâ(Þchar–¦f*text,“CPFunctionŽ¡‘DG*entry_funcâ)Ž¡‘.ùœÝReturns–úPan“arraš²!y“of“Þ(char‘¦f*)“Ýwhic˜h“is“a“list“of“completions“for“átextÝ.‘¤If“there“areŽ¡‘.ùœno–ûcompletions,‘Ereturns“Þ(char‘¦f**)NULLÝ.‘ÛôThe“ rst“enš²!try“in“the“returned“arra˜yŽ¡‘.ùœis–©the“substitution“for“átextÝ.‘¯ôThe“remaining“en²!tries“are“the“pMÞossible“completions.Ž¡‘.ùœThe–¦farraš²!y“is“terminated“with“a“ÞNULL“ÝpMÞoin˜ter.ŽŸ‚¸‘.ùœáenš²!try‘¨/‰x³HøŽ‘ñ'func‘m¿Ýis–ûa“function“of“t˜w˜o“args,‘ñand“returns“a“Þ(char‘¦f*)Ý.‘’OThe“ rst“argumen˜tŽ¡‘.ùœis–<ÃátextÝ.‘º§The“second“is“a“state“argumen²!t;‘_úit“is“zero“on“the“ rst“call,‘Qäand“non-zeroŽ¡‘.ùœon–Vsubsequenš²!t“calls.‘Ã@áen˜try‘¨/‰x³HøŽ‘ñ'func‘“Ýreturns“a“ÞNULL“ÝpMÞoin˜ter“to“the“caller“when“thereŽ¡‘.ùœare–¦fno“more“matc²!hes.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“ç lename‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar–¦f*text,“intŽ¡‘DGstateâ)Ž¡‘.ùœÝA‘§@generator–§‚function“for“ lename“completion“in“the“general“case.‘á1Note“thatŽ¡‘.ùœcompletion–±éin“Bash“is“a“little“di erenš²!t“bMÞecause“of“all“the“pathnames“that“m˜ustŽ¡‘.ùœbMÞe›ÿƒfollo•²!w“ed˜when˜loMÞoking˜up˜completions˜for˜a˜command.‘é3The˜Bash˜source˜isŽ¡‘.ùœa–¦fuseful“reference“for“writing“custom“completion“functions.Ž¦’sF‘ÿeunctionŽŽ‘Gèchar–™˜*“çusername‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“function‘yšâ(Þchar–¦f*text,“intŽ¡‘DGstateâ)Ž¡‘.ùœÝA‘= completion–=4generator“for“usernames.‘¢Fátext‘z4Ýcon²!tains“a“partial“username“pre-Ž¡‘.ùœceded–Ùqbš²!y“a“random“c˜haracter“(usually“`Þ~Ý').‘vÿAs“with“all“completion“generators,Ž¡‘.ùœástate‘CmÝis–¦fzero“on“the“ rst“call“and“non-zero“for“subsequen²!t“calls.ŽŸŸ ‘GëQ2.6.3‘d(Completion‘íMV‘þÄ£ariablesŽŽŸÒ=’‰ÝV‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“enÞtry‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘áKpMÞoin²!ter–áZto“the“generator“function“for“Þcompletion_matches‘¦f()Ý.‘Ž¸ÞNULL“ÝmeansŽ¡‘.ùœto–¦fuse“Þfilename_entry_function“()Ý,“the“default“ lename“completer.Ž¦’‰V‘ÿeariableŽŽ‘GèCPPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íattempted‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘í¥pMÞoinš²!ter–í¸to“an“alternativ˜e“function“to“create“matc˜hes.‘³ÒThe“function“is“calledŽ¡‘.ùœwith›œšátextÝ,–žástartÝ,“and˜áendÝ.‘Ú™ástart‘ÙšÝand˜áend‘ ìÝare˜indices˜in˜Þrl_line_buffer˜Ýsa²!yingŽ¡‘.ùœwhat–r–the“bMÞoundaries“of“átext‘¯–Ýare.‘ ! BmIf“this“function“exists“and“returns“ÞNULLÝ,Ž¡‘.ùœor–´zif“this“v›ÿdDariable“is“set“to“ÞNULLÝ,‘÷ÿthen“Þrl_complete‘¦f()“Ýwill“call“the“v˜alue“ofŽ¡‘.ùœÞrl_completion_entry_function–"6Ýto“generate“matcš²!hes,‘A*otherwise“the“arra˜y“ofŽ¡‘.ùœstrings–¦freturned“will“bMÞe“used.ŽŽŸŒ‹#‹Ÿò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—35ŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘GèCPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quoting‘Óõ‰ˆŠ#ØŽ“functionŽ¤ 33‘.ùœÝA‘…$pšMÞoin²!ter–…]to“a“function“that“will“quote“a“ lename“in“an“application-“sp˜eci cŽ¡‘.ùœfashion.‘ésThis–ªCis“called“if“ lename“completion“is“bMÞeing“attempted“and“one“ofŽ¡‘.ùœthe– c²!haracters“in“Þrl_filename_quote_characters“ÝappMÞears“in“a“completed“ le-Ž¡‘.ùœname.‘zThe–^šfunction“is“called“with“átextÝ,›Œ§ámatc•²!h‘¨/‰x³HøŽ‘ñ't“yp•MÞeÝ,˜and‘^šáquote‘¨/‰x³HøŽ‘ñ'p“oin²!terÝ.‘zTheŽ¡‘.ùœátext‘HKÝis– Kthe“ lename“to“bšMÞe“quoted.‘ The“ámatc•²!h‘¨/‰x³HøŽ‘ñ't“yp˜e‘¨RÝis– Keither“ÞSINGLE_MATCHÝ,‘$…ifŽ¡‘.ùœthere–Nis“only“one“completion“matc²!h,‘wïor“ÞMULT_MATCHÝ.‘Ô¿Some“functions“use“thisŽ¡‘.ùœto–Jdecide“whether“or“not“to“insert“a“closing“quote“cš²!haracter.‘¿The“áquote‘¨/‰x³HøŽ‘ñ'pMÞoin˜terŽ¡‘.ùœÝis–¹Öa“pMÞoinš²!ter“to“an˜y“opMÞening“quote“c˜haracter“the“user“t˜ypMÞed.‘,Some“functionsŽ¡‘.ùœcš²!hoMÞose–¦fto“reset“this“c˜haracter.Ž©w4’‰V‘ÿeariableŽŽ‘GèCPFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“dequoting‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝA‘>êpMÞoinš²!ter–?to“a“function“that“will“remo˜v˜e“application-spMÞeci c“quoting“c˜haractersŽ¡‘.ùœfrom–ca“ lename“bMÞefore“completion“is“attempted,‘|aso“those“c²!haracters“do“notŽ¡‘.ùœinš²!terfere–eKwith“matc˜hing“the“text“against“names“in“the“ lesystem.‘ŒIt“is“calledŽ¡‘.ùœwith–UwátextÝ,›:the“text“of“the“w²!ord“to“bMÞe“dequoted,˜and“áquote‘¨/‰x³HøŽ‘ñ'c•²!harÝ,˜whic“h–Uwis“theŽ¡‘.ùœquoting–cš²!haracter“that“delimits“the“ lename“(usually“`Þ'Ý'“or“`Þ"Ý').‘ê¹If“áquote‘¨/‰x³HøŽ‘ñ'c˜harŽ¡‘.ùœÝis–¦fzero,“the“ lename“wš²!as“not“in“an“em˜bMÞedded“string.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷ÍcÞhar‘Óõ‰ˆŠ#ØŽ“is‘Óõ‰ˆŠ#ØŽ“quoted‘Óõ‰ˆŠ#ØŽ“pŽ¡‘.ùœÝA‘Ë2pšMÞoin²!ter–Ë;to“a“function“to“call“that“determines“whether“or“not“a“sp˜eci c“c²!har-Ž¡‘.ùœacter–üin“the“line“bu er“is“quoted,‘6according“to“whatevš²!er“quoting“mec˜hanism“theŽ¡‘.ùœprogram–2+calling“readline“uses.‘·The“function“is“called“with“t•²!w“o‘2+argumen“ts:‘£ÀátextÝ,Ž¡‘.ùœthe–­¹text“of“the“line,›ßuand“áindexÝ,˜the“index“of“the“c²!haracter“in“the“line.‘ŠùIt“is“used“toŽ¡‘.ùœdecide–dBwhether“a“c²!haracter“found“in“Þrl_completer_word_break_charactersŽ¡‘.ùœÝshould–¦fbMÞe“used“to“break“w²!ords“for“the“completer.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“query‘Óõ‰ˆŠ#ØŽ“itemsŽ¡‘.ùœÝUp–ìŸto“this“manš²!y“items“will“bMÞe“displa˜y˜ed“in“respšMÞonse“to“a“p˜ossible-completionsŽ¡‘.ùœcall.‘…After–óthat,‘ Vwš²!e“ask“the“user“if“she“is“sure“she“w˜an˜ts“to“see“them“all.‘…TheŽ¡‘.ùœdefault–¦fv‘ÿdDalue“is“100.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íbasic‘Óõ‰ˆŠ#ØŽ“wšÞord‘Óõ‰ˆŠ#ØŽ“break‘Óõ‰ˆŠ#ØŽ“c˜haractersŽ¡‘.ùœÝThe–-basic“list“of“cš²!haracters“that“signal“a“break“bMÞet˜w˜een“w˜ords“for“the“completerŽ¡‘.ùœroutine.‘ßåThe–§default“v›ÿdDalue“of“this“v˜ariable“is“the“cš²!haracters“whic˜h“break“w˜ordsŽ¡‘.ùœfor–¦fcompletion“in“Bash,“i.e.,“Þ"“\t\n\"\\'`@$><=;|&{("Ý.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íbasic‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¡‘.ùœÝList–¦fof“quote“cš²!haracters“whic˜h“can“cause“a“w˜ord“break.Ž¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompleter‘Óõ‰ˆŠ#ØŽ“wšÞord‘Óõ‰ˆŠ#ØŽ“break‘Óõ‰ˆŠ#ØŽ“c˜haractersŽ¡‘.ùœÝThe–.½list“of“cš²!haracters“that“signal“a“break“bMÞet˜w˜een“w˜ords“for“Þrl_complete_Ž¡‘.ùœinternal‘¦f()Ý.‘v The–nïdefault“list“is“the“v‘ÿdDalue“of“Þrl_basic_word_break_charactersÝ.‘èUŸ ! ¯„¥YŽ¦’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompleter‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¡‘.ùœÝList–˜"of“cš²!haracters“whic˜h“can“bMÞe“used“to“quote“a“substring“of“the“line.‘ƒÇCompletionŽ¡‘.ùœoMÞccurs–Çron“the“en²!tire“substring,‘ϵand“within“the“substring“Þrl_completer_word_Ž¡‘.ùœbreak_characters–ŒaÝare“treated“as“anš²!y“other“c˜haracter,‘‘•unless“they“also“appMÞearŽ¡‘.ùœwithin–¦fthis“list.ŽŽŸŒ‹$™0Ÿò‘GÝ36’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quote‘Óõ‰ˆŠ#ØŽ“cÞharactersŽ¤ 33‘.ùœÝA‘Å£list–Å«of“cš²!haracters“that“cause“a“ lename“to“bMÞe“quoted“b˜y“the“completer“whenŽ¡‘.ùœthey–¦fappMÞear“in“a“completed“ lename.‘ÝÝThe“default“is“the“n²!ull“string.Ž©<±’‰V‘ÿeariableŽŽ‘Gèchar–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íspb"ecial‘Óõ‰ˆŠ#ØŽ“pre xesŽ¡‘.ùœÝThe–L>list“of“cš²!haracters“that“are“w˜ord“break“c˜haracters,‘^Fbut“should“bMÞe“left“in“átextŽ¡‘.ùœÝwhen–nãit“is“passed“to“the“completion“function.‘7UPrograms“can“use“this“to“helpŽ¡‘.ùœdetermine–„úwhat“kind“of“completing“to“do.‘Ò¹F‘ÿeor“instance,‘‹ªBash“sets“this“v‘ÿdDariableŽ¡‘.ùœto–¦fÞ"Ý$Þ@"“Ýso“that“it“can“complete“shell“v‘ÿdDariables“and“hostnames.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“appb"end‘Óõ‰ˆŠ#ØŽ“cÞharacterŽ¡‘.ùœÝWhen–e¦a“single“completion“alternativš²!e“matc˜hes“at“the“end“of“the“command“line,Ž¡‘.ùœthis–xc²!haracter“is“appMÞended“to“the“inserted“completion“text.‘ÃThe“default“is“aŽ¡‘.ùœspace–P©cš²!haracter“(`‘¦f').‘ÁISetting“this“to“the“n˜ull“c˜haracter“(`Þ\0Ý')“prev˜en˜ts“an˜ythingŽ¡‘.ùœb•MÞeing›e9app“ended˜automatically‘ÿe.‘ ! WThis˜can˜b“e˜c²!hanged˜in˜custom˜completionŽ¡‘.ùœfunctions–^îto“proš²!vide“the“\most“sensible“w˜ord“separator“c˜haracter"“according“toŽ¡‘.ùœan–¦fapplication-spšMÞeci c“command“line“syn²!tax“sp˜eci cation.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íignore‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“duplicatesŽ¡‘.ùœÝIf–¦fnon-zero,“then“disalloš²!w“duplicates“in“the“matc˜hes.‘ÝÝDefault“is“1.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“desiredŽ¡‘.ùœÝNon-zero–¥îmeans“that“the“results“of“the“matc²!hes“are“to“bMÞe“treated“as“ lenames.Ž¡‘.ùœThis–ÐÄis“áalw•²!a“ys‘DFÝzero–ÐÄon“enš²!try‘ÿe,‘û~and“can“only“bMÞe“c˜hanged“within“a“completion“en˜tryŽ¡‘.ùœgenerator–/ófunction.‘¶aIf“it“is“set“to“a“non-zero“v‘ÿdDalue,‘G¤directory“names“ha•²!v“e–/óa“slashŽ¡‘.ùœappMÞended–³and“Readline“attempts“to“quote“completed“ lenames“if“they“con²!tainŽ¡‘.ùœan•²!y›¦fem“bMÞedded˜w“ord˜break˜c“haracters.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Í lename‘Óõ‰ˆŠ#ØŽ“quoting‘Óõ‰ˆŠ#ØŽ“desiredŽ¡‘.ùœÝNon-zero–Å­means“that“the“results“of“the“matc²!hes“are“to“bMÞe“quoted“using“doubleŽ¡‘.ùœquotes–Õ6(or“an“application-spMÞeci c“quoting“mec²!hanism)“if“the“completed“ lenameŽ¡‘.ùœcon•²!tains›ò[an“y˜c“haracters˜in˜Þrl_filename_quote_charsÝ.‘¡ÙThis˜is˜áalw“a“ys‘eÝÝnon-zeroŽ¡‘.ùœon–¬renš²!try‘ÿe,‘Þoand“can“only“bMÞe“c˜hanged“within“a“completion“en˜try“generator“function.Ž¡‘.ùœThe–åpquoting“is“e ected“via“a“call“to“the“function“pMÞoinš²!ted“to“b˜y“Þrl_filename_Ž¡‘.ùœquoting_functionÝ.Ž¦’‰V‘ÿeariableŽŽ‘Gèint‘™˜çrl‘Óõ‰ˆŠ#ØŽ–÷Íinhibit‘Óõ‰ˆŠ#ØŽ“completionŽ¡‘.ùœÝIf–pthis“v‘ÿdDariable“is“non-zero,‘zæcompletion“is“inhibitÞ<Ýed.‘˽The“completion“c²!haracterŽ¡‘.ùœwill–¦fbšMÞe“inserted“as“an²!y“other“b˜ound“to“Þself-insertÝ.Ž¦’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Íignore‘Óõ‰ˆŠ#ØŽ“some‘Óõ‰ˆŠ#ØŽ“completions‘Óõ‰ˆŠ#ØŽ“functionŽ¡‘.ùœÝThis–ivfunction,›u¦if“de ned,˜is“called“b²!y“the“completer“when“real“ lename“comple-Ž¡‘.ùœtion–ydis“done,‘®#after“all“the“matcš²!hing“names“ha˜v˜e“bMÞeen“generated.‘VÖIt“is“passedŽ¡‘.ùœa–ËrÞNULL“Ýterminated“arraš²!y“of“matc˜hes.‘MThe“ rst“elemen˜t“(Þmatches[0]Ý)“is“theŽ¡‘.ùœmaximal–dªsubstring“common“to“all“matc²!hes.‘©This“function“can“re-arrange“theŽ¡‘.ùœlist–L@of“matcš²!hes“as“required,‘u·but“eac˜h“elemen˜t“deleted“from“the“arra˜y“m˜ust“bMÞeŽ¡‘.ùœfreed.ŽŽŸŒ‹%ªŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—37ŽŽŽ ƒ3Ú ý¨ðÐ’‰V‘ÿeariableŽŽ‘GèFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ídirectory‘Óõ‰ˆŠ#ØŽ“completion‘Óõ‰ˆŠ#ØŽ“hob"okŽ¤ 33‘.ùœÝThis–åfunction,›3˜if“de ned,˜is“allo•²!w“ed–åto“mošMÞdify“the“directory“p˜ortion“of“ lenamesŽ¡‘.ùœReadline–ƒÐcompletes.‘ÒVIt“is“called“with“the“address“of“a“string“(the“curren²!t“direc-Ž¡‘.ùœtory–Š~name)“as“an“argumenš²!t.‘ÔIt“could“bMÞe“used“to“expand“sym˜bMÞolic“links“or“shellŽ¡‘.ùœv‘ÿdDariables–¦fin“pathnames.ŽŸ33’‰V‘ÿeariableŽŽ‘GèVFunction–™˜*“çrl‘Óõ‰ˆŠ#ØŽ–÷Ícompletion‘Óõ‰ˆŠ#ØŽ“displašÞy‘Óõ‰ˆŠ#ØŽ“matc˜hes‘Óõ‰ˆŠ#ØŽ“hob"okŽ¡‘.ùœÝIf–¤œnon-zero,‘ä)then“this“is“the“address“of“a“function“to“call“when“completing“aŽ¡‘.ùœw•²!ord›C9w“ould˜normally˜displa“y˜the˜list˜of˜pMÞossible˜matc“hes.‘ ´VThis˜function˜isŽ¡‘.ùœcalled–*_in“lieu“of“Readline“displaš²!ying“the“list.‘iÈIt“tak˜es“three“argumen˜ts:‘åÏ(ÞcharŽ¡‘.ùœ**ámatc•²!hesÝ,›¯Þint‘Fòán“um‘¨/‰x³HøŽ‘ñ'matc“hesÝ,˜Þint–Fòámax‘¨/‰x³HøŽ‘ñ'lengthÝ)“where“ámatcš²!hes‘ºtÝis“the“arra˜yŽ¡‘.ùœof–1Ímatcš²!hing“strings,‘T§án˜um‘¨/‰x³HøŽ‘ñ'matc˜hes‘¥OÝis“the“n˜um˜bMÞer“of“strings“in“that“arra˜y‘ÿe,‘T§andŽ¡‘.ùœámax‘¨/‰x³HøŽ‘ñ'length–ÇÝis“the“length“of“the“longest“string“in“that“arraš²!y‘ÿe.‘?«Readline“pro˜videsŽ¡‘.ùœa›Áªcon•²!v“enience˜function,–È{Þrl_display_match_listÝ,“that˜tak²!es˜care˜of˜doing˜theŽ¡‘.ùœdisplaš²!y–¨to“Readline's“output“stream.‘âîThat“function“ma˜y“bMÞe“called“from“thisŽ¡‘.ùœhoMÞok.ŽŸ‘GëQ2.6.4‘d(A–íMShort“Completion“ExampleŽŽŸ33‘!GÝHere–q}is“a“small“application“demonstrating“the“use“of“the“GNU‘q/Readline“library‘ÿe.‘våIt“is“calledŽ¡‘GÞfilemanÝ,‘lGand–D´the“source“coMÞde“resides“in“`Þexamples/fileman.cÝ'.‘¸ÆThis“sample“applicationŽ¡‘Gpro²!vides–#þcompletion“of“command“names,›>line“editing“features,˜and“access“to“the“history“list.ŽŽŸŒ‹&¹'Ÿò‘GÝ38’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ/*–¿ªfileman.c“--“A“tiny“application“which“demonstrates“how“to“use“theŽ¤ €‘@8šGNU–¿ªReadline“library.‘ TThis“application“interactively“allows“usersŽ¡‘@8što–¿ªmanipulate“files“and“their“modes.“*/Ž©‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœ#include‘¿ªŽ¡‘.ùœ#include‘¿ªŽ¦‘.ùœextern–¿ªchar“*getwd“();Ž¡‘.ùœextern–¿ªchar“*xmalloc“();Ž¦‘.ùœ/*–¿ªThe“names“of“functions“that“actually“do“the“manipulation.“*/Ž¡‘.ùœint–¿ªcom_list“(),“com_view“(),“com_rename“(),“com_stat“(),“com_pwd“();Ž¡‘.ùœint–¿ªcom_delete“(),“com_help“(),“com_cd“(),“com_quit“();Ž¦‘.ùœ/*–¿ªA“structure“which“contains“information“on“the“commands“this“programŽ¡‘@8šcan–¿ªunderstand.“*/Ž¦‘.ùœtypedef–¿ªstruct“{Ž¡‘:xðchar–¿ª*name;“/*“User“printable“name“of“the“function.“*/Ž¡‘:xðFunction–¿ª*func;“/*“Function“to“call“to“do“the“job.“*/Ž¡‘:xðchar–¿ª*doc;“/*“Documentation“for“this“function.‘ T*/Ž¡‘.ùœ}‘¿ªCOMMAND;Ž¦‘.ùœCOMMAND–¿ªcommands[]“=“{Ž¡‘:xð{–¿ª"cd",“com_cd,“"Change“to“directory“DIR"“},Ž¡‘:xð{–¿ª"delete",“com_delete,“"Delete“FILE"“},Ž¡‘:xð{–¿ª"help",“com_help,“"Display“this“text"“},Ž¡‘:xð{–¿ª"?",“com_help,“"Synonym“for“`help'"“},Ž¡‘:xð{–¿ª"list",“com_list,“"List“files“in“DIR"“},Ž¡‘:xð{–¿ª"ls",“com_list,“"Synonym“for“`list'"“},Ž¡‘:xð{–¿ª"pwd",“com_pwd,“"Print“the“current“working“directory"“},Ž¡‘:xð{–¿ª"quit",“com_quit,“"Quit“using“Fileman"“},Ž¡‘:xð{–¿ª"rename",“com_rename,“"Rename“FILE“to“NEWNAME"“},Ž¡‘:xð{–¿ª"stat",“com_stat,“"Print“out“statistics“on“FILE"“},Ž¡‘:xð{–¿ª"view",“com_view,“"View“the“contents“of“FILE"“},Ž¡‘:xð{–¿ª(char“*)NULL,“(Function“*)NULL,“(char“*)NULL“}Ž¡‘.ùœ};Ž¦‘.ùœ/*–¿ªForward“declarations.“*/Ž¡‘.ùœchar–¿ª*stripwhite“();Ž¡‘.ùœCOMMAND–¿ª*find_command“();ŽŽŸŒ‹'ÁŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—39ŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ/*–¿ª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.“*/Ÿnï„ ! ™Ž¡‘.ùœint‘¿ªdone;Ž¦‘.ùœchar‘¿ª*Ž¡‘.ùœdupstr‘¿ª(s)Ž¡‘K·îint‘¿ªs;Ž¡‘.ùœ{Ž¡‘:xðchar‘¿ª*r;Ž¦‘:xðr–¿ª=“xmalloc“(strlen“(s)“+“1);Ž¡‘:xðstrcpy–¿ª(r,“s);Ž¡‘:xðreturn‘¿ª(r);Ž¡‘.ùœ}Ž¦‘.ùœmain–¿ª(argc,“argv)Ž¡‘K·îint‘¿ªargc;Ž¡‘K·îchar‘¿ª**argv;Ž¡‘.ùœ{Ž¡‘:xðchar–¿ª*line,“*s;Ž¦‘:xðprogname–¿ª=“argv[0];Ž¦‘:xðinitialize_readline–¿ª();“/*“Bind“our“completer.“*/Ž¦‘:xð/*–¿ªLoop“reading“and“executing“lines“until“the“user“quits.“*/Ž¡‘:xðfor–¿ª(“;“done“==“0;“)Ž¡‘EøD{Ž¡‘Qw˜line–¿ª=“readline“("FileMan:“");Ž¦‘Qw˜if‘¿ª(!line)Ž¡‘\öìbreak;Ž¦‘Qw˜/*–¿ªRemove“leading“and“trailing“whitespace“from“the“line.Ž¡‘b¶–Then,–¿ªif“there“is“anything“left,“add“it“to“the“history“listŽ¡‘b¶–and–¿ªexecute“it.“*/Ž¡‘Qw˜s–¿ª=“stripwhite“(line);Ž¦‘Qw˜if‘¿ª(*s)Ž¡‘\öì{Ž¡‘hv@add_history‘¿ª(s);Ž¡‘hv@execute_line‘¿ª(s);Ž¡‘\öì}Ž¦‘Qw˜free‘¿ª(line);Ž¡‘EøD}ŽŽŸŒ‹(ÈПò‘GÝ40’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ:xðÞexit‘¿ª(0);Ž¤ €‘.ùœ}Ž©‘.ùœ/*–¿ªExecute“a“command“line.“*/Ž¡‘.ùœintŽ¡‘.ùœexecute_line‘¿ª(line)Ž¡‘K·îchar‘¿ª*line;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“i;Ž¡‘:xðCOMMAND‘¿ª*command;Ž¡‘:xðchar‘¿ª*word;Ž¦‘:xð/*–¿ªIsolate“the“command“word.“*/Ž¡‘:xði–¿ª=“0;Ž¡‘:xðwhile–¿ª(line[i]“&&“whitespace“(line[i]))Ž¡‘EøDi++;Ž¡‘:xðword–¿ª=“line“+“i;Ž¦‘:xðwhile–¿ª(line[i]“&&“!whitespace“(line[i]))Ž¡‘EøDi++;Ž¦‘:xðif‘¿ª(line[i])Ž¡‘EøDline[i++]–¿ª=“'\0';Ž¦‘:xðcommand–¿ª=“find_command“(word);Ž¦‘:xðif‘¿ª(!command)Ž¡‘EøD{Ž¡‘Qw˜fprintf–¿ª(stderr,“"%s:“No“such“command“for“FileMan.\n",“word);Ž¡‘Qw˜return‘¿ª(-1);Ž¡‘EøD}Ž¦‘:xð/*–¿ªGet“argument“to“command,“if“any.“*/Ž¡‘:xðwhile–¿ª(whitespace“(line[i]))Ž¡‘EøDi++;Ž¦‘:xðword–¿ª=“line“+“i;Ž¦‘:xð/*–¿ªCall“the“function.“*/Ž¡‘:xðreturn–¿ª((*(command->func))“(word));Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªLook“up“NAME“as“the“name“of“a“command,“and“return“a“pointer“to“thatŽ¡‘@8šcommand.‘ TReturn–¿ªa“NULL“pointer“if“NAME“isn't“a“command“name.“*/Ž¡‘.ùœCOMMAND‘¿ª*Ž¡‘.ùœfind_command‘¿ª(name)Ž¡‘K·îchar‘¿ª*name;Ž¡‘.ùœ{ŽŽŸŒ‹)ÍyŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—41ŽŽŽ ƒ3Ú ý¨ðБ:xðÞregister–¿ªint“i;Ž©‘:xðfor–¿ª(i“=“0;“commands[i].name;“i++)Ž¤ €‘EøDif–¿ª(strcmp“(name,“commands[i].name)“==“0)Ž¡‘Qw˜return‘¿ª(&commands[i]);Ž¦‘:xðreturn–¿ª((COMMAND“*)NULL);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªStrip“whitespace“from“the“start“and“end“of“STRING.‘ TReturn“a“pointerŽ¡‘@8šinto–¿ªSTRING.“*/Ž¡‘.ùœchar‘¿ª*Ž¡‘.ùœstripwhite‘¿ª(string)Ž¡‘K·îchar‘¿ª*string;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªchar“*s,“*t;Ž¦‘:xðfor–¿ª(s“=“string;“whitespace“(*s);“s++)Ž¡‘EøD;Ž¦‘:xðif–¿ª(*s“==“0)Ž¡‘EøDreturn‘¿ª(s);Ž¦‘:xðt–¿ª=“s“+“strlen“(s)“-“1;Ž¡‘:xðwhile–¿ª(t“>“s“&&“whitespace“(*t))Ž¡‘EøDt--;Ž¡‘:xð*++t–¿ª=“'\0';Ž¦‘:xðreturn‘¿ªs;Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ª****************************************************************“*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*‘gyôInterface–¿ªto“Readline“Completion‘[ú */Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*–¿ª****************************************************************“*/Ž¦‘.ùœchar–¿ª*command_generator“();Ž¡‘.ùœchar–¿ª**fileman_completion“();Ž¦‘.ùœ/*–¿ªTell“the“GNU“Readline“library“how“to“complete.‘ TWe“want“to“try“to“completeŸnï„ ! ™Ž¡‘@8šon–¿ªcommand“names“if“this“is“the“first“word“in“the“line,“or“on“filenamesŸ…T„6eŽ¡‘@8šif–¿ªnot.“*/Ž¡‘.ùœinitialize_readline‘¿ª()Ž¡‘.ùœ{Ž¡‘:xð/*–¿ªAllow“conditional“parsing“of“the“~/.inputrc“file.“*/Ž¡‘:xðrl_readline_name–¿ª=“"FileMan";ŽŽŸŒ‹*ÒŸò‘GÝ42’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ:xðÞ/*–¿ªTell“the“completer“that“we“want“a“crack“first.“*/Ž¤ €‘:xðrl_attempted_completion_function–¿ª=“(CPPFunction“*)fileman_completion;Ž¡‘.ùœ}Ž©‘.ùœ/*–¿ªAttempt“to“complete“on“the“contents“of“TEXT.‘ TSTART“and“END“bound“theŽ¡‘@8šregion–¿ªof“rl_line_buffer“that“contains“the“word“to“complete.‘ TTEXT“isŽ¡‘@8šthe–¿ªword“to“complete.‘ TWe“can“use“the“entire“contents“of“rl_line_bufferŸnï„ Ž¡‘@8šin–¿ªcase“we“want“to“do“some“simple“parsing.‘ TReturn“the“array“of“matches,Ÿnï„ Ž¡‘@8šor–¿ªNULL“if“there“aren't“any.“*/Ž¡‘.ùœchar‘¿ª**Ž¡‘.ùœfileman_completion–¿ª(text,“start,“end)Ž¡‘K·îchar‘¿ª*text;Ž¡‘K·îint–¿ªstart,“end;Ž¡‘.ùœ{Ž¡‘:xðchar‘¿ª**matches;Ž¦‘:xðmatches–¿ª=“(char“**)NULL;Ž¦‘:xð/*–¿ªIf“this“word“is“at“the“start“of“the“line,“then“it“is“a“commandŽ¡‘K·îto–¿ªcomplete.‘ TOtherwise“it“is“the“name“of“a“file“in“the“currentŽ¡‘K·îdirectory.‘¿ª*/Ž¡‘:xðif–¿ª(start“==“0)Ž¡‘EøDmatches–¿ª=“completion_matches“(text,“command_generator);Ž¦‘:xðreturn‘¿ª(matches);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªGenerator“function“for“command“completion.‘ TSTATE“lets“us“know“whetherŸnï„ ™Ž¡‘@8što–¿ªstart“from“scratch;“without“any“state“(i.e.“STATE“==“0),“then“weŽ¡‘@8šstart–¿ªat“the“top“of“the“list.“*/Ž¡‘.ùœchar‘¿ª*Ž¡‘.ùœcommand_generator–¿ª(text,“state)Ž¡‘K·îchar‘¿ª*text;Ž¡‘K·îint‘¿ªstate;Ž¡‘.ùœ{Ž¡‘:xðstatic–¿ªint“list_index,“len;Ž¡‘:xðchar‘¿ª*name;Ž¦‘:xð/*–¿ªIf“this“is“a“new“word“to“complete,“initialize“now.‘ TThis“includesŽ¡‘K·îsaving–¿ªthe“length“of“TEXT“for“efficiency,“and“initializing“the“indexŸnï„ Ž¡‘K·îvariable–¿ªto“0.“*/Ž¡‘:xðif‘¿ª(!state)Ž¡‘EøD{Ž¡‘Qw˜list_index–¿ª=“0;Ž¡‘Qw˜len–¿ª=“strlen“(text);Ž¡‘EøD}Ž¦‘:xð/*–¿ªReturn“the“next“name“which“partially“matches“from“the“command“list.“*/Ÿnï„ ! ™ŽŽŸŒ‹+×ÓŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—43ŽŽŽ ƒ3Ú ý¨ðБ:xðÞwhile–¿ª(name“=“commands[list_index].name)Ž¤ €‘EøD{Ž¡‘Qw˜list_index++;Ž©‘Qw˜if–¿ª(strncmp“(name,“text,“len)“==“0)Ž¡‘\öìreturn‘¿ª(dupstr(name));Ž¡‘EøD}Ž¦‘:xð/*–¿ªIf“no“names“matched,“then“return“NULL.“*/Ž¡‘:xðreturn–¿ª((char“*)NULL);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ª****************************************************************“*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*’„8FFileMan‘¿ªCommands’›6î*/Ž¡‘.ùœ/*’{iÔ*/Ž¡‘.ùœ/*–¿ª****************************************************************“*/Ž¦‘.ùœ/*–¿ªString“to“pass“to“system“().‘ TThis“is“for“the“LIST,“VIEW“and“RENAMEŽ¡‘@8šcommands.‘¿ª*/Ž¡‘.ùœstatic–¿ªchar“syscom[1024];Ž¦‘.ùœ/*–¿ªList“the“file(s)“named“in“arg.“*/Ž¡‘.ùœcom_list‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif‘¿ª(!arg)Ž¡‘EøDarg–¿ª=“"";Ž¦‘:xðsprintf–¿ª(syscom,“"ls“-FClg“%s",“arg);Ž¡‘:xðreturn–¿ª(system“(syscom));Ž¡‘.ùœ}Ž¦‘.ùœcom_view‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(!valid_argument“("view",“arg))Ž¡‘EøDreturn‘¿ª1;Ž¦‘:xðsprintf–¿ª(syscom,“"more“%s",“arg);Ž¡‘:xðreturn–¿ª(system“(syscom));Ž¡‘.ùœ}Ž¦‘.ùœcom_rename‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðtoo_dangerous‘¿ª("rename");Ž¡‘:xðreturn‘¿ª(1);ŽŽŸŒ‹,ßBŸò‘GÝ44’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ.ùœÞ}Ž©‘.ùœcom_stat‘¿ª(arg)Ž¤ €‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðstruct–¿ªstat“finfo;Ž¦‘:xðif–¿ª(!valid_argument“("stat",“arg))Ž¡‘EøDreturn‘¿ª(1);Ž¦‘:xðif–¿ª(stat“(arg,“&finfo)“==“-1)Ž¡‘EøD{Ž¡‘Qw˜perror‘¿ª(arg);Ž¡‘Qw˜return‘¿ª(1);Ž¡‘EøD}Ž¦‘:xðprintf–¿ª("Statistics“for“`%s':\n",“arg);Ž¦‘:xðprintf–¿ª("%s“has“%d“link%s,“and“is“%d“byte%s“in“length.\n",“arg,Ž¡‘hv@finfo.st_nlink,Ž¡‘hv@(finfo.st_nlink–¿ª==“1)“?“""“:“"s",Ž¡‘hv@finfo.st_size,Ž¡‘hv@(finfo.st_size–¿ª==“1)“?“""“:“"s");Ž¡‘:xðprintf–¿ª("Inode“Last“Change“at:“%s",“ctime“(&finfo.st_ctime));Ž¡‘:xðprintf–¿ª("‘"}üLast“access“at:“%s",“ctime“(&finfo.st_atime));Ž¡‘:xðprintf–¿ª("‘þ¨Last“modified“at:“%s",“ctime“(&finfo.st_mtime));Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœcom_delete‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðtoo_dangerous‘¿ª("delete");Ž¡‘:xðreturn‘¿ª(1);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªPrint“out“help“for“ARG,“or“for“all“of“the“commands“if“ARG“isŽ¡‘@8šnot–¿ªpresent.“*/Ž¡‘.ùœcom_help‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðregister–¿ªint“i;Ž¡‘:xðint–¿ªprinted“=“0;Ž¦‘:xðfor–¿ª(i“=“0;“commands[i].name;“i++)Ž¡‘EøD{Ž¡‘Qw˜if–¿ª(!*arg“||“(strcmp“(arg,“commands[i].name)“==“0))Ž¡‘\öì{ŽŽŸŒ‹-äWŸò‘GÝChapter–¦f2:‘ÝÝProgramming“with“GNU“Readline’Ê—45ŽŽŽ ƒ3Ú ý¨ðБhv@Þprintf–¿ª("%s\t\t%s.\n",“commands[i].name,“commands[i].doc);Ž¤ €‘hv@printed++;Ž¡‘\öì}Ž¡‘EøD}Ž©‘:xðif‘¿ª(!printed)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("No“commands“match“`%s'.‘ TPossibilties“are:\n",“arg);Ž¦‘Qw˜for–¿ª(i“=“0;“commands[i].name;“i++)Ž¡‘\öì{Ž¡‘hv@/*–¿ªPrint“in“six“columns.“*/Ž¡‘hv@if–¿ª(printed“==“6)Ž¡‘sõ”{Ž¡‘tèprinted–¿ª=“0;Ž¡‘tèprintf‘¿ª("\n");Ž¡‘sõ”}Ž¦‘hv@printf–¿ª("%s\t",“commands[i].name);Ž¡‘hv@printed++;Ž¡‘\öì}Ž¦‘Qw˜if‘¿ª(printed)Ž¡‘\öìprintf‘¿ª("\n");Ž¡‘EøD}Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªChange“to“the“directory“ARG.“*/Ž¡‘.ùœcom_cd‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(chdir“(arg)“==“-1)Ž¡‘EøD{Ž¡‘Qw˜perror‘¿ª(arg);Ž¡‘Qw˜return‘¿ª1;Ž¡‘EøD}Ž¦‘:xðcom_pwd‘¿ª("");Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªPrint“out“the“current“working“directory.“*/Ž¡‘.ùœcom_pwd‘¿ª(ignore)Ž¡‘K·îchar‘¿ª*ignore;Ž¡‘.ùœ{Ž¡‘:xðchar–¿ªdir[1024],“*s;ŽŽŸŒ‹.égŸò‘GÝ46’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБ:xðÞs–¿ª=“getwd“(dir);Ž¤ €‘:xðif–¿ª(s“==“0)Ž¡‘EøD{Ž¡‘Qw˜printf–¿ª("Error“getting“pwd:“%s\n",“dir);Ž¡‘Qw˜return‘¿ª1;Ž¡‘EøD}Ž©‘:xðprintf–¿ª("Current“directory“is“%s\n",“dir);Ž¡‘:xðreturn‘¿ª0;Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªThe“user“wishes“to“quit“using“this“program.‘ TJust“set“DONE“non-zero.“*/Ÿnï„ ™Ž¡‘.ùœcom_quit‘¿ª(arg)Ž¡‘K·îchar‘¿ª*arg;Ž¡‘.ùœ{Ž¡‘:xðdone–¿ª=“1;Ž¡‘:xðreturn‘¿ª(0);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªFunction“which“tells“you“that“you“can't“do“this.“*/Ž¡‘.ùœtoo_dangerous‘¿ª(caller)Ž¡‘K·îchar‘¿ª*caller;Ž¡‘.ùœ{Ž¡‘:xðfprintf‘¿ª(stderr,Ž¡‘n5ê"%s:–¿ªToo“dangerous“for“me“to“distribute.‘ TWrite“it“yourself.\n",Ÿnï„ ! ™Ž¡‘n5êcaller);Ž¡‘.ùœ}Ž¦‘.ùœ/*–¿ªReturn“non-zero“if“ARG“is“a“valid“argument“for“CALLER,“else“printŽ¡‘@8šan–¿ªerror“message“and“return“zero.“*/Ž¡‘.ùœintŽ¡‘.ùœvalid_argument–¿ª(caller,“arg)Ž¡‘K·îchar–¿ª*caller,“*arg;Ž¡‘.ùœ{Ž¡‘:xðif–¿ª(!arg“||“!*arg)Ž¡‘EøD{Ž¡‘Qw˜fprintf–¿ª(stderr,“"%s:“Argument“required.\n",“caller);Ž¡‘Qw˜return‘¿ª(0);Ž¡‘EøD}Ž¦‘:xðreturn‘¿ª(1);Ž¡‘.ùœ}ŽŽŸŒ‹/퀟ò‘GÝConcept‘¦fIndex’`¶)47ŽŽŽ ƒ3Ú ý¨ðБGêConcept‘z³IndexŽŽ ¶\( ÿt‘GëHCŽ¤‘Góo´‹Ç cmr9¬command‘Tediting‘ar‘ÅUó"”q[˜ cmsl9Í.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘“,¬1Ž©‘GëHEŽ¡‘G¬editing–Tcommand“lines‘¥‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘J`¬1Ž¦‘GëHIŽ¡‘G¬initialization–T le,“readline‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Mج3ŽŸ ‘Gin¾9teraction,‘Treadline‘ÿ«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 1f¬1Ž¦‘GëHKŽ¡‘G¬kill‘Tring‘ª‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 5e¬2ŽŽ ÿt’óáðkilling‘Ttext‘å‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ º¬2Ž¤ ª«’óáðëHNŽ©’óáð¬notation,‘Treadline‘™‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ê»¬1Ž¡’óáðëHRŽ¦’óáð¬readline,‘Tfunction‘¹ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘러19Ž¡’óáðëHYŽ¦’óáð¬y¾9anking‘Ttext‘œ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Í׬2ŽŽŽŽŸŒ‹0òŸò‘GÝ48’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3ÚŸŒ‹1ý^Ÿò‘GÝF›ÿeunction–¦fand“V˜ariable“Index’œÃ49ŽŽŽ ƒ3Ú ý¨ðБGêF›þaGunction–z³and“V˜ariable“IndexŽŽ W0 ýÏðБGëH(Ž¤‘GóߤN cmtt9É(int‘ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ %ì28Ž©ƒÌ‘GëHAŽ¡‘GÉabort‘T(C-g)‘ $‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ñ߬16Ž¤ ‘GÉaccept-line–T(Newline,“Return)_‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘:¬11Ž¡‘GÉalphabetic–‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘NQ¬28Ž¦‘GëHBŽŸ‘GÉbackward-char‘T(C-b)9Ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k¬11Ž¡‘GÉbackward-delete-char‘T(Rubout)‘Dv‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘v1¬12Ž¡‘GÉbackward-kill-line–T(C-x“Rubout)‘yq‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘«,¬13Ž¡‘GÉbackward-kill-word›T(M-DEL)‘çL‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬13,˜14Ž¡‘GÉbackward-word‘T(M-b)9Ä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k¬11Ž¡‘GÉbeginning-of-history‘T(M-<)!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬11Ž¡‘GÉbeginning-of-line‘T(C-a)‘ °‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘?k¬11Ž¡‘GbAÇell-st¾9yle‘½‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘îѬ4Ž¦‘GëHCŽŸ‘GÉcall-last-kbd-macro–T(C-x“e)‘¥…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×@¬15Ž¡‘GÉcapitalize-word›T(M-c)aó‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘“®¬12,˜13Ž¡‘GÉcharacter-search‘T(C-])‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬16Ž¡‘GÉcharacter-search-backward‘T(M-C-]) ! *‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘;å¬16Ž¡‘GÉclear-screen‘T(C-l)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡‘Gcommen¾9t-bAÇegin‘a‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘’»¬4Ž¡‘GÉcomplete‘T(TAB)‘£‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ô^¬15Ž¡‘Gcompletion-query-items‘WP‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‰ ¬4Ž¡‘GÉcompletion‘‘$‰c4ÕÂŽ‘fæmatches_Ž‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‘I¬34Ž¡‘Gcon•¾9v“ert-meta‘Á‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ò»¬4Ž¡‘GÉcopy-backward-word›T()aó‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘“®¬13,˜14Ž¡‘GÉcopy-forward-word›T()‘°†‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘âA¬13,˜14Ž¡‘GÉcopy-region-as-kill›T()`‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘E¬13,˜14Ž¦‘GëHDŽŸ‘GÉdelete-char‘T(C-d)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬12Ž¡‘GÉdelete-char-or-list‘T()‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬15Ž¡‘GÉdelete-horizontal-space›T()‘çL‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬13,˜14Ž¡‘GÉdigit-argument–T(M-0,“M-1,“...“M--)#‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘U}¬14Ž¡‘GÉdigit_p‘O‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘: ! ¬29Ž¡‘GÉdigit_value‘Ü;‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ö¬29Ž¡‘GÉding‘ô‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ %ì28Ž¡‘Gdisable-completion‘ÖÞ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘™¬5Ž¡‘GÉdo-uppercase-version–T(M-a,“M-b,“M-ÍxÉ,“ó5ùž" cmmi9²:–Šª:“:Ž‘ ßúÉ)‘¨ì‘ÅUÍ.Ž‘p‘ÅU.Ž‘Ú¦¬16Ž¡‘GÉdowncase-word›T(M-l)‘ÿ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘0Ô¬12,˜13Ž¡‘GÉdump-functions‘T()‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉdump-macros›T()yÀ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘«{¬16,˜17ŽŽ ýÏðÐ’óáðÉdump-variables›T()‘œ?‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Íú¬16,˜17Ž©KP’óáðëHEŽŸ’óáð¬editing-moAÇde‘ë‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘õe¬5Ž¤ ’óáðenable-k¾9eypad‘r‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘³-¬5Ž¡’óáðÉend-kbd-macro–T(C-x“))n¿‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ z¬15Ž¡’óáðÉend-of-history›T(M->)‘°†‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘âA¬11,˜12Ž¡’óáðÉend-of-line‘T(C-e)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬11Ž¡’óáðÉexchange-point-and-mark–T(C-x“C-x)‘ÜK‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬16Ž¡’óáðexpand-tilde‘þV‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘0¬5Ž¦’óáðëHFŽŸ’óáðÉfilename‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“function`‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘7¬34Ž¡’óáðÉforward-backward-delete-char›T()‘l¥‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ž`¬12,˜13Ž¡’óáðÉforward-char‘T(C-f)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡’óáðÉforward-search-history›T(C-s)J&‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘{á¬11,˜12Ž¡’óáðÉforward-word‘T(M-f)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¡’óáðÉfree‘‘$‰c4ÕÂŽ–fæundo‘‘$‰c4ÕÂŽ“list4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬26Ž¦’óáðëHHŽŸ’óáðÉhistory-search-backward›T()‘çL‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬11,˜12Ž¡’óáðÉhistory-search-forward›T()‘5ß‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘gš¬11,˜12Ž¡’óáðhorizon¾9tal-scroll-moAÇde‘Ù‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ! Ѭ5Ž¦’óáðëHIŽŸ’óáð¬input-meta‘£9‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ôó¬5Ž¡’óáðÉinsert-comment‘T(M-#)‘ùi‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ +$¬16Ž¡’óáðÉinsert-completions‘T(M-*)‘¿‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ðج15Ž¡’óáðisearc¾9h-terminators‘®ƒ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘à>¬5Ž¦’óáðëHKŽŸ’óáð¬k¾9eymap9r‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘k-¬5Ž¡’óáðÉkill-line‘T(C-k)‘t‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥Ë¬13Ž¡’óáðÉkill-region›T()yÀ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘«{¬13,˜14Ž¡’óáðÉkill-whole-line›T()‘M¬‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘g¬13,˜14Ž¡’óáðÉkill-word›T(M-d)+-‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘\è¬13,˜14Ž¦’óáðëHLŽ¤’óáðÉlowercase‘‘$‰c4ÕÂŽ‘fæpw[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘©¬28Ž¦’óáðëHMŽ¡’óáð¬mark-moAÇdi ed-lines‘’m‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Ä'¬6Ž¤ ’óáðÉmenu-complete‘T()‘%}‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘W8¬15Ž¡’óáðmeta- ag‘«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Qe¬5ŽŽŽŽŸŒ‹2ýŸò‘GÝ50’9pGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý¨ðБGëHNŽ©‘GÉnext-history‘T(C-n)‘ˆW‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘º¬11Ž¤ ‘GÉnon-incremental-forward-search-history‘T(M-n)Ž¡‘%o”‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬11,‘T12Ž¡‘GÉnon-incremental-reverse-search-history‘T(M-p)Ž¡‘%o”‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬11,‘T12Ž¡‘GÉnumeric‘O‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘: ! ¬28Ž¤CÌ‘GëHOŽ¦‘G¬output-meta‘Ýä‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ž¬6Ž¡‘GëHPŽ¦‘GÉpossible-completions‘T(M-?)!÷‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘S²¬15Ž¤ ‘GÉprefix-meta‘T(ESC)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉprevious-history‘T(C-p)‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬11Ž¤CÌ‘GëHQŽ¦‘GÉquoted-insert–T(C-q,“C-v)H[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘z¬12,‘T13Ž¡‘GëHRŽ¦‘GÉre-read-init-file–T(C-x“C-r)‘¥…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×@¬16Ž¤ ‘GÉreadline‘¹¼‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ëw¬19Ž¡‘GÉredraw-current-line‘T()‘\C‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘þ¬11Ž¡‘GÉreverse-search-history›T(C-r)J&‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘{á¬11,˜12Ž¡‘GÉrevert-line‘T(M-r)‘Öê‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¥¬16Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæadd‘‘$‰c4ÕÂŽ“defun‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬23Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæadd‘‘$‰c4ÕÂŽ“undo‘ ³‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Rn¬26Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæattempted‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“function‘†‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ 7í¬34Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbasic‘‘$‰c4ÕÂŽ“quote‘‘$‰c4ÕÂŽ“characters‘%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘A‚¬35Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbasic‘‘$‰c4ÕÂŽ“word‘‘$‰c4ÕÂŽ“break‘‘$‰c4ÕÂŽ“characters‘SÌ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘p3¬35Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbegin‘‘$‰c4ÕÂŽ“undo‘‘$‰c4ÕÂŽ“group‘c«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘•f¬26Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbind‘‘$‰c4ÕÂŽ“key‘ ³‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Rn¬24Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbind‘‘$‰c4ÕÂŽ“key‘‘$‰c4ÕÂŽ“in‘‘$‰c4ÕÂŽ“mapM^‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¬24Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæbinding‘‘$‰c4ÕÂŽ“keymap‘ð[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ¬23Ž¡‘GÉrl_callback_handler_install‘{‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘A6¬29Ž¡‘GÉrl_callback_handler_remove‘^‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ɬ29Ž¡‘GÉrl_callback_read_char‘ص‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ! p¬29Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcatch‘‘$‰c4ÕÂŽ“signals‘0¶‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M¬31Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcatch‘‘$‰c4ÕÂŽ“sigwinch‘ð[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ ¬31Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæchar‘‘$‰c4ÕÂŽ“is‘‘$‰c4ÕÂŽ“quoted‘‘$‰c4ÕÂŽ“p‘—­‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘´¬35Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcleanup‘‘$‰c4ÕÂŽ“after‘‘$‰c4ÕÂŽ“signal)_‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘[¬32Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæclear‘‘$‰c4ÕÂŽ“message‘¦ ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×Ǭ27Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæclear‘‘$‰c4ÕÂŽ“signals‘¦ ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘×Ǭ32Ž¡‘GÉrl‘‘$‰c4ÕÂŽ‘fæcompletew[‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘©¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcomplete‘‘$‰c4ÕÂŽ“internalkÀ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘{¬33Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompleter‘‘$‰c4ÕÂŽ“quote‘‘$‰c4ÕÂŽ“characters‘ù‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘n¬35Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompleter‘‘$‰c4ÕÂŽ“word‘‘$‰c4ÕÂŽ“break‘‘$‰c4ÕÂŽ“characters‘€‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘5ç¬35Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“append‘‘$‰c4ÕÂŽ“character‘ªt‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ÆÛ¬36Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“display‘‘$‰c4ÕÂŽ“matches‘‘$‰c4ÕÂŽ“hook‘€‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘5ç¬37Ž¡‘GÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“entry‘‘$‰c4ÕÂŽ“function‘ ï‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ )V¬33,‘T34ŽŽ ý¨ðÐ’óáðÉrl‘‘$‰c4ÕÂŽ–fæcompletion‘‘$‰c4ÕÂŽ“query‘‘$‰c4ÕÂŽ“items‘%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘A‚¬35Ž¤ ’óáðÉrl‘‘$‰c4ÕÂŽ–fæcopy‘‘$‰c4ÕÂŽ“keymap4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬23Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæcopy‘‘$‰c4ÕÂŽ“text‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fædelete‘‘$‰c4ÕÂŽ“text4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fædirectory‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“hook‘Gš‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘d¬37Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fædiscard‘‘$‰c4ÕÂŽ“keymap‘Wy‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘‰4¬24Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fædisplay‘‘$‰c4ÕÂŽ“match‘‘$‰c4ÕÂŽ“list‘Æ…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ø@¬28Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fædo‘‘$‰c4ÕÂŽ“undo‘oF‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¡¬26Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fædone‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãù¬32Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæfunction‘‘$‰c4ÕÂŽ“dumper‘æ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘:¡¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæfunction‘‘$‰c4ÕÂŽ“of‘‘$‰c4ÕÂŽ“keyseq‘Æ…‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ø@¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fægeneric‘‘$‰c4ÕÂŽ“bind‘ôŸ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ &Z¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæget‘‘$‰c4ÕÂŽ“keymap‘ƒ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘µH¬24Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæget‘‘$‰c4ÕÂŽ“keymap‘‘$‰c4ÕÂŽ“by‘‘$‰c4ÕÂŽ“name‘oÝ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¡˜¬24Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæget‘‘$‰c4ÕÂŽ“keymap‘‘$‰c4ÕÂŽ“name‘²>‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãù¬24Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fægetc‘±§‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ãb¬28Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fægetc‘‘$‰c4ÕÂŽ“function‘0¶‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘M¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæignore‘‘$‰c4ÕÂŽ“completion‘‘$‰c4ÕÂŽ“duplicates‘[á‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘xH¬36Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæignore‘‘$‰c4ÕÂŽ“some‘‘$‰c4ÕÂŽ“completions‘‘$‰c4ÕÂŽ“function‘Ù%‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘õŒ¬36Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinhibit‘‘$‰c4ÕÂŽ“completion‘¶‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Òv¬36Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæinitialize‘èm‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ (¬28Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinsert‘‘$‰c4ÕÂŽ“completions-‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Nè¬34Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinsert‘‘$‰c4ÕÂŽ“text4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæinstream‘=‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘,¤¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinvoking‘‘$‰c4ÕÂŽ“keyseqs‘ºS‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ì¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæinvoking‘‘$‰c4ÕÂŽ“keyseqs‘‘$‰c4ÕÂŽ“in‘‘$‰c4ÕÂŽ“map‘õ6‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘ &ñ¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fækill‘‘$‰c4ÕÂŽ“text‘Ò ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘Û¬27Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fælibrary‘‘$‰c4ÕÂŽ“version‘¡È‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘¾/¬22Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæline‘‘$‰c4ÕÂŽ“buffer‘ÍÜ‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘êC¬21Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fælist‘‘$‰c4ÕÂŽ“funmap‘‘$‰c4ÕÂŽ“names‘‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘FÓ¬25Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæmake‘‘$‰c4ÕÂŽ“bare‘‘$‰c4ÕÂŽ“keymap‘c«‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘•f¬23Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ–fæmake‘‘$‰c4ÕÂŽ“keymap4ú‘ÅUÍ.Ž–p‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž“‘ÅU.Ž‘fµ¬23Ž¡’óáðÉrl‘‘$‰c4ÕÂŽ‘fæmark‘Ý15Ž¡‘ZG1.4.8‘ ! ó5Some–¦fMiscellaneous“Commands‘œ1‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ qaÝ15Ž¡‘6G1.5‘ ó5Readline–¦fvi“MoMÞde‘9»‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ìÝ17ŽŸ33‘GëH2‘32Programming–ffwith“GNU“Readline‘À–‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘¬ ëH19Ž¦‘6GÝ2.1‘ ó5Basic‘¦fBeha²!vior‘Þz‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ³«Ý19Ž¡‘6G2.2‘ --- 85,89 ---- 4 Ý15Ž¡‘ZG1.4.7‘ ó5KeybMÞoard‘¦fMacroshï‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ >Ý15Ž¡‘ZG1.4.8‘ ! ó5Some–¦fMiscellaneous“Commands‘œ1‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ qaÝ16Ž¡‘6G1.5‘ ó5Readline–¦fvi“MoMÞde‘9»‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ìÝ17ŽŸ33‘GëH2‘32Programming–ffwith“GNU“Readline‘À–‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘¬ ëH19Ž¦‘6GÝ2.1‘ ó5Basic‘¦fBeha²!vior‘Þz‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ³«Ý19Ž¡‘6G2.2‘ *************** *** 100,118 **** ó5Binding‘¦fKeys0"‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ RÝ24Ž¡‘ZG2.4.4‘ ó5AssoMÞciating–¦fF‘ÿeunction“Names“and“Bindings‘ñ½‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ÆíÝ25Ž¡‘ZG2.4.5‘ ! ó5Allo²!wing‘¦fUndoing‘t1‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ IbÝ25Ž¡‘ZG2.4.6‘ ó5Redispla²!y‘‰æ‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ! _Ý26Ž¡‘ZG2.4.7‘ ó5MoMÞdifying‘¦fT‘ÿeext‘œY‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ q‰Ý27Ž¡‘ZG2.4.8‘ ! ó5Utilit²!y‘¦fF‘ÿeunctions‘0u‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ¥Ý27Ž¡‘ZG2.4.9‘ ! ó5Alternate‘¦fIn²!terface$h‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ù˜Ý28Ž¡‘ZG2.4.10‘ ó5An‘¦fExample‘x‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ V©Ý29Ž¡‘6G2.5‘ ó5Custom‘¦fCompleters‘ä‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ! ëÝ30Ž¡‘ZG2.5.1‘ ó5Ho²!w–¦fCompleting“W‘ÿeorks‘_·‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ! 4çÝ30ŽŽŸŒ‹ÿÿÿþ _Ÿò‘GÝii’=æNGNU–¦fReadline“LibraryŽŽŽ ƒ3Ú ý†Ì&‘ZG2.5.2‘ ! ó5Completion‘¦fF‘ÿeunctions‘Š`‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ _‘Ý31Ž¤ 33‘ZG2.5.3‘ ó5Completion‘¦fV‘ÿeariables‘Ñk‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ ! ¦œÝ32Ž¡‘ZG2.5.4‘ ! ó5A–¦fShort“Completion“Example$K‘é˜à.Ž–.Ô‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž“‘é˜.Ž‘ù|Ý34ŽŸ33‘GëHConcept‘ffIndex‘H~‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘3óëH45ŽŸ ÿ‘GF›þ¦function–ffand“V˜ariable“Index‘â.‘32ëI.Ž–…‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž“‘32.Ž‘ ͤëH47ŽŽŸŒøËÁƒ’À;è›3Úïÿ 6óZÂÖN ¼j cmbx12óQÂÖN  #× cmbx12óIF C–ff cmbxti10óHÂÖN ff cmbx12ó?ÂÖN G® cmbx12ó=ßê ! GNU Readline Library --- 1,6 ---- ! GNU Readline Library *************** *** 8,24 ****

    GNU Readline Library

    !

    Edition 2.2, for Readline Library Version 2.1.

    !

    September 1997

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


    ! !

    ! @dircategory Libraries ! @direntry ! * Readline: (readline). The GNU readline library API ! !

    --- 8,84 ----

    GNU Readline Library

    !

    Edition 4.0, for Readline Library Version 4.0.

    !

    December 1998

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


    !

    Table of Contents

    ! !


    *************** *** 51,59 **** into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Foundation.

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

    --- 111,119 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation.

    ! Copyright (C) 1988-1999 Free Software Foundation, Inc.

    *************** *** 61,65 **** !

    Command Line Editing

    --- 121,125 ---- !

    Command Line Editing

    *************** *** 69,75 ****

    !

    Introduction to Line Editing

    --- 129,145 ----

    + + !

    Introduction to Line Editing

    *************** *** 89,98 **** key is pressed. If you do not have a meta key, the identical keystroke can be generated by typing ESC first, and then typing k. ! Either process is known as metafying the k key.

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

    --- 159,168 ---- key is pressed. If you do not have a meta key, the identical keystroke can be generated by typing ESC first, and then typing k. ! Either process is known as metafying the k key.

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

    *************** *** 101,110 **** DEL, ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this text, or in an init file ! (@xref{Readline Init File}).

    !

    Readline Interaction

    --- 171,180 ---- DEL, ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this text, or in an init file ! (see section Readline Init File).

    !

    Readline Interaction

    *************** *** 125,131 ****

    !

    Readline Init File Syntax

    --- 195,473 ----

    + + + + +

    Readline Bare Essentials

    +

    + + + + +

    +

    + In order to enter characters into the line, simply type them. The typed + character appears where the cursor was, and then the cursor moves one + space to the right. If you mistype a character, you can use your + erase character to back up and delete the mistyped character. + +

    +

    + Sometimes you may miss typing a character that you wanted to type, and + not notice your error until you have typed several other characters. In + that case, you can type C-b to move the cursor to the left, and then + correct your mistake. Afterwards, you can move the cursor to the right + with C-f. + +

    +

    + When you add text in the middle of a line, you will notice that characters + to the right of the cursor are `pushed over' to make room for the text + that you have inserted. Likewise, when you delete text behind the cursor, + characters to the right of the cursor are `pulled back' to fill in the + blank space created by the removal of the text. A list of the basic bare + essentials for editing the text of an input line follows. + +

    +
    + +
    C-b +
    + Move back one character. +
    C-f +
    + Move forward one character. +
    DEL +
    + Delete the character to the left of the cursor. +
    C-d +
    + Delete the character underneath the cursor. +
    Printing characters +
    + Insert the character into the line at the cursor. +
    C-_ +
    + Undo the last editing command. You can undo all the way back to an + empty line. +
    + + + +

    Readline Movement Commands

    + +

    + The above table describes the most basic possible keystrokes that you need + in order to do editing of the input line. For your convenience, many + other commands have been added in addition to C-b, C-f, + C-d, and DEL. Here are some commands for moving more rapidly + about the line. + +

    +
    + +
    C-a +
    + Move to the start of the line. +
    C-e +
    + Move to the end of the line. +
    M-f +
    + Move forward a word, 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. + +

    + + +

    Readline Killing Commands

    + +

    + + + +

    +

    + Killing text means to delete the text from the line, but to save + it away for later use, usually by yanking (re-inserting) + it back into the line. + If the description for a command says that it `kills' text, then you can + be sure that you can get the text back in a different (or the same) + place later. + +

    +

    + When you use a kill command, the text is saved in a kill-ring. + Any number of consecutive kills save all of the killed text together, so + that when you yank it back, you get it all. The kill + ring is not line specific; the text that you killed on a previously + typed line is available to be yanked back later, when you are typing + another line. + + +

    +

    + Here is the list of commands for killing text. + +

    +
    + +
    C-k +
    + Kill the text from the current cursor position to the end of the line. + +
    M-d +
    + Kill from the cursor to the end of the current word, or if between + words, to the end of the next word. + +
    M-DEL +
    + Kill from the cursor the start of the previous word, or if between + words, to the start of the previous word. + +
    C-w +
    + Kill from the cursor to the previous whitespace. This is different than + M-DEL because the word boundaries differ. + +
    + +

    + 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. +
    + + + +

    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'. + +

    + + +

    Searching for Commands in the History

    + +

    + Readline provides commands for searching through the command history + for lines containing a specified string. + There are two search modes: incremental and non-incremental. + +

    +

    + Incremental searches begin before the user has finished typing the + search string. + As each character of the search string is typed, Readline displays + the next entry from the history matching the string typed so far. + An incremental search requires only as many characters as needed to + find the desired history entry. + The 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-s or + C-r as appropriate. + This will search backward or forward in the history for the next + entry matching the search string typed so far. + Any other key sequence bound to a Readline command will terminate + the search and execute that command. + For instance, a 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. +

    ! !

    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 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. ! !

    ! ! ! ! ! !

    Readline Init File Syntax

    *************** *** 134,138 **** Lines beginning with a `#' are comments. Lines beginning with a `$' indicate conditional ! constructs (see section Conditional Init Constructs). Other lines denote variable settings and key bindings. --- 476,480 ---- Lines beginning with a `#' are comments. Lines beginning with a `$' indicate conditional ! constructs (see section Conditional Init Constructs). Other lines denote variable settings and key bindings. *************** *** 160,164 ****

    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 --- 502,506 ----
    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 *************** *** 169,173 ****
    comment-begin
    ! The string to insert at the beginning of the line when the insert-comment command is executed. The default value --- 511,515 ----
    comment-begin
    ! The string to insert at the beginning of the line when the insert-comment command is executed. The default value *************** *** 182,186 ****
    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 --- 524,528 ----
    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 *************** *** 192,196 ****
    convert-meta
    ! If set to `on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth --- 534,538 ----
    convert-meta
    ! If set to `on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth *************** *** 200,204 ****
    disable-completion
    ! If set to `On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had --- 542,546 ----
    disable-completion
    ! If set to `On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had *************** *** 207,211 ****
    editing-mode
    ! The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing --- 549,553 ----
    editing-mode
    ! The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing *************** *** 215,219 ****
    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 --- 557,561 ----
    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 *************** *** 222,226 ****
    expand-tilde
    ! If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'. --- 564,568 ----
    expand-tilde
    ! If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'. *************** *** 228,232 ****
    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 --- 570,574 ----
    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 *************** *** 235,241 **** this variable is set to `off'.
    keymap
    ! Sets Readline's idea of the current keymap for key binding commands. Acceptable keymap names are --- 577,601 ---- 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 (see section Searching for Commands in the History). + 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 *************** *** 259,280 ****
    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. -
    input-meta -
    - - - If set to `on', Readline will enable eight-bit input (it - will not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name meta-flag is a - synonym for this variable. -
    output-meta
    ! If set to `on', Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape --- 619,630 ----
    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 *************** *** 289,293 ****
    show-all-if-ambiguous
    ! This alters the default behavior of the completion functions. If set to `on', --- 639,643 ----
    show-all-if-ambiguous
    ! This alters the default behavior of the completion functions. If set to `on', *************** *** 298,302 ****
    visible-stats
    ! If set to `on', a character denoting a file's type is appended to the filename when listing possible --- 648,652 ----
    visible-stats
    ! If set to `on', a character denoting a file's type is appended to the filename when listing possible *************** *** 440,444 **** !

    Conditional Init Constructs

    --- 790,794 ---- !

    Conditional Init Constructs

    *************** *** 520,524 **** !

    Sample Init File

    --- 870,874 ---- !

    Sample Init File

    *************** *** 630,634 **** !

    Bindable Readline Commands

    --- 980,996 ---- !

    Bindable Readline Commands

    ! ! !

    *************** *** 639,668 **** !

    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. --- 1001,1030 ---- !

    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. *************** *** 670,674 ****
    backward-word (M-b)
    ! Move back to the start of this, or the previous, word. Words are composed of letters and digits. --- 1032,1036 ----
    backward-word (M-b)
    ! Move back to the start of this, or the previous, word. Words are composed of letters and digits. *************** *** 676,680 ****
    clear-screen (C-l)
    ! Clear the screen and redraw the current line, leaving the current line at the top of the screen. --- 1038,1042 ----
    clear-screen (C-l)
    ! Clear the screen and redraw the current line, leaving the current line at the top of the screen. *************** *** 682,686 ****
    redraw-current-line ()
    ! Refresh the current line. By default, this is unbound. --- 1044,1048 ----
    redraw-current-line ()
    ! Refresh the current line. By default, this is unbound. *************** *** 689,693 **** !

    Commands For Manipulating The History

    --- 1051,1055 ---- !

    Commands For Manipulating The History

    *************** *** 695,699 ****
    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 --- 1057,1061 ----
    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 *************** *** 702,721 ****
    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. --- 1064,1083 ----
    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. *************** *** 723,727 ****
    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. --- 1085,1089 ----
    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. *************** *** 729,733 ****
    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. --- 1091,1095 ----
    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. *************** *** 735,739 ****
    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 --- 1097,1101 ----
    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 *************** *** 742,746 ****
    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 --- 1104,1108 ----
    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 *************** *** 749,753 ****
    history-search-forward ()
    ! Search forward through the history for the string of characters between the start of the current line and the current cursor --- 1111,1115 ----
    history-search-forward ()
    ! Search forward through the history for the string of characters between the start of the current line and the current cursor *************** *** 757,761 ****
    history-search-backward ()
    ! Search backward through the history for the string of characters between the start of the current line and the point. This --- 1119,1123 ----
    history-search-backward ()
    ! Search backward through the history for the string of characters between the start of the current line and the point. This *************** *** 764,768 ****
    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, --- 1126,1130 ----
    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, *************** *** 773,777 ****
    yank-last-arg (M-., M-_)
    ! Insert last argument to the previous command (the last word of the previous history entry). With an --- 1135,1139 ----
    yank-last-arg (M-., M-_)
    ! Insert last argument to the previous command (the last word of the previous history entry). With an *************** *** 784,788 **** !

    Commands For Changing Text

    --- 1146,1150 ---- !

    Commands For Changing Text

    *************** *** 790,794 ****
    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 --- 1152,1156 ----
    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 *************** *** 798,808 ****
    backward-delete-char (Rubout)
    ! Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.
    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. --- 1160,1177 ----
    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. *************** *** 810,824 ****
    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 --- 1179,1193 ----
    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 *************** *** 830,834 ****
    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. --- 1199,1203 ----
    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. *************** *** 836,840 ****
    upcase-word (M-u)
    ! Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. --- 1205,1209 ----
    upcase-word (M-u)
    ! Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. *************** *** 842,846 ****
    downcase-word (M-l)
    ! Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. --- 1211,1215 ----
    downcase-word (M-l)
    ! Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. *************** *** 848,852 ****
    capitalize-word (M-c)
    ! Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. --- 1217,1221 ----
    capitalize-word (M-c)
    ! Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. *************** *** 856,860 **** !

    Killing And Yanking

    --- 1225,1229 ---- !

    Killing And Yanking

    *************** *** 862,876 ****
    kill-line (C-k)
    ! Kill the text from the current cursor position to the end of the line.
    backward-kill-line (C-x Rubout)
    ! Kill backward to the beginning of the line.
    unix-line-discard (C-u)
    ! Kill backward from the cursor to the beginning of the current line. The killed text is saved on the kill-ring. --- 1231,1245 ----
    kill-line (C-k)
    ! Kill the text from the current cursor position to the end of the line.
    backward-kill-line (C-x Rubout)
    ! Kill backward to the beginning of the line.
    unix-line-discard (C-u)
    ! Kill backward from the cursor to the beginning of the current line. The killed text is saved on the kill-ring. *************** *** 878,882 ****
    kill-whole-line ()
    ! Kill all characters on the current line, no matter where the cursor is. By default, this is unbound. --- 1247,1251 ----
    kill-whole-line ()
    ! Kill all characters on the current line, no matter where the cursor is. By default, this is unbound. *************** *** 884,888 ****
    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 --- 1253,1257 ----
    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 *************** *** 891,895 ****
    backward-kill-word (M-DEL)
    ! Kill the word behind the cursor. Word boundaries are the same as backward-word. --- 1260,1264 ----
    backward-kill-word (M-DEL)
    ! Kill the word behind the cursor. Word boundaries are the same as backward-word. *************** *** 897,901 ****
    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. --- 1266,1270 ----
    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. *************** *** 903,912 ****
    delete-horizontal-space ()
    ! Delete all spaces and tabs around point. By default, this is unbound.
    kill-region ()
    ! Kill the text between the point and the mark (saved cursor position). This text is referred to as the region. --- 1272,1281 ----
    delete-horizontal-space ()
    ! Delete all spaces and tabs around point. By default, this is unbound.
    kill-region ()
    ! Kill the text between the point and the mark (saved cursor position). This text is referred to as the region. *************** *** 915,919 ****
    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. --- 1284,1288 ----
    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. *************** *** 921,925 ****
    copy-backward-word ()
    ! Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. --- 1290,1294 ----
    copy-backward-word ()
    ! Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. *************** *** 928,932 ****
    copy-forward-word ()
    ! Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. --- 1297,1301 ----
    copy-forward-word ()
    ! Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. *************** *** 935,939 ****
    yank (C-y)
    ! Yank the top of the kill ring into the buffer at the current cursor position. --- 1304,1308 ----
    yank (C-y)
    ! Yank the top of the kill ring into the buffer at the current cursor position. *************** *** 941,945 ****
    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. --- 1310,1314 ----
    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. *************** *** 948,957 **** !

    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. --- 1317,1326 ---- !

    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. *************** *** 959,963 ****
    universal-argument ()
    ! This is another way to specify an argument. If this command is followed by one or more digits, optionally with a --- 1328,1332 ----
    universal-argument ()
    ! This is another way to specify an argument. If this command is followed by one or more digits, optionally with a *************** *** 976,980 **** !

    Letting Readline Type For You

    --- 1345,1349 ---- !

    Letting Readline Type For You

    *************** *** 982,986 ****
    complete (TAB)
    ! Attempt to do completion on the text before the cursor. This is application-specific. Generally, if you are typing a filename --- 1351,1355 ----
    complete (TAB)
    ! Attempt to do completion on the text before the cursor. This is application-specific. Generally, if you are typing a filename *************** *** 992,1001 ****
    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. --- 1361,1370 ----
    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. *************** *** 1003,1007 ****
    menu-complete ()
    ! Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. --- 1372,1376 ----
    menu-complete ()
    ! Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. *************** *** 1016,1034 **** by default.
    !

    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. --- 1385,1412 ---- 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. +
    !

    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. *************** *** 1036,1040 ****
    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. --- 1414,1418 ----
    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. *************** *** 1044,1053 **** !

    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. --- 1422,1431 ---- !

    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. *************** *** 1055,1059 ****
    abort (C-g)
    ! Abort the current editing command and ring the terminal's bell (subject to the setting of --- 1433,1437 ----
    abort (C-g)
    ! Abort the current editing command and ring the terminal's bell (subject to the setting of *************** *** 1062,1066 ****
    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. --- 1440,1444 ----
    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. *************** *** 1068,1072 ****
    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 --- 1446,1450 ----
    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 *************** *** 1075,1084 ****
    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. --- 1453,1462 ----
    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. *************** *** 1086,1095 ****
    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. --- 1464,1473 ----
    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. *************** *** 1097,1101 ****
    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. --- 1475,1479 ----
    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. *************** *** 1103,1107 ****
    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. --- 1481,1485 ----
    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. *************** *** 1109,1113 ****
    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 --- 1487,1491 ----
    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 *************** *** 1116,1120 ****
    insert-comment (M-#)
    ! The value of the comment-begin variable is inserted at the beginning of the current line, --- 1494,1498 ----
    insert-comment (M-#)
    ! The value of the comment-begin variable is inserted at the beginning of the current line, *************** *** 1123,1127 ****
    dump-functions ()
    ! Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, --- 1501,1505 ----
    dump-functions ()
    ! Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, *************** *** 1131,1135 ****
    dump-variables ()
    ! Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, --- 1509,1513 ----
    dump-variables ()
    ! Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, *************** *** 1139,1143 ****
    dump-macros ()
    ! Print all of the Readline key sequences bound to macros and the strings they ouput. If a numeric argument is supplied, --- 1517,1521 ----
    dump-macros ()
    ! Print all of the Readline key sequences bound to macros and the strings they ouput. If a numeric argument is supplied, *************** *** 1149,1153 **** !

    Readline vi Mode

    --- 1527,1531 ---- !

    Readline vi Mode

    *************** *** 1176,1180 **** !

    Programming with GNU Readline

    --- 1554,1558 ---- !

    Programming with GNU Readline

    *************** *** 1187,1193 ****

    !

    Basic Behavior

    --- 1565,1584 ----

    + + !

    Basic Behavior

    *************** *** 1200,1205 ****

    ! ! The function readline () prints a prompt and then reads and returns a single line of text from the user. The line readline --- 1591,1596 ----

    ! ! The function readline () prints a prompt and then reads and returns a single line of text from the user. The line readline *************** *** 1236,1240 **** 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.

    --- 1627,1631 ---- 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.

    *************** *** 1315,1324 **** might write a function called initialize_readline () which performs this and other desired initializations, such as installing ! custom completers (see section Custom Completers).

    !

    Custom Functions

    --- 1706,1715 ---- might write a function called initialize_readline () which performs this and other desired initializations, such as installing ! custom completers (see section Custom Completers).

    !

    Custom Functions

    *************** *** 1331,1341 ****

    !

    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: --- 1722,1737 ----

    + + !

    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: *************** *** 1382,1386 **** !

    Writing a New Function

    --- 1778,1782 ---- !

    Writing a New Function

    *************** *** 1418,1422 **** !

    Readline Variables

    --- 1814,1818 ---- !

    Readline Variables

    *************** *** 1427,1433 ****

    Variable: char * rl_line_buffer !
    This is the line gathered so far. You are welcome to modify the ! contents of the line, but see section Allowing Undoing.
    --- 1823,1829 ----
    Variable: char * rl_line_buffer !
    This is the line gathered so far. You are welcome to modify the ! contents of the line, but see section Allowing Undoing.
    *************** *** 1436,1440 ****
    Variable: int rl_point !
    The offset of the current cursor position in rl_line_buffer (the point). --- 1832,1836 ----
    Variable: int rl_point !
    The offset of the current cursor position in rl_line_buffer (the point). *************** *** 1445,1449 ****
    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 --- 1841,1845 ----
    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 *************** *** 1455,1459 ****
    Variable: int rl_mark !
    The mark (saved position) in the current line. If set, the mark and point define a region. --- 1851,1855 ----
    Variable: int rl_mark !
    The mark (saved position) in the current line. If set, the mark and point define a region. *************** *** 1464,1468 ****
    Variable: int rl_done !
    Setting this to a non-zero value causes Readline to return the current line immediately. --- 1860,1864 ----
    Variable: int rl_done !
    Setting this to a non-zero value causes Readline to return the current line immediately. *************** *** 1473,1477 ****
    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. --- 1869,1873 ----
    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. *************** *** 1481,1486 ****

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

    +
    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. *************** *** 1491,1495 ****
    Variable: char * rl_library_version !
    The version number of this revision of the library.
    --- 1898,1902 ----
    Variable: char * rl_library_version !
    The version number of this revision of the library.
    *************** *** 1499,1503 ****
    Variable: char * rl_terminal_name !
    The terminal type, used for initialization.
    --- 1906,1910 ----
    Variable: char * rl_terminal_name !
    The terminal type, used for initialization.
    *************** *** 1507,1514 ****
    Variable: char * rl_readline_name !
    This variable is set to a unique name by each application using Readline. The value allows conditional parsing of the inputrc file ! (see section Conditional Init Constructs).
    --- 1914,1921 ----
    Variable: char * rl_readline_name !
    This variable is set to a unique name by each application using Readline. The value allows conditional parsing of the inputrc file ! (see section Conditional Init Constructs).
    *************** *** 1517,1521 ****
    Variable: FILE * rl_instream !
    The stdio stream from which Readline reads input.
    --- 1924,1928 ----
    Variable: FILE * rl_instream !
    The stdio stream from which Readline reads input.
    *************** *** 1525,1529 ****
    Variable: FILE * rl_outstream !
    The stdio stream to which Readline performs output.
    --- 1932,1936 ----
    Variable: FILE * rl_outstream !
    The stdio stream to which Readline performs output.
    *************** *** 1533,1537 ****
    Variable: Function * rl_startup_hook !
    If non-zero, this is the address of a function to call just before readline prints the first prompt. --- 1940,1944 ----
    Variable: Function * rl_startup_hook !
    If non-zero, this is the address of a function to call just before readline prints the first prompt. *************** *** 1541,1546 ****

    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. --- 1948,1963 ----

    +
    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. *************** *** 1551,1559 ****
    Variable: Function * rl_getc_function !
    If non-zero, readline will call indirectly through this pointer to get a character from the input stream. By default, it is set to rl_getc, the default readline character input function ! (see section Utility Functions).
    --- 1968,1976 ----
    Variable: Function * rl_getc_function !
    If non-zero, readline will call indirectly through this pointer to get a character from the input stream. By default, it is set to rl_getc, the default readline character input function ! (see section Utility Functions).
    *************** *** 1562,1570 ****
    Variable: VFunction * rl_redisplay_function !
    If non-zero, readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to rl_redisplay, the default readline ! redisplay function (see section Redisplay).
    --- 1979,1987 ----
    Variable: VFunction * rl_redisplay_function !
    If non-zero, readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to rl_redisplay, the default readline ! redisplay function (see section Redisplay).
    *************** *** 1573,1578 ****
    Variable: Keymap rl_executing_keymap !
    ! This variable is set to the keymap (see section Selecting a Keymap) in which the currently executing readline function was found.
    --- 1990,1995 ----
    Variable: Keymap rl_executing_keymap !
    ! This variable is set to the keymap (see section Selecting a Keymap) in which the currently executing readline function was found.
    *************** *** 1582,1587 ****
    Variable: Keymap rl_binding_keymap !
    ! This variable is set to the keymap (see section Selecting a Keymap) in which the last key binding occurred.
    --- 1999,2004 ----
    Variable: Keymap rl_binding_keymap !
    ! This variable is set to the keymap (see section Selecting a Keymap) in which the last key binding occurred.
    *************** *** 1590,1598 **** !

    Readline Convenience Functions

    !

    Naming a Function

    --- 2007,2029 ---- !

    Readline Convenience Functions

    ! + ! !

    Naming a Function

    *************** *** 1618,1622 ****

    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 --- 2049,2053 ----
    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 *************** *** 1635,1642 **** !

    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 --- 2066,2073 ---- !

    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 *************** *** 1647,1651 ****

    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. --- 2078,2082 ----
    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. *************** *** 1656,1660 ****
    Function: Keymap rl_copy_keymap (Keymap map) !
    Return a new keymap which is a copy of map.
    --- 2087,2091 ----
    Function: Keymap rl_copy_keymap (Keymap map) !
    Return a new keymap which is a copy of map.
    *************** *** 1664,1668 ****
    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 --- 2095,2099 ----
    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 *************** *** 1674,1678 ****
    Function: void rl_discard_keymap (Keymap keymap) !
    Free the storage associated with keymap.
    --- 2105,2109 ----
    Function: void rl_discard_keymap (Keymap keymap) !
    Free the storage associated with keymap.
    *************** *** 1687,1691 ****
    Function: Keymap rl_get_keymap () !
    Returns the currently active keymap.
    --- 2118,2122 ----
    Function: Keymap rl_get_keymap () !
    Returns the currently active keymap.
    *************** *** 1695,1699 ****
    Function: void rl_set_keymap (Keymap keymap) !
    Makes keymap the currently active keymap.
    --- 2126,2130 ----
    Function: void rl_set_keymap (Keymap keymap) !
    Makes keymap the currently active keymap.
    *************** *** 1703,1709 ****
    Function: Keymap rl_get_keymap_by_name (char *name) !
    Return the keymap matching name. name is one which would ! be supplied in a set keymap inputrc line (@xref{Readline Init File}).
    --- 2134,2140 ----
    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 (see section Readline Init File).
    *************** *** 1712,1718 ****
    Function: char * rl_get_keymap_name (Keymap keymap) !
    Return the name matching keymap. name is one which would ! be supplied in a set keymap inputrc line (@xref{Readline Init File}).
    --- 2143,2149 ----
    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 (see section Readline Init File).
    *************** *** 1720,1724 **** !

    Binding Keys

    --- 2151,2155 ---- !

    Binding Keys

    *************** *** 1738,1742 ****

    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. --- 2169,2173 ----
    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. *************** *** 1747,1751 ****
    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. --- 2178,2182 ----
    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. *************** *** 1756,1760 ****
    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. --- 2187,2191 ----
    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. *************** *** 1765,1769 ****
    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. --- 2196,2200 ----
    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. *************** *** 1774,1778 ****
    Function: int rl_unbind_function_in_map (Function *function, Keymap map) !
    Unbind all keys that execute function in map.
    --- 2205,2209 ----
    Function: int rl_unbind_function_in_map (Function *function, Keymap map) !
    Unbind all keys that execute function in map.
    *************** *** 1782,1786 ****
    Function: int rl_unbind_command_in_map (char *command, Keymap map) !
    Unbind all keys that are bound to command in map.
    --- 2213,2217 ----
    Function: int rl_unbind_command_in_map (char *command, Keymap map) !
    Unbind all keys that are bound to command in map.
    *************** *** 1790,1794 ****
    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 --- 2221,2225 ----
    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 *************** *** 1802,1809 ****
    Function: int rl_parse_and_bind (char *line) !
    Parse line as if it had been read from the inputrc file and perform any key bindings and variable assignments found ! (@xref{Readline Init File}).
    --- 2233,2240 ----
    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 ! (see section Readline Init File).
    *************** *** 1812,1818 ****
    Function: int rl_read_init_file (char *filename) !
    Read keybindings and variable assignments from filename ! (@xref{Readline Init File}).
    --- 2243,2249 ----
    Function: int rl_read_init_file (char *filename) !
    Read keybindings and variable assignments from filename ! (see section Readline Init File).
    *************** *** 1820,1824 **** !

    Associating Function Names and Bindings

    --- 2251,2255 ---- !

    Associating Function Names and Bindings

    *************** *** 1830,1834 ****

    Function: Function * rl_named_function (char *name) !
    Return the function with name name.
    --- 2261,2265 ----
    Function: Function * rl_named_function (char *name) !
    Return the function with name name.
    *************** *** 1838,1842 ****
    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 --- 2269,2273 ----
    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 *************** *** 1849,1853 ****
    Function: char ** rl_invoking_keyseqs (Function *function) !
    Return an array of strings representing the key sequences used to invoke function in the current keymap. --- 2280,2284 ----
    Function: char ** rl_invoking_keyseqs (Function *function) !
    Return an array of strings representing the key sequences used to invoke function in the current keymap. *************** *** 1858,1862 ****
    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. --- 2289,2293 ----
    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. *************** *** 1867,1871 ****
    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, --- 2298,2302 ----
    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, *************** *** 1878,1882 ****
    Function: void rl_list_funmap_names () !
    Print the names of all bindable Readline functions to rl_outstream.
    --- 2309,2313 ----
    Function: void rl_list_funmap_names () !
    Print the names of all bindable Readline functions to rl_outstream.
    *************** *** 1885,1889 **** !

    Allowing Undoing

    --- 2316,2320 ---- !

    Allowing Undoing

    *************** *** 1927,1931 ****

    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 --- 2358,2362 ----
    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 *************** *** 1938,1942 ****
    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 () --- 2369,2373 ----
    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 () *************** *** 1948,1952 ****
    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. --- 2379,2383 ----
    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. *************** *** 1957,1961 ****
    Function: void free_undo_list () !
    Free the existing undo list.
    --- 2388,2392 ----
    Function: void free_undo_list () !
    Free the existing undo list.
    *************** *** 1965,1969 ****
    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. --- 2396,2400 ----
    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. *************** *** 1981,1985 ****
    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 --- 2412,2416 ----
    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 *************** *** 1990,1999 **** !

    Redisplay

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

    Redisplay

    Function: void rl_redisplay () !
    Change what's displayed on the screen to reflect the current contents of rl_line_buffer. *************** *** 2004,2008 ****
    Function: int rl_forced_update_display () !
    Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. --- 2435,2439 ----
    Function: int rl_forced_update_display () !
    Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. *************** *** 2013,2017 ****
    Function: int rl_on_new_line () !
    Tell the update routines that we have moved onto a new (empty) line, usually after ouputting a newline. --- 2444,2448 ----
    Function: int rl_on_new_line () !
    Tell the update routines that we have moved onto a new (empty) line, usually after ouputting a newline. *************** *** 2022,2026 ****
    Function: int rl_reset_line_state () !
    Reset the display state to a clean state and redisplay the current line starting on a new line. --- 2453,2457 ----
    Function: int rl_reset_line_state () !
    Reset the display state to a clean state and redisplay the current line starting on a new line. *************** *** 2031,2037 ****
    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.
    --- 2462,2468 ----
    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.
    *************** *** 2041,2057 ****
    Function: int rl_clear_message () !
    Clear the message in the echo area.

    !

    Modifying Text

    Function: int rl_insert_text (char *text) !
    Insert text into the line at the current cursor position.
    --- 2472,2506 ----
    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. +
    + +

    !

    Modifying Text

    Function: int rl_insert_text (char *text) !
    Insert text into the line at the current cursor position.
    *************** *** 2061,2065 ****
    Function: int rl_delete_text (int start, int end) !
    Delete the text between start and end in the current line.
    --- 2510,2514 ----
    Function: int rl_delete_text (int start, int end) !
    Delete the text between start and end in the current line.
    *************** *** 2069,2073 ****
    Function: char * rl_copy_text (int start, int end) !
    Return a copy of the text between start and end in the current line. --- 2518,2522 ----
    Function: char * rl_copy_text (int start, int end) !
    Return a copy of the text between start and end in the current line. *************** *** 2078,2082 ****
    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 --- 2527,2531 ----
    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 *************** *** 2090,2101 **** !

    Utility Functions

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

    Utility Functions

    Function: int rl_read_key () !
    Return the next character available. This handles input inserted into ! the input stream via pending input (see section Readline Variables) and rl_stuff_char (), macros, and characters read from the keyboard.
    *************** *** 2105,2109 ****
    Function: int rl_getc (FILE *) !
    Return the next character available from the keyboard.
    --- 2554,2558 ----
    Function: int rl_getc (FILE *) !
    Return the next character available from the keyboard.
    *************** *** 2113,2117 ****
    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 --- 2562,2566 ----
    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 *************** *** 2123,2127 ****
    Function: rl_extend_line_buffer (int len) !
    Ensure that rl_line_buffer has enough space to hold len characters, possibly reallocating it if necessary. --- 2572,2576 ----
    Function: rl_extend_line_buffer (int len) !
    Ensure that rl_line_buffer has enough space to hold len characters, possibly reallocating it if necessary. *************** *** 2132,2136 ****
    Function: int rl_initialize () !
    Initialize or re-initialize Readline's internal state.
    --- 2581,2585 ----
    Function: int rl_initialize () !
    Initialize or re-initialize Readline's internal state.
    *************** *** 2140,2144 ****
    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). --- 2589,2593 ----
    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). *************** *** 2149,2153 ****
    Function: int alphabetic (int c) !
    Return 1 if c is an alphabetic character.
    --- 2598,2602 ----
    Function: int alphabetic (int c) !
    Return 1 if c is an alphabetic character.
    *************** *** 2157,2161 ****
    Function: int numeric (int c) !
    Return 1 if c is a numeric character.
    --- 2606,2610 ----
    Function: int numeric (int c) !
    Return 1 if c is a numeric character.
    *************** *** 2165,2169 ****
    Function: int ding () !
    Ring the terminal bell, obeying the setting of bell-style.
    --- 2614,2618 ----
    Function: int ding () !
    Ring the terminal bell, obeying the setting of bell-style.
    *************** *** 2171,2174 **** --- 2620,2637 ----

    +

    +
    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 (see section Readline Init File Syntax). +
    + +

    +

    The following are implemented as macros, defined in chartypes.h. *************** *** 2177,2181 ****

    Function: int uppercase_p (int c) !
    Return 1 if c is an uppercase alphabetic character.
    --- 2640,2644 ----
    Function: int uppercase_p (int c) !
    Return 1 if c is an uppercase alphabetic character.
    *************** *** 2185,2189 ****
    Function: int lowercase_p (int c) !
    Return 1 if c is a lowercase alphabetic character.
    --- 2648,2652 ----
    Function: int lowercase_p (int c) !
    Return 1 if c is a lowercase alphabetic character.
    *************** *** 2193,2197 ****
    Function: int digit_p (int c) !
    Return 1 if c is a numeric character.
    --- 2656,2660 ----
    Function: int digit_p (int c) !
    Return 1 if c is a numeric character.
    *************** *** 2201,2205 ****
    Function: int to_upper (int c) !
    If c is a lowercase alphabetic character, return the corresponding uppercase character. --- 2664,2668 ----
    Function: int to_upper (int c) !
    If c is a lowercase alphabetic character, return the corresponding uppercase character. *************** *** 2210,2214 ****
    Function: int to_lower (int c) !
    If c is an uppercase alphabetic character, return the corresponding lowercase character. --- 2673,2677 ----
    Function: int to_lower (int c) !
    If c is an uppercase alphabetic character, return the corresponding lowercase character. *************** *** 2219,2223 ****
    Function: int digit_value (int c) !
    If c is a number, return the value it represents.
    --- 2682,2686 ----
    Function: int digit_value (int c) !
    If c is a number, return the value it represents.
    *************** *** 2226,2230 **** !

    Alternate Interface

    --- 2689,2693 ---- !

    Alternate Interface

    *************** *** 2240,2244 ****

    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 --- 2703,2707 ----
    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 *************** *** 2250,2254 ****
    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 --- 2713,2717 ----
    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 *************** *** 2264,2268 ****
    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. --- 2727,2731 ----
    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. *************** *** 2272,2276 **** !

    An Example

    --- 2735,2739 ---- !

    An Example

    *************** *** 2343,2347 **** !

    Custom Completers

    --- 2806,2971 ---- !

    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 (). !
    ! !

    ! ! !

    Custom Completers

    *************** *** 2354,2360 ****

    !

    How Completing Works

    --- 2978,2991 ----

    + + !

    How Completing Works

    *************** *** 2389,2393 **** 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. --- 3020,3024 ---- 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. *************** *** 2414,2418 ****

    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 --- 3045,3049 ----
    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 *************** *** 2424,2428 ****
    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 --- 3055,3059 ----
    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 *************** *** 2434,2438 **** !

    Completion Functions

    --- 3065,3069 ---- !

    Completion Functions

    *************** *** 2444,2448 ****

    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 --- 3075,3079 ----
    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 *************** *** 2457,2461 ****
    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 --- 3088,3092 ----
    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 *************** *** 2470,2474 ****
    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 --- 3101,3105 ----
    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 *************** *** 2480,2484 ****
    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 (). --- 3111,3115 ----
    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 (). *************** *** 2490,2494 ****
    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. --- 3121,3125 ----
    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. *************** *** 2510,2514 ****
    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 --- 3141,3145 ----
    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 *************** *** 2522,2526 ****
    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 --- 3153,3157 ----
    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 *************** *** 2532,2541 **** !

    Completion Variables

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

    Completion Variables

    Variable: Function * rl_completion_entry_function !
    A pointer to the generator function for completion_matches (). NULL means to use filename_entry_function (), the default *************** *** 2547,2551 ****
    Variable: CPPFunction * rl_attempted_completion_function !
    A pointer to an alternative function to create matches. The function is called with text, start, and end. --- 3178,3182 ----
    Variable: CPPFunction * rl_attempted_completion_function !
    A pointer to an alternative function to create matches. The function is called with text, start, and end. *************** *** 2562,2566 ****
    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 --- 3193,3197 ----
    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 *************** *** 2580,2584 ****
    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 --- 3211,3215 ----
    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 *************** *** 2594,2598 ****
    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 --- 3225,3229 ----
    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 *************** *** 2608,2612 ****
    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 --- 3239,3243 ----
    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 *************** *** 2618,2622 ****
    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 --- 3249,3253 ----
    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 *************** *** 2629,2633 ****
    Variable: char * rl_basic_quote_characters !
    List of quote characters which can cause a word break.
    --- 3260,3264 ----
    Variable: char * rl_basic_quote_characters !
    List of quote characters which can cause a word break.
    *************** *** 2637,2641 ****
    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 --- 3268,3272 ----
    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 *************** *** 2647,2651 ****
    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 --- 3278,3282 ----
    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 *************** *** 2658,2662 ****
    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. --- 3289,3293 ----
    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. *************** *** 2667,2671 ****
    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. --- 3298,3302 ----
    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. *************** *** 2679,2683 ****
    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 --- 3310,3314 ----
    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 *************** *** 2693,2697 ****
    Variable: int rl_ignore_completion_duplicates !
    If non-zero, then disallow duplicates in the matches. Default is 1.
    --- 3324,3328 ----
    Variable: int rl_ignore_completion_duplicates !
    If non-zero, then disallow duplicates in the matches. Default is 1.
    *************** *** 2701,2705 ****
    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 --- 3332,3336 ----
    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 *************** *** 2714,2718 ****
    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 --- 3345,3349 ----
    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 *************** *** 2728,2732 ****
    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. --- 3359,3363 ----
    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. *************** *** 2737,2741 ****
    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. --- 3368,3372 ----
    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. *************** *** 2751,2755 ****
    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 --- 3382,3386 ----
    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 *************** *** 2759,2765 ****

    !

    A Short Completion Example

    --- 3390,3414 ----

    +

    +

    +
    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. +
    + +

    !

    A Short Completion Example

    *************** *** 3203,3215 **** !

    Concept Index

    !

    i

  • interaction, readline
  • !

    r

    !
  • readline, function
  • --- 3852,3901 ---- !

    Concept Index

    ! Jump to: ! c ! - ! e ! - ! i ! - ! k ! - ! n ! - ! r ! - ! y !

    !

    c

    ! !
  • command editing !
  • !

    e

    ! !
  • editing command lines !
  • !

    i

    +
  • initialization file, readline
  • interaction, readline
  • !

    k

    ! !
  • kill ring !
  • killing text !
  • !

    n

    ! !
  • notation, readline !
  • !

    r

    ! !
  • readline, function !
  • !

    y

    !
  • yanking text
  • *************** *** 3217,3482 **** !

    Function and Variable Index

    !

    !

    (

    ! !
  • (int !
  • !

    a

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

    b

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

    c

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

    d

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

    e

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

    f

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

    h

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

    i

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

    k

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

    l

    ! !
  • lowercase_p !
  • !

    m

    ! !
  • mark-modified-lines !
  • menu-complete () !
  • meta-flag !
  • !

    n

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

    o

    ! !
  • output-meta !
  • !

    p

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

    q

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

    r

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

    s

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

    t

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

    u

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

    v

    ! !
  • visible-stats !
  • !

    y

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

  • ! This document was generated on 2 April 1998 using the ! texi2html ! translator version 1.51.

    --- 3903,4230 ---- !

    Function and Variable Index

    !

    ! Jump to: ! ( ! - ! a ! - ! b ! - ! c ! - ! d ! - ! e ! - ! f ! - ! h ! - ! i ! - ! k ! - ! l ! - ! m ! - ! n ! - ! o ! - ! p ! - ! q ! - ! r ! - ! s ! - ! t ! - ! u ! - ! v ! - ! y !

    !

    (

    ! !
  • (int !
  • !

    a

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

    b

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

    c

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

    d

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

    e

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

    f

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

    h

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

    i

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

    k

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

    l

    ! !
  • lowercase_p !
  • !

    m

    ! !
  • mark-modified-lines !
  • menu-complete () !
  • meta-flag !
  • !

    n

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

    o

    ! !
  • output-meta !
  • !

    p

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

    q

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

    r

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

    s

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

    t

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

    u

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

    v

    ! !
  • visible-stats !
  • !

    y

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

  • ! This document was generated on 31 December 1998 using the ! texi2html ! translator version 1.52.

    diff -aNrc2 readline-2.2.1/doc/readline.info readline-4.0/doc/readline.info *** readline-2.2.1/doc/readline.info Thu Apr 2 14:44:10 1998 --- readline-4.0/doc/readline.info Thu Dec 31 12:53:09 1998 *************** *** 1,4 **** This is Info file readline.info, produced by Makeinfo version 1.67 from ! the input file /usr/homes/chet/src/bash/readline-2.2/doc/rlman.texinfo. INFO-DIR-SECTION Libraries --- 1,4 ---- This is Info file readline.info, produced by Makeinfo version 1.67 from ! the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo. INFO-DIR-SECTION Libraries *************** *** 11,15 **** need to provide a command line interface. ! Copyright (C) 1988, 1991 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this --- 11,15 ---- 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 *************** *** 25,29 **** 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.  --- 25,29 ---- 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.  *************** *** 272,287 **** 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 character is ! used to terminate an incremental search. will also terminate the ! search. 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 or 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 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 --- 272,288 ---- 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 ISEARCH-TERMINATORS variable are used to terminate an ! incremental search. If that variable has not been assigned a value, ! the and characters will terminate an incremental search. ! 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 or 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 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 *************** *** 397,400 **** --- 398,415 ---- 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 and will terminate + an incremental search. + `keymap' Sets Readline's idea of the current keymap for key binding *************** *** 415,425 **** modified. This variable is `off' by default. - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - `output-meta' If set to `on', Readline will display characters with the --- 430,433 ---- *************** *** 854,857 **** --- 862,870 ---- 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 *************** *** 1007,1010 **** --- 1020,1029 ---- 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 *************** *** 1123,1127 **** that need to provide a command line interface. ! Copyright (C) 1988, 1994, 1996 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this --- 1142,1147 ---- 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 *************** *** 1158,1162 **** functions. * Readline Convenience Functions:: Functions which Readline supplies to ! aid in writing your own * Custom Completers:: Supplanting or supplementing Readline's completion functions. --- 1178,1184 ---- 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. *************** *** 1358,1361 **** --- 1380,1389 ---- 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 *************** *** 1383,1386 **** --- 1411,1419 ---- `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 *************** *** 1408,1412 ****  ! File: readline.info, Node: Readline Convenience Functions, Next: Custom Completers, Prev: Readline Variables, Up: Programming with GNU Readline Readline Convenience Functions --- 1441,1445 ----  ! File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline Readline Convenience Functions *************** *** 1687,1690 **** --- 1720,1731 ---- 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 *************** *** 1750,1753 **** --- 1791,1804 ---- 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'. *************** *** 1871,1875 ****  ! File: readline.info, Node: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline Custom Completers --- 1922,2030 ----  ! 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 *************** *** 2148,2151 **** --- 2303,2319 ---- 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 *************** *** 2638,2641 **** --- 2806,2810 ---- * 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. *************** *** 2657,2660 **** --- 2826,2830 ---- * 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. *************** *** 2667,2670 **** --- 2837,2841 ---- * 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. *************** *** 2702,2713 **** * rl_callback_handler_remove: Alternate Interface. * rl_callback_read_char: Alternate Interface. * rl_char_is_quoted_p: Completion Variables. * rl_clear_message: Redisplay. ! * rl_complete <1>: How Completing Works. ! * rl_complete: Completion Functions. * rl_complete_internal: Completion Functions. * rl_completer_quote_characters: Completion Variables. * rl_completer_word_break_characters: Completion Variables. * rl_completion_append_character: Completion Variables. * rl_completion_entry_function <1>: How Completing Works. * rl_completion_entry_function: Completion Variables. --- 2873,2889 ---- * 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>: How Completing Works. * rl_completion_entry_function: Completion Variables. *************** *** 2718,2725 **** --- 2894,2903 ---- * 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. *************** *** 2730,2733 **** --- 2908,2912 ---- * 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. *************** *** 2763,2766 **** --- 2942,2946 ---- * 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. *************** *** 2769,2775 **** --- 2949,2960 ---- * 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. *************** *** 2784,2788 **** * show-all-if-ambiguous: Readline Init File Syntax. * start-kbd-macro (C-x (): Keyboard Macros. - * tilde-expand (M-~): Miscellaneous Commands. * to_lower: Utility Functions. * to_upper: Utility Functions. --- 2969,2972 ---- *************** *** 2805,2854 ****  Tag Table: ! Node: Top1177 ! Node: Command Line Editing1776 ! Node: Introduction and Notation2427 ! Node: Readline Interaction3466 ! Node: Readline Bare Essentials4659 ! Node: Readline Movement Commands6200 ! Node: Readline Killing Commands7166 ! Node: Readline Arguments8882 ! Node: Searching9857 ! Node: Readline Init File11440 ! Node: Readline Init File Syntax12487 ! Node: Conditional Init Constructs21353 ! Node: Sample Init File23792 ! Node: Bindable Readline Commands26962 ! Node: Commands For Moving27713 ! Node: Commands For History28561 ! Node: Commands For Text31313 ! Node: Commands For Killing33099 ! Node: Numeric Arguments35249 ! Node: Commands For Completion36376 ! Node: Keyboard Macros37862 ! Node: Miscellaneous Commands38421 ! Node: Readline vi Mode41225 ! Node: Programming with GNU Readline42983 ! Node: Basic Behavior43852 ! Node: Custom Functions47178 ! Node: The Function Type47779 ! Node: Function Writing48624 ! Node: Readline Variables49708 ! Node: Readline Convenience Functions52796 ! Node: Function Naming53527 ! Node: Keymaps54755 ! Node: Binding Keys56469 ! Node: Associating Function Names and Bindings58677 ! Node: Allowing Undoing60255 ! Node: Redisplay62840 ! Node: Modifying Text63911 ! Node: Utility Functions64822 ! Node: Alternate Interface66941 ! Node: Custom Completers70235 ! Node: How Completing Works70956 ! Node: Completion Functions73952 ! Node: Completion Variables76967 ! Node: A Short Completion Example84119 ! Node: Concept Index96425 ! Node: Function and Variable Index97179  End Tag Table --- 2989,3039 ----  Tag Table: ! Node: Top1190 ! Node: Command Line Editing1789 ! Node: Introduction and Notation2440 ! Node: Readline Interaction3479 ! Node: Readline Bare Essentials4672 ! Node: Readline Movement Commands6213 ! Node: Readline Killing Commands7179 ! Node: Readline Arguments8895 ! Node: Searching9870 ! Node: Readline Init File11583 ! Node: Readline Init File Syntax12630 ! Node: Conditional Init Constructs21837 ! Node: Sample Init File24276 ! Node: Bindable Readline Commands27446 ! Node: Commands For Moving28197 ! Node: Commands For History29045 ! Node: Commands For Text31797 ! Node: Commands For Killing33816 ! Node: Numeric Arguments35966 ! Node: Commands For Completion37093 ! Node: Keyboard Macros38841 ! Node: Miscellaneous Commands39400 ! Node: Readline vi Mode42204 ! Node: Programming with GNU Readline43974 ! Node: Basic Behavior44942 ! Node: Custom Functions48268 ! Node: The Function Type48869 ! Node: Function Writing49714 ! Node: Readline Variables50798 ! Node: Readline Convenience Functions54407 ! Node: Function Naming55145 ! Node: Keymaps56373 ! Node: Binding Keys58087 ! Node: Associating Function Names and Bindings60295 ! Node: Allowing Undoing61873 ! Node: Redisplay64458 ! Node: Modifying Text65853 ! Node: Utility Functions66764 ! Node: Alternate Interface69448 ! Node: Readline Signal Handling72742 ! Node: Custom Completers77788 ! Node: How Completing Works78503 ! Node: Completion Functions81499 ! Node: Completion Variables84514 ! Node: A Short Completion Example92412 ! Node: Concept Index104718 ! Node: Function and Variable Index105472  End Tag Table diff -aNrc2 readline-2.2.1/doc/readline.ps readline-4.0/doc/readline.ps *** readline-2.2.1/doc/readline.ps Thu Apr 2 14:45:32 1998 --- readline-4.0/doc/readline.ps Thu Dec 31 12:53:27 1998 *************** *** 2,6 **** %%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software %%Title: readline.dvi ! %%Pages: 54 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 --- 2,6 ---- %%Creator: dvipsk 5.58f Copyright 1986, 1994 Radical Eye Software %%Title: readline.dvi ! %%Pages: 56 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 *************** *** 9,13 **** %DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi %DVIPSParameters: dpi=300, comments removed ! %DVIPSSource: TeX output 1998.04.02:1444 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N --- 9,13 ---- %DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi %DVIPSParameters: dpi=300, comments removed ! %DVIPSSource: TeX output 1998.12.31:1253 %%BeginProcSet: tex.pro /TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N *************** *** 683,742 **** 1C00101C00101C00301C00F0FFFFF015177F9618>II76 ! DII80 ! D82 D<0FC4302C601C400CC004C004C004E00070007F003FE00FF801FC001C000E ! 0006800680068006C004E008D81087E00F177E9614>I<7FFFF860381840380840380880 ! 380480380480380400380000380000380000380000380000380000380000380000380000 ! 380000380000380000380000380000380003FF8016177F9619>II91 ! D<3FC0706070302038003803F81E3830387038E039E039E07970FF1F1E100E7F8D12>97 ! DI<003E00000E00000E00000E00000E00000E00000E00000E00000E0007CE001C ! 3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E00182E0007 ! CF8011177F9614>100 D<0FC0186030307038E018FFF8E000E000E00060007008301018 ! 3007C00D0E7F8D10>I<03E006700E701C201C001C001C001C001C00FF801C001C001C00 ! 1C001C001C001C001C001C001C001C001C007F800C1780960B>I<0F9E18E33060707070 ! 707070306018C02F80200060003FE03FF83FFC600EC006C006C006600C38380FE010157F ! 8D12>I<0300078007800300000000000000000000001F80038003800380038003800380 ! 0380038003800380038003800380038003804380E300E7007C00091D82960B>106 ! DII<07C018303018600C600CE00EE00EE00EE00EE00E701C3018 ! 183007C00F0E7F8D12>111 DI<07C2001C2600381E00700E00600E00E00E00E00E00E00E00E00E0060 ! 0E00700E00301E001C2E0007CE00000E00000E00000E00000E00000E00003F8011147F8D ! 13>I ! I<1F4060C0C040C040E000FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I< ! 080008000800180018003800FFC038003800380038003800380038003840384038403840 ! 1C800F000A147F930E>II ! 119 DII123 D E /Fo ! 2 106 df<00800180030003000300060006000C000C000C001800180018003000300060 ! 0060006000C000C000600060006000300030001800180018000C000C000C000600060003 ! 00030003000180008009267D9B0F>104 DI ! E /Fp 8 89 df<0007F008003C0C1800E0033801C000B8078000780F0000380E0000381E ! 0000183C0000183C0000087C0000087800000878000000F8000000F8000000F8000000F8 ! 000000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E ! 0000780E0000780F0000780780007801C000B800E00118003C0E080007F00020217C9F27 ! >71 D73 DII<0FF800E000E000E000E0 ! 00E000E000E000E000E000E000E000E000E000E000E000E000E0E0E0E0E0C1C061801F00 ! 0D177E9612>74 D76 DII80 D82 D<0FC4302C601C400CC004C004C004E0007000 ! 7F003FE00FF801FC001C000E0006800680068006C004E008D81087E00F177E9614>I<7F ! FFF860381840380840380880380480380480380400380000380000380000380000380000 ! 380000380000380000380000380000380000380000380000380000380003FF8016177F96 ! 19>II91 D<3FC0706070302038003803F81E3830387038E039E039E079 ! 70FF1F1E100E7F8D12>97 DI<003E00000E00000E00000E00000E00000E00000E ! 00000E00000E0007CE001C3E00300E00700E00600E00E00E00E00E00E00E00E00E00600E ! 00700E00301E00182E0007CF8011177F9614>100 D<0FC0186030307038E018FFF8E000 ! E000E000600070083010183007C00D0E7F8D10>I<03E006700E701C201C001C001C001C ! 001C00FF801C001C001C001C001C001C001C001C001C001C001C001C007F800C1780960B ! >I<0F9E18E33060707070707070306018C02F80200060003FE03FF83FFC600EC006C006 ! C006600C38380FE010157F8D12>I107 ! DI<07C0183030 ! 18600C600CE00EE00EE00EE00EE00E701C3018183007C00F0E7F8D12>111 ! DI<07C2001C ! 2600381E00700E00600E00E00E00E00E00E00E00E00E00600E00700E00301E001C2E0007 ! CE00000E00000E00000E00000E00000E00003F8011147F8D13>II<1F4060C0C040C040E000 ! FF007F801FC001E080608060C060E0C09F000B0E7F8D0E>I<0800080008001800180038 ! 00FFC0380038003800380038003800380038403840384038401C800F000A147F930E>I< ! F83E00380E00380E00380E00380E00380E00380E00380E00380E00380E00380E00381E00 ! 1C2E0007CF80110E7F8D14>I119 ! DI< ! FE1F380E3C0C1C081C080E100E100720072007E003C003C00180018001000100E200E200 ! A400780010147F8D13>I123 D E /Fo 2 106 ! df<00800180030003000300060006000C000C000C001800180018003000300060006000 ! 6000C000C000600060006000300030001800180018000C000C000C000600060003000300 ! 03000180008009267D9B0F>104 DI E ! /Fp 8 89 df<0007F008003C0C1800E0033801C000B8078000780F0000380E0000381E00 ! 00183C0000183C0000087C0000087800000878000000F8000000F8000000F8000000F800 ! 0000F8000000F8000000F8001FFF780000F8780000787C0000783C0000783C0000781E00 ! 00780E0000780F0000780780007801C000B800E00118003C0E080007F00020217C9F27> ! 71 D73 D13 D E /Fs 55 122 df<0006000C00180038007000E001E003C003C0078007800F800F001F001F003E003E00 3E007E007E007E007C007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00 --- 998,1002 ---- 6000000006600000000660000000066000000006300000000C300000000C18000000180C 000000300C00000030060000006003000000C0018000018000E00007000078001E00001F ! 00F8000007FFE0000000FF0000282B7EA02D>13 D E /Fs 56 122 df<0006000C00180038007000E001E003C003C0078007800F800F001F001F003E003E00 3E007E007E007E007C007C00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00FC00 *************** *** 1026,1690 **** 0000001F8000001FC000001FC000001FE000001FE018001FE07C001FE0FE001FE0FE001F E0FE001FE0FE001FC0FC001FC078003F8078003F803C007F001F01FE000FFFFC0003FFF0 ! 0000FF80001B277DA622>I<380000003E0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE0 ! 7FFFFFC07FFFFF807FFFFF0070000E0070000E0070001C00E0003800E0007000E000E000 ! 0001C0000001C000000380000007800000070000000F0000001F0000001E0000003E0000 ! 003E0000007E0000007C0000007C000000FC000000FC000000FC000000FC000001FC0000 ! 01FC000001FC000001FC000001FC000001FC000001FC000000F80000007000001C297CA8 ! 22>55 D<007F800001FFF00007FFF8000FC0FC001F803E003F001F007E001F807E001F80 ! 7E000F80FE000FC0FE000FC0FE000FC0FE000FE0FE000FE0FE000FE0FE000FE0FE000FE0 ! 7E001FE07E001FE03F003FE01F002FE00F80CFE007FF8FE001FF0FE000080FE000000FC0 ! 00000FC000000FC000001F803E001F807F001F807F003F007F003E007F007E007E00FC00 ! 3E03F8001FFFE0000FFF800001FE00001B277DA622>57 D<000007800000000007800000 ! 00000FC0000000000FC0000000000FC0000000001FE0000000001FE0000000003FF00000 ! 00003FF0000000003FF00000000077F80000000077F800000000F7FC00000000E3FC0000 ! 0000E3FC00000001C1FE00000001C1FE00000003C1FF0000000380FF0000000380FF0000 ! 0007007F80000007007F8000000F007FC000000E003FC000000E003FC000001C001FE000 ! 001C001FE000003FFFFFF000003FFFFFF000003FFFFFF00000700007F80000700007F800 ! 00F00007FC0000E00003FC0001E00003FE0001C00001FE0001C00001FE0003C00001FF00 ! FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC2E297EA833>65 DI<00007FE0030007FFFC07001FFFFF ! 0F007FF00F9F00FF0001FF01FC0000FF03F800007F07F000003F0FE000001F1FC000001F ! 1FC000000F3F8000000F3F800000077F800000077F800000077F00000000FF00000000FF ! 00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00000000FF00 ! 0000007F000000007F800000007F800000073F800000073F800000071FC00000071FC000 ! 000E0FE000000E07F000001C03F800003C01FC00007800FF0001F0007FF007C0001FFFFF ! 800007FFFE0000007FF00028297CA831>IIII<00007FE003000007FFFC0700001FFFFF0F00007FF00F9F0000 ! FF0001FF0001FC0000FF0003F800007F0007F000003F000FE000001F001FC000001F001F ! C000000F003F8000000F003F80000007007F80000007007F80000007007F0000000000FF ! 0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF ! 0000000000FF0000000000FF0000FFFFF87F0000FFFFF87F8000FFFFF87F800000FF003F ! 800000FF003F800000FF001FC00000FF001FC00000FF000FE00000FF0007F00000FF0003 ! F80000FF0001FC0000FF0000FF0001FF00007FF007FF00001FFFFF9F000007FFFE0F0000 ! 007FF003002D297CA835>III75 ! DIII<0000FFC00000000FFFFC0000003F807F000000FE001FC00001F800 ! 07E00003F00003F00007E00001F8000FE00001FC001FC00000FE001FC00000FE003F8000 ! 007F003F8000007F007F8000007F807F0000003F807F0000003F807F0000003F80FF0000 003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000 ! 003FC0FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000 ! 007F803F8000007F003F8000007F001FC00000FE001FC00000FE000FE00001FC0007F000 ! 03F80003F80007F00001FC000FE00000FE001FC000003FC0FF0000000FFFFC00000000FF ! C000002A297CA833>II<0000FFC00000000FFFFC0000003FC0FF000000FE001FC00001FC000FE000 ! 03F00003F00007F00003F8000FE00001FC001FC00000FE001FC00000FE003F8000007F00 ! 3F8000007F007F8000007F807F8000007F807F0000003F807F0000003F80FF0000003FC0 FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0 ! FF0000003FC0FF0000003FC0FF0000003FC07F0000003F807F8000007F807F8000007F80 ! 3F8000007F003F8000007F001FC00000FE001FC03E00FE000FE07F81FC0007E0C1C1F800 ! 03F18063F00001F98067E00000FF803FC000003FC07F0000000FFFFC00000000FFF800C0 ! 0000003C00C00000001E00C00000001E01C00000001F83C00000001FFFC00000000FFF80 ! 0000000FFF800000000FFF0000000007FF0000000003FE0000000001FC0000000000F800 ! 2A357CA833>II<00FF806003FFF0E00FFFF8E01F80FDE03F001FE03E0007E07C0003E0 ! 7C0003E0FC0001E0FC0001E0FC0000E0FE0000E0FE0000E0FF000000FFC000007FFC0000 ! 7FFFE0003FFFF8001FFFFE001FFFFF0007FFFF8003FFFFC000FFFFC0000FFFE000007FE0 ! 00001FF000000FF0000007F0E00003F0E00003F0E00003F0E00003F0F00003E0F00003E0 ! F80007E0FC0007C0FF000F80FFE03F80E3FFFE00E1FFFC00C01FF0001C297CA825>I<7F ! FFFFFFFF807FFFFFFFFF807FFFFFFFFF807F807F807F807C007F800F8078007F80078078 ! 007F80078070007F800380F0007F8003C0F0007F8003C0E0007F8001C0E0007F8001C0E0 ! 007F8001C0E0007F8001C0E0007F8001C000007F80000000007F80000000007F80000000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 ! 007F80000000FFFFFFC00000FFFFFFC00000FFFFFFC0002A287EA72F>IIII89 D<03FF80000FFFF0001F01FC003F80FE003F807F003F80 ! 3F003F803F801F003F8000003F8000003F8000003F8000003F80003FFF8001FC3F800FE0 ! 3F801F803F803F003F807E003F80FC003F80FC003F80FC003F80FC003F80FC005F807E00 ! DF803F839FFC1FFE0FFC03FC03FC1E1B7E9A21>97 DI<003FF00001FFFC0003F03E000FC07F001F807F ! 003F007F003F007F007F003E007E0000007E000000FE000000FE000000FE000000FE0000 ! 00FE000000FE000000FE0000007E0000007E0000007F0000003F0003803F8003801F8007 ! 000FE00E0003F83C0001FFF800003FC000191B7E9A1E>I<00007FF000007FF000007FF0 ! 000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0 ! 000007F0000007F0000007F0003F87F001FFF7F007F03FF00FC00FF01F8007F03F0007F0 ! 3F0007F07E0007F07E0007F07E0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0 ! FE0007F0FE0007F0FE0007F07E0007F07E0007F03F0007F03F0007F01F800FF00FC01FF0 ! 07E07FFF01FFE7FF007F87FF202A7EA925>I<003FC00001FFF00003E07C000F803E001F ! 801F001F001F003F000F807E000F807E000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FF ! FFFFC0FE000000FE000000FE0000007E0000007E0000007F0000003F0001C01F0001C00F ! 80038007C0070003F01E0000FFFC00003FE0001A1B7E9A1F>I<0007F8003FFC007E3E01 ! FC7F03F87F03F07F07F07F07F03E07F00007F00007F00007F00007F00007F00007F000FF ! FFC0FFFFC0FFFFC007F00007F00007F00007F00007F00007F00007F00007F00007F00007 ! F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0007F ! FF807FFF807FFF80182A7EA915>I<00FF80F003FFE3F80FC1FE1C1F007C7C3F007E7C3E ! 003E107E003F007E003F007E003F007E003F007E003F007E003F003E003E003F007E001F ! 007C000FC1F8000BFFE00018FF80001800000038000000380000003C0000003FFFF8003F ! FFFF001FFFFFC00FFFFFE007FFFFF01FFFFFF03C0007F07C0001F8F80000F8F80000F8F8 ! 0000F8F80000F87C0001F07C0001F03F0007E00FC01F8007FFFF00007FF0001E287E9A22 ! >II<07000F ! 801FC03FE03FE03FE01FC00F8007000000000000000000000000000000FFE0FFE0FFE00F E00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00F ! E00FE00FE0FFFEFFFEFFFE0F2B7EAA12>I ! 108 DII<003FE00001FFFC0003F0 ! 7E000FC01F801F800FC03F0007E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE00 ! 03F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F00 ! 07E03F0007E01F800FC00FC01F8007F07F0001FFFC00003FE0001D1B7E9A22>II114 ! D<03FE300FFFF03E03F07800F07000F0F00070F00070F80070FE0000FFE0007FFF007FFF ! C03FFFE01FFFF007FFF800FFF80007FC0000FCE0007CE0003CF0003CF00038F80038FC00 ! 70FF01E0E7FFC0C1FF00161B7E9A1B>I<00E00000E00000E00000E00001E00001E00001 ! E00003E00003E00007E0000FE0001FFFE0FFFFE0FFFFE00FE0000FE0000FE0000FE0000F ! E0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0700FE0700FE0700F ! E0700FE0700FE0700FE07007F0E003F0C001FF80007F0014267FA51A>I ! IIIII E /Ft 90 ! 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000000070F8F8F870051C779B ! 18>33 D<4010E038F078E038E038E038E038E038E038E038E038E038E03860300D0E7B9C ! 18>I<030600078F00078F00078F00078F00078F00078F007FFFC0FFFFE0FFFFE07FFFC0 ! 0F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FFFFE07FFFC01E3C001E3C00 ! 1E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C00001C00001C00001C00003F0 ! 000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780F1C00079C0003FC0001FE0 ! 000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380E1C380E1C70071C70079DE ! 003FFE001FF80007E00001C00001C00001C00000C00011247D9F18>I<3803007C07807C ! 0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C007C3C00387C0000780000 ! 780000F80000F00001F00001E00001E00003E00003C00003C00007C0000783800787C00F ! 87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07C018038013247E9F18>I< ! 01C00007E0000FF0000E70001C38001C38001C38001C38001C73F81CF3F81CE3F80FC1C0 ! 0FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0FC00E07C00E07870E07870 ! 70FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E0E0E1C1C38F8F0C0070E78 ! 9B18>I<007000F001E003C007800F001E001C00380038007000700070007000E000E000 ! E000E000E000E000E000E0007000700070007000380038001C001E000F00078003C001F0 ! 00F000700C24799F18>I<6000F00078003C001E000F000780038001C001C000E000E000 ! E000E00070007000700070007000700070007000E000E000E000E001C001C0038007800F ! 001E003C007800F00060000C247C9F18>I<01C00001C00001C00001C00041C100F1C780 ! FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1C78041C10001C00001C000 ! 01C00001C00011147D9718>I<00600000F00000F00000F00000F00000F00000F00000F0 ! 007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F00000F00000F00000F0000060 ! 0013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518>I<7FFFC0FFFFE0FFFFE07F ! FFC013047E8F18>I<3078FCFC78300606778518>I<000300000780000780000F80000F00 ! 001F00001E00001E00003E00003C00007C0000780000780000F80000F00001F00001E000 ! 03E00003C00003C00007C0000780000F80000F00000F00001F00001E00003E00003C0000 ! 3C00007C0000780000F80000F00000F0000060000011247D9F18>I<01F00007FC000FFE ! 001F1F001C07003803807803C07001C07001C0E000E0E000E0E000E0E000E0E000E0E000 ! E0E000E0E000E0E000E0F001E07001C07001C07803C03803801C07001F1F000FFE0007FC ! 0001F000131C7E9B18>I<01800380038007800F803F80FF80FB80438003800380038003 ! 800380038003800380038003800380038003800380038003807FFCFFFE7FFC0F1C7B9B18 ! >I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000E06000E00000E00000E000 ! 01C00001C00003C0000780000F00001E00003C0000780000F00001E00007C0000F80001E ! 00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F00003F0000770000770000E700 ! 01E70001C7000387000787000707000E07001E07003C0700380700780700F00700FFFFF8 ! FFFFF8FFFFF8000700000700000700000700000700000700007FF0007FF0007FF0151C7F ! 9B18>52 D<3FFF803FFF803FFF8038000038000038000038000038000038000038000038 ! 00003BF8003FFE003FFF003C07803003C00001C00000E00000E06000E0F000E0F000E0E0 ! 01C07003C07C0F803FFF001FFC0003F000131C7E9B18>I<007E0001FF0007FF800F83C0 ! 1E03C01C03C0380180380000700000700000E1F800E7FE00FFFF00FE0780F803C0F001C0 ! F000E0E000E0F000E07000E07000E07000E03801C03C03C01E07800FFF0007FE0001F800 ! 131C7E9B18>II<03F8000FFE001F ! FF003E0F803803807001C07001C07001C07001C03803803C07801FFF0007FC000FFE001F ! 1F003C07807001C0F001E0E000E0E000E0E000E0E000E07001C07803C03E0F801FFF000F ! FE0003F800131C7E9B18>I<3078FCFC783000000000000000003078FCFC783006147793 ! 18>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E1C3C78F060071A789318> ! I<0000C00003E00007E0001FC0003F8000FE0001FC0007F0000FE0003F80007F0000FC00 ! 00FC00007F00003F80000FE00007F00001FC0000FE00003F80001FC00007E00003E00000 ! C013187E9918>I<7FFFC0FFFFE0FFFFE07FFFC00000000000000000000000007FFFC0FF ! FFE0FFFFE07FFFC0130C7E9318>I<600000F80000FC00007F00003F80000FE00007F000 ! 01FC0000FE00003F80001FC00007E00007E0001FC0003F8000FE0001FC0007F0000FE000 ! 3F80007F0000FC0000F8000060000013187E9918>I<0FF0003FFC007FFF00700F00F003 ! 80F00380600780000F00003E00007C0001F00001E00003C00003C00003C00003C00003C0 ! 0003800000000000000000000000000000000003800007C00007C00007C000038000111C ! 7D9B18>I<007C0001FE0007FF000F87801E03C03C1DC0387FC070FFE071E3E071C1E0E1 ! C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1C071E3C070FF80387F003C ! 1C001E00E00F83E007FFC001FF80007E00131C7E9B18>I<00700000F80000F80000D800 ! 00D80001DC0001DC0001DC00018C00038E00038E00038E00038E00070700070700070700 ! 0707000707000FFF800FFF800FFF800E03801C01C01C01C01C01C07F07F0FF07F87F07F0 ! 151C7F9B18>I<7FFC00FFFF007FFF801C03C01C01C01C00E01C00E01C00E01C00E01C01 ! E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F01C00701C00701C00701C00 ! 701C00F01C00E01C03E07FFFC0FFFF807FFE00141C7F9B18>I<00F8E003FEE007FFE00F ! 07E01E03E03C01E03800E07000E07000E0700000E00000E00000E00000E00000E00000E0 ! 0000E00000E000007000007000E07000E03800E03C00E01E01C00F07C007FF8003FE0000 ! F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C03C01C01E01C00E01C00E0 ! 1C00F01C00701C00701C00701C00701C00701C00701C00701C00701C00F01C00E01C00E0 ! 1C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B18>III<01F1C003FDC0 ! 0FFFC01F0FC01C03C03803C03801C07001C07001C0700000E00000E00000E00000E00000 ! E00000E00FF0E01FF0E00FF07001C07001C07003C03803C03803C01C07C01F0FC00FFFC0 ! 03FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C01C01C01C01C01C01C01C01 ! C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C01C01C01C01C01C01C01C01 ! C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0151C7F9B18>I<7FFF00FF ! FF807FFF0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001 ! C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007F ! FF00FFFF807FFF00111C7D9B18>I<01FFC001FFC001FFC0000E00000E00000E00000E00 ! 000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00 ! 000E00000E00000E00F00E00F00E00F03C007FFC003FF0000FC000121C7D9B18>I<7F07 ! F0FF87F87F07F01C03C01C07801C07001C0E001C1E001C3C001C38001C70001CF0001DF0 ! 001DF0001FB8001FB8001F1C001E1C001C0E001C0E001C07001C07001C03801C03801C01 ! C07F03F0FF87F87F03F0151C7F9B18>II< ! FC01F8FE03F8FE03F83B06E03B06E03B06E03B06E03B8EE03B8EE0398CE0398CE039DCE0 ! 39DCE039DCE038D8E038D8E038F8E03870E03870E03800E03800E03800E03800E03800E0 ! 3800E0FE03F8FE03F8FE03F8151C7F9B18>I<7E07F0FF0FF87F07F01D81C01D81C01D81 ! C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C01C71C01C31C01C39C01C39 ! C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0FF87C07F03C0151C7F9B18 ! >I<0FFE003FFF807FFFC07803C07001C0F001E0E000E0E000E0E000E0E000E0E000E0E0 ! 00E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E070 ! 01C07C07C07FFFC03FFF800FFE00131C7E9B18>II<0FFE003FFF807FFFC07803C07001C0F001E0E000E0E000E0E000E0E000E0E000 ! E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E070E0E070E0F079 ! E07039C0783FC07FFFC03FFF800FFE00000F000007800007800003C00001C00001C01322 ! 7E9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01C01C01C01C01C01C03C01C ! 03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03801C03801C03801C03801C ! 039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>I<03F1C01FFFC03FFFC07C0FC0 ! 7003C0E001C0E001C0E001C0E000007000007800003F00001FF00007FE0000FF00000F80 ! 0003C00001C00000E00000E06000E0E000E0E001E0F001C0F80780FFFF80FFFE00E7F800 ! 131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038E070380070000070000070 ! 000070000070000070000070000070000070000070000070000070000070000070000070 ! 0000700000700000700007FF0007FF0007FF00151C7F9B18>IIII<7F0FE07F9FE07F0FE00E07000F0700070E00078E00039C0003 ! DC0001F80001F80000F80000F00000700000F00000F80001FC0001DC00039E00038E0007 ! 0F000707000E07800E03801E03C07F07F0FF07F87F07F0151C7F9B18>II91 D<600000F00000F00000F80000780000 ! 7C00003C00003C00003E00001E00001F00000F00000F00000F800007800007C00003C000 ! 03C00003E00001E00001F00000F00000F800007800007800007C00003C00003E00001E00 ! 001E00001F00000F00000F8000078000078000030011247D9F18>II<7F ! FFC0FFFFE0FFFFE07FFFC013047E7F18>95 D<061E3E387070E0E0E0F8FC7C7C38070E78 ! 9E18>I<0FF0001FFC003FFE003C0F0018070000038000038000FF8007FF801FFF807F03 ! 80780380E00380E00380E00380F00780780F803FFFF81FFDF807F0F815147E9318>I<7E ! 0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00FC1E00F ! 80E00F00700E00700E00380E00380E00380E00380E00380E00380F00700F00700F80E00F ! C1E00FFFC00EFF80063E00151C809B18>I<01FE0007FF001FFF803E0780380300700000 ! 700000E00000E00000E00000E00000E00000E000007000007001C03801C03E03C01FFF80 ! 07FF0001FC0012147D9318>I<001F80003F80001F800003800003800003800003800003 ! 8003E3800FFB801FFF803C1F80380F80700780700380E00380E00380E00380E00380E003 ! 80E00380700780700780380F803C1F801FFFF00FFBF803E3F0151C7E9B18>I<01F00007 ! FC001FFE003E0F00380780700380700380E001C0E001C0FFFFC0FFFFC0FFFFC0E0000070 ! 00007001C03801C03E07C01FFF8007FF0001F80012147D9318>I<001F80007FC000FFE0 ! 00E1E001C0C001C00001C00001C0007FFFC0FFFFC0FFFFC001C00001C00001C00001C000 ! 01C00001C00001C00001C00001C00001C00001C00001C00001C00001C0007FFF007FFF00 ! 7FFF00131C7F9B18>I<01E1F007FFF80FFFF81E1E301C0E003807003807003807003807 ! 003807001C0E001E1E001FFC001FF80039E0003800001C00001FFE001FFFC03FFFE07801 ! F0700070E00038E00038E00038E000387800F07E03F01FFFC00FFF8001FC00151F7F9318 ! >I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3E000EFF800FFFC00F ! C1C00F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E ! 00E00E00E07FC7FCFFE7FE7FC7FC171C809B18>I<038007C007C007C003800000000000 ! 0000007FC0FFC07FC001C001C001C001C001C001C001C001C001C001C001C001C001C001 ! C0FFFFFFFFFFFF101D7C9C18>I<0038007C007C007C003800000000000000000FFC0FFC ! 0FFC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C ! 001C001C001C001C001C6038F078FFF07FE03F800E277E9C18>I<7E0000FE00007E0000 ! 0E00000E00000E00000E00000E00000E3FF00E3FF00E3FF00E07800E0F000E1E000E3C00 ! 0E78000EF0000FF8000FFC000F9C000F0E000E0F000E07000E03800E03C07FC7F8FFC7F8 ! 7FC7F8151C7F9B18>III<7E3E00FEFF807FFFC00FC1C0 ! 0F80E00F00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E0 ! 0E00E07FC7FCFFE7FE7FC7FC1714809318>I<01F0000FFE001FFF003E0F803803807001 ! C07001C0E000E0E000E0E000E0E000E0E000E0F001E07001C07803C03C07803E0F801FFF ! 000FFE0001F00013147E9318>I<7E3E00FEFF807FFFC00FC1E00F80E00F00700E00700E ! 00380E00380E00380E00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF800E ! 3E000E00000E00000E00000E00000E00000E00000E00007FC000FFE0007FC000151E8093 ! 18>I<01F38007FB801FFF803E1F80380F80700780700780E00380E00380E00380E00380 ! E00380E00380700780700780380F803C1F801FFF800FFB8003E380000380000380000380 ! 000380000380000380000380001FF0003FF8001FF0151E7E9318>II<07F7003FFF007FFF00780F00E0 ! 0700E00700E007007C00007FE0001FFC0003FE00001F00600780E00380E00380F00380F8 ! 0F00FFFF00FFFC00E7F00011147D9318>I<0180000380000380000380000380007FFFC0 ! FFFFC0FFFFC0038000038000038000038000038000038000038000038000038000038040 ! 0380E00380E00380E001C1C001FFC000FF80003E0013197F9818>I<7E07E0FE0FE07E07 ! E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E00 ! E00E01E00F03E007FFFC03FFFE01FCFC1714809318>I<7F8FF0FF8FF87F8FF01C01C00E ! 03800E03800E0380070700070700070700078F00038E00038E00038E0001DC0001DC0001 ! DC0000F80000F80000700015147F9318>II<7F8FF07F9FF07F8FF00F0700078E00039E0001DC0001F8 ! 0000F80000700000F00000F80001DC00039E00038E000707000E07807F8FF0FF8FF87F8F ! F015147F9318>I<7F8FF0FF8FF87F8FF00E01C00E03800E038007038007070007070003 ! 8700038700038E0001CE0001CE0001CC0000CC0000DC0000780000780000780000700000 ! 700000700000F00000E00079E0007BC0007F80003F00001E0000151E7F9318>I<3FFFF0 ! 7FFFF07FFFF07001E07003C0700780000F00001E00003C0000F80001F00003C000078000 ! 0F00701E00703C0070780070FFFFF0FFFFF0FFFFF014147F9318>I<0007E0001FE0007F ! E000780000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0 ! 0001E0007FC000FF8000FF80007FC00001E00000E00000E00000E00000E00000E00000E0 ! 0000E00000E00000E00000E00000E000007800007FE0001FE00007E013247E9F18>I<60 ! F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F06004 ! 24769F18>I<7C0000FF0000FFC00003C00000E00000E00000E00000E00000E00000E000 ! 00E00000E00000E00000E00000E00000F000007FC0003FE0003FE0007FC000F00000E000 ! 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00003C000FFC000 ! FF00007C000013247E9F18>I<060C1F1E3FBEFBF8F1F060C00F067C9B18>I ! E /Fu 77 123 df<001F83E000F06E3001C078780380F8780300F0300700700007007000 ! 0700700007007000070070000700700007007000FFFFFF80070070000700700007007000 ! 070070000700700007007000070070000700700007007000070070000700700007007000 ! 0700700007007000070070000700700007007000070070003FE3FF001D20809F1B>11 ! D<003F0000E0C001C0C00381E00701E00701E00700000700000700000700000700000700 ! 00FFFFE00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700 ! E00700E00700E00700E00700E00700E00700E00700E03FC3FC1620809F19>I<003FE000 ! E0E001C1E00381E00700E00700E00700E00700E00700E00700E00700E00700E0FFFFE007 ! 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E007 ! 00E00700E00700E00700E00700E00700E03FE7FC1620809F19>I<001F81F80000F04F04 ! 0001C07C06000380F80F000300F00F000700F00F00070070000007007000000700700000 ! 070070000007007000000700700000FFFFFFFF0007007007000700700700070070070007 ! 007007000700700700070070070007007007000700700700070070070007007007000700 ! 700700070070070007007007000700700700070070070007007007000700700700070070 ! 07003FE3FE3FE02320809F26>I<7038F87CFC7EFC7E743A040204020402080408041008 ! 1008201040200F0E7F9F17>34 D<00400000400003F0000C4E0010410020408060408040 ! 4040C041C0C043C0C043C0E04180E040007040007C40003FC0001FF8000FFC0003FE0000 ! 7F00004F800043800041C00041C0F040C0F040C0F040C08040C080408040418020410030 ! 42000C4C0003F00000400000400000400012257EA117>36 D<70F8FCFC74040404080810 ! 102040060E7C9F0D>39 D<0040008001000300060004000C001800180038003000300070 ! 006000600060006000E000E000E000E000E000E000E000E000E000E000E000E000600060 ! 00600060007000300030003800180018000C000400060003000100008000400A2E7BA112 ! >I<8000400020003000180008000C000600060007000300030003800180018001800180 ! 01C001C001C001C001C001C001C001C001C001C001C001C0018001800180018003800300 ! 03000700060006000C000800180030002000400080000A2E7EA112>I<70F0F8F8780808 ! 08101010202040050E7C840D>44 DI<70F8F8F87005057C840D> ! I<0000400000C0000180000180000180000300000300000300000600000600000C00000C ! 00000C0000180000180000180000300000300000600000600000600000C00000C00000C0 ! 000180000180000180000300000300000600000600000600000C00000C00000C00001800 ! 00180000300000300000300000600000600000600000C00000C00000122D7EA117>I<03 ! F0000E1C001C0E00180600380700700380700380700380700380F003C0F003C0F003C0F0 ! 03C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C070038070038070 ! 03807807803807001806001C0E000E1C0003F000121F7E9D17>I<008003800F80F38003 ! 800380038003800380038003800380038003800380038003800380038003800380038003 ! 800380038003800380038007C0FFFE0F1E7C9D17>I<03F0000C1C00100E002007004007 ! 80800780F007C0F803C0F803C0F803C02007C00007C0000780000780000F00000E00001C ! 0000380000700000600000C0000180000300000600400C00401800401000803FFF807FFF ! 80FFFF80121E7E9D17>I<03F0000C1C00100E00200F00780F80780780780780380F8000 ! 0F80000F00000F00001E00001C0000700007F000003C00000E00000F0000078000078000 ! 07C02007C0F807C0F807C0F807C0F00780400780400F00200E00183C0007F000121F7E9D ! 17>I<000600000600000E00000E00001E00002E00002E00004E00008E00008E00010E00 ! 020E00020E00040E00080E00080E00100E00200E00200E00400E00C00E00FFFFF0000E00 ! 000E00000E00000E00000E00000E00000E0000FFE0141E7F9D17>I<1803001FFE001FFC ! 001FF8001FE00010000010000010000010000010000010000011F000161C00180E001007 ! 001007800003800003800003C00003C00003C07003C0F003C0F003C0E003804003804007 ! 00200600100C0008380007E000121F7E9D17>I<007C000182000701000E03800C078018 ! 0780380300380000780000700000700000F1F000F21C00F40600F80700F80380F80380F0 ! 03C0F003C0F003C0F003C0F003C07003C07003C07003803803803807001807000C0E0006 ! 1C0001F000121F7E9D17>I<4000007FFFE07FFFC07FFFC0400080800100800100800200 ! 00040000040000080000100000100000200000200000600000600000E00000C00001C000 ! 01C00001C00001C00003C00003C00003C00003C00003C00003C00003C000018000131F7E ! 9D17>I<03F0000C0C001006003003002001806001806001806001807001807803003E03 ! 003F06001FC8000FF00003F80007FC000C7E00103F00300F806007806001C0C001C0C000 ! C0C000C0C000C0C000806001802001001002000C0C0003F000121F7E9D17>I<03F0000E ! 18001C0C00380600380700700700700380F00380F00380F003C0F003C0F003C0F003C0F0 ! 03C07007C07007C03807C0180BC00E13C003E3C000038000038000038000070030070078 ! 0600780E00700C002018001070000FC000121F7E9D17>I<70F8F8F87000000000000000 ! 00000070F8F8F87005147C930D>I<70F8F8F8700000000000000000000070F0F8F87808 ! 0808101010202040051D7C930D>I<000100000003800000038000000380000007C00000 ! 07C0000007C0000009E0000009E0000009E0000010F0000010F0000010F0000020780000 ! 2078000020780000403C0000403C0000C03E0000801E0000801E0001FFFF0001000F0001 ! 000F00020007800200078002000780040003C0040003C00C0003C01E0003E0FF801FFE1F ! 207F9F22>65 DI<000FE0100038 ! 1C3000E0027003C00170078000F00F0000701E0000701E0000303C0000303C0000107C00 ! 001078000010F8000000F8000000F8000000F8000000F8000000F8000000F8000000F800 ! 0000F8000000780000007C0000103C0000103C0000101E0000201E0000200F0000200780 ! 004003C0008000E0030000380C00000FF0001C217E9F21>IIII<000FE01000381C3000E0027003C0 ! 0170078000F00F0000701E0000701E0000303C0000303C0000107C00001078000010F800 ! 0000F8000000F8000000F8000000F8000000F8000000F8000000F8003FFEF80001F07800 ! 00F07C0000F03C0000F03C0000F01E0000F01E0000F00F0000F0078000F003C0017000E0 ! 023000380C10000FF0001F217E9F24>II ! I75 DIII<001FE0000070380001C00E000380 ! 0700070003800F0003C01E0001E03C0000F03C0000F07C0000F87C0000F878000078F800 ! 007CF800007CF800007CF800007CF800007CF800007CF800007CF800007CF800007C7800 ! 00787C0000F87C0000F83C0000F03E0001F01E0001E00F0003C0070003800380070001E0 ! 1E0000703800001FE0001E217E9F23>II82 ! D<03F0400C0CC01803C03001C06000C06000C0E000C0E00040E00040E00040F00000F800 ! 007C00007F80003FF8001FFF0007FF8000FFC0001FE00003E00001E00000F00000708000 ! 70800070800070800070C00060C000E0E000C0F80180C6030081FC0014217E9F19>I<7F ! FFFFE0780F01E0600F0060400F0020400F0020C00F0030800F0010800F0010800F001080 ! 0F0010000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 ! 0F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F000000 ! 0F0000000F0000001F800003FFFC001C1F7E9E21>IIII89 D91 ! D<080410082010201040204020804080408040B85CFC7EFC7E7C3E381C0F0E7A9F17>I< ! FFFF03030303030303030303030303030303030303030303030303030303030303030303 ! 03030303030303FFFF082D80A10D>I<081020204040808080B8FCFC7C38060E7D9F0D> ! 96 D<1FE000303000781800781C00300E00000E00000E00000E0000FE00078E001E0E00 ! 380E00780E00F00E10F00E10F00E10F01E10781E103867200F83C014147E9317>I<1C00 ! 00FC00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C7C ! 001D87001E01801E00C01C00E01C00701C00701C00781C00781C00781C00781C00781C00 ! 781C00701C00F01C00E01E00C01A0180198700107C0015207E9F19>I<01FC000706001C ! 0F00380F00380600780000700000F00000F00000F00000F00000F00000F0000070000078 ! 00003800803800801C010007060001F80011147F9314>I<0001C0000FC00001C00001C0 ! 0001C00001C00001C00001C00001C00001C00001C00001C001F1C0070DC00C03C01801C0 ! 3801C07801C07001C0F001C0F001C0F001C0F001C0F001C0F001C07001C07001C03801C0 ! 1803C00C03C0070DC001F1F815207F9F19>I<03F0000E1C001C0E003807003807007007 ! 00700380F00380F00380FFFF80F00000F00000F000007000007000003800803800801C01 ! 0007060001F80011147F9314>I<007C01C6030F070F0E060E000E000E000E000E000E00 ! 0E00FFF00E000E000E000E000E000E000E000E000E000E000E000E000E000E000E000E00 ! 0E000E007FE01020809F0E>I<0000E003E3300E3C301C1C30380E00780F00780F00780F ! 00780F00780F00380E001C1C001E380033E0002000002000003000003000003FFE001FFF ! 801FFFC03001E0600070C00030C00030C00030C000306000603000C01C038003FC00141F ! 7F9417>I<1C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001C ! 00001C00001C7C001C86001D03001E03801E03801C03801C03801C03801C03801C03801C ! 03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF014207E9F19>I< ! 38007C007C007C0038000000000000000000000000001C00FC001C001C001C001C001C00 ! 1C001C001C001C001C001C001C001C001C001C001C001C00FF80091F7F9E0C>I<00E001 ! F001F001F000E0000000000000000000000000007007F000F00070007000700070007000 ! 700070007000700070007000700070007000700070007000700070007000706070F060F0 ! C061803F000C28829E0E>I<1C0000FC00001C00001C00001C00001C00001C00001C0000 ! 1C00001C00001C00001C00001C1FE01C07801C06001C04001C08001C10001C20001C6000 ! 1CE0001DF0001E70001C38001C3C001C1C001C0E001C0F001C07001C07801C07C0FF9FF0 ! 14207E9F18>I<1C00FC001C001C001C001C001C001C001C001C001C001C001C001C001C ! 001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00FF8009 ! 207F9F0C>I<1C3E03E000FCC30C30001D039038001E01E01C001E01E01C001C01C01C00 1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C ! 01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00FF8FF8FF802114 ! 7E9326>I<1C7C00FC86001D03001E03801E03801C03801C03801C03801C03801C03801C ! 03801C03801C03801C03801C03801C03801C03801C03801C0380FF8FF014147E9319>I< ! 01F800070E001C03803801C03801C07000E07000E0F000F0F000F0F000F0F000F0F000F0 ! F000F07000E07000E03801C03801C01C0380070E0001F80014147F9317>I<1C7C00FD87 ! 001E01801E01C01C00E01C00F01C00701C00781C00781C00781C00781C00781C00781C00 ! 701C00F01C00E01E01C01E03801D87001C7C001C00001C00001C00001C00001C00001C00 ! 001C00001C0000FF8000151D7E9319>I<01F040070CC00E02C01C03C03801C07801C070 ! 01C0F001C0F001C0F001C0F001C0F001C0F001C07001C07801C03801C01C03C00C05C007 ! 09C001F1C00001C00001C00001C00001C00001C00001C00001C00001C0000FF8151D7F93 ! 18>I<1CF0FD181E3C1E3C1E181C001C001C001C001C001C001C001C001C001C001C001C ! 001C001C00FFC00E147E9312>I<0FC830386018C008C008C008E0007C003FE01FF007F8 ! 003C800E8006C006C006C004E00CD81887E00F147F9312>I<020002000200060006000E ! 000E003E00FFF80E000E000E000E000E000E000E000E000E000E000E000E040E040E040E ! 040E040708030801F00E1C7F9B12>I<1C0380FC1F801C03801C03801C03801C03801C03 ! 801C03801C03801C03801C03801C03801C03801C03801C03801C03801C07800C0780061B ! 8003E3F014147E9319>IIIII<7FFF700E600E401C40384078407000E001E001C00380078007010E011E011C033802 ! 7006700EFFFE10147F9314>I E /Fv 14 122 df<0000001FFC0000C000000003FFFFC0 ! 01C00000001FFFFFF003C00000007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F ! 9FC000000FFE000007FFC000003FF8000003FFC000007FF0000000FFC00000FFE0000000 ! 7FC00001FFC00000007FC00001FF800000003FC00003FF000000001FC00007FE00000000 ! 1FC0000FFE000000000FC0000FFC000000000FC0001FFC0000000007C0001FFC00000000 ! 07C0003FF80000000007C0003FF80000000003C0003FF80000000003C0007FF800000000 ! 03C0007FF80000000003C0007FF0000000000000007FF000000000000000FFF000000000 ! 000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000000000 ! 000000FFF000000000000000FFF000000000000000FFF000000000000000FFF000000000 ! 000000FFF000000000000000FFF000001FFFFFFF807FF000001FFFFFFF807FF000001FFF ! FFFF807FF800001FFFFFFF807FF800000001FFC0003FF800000001FFC0003FF800000001 ! FFC0003FF800000001FFC0001FFC00000001FFC0001FFC00000001FFC0000FFE00000001 ! FFC0000FFE00000001FFC00007FF00000001FFC00003FF00000001FFC00001FF80000001 ! FFC00001FFC0000001FFC00000FFE0000001FFC000007FF0000003FFC000003FFC000003 ! FFC000000FFF000007FFC0000007FFC0001FBFC0000001FFFC00FF1FC00000007FFFFFFE ! 0FC00000001FFFFFF803C000000003FFFFE000C0000000001FFE00000000413D7BBB4C> ! 71 DI<0007F800003FFE0000FFFF0001FC078003F00FC007C01FC0 ! 0F801FC01F801FC01F001FC03F000F803F0000007E0000007E0000007E000000FE020000 ! FE1FF000FE3FFC00FE603E00FE801F00FF801F80FF000FC0FF000FC0FE000FE0FE000FE0 ! FE000FE0FE000FE07E000FE07E000FE07E000FE07E000FE03E000FE03F000FC01F000FC0 ! 1F001F800F801F0007E07E0003FFFC0001FFF800003FC0001B277DA622>I<380000003E ! 0000003FFFFFF03FFFFFF03FFFFFF07FFFFFE07FFFFFC07FFFFF807FFFFF0070000E0070 ! 000E0070001C00E0003800E0007000E000E0000001C0000001C000000380000007800000 ! 070000000F0000001F0000001E0000003E0000003E0000007E0000007C0000007C000000 ! FC000000FC000000FC000000FC000001FC000001FC000001FC000001FC000001FC000001 ! FC000001FC000000F80000007000001C297CA822>I<007F800001FFF00007FFF8000FC0 ! FC001F803E003F001F007E001F807E001F807E000F80FE000FC0FE000FC0FE000FC0FE00 ! 0FE0FE000FE0FE000FE0FE000FE0FE000FE07E001FE07E001FE03F003FE01F002FE00F80 ! CFE007FF8FE001FF0FE000080FE000000FC000000FC000000FC000001F803E001F807F00 ! 1F807F003F007F003E007F007E007E00FC003E03F8001FFFE0000FFF800001FE00001B27 ! 7DA622>57 D<00000780000000000780000000000FC0000000000FC0000000000FC00000 ! 00001FE0000000001FE0000000003FF0000000003FF0000000003FF00000000077F80000 ! 000077F800000000F7FC00000000E3FC00000000E3FC00000001C1FE00000001C1FE0000 ! 0003C1FF0000000380FF0000000380FF00000007007F80000007007F8000000F007FC000 ! 000E003FC000000E003FC000001C001FE000001C001FE000003FFFFFF000003FFFFFF000 ! 003FFFFFF00000700007F80000700007F80000F00007FC0000E00003FC0001E00003FE00 ! 01C00001FE0001C00001FE0003C00001FF00FFFE003FFFFCFFFE003FFFFCFFFE003FFFFC ! 2E297EA833>65 DI<00007FE0030007FFFC07001FFFFF0F007FF00F9F00FF0001FF01FC0000FF03F8 ! 00007F07F000003F0FE000001F1FC000001F1FC000000F3F8000000F3F800000077F8000 ! 00077F800000077F00000000FF00000000FF00000000FF00000000FF00000000FF000000 ! 00FF00000000FF00000000FF00000000FF000000007F000000007F800000007F80000007 ! 3F800000073F800000071FC00000071FC000000E0FE000000E07F000001C03F800003C01 ! FC00007800FF0001F0007FF007C0001FFFFF800007FFFE0000007FF00028297CA831>I< ! FFFFFFFC0000FFFFFFFF8000FFFFFFFFE00003FC001FF80003FC0003FC0003FC0000FE00 ! 03FC00007F0003FC00003F8003FC00001FC003FC00001FC003FC00000FE003FC00000FE0 ! 03FC000007F003FC000007F003FC000007F003FC000007F003FC000007F803FC000007F8 ! 03FC000007F803FC000007F803FC000007F803FC000007F803FC000007F803FC000007F8 ! 03FC000007F803FC000007F803FC000007F003FC000007F003FC000007F003FC00000FE0 ! 03FC00000FE003FC00000FC003FC00001FC003FC00003F8003FC00007F0003FC0000FF00 ! 03FC0003FC0003FC001FF800FFFFFFFFF000FFFFFFFF8000FFFFFFFC00002D297EA834> ! III<00007FE0030000 ! 07FFFC0700001FFFFF0F00007FF00F9F0000FF0001FF0001FC0000FF0003F800007F0007 ! F000003F000FE000001F001FC000001F001FC000000F003F8000000F003F80000007007F ! 80000007007F80000007007F0000000000FF0000000000FF0000000000FF0000000000FF ! 0000000000FF0000000000FF0000000000FF0000000000FF0000000000FF0000FFFFF87F ! 0000FFFFF87F8000FFFFF87F800000FF003F800000FF003F800000FF001FC00000FF001F ! C00000FF000FE00000FF0007F00000FF0003F80000FF0001FC0000FF0000FF0001FF0000 ! 7FF007FF00001FFFFF9F000007FFFE0F0000007FF003002D297CA835>III75 DIII<0000FFC00000000FFF ! FC0000003F807F000000FE001FC00001F80007E00003F00003F00007E00001F8000FE000 ! 01FC001FC00000FE001FC00000FE003F8000007F003F8000007F007F8000007F807F0000 ! 003F807F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF0000 003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000 ! 003FC07F0000003F807F8000007F807F8000007F803F8000007F003F8000007F001FC000 ! 00FE001FC00000FE000FE00001FC0007F00003F80003F80007F00001FC000FE00000FE00 ! 1FC000003FC0FF0000000FFFFC00000000FFC000002A297CA833>II<0000FFC00000000FFFFC0000 ! 003FC0FF000000FE001FC00001FC000FE00003F00003F00007F00003F8000FE00001FC00 ! 1FC00000FE001FC00000FE003F8000007F003F8000007F007F8000007F807F8000007F80 ! 7F0000003F807F0000003F80FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0 FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0FF0000003FC0 ! 7F0000003F807F8000007F807F8000007F803F8000007F003F8000007F001FC00000FE00 ! 1FC03E00FE000FE07F81FC0007E0C1C1F80003F18063F00001F98067E00000FF803FC000 ! 003FC07F0000000FFFFC00000000FFF800C00000003C00C00000001E00C00000001E01C0 ! 0000001F83C00000001FFFC00000000FFF800000000FFF800000000FFF0000000007FF00 ! 00000003FE0000000001FC0000000000F8002A357CA833>II<00FF806003FFF0E00FFF ! F8E01F80FDE03F001FE03E0007E07C0003E07C0003E0FC0001E0FC0001E0FC0000E0FE00 ! 00E0FE0000E0FF000000FFC000007FFC00007FFFE0003FFFF8001FFFFE001FFFFF0007FF ! FF8003FFFFC000FFFFC0000FFFE000007FE000001FF000000FF0000007F0E00003F0E000 ! 03F0E00003F0E00003F0F00003E0F00003E0F80007E0FC0007C0FF000F80FFE03F80E3FF ! FE00E1FFFC00C01FF0001C297CA825>I<7FFFFFFFFF807FFFFFFFFF807FFFFFFFFF807F ! 807F807F807C007F800F8078007F80078078007F80078070007F800380F0007F8003C0F0 ! 007F8003C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F8001C0E0007F8001C000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 007F80000000007F80000000007F80000000007F80000000007F80000000007F80000000 ! 007F80000000007F80000000007F80000000007F80000000FFFFFFC00000FFFFFFC00000 ! FFFFFFC0002A287EA72F>IIII89 ! D<03FF80000FFFF0001F01FC003F80FE003F807F003F803F003F803F801F003F8000003F ! 8000003F8000003F8000003F80003FFF8001FC3F800FE03F801F803F803F003F807E003F ! 80FC003F80FC003F80FC003F80FC003F80FC005F807E00DF803F839FFC1FFE0FFC03FC03 ! FC1E1B7E9A21>97 DI<003FF00001FFFC0003F03E000FC07F001F807F003F007F003F007F007F003E00 ! 7E0000007E000000FE000000FE000000FE000000FE000000FE000000FE000000FE000000 ! 7E0000007E0000007F0000003F0003803F8003801F8007000FE00E0003F83C0001FFF800 ! 003FC000191B7E9A1E>I<00007FF000007FF000007FF0000007F0000007F0000007F000 ! 0007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F0000007F000 ! 3F87F001FFF7F007F03FF00FC00FF01F8007F03F0007F03F0007F07E0007F07E0007F07E ! 0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F0FE0007F07E ! 0007F07E0007F03F0007F03F0007F01F800FF00FC01FF007E07FFF01FFE7FF007F87FF20 ! 2A7EA925>I<003FC00001FFF00003E07C000F803E001F801F001F001F003F000F807E00 ! 0F807E000FC07E000FC0FE0007C0FE0007C0FFFFFFC0FFFFFFC0FE000000FE000000FE00 ! 00007E0000007E0000007F0000003F0001C01F0001C00F80038007C0070003F01E0000FF ! FC00003FE0001A1B7E9A1F>I<0007F8003FFC007E3E01FC7F03F87F03F07F07F07F07F0 ! 3E07F00007F00007F00007F00007F00007F00007F000FFFFC0FFFFC0FFFFC007F00007F0 ! 0007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F00007F0 ! 0007F00007F00007F00007F00007F00007F00007F0007FFF807FFF807FFF80182A7EA915 ! >I<00FF80F003FFE3F80FC1FE1C1F007C7C3F007E7C3E003E107E003F007E003F007E00 ! 3F007E003F007E003F007E003F003E003E003F007E001F007C000FC1F8000BFFE00018FF ! 80001800000038000000380000003C0000003FFFF8003FFFFF001FFFFFC00FFFFFE007FF ! FFF01FFFFFF03C0007F07C0001F8F80000F8F80000F8F80000F8F80000F87C0001F07C00 ! 01F03F0007E00FC01F8007FFFF00007FF0001E287E9A22>II<07000F801FC03FE03FE03FE01FC00F80 ! 07000000000000000000000000000000FFE0FFE0FFE00FE00FE00FE00FE00FE00FE00FE0 ! 0FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE00FE0FFFEFFFEFFFE0F2B ! 7EAA12>I108 DII<003FE00001FFFC0003F07E000FC01F801F800FC03F0007 ! E03F0007E07E0003F07E0003F07E0003F0FE0003F8FE0003F8FE0003F8FE0003F8FE0003 ! F8FE0003F8FE0003F8FE0003F87E0003F07E0003F03F0007E03F0007E01F800FC00FC01F ! 8007F07F0001FFFC00003FE0001D1B7E9A22>II114 D<03FE300FFFF03E03F07800F07000F0 ! F00070F00070F80070FE0000FFE0007FFF007FFFC03FFFE01FFFF007FFF800FFF80007FC ! 0000FCE0007CE0003CF0003CF00038F80038FC0070FF01E0E7FFC0C1FF00161B7E9A1B> ! I<00E00000E00000E00000E00001E00001E00001E00003E00003E00007E0000FE0001FFF ! E0FFFFE0FFFFE00FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0000FE0 ! 000FE0000FE0000FE0000FE0700FE0700FE0700FE0700FE0700FE0700FE07007F0E003F0 ! C001FF80007F0014267FA51A>IIIIII E /Ft 90 127 df<70F8F8F8F8F8F8F8F8F8F8F8F8F8F8F8F870000000 ! 000070F8F8F870051C779B18>33 D<4010E038F078E038E038E038E038E038E038E038E0 ! 38E038E03860300D0E7B9C18>I<030600078F00078F00078F00078F00078F00078F007F ! FFC0FFFFE0FFFFE07FFFC00F1E000F1E000F1E000F1E000F1E000F1E007FFFC0FFFFE0FF ! FFE07FFFC01E3C001E3C001E3C001E3C001E3C001E3C000C1800131C7E9B18>I<00C000 ! 01C00001C00001C00003F0000FFC003FFE007DCF0071C700E1C380E1C780E1C780E1C780 ! F1C00079C0003FC0001FE0000FF80001FC0001DE0001CF0001C70061C380F1C380F1C380 ! E1C380E1C70071C70079DE003FFE001FF80007E00001C00001C00001C00000C00011247D ! 9F18>I<3803007C07807C0780EE0F80EE0F00EE0F00EE1F00EE1E00EE1E00EE3E007C3C ! 007C3C00387C0000780000780000F80000F00001F00001E00001E00003E00003C00003C0 ! 0007C0000783800787C00F87C00F0EE00F0EE01F0EE01E0EE01E0EE03E0EE03C07C03C07 ! C018038013247E9F18>I<01C00007E0000FF0000E70001C38001C38001C38001C38001C ! 73F81CF3F81CE3F80FC1C00FC3800F83800F03801F07003F87007B8E0071CE00E1FC00E0 ! FC00E07C00E07870E0787070FE707FFFE03FC7E00F03C0151C7F9B18>I<387C7C7E3E0E ! 0E0E1C1C38F8F0C0070E789B18>I<007000F001E003C007800F001E001C003800380070 ! 00700070007000E000E000E000E000E000E000E000E0007000700070007000380038001C ! 001E000F00078003C001F000F000700C24799F18>I<6000F00078003C001E000F000780 ! 038001C001C000E000E000E000E00070007000700070007000700070007000E000E000E0 ! 00E001C001C0038007800F001E003C007800F00060000C247C9F18>I<01C00001C00001 ! C00001C00041C100F1C780FDDF807FFF001FFC0007F00007F0001FFC007FFF00FDDF80F1 ! C78041C10001C00001C00001C00001C00011147D9718>I<00600000F00000F00000F000 ! 00F00000F00000F00000F0007FFFC0FFFFE0FFFFE07FFFC000F00000F00000F00000F000 ! 00F00000F00000F00000600013147E9718>I<1C3E7E7F3F1F070E1E7CF860080C788518> ! I<7FFFC0FFFFE0FFFFE07FFFC013047E8F18>I<3078FCFC78300606778518>I<00030000 ! 0780000780000F80000F00001F00001E00001E00003E00003C00007C0000780000780000 ! F80000F00001F00001E00003E00003C00003C00007C0000780000F80000F00000F00001F ! 00001E00003E00003C00003C00007C0000780000F80000F00000F0000060000011247D9F ! 18>I<01F00007FC000FFE001F1F001C07003803807803C07001C07001C0E000E0E000E0 ! E000E0E000E0E000E0E000E0E000E0E000E0E000E0F001E07001C07001C07803C0380380 ! 1C07001F1F000FFE0007FC0001F000131C7E9B18>I<01800380038007800F803F80FF80 ! FB8043800380038003800380038003800380038003800380038003800380038003800380 ! 7FFCFFFE7FFC0F1C7B9B18>I<03F0000FFE003FFF007C0F807003C0E001C0F000E0F000 ! E06000E00000E00000E00001C00001C00003C0000780000F00001E00003C0000780000F0 ! 0001E00007C0000F80001E00E03C00E07FFFE0FFFFE07FFFE0131C7E9B18>I<001F0000 ! 3F0000770000770000E70001E70001C7000387000787000707000E07001E07003C070038 ! 0700780700F00700FFFFF8FFFFF8FFFFF800070000070000070000070000070000070000 ! 7FF0007FF0007FF0151C7F9B18>52 D<3FFF803FFF803FFF803800003800003800003800 ! 003800003800003800003800003BF8003FFE003FFF003C07803003C00001C00000E00000 ! E06000E0F000E0F000E0E001C07003C07C0F803FFF001FFC0003F000131C7E9B18>I<00 ! 7E0001FF0007FF800F83C01E03C01C03C0380180380000700000700000E1F800E7FE00FF ! FF00FE0780F803C0F001C0F000E0E000E0F000E07000E07000E07000E03801C03C03C01E ! 07800FFF0007FE0001F800131C7E9B18>II<03F8000FFE001FFF003E0F803803807001C07001C07001C07001C03803803C07 ! 801FFF0007FC000FFE001F1F003C07807001C0F001E0E000E0E000E0E000E0E000E07001 ! C07803C03E0F801FFF000FFE0003F800131C7E9B18>I<3078FCFC783000000000000000 ! 003078FCFC78300614779318>58 D<183C7E7E3C180000000000000000183C7E7E3E1E0E ! 1C3C78F060071A789318>I<0000C00003E00007E0001FC0003F8000FE0001FC0007F000 ! 0FE0003F80007F0000FC0000FC00007F00003F80000FE00007F00001FC0000FE00003F80 ! 001FC00007E00003E00000C013187E9918>I<7FFFC0FFFFE0FFFFE07FFFC00000000000 ! 000000000000007FFFC0FFFFE0FFFFE07FFFC0130C7E9318>I<600000F80000FC00007F ! 00003F80000FE00007F00001FC0000FE00003F80001FC00007E00007E0001FC0003F8000 ! FE0001FC0007F0000FE0003F80007F0000FC0000F8000060000013187E9918>I<0FF000 ! 3FFC007FFF00700F00F00380F00380600780000F00003E00007C0001F00001E00003C000 ! 03C00003C00003C00003C00003800000000000000000000000000000000003800007C000 ! 07C00007C000038000111C7D9B18>I<007C0001FE0007FF000F87801E03C03C1DC0387F ! C070FFE071E3E071C1E0E1C1E0E380E0E380E0E380E0E380E0E380E0E380E0E1C1C071C1 ! C071E3C070FF80387F003C1C001E00E00F83E007FFC001FF80007E00131C7E9B18>I<00 ! 700000F80000F80000D80000D80001DC0001DC0001DC00018C00038E00038E00038E0003 ! 8E000707000707000707000707000707000FFF800FFF800FFF800E03801C01C01C01C01C ! 01C07F07F0FF07F87F07F0151C7F9B18>I<7FFC00FFFF007FFF801C03C01C01C01C00E0 ! 1C00E01C00E01C00E01C01E01C01C01C07C01FFF801FFF001FFFC01C03C01C00E01C00F0 ! 1C00701C00701C00701C00701C00F01C00E01C03E07FFFC0FFFF807FFE00141C7F9B18> ! I<00F8E003FEE007FFE00F07E01E03E03C01E03800E07000E07000E0700000E00000E000 ! 00E00000E00000E00000E00000E00000E000007000007000E07000E03800E03C00E01E01 ! C00F07C007FF8003FE0000F800131C7E9B18>I<7FF800FFFE007FFF001C0F801C03C01C ! 03C01C01E01C00E01C00E01C00F01C00701C00701C00701C00701C00701C00701C00701C ! 00701C00F01C00E01C00E01C01E01C01C01C03C01C0F807FFF00FFFE007FF800141C7F9B ! 18>III<01F1C003FDC00FFFC01F0FC01C03C03803C03801C07001C07001C0700000E0 ! 0000E00000E00000E00000E00000E00FF0E01FF0E00FF07001C07001C07003C03803C038 ! 03C01C07C01F0FC00FFFC003FDC001F1C0141C7E9B18>I<7F07F0FF8FF87F07F01C01C0 ! 1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01FFFC01FFFC01FFFC01C01C0 ! 1C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C01C07F07F0FF8FF87F07F0 ! 151C7F9B18>I<7FFF00FFFF807FFF0001C00001C00001C00001C00001C00001C00001C0 ! 0001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C00001C0 ! 0001C00001C00001C0007FFF00FFFF807FFF00111C7D9B18>I<01FFC001FFC001FFC000 ! 0E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000 ! 0E00000E00000E00000E00000E00000E00000E00F00E00F00E00F03C007FFC003FF0000F ! C000121C7D9B18>I<7F07F0FF87F87F07F01C03C01C07801C07001C0E001C1E001C3C00 ! 1C38001C70001CF0001DF0001DF0001FB8001FB8001F1C001E1C001C0E001C0E001C0700 ! 1C07001C03801C03801C01C07F03F0FF87F87F03F0151C7F9B18>III<7E07F0FF0FF8 ! 7F07F01D81C01D81C01D81C01DC1C01CC1C01CC1C01CE1C01CE1C01CE1C01C61C01C71C0 ! 1C71C01C31C01C39C01C39C01C39C01C19C01C19C01C1DC01C0DC01C0DC01C0DC07F07C0 ! FF87C07F03C0151C7F9B18>I<0FFE003FFF807FFFC07803C07001C0F001E0E000E0E000 ! E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000 ! E0E000E0E000E0F001E07001C07C07C07FFFC03FFF800FFE00131C7E9B18>II<0FFE003FFF807FFFC07803C07001C0F001E0E000E0 ! E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0E000E0 ! E000E0E070E0E070E0F079E07039C0783FC07FFFC03FFF800FFE00000F00000780000780 ! 0003C00001C00001C013227E9B18>I<7FF800FFFE007FFF001C0F801C03801C03C01C01 ! C01C01C01C01C01C03C01C03801C0F801FFF001FFE001FFE001C0F001C07001C03801C03 ! 801C03801C03801C03801C039C1C039C1C039C7F01F8FF81F87F00F0161C7F9B18>I<03 ! F1C01FFFC03FFFC07C0FC07003C0E001C0E001C0E001C0E000007000007800003F00001F ! F00007FE0000FF00000F800003C00001C00000E00000E06000E0E000E0E001E0F001C0F8 ! 0780FFFF80FFFE00E7F800131C7E9B18>I<7FFFF8FFFFF8FFFFF8E07038E07038E07038 ! E07038007000007000007000007000007000007000007000007000007000007000007000 ! 00700000700000700000700000700000700000700007FF0007FF0007FF00151C7F9B18> ! IIII<7F0FE07F9FE07F0FE00E07000F07 ! 00070E00078E00039C0003DC0001F80001F80000F80000F00000700000F00000F80001FC ! 0001DC00039E00038E00070F000707000E07800E03801E03C07F07F0FF07F87F07F0151C ! 7F9B18>II91 ! D<600000F00000F00000F800007800007C00003C00003C00003E00001E00001F00000F00 ! 000F00000F800007800007C00003C00003C00003E00001E00001F00000F00000F8000078 ! 00007800007C00003C00003E00001E00001E00001F00000F00000F800007800007800003 ! 0011247D9F18>II<7FFFC0FFFFE0FFFFE07FFFC013047E7F18>95 ! D<061E3E387070E0E0E0F8FC7C7C38070E789E18>I<0FF0001FFC003FFE003C0F001807 ! 0000038000038000FF8007FF801FFF807F0380780380E00380E00380E00380F00780780F ! 803FFFF81FFDF807F0F815147E9318>I<7E0000FE00007E00000E00000E00000E00000E ! 00000E00000E3E000EFF800FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E ! 00380E00380E00380F00700F00700F80E00FC1E00FFFC00EFF80063E00151C809B18>I< ! 01FE0007FF001FFF803E0780380300700000700000E00000E00000E00000E00000E00000 ! E000007000007001C03801C03E03C01FFF8007FF0001FC0012147D9318>I<001F80003F ! 80001F8000038000038000038000038000038003E3800FFB801FFF803C1F80380F807007 ! 80700380E00380E00380E00380E00380E00380E00380700780700780380F803C1F801FFF ! F00FFBF803E3F0151C7E9B18>I<01F00007FC001FFE003E0F00380780700380700380E0 ! 01C0E001C0FFFFC0FFFFC0FFFFC0E000007000007001C03801C03E07C01FFF8007FF0001 ! F80012147D9318>I<001F80007FC000FFE000E1E001C0C001C00001C00001C0007FFFC0 ! FFFFC0FFFFC001C00001C00001C00001C00001C00001C00001C00001C00001C00001C000 ! 01C00001C00001C00001C0007FFF007FFF007FFF00131C7F9B18>I<01E1F007FFF80FFF ! F81E1E301C0E003807003807003807003807003807001C0E001E1E001FFC001FF80039E0 ! 003800001C00001FFE001FFFC03FFFE07801F0700070E00038E00038E00038E000387800 ! F07E03F01FFFC00FFF8001FC00151F7F9318>I<7E0000FE00007E00000E00000E00000E ! 00000E00000E00000E3E000EFF800FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E ! 00E00E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7FC171C809B ! 18>I<038007C007C007C0038000000000000000007FC0FFC07FC001C001C001C001C001 ! C001C001C001C001C001C001C001C001C001C0FFFFFFFFFFFF101D7C9C18>I<0038007C ! 007C007C003800000000000000000FFC0FFC0FFC001C001C001C001C001C001C001C001C ! 001C001C001C001C001C001C001C001C001C001C001C001C001C001C6038F078FFF07FE0 ! 3F800E277E9C18>I<7E0000FE00007E00000E00000E00000E00000E00000E00000E3FF0 ! 0E3FF00E3FF00E07800E0F000E1E000E3C000E78000EF0000FF8000FFC000F9C000F0E00 ! 0E0F000E07000E03800E03C07FC7F8FFC7F87FC7F8151C7F9B18>III<7E3E00FEFF807FFFC00FC1C00F80E00F00E00E00E00E00E00E00E00E00E0 ! 0E00E00E00E00E00E00E00E00E00E00E00E00E00E07FC7FCFFE7FE7FC7FC1714809318> ! I<01F0000FFE001FFF003E0F803803807001C07001C0E000E0E000E0E000E0E000E0E000 ! E0F001E07001C07803C03C07803E0F801FFF000FFE0001F00013147E9318>I<7E3E00FE ! FF807FFFC00FC1E00F80E00F00700E00700E00380E00380E00380E00380E00380E00380F ! 00700F00700F80E00FC1E00FFFC00EFF800E3E000E00000E00000E00000E00000E00000E ! 00000E00007FC000FFE0007FC000151E809318>I<01F38007FB801FFF803E1F80380F80 ! 700780700780E00380E00380E00380E00380E00380E00380700780700780380F803C1F80 ! 1FFF800FFB8003E380000380000380000380000380000380000380000380001FF0003FF8 ! 001FF0151E7E9318>II<07F7003FFF007FFF00780F00E00700E00700E007007C00007FE0001FFC0003 ! FE00001F00600780E00380E00380F00380F80F00FFFF00FFFC00E7F00011147D9318>I< ! 0180000380000380000380000380007FFFC0FFFFC0FFFFC0038000038000038000038000 ! 0380000380000380000380000380000380400380E00380E00380E001C1C001FFC000FF80 ! 003E0013197F9818>I<7E07E0FE0FE07E07E00E00E00E00E00E00E00E00E00E00E00E00 ! E00E00E00E00E00E00E00E00E00E00E00E00E00E01E00F03E007FFFC03FFFE01FCFC1714 ! 809318>I<7F8FF0FF8FF87F8FF01C01C00E03800E03800E038007070007070007070007 ! 8F00038E00038E00038E0001DC0001DC0001DC0000F80000F80000700015147F9318>I< ! FF07F8FF8FF8FF07F83800E03800E03800E03800E01C01C01C71C01CF9C01CF9C01CD9C0 ! 1DDDC00DDD800DDD800DDD800D8D800F8F800F8F8007070015147F9318>I<7F8FF07F9F ! F07F8FF00F0700078E00039E0001DC0001F80000F80000700000F00000F80001DC00039E ! 00038E000707000E07807F8FF0FF8FF87F8FF015147F9318>I<7F8FF0FF8FF87F8FF00E ! 01C00E03800E0380070380070700070700038700038700038E0001CE0001CE0001CC0000 ! CC0000DC0000780000780000780000700000700000700000F00000E00079E0007BC0007F ! 80003F00001E0000151E7F9318>I<3FFFF07FFFF07FFFF07001E07003C0700780000F00 ! 001E00003C0000F80001F00003C0000780000F00701E00703C0070780070FFFFF0FFFFF0 ! FFFFF014147F9318>I<0007E0001FE0007FE000780000E00000E00000E00000E00000E0 ! 0000E00000E00000E00000E00000E00000E00001E0007FC000FF8000FF80007FC00001E0 ! 0000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E0000078 ! 00007FE0001FE00007E013247E9F18>I<60F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0 ! F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0F0600424769F18>I<7C0000FF0000FFC00003C000 ! 00E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000E00000F000 ! 007FC0003FE0003FE0007FC000F00000E00000E00000E00000E00000E00000E00000E000 ! 00E00000E00000E00000E00003C000FFC000FF00007C000013247E9F18>I<060C1F1E3F ! BEFBF8F1F060C00F067C9B18>I E /Fu 77 123 df<001F83E000F06E3001C078780380 ! F8780300F03007007000070070000700700007007000070070000700700007007000FFFF ! FF8007007000070070000700700007007000070070000700700007007000070070000700 ! 700007007000070070000700700007007000070070000700700007007000070070000700 ! 70003FE3FF001D20809F1B>11 D<003F0000E0C001C0C00381E00701E00701E007000007 ! 0000070000070000070000070000FFFFE00700E00700E00700E00700E00700E00700E007 ! 00E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E00700E03F ! C3FC1620809F19>I<003FE000E0E001C1E00381E00700E00700E00700E00700E00700E0 ! 0700E00700E00700E0FFFFE00700E00700E00700E00700E00700E00700E00700E00700E0 ! 0700E00700E00700E00700E00700E00700E00700E00700E00700E00700E03FE7FC162080 ! 9F19>I<001F81F80000F04F040001C07C06000380F80F000300F00F000700F00F000700 ! 70000007007000000700700000070070000007007000000700700000FFFFFFFF00070070 ! 070007007007000700700700070070070007007007000700700700070070070007007007 ! 000700700700070070070007007007000700700700070070070007007007000700700700 ! 0700700700070070070007007007003FE3FE3FE02320809F26>I<7038F87CFC7EFC7E74 ! 3A0402040204020804080410081008201040200F0E7F9F17>34 D<00400000400003F000 ! 0C4E00104100204080604080404040C041C0C043C0C043C0E04180E040007040007C4000 ! 3FC0001FF8000FFC0003FE00007F00004F800043800041C00041C0F040C0F040C0F040C0 ! 8040C08040804041802041003042000C4C0003F00000400000400000400012257EA117> ! 36 D<70F8FCFC74040404080810102040060E7C9F0D>39 D<0040008001000300060004 ! 000C001800180038003000300070006000600060006000E000E000E000E000E000E000E0 ! 00E000E000E000E000E00060006000600060007000300030003800180018000C00040006 ! 0003000100008000400A2E7BA112>I<8000400020003000180008000C00060006000700 ! 030003000380018001800180018001C001C001C001C001C001C001C001C001C001C001C0 ! 01C001800180018001800380030003000700060006000C00080018003000200040008000 ! 0A2E7EA112>I<70F0F8F878080808101010202040050E7C840D>44 ! DI<70F8F8F87005057C840D>I<0000400000C000018000018000 ! 0180000300000300000300000600000600000C00000C00000C0000180000180000180000 ! 300000300000600000600000600000C00000C00000C00001800001800001800003000003 ! 00000600000600000600000C00000C00000C000018000018000030000030000030000060 ! 0000600000600000C00000C00000122D7EA117>I<03F0000E1C001C0E00180600380700 ! 700380700380700380700380F003C0F003C0F003C0F003C0F003C0F003C0F003C0F003C0 ! F003C0F003C0F003C0F003C0F003C07003807003807003807807803807001806001C0E00 ! 0E1C0003F000121F7E9D17>I<008003800F80F380038003800380038003800380038003 ! 80038003800380038003800380038003800380038003800380038003800380038007C0FF ! FE0F1E7C9D17>I<03F0000C1C00100E00200700400780800780F007C0F803C0F803C0F8 ! 03C02007C00007C0000780000780000F00000E00001C0000380000700000600000C00001 ! 80000300000600400C00401800401000803FFF807FFF80FFFF80121E7E9D17>I<03F000 ! 0C1C00100E00200F00780F80780780780780380F80000F80000F00000F00001E00001C00 ! 00700007F000003C00000E00000F000007800007800007C02007C0F807C0F807C0F807C0 ! F00780400780400F00200E00183C0007F000121F7E9D17>I<000600000600000E00000E ! 00001E00002E00002E00004E00008E00008E00010E00020E00020E00040E00080E00080E ! 00100E00200E00200E00400E00C00E00FFFFF0000E00000E00000E00000E00000E00000E ! 00000E0000FFE0141E7F9D17>I<1803001FFE001FFC001FF8001FE00010000010000010 ! 000010000010000010000011F000161C00180E001007001007800003800003800003C000 ! 03C00003C07003C0F003C0F003C0E00380400380400700200600100C0008380007E00012 ! 1F7E9D17>I<007C000182000701000E03800C0780180780380300380000780000700000 ! 700000F1F000F21C00F40600F80700F80380F80380F003C0F003C0F003C0F003C0F003C0 ! 7003C07003C07003803803803807001807000C0E00061C0001F000121F7E9D17>I<4000 ! 007FFFE07FFFC07FFFC04000808001008001008002000004000004000008000010000010 ! 0000200000200000600000600000E00000C00001C00001C00001C00001C00003C00003C0 ! 0003C00003C00003C00003C00003C000018000131F7E9D17>I<03F0000C0C0010060030 ! 03002001806001806001806001807001807803003E03003F06001FC8000FF00003F80007 ! FC000C7E00103F00300F806007806001C0C001C0C000C0C000C0C000C0C0008060018020 ! 01001002000C0C0003F000121F7E9D17>I<03F0000E18001C0C00380600380700700700 ! 700380F00380F00380F003C0F003C0F003C0F003C0F003C07007C07007C03807C0180BC0 ! 0E13C003E3C0000380000380000380000700300700780600780E00700C00201800107000 ! 0FC000121F7E9D17>I<70F8F8F8700000000000000000000070F8F8F87005147C930D>I< ! 70F8F8F8700000000000000000000070F0F8F878080808101010202040051D7C930D>I< ! 000100000003800000038000000380000007C0000007C0000007C0000009E0000009E000 ! 0009E0000010F0000010F0000010F00000207800002078000020780000403C0000403C00 ! 00C03E0000801E0000801E0001FFFF0001000F0001000F00020007800200078002000780 ! 040003C0040003C00C0003C01E0003E0FF801FFE1F207F9F22>65 ! DI<000FE01000381C3000E00270 ! 03C00170078000F00F0000701E0000701E0000303C0000303C0000107C00001078000010 ! F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000F8000000 ! 780000007C0000103C0000103C0000101E0000201E0000200F0000200780004003C00080 ! 00E0030000380C00000FF0001C217E9F21>IIII<000FE01000381C3000E0027003C00170078000F0 ! 0F0000701E0000701E0000303C0000303C0000107C00001078000010F8000000F8000000 ! F8000000F8000000F8000000F8000000F8000000F8003FFEF80001F0780000F07C0000F0 ! 3C0000F03C0000F01E0000F01E0000F00F0000F0078000F003C0017000E0023000380C10 ! 000FF0001F217E9F24>III75 DIII<001FE0000070380001C00E000380070007000380 ! 0F0003C01E0001E03C0000F03C0000F07C0000F87C0000F878000078F800007CF800007C ! F800007CF800007CF800007CF800007CF800007CF800007CF800007C780000787C0000F8 ! 7C0000F83C0000F03E0001F01E0001E00F0003C0070003800380070001E01E0000703800 ! 001FE0001E217E9F23>II82 D<03F0400C0CC01803C030 ! 01C06000C06000C0E000C0E00040E00040E00040F00000F800007C00007F80003FF8001F ! FF0007FF8000FFC0001FE00003E00001E00000F0000070800070800070800070800070C0 ! 0060C000E0E000C0F80180C6030081FC0014217E9F19>I<7FFFFFE0780F01E0600F0060 ! 400F0020400F0020C00F0030800F0010800F0010800F0010800F0010000F0000000F0000 ! 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000 ! 000F0000000F0000000F0000000F0000000F0000000F0000000F0000000F0000001F8000 ! 03FFFC001C1F7E9E21>IIII89 ! D91 D<080410082010201040204020804080408040 ! B85CFC7EFC7E7C3E381C0F0E7A9F17>II<081020 ! 204040808080B8FCFC7C38060E7D9F0D>96 D<1FE000303000781800781C00300E00000E ! 00000E00000E0000FE00078E001E0E00380E00780E00F00E10F00E10F00E10F01E10781E ! 103867200F83C014147E9317>I<1C0000FC00001C00001C00001C00001C00001C00001C ! 00001C00001C00001C00001C00001C7C001D87001E01801E00C01C00E01C00701C00701C ! 00781C00781C00781C00781C00781C00781C00701C00F01C00E01E00C01A018019870010 ! 7C0015207E9F19>I<01FC000706001C0F00380F00380600780000700000F00000F00000 ! F00000F00000F00000F000007000007800003800803800801C010007060001F80011147F ! 9314>I<0001C0000FC00001C00001C00001C00001C00001C00001C00001C00001C00001 ! C00001C001F1C0070DC00C03C01801C03801C07801C07001C0F001C0F001C0F001C0F001 ! C0F001C0F001C07001C07001C03801C01803C00C03C0070DC001F1F815207F9F19>I<03 ! F0000E1C001C0E00380700380700700700700380F00380F00380FFFF80F00000F00000F0 ! 00007000007000003800803800801C010007060001F80011147F9314>I<007C01C6030F ! 070F0E060E000E000E000E000E000E000E00FFF00E000E000E000E000E000E000E000E00 ! 0E000E000E000E000E000E000E000E000E000E007FE01020809F0E>I<0000E003E3300E ! 3C301C1C30380E00780F00780F00780F00780F00780F00380E001C1C001E380033E00020 ! 00002000003000003000003FFE001FFF801FFFC03001E0600070C00030C00030C00030C0 ! 00306000603000C01C038003FC00141F7F9417>I<1C0000FC00001C00001C00001C0000 ! 1C00001C00001C00001C00001C00001C00001C00001C7C001C86001D03001E03801E0380 ! 1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 ! 1C03801C0380FF8FF014207E9F19>I<38007C007C007C00380000000000000000000000 ! 00001C00FC001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C00 ! 1C001C00FF80091F7F9E0C>I<00E001F001F001F000E000000000000000000000000000 ! 7007F000F000700070007000700070007000700070007000700070007000700070007000 ! 70007000700070007000706070F060F0C061803F000C28829E0E>I<1C0000FC00001C00 ! 001C00001C00001C00001C00001C00001C00001C00001C00001C00001C1FE01C07801C06 ! 001C04001C08001C10001C20001C60001CE0001DF0001E70001C38001C3C001C1C001C0E ! 001C0F001C07001C07801C07C0FF9FF014207E9F18>I<1C00FC001C001C001C001C001C ! 001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C001C ! 001C001C001C001C001C001C00FF8009207F9F0C>I<1C3E03E000FCC30C30001D039038 ! 001E01E01C001E01E01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C00 1C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C01C01C001C ! 01C01C001C01C01C00FF8FF8FF8021147E9326>I<1C7C00FC86001D03001E03801E0380 ! 1C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C0380 ! 1C03801C0380FF8FF014147E9319>I<01F800070E001C03803801C03801C07000E07000 ! E0F000F0F000F0F000F0F000F0F000F0F000F07000E07000E03801C03801C01C0380070E ! 0001F80014147F9317>I<1C7C00FD87001E01801E01C01C00E01C00F01C00701C00781C ! 00781C00781C00781C00781C00781C00701C00F01C00E01E01C01E03801D87001C7C001C ! 00001C00001C00001C00001C00001C00001C00001C0000FF8000151D7E9319>I<01F040 ! 070CC00E02C01C03C03801C07801C07001C0F001C0F001C0F001C0F001C0F001C0F001C0 ! 7001C07801C03801C01C03C00C05C00709C001F1C00001C00001C00001C00001C00001C0 ! 0001C00001C00001C0000FF8151D7F9318>I<1CF0FD181E3C1E3C1E181C001C001C001C ! 001C001C001C001C001C001C001C001C001C001C00FFC00E147E9312>I<0FC830386018 ! C008C008C008E0007C003FE01FF007F8003C800E8006C006C006C004E00CD81887E00F14 ! 7F9312>I<020002000200060006000E000E003E00FFF80E000E000E000E000E000E000E ! 000E000E000E000E000E040E040E040E040E040708030801F00E1C7F9B12>I<1C0380FC ! 1F801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C03801C ! 03801C03801C03801C07800C0780061B8003E3F014147E9319>II ! III<7FFF700E600E401C40384078407000E001E0 ! 01C00380078007010E011E011C0338027006700EFFFE10147F9314>I ! E /Fv 14 122 df<0000001FFC0000C000000003FFFFC001C00000001FFFFFF003C00000 ! 007FFFFFFC07C0000001FFFC00FE0FC0000007FFC0001F9FC000000FFE000007FFC00000 ! 3FF8000003FFC000007FF0000000FFC00000FFE00000007FC00001FFC00000007FC00001 ! FF800000003FC00003FF000000001FC00007FE000000001FC0000FFE000000000FC0000F ! FC000000000FC0001FFC0000000007C0001FFC0000000007C0003FF80000000007C0003F ! F80000000003C0003FF80000000003C0007FF80000000003C0007FF80000000003C0007F ! F0000000000000007FF000000000000000FFF000000000000000FFF000000000000000FF ! F000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FF ! F000000000000000FFF000000000000000FFF000000000000000FFF000000000000000FF ! F000001FFFFFFF807FF000001FFFFFFF807FF000001FFFFFFF807FF800001FFFFFFF807F ! F800000001FFC0003FF800000001FFC0003FF800000001FFC0003FF800000001FFC0001F ! FC00000001FFC0001FFC00000001FFC0000FFE00000001FFC0000FFE00000001FFC00007 ! FF00000001FFC00003FF00000001FFC00001FF80000001FFC00001FFC0000001FFC00000 ! FFE0000001FFC000007FF0000003FFC000003FFC000003FFC000000FFF000007FFC00000 ! 07FFC0001FBFC0000001FFFC00FF1FC00000007FFFFFFE0FC00000001FFFFFF803C00000 ! 0003FFFFE000C0000000001FFE00000000413D7BBB4C>71 D76 ! D78 ! D82 D85 D<003FFE00000001FFFFE0000007FFFFF800000F ! E007FC00000FF001FE00001FF800FF00001FF8007F80001FF8007FC0001FF8003FC0000F ! F0003FE00007E0003FE00003C0003FE0000000003FE0000000003FE0000000003FE00000 ! 00003FE0000000FFFFE000001FFFFFE000007FF83FE00003FF803FE00007FC003FE0000F ! F0003FE0001FE0003FE0003FE0003FE0007FC0003FE0007FC0003FE000FF80003FE000FF ! 80003FE000FF80003FE000FF80003FE000FF80007FE0007FC0007FE0007FC000DFE0003F ! E0039FF0001FF80F0FFFE007FFFE0FFFE001FFFC07FFE0003FE000FFE02B267DA52F>97 ! D<00FE00000000FFFE00000000FFFE00000000FFFE00000000FFFE0000000007FE000000 ! 0003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE000000 ! 0003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE000000 ! 0003FE0000000003FE0000000003FE0000000003FE0000000003FE01FF000003FE1FFFF0 ! 0003FE7FFFFC0003FEFC03FE0003FFF000FF0003FFC0003F8003FF00001FC003FE00001F ! E003FE00000FF003FE00000FF803FE00000FF803FE000007FC03FE000007FC03FE000007 ! FC03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE000007 ! FE03FE000007FE03FE000007FE03FE000007FE03FE000007FC03FE000007FC03FE000007 ! FC03FE00000FFC03FE00000FF803FE00000FF003FE00001FF003FF00001FE003FF80003F ! C003FFC0007F8003F9E000FF0003F0FC07FE0003F07FFFF80003E01FFFE00003C003FE00 ! 002F3C7DBB36>I<000000003F800000003FFF800000003FFF800000003FFF800000003F ! FF8000000001FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 ! FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000 ! FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000FF80 ! FF80000FFFF0FF80003FFFFCFF8000FFC03FFF8001FE000FFF8003FC0003FF8007F80001 ! FF800FF00000FF801FF00000FF803FE00000FF803FE00000FF807FE00000FF807FC00000 ! FF807FC00000FF807FC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000 ! FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF807FC00000 ! FF807FC00000FF807FC00000FF803FE00000FF803FE00000FF801FE00000FF800FF00001 ! FF8007F80003FF8003F80007FF8001FE001FFFC000FF807EFFFE007FFFF8FFFE000FFFE0 ! FFFE0001FF00FFFE2F3C7DBB36>100 D<0001FF8000000FFFF000007FFFFC0000FF81FE ! 0003FE007F8007F8003F800FF0001FC00FF0000FE01FE0000FE03FE0000FF03FE00007F0 ! 7FC00007F07FC00007F87FC00007F8FFC00007F8FFC00007F8FFFFFFFFF8FFFFFFFFF8FF ! FFFFFFF8FFC0000000FFC0000000FFC0000000FFC00000007FC00000007FC00000007FC0 ! 0000003FE00000003FE00000781FE00000781FF00000780FF00000F007F80001F003FC00 ! 03E001FE000FC000FFC07F80003FFFFE00000FFFF8000000FFC00025267DA52C>I<01E0 ! 0007F8000FFC000FFC001FFE001FFE001FFE001FFE000FFC000FFC0007F80001E0000000 ! 0000000000000000000000000000000000000000000000000000000000000000FE007FFE ! 007FFE007FFE007FFE0007FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE ! 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE ! 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00FFFFF0FFFFF0FFFFF0FFFF ! F0143D7DBC1A>105 D<00FE00FFFE00FFFE00FFFE00FFFE0007FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE ! 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00FFFF ! F8FFFFF8FFFFF8FFFFF8153C7DBB1A>108 D<01FC00FF8000FFFC03FFF000FFFC0FFFF8 ! 00FFFC1E03FC00FFFC3801FE0007FC6001FF0003FCC000FF0003FDC000FF8003FD8000FF ! 8003FF0000FF8003FF0000FF8003FF0000FF8003FE0000FF8003FE0000FF8003FE0000FF ! 8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF ! 8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF ! 8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF ! 8003FE0000FF80FFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F267CA536 ! >110 D<01FC03F000FFFC0FFC00FFFC1FFF00FFFC3C3F80FFFC707F8007FCE0FFC003FC ! C0FFC003FD80FFC003FD80FFC003FF807F8003FF003F0003FF001E0003FF00000003FE00 ! 000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE0000 ! 0003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE000000 ! 03FE00000003FE00000003FE00000003FE00000003FE00000003FE000000FFFFFC0000FF ! FFFC0000FFFFFC0000FFFFFC000022267DA528>114 D ! 121 D E end %%EndProlog %%BeginSetup --- 1697,1817 ---- 7FF000000000007FF000000000007FF000000000007FF000000000007FF000000000007F F000000000007FF000000000007FF000000000007FF000000000007FF000000000007FF0 ! 00000000007FF000000000007FF000000000007FF0000003C0007FF0000003C0007FF000 ! 0003C0007FF0000003C0007FF0000003C0007FF0000007C0007FF000000780007FF00000 ! 0780007FF000000780007FF000000F80007FF000000F80007FF000000F80007FF000001F ! 80007FF000001F80007FF000003F80007FF000007F80007FF00000FF80007FF00001FF80 ! 007FF00007FF00007FF0003FFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FFFFFFFFFFFF00FF ! FFFFFFFFFF00323B7DBA3A>76 D78 D82 D85 ! D<003FFE00000001FFFFE0000007FFFFF800000FE007FC00000FF001FE00001FF800FF00 ! 001FF8007F80001FF8007FC0001FF8003FC0000FF0003FE00007E0003FE00003C0003FE0 ! 000000003FE0000000003FE0000000003FE0000000003FE0000000FFFFE000001FFFFFE0 ! 00007FF83FE00003FF803FE00007FC003FE0000FF0003FE0001FE0003FE0003FE0003FE0 ! 007FC0003FE0007FC0003FE000FF80003FE000FF80003FE000FF80003FE000FF80003FE0 ! 00FF80007FE0007FC0007FE0007FC000DFE0003FE0039FF0001FF80F0FFFE007FFFE0FFF ! E001FFFC07FFE0003FE000FFE02B267DA52F>97 D<00FE00000000FFFE00000000FFFE00 ! 000000FFFE00000000FFFE0000000007FE0000000003FE0000000003FE0000000003FE00 ! 00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00 ! 00000003FE0000000003FE0000000003FE0000000003FE0000000003FE0000000003FE00 ! 00000003FE0000000003FE01FF000003FE1FFFF00003FE7FFFFC0003FEFC03FE0003FFF0 ! 00FF0003FFC0003F8003FF00001FC003FE00001FE003FE00000FF003FE00000FF803FE00 ! 000FF803FE000007FC03FE000007FC03FE000007FC03FE000007FE03FE000007FE03FE00 ! 0007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE000007FE03FE00 ! 0007FE03FE000007FC03FE000007FC03FE000007FC03FE00000FFC03FE00000FF803FE00 ! 000FF003FE00001FF003FF00001FE003FF80003FC003FFC0007F8003F9E000FF0003F0FC ! 07FE0003F07FFFF80003E01FFFE00003C003FE00002F3C7DBB36>I<000000003F800000 ! 003FFF800000003FFF800000003FFF800000003FFF8000000001FF8000000000FF800000 ! 0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000 ! 0000FF8000000000FF8000000000FF8000000000FF8000000000FF8000000000FF800000 ! 0000FF8000000000FF8000000000FF800000FF80FF80000FFFF0FF80003FFFFCFF8000FF ! C03FFF8001FE000FFF8003FC0003FF8007F80001FF800FF00000FF801FF00000FF803FE0 ! 0000FF803FE00000FF807FE00000FF807FC00000FF807FC00000FF807FC00000FF80FFC0 ! 0000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC00000FF80FFC0 ! 0000FF80FFC00000FF80FFC00000FF807FC00000FF807FC00000FF807FC00000FF803FE0 ! 0000FF803FE00000FF801FE00000FF800FF00001FF8007F80003FF8003F80007FF8001FE ! 001FFFC000FF807EFFFE007FFFF8FFFE000FFFE0FFFE0001FF00FFFE2F3C7DBB36>100 ! D<0001FF8000000FFFF000007FFFFC0000FF81FE0003FE007F8007F8003F800FF0001FC0 ! 0FF0000FE01FE0000FE03FE0000FF03FE00007F07FC00007F07FC00007F87FC00007F8FF ! C00007F8FFC00007F8FFFFFFFFF8FFFFFFFFF8FFFFFFFFF8FFC0000000FFC0000000FFC0 ! 000000FFC00000007FC00000007FC00000007FC00000003FE00000003FE00000781FE000 ! 00781FF00000780FF00000F007F80001F003FC0003E001FE000FC000FFC07F80003FFFFE ! 00000FFFF8000000FFC00025267DA52C>I<01E00007F8000FFC000FFC001FFE001FFE00 ! 1FFE001FFE000FFC000FFC0007F80001E000000000000000000000000000000000000000 ! 00000000000000000000000000000000FE007FFE007FFE007FFE007FFE0007FE0003FE00 ! 03FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00 ! 03FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00 ! 03FE0003FE0003FE00FFFFF0FFFFF0FFFFF0FFFFF0143D7DBC1A>105 ! D<00FE00FFFE00FFFE00FFFE00FFFE0007FE0003FE0003FE0003FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE ! 0003FE0003FE0003FE0003FE0003FE0003FE0003FE0003FE00FFFFF8FFFFF8FFFFF8FFFF ! F8153C7DBB1A>108 D<01FC00FF8000FFFC03FFF000FFFC0FFFF800FFFC1E03FC00FFFC ! 3801FE0007FC6001FF0003FCC000FF0003FDC000FF8003FD8000FF8003FF0000FF8003FF ! 0000FF8003FF0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE ! 0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE ! 0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE ! 0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF8003FE0000FF80FFFF ! F83FFFFEFFFFF83FFFFEFFFFF83FFFFEFFFFF83FFFFE2F267CA536>110 ! D<01FC03F000FFFC0FFC00FFFC1FFF00FFFC3C3F80FFFC707F8007FCE0FFC003FCC0FFC0 ! 03FD80FFC003FD80FFC003FF807F8003FF003F0003FF001E0003FF00000003FE00000003 ! FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE ! 00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00000003FE00 ! 000003FE00000003FE00000003FE00000003FE00000003FE000000FFFFFC0000FFFFFC00 ! 00FFFFFC0000FFFFFC000022267DA528>114 D121 ! D E end %%EndProlog %%BeginSetup *************** *** 1818,1824 **** %%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(2.2,)c(for)i ! Ft(Readline)f(Library)g Fu(V)l(ersion)i(2.1.)1559 845 ! y(Septem)o(b)q(er)g(1997)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 --- 1823,1829 ---- %%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.0,)c(for)i ! Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.0.)1572 845 ! y(Decem)o(b)q(er)g(1998)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 *************** *** 1847,1854 **** (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(oundation.)75 ! 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 2661 y Fr(\015)g ! Fu(1989,)f(1991)g(F)l(ree)h(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 --- 1852,1859 ---- (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 *************** *** 2049,2142 **** 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 238 y(recen)o(tly-killed)d ! (text)d(from)f(the)i(kill)h(bu\013er.)75 322 y Fo(h)p ! 87 296 56 2 v 87 324 a Fn(C-y)p 87 331 V 141 322 a Fo(i)315 ! 324 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 405 ! y Fo(h)p 87 379 63 2 v 87 407 a Fn(M-y)p 87 415 V 148 ! 405 a Fo(i)315 407 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 462 y(command)d(is)568 460 y Fo(h)p 580 434 ! 56 2 v 580 462 a Fn(C-y)p 580 470 V 634 460 a Fo(i)664 ! 462 y Fu(or)719 460 y Fo(h)p 732 434 63 2 v 732 462 a ! Fn(M-y)p 732 470 V 792 460 a Fo(i)807 462 y Fu(.)75 582 ! y Fl(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 682 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 ! 737 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 792 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 847 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 902 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 973 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 1027 y(the)h(command.)23 b(If)16 b(the)g(\014rst)g(`digit')g(t)o(yp)q(ed)g ! (is)h(a)f(min)o(us)g(sign)h(\()1194 1025 y Fo(h)p 1206 ! 999 12 2 v 1206 1027 a Fn(-)p 1206 1035 V 1215 1025 a ! Fo(i)1230 1027 y Fu(\),)f(then)g(the)g(sign)h(of)f(the)g(argumen)o(t)75 ! 1082 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 1137 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 1135 ! y Fo(h)p 1805 1109 57 2 v 1805 1137 a Fn(C-d)p 1805 1145 ! V 1860 1135 a Fo(i)75 1192 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 1312 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f ! (the)h(History)137 1412 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 1467 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 1538 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 ! 1593 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 1648 y(matc)o(hing)e(the)g(string)g(t)o(yp)q(ed)h(so)e (far.)22 b(An)17 b(incremen)o(tal)g(searc)o(h)f(requires)h(only)f(as)g ! (man)o(y)g(c)o(haracters)75 1702 y(as)j(needed)h(to)f(\014nd)g(the)h ! (desired)g(history)f(en)o(try)l(.)31 b(The)1084 1700 ! y Fo(h)p 1096 1674 70 2 v 1096 1702 a Fn(ESC)p 1096 1710 ! V 1163 1700 a Fo(i)1197 1702 y Fu(c)o(haracter)18 b(is)i(used)f(to)g ! (terminate)g(an)75 1757 y(incremen)o(tal)13 b(searc)o(h.)472 ! 1755 y Fo(h)p 484 1729 49 2 v 484 1757 a Fn(C-j)p 484 ! 1765 V 530 1755 a Fo(i)556 1757 y Fu(will)g(also)f(terminate)f(the)h ! (searc)o(h.)1158 1755 y Fo(h)p 1170 1729 55 2 v 1170 ! 1757 a Fn(C-g)p 1170 1765 V 1223 1755 a Fo(i)1249 1757 ! y Fu(will)h(ab)q(ort)e(an)h(incremen)o(tal)g(searc)o(h)75 ! 1812 y(and)17 b(restore)f(the)g(original)i(line.)25 b(When)17 ! b(the)g(searc)o(h)f(is)h(terminated,)g(the)g(history)f(en)o(try)g(con)o ! (taining)75 1867 y(the)i(searc)o(h)g(string)g(b)q(ecomes)g(the)g ! (curren)o(t)g(line.)30 b(T)l(o)18 b(\014nd)g(other)g(matc)o(hing)g(en)o ! (tries)g(in)h(the)f(history)75 1922 y(list,)g(t)o(yp)q(e)270 ! 1920 y Fo(h)p 282 1894 52 2 v 282 1922 a Fn(C-s)p 282 ! 1929 V 331 1920 a Fo(i)363 1922 y Fu(or)420 1920 y Fo(h)p ! 432 1894 51 2 v 432 1922 a Fn(C-r)p 432 1929 V 481 1920 ! a Fo(i)513 1922 y Fu(as)e(appropriate.)25 b(This)18 b(will)g(searc)o(h) ! f(bac)o(kw)o(ard)f(or)h(forw)o(ard)e(in)j(the)f(history)75 ! 1976 y(for)e(the)g(next)h(en)o(try)f(matc)o(hing)h(the)f(searc)o(h)h ! (string)f(t)o(yp)q(ed)h(so)f(far.)20 b(An)o(y)c(other)f(k)o(ey)g ! (sequence)i(b)q(ound)75 2031 y(to)12 b(a)h(Readline)i(command)e(will)i ! (terminate)d(the)i(searc)o(h)e(and)h(execute)h(that)e(command.)19 ! b(F)l(or)13 b(instance,)75 2086 y(a)112 2084 y Fo(h)p ! 124 2058 76 2 v 124 2086 a Fn(RET)p 124 2094 V 197 2084 ! a Fo(i)226 2086 y Fu(will)j(terminate)e(the)g(searc)o(h)g(and)h(accept) ! f(the)g(line,)i(thereb)o(y)e(executing)h(the)g(command)f(from)75 ! 2141 y(the)h(history)g(list.)137 2212 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 2267 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 ! 2322 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75 ! 2460 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137 2560 ! y Fu(Although)18 b(the)g(Readline)i(library)e(comes)g(with)f(a)h(set)f ! (of)g Ft(emacs)p Fu(-lik)o(e)h(k)o(eybindings)i(installed)f(b)o(y)75 ! 2615 y(default,)13 b(it)g(is)g(p)q(ossible)h(to)e(use)g(a)g(di\013eren) ! o(t)h(set)f(of)g(k)o(eybindings.)21 b(An)o(y)12 b(user)h(can)f ! (customize)h(programs)75 2670 y(that)g(use)i(Readline)h(b)o(y)e ! (putting)g(commands)g(in)h(an)f Fm(inputrc)j Fu(\014le)e(in)g(his)g ! (home)f(directory)l(.)20 b(The)14 b(name)p eop %%Page: 4 6 4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75 --- 2054,2151 ---- 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 238 y(recen)o(tly-killed)d ! (text)d(from)f(the)i(kill)h(bu\013er.)75 316 y Fo(h)p ! 87 290 56 2 v 87 318 a Fn(C-y)p 87 326 V 141 316 a Fo(i)315 ! 318 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 396 ! y Fo(h)p 87 370 63 2 v 87 398 a Fn(M-y)p 87 406 V 148 ! 396 a Fo(i)315 398 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 453 y(command)d(is)568 451 y Fo(h)p 580 425 ! 56 2 v 580 453 a Fn(C-y)p 580 461 V 634 451 a Fo(i)664 ! 453 y Fu(or)719 451 y Fo(h)p 732 425 63 2 v 732 453 a ! Fn(M-y)p 732 461 V 792 451 a Fo(i)807 453 y Fu(.)75 566 ! y Fl(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 662 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 ! 717 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 772 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 827 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 881 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 949 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 1004 y(the)h(command.)23 b(If)16 b(the)g(\014rst)g(`digit')g(t)o(yp)q(ed)g ! (is)h(a)f(min)o(us)g(sign)h(\()1194 1002 y Fo(h)p 1206 ! 976 12 2 v 1206 1004 a Fn(-)p 1206 1011 V 1215 1002 a ! Fo(i)1230 1004 y Fu(\),)f(then)g(the)g(sign)h(of)f(the)g(argumen)o(t)75 ! 1059 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 1113 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 1111 ! y Fo(h)p 1805 1085 57 2 v 1805 1113 a Fn(C-d)p 1805 1121 ! V 1860 1111 a Fo(i)75 1168 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 1281 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f ! (the)h(History)137 1377 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 1432 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 1500 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 ! 1555 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 1609 y(matc)o(hing)e(the)g(string)g(t)o(yp)q(ed)h(so)e (far.)22 b(An)17 b(incremen)o(tal)g(searc)o(h)f(requires)h(only)f(as)g ! (man)o(y)g(c)o(haracters)75 1664 y(as)k(needed)j(to)d(\014nd)h(the)g ! (desired)h(history)f(en)o(try)l(.)37 b(The)21 b(c)o(haracters)f(presen) ! o(t)h(in)g(the)g(v)m(alue)h(of)f(the)75 1719 y Fm(isearc)o ! (h-terminators)e Fu(v)m(ariable)f(are)f(used)h(to)e(terminate)h(an)g ! (incremen)o(tal)i(searc)o(h.)25 b(If)17 b(that)g(v)m(ariable)75 ! 1774 y(has)f(not)f(b)q(een)i(assigned)f(a)g(v)m(alue,)g(the)774 ! 1772 y Fo(h)p 786 1746 70 2 v 786 1774 a Fn(ESC)p 786 ! 1781 V 853 1772 a Fo(i)884 1774 y Fu(and)973 1772 y Fo(h)p ! 985 1746 56 2 v 985 1774 a Fn(C-J)p 985 1781 V 1038 1772 ! a Fo(i)1069 1774 y Fu(c)o(haracters)f(will)i(terminate)f(an)g(incremen) ! o(tal)75 1828 y(searc)o(h.)230 1826 y Fo(h)p 242 1800 ! 55 2 v 242 1828 a Fn(C-g)p 242 1836 V 295 1826 a Fo(i)323 ! 1828 y Fu(will)f(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f(and)h ! (restore)f(the)g(original)h(line.)21 b(When)14 b(the)f(searc)o(h)75 ! 1883 y(is)k(terminated,)g(the)f(history)h(en)o(try)f(con)o(taining)h ! (the)g(searc)o(h)f(string)h(b)q(ecomes)g(the)f(curren)o(t)h(line.)25 ! b(T)l(o)75 1938 y(\014nd)18 b(other)f(matc)o(hing)h(en)o(tries)g(in)g ! (the)g(history)f(list,)i(t)o(yp)q(e)1125 1936 y Fo(h)p ! 1137 1910 52 2 v 1137 1938 a Fn(C-s)p 1137 1946 V 1186 ! 1936 a Fo(i)1219 1938 y Fu(or)1277 1936 y Fo(h)p 1289 ! 1910 51 2 v 1289 1938 a Fn(C-r)p 1289 1946 V 1338 1936 ! a Fo(i)1370 1938 y Fu(as)e(appropriate.)27 b(This)18 ! b(will)75 1993 y(searc)o(h)h(bac)o(kw)o(ard)f(or)h(forw)o(ard)e(in)j ! (the)f(history)h(for)e(the)h(next)g(en)o(try)g(matc)o(hing)g(the)g ! (searc)o(h)g(string)75 2048 y(t)o(yp)q(ed)g(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 2102 y(searc)o(h)h(and)h(execute) ! g(that)f(command.)35 b(F)l(or)20 b(instance,)i(a)1151 ! 2100 y Fo(h)p 1163 2074 76 2 v 1163 2102 a Fn(RET)p 1163 ! 2110 V 1236 2100 a Fo(i)1271 2102 y Fu(will)g(terminate)f(the)f(searc)o ! (h)h(and)75 2157 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 2225 ! 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 ! 2280 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 2334 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f ! (line.)75 2464 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137 ! 2560 y Fu(Although)18 b(the)g(Readline)i(library)e(comes)g(with)f(a)h ! (set)f(of)g Ft(emacs)p Fu(-lik)o(e)h(k)o(eybindings)i(installed)f(b)o ! (y)75 2615 y(default,)13 b(it)g(is)g(p)q(ossible)h(to)e(use)g(a)g ! (di\013eren)o(t)h(set)f(of)g(k)o(eybindings.)21 b(An)o(y)12 ! b(user)h(can)f(customize)h(programs)75 2670 y(that)g(use)i(Readline)h ! (b)o(y)e(putting)g(commands)g(in)h(an)f Fm(inputrc)j ! Fu(\014le)e(in)g(his)g(home)f(directory)l(.)20 b(The)14 ! b(name)p eop %%Page: 4 6 4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75 *************** *** 2157,2161 **** (ts.)35 b(Lines)22 b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75 822 y(conditional)c(constructs)f(\(see)g(Section)g ! (1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h(7\).)k(Other)c (lines)75 877 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f (bindings.)75 963 y(V)l(ariable)h(Settings)315 1018 y(Y)l(ou)k(can)h --- 2166,2170 ---- (ts.)35 b(Lines)22 b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75 822 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 877 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f (bindings.)75 963 y(V)l(ariable)h(Settings)315 1018 y(Y)l(ou)k(can)h *************** *** 2211,2444 **** 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 348 y(to)h Ft(self-insert)p ! Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 446 ! y Ft(editing-mode)555 501 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 556 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 611 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 665 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 764 ! y Ft(enable-keypad)555 819 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 873 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 928 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315 ! 1027 y Ft(expand-tilde)555 1082 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 1136 y(w)o(ord)f(completion.)21 ! b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 1235 ! y Ft(horizontal-scroll-mode)555 1290 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 1344 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 ! 1399 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 1454 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 1509 y(v)m(ariable)j(is)e(set)g(to)g(`)p ! Ft(off)p Fu('.)315 1607 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 1662 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 1717 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 1772 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 1827 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 1881 y(also)15 b(a\013ects)g(the)g(default)h(k)o ! (eymap.)315 1980 y Ft(mark-directories)555 2035 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 2089 y(The)15 b(default)h(is)g(`)p ! Ft(on)p Fu('.)315 2188 y Ft(mark-modified-lines)555 2243 ! 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 ! 2298 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 ! 2352 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p Fu(')e(b)o(y)h(default.) ! 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(output-meta)555 238 y Fu(If)h(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 293 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 ! 348 y(default)16 b(is)f(`)p Ft(off)p Fu('.)315 435 y ! Ft(print-completions-horizont)o(ally)555 489 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 544 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 ! 599 y(The)15 b(default)h(is)g(`)p Ft(off)p Fu('.)315 ! 686 y Ft(show-all-if-ambiguous)555 741 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 796 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 ! 850 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 905 y(The)c(default)h(v)m ! (alue)h(is)e(`)p Ft(off)p Fu('.)315 992 y Ft(visible-stats)555 ! 1047 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 ! 1102 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 1189 y(Key)h(Bindings)315 ! 1244 y(The)e(syn)o(tax)f(for)g(con)o(trolling)i(k)o(ey)f(bindings)i(in) e(the)g(init)h(\014le)g(is)f(simple.)21 b(First)14 b(y)o(ou)f(ha)o(v)o ! (e)315 1298 y(to)19 b(kno)o(w)f(the)i(name)f(of)g(the)g(command)g(that) f(y)o(ou)h(w)o(an)o(t)f(to)h(c)o(hange.)32 b(The)19 b(follo)o(wing)315 ! 1353 y(sections)f(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 ! 1408 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q ! (es.)315 1479 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 ! 1534 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)315 1588 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 1643 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 1730 y Fm(k)o(eyname)s ! Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555 1785 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 1853 y Ft(Control-u:)22 ! b(universal-argument)675 1905 y(Meta-Rubout:)g(backward-kill-word)675 ! 1957 y(Control-o:)g(">)i(output")555 2028 y Fu(In)19 ! b(the)f(ab)q(o)o(v)o(e)g(example,)1023 2026 y Fo(h)p ! 1035 2000 57 2 v 1035 2028 a Fn(C-u)p 1035 2035 V 1090 ! 2026 a Fo(i)1123 2028 y Fu(is)h(b)q(ound)g(to)f(the)g(function)h ! Ft(universal-)555 2082 y(argument)p Fu(,)g(and)872 2080 ! y Fo(h)p 884 2054 55 2 v 884 2082 a Fn(C-o)p 884 2090 ! V 937 2080 a Fo(i)971 2082 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro) ! g(expressed)h(on)g(the)555 2137 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 2224 y Ft(")p Fm(k)o(eyseq)q Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555 ! 2279 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 ! 2334 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 2389 y(double)c(quotes.)19 b(Some)13 b(GNU)g(Emacs)f(st)o(yle)h(k)o(ey)g ! (escap)q(es)g(can)g(b)q(e)h(used,)f(as)555 2443 y(in)18 b(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 2498 y(recognized.)675 ! 2566 y Ft("\\C-u":)23 b(universal-argument)675 2618 y("\\C-x\\C-r":)f ! (re-read-init-file)675 2670 y("\\e[11~":)h("Function)f(Key)i(1")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)555 183 y(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023 ! 181 y Fo(h)p 1035 155 57 2 v 1035 183 a Fn(C-u)p 1035 ! 191 V 1090 181 a Fo(i)1123 183 y Fu(is)h(b)q(ound)g(to)f(the)g ! (function)h Ft(universal-)555 238 y(argument)9 b Fu(\(just)h(as)h(it)g ! (w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`)1463 236 ! y Fo(h)p 1475 210 56 2 v 1475 238 a Fn(C-x)p 1475 246 ! V 1529 236 a Fo(i)k(h)p 1571 210 51 2 v 1571 238 a Fn(C-r)p ! 1571 246 V 1620 236 a Fo(i)1635 238 y Fu(')10 b(is)h(b)q(ound)h(to)555 ! 293 y(the)k(function)i Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 ! 291 y Fo(h)p 1363 265 70 2 v 1363 293 a Fn(ESC)p 1363 ! 301 V 1430 291 a Fo(i)f(h)p 1472 265 10 2 v 1472 293 ! a Fn([)p 1472 301 V 1480 291 a Fo(i)g(h)p 1522 265 18 ! 2 v 1522 293 a Fn(1)p 1522 301 V 1538 291 a Fo(i)g(h)p ! 1580 265 V 1580 293 a Fn(1)p 1580 301 V 1595 291 a Fo(i)g(h)p ! 1637 265 24 2 v 1637 293 a Ft(~)p 1637 301 V 1659 291 ! a Fo(i)1674 293 y Fu(')h(is)h(b)q(ound)555 348 y(to)e(insert)g(the)g ! (text)g(`)p Ft(Function)f(Key)h(1)p Fu('.)315 427 y(The)e(follo)o(wing) ! h(GNU)f(Emacs)f(st)o(yle)h(escap)q(e)h(sequences)g(are)f(a)o(v)m ! (ailable)i(when)e(sp)q(ecifying)315 482 y(k)o(ey)i(sequences:)315 ! 561 y Fk(\\C-)168 b Fu(con)o(trol)15 b(pre\014x)315 640 ! y Fk(\\M-)168 b Fu(meta)15 b(pre\014x)315 719 y Fk(\\e)192 ! b Fu(an)15 b(escap)q(e)h(c)o(haracter)315 798 y Fk(\\\\)192 ! b Fu(bac)o(kslash)315 877 y Fk(\\)p Ft(")555 875 y Fo(h)p ! 567 849 V 567 877 a Ft(")p 567 885 V 589 875 a Fo(i)315 ! 956 y Fk(\\')555 954 y Fo(h)p 567 928 10 2 v 567 956 ! a Fn(')p 567 964 V 575 954 a Fo(i)315 1035 y Fu(In)13 ! b(addition)g(to)f(the)g(GNU)h(Emacs)f(st)o(yle)g(escap)q(e)h ! (sequences,)h(a)e(second)h(set)f(of)g(bac)o(kslash)315 ! 1090 y(escap)q(es)k(is)g(a)o(v)m(ailable:)315 1169 y ! Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 1248 y Ft(\\b)192 ! b Fu(bac)o(kspace)315 1327 y Ft(\\d)g Fu(delete)315 1407 ! y Ft(\\f)g Fu(form)14 b(feed)315 1486 y Ft(\\n)192 b ! Fu(newline)315 1565 y Ft(\\r)g Fu(carriage)15 b(return)315 ! 1644 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 1723 ! y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 1802 y Ft(\\)p Fm(nnn)141 b Fu(the)12 b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)g (is)f(the)g(o)q(ctal)g(v)m(alue)h Fm(nnn)g Fu(\(one)f(to)f(three)555 ! 1857 y(digits\))315 1936 y Ft(\\x)p Fm(nnn)117 b Fu(the)14 b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)f(is)g(the)g(hexadecimal)i ! (v)m(alue)f Fm(nnn)f Fu(\(one)555 1991 y(to)h(three)g(digits\))315 ! 2070 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 2125 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 2180 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 2234 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 2289 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 ! 2353 y Ft("\\C-x\\\\":)23 b("\\\\")75 2464 y Fl(1.3.2)30 ! b(Conditional)20 b(Init)g(Constructs)137 2560 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 2615 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 2670 y(the)e(result)h ! (of)f(tests.)k(There)c(are)g(four)g(parser)g(directiv)o(es)h(used.)p ! eop %%Page: 8 10 8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)75 ! 183 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 238 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 ! 293 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 373 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 ! 427 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 ! 482 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 537 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 592 y(in)k Ft(emacs)f Fu(mo)q(de.)315 ! 671 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 ! 726 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 781 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 836 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 891 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 ! 945 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 1025 y ! Ft(application)555 1080 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 ! 1135 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 1189 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 ! 1244 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 1299 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 1354 y(previous)j(w)o(ord)e(in)i(Bash:)675 ! 1418 y Ft($if)23 b(Bash)675 1470 y(#)h(Quote)f(the)g(current)g(or)h ! (previous)f(word)675 1522 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 ! 1574 y($endif)75 1654 y($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h (in)g(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f ! Fu(command.)75 1733 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 1813 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 1868 ! y(bindings)j(from)e(that)f(\014le.)435 1932 y Ft($include)23 ! b(/etc/inputrc)75 2044 y Fl(1.3.3)30 b(Sample)20 b(Init)h(File)137 ! 2140 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 2195 y(and)f(conditional)i(syn)o(tax.)p eop %%Page: 9 11 9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 --- 2220,2465 ---- 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 348 y(to)h Ft(self-insert)p ! Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 432 ! y Ft(editing-mode)555 487 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 542 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 597 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 652 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 736 ! y Ft(enable-keypad)555 791 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 846 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 901 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315 ! 986 y Ft(expand-tilde)555 1040 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 1095 y(w)o(ord)f(completion.)21 ! b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 1180 ! y Ft(horizontal-scroll-mode)555 1235 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 1290 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 ! 1344 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 1399 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 1454 y(v)m(ariable)j(is)e(set)g(to)g(`)p ! Ft(off)p Fu('.)315 1539 y Ft(input-meta)555 1594 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 1648 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 ! 1703 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 1758 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for) ! f(this)i(v)m(ariable.)315 1843 y Ft(isearch-terminators)555 ! 1898 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 1952 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 ! 2007 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 2062 ! y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o(haracters) ! 1312 2060 y Fo(h)p 1324 2034 70 2 v 1324 2062 a Fn(ESC)p ! 1324 2070 V 1391 2060 a Fo(i)1419 2062 y Fu(and)1505 ! 2060 y Fo(h)p 1518 2034 56 2 v 1518 2062 a Fn(C-J)p 1518 ! 2070 V 1571 2060 a Fo(i)1599 2062 y Fu(will)i(terminate)555 ! 2117 y(an)g(incremen)o(tal)h(searc)o(h.)315 2202 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 2256 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 2311 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 2366 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 2421 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 2476 y(also)15 b(a\013ects)g(the)g(default)h(k)o ! (eymap.)315 2560 y Ft(mark-directories)555 2615 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 2670 y(The)15 b(default)h(is)g(`)p ! Ft(on)p Fu('.)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(mark-modified-lines)555 238 y Fu(This)i(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 293 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 348 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p ! Fu(')e(b)o(y)h(default.)315 425 y Ft(output-meta)555 ! 480 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 ! 535 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 590 y(default)16 ! b(is)f(`)p Ft(off)p Fu('.)315 667 y Ft(print-completions-horizont)o ! (ally)555 722 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 ! 777 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 832 y(The)15 b(default)h(is)g(`)p ! Ft(off)p Fu('.)315 909 y Ft(show-all-if-ambiguous)555 ! 964 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 1019 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 1074 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 1128 y(The)c(default)h(v)m(alue)h(is)e(`)p ! Ft(off)p Fu('.)315 1206 y Ft(visible-stats)555 1261 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 ! 1316 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 1393 y(Key)h(Bindings)315 ! 1448 y(The)e(syn)o(tax)f(for)g(con)o(trolling)i(k)o(ey)f(bindings)i(in) e(the)g(init)h(\014le)g(is)f(simple.)21 b(First)14 b(y)o(ou)f(ha)o(v)o ! (e)315 1503 y(to)19 b(kno)o(w)f(the)i(name)f(of)g(the)g(command)g(that) f(y)o(ou)h(w)o(an)o(t)f(to)h(c)o(hange.)32 b(The)19 b(follo)o(wing)315 ! 1558 y(sections)f(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 ! 1612 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g(command)g(do)q ! (es.)315 1679 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 ! 1733 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)315 1788 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 1843 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 1921 y Fm(k)o(eyname)s ! Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555 1976 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 2039 y Ft(Control-u:)22 ! b(universal-argument)675 2091 y(Meta-Rubout:)g(backward-kill-word)675 ! 2143 y(Control-o:)g(">)i(output")555 2209 y Fu(In)19 ! b(the)f(ab)q(o)o(v)o(e)g(example,)1023 2207 y Fo(h)p ! 1035 2181 57 2 v 1035 2209 a Fn(C-u)p 1035 2216 V 1090 ! 2207 a Fo(i)1123 2209 y Fu(is)h(b)q(ound)g(to)f(the)g(function)h ! Ft(universal-)555 2264 y(argument)p Fu(,)g(and)872 2262 ! y Fo(h)p 884 2236 55 2 v 884 2264 a Fn(C-o)p 884 2271 ! V 937 2262 a Fo(i)971 2264 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro) ! g(expressed)h(on)g(the)555 2318 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 2396 y Ft(")p Fm(k)o(eyseq)q Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555 ! 2451 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 ! 2506 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 2560 y(double)c(quotes.)19 b(Some)13 b(GNU)g(Emacs)f(st)o(yle)h(k)o(ey)g ! (escap)q(es)g(can)g(b)q(e)h(used,)f(as)555 2615 y(in)18 b(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 2670 y(recognized.)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)675 183 y Ft("\\C-u":)23 b(universal-argument)675 ! 235 y("\\C-x\\C-r":)f(re-read-init-file)675 287 y("\\e[11~":)h ! ("Function)f(Key)i(1")555 358 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g ! (example,)1023 356 y Fo(h)p 1035 330 57 2 v 1035 358 ! a Fn(C-u)p 1035 365 V 1090 356 a Fo(i)1123 358 y Fu(is)h(b)q(ound)g(to) ! f(the)g(function)h Ft(universal-)555 412 y(argument)9 ! b Fu(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`) ! 1463 410 y Fo(h)p 1475 384 56 2 v 1475 412 a Fn(C-x)p ! 1475 420 V 1529 410 a Fo(i)k(h)p 1571 384 51 2 v 1571 ! 412 a Fn(C-r)p 1571 420 V 1620 410 a Fo(i)1635 412 y ! Fu(')10 b(is)h(b)q(ound)h(to)555 467 y(the)k(function)i ! Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 465 y Fo(h)p ! 1363 439 70 2 v 1363 467 a Fn(ESC)p 1363 475 V 1430 465 ! a Fo(i)f(h)p 1472 439 10 2 v 1472 467 a Fn([)p 1472 475 ! V 1480 465 a Fo(i)g(h)p 1522 439 18 2 v 1522 467 a Fn(1)p ! 1522 475 V 1538 465 a Fo(i)g(h)p 1580 439 V 1580 467 ! a Fn(1)p 1580 475 V 1595 465 a Fo(i)g(h)p 1637 439 24 ! 2 v 1637 467 a Ft(~)p 1637 475 V 1659 465 a Fo(i)1674 ! 467 y Fu(')h(is)h(b)q(ound)555 522 y(to)e(insert)g(the)g(text)g(`)p ! Ft(Function)f(Key)h(1)p Fu('.)315 608 y(The)e(follo)o(wing)h(GNU)f ! (Emacs)f(st)o(yle)h(escap)q(e)h(sequences)g(are)f(a)o(v)m(ailable)i ! (when)e(sp)q(ecifying)315 663 y(k)o(ey)i(sequences:)315 ! 749 y Fk(\\C-)168 b Fu(con)o(trol)15 b(pre\014x)315 835 ! y Fk(\\M-)168 b Fu(meta)15 b(pre\014x)315 922 y Fk(\\e)192 ! b Fu(an)15 b(escap)q(e)h(c)o(haracter)315 1008 y Fk(\\\\)192 ! b Fu(bac)o(kslash)315 1094 y Fk(\\)p Ft(")555 1092 y ! Fo(h)p 567 1066 V 567 1094 a Ft(")p 567 1102 V 589 1092 ! a Fo(i)315 1180 y Fk(\\')555 1178 y Fo(h)p 567 1152 10 ! 2 v 567 1180 a Fn(')p 567 1188 V 575 1178 a Fo(i)315 ! 1267 y Fu(In)13 b(addition)g(to)f(the)g(GNU)h(Emacs)f(st)o(yle)g(escap) ! q(e)h(sequences,)h(a)e(second)h(set)f(of)g(bac)o(kslash)315 ! 1321 y(escap)q(es)k(is)g(a)o(v)m(ailable:)315 1408 y ! Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 1494 y Ft(\\b)192 ! b Fu(bac)o(kspace)315 1580 y Ft(\\d)g Fu(delete)315 1666 ! y Ft(\\f)g Fu(form)14 b(feed)315 1752 y Ft(\\n)192 b ! Fu(newline)315 1839 y Ft(\\r)g Fu(carriage)15 b(return)315 ! 1925 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 2011 ! y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 2097 y Ft(\\)p Fm(nnn)141 b Fu(the)12 b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)g (is)f(the)g(o)q(ctal)g(v)m(alue)h Fm(nnn)g Fu(\(one)f(to)f(three)555 ! 2152 y(digits\))315 2238 y Ft(\\x)p Fm(nnn)117 b Fu(the)14 b(c)o(haracter)f(whose)h(ASCI)q(I)h(co)q(de)f(is)g(the)g(hexadecimal)i ! (v)m(alue)f Fm(nnn)f Fu(\(one)555 2293 y(to)h(three)g(digits\))315 ! 2379 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 2434 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 2489 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 2544 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 2599 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 ! 2666 y Ft("\\C-x\\\\":)23 b("\\\\")p eop %%Page: 8 10 8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)75 ! 183 y Fl(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 ! 280 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 ! 334 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 389 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser)g ! (directiv)o(es)h(used.)75 469 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 524 ! 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 578 ! 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 658 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 ! 713 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 ! 768 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 823 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 877 y(in)k Ft(emacs)f Fu(mo)q(de.)315 ! 957 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 ! 1012 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 1067 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 1121 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 1176 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 ! 1231 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 1311 y ! Ft(application)555 1365 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 ! 1420 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 1475 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 ! 1530 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 1585 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 1639 y(previous)j(w)o(ord)e(in)i(Bash:)675 ! 1704 y Ft($if)23 b(Bash)675 1756 y(#)h(Quote)f(the)g(current)g(or)h ! (previous)f(word)675 1808 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 ! 1859 y($endif)75 1939 y($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h (in)g(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f ! Fu(command.)75 2019 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 2099 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 2153 ! y(bindings)j(from)e(that)f(\014le.)435 2218 y Ft($include)23 ! b(/etc/inputrc)75 2330 y Fl(1.3.3)30 b(Sample)20 b(Init)h(File)137 ! 2426 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 2481 y(and)f(conditional)i(syn)o(tax.)p eop %%Page: 9 11 9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 *************** *** 2609,2858 **** (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(quoted-insert)c(\(C-q,)i(C-v\))315 432 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 487 ! y(sequences)f(lik)o(e)605 485 y Fo(h)p 617 459 56 2 v ! 617 487 a Fn(C-q)p 617 495 V 671 485 a Fo(i)685 487 y ! Fu(,)f(for)g(example.)75 572 y Ft(tab-insert)f(\(M-TAB\))315 ! 627 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 712 y Ft(self-insert)f ! (\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 766 y Fu(Insert)g(y)o(ourself.)75 ! 851 y Ft(transpose-chars)e(\(C-t\))315 906 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 961 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 1016 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 1070 y(don't)k(w)o(ork.) ! 75 1155 y Ft(transpose-words)e(\(M-t\))315 1210 y Fu(Drag)j(the)h(w)o (ord)f(b)q(ehind)k(the)d(cursor)f(past)h(the)g(w)o(ord)g(in)g(fron)o(t) ! g(of)f(the)h(cursor)g(mo)o(ving)315 1265 y(the)e(cursor)g(o)o(v)o(er)g ! (that)f(w)o(ord)g(as)h(w)o(ell.)75 1350 y Ft(upcase-word)f(\(M-u\))315 ! 1404 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 ! 1459 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 1544 y Ft(downcase-word)d(\(M-l\))315 ! 1599 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 1654 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 1738 y Ft(capitalize-word)e(\(M-c\))315 ! 1793 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 ! 1848 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 1970 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5 ! b(anking)75 2087 y Ft(kill-line)14 b(\(C-k\))315 2142 y Fu(Kill)j(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q ! (osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 2226 ! y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 2281 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g(line.) ! 75 2366 y Ft(unix-line-discard)e(\(C-u\))315 2421 y Fu(Kill)18 b(bac)o(kw)o(ard)d(from)g(the)h(cursor)g(to)f(the)h(b)q(eginning)i(of)e ! (the)g(curren)o(t)g(line.)24 b(The)16 b(killed)315 2476 ! y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h(kill-ring.)75 ! 2560 y Ft(kill-whole-line)d(\(\))315 2615 y Fu(Kill)h(all)e(c)o ! (haracters)f(on)g(the)g(curren)o(t)h(line,)h(no)f(matter)e(where)h(the) ! h(cursor)f(is.)19 b(By)12 b(default,)315 2670 y(this)k(is)f(un)o(b)q ! (ound.)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(kill-word)d(\(M-d\))315 238 y Fu(Kill)i(from)d(the)i(cursor)e ! (to)h(the)g(end)g(of)g(the)g(curren)o(t)g(w)o(ord,)f(or)h(if)g(b)q(et)o ! (w)o(een)g(w)o(ords,)g(to)f(the)315 293 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 ! Ft(forward-word)p Fu(.)75 372 y Ft(backward-kill-word)e(\(M-DEL\))315 ! 426 y Fu(Kill)18 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor.)20 b(W)l(ord)c(b)q(oundaries)g(are)f(the)h(same)f(as)g Ft(backward-)315 ! 481 y(word)p Fu(.)75 560 y Ft(unix-word-rubout)e(\(C-w\))315 ! 615 y Fu(Kill)20 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor,)h(using)g (white)g(space)g(as)f(a)g(w)o(ord)g(b)q(oundary)l(.)28 ! b(The)315 670 y(killed)17 b(text)e(is)h(sa)o(v)o(ed)f(on)g(the)g ! (kill-ring.)75 749 y Ft(delete-horizontal-space)d(\(\))315 ! 803 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 882 ! y Ft(kill-region)e(\(\))315 937 y Fu(Kill)h(the)e(text)f(b)q(et)o(w)o (een)h(the)g(p)q(oin)o(t)g(and)g(the)g Fm(mark)i Fu(\(sa)o(v)o(ed)d ! (cursor)g(p)q(osition\).)20 b(This)13 b(text)315 992 y(is)j(referred)f(to)g(as)f(the)i Fm(region)p Fu(.)k(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 ! 1071 y Ft(copy-region-as-kill)d(\(\))315 1125 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 ! 1180 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 ! 1259 y Ft(copy-backward-word)d(\(\))315 1314 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 ! 1369 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 1448 y Ft(copy-forward-word)d(\(\)) ! 315 1502 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 1557 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 1636 y Ft(yank)f(\(C-y\))315 ! 1691 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 ! 1770 y Ft(yank-pop)f(\(M-y\))315 1824 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 1879 y(command)d(is)h(y)o(ank)f(or)f(y)o ! (ank-p)q(op.)75 1990 y Fl(1.4.5)30 b(Sp)r(ecifying)20 ! b(Numeric)h(Argumen)n(ts)75 2098 y Ft(digit-argument)13 ! b(\(M-0,)i(M-1,)f(...)h(M--\))315 2153 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 2206 y Fo(h)p 327 2180 50 2 v 327 ! 2208 a Fn(M{)p 327 2215 V 375 2206 a Fo(i)405 2208 y ! Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2286 y ! Ft(universal-argument)e(\(\))315 2341 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 ! 2396 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 ! 2451 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 2506 ! 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 ! 2560 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) ! f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 ! 2615 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h ! (the)g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 ! 2670 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)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)315 183 y(mak)o(es)15 b(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 ! 238 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 341 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 444 y Ft(complete)14 b(\(TAB\))315 499 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 554 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 609 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 663 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 ! 718 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 ! 773 y(so)g(on.)75 847 y Ft(possible-completions)d(\(M-?\))315 ! 902 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 976 y Ft(insert-completions)e(\(M-*\))315 ! 1030 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 ! 1085 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1159 ! y Ft(menu-complete)e(\(\))315 1214 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 1269 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 1323 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 1378 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 1433 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 1488 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 1543 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 1646 y Fl(1.4.7)30 b(Keyb)r(oard)20 ! b(Macros)75 1749 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 ! 1804 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 1878 ! y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 1932 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 1987 y(de\014nition.)75 ! 2061 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 2116 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 ! 2171 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o ! (eyb)q(oard.)75 2274 y Fl(1.4.8)30 b(Some)20 b(Miscellaneous)h ! (Commands)75 2377 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 ! 2432 y Fu(Read)e(in)g(the)f(con)o(ten)o(ts)g(of)f(the)i(inputrc)g ! (\014le,)g(and)g(incorp)q(orate)f(an)o(y)g(bindings)i(or)e(v)m(ariable) ! 315 2487 y(assignmen)o(ts)k(found)h(there.)75 2560 y ! Ft(abort)e(\(C-g\))315 2615 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 2670 y(setting)i(of)g Ft(bell-style)p Fu(\).)p ! eop %%Page: 16 18 16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)75 ! 183 y Ft(do-uppercase-version)12 b(\(M-a,)j(M-b,)f(M-)p ! Fm(x)p Ft(,)h Fj(:)8 b(:)g(:)n Ft(\))315 238 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 ! 293 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75 ! 372 y Ft(prefix-meta)e(\(ESC\))315 427 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 482 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 561 y Ft(undo)f(\(C-_,)f(C-x)h ! (C-u\))315 616 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q ! (ered)g(for)e(eac)o(h)h(line.)75 695 y Ft(revert-line)f(\(M-r\))315 ! 750 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 805 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g ! (b)q(eginning.)75 884 y Ft(tilde-expand)f(\(M-~\))315 ! 939 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o ! (ord.)75 1018 y Ft(set-mark)f(\(C-@\))315 1073 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 1128 y(is)i(set)f(to)f ! (that)h(p)q(osition.)75 1207 y Ft(exchange-point-and-mark)d(\(C-x)j ! (C-x\))315 1262 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 1317 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 1396 ! y Ft(character-search)e(\(C-]\))315 1451 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 1506 y(A)j(negativ)o(e)h (coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 ! 1585 y Ft(character-search-backward)c(\(M-C-]\))315 1640 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 ! 1695 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 1774 y Ft(insert-comment)d(\(M-#\)) ! 315 1829 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 ! 1884 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 1963 ! y Ft(dump-functions)d(\(\))315 2018 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 2073 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 2128 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 2207 y Ft(dump-variables)e(\(\))315 ! 2262 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 ! 2317 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 ! 2371 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 2451 y Ft(dump-macros)f(\(\))315 2506 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 2560 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 2615 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 2670 y(default.)p eop %%Page: 17 19 17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 ! b(17)75 183 y Fs(1.5)33 b(Readline)23 b(vi)h(Mo)r(de)137 ! 280 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 334 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 389 y(the)c ! Fp(POSIX)h Fu(1003.2)d(standard.)137 456 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 ! 511 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 ! 578 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 633 y(had)e(t)o(yp)q(ed)h(an)f(`)p ! Ft(i)p Fu('.)18 b(Pressing)608 631 y Fo(h)p 620 605 70 ! 2 v 620 633 a Fn(ESC)p 620 641 V 687 631 a Fo(i)715 633 ! 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 688 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 743 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: 18 20 --- 2630,2889 ---- (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 ! 374 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315 ! 429 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 ! 483 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 ! 538 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 619 ! y Ft(quoted-insert)e(\(C-q,)i(C-v\))315 674 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 729 ! y(sequences)f(lik)o(e)605 727 y Fo(h)p 617 701 56 2 v ! 617 729 a Fn(C-q)p 617 737 V 671 727 a Fo(i)685 729 y ! Fu(,)f(for)g(example.)75 810 y Ft(tab-insert)f(\(M-TAB\))315 ! 865 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 946 y Ft(self-insert)f ! (\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1001 y Fu(Insert)g(y)o(ourself.) ! 75 1082 y Ft(transpose-chars)e(\(C-t\))315 1136 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 1191 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 1246 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 1301 y(don't)k(w)o(ork.) ! 75 1382 y Ft(transpose-words)e(\(M-t\))315 1437 y Fu(Drag)j(the)h(w)o (ord)f(b)q(ehind)k(the)d(cursor)f(past)h(the)g(w)o(ord)g(in)g(fron)o(t) ! g(of)f(the)h(cursor)g(mo)o(ving)315 1491 y(the)e(cursor)g(o)o(v)o(er)g ! (that)f(w)o(ord)g(as)h(w)o(ell.)75 1572 y Ft(upcase-word)f(\(M-u\))315 ! 1627 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 ! 1682 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 1763 y Ft(downcase-word)d(\(M-l\))315 ! 1818 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 1873 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 1954 y Ft(capitalize-word)e(\(M-c\))315 ! 2008 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 ! 2063 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 2178 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5 ! b(anking)75 2289 y Ft(kill-line)14 b(\(C-k\))315 2344 y Fu(Kill)j(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q ! (osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 2425 ! y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 2479 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g(line.) ! 75 2560 y Ft(unix-line-discard)e(\(C-u\))315 2615 y Fu(Kill)18 b(bac)o(kw)o(ard)d(from)g(the)h(cursor)g(to)f(the)h(b)q(eginning)i(of)e ! (the)g(curren)o(t)g(line.)24 b(The)16 b(killed)315 2670 ! y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h(kill-ring.)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(kill-whole-line)c(\(\))315 238 y Fu(Kill)h(all)e(c)o ! (haracters)f(on)g(the)g(curren)o(t)h(line,)h(no)f(matter)e(where)h(the) ! h(cursor)f(is.)19 b(By)12 b(default,)315 293 y(this)k(is)f(un)o(b)q ! (ound.)75 374 y Ft(kill-word)f(\(M-d\))315 429 y Fu(Kill)i(from)d(the)i ! (cursor)e(to)h(the)g(end)g(of)g(the)g(curren)o(t)g(w)o(ord,)f(or)h(if)g ! (b)q(et)o(w)o(een)g(w)o(ords,)g(to)f(the)315 483 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 ! Ft(forward-word)p Fu(.)75 564 y Ft(backward-kill-word)e(\(M-DEL\))315 ! 619 y Fu(Kill)18 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor.)20 b(W)l(ord)c(b)q(oundaries)g(are)f(the)h(same)f(as)g Ft(backward-)315 ! 674 y(word)p Fu(.)75 755 y Ft(unix-word-rubout)e(\(C-w\))315 ! 810 y Fu(Kill)20 b(the)d(w)o(ord)g(b)q(ehind)j(the)d(cursor,)h(using)g (white)g(space)g(as)f(a)g(w)o(ord)g(b)q(oundary)l(.)28 ! b(The)315 865 y(killed)17 b(text)e(is)h(sa)o(v)o(ed)f(on)g(the)g ! (kill-ring.)75 946 y Ft(delete-horizontal-space)d(\(\))315 ! 1001 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 1082 ! y Ft(kill-region)e(\(\))315 1136 y Fu(Kill)h(the)e(text)f(b)q(et)o(w)o (een)h(the)g(p)q(oin)o(t)g(and)g(the)g Fm(mark)i Fu(\(sa)o(v)o(ed)d ! (cursor)g(p)q(osition\).)20 b(This)13 b(text)315 1191 y(is)j(referred)f(to)g(as)f(the)i Fm(region)p Fu(.)k(By)15 b(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 ! 1272 y Ft(copy-region-as-kill)d(\(\))315 1327 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 ! 1382 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q(ound.)75 ! 1463 y Ft(copy-backward-word)d(\(\))315 1518 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 ! 1572 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 1653 y Ft(copy-forward-word)d(\(\)) ! 315 1708 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 1763 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 1844 y Ft(yank)f(\(C-y\))315 ! 1899 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 ! 1980 y Ft(yank-pop)f(\(M-y\))315 2035 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 2089 y(command)d(is)h(y)o(ank)f(or)f(y)o ! (ank-p)q(op.)75 2204 y Fl(1.4.5)30 b(Sp)r(ecifying)20 ! b(Numeric)h(Argumen)n(ts)75 2315 y Ft(digit-argument)13 ! b(\(M-0,)i(M-1,)f(...)h(M--\))315 2370 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 2423 y Fo(h)p 327 2397 50 2 v 327 ! 2425 a Fn(M{)p 327 2432 V 375 2423 a Fo(i)405 2425 y ! Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2506 y ! Ft(universal-argument)e(\(\))315 2560 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 ! 2615 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 ! 2670 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)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)315 183 y(again)16 b(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 ! 238 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y)f ! (a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)315 ! 293 y(or)d(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the) ! g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 ! 348 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 ! 402 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 ! 457 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 565 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 671 y Ft(complete)14 b(\(TAB\))315 726 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 781 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 835 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 890 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 ! 945 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 ! 1000 y(so)g(on.)75 1077 y Ft(possible-completions)d(\(M-?\))315 ! 1131 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 1208 y Ft(insert-completions)e(\(M-*\))315 ! 1263 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 ! 1318 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1395 ! y Ft(menu-complete)e(\(\))315 1450 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 1504 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 1559 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 1614 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 1669 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 1724 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 1778 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 1855 y Ft(delete-char-or-list)e(\(\))315 ! 1910 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 ! 1965 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 2020 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o ! (b)q(ound)g(b)o(y)f(default.)75 2127 y Fl(1.4.7)30 b(Keyb)r(oard)20 ! b(Macros)75 2233 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 ! 2288 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 2365 ! y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 2420 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 2475 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: 16 18 16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)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)g(the)f(con)o(ten)o(ts)g(of)f(the)i(inputrc)g(\014le,)g ! (and)g(incorp)q(orate)f(an)o(y)g(bindings)i(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: 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 Ft(dump-variables)13 b(\(\))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: 18 20 *************** *** 2961,2966 **** Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g (initializations,)75 1490 y(suc)o(h)h(as)e(installing)k(custom)c ! (completers)i(\(see)f(Section)h(2.5)f([Custom)f(Completers],)g(page)h ! (30\).)75 1622 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 1719 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 --- 2992,2997 ---- Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g (initializations,)75 1490 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 ! (32\).)75 1622 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 1719 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 *************** *** 3025,3029 **** (gathered)e(so)f(far.)19 b(Y)l(ou)c(are)f(w)o(elcome)g(to)g(mo)q(dify)g (the)h(con)o(ten)o(ts)e(of)h(the)195 1732 y(line,)i(but)g(see)f ! (Section)h(2.4.5)e([Allo)o(wing)i(Undoing],)f(page)g(25.)1661 1821 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1821 V 21 w(p)r(oin)n(t)195 1876 y Fu(The)15 b(o\013set)g(of)f(the)i(curren) --- 3056,3060 ---- (gathered)e(so)f(far.)19 b(Y)l(ou)c(are)f(w)o(elcome)g(to)g(mo)q(dify)g (the)h(con)o(ten)o(ts)e(of)h(the)195 1732 y(line,)i(but)g(see)f ! (Section)h(2.4.5)e([Allo)o(wing)i(Undoing],)f(page)g(26.)1661 1821 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1821 V 21 w(p)r(oin)n(t)195 1876 y Fu(The)15 b(o\013set)g(of)f(the)i(curren) *************** *** 3051,3985 **** %%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(char)20 b(*)f Fh(rl)p 286 ! 183 18 3 v 21 w(prompt)195 238 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 293 y(should)i(not)f(b)q(e)h ! (assigned)g(to)e(directly)l(.)1661 399 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 399 V 21 w(library)p 475 ! 399 V 22 w(v)n(ersion)195 453 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 559 ! y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 559 ! V 21 w(terminal)p 518 559 V 21 w(name)195 614 y Fu(The)c(terminal)h(t)o ! (yp)q(e,)f(used)h(for)f(initialization.)1661 720 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 720 V 21 w(readline)p ! 505 720 V 22 w(name)195 774 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 829 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 884 y(Init)16 b(Constructs],)e(page)h(7\).)1661 990 ! y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286 990 ! V 21 w(instream)195 1044 y Fu(The)c(stdio)h(stream)e(from)h(whic)o(h)h ! (Readline)h(reads)e(input.)1661 1150 y(V)l(ariable)-1749 ! b Fi(FILE)20 b(*)f Fh(rl)p 286 1150 V 21 w(outstream)195 ! 1205 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q ! (erforms)e(output.)1661 1311 y(V)l(ariable)-1749 b Fi(Function)20 ! b(*)g Fh(rl)p 391 1311 V 21 w(startup)p 595 1311 V 20 ! w(ho)r(ok)195 1365 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 1420 y(the)i(\014rst)g(prompt.)1661 ! 1526 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 1526 V 21 w(ev)n(en)n(t)p 544 1526 V 22 w(ho)r(ok)195 ! 1581 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 ! 1636 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661 ! 1741 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 1741 V 21 w(getc)p 514 1741 V 21 w(function)195 1796 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 ! 1851 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 ! 1906 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(27\).)1661 2011 y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417 ! 2011 V 21 w(redispla)n(y)p 661 2011 V 22 w(function)195 ! 2066 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 ! 2121 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 ! 2176 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 ! 2231 y([Redispla)o(y],)16 b(page)f(26\).)1661 2336 y(V)l(ariable)-1749 ! b Fi(Keymap)20 b Fh(rl)p 293 2336 V 21 w(executing)p ! 551 2336 V 22 w(k)n(eymap)195 2391 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 ! (23\))f(in)195 2446 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g ! (readline)h(function)f(w)o(as)f(found.)1661 2552 y(V)l(ariable)-1749 ! b Fi(Keymap)20 b Fh(rl)p 293 2552 V 21 w(binding)p 501 ! 2552 V 22 w(k)n(eymap)195 2606 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(23\)) ! f(in)195 2661 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q ! (ccurred.)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)75 183 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n ! (enience)g(F)-6 b(unctions)75 331 y Fl(2.4.1)30 b(Naming)20 ! b(a)g(F)-5 b(unction)137 430 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 485 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 540 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 ! 607 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 678 ! y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 676 ! y Fo(h)p 671 650 209 2 v 671 678 a Fn(Meta-Rub)q(out)p ! 671 685 V 878 676 a Fo(i)912 678 y Fu(to)f(the)h(function)g Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75 ! 733 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 787 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 886 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 886 18 3 v 21 w(add)p 328 886 ! V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g(*function,)g ! (int)h(key)p Fg(\))195 941 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 995 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 ! 1094 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 1149 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 1204 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 1258 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 ! 1377 y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1476 ! 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 1531 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 1586 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 ! 1684 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 1684 V 21 w(mak)n(e)p 445 1684 V 20 w(bare)p 575 1684 ! V 20 w(k)n(eymap)j Fg(\(\))195 1739 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 1794 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 ! 1892 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 1892 V 21 w(cop)n(y)p 428 1892 V 21 w(k)n(eymap)j Fg(\()p ! Ft(Keymap)14 b(map)p Fg(\))195 1947 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 ! 2046 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 2046 V 21 w(mak)n(e)p 445 2046 V 20 w(k)n(eymap)j Fg(\(\))195 ! 2101 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 2101 14 2 ! v 17 w(insert,)g(the)h(lo)o(w-)195 2155 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 2210 y(b)q(ound)c(to)f(pro)q(duce)h(n)o ! (umeric)g(argumen)o(ts.)1650 2309 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 2309 18 3 v 21 w(discard)p ! 441 2309 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p ! Fg(\))195 2363 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f ! Fm(k)o(eymap)p Fu(.)137 2462 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 2517 y(k)o(eymap)15 b(is)h(activ)o(e.) ! 1650 2615 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p ! 293 2615 V 21 w(get)p 391 2615 V 21 w(k)n(eymap)i Fg(\(\))195 ! 2670 y Fu(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)p ! eop %%Page: 24 26 24 25 bop 75 -58 a Fu(24)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(set)p 333 183 V 21 w(k)n(eymap)i Fg(\()p ! Ft(Keymap)14 b(keymap)p Fg(\))195 238 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 ! 336 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 336 V 21 w(get)p 391 336 V 21 w(k)n(eymap)p 605 336 V ! 20 w(b)n(y)p 685 336 V 21 w(name)i Fg(\()p Ft(char)14 ! b(*name)p Fg(\))195 391 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 446 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(3\).)1650 ! 544 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 ! 544 V 21 w(get)p 384 544 V 21 w(k)n(eymap)p 598 544 V ! 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 ! 599 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 654 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(3\).)75 ! 772 y Fl(2.4.3)30 b(Binding)20 b(Keys)137 871 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 926 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 981 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 ! 1036 y(and)15 b(the)h(examples)g(in)g(this)f(man)o(ual)h(assume)f ! (that.)137 1106 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1650 ! 1204 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1204 ! V 21 w(bind)p 347 1204 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 ! b(key,)h(Function)f(*function)p Fg(\))195 1259 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 ! 1314 y(case)f(of)g(an)g(in)o(v)m(alid)j Fm(k)o(ey)p Fu(.)1650 ! 1412 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1412 ! V 21 w(bind)p 347 1412 V 21 w(k)n(ey)p 452 1412 V 21 ! w(in)p 520 1412 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Function)f ! (*function,)283 1467 y(Keymap)g(map)p Fg(\))195 1521 ! 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 1620 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1620 V 21 w(un)n(bind)p 409 ! 1620 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 b(key)p Fg(\))195 ! 1674 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 1729 y(in)i(case)f(of)g(error.)1650 1827 ! y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1827 V ! 21 w(un)n(bind)p 409 1827 V 21 w(k)n(ey)p 514 1827 V ! 21 w(in)p 582 1827 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f ! (map)p Fg(\))195 1882 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 1980 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 1980 V 21 w(un)n(bind)p 409 1980 V 21 w(function)p ! 635 1980 V 21 w(in)p 703 1980 V 21 w(map)h Fg(\()p Ft(Function)14 ! b(*function,)283 2035 y(Keymap)g(map)p Fg(\))195 2090 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 2188 y(F)l(unction)-1749 b ! Fi(int)20 b Fh(rl)p 215 2188 V 21 w(un)n(bind)p 409 2188 ! V 21 w(command)p 674 2188 V 17 w(in)p 738 2188 V 22 w(map)h ! Fg(\()p Ft(char)14 b(*command,)g(Keymap)283 2243 y(map)p ! Fg(\))195 2298 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 2396 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 2396 V 21 w(generic)p 413 2396 ! V 21 w(bind)j Fg(\()p Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h ! (*data,)283 2451 y(Keymap)f(map)p Fg(\))195 2506 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 ! 2560 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 2615 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 2670 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(.)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(parse)p 369 183 V 19 w(and)p ! 480 183 V 21 w(bind)j Fg(\()p Ft(char)14 b(*line)p Fg(\))195 ! 238 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 293 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 ! 348 y(page)c(3\).)1650 449 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 449 V 21 w(read)p 346 449 V 20 w(init)p ! 450 449 V 22 w(\014le)k Fg(\()p Ft(char)14 b(*filename)p ! Fg(\))195 504 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 559 y([Readline)17 b(Init)f(File],)g(page)f(3\).)75 ! 680 y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20 ! b(Names)h(and)f(Bindings)137 781 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 836 y(in)o(v)o(ok)o(ed)k(b)o(y)h ! (a)e(particular)i(k)o(ey)f(sequence.)1650 937 y(F)l(unction)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 937 V 21 w(named)p ! 579 937 V 19 w(function)j Fg(\()p Ft(char)14 b(*name)p ! Fg(\))195 992 y Fu(Return)i(the)f(function)h(with)g(name)f ! Fm(name)p Fu(.)1650 1093 y(F)l(unction)-1749 b Fi(Function)20 ! b(*)g Fh(rl)p 391 1093 V 21 w(function)p 617 1093 V 21 ! w(of)p 685 1093 V 19 w(k)n(eyseq)k Fg(\()p Ft(char)15 ! b(*keyseq,)f(Keymap)283 1148 y(map,)g(int)h(*type)p Fg(\))195 ! 1203 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 1258 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 1313 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(\).)1650 ! 1414 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p ! 312 1414 V 21 w(in)n(v)n(oking)p 541 1414 V 23 w(k)n(eyseqs)k ! Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 1469 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 ! 1524 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650 ! 1625 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p ! 312 1625 V 21 w(in)n(v)n(oking)p 541 1625 V 23 w(k)n(eyseqs)p ! 750 1625 V 21 w(in)p 818 1625 V 22 w(map)i Fg(\()p Ft(Function)14 ! b(*function,)283 1680 y(Keymap)g(map)p Fg(\))195 1735 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 ! 1789 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650 ! 1891 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1891 ! V 21 w(function)p 467 1891 V 21 w(dump)r(er)g Fg(\()p ! Ft(int)15 b(readable)p Fg(\))195 1946 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 2000 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 2055 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 2157 y(F)l(unction)-1749 b Fi(void)20 ! b Fh(rl)p 241 2157 V 21 w(list)p 337 2157 V 22 w(funmap)p ! 550 2157 V 18 w(names)h Fg(\(\))195 2211 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(.)75 2333 y Fl(2.4.5)30 b(Allo)n(wing)21 ! b(Undoing)137 2434 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 2489 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 2543 y(undo)e(function)g(for)e(the)i(sto)q ! (c)o(k)e(mark)o(et.)137 2615 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 2670 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(.)p eop ! %%Page: 26 28 ! 26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)137 ! 183 y(If)11 b(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 238 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 293 y(group)14 b(\(\))h Fu(and)h ! Ft(rl_end_undo_group)d(\(\))p Fu(.)137 360 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 ! 425 y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)e(UNDO_INSERT,)g ! (UNDO_BEGIN,)g(UNDO_END)h(};)137 492 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 547 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 ! 602 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 694 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 694 18 3 v 21 w(b)r(egin)p 372 694 V 20 w(undo)p ! 517 694 V 20 w(group)h Fg(\(\))195 749 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 804 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 858 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 951 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 951 V 21 w(end)p 326 951 V ! 20 w(undo)p 471 951 V 20 w(group)h Fg(\(\))195 1005 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 1060 ! 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 ! 1115 y(group)f(\(\))p Fu(.)1650 1207 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 1207 V 21 w(add)p 354 1207 ! V 20 w(undo)i Fg(\()p Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g ! (int)f(end,)283 1262 y(char)g(*text)p Fg(\))195 1317 ! 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 1372 y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h ! (encompasses)f Fm(text)p Fu(.)1650 1464 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(free)p 296 1464 V 20 w(undo)p 441 1464 ! V 20 w(list)k Fg(\(\))195 1519 y Fu(F)l(ree)15 b(the)h(existing)g(undo) ! f(list.)1650 1611 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 1611 V 21 w(do)p 297 1611 V 20 w(undo)i Fg(\(\))195 ! 1666 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 ! 1721 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137 ! 1813 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 1868 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 1923 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 2015 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 2015 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p ! Fg(\))195 2070 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 2125 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 ! 2237 y Fl(2.4.6)30 b(Redispla)n(y)1650 2358 y Fu(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 2358 V 21 w(redispla)n(y)k ! Fg(\(\))195 2413 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 2468 y(line_buffer)p Fu(.)1650 2560 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 2560 V 21 w(forced)p 390 2560 ! V 20 w(up)r(date)p 584 2560 V 20 w(displa)n(y)k Fg(\(\))195 ! 2615 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 ! 2670 y(the)c(screen)h(displa)o(y)g(is)g(correct.)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(int)20 ! b Fh(rl)p 215 183 18 3 v 21 w(on)p 297 183 V 20 w(new)p ! 416 183 V 21 w(line)k Fg(\(\))195 238 y Fu(T)l(ell)17 b(the)f(up)q(date)g(routines)g(that)f(w)o(e)g(ha)o(v)o(e)g(mo)o(v)o(ed) g(on)o(to)g(a)g(new)h(\(empt)o(y\))f(line,)i(usually)195 ! 293 y(after)d(ouputting)i(a)f(newline.)1650 380 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 380 V 21 w(reset)p 357 380 ! V 20 w(line)p 465 380 V 23 w(state)j Fg(\(\))195 434 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 ! 489 y(on)d(a)g(new)g(line.)1650 576 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 576 V 21 w(message)g Fg(\()p ! Ft(va_alist)p Fg(\))195 631 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 686 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 740 y(n)o(umeric)16 ! b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)1650 827 ! y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 827 V 21 ! w(clear)p 354 827 V 21 w(message)h Fg(\(\))195 882 y ! Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)75 ! 989 y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650 ! 1105 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 1105 V 21 w(insert)p 378 1105 V 21 w(text)k Fg(\()p Ft(char)14 ! b(*text)p Fg(\))195 1159 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 ! 1246 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1246 ! V 21 w(delete)p 383 1246 V 22 w(text)k Fg(\()p Ft(int)14 ! b(start,)h(int)f(end)p Fg(\))195 1301 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 1388 y(F)l(unction)-1749 b Fi(char)20 b(*)f ! Fh(rl)p 286 1388 V 21 w(cop)n(y)p 421 1388 V 21 w(text)24 b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 ! 1443 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 ! 1529 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1529 ! V 21 w(kill)p 311 1529 V 23 w(text)k Fg(\()p Ft(int)14 ! b(start,)h(int)g(end)p Fg(\))195 1584 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 1639 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 1694 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 ! 1749 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 ! 1855 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650 ! 1971 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 1971 V 21 w(read)p 346 1971 V 20 w(k)n(ey)k Fg(\(\))195 ! 2026 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 ! 2081 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 ! 2136 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 ! 2222 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2222 ! V 21 w(getc)j Fg(\()p Ft(FILE)14 b(*)p Fg(\))195 2277 ! 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 2364 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 2364 V 21 w(stu\013)p 346 2364 V 20 w(c)n(har)j ! Fg(\()p Ft(int)15 b(c)p Fg(\))195 2419 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 2474 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 ! 2560 y(F)l(unction)-1749 b Fi(rl_extend_line_buffer)22 ! b Fh(\(in)n(t)j Ft(len)p Fg(\))195 2615 y Fu(Ensure)14 b(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 2670 y(reallo)q(cating)k ! (it)g(if)f(necessary)l(.)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(initiali)q(z)q(e)26 b Fg(\(\))195 238 y Fu(Initialize)18 ! b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)1650 ! 328 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 328 ! V 21 w(reset)p 357 328 V 20 w(terminal)j Fg(\()p Ft(char)15 ! b(*terminal_name)p Fg(\))195 383 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 383 14 2 v 17 w(name)j Fu(as)c(the)195 437 y(terminal)j(t)o(yp)q ! (e)f(\(e.g.,)f Ft(vt100)p Fu(\).)1650 527 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 582 y Fu(Return)i(1)f(if)g Fm(c)j Fu(is)e(an)f(alphab)q(etic) ! i(c)o(haracter.)1650 671 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 726 ! y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.) ! 1650 816 y(F)l(unction)-1749 b Fi(int)20 b Fh(ding)i ! Fg(\(\))195 871 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(.)137 960 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 1050 y(F)l(unction)-1749 b ! Fi(int)20 b Fh(upp)r(ercase)p 426 1050 18 3 v 19 w(p)j ! Fg(\()p Ft(int)14 b(c)p Fg(\))195 1105 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 ! 1195 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p ! 409 1195 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195 ! 1249 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 1339 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(digit)p 289 1339 V 22 w(p)i Fg(\()p ! Ft(int)15 b(c)p Fg(\))195 1394 y Fu(Return)h(1)f(if)g ! Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 1484 ! y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 1484 V ! 20 w(upp)r(er)i Fg(\()p Ft(int)14 b(c)p Fg(\))195 1538 ! 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 ! 1593 y(c)o(haracter.)1650 1683 y(F)l(unction)-1749 b ! Fi(int)20 b Fh(to)p 227 1683 V 20 w(lo)n(w)n(er)k Fg(\()p ! Ft(int)15 b(c)p Fg(\))195 1738 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 1792 y(c)o(haracter.)1650 ! 1882 y(F)l(unction)-1749 b Fi(int)20 b Fh(digit)p 289 ! 1882 V 22 w(v)m(alue)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 ! 1937 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 2046 y Fl(2.4.9)30 b(Alternate)20 ! b(In)n(terface)137 2142 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 2197 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 ! 2252 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 2306 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 ! 2361 y(this)i(easy)l(.)1650 2451 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 2451 V 21 w(callbac)n(k)p ! 458 2451 V 23 w(handler)p 670 2451 V 21 w(install)25 ! b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283 2506 ! y(*lhandler)p Fg(\))195 2560 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 2615 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 2670 y(of)e(input)h(has)f ! (b)q(een)h(en)o(tered.)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(void)20 ! b Fh(rl)p 241 183 18 3 v 21 w(callbac)n(k)p 458 183 V ! 23 w(read)p 591 183 V 20 w(c)n(har)j Fg(\(\))195 238 ! 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 ! 293 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 348 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 402 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 ! 457 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 512 y Fu(line.)1650 609 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 609 V 21 w(callbac)n(k)p 458 ! 609 V 23 w(handler)p 670 609 V 21 w(remo)n(v)n(e)i Fg(\(\))195 ! 664 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 719 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 835 y ! Fl(2.4.10)29 b(An)21 b(Example)137 934 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 989 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 ! 1044 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 ! 1098 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 1165 y Ft(/*)24 b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h ! (following)e(characters.)h(*/)195 1217 y(int)195 1269 ! y(invert_case_line)f(\(count,)h(key\))314 1321 y(int)h(count,)f(key;) ! 195 1373 y({)243 1425 y(register)f(int)i(start,)f(end,)g(i;)243 ! 1528 y(start)g(=)h(rl_point;)243 1632 y(if)f(\(rl_point)g(>=)h ! (rl_end\))290 1684 y(return)f(\(0\);)243 1788 y(if)g(\(count)g(<)h(0\)) ! 290 1840 y({)338 1892 y(direction)f(=)h(-1;)338 1944 ! y(count)f(=)h(-count;)290 1995 y(})243 2047 y(else)290 ! 2099 y(direction)f(=)h(1;)243 2203 y(/*)f(Find)h(the)f(end)h(of)f(the)h ! (range)f(to)g(modify.)g(*/)243 2255 y(end)g(=)h(start)f(+)h(\(count)f ! (*)h(direction\);)243 2359 y(/*)f(Force)g(it)h(to)g(be)f(within)g ! (range.)g(*/)243 2411 y(if)g(\(end)h(>)f(rl_end\))290 ! 2462 y(end)h(=)g(rl_end;)243 2514 y(else)f(if)h(\(end)f(<)h(0\))290 ! 2566 y(end)g(=)g(0;)243 2670 y(if)f(\(start)g(==)h(end\))p eop %%Page: 30 32 ! 30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)290 ! 183 y Ft(return)23 b(\(0\);)243 287 y(if)g(\(start)g(>)h(end\))290 ! 339 y({)338 391 y(int)g(temp)f(=)h(start;)338 443 y(start)f(=)h(end;) ! 338 495 y(end)g(=)f(temp;)290 546 y(})243 650 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 ! 702 y(the)g(undo)f(information.)f(*/)243 754 y(rl_modifying)g(\(start,) ! h(end\);)243 858 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290 ! 910 y({)338 962 y(if)h(\(uppercase_p)e(\(rl_line_buffer[i]\)\))386 ! 1013 y(rl_line_buffer[i])f(=)j(to_lower)f(\(rl_line_buffer[i]\);)338 ! 1065 y(else)g(if)h(\(lowercase_p)e(\(rl_line_buffer[i]\)\))386 ! 1117 y(rl_line_buffer[i])f(=)j(to_upper)f(\(rl_line_buffer[i]\);)290 ! 1169 y(})243 1221 y(/*)g(Move)h(point)f(to)g(on)h(top)f(of)h(the)f ! (last)h(character)e(changed.)h(*/)243 1273 y(rl_point)f(=)i ! (\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f(start;)243 ! 1325 y(return)g(\(0\);)195 1377 y(})75 1509 y Fs(2.5)33 ! b(Custom)21 b(Completers)137 1607 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 1662 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 1717 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 ! 1771 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75 ! 1887 y Fl(2.5.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137 ! 1984 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 2039 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 2094 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 2149 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 2204 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 ! 2258 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 ! 2327 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q ! (erform)g(completion:)100 2396 y(1.)29 b(The)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 2451 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 2506 y(ing)p 228 2506 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 ! 2560 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 ! 2615 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 ! 2670 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)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)100 183 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 238 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 293 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 356 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 ! 411 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 466 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 520 ! 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 ! 575 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 630 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 685 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 740 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 794 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 849 y(it)g(has)h(\014nished)g(with)g ! (them.)1650 929 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 929 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h ! (invoking_key)p Fg(\))195 984 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 1038 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 1093 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g ! (\014lename)h(completion.)1661 1173 y(V)l(ariable)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 1173 V 21 w(completion)p ! 686 1173 V 21 w(en)n(try)p 839 1173 V 21 w(function)195 ! 1228 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 1283 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 1337 y(fault)11 b(\014lename)h(generator)d(function,)j Ft(filename_completion_function) ! g(\(\))p Fu(,)f(is)g(used.)75 1437 y Fl(2.5.2)30 b(Completion)20 ! b(F)-5 b(unctions)137 1529 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 1609 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 1609 V 21 w(complete)p 460 1609 V 21 w(in)n(ternal)k ! Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 1664 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 1664 14 2 v 16 w(to)p 1162 1664 V 16 w(do)21 b Fu(sa)o(ys)c(what)h ! (to)g(do)g(with)h(the)195 1718 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 1773 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 1828 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 1883 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f ! (completion.)1650 1963 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 1963 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 ! b(ignore,)g(int)h(invoking_key)p Fg(\))195 2017 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 ! 2072 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 2127 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 2182 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 2237 y Fm(in)o(v)o(oking)p 364 ! 2237 14 2 v 17 w(k)o(ey)p Fu(.)1650 2316 y(F)l(unction)-1749 ! b Fi(int)19 b Fh(rl)p 214 2316 18 3 v 21 w(p)r(ossible)p ! 432 2316 V 20 w(completions)k Fg(\()p Ft(int)15 b(count,)f(int)h ! (invoking_key)p Fg(\)\))195 2371 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 2426 y Ft(rl_complete_internal)12 b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p ! Fu('.)1650 2506 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 2506 V 21 w(insert)p 378 2506 V 21 w(completions)j Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195 ! 2560 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 ! 2615 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 ! 2670 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p ! Ft(*)p Fu('.)p eop ! %%Page: 32 34 ! 32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)1650 ! 183 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(completion)p ! 547 183 18 3 v 21 w(matc)n(hes)j Fg(\()p Ft(char)15 b(*text,)f ! (CPFunction)283 238 y(*entry_func)p Fg(\))195 293 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 ! 348 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 402 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 457 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 522 y Fm(en)o(try)p 302 ! 522 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 577 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 632 y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714 ! 632 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 686 y(are)g(no)g(more)g(matc)o(hes.) ! 1650 771 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(\014lename)p ! 455 771 18 3 v 20 w(completion)p 749 771 V 21 w(function)k ! Fg(\()p Ft(char)15 b(*text,)f(int)283 826 y(state)p Fg(\))195 ! 881 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 936 ! 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 ! 991 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 ! 1045 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h ! (functions.)1650 1130 y(F)l(unction)-1749 b Fi(char)20 ! b(*)f Fh(username)p 487 1130 V 19 w(completion)p 780 ! 1130 V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283 ! 1185 y(state)p Fg(\))195 1240 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 1295 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 1350 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 1454 y Fl(2.5.3)30 ! b(Completion)20 b(V)-5 b(ariables)1661 1569 y Fu(V)l(ariable)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 1569 V 21 w(completion)p ! 686 1569 V 21 w(en)n(try)p 839 1569 V 21 w(function)195 ! 1623 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 1678 y(to)f(use)g Ft(filename_entry_function)d(\(\))p ! Fu(,)j(the)g(default)h(\014lename)g(completer.)1661 1763 y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p ! 469 1763 V 21 w(attempted)p 749 1763 V 20 w(completion)p ! 1043 1763 V 21 w(function)195 1818 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 1873 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 1927 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 1982 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 ! 2037 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 2092 y(strings)f(returned) ! h(will)h(b)q(e)e(used.)1661 2177 y(V)l(ariable)-1749 ! b Fi(CPFunction)21 b(*)e Fh(rl)p 443 2177 V 21 w(\014lename)p ! 672 2177 V 20 w(quoting)p 881 2177 V 21 w(function)195 ! 2232 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 ! 2286 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 ! 2341 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 ! 2396 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 2396 14 2 v 16 w(t)o(yp)q(e)p ! Fu(,)h(and)f Fm(quote)p 1480 2396 V 16 w(p)q(oin)o(ter)p ! Fu(.)30 b(The)195 2451 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 2451 ! V 16 w(t)o(yp)q(e)i Fu(is)f(either)f Ft(SINGLE_MATCH)p ! Fu(,)e(if)195 2506 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 ! 2560 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 2560 ! V 16 w(p)q(oin)o(ter)195 2615 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 2670 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o ! (haracter.)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)1661 183 y(V)l(ariable)-1749 b Fi(CPFunction)21 b(*)e Fh(rl)p 443 183 18 3 v 21 w(\014lename)p 672 183 ! V 20 w(dequoting)p 939 183 V 21 w(function)195 238 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 ! 293 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 ! 348 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 ! 402 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 402 14 2 v 16 ! w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 457 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 457 V 16 w(c)o(har)195 512 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 ! 611 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 611 18 3 v 21 w(c)n(har)p 519 611 V 20 w(is)p 577 ! 611 V 22 w(quoted)p 770 611 V 20 w(p)195 665 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 720 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)195 775 y(program)e(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 830 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 ! 884 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 939 y ! Fu(should)d(b)q(e)g(used)g(to)e(break)i(w)o(ords)e(for)h(the)g ! (completer.)1661 1038 y(V)l(ariable)-1749 b Fi(int)20 ! b Fh(rl)p 215 1038 V 21 w(completion)p 510 1038 V 21 ! w(query)p 673 1038 V 21 w(items)195 1093 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 1147 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 1202 y(default)16 ! b(v)m(alue)g(is)g(100.)1661 1301 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 1301 V 21 w(basic)p 430 ! 1301 V 21 w(w)n(ord)p 575 1301 V 21 w(break)p 736 1301 ! V 20 w(c)n(haracters)195 1356 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 1410 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 1465 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g ! Ft(")g(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 1564 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 1564 V 21 w(basic)p 430 ! 1564 V 21 w(quote)p 590 1564 V 21 w(c)n(haracters)195 ! 1618 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 1717 y(V)l(ariable)-1749 b ! Fi(char)20 b(*)f Fh(rl)p 286 1717 V 21 w(completer)p ! 555 1717 V 21 w(w)n(ord)p 700 1717 V 20 w(break)p 860 ! 1717 V 20 w(c)n(haracters)195 1772 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 1827 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 1831 ! 21 36 v 1661 1925 a(V)l(ariable)-1749 b Fi(char)20 b(*)f ! Fh(rl)p 286 1925 18 3 v 21 w(completer)p 555 1925 V 21 ! w(quote)p 715 1925 V 21 w(c)n(haracters)195 1980 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 2035 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 2089 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 2144 y(within)h(this)g(list.)1661 ! 2243 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 ! 2243 V 21 w(\014lename)p 515 2243 V 20 w(quote)p 674 ! 2243 V 21 w(c)n(haracters)195 2298 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 2352 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 ! 2451 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 ! 2451 V 21 w(sp)r(ecial)p 473 2451 V 22 w(pre\014xes)195 ! 2506 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 2560 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 2615 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 ! 2670 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.)p eop ! %%Page: 34 36 ! 34 35 bop 75 -58 a Fu(34)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(completion)p 510 183 V 21 w(app)r(end)p 715 ! 183 V 19 w(c)n(haracter)195 238 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 293 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 ! 348 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 402 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 ! 457 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 ! 512 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d ! (sp)q(eci\014cation.)1661 599 y(V)l(ariable)-1749 b Fi(int)20 ! b Fh(rl)p 215 599 V 21 w(ignore)p 391 599 V 20 w(completion)p ! 685 599 V 21 w(duplicates)195 654 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.) ! 1661 741 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 ! 741 V 21 w(\014lename)p 444 741 V 20 w(completion)p 738 ! 741 V 21 w(desired)195 796 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 851 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 905 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 960 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 1015 y(an)o(y)f(em)o(b)q(edded)i(w)o(ord)d(break)h(c)o ! (haracters.)1661 1102 y(V)l(ariable)-1749 b Fi(int)20 ! b Fh(rl)p 215 1102 V 21 w(\014lename)p 444 1102 V 20 ! w(quoting)p 653 1102 V 21 w(desired)195 1157 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 1212 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 1267 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 1321 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 1376 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 1431 y(quoting_function)p Fu(.)1661 ! 1518 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1518 ! V 21 w(inhibit)p 399 1518 V 23 w(completion)195 1573 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 ! 1628 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 1715 y(V)l(ariable)-1749 b ! Fi(Function)20 b(*)g Fh(rl)p 391 1715 V 21 w(ignore)p ! 567 1715 V 20 w(some)p 714 1715 V 19 w(completions)p ! 1030 1715 V 21 w(function)195 1770 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 1824 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 1879 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 1934 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 1989 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 2044 y(freed.)1661 2131 y(V)l(ariable)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 2131 V 21 w(directory)p ! 639 2131 V 21 w(completion)p 934 2131 V 21 w(ho)r(ok)195 ! 2185 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 ! 2240 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 ! 2295 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 ! 2350 y(v)m(ariables)j(in)f(pathnames.)75 2457 y Fl(2.5.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: 35 37 ! 35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (Readline)844 b(35)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()195 ! 443 y(#include)g()195 495 y(#include)g()195 ! 546 y(#include)g()195 598 y(#include)g()195 ! 702 y(#include)g()195 754 y(#include)g ! ()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 --- 3082,4215 ---- %%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(erase)p 363 183 V 20 w(empt)n(y)p 540 183 ! V 20 w(line)195 238 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 293 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 ! 348 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 402 y(blank)j(line.)1661 499 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 499 V 21 w(prompt)195 ! 554 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 609 y(should)i(not)f(b)q(e)h(assigned)g(to)e(directly)l ! (.)1661 705 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p ! 286 705 V 21 w(library)p 475 705 V 22 w(v)n(ersion)195 ! 760 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 856 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 856 V 21 w(terminal)p ! 518 856 V 21 w(name)195 911 y Fu(The)c(terminal)h(t)o(yp)q(e,)f(used)h ! (for)f(initialization.)1661 1008 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 1008 V 21 w(readline)p ! 505 1008 V 22 w(name)195 1063 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 1117 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 1172 y(Init)16 b(Constructs],)e(page)h(8\).)1661 ! 1269 y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286 ! 1269 V 21 w(instream)195 1324 y Fu(The)c(stdio)h(stream)e(from)h(whic)o ! (h)h(Readline)h(reads)e(input.)1661 1420 y(V)l(ariable)-1749 ! b Fi(FILE)20 b(*)f Fh(rl)p 286 1420 V 21 w(outstream)195 ! 1475 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q ! (erforms)e(output.)1661 1571 y(V)l(ariable)-1749 b Fi(Function)20 ! b(*)g Fh(rl)p 391 1571 V 21 w(startup)p 595 1571 V 20 ! w(ho)r(ok)195 1626 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 1681 y(the)i(\014rst)g(prompt.)1661 ! 1778 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 1778 V 21 w(pre)p 494 1778 V 20 w(input)p 647 1778 ! V 21 w(ho)r(ok)195 1832 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 1887 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.)1661 ! 1984 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 1984 V 21 w(ev)n(en)n(t)p 544 1984 V 22 w(ho)r(ok)195 ! 2039 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 ! 2093 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661 ! 2190 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 2190 V 21 w(getc)p 514 2190 V 21 w(function)195 2245 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 ! 2299 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 ! 2354 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 2451 y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417 ! 2451 V 21 w(redispla)n(y)p 661 2451 V 22 w(function)195 ! 2506 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 ! 2560 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 ! 2615 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 ! 2670 y([Redispla)o(y],)16 b(page)f(27\).)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(Keymap)20 ! b Fh(rl)p 293 183 18 3 v 21 w(executing)p 551 183 V 22 ! w(k)n(eymap)195 238 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(23\))f(in)195 ! 293 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g(readline)h(function)f ! (w)o(as)f(found.)1661 392 y(V)l(ariable)-1749 b Fi(Keymap)20 ! b Fh(rl)p 293 392 V 21 w(binding)p 501 392 V 22 w(k)n(eymap)195 ! 447 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(23\))f(in)195 ! 501 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q(ccurred.)75 ! 639 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6 ! b(unctions)75 787 y Fl(2.4.1)30 b(Naming)20 b(a)g(F)-5 ! b(unction)137 886 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 941 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 996 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 ! 1064 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 1134 ! y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 1132 ! y Fo(h)p 671 1106 209 2 v 671 1134 a Fn(Meta-Rub)q(out)p ! 671 1142 V 878 1132 a Fo(i)912 1134 y Fu(to)f(the)h(function)g Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75 ! 1189 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 1244 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 1343 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1343 18 3 v 21 w(add)p 328 ! 1343 V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g ! (*function,)g(int)h(key)p Fg(\))195 1398 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 ! 1453 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 1552 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 1606 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 ! 1661 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 ! 1716 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 1835 ! y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1935 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 1989 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 2044 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 ! 2143 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 2143 V 21 w(mak)n(e)p 445 2143 V 20 w(bare)p 575 2143 ! V 20 w(k)n(eymap)j Fg(\(\))195 2198 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 2253 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 ! 2352 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 2352 V 21 w(cop)n(y)p 428 2352 V 21 w(k)n(eymap)j Fg(\()p ! Ft(Keymap)14 b(map)p Fg(\))195 2407 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 ! 2506 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 ! 2506 V 21 w(mak)n(e)p 445 2506 V 20 w(k)n(eymap)j Fg(\(\))195 ! 2560 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 2560 14 2 ! v 17 w(insert,)g(the)h(lo)o(w-)195 2615 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 2670 y(b)q(ound)c(to)f(pro)q(duce)h(n)o ! (umeric)g(argumen)o(ts.)p eop %%Page: 24 26 24 25 bop 75 -58 a Fu(24)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(discard)p 441 183 V 21 w(k)n(eymap)i Fg(\()p ! Ft(Keymap)14 b(keymap)p Fg(\))195 238 y Fu(F)l(ree)h(the)h(storage)d ! (asso)q(ciated)j(with)f Fm(k)o(eymap)p Fu(.)137 330 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 ! 384 y(k)o(eymap)15 b(is)h(activ)o(e.)1650 476 y(F)l(unction)-1749 ! b Fi(Keymap)20 b Fh(rl)p 293 476 V 21 w(get)p 391 476 ! V 21 w(k)n(eymap)i Fg(\(\))195 531 y Fu(Returns)16 b(the)f(curren)o ! (tly)h(activ)o(e)f(k)o(eymap.)1650 622 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 622 V 21 w(set)p 333 622 V ! 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 ! 677 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 768 y(F)l(unction)-1749 b Fi(Keymap)20 ! b Fh(rl)p 293 768 V 21 w(get)p 391 768 V 21 w(k)n(eymap)p ! 605 768 V 20 w(b)n(y)p 685 768 V 21 w(name)i Fg(\()p ! Ft(char)14 b(*name)p Fg(\))195 823 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 878 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(3\).)1650 970 y(F)l(unction)-1749 b Fi(char)20 ! b(*)f Fh(rl)p 286 970 V 21 w(get)p 384 970 V 21 w(k)n(eymap)p ! 598 970 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p ! Fg(\))195 1024 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 1079 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(3\).)75 1191 y Fl(2.4.3)30 b(Binding)20 b(Keys)137 ! 1287 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 ! 1342 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 1396 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 1451 y(and)15 b(the)h(examples)g(in)g(this) ! f(man)o(ual)h(assume)f(that.)137 1518 y(These)h(functions)g(manage)e(k) ! o(ey)i(bindings.)1650 1610 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 1610 V 21 w(bind)p 347 1610 V 21 w(k)n(ey)k ! Fg(\()p Ft(int)14 b(key,)h(Function)f(*function)p Fg(\))195 ! 1664 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 1719 y(case)f(of)g(an)g(in)o(v)m ! (alid)j Fm(k)o(ey)p Fu(.)1650 1811 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1811 V 21 w(bind)p 347 1811 ! V 21 w(k)n(ey)p 452 1811 V 21 w(in)p 520 1811 V 22 w(map)h ! Fg(\()p Ft(int)14 b(key,)h(Function)f(*function,)283 ! 1866 y(Keymap)g(map)p Fg(\))195 1920 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 2012 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 2012 V 21 w(un)n(bind)p 409 2012 V 21 w(k)n(ey)k ! Fg(\()p Ft(int)14 b(key)p Fg(\))195 2067 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 ! 2121 y(in)i(case)f(of)g(error.)1650 2213 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 2213 V 21 w(un)n(bind)p 409 ! 2213 V 21 w(k)n(ey)p 514 2213 V 21 w(in)p 582 2213 V ! 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f(map)p ! Fg(\))195 2268 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 2359 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 2359 V 21 w(un)n(bind)p 409 2359 V 21 w(function)p ! 635 2359 V 21 w(in)p 703 2359 V 21 w(map)h Fg(\()p Ft(Function)14 ! b(*function,)283 2414 y(Keymap)g(map)p Fg(\))195 2469 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 2560 y(F)l(unction)-1749 b ! Fi(int)20 b Fh(rl)p 215 2560 V 21 w(un)n(bind)p 409 2560 ! V 21 w(command)p 674 2560 V 17 w(in)p 738 2560 V 22 w(map)h ! Fg(\()p Ft(char)14 b(*command,)g(Keymap)283 2615 y(map)p ! Fg(\))195 2670 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(.)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(generic)p 413 183 V 21 ! w(bind)j Fg(\()p Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,) ! 283 238 y(Keymap)f(map)p Fg(\))195 293 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 348 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 402 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 457 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 567 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 567 V 21 w(parse)p 369 567 V 19 w(and)p ! 480 567 V 21 w(bind)j Fg(\()p Ft(char)14 b(*line)p Fg(\))195 ! 622 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 677 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 ! 731 y(page)c(3\).)1650 841 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 841 V 21 w(read)p 346 841 V 20 w(init)p ! 450 841 V 22 w(\014le)k Fg(\()p Ft(char)14 b(*filename)p ! Fg(\))195 896 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 951 y([Readline)17 b(Init)f(File],)g(page)f(3\).)75 ! 1080 y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20 ! b(Names)h(and)f(Bindings)137 1185 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 1240 y(in)o(v)o(ok)o(ed)k ! (b)o(y)h(a)e(particular)i(k)o(ey)f(sequence.)1650 1350 ! y(F)l(unction)-1749 b Fi(Function)20 b(*)g Fh(rl)p 391 ! 1350 V 21 w(named)p 579 1350 V 19 w(function)j Fg(\()p ! Ft(char)14 b(*name)p Fg(\))195 1405 y Fu(Return)i(the)f(function)h ! (with)g(name)f Fm(name)p Fu(.)1650 1514 y(F)l(unction)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 1514 V 21 w(function)p ! 617 1514 V 21 w(of)p 685 1514 V 19 w(k)n(eyseq)k Fg(\()p ! Ft(char)15 b(*keyseq,)f(Keymap)283 1569 y(map,)g(int)h(*type)p ! Fg(\))195 1624 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 1679 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 1734 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(\).)1650 ! 1843 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p ! 312 1843 V 21 w(in)n(v)n(oking)p 541 1843 V 23 w(k)n(eyseqs)k ! Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 1898 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 ! 1953 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650 ! 2063 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p ! 312 2063 V 21 w(in)n(v)n(oking)p 541 2063 V 23 w(k)n(eyseqs)p ! 750 2063 V 21 w(in)p 818 2063 V 22 w(map)i Fg(\()p Ft(Function)14 ! b(*function,)283 2117 y(Keymap)g(map)p Fg(\))195 2172 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 ! 2227 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650 ! 2337 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 2337 ! V 21 w(function)p 467 2337 V 21 w(dump)r(er)g Fg(\()p ! Ft(int)15 b(readable)p Fg(\))195 2392 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 2446 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 2501 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 2611 y(F)l(unction)-1749 b Fi(void)20 ! b Fh(rl)p 241 2611 V 21 w(list)p 337 2611 V 22 w(funmap)p ! 550 2611 V 18 w(names)h Fg(\(\))195 2666 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(.)p eop ! %%Page: 26 28 ! 26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)75 ! 183 y Fl(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 287 ! 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 ! 341 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 396 y(undo)e(function)g(for)e(the)i(sto)q ! (c)o(k)e(mark)o(et.)137 471 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 525 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 600 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 655 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 709 ! y(group)14 b(\(\))h Fu(and)h Ft(rl_end_undo_group)d(\(\))p ! Fu(.)137 784 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 855 y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,) ! e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)137 930 ! 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 ! 985 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 1039 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 1146 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1146 18 3 v 21 w(b)r(egin)p ! 372 1146 V 20 w(undo)p 517 1146 V 20 w(group)h Fg(\(\))195 ! 1201 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 1255 ! 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 1310 ! 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 1417 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 1417 V 21 w(end)p 326 1417 V 20 w(undo)p ! 471 1417 V 20 w(group)h Fg(\(\))195 1471 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 1526 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 1581 y(group)f(\(\))p Fu(.)1650 ! 1687 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1687 ! V 21 w(add)p 354 1687 V 20 w(undo)i Fg(\()p Ft(enum)14 ! b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)283 1742 ! y(char)g(*text)p Fg(\))195 1797 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 1852 ! y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h(encompasses)f ! Fm(text)p Fu(.)1650 1958 y(F)l(unction)-1749 b Fi(void)20 ! b Fh(free)p 296 1958 V 20 w(undo)p 441 1958 V 20 w(list)k ! Fg(\(\))195 2013 y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1650 ! 2119 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2119 ! V 21 w(do)p 297 2119 V 20 w(undo)i Fg(\(\))195 2174 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 ! 2229 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137 ! 2336 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 2390 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 2445 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 2552 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 2552 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p ! Fg(\))195 2606 y Fu(T)l(ell)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 2661 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.)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)75 183 y Fl(2.4.6)30 b(Redispla)n(y)1650 ! 300 y Fu(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 ! 300 18 3 v 21 w(redispla)n(y)k Fg(\(\))195 355 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 410 y(line_buffer)p ! Fu(.)1650 497 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 497 V 21 w(forced)p 390 497 V 20 w(up)r(date)p 584 ! 497 V 20 w(displa)n(y)k Fg(\(\))195 552 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 607 y(the)c(screen)h ! (displa)o(y)g(is)g(correct.)1650 694 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 694 V 21 w(on)p 297 694 V 20 ! w(new)p 416 694 V 21 w(line)k Fg(\(\))195 749 y Fu(T)l(ell)17 b(the)f(up)q(date)g(routines)g(that)f(w)o(e)g(ha)o(v)o(e)g(mo)o(v)o(ed) g(on)o(to)g(a)g(new)h(\(empt)o(y\))f(line,)i(usually)195 ! 804 y(after)d(ouputting)i(a)f(newline.)1650 892 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 892 V 21 w(reset)p 357 892 ! V 20 w(line)p 465 892 V 23 w(state)j Fg(\(\))195 947 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 ! 1001 y(on)d(a)g(new)g(line.)1650 1089 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1089 V 21 w(message)g Fg(\()p ! Ft(va_alist)p Fg(\))195 1144 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 1199 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 1253 y(n)o(umeric)16 ! b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)1650 1341 ! y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1341 V ! 21 w(clear)p 354 1341 V 21 w(message)h Fg(\(\))195 1396 ! y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1650 ! 1483 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1483 ! V 21 w(sa)n(v)n(e)p 365 1483 V 21 w(prompt)h Fg(\(\))195 ! 1538 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 ! 1593 y(new)15 b(message)g(in)h(the)f(message)g(area)g(with)g ! Ft(rl_message)p Fu(.)1650 1681 y(F)l(unction)-1749 b ! Fi(void)20 b Fh(rl)p 241 1681 V 21 w(restore)p 436 1681 ! V 20 w(prompt)g Fg(\(\))195 1736 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 1790 y(to)e Ft(rl_save_prompt)p ! Fu(.)75 1898 y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650 ! 2015 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 2015 V 21 w(insert)p 378 2015 V 21 w(text)k Fg(\()p Ft(char)14 ! b(*text)p Fg(\))195 2069 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 ! 2157 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2157 ! V 21 w(delete)p 383 2157 V 22 w(text)k Fg(\()p Ft(int)14 ! b(start,)h(int)f(end)p Fg(\))195 2212 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 2300 y(F)l(unction)-1749 b Fi(char)20 b(*)f ! Fh(rl)p 286 2300 V 21 w(cop)n(y)p 421 2300 V 21 w(text)24 b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 ! 2354 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 ! 2442 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2442 ! V 21 w(kill)p 311 2442 V 23 w(text)k Fg(\()p Ft(int)14 ! b(start,)h(int)g(end)p Fg(\))195 2497 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 2552 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 2606 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 ! 2661 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.)p ! eop ! %%Page: 28 30 ! 28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)75 ! 183 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650 ! 304 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 304 18 3 v 21 w(read)p 346 304 V 20 w(k)n(ey)k Fg(\(\))195 ! 359 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 ! 414 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 469 ! 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 561 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 561 V 21 w(getc)j Fg(\()p Ft(FILE)14 ! b(*)p Fg(\))195 616 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 708 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 708 V 21 w(stu\013)p 346 708 ! V 20 w(c)n(har)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 763 ! 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 817 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 ! 910 y(F)l(unction)-1749 b Fi(rl_extend_line_buffer)22 ! b Fh(\(in)n(t)j Ft(len)p Fg(\))195 964 y Fu(Ensure)14 b(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 1019 y(reallo)q(cating)k ! (it)g(if)f(necessary)l(.)1650 1111 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1111 V 21 w(initiali)q(z)q(e)26 ! b Fg(\(\))195 1166 y Fu(Initialize)18 b(or)d(re-initialize)j ! (Readline's)f(in)o(ternal)f(state.)1650 1258 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1258 V 21 w(reset)p 357 1258 ! V 20 w(terminal)j Fg(\()p Ft(char)15 b(*terminal_name)p ! Fg(\))195 1313 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 1313 ! 14 2 v 17 w(name)j Fu(as)c(the)195 1368 y(terminal)j(t)o(yp)q(e)f ! (\(e.g.,)f Ft(vt100)p Fu(\).)1650 1460 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 1515 y Fu(Return)i(1)f(if)g Fm(c)j Fu(is)e(an)f(alphab)q ! (etic)i(c)o(haracter.)1650 1607 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 ! 1662 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o ! (haracter.)1650 1754 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(ding)i Fg(\(\))195 1808 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 ! 1901 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1901 ! 18 3 v 21 w(displa)n(y)p 435 1901 V 22 w(matc)n(h)p 611 ! 1901 V 20 w(list)25 b Fg(\()p Ft(char)14 b(**matches,)g(int)g(len,)h ! (int)283 1955 y(max)p Fg(\))195 2010 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 2065 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 2120 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 2174 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 2229 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 2284 y(\(see)h(Section)h(1.3.1) ! e([Readline)j(Init)f(File)g(Syn)o(tax],)e(page)h(4\).)137 ! 2376 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 2468 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(upp)r(ercase)p 426 2468 V 19 w(p)j Fg(\()p ! Ft(int)14 b(c)p Fg(\))195 2523 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 ! 2615 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p ! 409 2615 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195 ! 2670 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.)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(digit)p 289 183 18 3 v 22 w(p)i Fg(\()p Ft(int)15 ! b(c)p Fg(\))195 238 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(n)o ! (umeric)h(c)o(haracter.)1650 328 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(to)p 227 328 V 20 w(upp)r(er)i Fg(\()p ! Ft(int)14 b(c)p Fg(\))195 383 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 437 y(c)o(haracter.)1650 527 ! y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 527 V 20 ! w(lo)n(w)n(er)k Fg(\()p Ft(int)15 b(c)p Fg(\))195 582 ! 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 ! 637 y(c)o(haracter.)1650 727 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(digit)p 289 727 V 22 w(v)m(alue)j Fg(\()p Ft(int)15 ! b(c)p Fg(\))195 781 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 891 ! y Fl(2.4.9)30 b(Alternate)20 b(In)n(terface)137 987 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 ! 1042 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 1096 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 ! 1151 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 1206 y(this)i(easy)l(.)1650 ! 1296 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1296 ! V 21 w(callbac)n(k)p 458 1296 V 23 w(handler)p 670 1296 ! V 21 w(install)25 b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283 ! 1351 y(*lhandler)p Fg(\))195 1405 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 1460 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 1515 y(of)e(input)h(has)f ! (b)q(een)h(en)o(tered.)1650 1605 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 1605 V 21 w(callbac)n(k)p ! 458 1605 V 23 w(read)p 591 1605 V 20 w(c)n(har)j Fg(\(\))195 ! 1660 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 ! 1714 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 1769 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 1824 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 ! 1879 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 1934 y Fu(line.)1650 2023 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 2023 V 21 w(callbac)n(k)p ! 458 2023 V 23 w(handler)p 670 2023 V 21 w(remo)n(v)n(e)i ! Fg(\(\))195 2078 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 2133 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 ! 2243 y Fl(2.4.10)29 b(An)21 b(Example)137 2338 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 2393 ! 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 2448 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 2503 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 2566 y Ft(/*)24 ! b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h ! (*/)195 2618 y(int)195 2670 y(invert_case_line)f(\(count,)h(key\))p eop %%Page: 30 32 ! 30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)314 ! 183 y Ft(int)24 b(count,)f(key;)195 235 y({)243 287 y(register)f(int)i ! (start,)f(end,)g(i;)243 391 y(start)g(=)h(rl_point;)243 ! 495 y(if)f(\(rl_point)g(>=)h(rl_end\))290 546 y(return)f(\(0\);)243 ! 650 y(if)g(\(count)g(<)h(0\))290 702 y({)338 754 y(direction)f(=)h(-1;) ! 338 806 y(count)f(=)h(-count;)290 858 y(})243 910 y(else)290 ! 962 y(direction)f(=)h(1;)243 1065 y(/*)f(Find)h(the)f(end)h(of)f(the)h ! (range)f(to)g(modify.)g(*/)243 1117 y(end)g(=)h(start)f(+)h(\(count)f ! (*)h(direction\);)243 1221 y(/*)f(Force)g(it)h(to)g(be)f(within)g ! (range.)g(*/)243 1273 y(if)g(\(end)h(>)f(rl_end\))290 ! 1325 y(end)h(=)g(rl_end;)243 1377 y(else)f(if)h(\(end)f(<)h(0\))290 ! 1429 y(end)g(=)g(0;)243 1532 y(if)f(\(start)g(==)h(end\))290 ! 1584 y(return)f(\(0\);)243 1688 y(if)g(\(start)g(>)h(end\))290 ! 1740 y({)338 1792 y(int)g(temp)f(=)h(start;)338 1844 ! y(start)f(=)h(end;)338 1896 y(end)g(=)f(temp;)290 1947 ! y(})243 2051 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 2103 y(the)g(undo)f ! (information.)f(*/)243 2155 y(rl_modifying)g(\(start,)h(end\);)243 ! 2259 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290 ! 2311 y({)338 2363 y(if)h(\(uppercase_p)e(\(rl_line_buffer[i]\)\))386 ! 2414 y(rl_line_buffer[i])f(=)j(to_lower)f(\(rl_line_buffer[i]\);)338 ! 2466 y(else)g(if)h(\(lowercase_p)e(\(rl_line_buffer[i]\)\))386 ! 2518 y(rl_line_buffer[i])f(=)j(to_upper)f(\(rl_line_buffer[i]\);)290 ! 2570 y(})243 2622 y(/*)g(Move)h(point)f(to)g(on)h(top)f(of)h(the)f ! (last)h(character)e(changed.)h(*/)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(rl_point)22 b(=)i(\(direction)f(==)g ! (1\))h(?)g(end)f(-)h(1)g(:)f(start;)243 235 y(return)g(\(0\);)195 ! 287 y(})75 408 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 ! 502 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 ! 557 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 612 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 667 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 721 ! 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 ! 776 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 ! 831 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o ! (ually)l(.)137 896 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 951 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 1005 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 1060 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 1115 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 1170 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 1225 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)75 1279 y(p)q(erforms)c(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 1334 y(\(see)c(the)g(description)i(of)e ! Ft(rl_free_line_state)e(\(\))p Fu(\).)137 1399 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 1454 ! 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 1509 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 1563 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 1618 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 1673 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 1728 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 1783 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 1847 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 1902 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 1957 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 ! 2012 y(signal)e(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g ! (state)e(is)i(not)f(corrupted.)1661 2097 y(V)l(ariable)-1749 ! b Fi(int)20 b Fh(rl)p 215 2097 18 3 v 21 w(catc)n(h)p ! 366 2097 V 22 w(signals)195 2151 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 2206 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 2271 y(The)g(default)h(v)m(alue)h ! (of)d Ft(rl_catch_signals)f Fu(is)j(1.)1661 2356 y(V)l(ariable)-1749 ! b Fi(int)20 b Fh(rl)p 215 2356 V 21 w(catc)n(h)p 366 ! 2356 V 22 w(sigwinc)n(h)195 2411 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 2476 y(The)h(default)h(v)m(alue)h(of)d ! Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 2560 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 2615 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 2670 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.)p eop ! %%Page: 32 34 ! 32 33 bop 75 -58 a Fu(32)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(clean)n(up)p 450 183 V 22 w(after)p 590 183 ! V 20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 238 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 293 ! 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 ! 348 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 437 y(F)l(unction)-1749 ! b Fi(void)20 b Fh(rl)p 241 437 V 21 w(free)p 356 437 ! V 20 w(line)p 464 437 V 23 w(state)j Fg(\()p Ft(void)p ! Fg(\))195 492 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 ! 546 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 ! 601 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 656 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 711 y(to)d(ab)q(ort)f(the)h(curren)o(t)h(input)g ! (line.)1650 800 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p ! 241 800 V 21 w(reset)p 383 800 V 20 w(after)p 521 800 ! V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 855 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 910 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 999 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 1054 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 1109 y(receiv)o(ed.)1650 1198 ! y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1198 V ! 21 w(resize)p 401 1198 V 22 w(terminal)j Fg(\()p Ft(void)p ! Fg(\))195 1253 y Fu(Up)q(date)16 b(Readline's)h(in)o(ternal)f(screen)f ! (size.)137 1342 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 ! 1431 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1431 ! V 21 w(set)p 307 1431 V 20 w(signals)j Fg(\()p Ft(void)p ! Fg(\))195 1486 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 1541 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 1596 y(catch_signals)13 ! b Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)1650 1685 y(F)l(unction)-1749 ! b Fi(int)20 b Fh(rl)p 215 1685 V 21 w(clear)p 354 1685 ! V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1740 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 1865 y Fs(2.6)33 b(Custom)21 ! b(Completers)137 1961 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 2016 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 2070 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 ! 2125 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75 ! 2234 y Fl(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137 ! 2330 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 2385 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 2439 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 2494 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 2549 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 ! 2604 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 ! 2670 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q ! (erform)g(completion:)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)100 183 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 238 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 293 y(ing)p 228 293 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 ! 348 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 ! 402 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 ! 457 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)100 ! 525 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 580 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 635 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 703 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 758 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 813 ! 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 868 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 922 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 977 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 1032 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 1087 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 ! 1141 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 1196 y(it)g(has)h(\014nished)g(with)g(them.)1650 ! 1292 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1292 ! 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h ! (invoking_key)p Fg(\))195 1347 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 1402 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 1456 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g ! (\014lename)h(completion.)1661 1552 y(V)l(ariable)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 1552 V 21 w(completion)p ! 686 1552 V 21 w(en)n(try)p 839 1552 V 21 w(function)195 ! 1607 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 1662 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 1717 y(fault)11 b(\014lename)h(generator)d(function,)j Ft(filename_completion_function) ! g(\(\))p Fu(,)f(is)g(used.)75 1832 y Fl(2.6.2)30 b(Completion)20 ! b(F)-5 b(unctions)137 1930 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 2026 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 ! 2026 V 21 w(complete)p 460 2026 V 21 w(in)n(ternal)k ! Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 2081 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 2081 14 2 v 16 w(to)p 1162 2081 V 16 w(do)21 b Fu(sa)o(ys)c(what)h ! (to)g(do)g(with)h(the)195 2136 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 2191 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 2245 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 2300 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f ! (completion.)1650 2396 y(F)l(unction)-1749 b Fi(int)20 ! b Fh(rl)p 215 2396 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 ! b(ignore,)g(int)h(invoking_key)p Fg(\))195 2451 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 ! 2506 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 2560 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 2615 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 2670 y Fm(in)o(v)o(oking)p 364 ! 2670 14 2 v 17 w(k)o(ey)p Fu(.)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)19 b Fh(rl)p 214 183 ! 18 3 v 21 w(p)r(ossible)p 432 183 V 20 w(completions)k ! Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))195 ! 238 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 293 y Ft(rl_complete_internal)12 b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p ! Fu('.)1650 396 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p ! 215 396 V 21 w(insert)p 378 396 V 21 w(completions)j Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195 ! 451 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 505 ! 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 ! 560 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p ! Ft(*)p Fu('.)1650 663 y(F)l(unction)-1749 b Fi(char)20 ! b(**)f Fh(completion)p 547 663 V 21 w(matc)n(hes)j Fg(\()p ! Ft(char)15 b(*text,)f(CPFunction)283 718 y(*entry_func)p ! Fg(\))195 773 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 828 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 ! 882 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 937 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 1010 y Fm(en)o(try)p ! 302 1010 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 1065 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 1120 y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714 ! 1120 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 1174 y(are)g(no)g(more)g(matc)o(hes.) ! 1650 1277 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(\014lename)p ! 455 1277 18 3 v 20 w(completion)p 749 1277 V 21 w(function)k ! Fg(\()p Ft(char)15 b(*text,)f(int)283 1332 y(state)p ! Fg(\))195 1387 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 1442 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 1497 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 ! 1551 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h ! (functions.)1650 1654 y(F)l(unction)-1749 b Fi(char)20 ! b(*)f Fh(username)p 487 1654 V 19 w(completion)p 780 ! 1654 V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283 ! 1709 y(state)p Fg(\))195 1764 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 1819 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 1874 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 1997 y Fl(2.6.3)30 ! b(Completion)20 b(V)-5 b(ariables)1661 2129 y Fu(V)l(ariable)-1749 ! b Fi(Function)20 b(*)g Fh(rl)p 391 2129 V 21 w(completion)p ! 686 2129 V 21 w(en)n(try)p 839 2129 V 21 w(function)195 ! 2183 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 2238 y(to)f(use)g Ft(filename_entry_function)d(\(\))p ! Fu(,)j(the)g(default)h(\014lename)g(completer.)1661 2341 y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p ! 469 2341 V 21 w(attempted)p 749 2341 V 20 w(completion)p ! 1043 2341 V 21 w(function)195 2396 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 2451 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 2506 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 2560 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 ! 2615 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 2670 y(strings)f(returned) ! h(will)h(b)q(e)e(used.)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)1661 183 y(V)l(ariable)-1749 b Fi(CPFunction)21 b(*)e Fh(rl)p 443 183 18 3 v 21 w(\014lename)p 672 183 ! V 20 w(quoting)p 881 183 V 21 w(function)195 238 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 293 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 348 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 402 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 ! 402 14 2 v 16 w(t)o(yp)q(e)p Fu(,)h(and)f Fm(quote)p ! 1480 402 V 16 w(p)q(oin)o(ter)p Fu(.)30 b(The)195 457 ! 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 457 V 16 w(t)o(yp)q(e)i ! Fu(is)f(either)f Ft(SINGLE_MATCH)p Fu(,)e(if)195 512 ! 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 ! 567 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 567 V ! 16 w(p)q(oin)o(ter)195 622 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 676 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o ! (haracter.)1661 765 y(V)l(ariable)-1749 b Fi(CPFunction)21 ! b(*)e Fh(rl)p 443 765 18 3 v 21 w(\014lename)p 672 765 ! V 20 w(dequoting)p 939 765 V 21 w(function)195 820 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 ! 875 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 ! 930 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 ! 985 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 985 14 2 v 16 ! w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 1039 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 1039 V 16 w(c)o(har)195 1094 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 ! 1183 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p ! 391 1183 18 3 v 21 w(c)n(har)p 519 1183 V 20 w(is)p 577 ! 1183 V 22 w(quoted)p 770 1183 V 20 w(p)195 1238 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 1293 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)195 1348 y(program)e(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 1403 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 ! 1457 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 1512 ! y Fu(should)d(b)q(e)g(used)g(to)e(break)i(w)o(ords)e(for)h(the)g ! (completer.)1661 1601 y(V)l(ariable)-1749 b Fi(int)20 ! b Fh(rl)p 215 1601 V 21 w(completion)p 510 1601 V 21 ! w(query)p 673 1601 V 21 w(items)195 1656 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 1711 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 1766 y(default)16 ! b(v)m(alue)g(is)g(100.)1661 1855 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 1855 V 21 w(basic)p 430 ! 1855 V 21 w(w)n(ord)p 575 1855 V 21 w(break)p 736 1855 ! V 20 w(c)n(haracters)195 1910 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 1964 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 2019 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g ! Ft(")g(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 2108 y(V)l(ariable)-1749 ! b Fi(char)20 b(*)f Fh(rl)p 286 2108 V 21 w(basic)p 430 ! 2108 V 21 w(quote)p 590 2108 V 21 w(c)n(haracters)195 ! 2163 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 2252 y(V)l(ariable)-1749 b ! Fi(char)20 b(*)f Fh(rl)p 286 2252 V 21 w(completer)p ! 555 2252 V 21 w(w)n(ord)p 700 2252 V 20 w(break)p 860 ! 2252 V 20 w(c)n(haracters)195 2307 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 2362 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 2366 ! 21 36 v 1661 2451 a(V)l(ariable)-1749 b Fi(char)20 b(*)f ! Fh(rl)p 286 2451 18 3 v 21 w(completer)p 555 2451 V 21 ! w(quote)p 715 2451 V 21 w(c)n(haracters)195 2506 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 2560 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 2615 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 2670 y(within)h(this)g(list.)p ! eop ! %%Page: 36 38 ! 36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)1661 ! 183 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 ! 183 18 3 v 21 w(\014lename)p 515 183 V 20 w(quote)p 674 ! 183 V 21 w(c)n(haracters)195 238 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 293 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 ! 398 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 ! 398 V 21 w(sp)r(ecial)p 473 398 V 22 w(pre\014xes)195 ! 452 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 507 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 562 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 ! 617 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 722 y(V)l(ariable)-1749 ! b Fi(int)20 b Fh(rl)p 215 722 V 21 w(completion)p 510 ! 722 V 21 w(app)r(end)p 715 722 V 19 w(c)n(haracter)195 ! 776 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 ! 831 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 ! 886 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 941 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 ! 996 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 ! 1050 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d ! (sp)q(eci\014cation.)1661 1155 y(V)l(ariable)-1749 b ! Fi(int)20 b Fh(rl)p 215 1155 V 21 w(ignore)p 391 1155 ! V 20 w(completion)p 685 1155 V 21 w(duplicates)195 1210 ! 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.)1661 1315 y(V)l(ariable)-1749 ! b Fi(int)20 b Fh(rl)p 215 1315 V 21 w(\014lename)p 444 ! 1315 V 20 w(completion)p 738 1315 V 21 w(desired)195 ! 1369 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 ! 1424 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 1479 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 ! 1534 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 ! 1589 y(an)o(y)f(em)o(b)q(edded)i(w)o(ord)d(break)h(c)o(haracters.)1661 ! 1693 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1693 ! V 21 w(\014lename)p 444 1693 V 20 w(quoting)p 653 1693 ! V 21 w(desired)195 1748 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 ! 1803 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 ! 1858 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 1913 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 1967 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 2022 y(quoting_function)p Fu(.)1661 ! 2127 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2127 ! V 21 w(inhibit)p 399 2127 V 23 w(completion)195 2182 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 ! 2236 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 2341 y(V)l(ariable)-1749 b ! Fi(Function)20 b(*)g Fh(rl)p 391 2341 V 21 w(ignore)p ! 567 2341 V 20 w(some)p 714 2341 V 19 w(completions)p ! 1030 2341 V 21 w(function)195 2396 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 2451 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 2506 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 2560 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 2615 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 2670 y(freed.)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(Function)20 ! b(*)g Fh(rl)p 391 183 18 3 v 21 w(directory)p 639 183 ! V 21 w(completion)p 934 183 V 21 w(ho)r(ok)195 238 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 ! 293 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 ! 348 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 ! 402 y(v)m(ariables)j(in)f(pathnames.)1661 495 y(V)l(ariable)-1749 ! b Fi(VFunction)20 b(*)g Fh(rl)p 417 495 V 21 w(completion)p ! 712 495 V 21 w(displa)n(y)p 906 495 V 22 w(matc)n(hes)p ! 1131 495 V 20 w(ho)r(ok)195 549 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 604 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 ! 659 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 714 y(**)p Fm(matc)o(hes)p Fu(,)g Ft(int)e ! Fm(n)o(um)p 623 714 14 2 v 17 w(matc)o(hes)p Fu(,)h Ft(int)g ! Fm(max)p 1015 714 V 16 w(length)p Fu(\))g(where)g Fm(matc)o(hes)i ! Fu(is)e(the)g(arra)o(y)195 769 y(of)17 b(matc)o(hing)h(strings,)f ! Fm(n)o(um)p 702 769 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 823 ! y Fm(max)p 283 823 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 878 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 933 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 ! 988 y(ho)q(ok.)75 1100 y Fl(2.6.4)30 b(A)21 b(Short)f(Completion)g ! (Example)137 1196 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 1251 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 ! 1306 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()195 443 y(#include)g()195 ! 495 y(#include)g()195 546 y(#include)g()195 ! 598 y(#include)g()195 702 y(#include)g ! ()195 754 y(#include)g()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 *************** *** 4004,4040 **** 2518 y(char)g(*stripwhite)g(\(\);)195 2570 y(COMMAND)g(*find_command)f (\(\);)p eop ! %%Page: 36 38 ! 36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)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: 37 39 ! 37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g ! (Readline)844 b(37)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 --- 4234,4271 ---- 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 *************** *** 4052,4069 **** (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: 38 40 ! 38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)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 --- 4283,4301 ---- (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 *************** *** 4082,4096 **** (~/.inputrc)e(file.)h(*/)243 2570 y(rl_readline_name)e(=)j("FileMan";)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)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 --- 4314,4327 ---- (~/.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 *************** *** 4123,4138 **** (from)g(the)h(command)f(list.)g(*/)p 1985 2632 21 42 v eop ! %%Page: 40 42 ! 40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)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 --- 4354,4370 ---- (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 *************** *** 4150,4195 **** 2518 y({)243 2570 y(too_dangerous)e(\("rename"\);)243 2622 y(return)h(\(1\);)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)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: 42 44 ! 42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)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 --- 4382,4426 ---- 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 *************** *** 4200,4233 **** 2466 y(char)h(*ignore;)195 2518 y({)243 2570 y(char)f(dir[1024],)g(*s;) p 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(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: 44 46 ! 44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)p ! eop ! %%Page: 45 47 ! 45 46 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(45)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(.) --- 4431,4460 ---- 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(.) *************** *** 4257,4273 **** 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: 46 48 ! 46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)p eop ! %%Page: 47 49 ! 47 48 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 ! b(47)75 183 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 b(Index)75 345 y Fs(\()75 403 y Fd(\(int)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(27)75 513 y Fs(A)75 571 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(15)75 621 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(11)75 671 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g --- 4484,4500 ---- 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(\()75 403 y Fd(\(int)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(28)75 513 y Fs(A)75 571 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(16)75 621 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(11)75 671 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g *************** *** 4282,4294 **** b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 22 b Ff(13)75 989 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(14)75 1038 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(11)75 ! 1088 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(11)75 1138 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(11)75 1188 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(.) --- 4509,4521 ---- b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) 22 b Ff(13)75 989 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10 ! b(\(M-DEL\))d Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) ! 19 b Ff(13,)13 b(14)75 1038 y Fd(backward-w)o(or)o(d)d(\(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(11)75 1088 ! 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(11)75 1138 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(11)75 1188 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(.) *************** *** 4296,4818 **** 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(15)75 1406 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(13)75 1456 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(16)75 1506 ! 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(16)75 ! 1555 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(11)75 1605 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 1655 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(15)75 1705 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(4)75 ! 1755 y Fd(completion)p 276 1755 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(32)75 ! 1804 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(4)75 1854 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(14)75 1904 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(14)75 1954 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(14)75 ! 2064 y Fs(D)75 2122 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(12)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(14)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(14)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(28)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(28)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(28)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(16)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(13)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(16)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(16)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(16)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(15)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(12)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(11)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(16)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(32)1012 919 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(11)1012 969 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(12)1012 1019 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(11)1012 ! 1069 y Fd(free)p 1094 1069 V 13 w(undo)p 1187 1069 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(26)1012 1178 y Fs(H)1012 1236 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(12)1012 1286 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(12)1012 ! 1336 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 1445 y Fs(I)1012 1503 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 1553 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(16)1012 ! 1602 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(15)1012 1712 y Fs(K)1012 1770 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(5)1012 1820 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(13)1012 1869 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(14)1012 1919 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(13)1012 1969 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(14)1012 2078 y Fs(L)1012 2136 y Fd(lowercase)p 1194 ! 2136 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(28)1012 2245 y Fs(M)1012 2303 ! 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(5)1012 2353 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(15)1012 2403 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 2512 y Fs(N)1012 2570 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(11)1012 2620 y Fd(non-increme)o(nt)o(al-)o(fo)o(rwa)o(rd)o(-se)o ! (arc)o(h-)o(his)o(to)o(ry)10 b(\(M-n\))1093 2670 y 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(.)g(.)17 b Ff(12)p eop ! %%Page: 48 50 ! 48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)75 ! 183 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 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(12)75 283 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(28)75 386 y Fs(O)75 444 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 547 y Fs(P)75 605 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(15)75 655 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(16)75 704 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(11)75 807 y Fs(Q)75 865 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(13)75 968 y Fs(R)75 1026 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(15)75 1076 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 1126 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(11)75 1176 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(12)75 1225 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(16)75 1275 y Fd(rl)p 117 1275 12 2 v 13 w(add)p ! 190 1275 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 1325 y Fd(rl)p 117 ! 1325 V 13 w(add)p 190 1325 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(26)75 ! 1375 y Fd(rl)p 117 1375 V 13 w(attempted)p 310 1375 V ! 11 w(completion)p 520 1375 V 10 w(function)h Fe(.)6 b(.)g(.)h(.)f(.)g ! (.)g(.)g(.)g(.)g(.)24 b Ff(32)75 1425 y Fd(rl)p 117 1425 ! V 13 w(basic)p 230 1425 V 13 w(quote)p 343 1425 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(33)75 1474 y Fd(rl)p ! 117 1474 V 13 w(basic)p 230 1474 V 13 w(word)p 323 1474 ! V 12 w(break)p 435 1474 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(33)75 1524 y Fd(rl)p ! 117 1524 V 13 w(begin)p 230 1524 V 13 w(undo)p 323 1524 ! 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 1574 y Fd(rl)p 117 1574 V 13 w(bind)p 210 ! 1574 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(24)75 1624 y Fd(rl)p 117 ! 1624 V 13 w(bind)p 210 1624 V 13 w(key)p 283 1624 V 13 ! w(in)p 336 1624 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(24)75 1674 y Fd(rl)p 117 1674 V 13 w(binding)p ! 270 1674 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(22)75 1724 y Fd(rl)p 117 1724 V 13 w(callback)p ! 290 1724 V 11 w(handler)p 441 1724 V 12 w(install)7 b ! Fe(.)s(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 ! b Ff(28)75 1773 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(29)75 1823 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(29)75 1873 y Fd(rl)p ! 117 1873 V 13 w(char)p 210 1873 V 13 w(is)p 263 1873 ! V 13 w(quoted)p 396 1873 V 12 w(p)f 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(33)75 1923 y Fd(rl)p 117 1923 V 13 w(clear)p ! 230 1923 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(27)75 1973 y Fd(rl)p 117 1973 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(31)75 2022 y Fd(rl)p 117 2022 V 13 w(complete)p ! 290 2022 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(31)75 2072 y Fd(rl)p 117 2072 V 13 w(completer)p ! 310 2072 V 11 w(quote)p 421 2072 V 12 w(characters)f ! Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 ! b Ff(33)75 2122 y Fd(rl)p 117 2122 V 13 w(completer)p ! 310 2122 V 11 w(word)p 401 2122 V 13 w(break)p 514 2122 ! V 12 w(character)o(s)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 ! b Ff(33)75 2172 y Fd(rl)p 117 2172 V 13 w(completion)p ! 329 2172 V 11 w(append)p 461 2172 V 11 w(character)f ! Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 ! b Ff(34)75 2222 y Fd(rl)p 117 2222 V 13 w(completion)p ! 329 2222 V 11 w(entry)p 441 2222 V 12 w(function)j Fe(.)6 ! b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(31,)13 ! b(32)75 2271 y Fd(rl)p 117 2271 V 13 w(completion)p 329 ! 2271 V 11 w(query)p 441 2271 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(33)75 2321 y Fd(rl)p 117 2321 V 13 w(copy)p 210 ! 2321 V 13 w(keymap)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(23)75 2371 y Fd(rl)p 117 2371 V 13 ! w(copy)p 210 2371 V 13 w(text)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(27)75 2421 y Fd(rl)p ! 117 2421 V 13 w(delete)p 250 2421 V 12 w(text)t Fe(.)5 ! b(.)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(.)g(.)17 ! b Ff(27)75 2471 y Fd(rl)p 117 2471 V 13 w(directory)p ! 310 2471 V 11 w(completion)p 520 2471 V 10 w(hook)i Fe(.)7 ! b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 ! b Ff(34)75 2521 y Fd(rl)p 117 2521 V 13 w(discard)p 270 ! 2521 V 12 w(keymap)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(23)75 2570 y Fd(rl)p 117 2570 V 13 w(do)p 170 2570 ! V 14 w(undo)9 b Fe(.)t(.)d(.)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(.)22 b Ff(26)75 2620 y Fd(rl)p 117 ! 2620 V 13 w(done)15 b Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)16 b Ff(21)75 ! 2670 y Fd(rl)p 117 2670 V 13 w(end)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) ! h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 ! b Ff(21)1012 183 y Fd(rl)p 1054 183 V 14 w(end)p 1128 ! 183 V 13 w(undo)p 1221 183 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 233 y Fd(rl)p 1054 233 ! V 14 w(event)p 1168 233 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(22)1012 283 y ! Fd(rl)p 1054 283 V 14 w(executing)p 1247 283 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(22)1012 333 y ! Fd(rl)p 1054 333 V 14 w(filename)p 1228 333 V 11 w(completio)o(n)p ! 1438 333 V 11 w(desired)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)19 b Ff(34)1012 382 y Fd(rl)p 1054 382 ! V 14 w(filename)p 1228 382 V 11 w(dequoting)p 1418 382 ! V 10 w(function)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)19 b Ff(33)1012 432 y Fd(rl)p 1054 432 V 14 w(filename)p ! 1228 432 V 11 w(quote)p 1339 432 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(33)1012 482 y Fd(rl)p 1054 482 V 14 w(filename)p ! 1228 482 V 11 w(quoting)p 1379 482 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(34)1012 532 y Fd(rl)p 1054 532 V 14 w(filename)p ! 1228 532 V 11 w(quoting)p 1379 532 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(32)1012 582 y Fd(rl)p 1054 582 V 14 w(forced)p 1188 ! 582 V 12 w(update)p 1320 582 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(26)1012 632 y Fd(rl)p 1054 632 V 14 w(function)p ! 1228 632 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(25)1012 681 y Fd(rl)p 1054 681 V 14 w(function)p ! 1228 681 V 11 w(of)p 1279 681 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 731 y Fd(rl)p 1054 731 V 14 w(generic)p ! 1208 731 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(24)1012 781 y Fd(rl)p 1054 781 V 14 w(get)p ! 1128 781 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(23)1012 831 y Fd(rl)p 1054 ! 831 V 14 w(get)p 1128 831 V 13 w(keymap)p 1261 831 V ! 11 w(by)p 1312 831 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 881 y Fd(rl)p 1054 881 V 14 w(get)p 1128 ! 881 V 13 w(keymap)p 1261 881 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 930 y Fd(rl)p 1054 930 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(27)1012 980 y ! Fd(rl)p 1054 980 V 14 w(getc)p 1148 980 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(22)1012 1030 y Fd(rl)p 1054 1030 V 14 w(ignore)p ! 1188 1030 V 12 w(completi)o(on)p 1399 1030 V 11 w(duplicate)o(s)d ! Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 ! b Ff(34)1012 1080 y Fd(rl)p 1054 1080 V 14 w(ignore)p ! 1188 1080 V 12 w(some)p 1280 1080 V 12 w(completion)o(s)p ! 1511 1080 V 11 w(function)j Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)24 ! b Ff(34)1012 1130 y Fd(rl)p 1054 1130 V 14 w(inhibit)p ! 1208 1130 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(34)1012 1180 y Fd(rl)p 1054 1180 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 1229 y Fd(rl)p 1054 1229 V 14 w(insert)p ! 1188 1229 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(31)1012 1279 y Fd(rl)p 1054 1279 V 14 w(insert)p ! 1188 1279 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(27)1012 1329 y Fd(rl)p 1054 1329 ! 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 1379 y Fd(rl)p 1054 1379 ! V 14 w(invoking)p 1228 1379 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(25)1012 1429 y Fd(rl)p 1054 1429 ! V 14 w(invoking)p 1228 1429 V 11 w(keyseqs)p 1379 1429 ! V 11 w(in)p 1430 1429 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(25)1012 ! 1478 y Fd(rl)p 1054 1478 V 14 w(kill)p 1148 1478 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(27)1012 1528 y Fd(rl)p 1054 1528 V 14 ! w(library)p 1208 1528 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 1578 y Fd(rl)p 1054 1578 V 14 w(line)p ! 1148 1578 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 1628 y Fd(rl)p 1054 1628 ! V 14 w(list)p 1148 1628 V 12 w(funmap)p 1280 1628 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(25)1012 ! 1678 y Fd(rl)p 1054 1678 V 14 w(make)p 1148 1678 V 12 ! w(bare)p 1240 1678 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(23)1012 1727 y Fd(rl)p 1054 1727 V 14 w(make)p ! 1148 1727 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(23)1012 1777 y Fd(rl)p 1054 1777 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 1827 ! y Fd(rl)p 1054 1827 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 ! 1877 y Fd(rl)p 1054 1877 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(26)1012 1927 y Fd(rl)p 1054 1927 V 14 w(named)p ! 1168 1927 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 1977 y Fd(rl)p 1054 1977 V 14 w(on)p ! 1108 1977 V 13 w(new)p 1181 1977 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)1012 2026 ! y Fd(rl)p 1054 2026 V 14 w(outstream)15 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(.)19 b Ff(22)1012 2076 ! y Fd(rl)p 1054 2076 V 14 w(parse)p 1168 2076 V 12 w(and)p ! 1240 2076 V 13 w(bind)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(25)1012 2126 y Fd(rl)p 1054 2126 V 14 w(pending)p ! 1208 2126 V 11 w(input)14 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(21)1012 2176 y Fd(rl)p 1054 2176 V 14 ! w(point)k 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(.)h(.) ! f(.)g(.)g(.)g(.)g(.)24 b Ff(21)1012 2226 y Fd(rl)p 1054 ! 2226 V 14 w(possible)p 1228 2226 V 11 w(completio)o(ns)6 ! b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)23 b Ff(31)1012 2275 y Fd(rl)p 1054 2275 ! V 14 w(prompt)d 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(.)h(.)f(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)23 b Ff(22)1012 2325 y Fd(rl)p ! 1054 2325 V 14 w(read)p 1148 2325 V 12 w(init)p 1240 ! 2325 V 13 w(file)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(25)1012 2375 y Fd(rl)p 1054 2375 V 14 w(read)p 1148 ! 2375 V 12 w(key)8 b Fe(.)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(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)21 b Ff(27)1012 2425 y Fd(rl)p 1054 ! 2425 V 14 w(readline)p 1228 2425 V 11 w(name)14 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(22)1012 ! 2475 y Fd(rl)p 1054 2475 V 14 w(redisplay)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(26)1012 2524 y Fd(rl)p 1054 2524 V 14 w(redisplay)p ! 1247 2524 V 10 w(function)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 ! b Ff(22)1012 2574 y Fd(rl)p 1054 2574 V 14 w(reset)p ! 1168 2574 V 12 w(line)p 1260 2574 V 12 w(state)9 b Fe(.)t(.)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(27)1012 2624 y Fd(rl)p 1054 2624 ! V 14 w(reset)p 1168 2624 V 12 w(terminal)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(28)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 Fd(rl)p 117 183 12 2 v 13 w(set)p 190 183 ! 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 233 y Fd(rl)p 117 233 V 13 w(special)p ! 270 233 V 12 w(prefixes)g Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 ! b Ff(33)75 283 y Fd(rl)p 117 283 V 13 w(startup)p 270 ! 283 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 333 y Fd(rl)p 117 333 V 13 w(stuff)p ! 230 333 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(27)75 382 y Fd(rl)p 117 382 V ! 13 w(terminal)p 290 382 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 432 y Fd(rl)p 117 432 V ! 13 w(unbind)p 250 432 V 12 w(command)p 402 432 V 12 w(in)p ! 454 432 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(24)75 ! 482 y Fd(rl)p 117 482 V 13 w(unbind)p 250 482 V 12 w(function)p ! 422 482 V 11 w(in)p 473 482 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(24)75 532 y Fd(rl)p 117 532 V 13 w(unbind)p 250 ! 532 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(24)75 582 y Fd(rl)p 117 582 V 13 ! w(unbind)p 250 582 V 12 w(key)p 322 582 V 13 w(in)p 375 ! 582 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(24)75 681 y Fs(S)75 739 y Fd(self-inser)o(t)10 b(\(a,)h(b,)h(A,)g ! (1,)g(!,)g(...\))t Fe(.)5 b(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g ! (.)17 b Ff(13)75 789 y Fd(set-mark)10 b(\(C-@\))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 839 ! y(sho)o(w-all-if-am)o(biguo)q(us)7 b Fe(.)i(.)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(.)19 b Ff(6)75 889 y Fd(start-kbd-)o(ma)o(cro)9 b(\(C-x)i(\(\))f ! Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)h(.)f(.)23 b Ff(15)75 989 y Fs(T)75 1047 y Fd(tab-insert)9 ! b(\(M-TAB\))c Fe(.)t(.)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(13)75 1096 y Fd(tilde-expa)o(nd)9 b(\(M-~\))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(16)75 1146 y Fd(to)p 117 ! 1146 V 13 w(lower)9 b Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(28)75 1196 ! y Fd(to)p 117 1196 V 13 w(upper)9 b Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b ! Ff(28)1012 183 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(13)1012 233 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(13)1012 347 ! y Fs(U)1012 405 y Fd(undo)12 b(\(C-)p 1166 405 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(16)1012 ! 454 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(14)1012 504 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(13)1012 554 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(14)1012 ! 604 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(13)1012 654 y Fd(uppercase)p 1194 654 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(28)1012 704 y Fd(username)p 1174 ! 704 V 11 w(completion)p 1385 704 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(32)1012 817 y Fs(V)1012 875 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 989 y Fs(Y)1012 1047 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(14)1012 1096 y Fd(yank-last-a)o(rg)9 ! b(\(M-.,)i(M-)p 1433 1096 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(12)1012 1146 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(12)1012 1196 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(14)p eop ! %%Page: 50 52 ! 50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)p eop ! %%Page: -1 53 ! -1 52 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 --- 4523,5093 ---- 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(15)75 1406 y Fd(capitalize)o(-w)o(ord)9 b(\(M-c\))c ! Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g ! (.)g(.)g(.)17 b Ff(12,)c(13)75 1456 y Fd(character-)o(se)o(arc)o(h)d ! (\(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(16)75 1506 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(16)75 1555 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(11)75 1605 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 1655 ! 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(15)75 1705 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(4)75 1755 y Fd(completion)p ! 276 1755 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 1804 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(4)75 1854 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 b(\(\))5 ! b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) ! g(.)g(.)g(.)17 b Ff(13,)c(14)75 1904 y Fd(copy-forwa)o(rd)o(-wo)o(rd)c ! (\(\))d Fe(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)h(.)f(.)g(.)18 b Ff(13,)13 b(14)75 1954 y ! Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)c(\(\))s Fe(.)d(.)g(.)g(.)g(.)g(.)g ! (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 ! b Ff(13,)d(14)75 2064 y Fs(D)75 2122 y Fd(delete-cha)o(r)d(\(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(12)75 ! 2172 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(15)75 2222 y Fd(delete-hor)o(iz)o(ont)o(al)o ! (-sp)o(ace)9 b(\(\))e Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) ! g(.)g(.)19 b Ff(13,)13 b(14)75 2271 y Fd(digit-argu)o(me)o(nt)c(\(M-0,) ! i(M-1,)h(...)f(M--\))t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16 ! b Ff(14)75 2321 y Fd(digit_p)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 2371 y Fd(digit_valu)o(e)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Ff(29)75 2421 ! 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(28)75 ! 2471 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 2521 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(16)75 2570 y Fd(downcase-w)o(or)o(d)10 ! b(\(M-l\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12,)13 b(13)75 ! 2620 y Fd(dump-funct)o(io)o(ns)c(\(\))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(16)75 2670 y Fd(dump-macro)o(s)10 ! b(\(\))5 b Fe(.)g(.)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(.)17 ! b Ff(16,)c(17)1012 345 y Fd(dump-variab)o(le)o(s)d(\(\))f ! Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(16,)13 b(17)1012 463 ! y Fs(E)1012 521 y Ff(editing-mo)q(de)g 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 ! 571 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 620 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(15)1012 ! 670 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)19 ! b Ff(11,)13 b(12)1012 720 y Fd(end-of-line)c(\(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(11)1012 ! 770 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(16)1012 ! 820 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 937 y Fs(F)1012 ! 995 y Fd(filename)p 1174 995 V 11 w(completion)p 1385 ! 995 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(34)1012 1045 y Fd(forward-bac)o(kw)o(ard)o ! (-d)o(ele)o(te)o(-ch)o(ar)9 b(\(\))g Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.) ! 22 b Ff(12,)13 b(13)1012 1095 y Fd(forward-cha)o(r)d(\(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(11)1012 ! 1145 y Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))t ! Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b ! Ff(11,)c(12)1012 1194 y Fd(forward-wor)o(d)d(\(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(11)1012 ! 1244 y Fd(free)p 1094 1244 V 13 w(undo)p 1187 1244 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(26)1012 1362 y Fs(H)1012 1420 y Fd(history-sea)o(rc)o(h-b)o ! (ac)o(kwa)o(rd)9 b(\(\))e Fe(.)e(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)20 b Ff(11,)13 b(12)1012 1470 y Fd(history-sea)o(rc)o(h-f)o ! (or)o(war)o(d)d(\(\))e Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g ! (.)g(.)g(.)g(.)21 b Ff(11,)13 b(12)1012 1519 y(horizon)o(tal-scrol)q ! (l-mo)r(de)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(.)g(.)24 ! b Ff(5)1012 1637 y Fs(I)1012 1695 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 1745 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(16)1012 ! 1795 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(15)1012 1844 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(5)1012 ! 1962 y Fs(K)1012 2020 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(5)1012 2070 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(13)1012 2120 y Fd(kill-region)9 ! b(\(\))c 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(.)18 ! b Ff(13,)13 b(14)1012 2169 y Fd(kill-whole-)o(li)o(ne)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(.)22 b Ff(13,)13 b(14)1012 2219 ! y Fd(kill-word)d(\(M-d\))t Fe(.)t(.)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(.)17 ! b Ff(13,)c(14)1012 2337 y Fs(L)1012 2395 y Fd(lowercase)p ! 1194 2395 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(28)1012 2512 y Fs(M)1012 ! 2570 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 2620 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(15)1012 2670 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)p eop ! %%Page: 50 52 ! 50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)75 ! 183 y Fs(N)75 241 y Fd(next-histo)o(ry)9 b(\(C-n\))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(11)75 ! 291 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\))158 341 y Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b ! Ff(11,)13 b(12)75 391 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)c(\(M-p\))158 441 y Fe(.)d(.)h(.)f(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 ! b Ff(11,)13 b(12)75 490 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(28)75 591 y Fs(O)75 649 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 750 y Fs(P)75 808 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(15)75 858 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(16)75 908 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(11)75 1008 y Fs(Q)75 1067 ! y Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))t Fe(.)t(.)6 ! b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 ! b Ff(12,)c(13)75 1167 y Fs(R)75 1225 y Fd(re-read-in)o(it)o(-fi)o(le)c ! (\(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(16)75 1275 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 1325 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(11)75 1375 y Fd(reverse-se)o(ar) ! o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)17 b Ff(11,)c(12)75 1425 y Fd(revert-lin)o(e)d(\(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(16)75 ! 1474 y Fd(rl)p 117 1474 12 2 v 13 w(add)p 190 1474 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 1524 y Fd(rl)p 117 1524 V 13 ! w(add)p 190 1524 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(26)75 1574 y ! Fd(rl)p 117 1574 V 13 w(attempted)p 310 1574 V 11 w(completion)p ! 520 1574 V 10 w(function)h Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) ! 24 b Ff(34)75 1624 y Fd(rl)p 117 1624 V 13 w(basic)p ! 230 1624 V 13 w(quote)p 343 1624 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(35)75 1674 y Fd(rl)p 117 1674 V 13 ! w(basic)p 230 1674 V 13 w(word)p 323 1674 V 12 w(break)p ! 435 1674 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)21 b Ff(35)75 1724 y Fd(rl)p 117 1724 ! V 13 w(begin)p 230 1724 V 13 w(undo)p 323 1724 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 1773 ! y Fd(rl)p 117 1773 V 13 w(bind)p 210 1773 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(24)75 1823 y Fd(rl)p 117 1823 V 13 w(bind)p ! 210 1823 V 13 w(key)p 283 1823 V 13 w(in)p 336 1823 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(24)75 1873 y Fd(rl)p 117 1873 V 13 w(binding)p 270 ! 1873 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 1923 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(29)75 1973 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(29)75 2022 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(29)75 2072 y Fd(rl)p ! 117 2072 V 13 w(catch)p 230 2072 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(31)75 2122 y Fd(rl)p 117 2122 V 13 w(catch)p 230 2122 ! 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(31)75 2172 y Fd(rl)p 117 2172 V 13 w(char)p 210 ! 2172 V 13 w(is)p 263 2172 V 13 w(quoted)p 396 2172 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 2222 y Fd(rl)p 117 2222 V 13 w(cleanup)p 270 ! 2222 V 12 w(after)p 382 2222 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 2271 y Fd(rl)p 117 2271 V 13 ! w(clear)p 230 2271 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(27)75 2321 y Fd(rl)p 117 2321 ! V 13 w(clear)p 230 2321 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(32)75 2371 y Fd(rl)p 117 ! 2371 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(33)75 2421 y Fd(rl)p ! 117 2421 V 13 w(complete)p 290 2421 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(33)75 2471 y ! Fd(rl)p 117 2471 V 13 w(completer)p 310 2471 V 11 w(quote)p ! 421 2471 V 12 w(characters)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)h(.)f(.)g(.)19 b Ff(35)75 2521 y Fd(rl)p 117 2521 ! V 13 w(completer)p 310 2521 V 11 w(word)p 401 2521 V ! 13 w(break)p 514 2521 V 12 w(character)o(s)13 b Fe(.)6 ! b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(35)75 2570 y ! Fd(rl)p 117 2570 V 13 w(completion)p 329 2570 V 11 w(append)p ! 461 2570 V 11 w(character)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) ! g(.)g(.)g(.)18 b Ff(36)75 2620 y Fd(rl)p 117 2620 V 13 ! w(completion)p 329 2620 V 11 w(display)p 481 2620 V 11 ! w(matches)p 632 2620 V 11 w(hook)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)16 b Ff(37)75 2670 y Fd(rl)p 117 2670 V 13 w(completion)p ! 329 2670 V 11 w(entry)p 441 2670 V 12 w(function)21 b ! Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(33,)13 ! b(34)1012 183 y Fd(rl)p 1054 183 V 14 w(completio)o(n)p ! 1267 183 V 11 w(query)p 1378 183 V 12 w(items)h Fe(.)6 ! b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)17 b Ff(35)1012 233 y Fd(rl)p 1054 233 V 14 w(copy)p ! 1148 233 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(23)1012 283 y Fd(rl)p 1054 283 ! V 14 w(copy)p 1148 283 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(27)1012 333 ! y Fd(rl)p 1054 333 V 14 w(delete)p 1188 333 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(27)1012 382 y Fd(rl)p 1054 382 V 14 w(directory)p ! 1247 382 V 10 w(completion)p 1458 382 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 432 y Fd(rl)p 1054 432 V 14 w(discard)p ! 1208 432 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 482 y Fd(rl)p 1054 482 V 14 w(display)p ! 1208 482 V 11 w(match)p 1319 482 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(28)1012 532 y Fd(rl)p 1054 532 V 14 w(do)p ! 1108 532 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(26)1012 582 y Fd(rl)p ! 1054 582 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(21)1012 ! 632 y Fd(rl)p 1054 632 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 681 y Fd(rl)p 1054 681 V 14 w(end)p 1128 ! 681 V 13 w(undo)p 1221 681 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 731 y Fd(rl)p 1054 731 ! V 14 w(erase)p 1168 731 V 12 w(empty)p 1280 731 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 ! 781 y Fd(rl)p 1054 781 V 14 w(event)p 1168 781 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(22)1012 831 y Fd(rl)p 1054 831 V 14 w(executing)p ! 1247 831 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 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)16 ! b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 ! b Ff(36)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(36)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(25)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(generic)p 1208 1329 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 1379 y Fd(rl)p 1054 ! 1379 V 14 w(get)p 1128 1379 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 ! 1429 y Fd(rl)p 1054 1429 V 14 w(get)p 1128 1429 V 13 ! w(keymap)p 1261 1429 V 11 w(by)p 1312 1429 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 1478 y Fd(rl)p ! 1054 1478 V 14 w(get)p 1128 1478 V 13 w(keymap)p 1261 ! 1478 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 1528 y Fd(rl)p 1054 1528 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 1578 y Fd(rl)p 1054 1578 ! V 14 w(getc)p 1148 1578 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(22)1012 1628 y Fd(rl)p ! 1054 1628 V 14 w(ignore)p 1188 1628 V 12 w(completi)o(on)p ! 1399 1628 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 1678 y Fd(rl)p 1054 1678 ! V 14 w(ignore)p 1188 1678 V 12 w(some)p 1280 1678 V 12 ! w(completion)o(s)p 1511 1678 V 11 w(function)j Fe(.)6 ! b(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(36)1012 1727 y Fd(rl)p ! 1054 1727 V 14 w(inhibit)p 1208 1727 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(36)1012 1777 y Fd(rl)p ! 1054 1777 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 1827 y Fd(rl)p ! 1054 1827 V 14 w(insert)p 1188 1827 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 1877 y Fd(rl)p ! 1054 1877 V 14 w(insert)p 1188 1877 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(27)1012 1927 y Fd(rl)p 1054 1927 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 1977 y Fd(rl)p 1054 1977 V 14 w(invoking)p ! 1228 1977 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(25)1012 2026 y Fd(rl)p 1054 2026 V 14 w(invoking)p ! 1228 2026 V 11 w(keyseqs)p 1379 2026 V 11 w(in)p 1430 ! 2026 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(25)1012 2076 y Fd(rl)p ! 1054 2076 V 14 w(kill)p 1148 2076 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(27)1012 ! 2126 y Fd(rl)p 1054 2126 V 14 w(library)p 1208 2126 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 2176 y Fd(rl)p 1054 2176 V 14 w(line)p 1148 ! 2176 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 2226 y Fd(rl)p 1054 2226 V ! 14 w(list)p 1148 2226 V 12 w(funmap)p 1280 2226 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(25)1012 ! 2275 y Fd(rl)p 1054 2275 V 14 w(make)p 1148 2275 V 12 ! w(bare)p 1240 2275 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(23)1012 2325 y Fd(rl)p 1054 2325 V 14 w(make)p ! 1148 2325 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(23)1012 2375 y Fd(rl)p 1054 2375 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 2425 ! y Fd(rl)p 1054 2425 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 ! 2475 y Fd(rl)p 1054 2475 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(26)1012 2524 y Fd(rl)p 1054 2524 V 14 w(named)p ! 1168 2524 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 2574 y Fd(rl)p 1054 2574 V 14 w(on)p ! 1108 2574 V 13 w(new)p 1181 2574 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)1012 2624 ! y Fd(rl)p 1054 2624 V 14 w(outstream)15 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(.)19 b Ff(22)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(parse)p 230 ! 183 V 13 w(and)p 303 183 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 233 y Fd(rl)p 117 233 V 13 ! w(pending)p 270 233 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(21)75 283 y Fd(rl)p 117 283 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 333 y Fd(rl)p ! 117 333 V 13 w(possible)p 290 333 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 382 y Fd(rl)p 117 382 V ! 13 w(pre)p 190 382 V 13 w(input)p 303 382 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 ! 432 y Fd(rl)p 117 432 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 ! 482 y Fd(rl)p 117 482 V 13 w(read)p 210 482 V 13 w(init)p ! 303 482 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 532 y Fd(rl)p 117 532 V 13 w(read)p 210 532 ! 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 582 y Fd(rl)p 117 582 V ! 13 w(readline)p 290 582 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 632 y Fd(rl)p 117 632 ! 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 681 y Fd(rl)p 117 681 V ! 13 w(redisplay)p 310 681 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(22)75 731 y Fd(rl)p 117 731 V 13 w(reset)p 230 731 ! V 13 w(after)p 343 731 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 781 y Fd(rl)p 117 781 V 13 w(reset)p 230 781 ! V 13 w(line)p 323 781 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 831 y Fd(rl)p 117 831 V 13 w(reset)p ! 230 831 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(28)75 881 y Fd(rl)p 117 881 V 13 w(resize)p 250 ! 881 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(32)75 930 y Fd(rl)p 117 930 V 13 w(restore)p 270 ! 930 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(27)75 980 y Fd(rl)p 117 980 V 13 w(save)p 210 980 ! 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(27)75 1030 y Fd(rl)p 117 1030 V 13 w(set)p ! 190 1030 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 1080 y Fd(rl)p 117 ! 1080 V 13 w(set)p 190 1080 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(32)75 1130 y Fd(rl)p 117 1130 V 13 w(special)p 270 ! 1130 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 1180 y Fd(rl)p 117 1180 V 13 w(startup)p 270 ! 1180 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 1229 y Fd(rl)p 117 1229 V 13 w(stuff)p ! 230 1229 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 1279 y Fd(rl)p 117 1279 ! V 13 w(terminal)p 290 1279 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 1329 y Fd(rl)p 117 ! 1329 V 13 w(unbind)p 250 1329 V 12 w(command)p 402 1329 ! V 12 w(in)p 454 1329 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(24)75 1379 y Fd(rl)p 117 1379 V 13 w(unbind)p 250 ! 1379 V 12 w(function)p 422 1379 V 11 w(in)p 473 1379 ! 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(24)75 1429 y Fd(rl)p ! 117 1429 V 13 w(unbind)p 250 1429 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(24)75 ! 1478 y Fd(rl)p 117 1478 V 13 w(unbind)p 250 1478 V 12 ! w(key)p 322 1478 V 13 w(in)p 375 1478 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(24)75 1578 y Fs(S)75 ! 1636 y Fd(self-inser)o(t)10 b(\(a,)h(b,)h(A,)g(1,)g(!,)g(...\))c ! Fe(.)t(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)20 b Ff(12,)13 b(13)1012 ! 183 y Fd(set-mark)d(\(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(16)1012 233 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 ! 283 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(15)1012 389 y Fs(T)1012 447 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(13)1012 ! 497 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(16)1012 546 y Fd(to_lower)6 b Fe(.)s(.)g(.)g(.)h(.)f ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 ! b Ff(29)1012 596 y Fd(to_upper)6 b Fe(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) ! g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 b ! Ff(29)1012 646 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))c ! Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)18 b Ff(12,)13 b(13)1012 696 y Fd(transpose-w)o(or)o(ds)c ! (\(M-t\))c Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)18 b Ff(12,)13 b(13)1012 802 y ! Fs(U)1012 860 y Fd(undo)f(\(C-)p 1166 860 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(16)1012 ! 910 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(14)1012 959 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(13)1012 1009 y Fd(unix-word-r)o(ub)o ! (out)9 b(\(C-w\))s Fe(.)t(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(13,)d(14)1012 1059 ! y Fd(upcase-word)c(\(M-u\))f Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g ! (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 ! b Ff(12,)13 b(13)1012 1109 y Fd(uppercase)p 1194 1109 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(28)1012 1159 y Fd(username)p 1174 ! 1159 V 11 w(completion)p 1385 1159 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(34)1012 1265 y Fs(V)1012 1323 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 1429 y Fs(Y)1012 1487 y Fd(yank)12 ! b(\(C-y\))c Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g ! (.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) ! 23 b Ff(13,)13 b(14)1012 1537 y Fd(yank-last-a)o(rg)c(\(M-.,)i(M-)p ! 1433 1537 V 13 w(\))c Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) ! g(.)g(.)g(.)g(.)g(.)20 b Ff(11,)13 b(12)1012 1586 y Fd(yank-nth-ar)o(g) ! d(\(M-C-y\))c Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) ! f(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(11,)13 b(12)1012 ! 1636 y Fd(yank-pop)d(\(M-y\))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(.)18 b Ff(13,)13 b(14)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 *************** *** 4843,4847 **** 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(7)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(.) --- 5118,5122 ---- 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(.) *************** *** 4868,4872 **** b Fu(15)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(15)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 --- 5143,5147 ---- b Fu(15)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(16)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 *************** *** 4905,4912 **** 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(25)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(26)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 --- 5180,5187 ---- 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 *************** *** 4914,4944 **** 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(27)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(28)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(29)224 2585 y(2.5)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(30)374 2640 y(2.5.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(30)p eop ! %%Page: -2 54 ! -2 53 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)374 ! 42 y(2.5.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(31)374 96 y(2.5.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(32)374 151 y(2.5.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(34)75 272 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(45)75 407 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(47)p eop %%Trailer end --- 5189,5223 ---- 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(29)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(32)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(32)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(33)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(34)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 diff -aNrc2 readline-2.2.1/doc/readline_toc.html readline-4.0/doc/readline_toc.html *** readline-2.2.1/doc/readline_toc.html Thu Apr 2 14:45:27 1998 --- readline-4.0/doc/readline_toc.html Wed Dec 31 19:00:00 1969 *************** *** 1,77 **** - - - - - GNU Readline Library - Table of Contents - - -

    GNU Readline Library

    -

    Edition 2.2, for Readline Library Version 2.1.

    -

    September 1997

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

    -


    -

    -


    - This document was generated on 2 April 1998 using the - texi2html - translator version 1.51.

    - - --- 0 ---- diff -aNrc2 readline-2.2.1/doc/rlman.texinfo readline-4.0/doc/rlman.texinfo *** readline-2.2.1/doc/rlman.texinfo Thu Apr 2 14:39:18 1998 --- readline-4.0/doc/rlman.texinfo Thu Dec 31 12:05:01 1998 *************** *** 7,19 **** @setchapternewpage odd ! @ignore ! last change: Thu Apr 2 14:39:03 EST 1998 ! @end ignore ! ! @set EDITION 2.2 ! @set VERSION 2.2 ! @set UPDATED 2 April 1998 ! @set UPDATE-MONTH April 1998 @dircategory Libraries @direntry --- 7,13 ---- @setchapternewpage odd ! @include manvers.texinfo + @ifinfo @dircategory Libraries @direntry *************** *** 21,30 **** @end direntry - @ifinfo This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs that need to provide a command line interface. ! Copyright (C) 1988, 1991, 1993, 1996, 1998 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of --- 15,23 ---- @end direntry This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs that need to provide a command line interface. ! Copyright (C) 1988-1999 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of *************** *** 47,51 **** into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Foundation. @end ifinfo --- 40,44 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation. @end ifinfo *************** *** 78,85 **** 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. @vskip 0pt plus 1filll ! Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc. @end titlepage --- 71,78 ---- into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved ! by the Free Software Foundation. @vskip 0pt plus 1filll ! Copyright @copyright{} 1988-1999 Free Software Foundation, Inc. @end titlepage diff -aNrc2 readline-2.2.1/doc/rltech.texinfo readline-4.0/doc/rltech.texinfo *** readline-2.2.1/doc/rltech.texinfo Wed Feb 4 14:43:56 1998 --- readline-4.0/doc/rltech.texinfo Thu Dec 17 15:49:39 1998 *************** *** 9,13 **** to provide a command line interface. ! Copyright (C) 1988, 1994, 1996 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of --- 9,13 ---- 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 *************** *** 48,52 **** functions. * Readline Convenience Functions:: Functions which Readline supplies to ! aid in writing your own * Custom Completers:: Supplanting or supplementing Readline's completion functions. --- 48,54 ---- 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. *************** *** 269,272 **** --- 271,281 ---- @end deftypevar + @deftypevar int rl_erase_empty_line + Setting this to a non-zero value causes Readline to completely erase + the current line, including any prompt, any time a newline is typed as + the only character on an otherwise-empty line. The cursor is moved to + the beginning of the newly-blank line. + @end deftypevar + @deftypevar {char *} rl_prompt The prompt Readline uses. This is set from the argument to *************** *** 301,304 **** --- 310,319 ---- @end deftypevar + @deftypevar {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 @code{readline} + starts reading input characters. + @end deftypevar + @deftypevar {Function *} rl_event_hook If non-zero, this is the address of a function to call periodically *************** *** 620,623 **** --- 635,648 ---- @end deftypefun + @deftypefun void rl_save_prompt () + Save the local Readline prompt display state in preparation for + displaying a new message in the message area with @code{rl_message}. + @end deftypefun + + @deftypefun void rl_restore_prompt () + Restore the local Readline prompt display state saved by the most + recent call to @code{rl_save_prompt}. + @end deftypefun + @node Modifying Text @subsection Modifying Text *************** *** 690,693 **** --- 715,728 ---- @end deftypefun + @deftypefun void rl_display_match_list (char **matches, int len, int max) + A convenience function for displaying a list of strings in + columnar format on Readline's output stream. @code{matches} is the list + of strings, in argv format, such as a list of completion matches. + @code{len} is the number of strings in @code{matches}, and @code{max} + is the length of the longest string in @code{matches}. This function uses + the setting of @code{print-completions-horizontally} to select how the + matches are displayed (@pxref{Readline Init File Syntax}). + @end deftypefun + The following are implemented as macros, defined in @code{chartypes.h}. *************** *** 815,818 **** --- 850,963 ---- @end example + @node Readline Signal Handling + @section Readline Signal Handling + + Signals are asynchronous events sent to a process by the Unix kernel, + sometimes on behalf of another process. They are intended to indicate + exceptional events, like a user pressing the interrupt key on his + terminal, or a network connection being broken. There is a class of + signals that can be sent to the process currently reading input from + the keyboard. Since Readline changes the terminal attributes when it + is called, it needs to perform special processing when 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 (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, + @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}). + When one of these signals is received, the signal handler + will reset the terminal attributes to those that were in effect before + @code{readline ()} was called, reset the signal handling to what it was + before @code{readline ()} was called, and resend the signal to the calling + application. + If and when the calling application's signal handler returns, Readline + will reinitialize the terminal and continue to accept input. + When a @code{SIGINT} is received, the Readline signal handler performs + some additional work, which will cause any partially-entered line to be + aborted (see the description of @code{rl_free_line_state ()}). + + There is an additional Readline signal handler, for @code{SIGWINCH}, which + the kernel sends to a process whenever the terminal's size changes (for + example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH} + handler updates Readline's internal screen size state, and then calls any + @code{SIGWINCH} signal handler the calling application has installed. + Readline calls the application's @code{SIGWINCH} signal handler without + resetting the terminal to its original state. If the application's signal + handler does more than update its idea of the terminal size and return (for + example, a @code{longjmp} back to a main processing loop), it @emph{must} + call @code{rl_cleanup_after_signal ()} (described below), to restore the + terminal state. + + Readline provides two variables that allow application writers to + control whether or not it will catch certain signals and act on them + when they are received. It is important that applications change the + values of these variables only when calling @code{readline ()}, not in + a signal handler, so Readline's internal signal state is not corrupted. + + @deftypevar int rl_catch_signals + If this variable is non-zero, Readline will install signal handlers for + @code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGALRM}, + @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}. + + The default value of @code{rl_catch_signals} is 1. + @end deftypevar + + @deftypevar int rl_catch_sigwinch + If this variable is non-zero, Readline will install a signal handler for + @code{SIGWINCH}. + + The default value of @code{rl_catch_sigwinch} is 1. + @end deftypevar + + If an application does not wish to have Readline catch any signals, or + to handle signals other than those Readline catches (@code{SIGHUP}, + for example), + Readline provides convenience functions to do the necessary terminal + and internal state cleanup upon receipt of a signal. + + @deftypefun void rl_cleanup_after_signal (void) + This function will reset the state of the terminal to what it was before + @code{readline ()} was called, and remove the Readline signal handlers for + all signals, depending on the values of @code{rl_catch_signals} and + @code{rl_catch_sigwinch}. + @end deftypefun + + @deftypefun void rl_free_line_state (void) + This will free any partial state associated with the current input line + (undo information, any partial history entry, any partially-entered + keyboard macro, and any partially-entered numeric argument). This + should be called before @code{rl_cleanup_after_signal ()}. The + Readline signal handler for @code{SIGINT} calls this to abort the + current input line. + @end deftypefun + + @deftypefun void rl_reset_after_signal (void) + This will reinitialize the terminal and reinstall any Readline signal + handlers, depending on the values of @code{rl_catch_signals} and + @code{rl_catch_sigwinch}. + @end deftypefun + + If an application does not wish Readline to catch @code{SIGWINCH}, it may + call @code{rl_resize_terminal ()} to force Readline to update its idea of + the terminal size when a @code{SIGWINCH} is received. + + @deftypefun void rl_resize_terminal (void) + Update Readline's internal screen size. + @end deftypefun + + The following functions install and remove Readline's signal handlers. + + @deftypefun int rl_set_signals (void) + Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT}, + @code{SIGTERM}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, + @code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of + @code{rl_catch_signals} and @code{rl_catch_sigwinch}. + @end deftypefun + + @deftypefun int rl_clear_signals (void) + Remove all of the Readline signal handlers installed by + @code{rl_set_signals ()}. + @end deftypefun + @node Custom Completers @section Custom Completers *************** *** 1107,1110 **** --- 1252,1269 ---- string (the current directory name) as an argument. It could be used to expand symbolic links or shell variables in pathnames. + @end deftypevar + + @deftypevar {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: + (@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length}) + where @var{matches} is the array of matching strings, + @var{num_matches} is the number of strings in that array, and + @var{max_length} is the length of the longest string in that array. + Readline provides a convenience function, @code{rl_display_match_list}, + that takes care of doing the display to Readline's output stream. That + function may be called from this hook. @end deftypevar diff -aNrc2 readline-2.2.1/doc/rluser.texinfo readline-4.0/doc/rluser.texinfo *** readline-2.2.1/doc/rluser.texinfo Wed Apr 1 12:26:01 1998 --- readline-4.0/doc/rluser.texinfo Thu Dec 31 12:34:48 1998 *************** *** 98,102 **** * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines. ! @end menu @node Readline Bare Essentials --- 98,102 ---- * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines. ! @end menu @node Readline Bare Essentials *************** *** 253,258 **** An incremental search requires only as many characters as needed to find the desired history entry. ! The @key{ESC} character is used to terminate an incremental search. ! @key{C-j} will also terminate the search. @key{C-g} will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the --- 253,260 ---- 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 ! 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 *************** *** 397,400 **** --- 399,418 ---- this variable is set to @samp{off}. + @item input-meta + @vindex input-meta + @vindex meta-flag + If set to @samp{on}, Readline will enable eight-bit input (it + will not strip the eighth bit from the characters it reads), + regardless of what the terminal claims it can support. The + default value is @samp{off}. The name @code{meta-flag} is a + synonym for this variable. + + @item isearch-terminators + @vindex isearch-terminators + The string of characters that should terminate an incremental search without + subsequently executing the character as a command (@pxref{Searching}). + If this variable has not been given a value, the characters @key{ESC} and + @key{C-J} will terminate an incremental search. + @item keymap @vindex keymap *************** *** 423,435 **** This variable is @samp{off} by default. - @item input-meta - @vindex input-meta - @vindex meta-flag - If set to @samp{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 @samp{off}. The name @code{meta-flag} is a - synonym for this variable. - @item output-meta @vindex output-meta --- 441,444 ---- *************** *** 877,880 **** --- 886,894 ---- to kill the characters instead of deleting them. + @item forward-backward-delete-char () + Delete the character under the cursor, unless the cursor is at the + end of the line, in which case the character behind the cursor is + deleted. By default, this is not bound to a key. + @item quoted-insert (C-q, C-v) Add the next character typed to the line verbatim. This is *************** *** 1040,1043 **** --- 1054,1064 ---- by default. + @item delete-char-or-list () + Deletes the character under the cursor if not at the beginning or + end of the line (like @code{delete-char}). + If at the end of the line, behaves identically to + @code{possible-completions}. + This command is unbound by default. + @ifset BashFeatures @item complete-filename (M-/) *************** *** 1142,1146 **** --- 1163,1172 ---- command enough times to get back to the beginning. + @ifset BashFeatures + @item tilde-expand (M-&) + @end ifset + @ifclear BashFeatures @item tilde-expand (M-~) + @end ifclear Perform tilde expansion on the current word. diff -aNrc2 readline-2.2.1/doc/texi2dvi readline-4.0/doc/texi2dvi *** readline-2.2.1/doc/texi2dvi Tue Jul 25 10:55:57 1995 --- readline-4.0/doc/texi2dvi Mon Apr 27 12:00:44 1998 *************** *** 1,9 **** #! /bin/sh # texi2dvi --- smartly produce DVI files from texinfo sources ! ! # Copyright (C) 1992, 1993, 1994, 1995 Free Software Foundation, Inc. ! ! # $Id: texi2dvi,v 0.5 1995/06/20 02:21:36 friedman Exp $ ! # 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 --- 1,8 ---- #! /bin/sh # texi2dvi --- smartly produce DVI files from texinfo sources ! # $Id: texi2dvi,v 0.8 1998/02/26 21:13:13 karl Exp $ ! # ! # Copyright (C) 1992, 93, 94, 95, 96, 97, 98 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 *************** *** 20,32 **** # program's maintainer or write to: The Free Software Foundation, # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. ! # Commentary: ! ! # Author: Noah Friedman ! ! # Please send bug reports, etc. to bug-texinfo@prep.ai.mit.edu # If possible, please send a copy of the output of the script called with # the `--debug' option when making a bug report. ! # In the interest of general portability, some common bourne shell # constructs were avoided because they weren't guaranteed to be available --- 19,31 ---- # program's maintainer or write to: The Free Software Foundation, # Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. ! # # Commentary: ! # ! # Author: Noah Friedman ! # ! # Please send bug reports, etc. to bug-texinfo@gnu.org. # If possible, please send a copy of the output of the script called with # the `--debug' option when making a bug report. ! # # In the interest of general portability, some common bourne shell # constructs were avoided because they weren't guaranteed to be available *************** *** 35,45 **** # denominator is rapidly diminishing. # ! # Among the more interesting lossages I noticed with some bourne shells ! # are: # * No shell functions. # * No `unset' builtin. # * `shift' cannot take a numeric argument, and signals an error if # there are no arguments to shift. ! # Code: --- 34,43 ---- # denominator is rapidly diminishing. # ! # Among the more interesting lossages I noticed among Bourne shells: # * No shell functions. # * No `unset' builtin. # * `shift' cannot take a numeric argument, and signals an error if # there are no arguments to shift. ! # # Code: *************** *** 48,52 **** # This string is expanded by rcs automatically when this file is checked out. ! rcs_revision='$Revision: 0.5 $' version=`set - $rcs_revision; echo $2` --- 46,50 ---- # This string is expanded by rcs automatically when this file is checked out. ! rcs_revision='$Revision: 0.8 $' version=`set - $rcs_revision; echo $2` *************** *** 55,82 **** eq="'" ! usage="Usage: $progname {options} [file1] {file2 {...}} ! (version $version) ! Options are: -D, --debug Turn on shell debugging ($bq${bq}set -x$eq$eq). ! -h, --help You're looking at it. ! -v, --version Print version number. ! Arguments in brackets are required. Those in braces are optional. ! " # Initialize variables. # Don't use `unset' since old bourne shells don't have this command. # Instead, assign them an empty value. ! # Some of these, like TEX and TEXINDEX, may be inherited from the environment ! backup_extension=.bak debug= orig_pwd="`pwd`" ! verbose= texindex="${TEXINDEX-texindex}" tex="${TEX-tex}" ! # Save this so we can construct a new TEXINPUTS path for each file to be ! # processed. TEXINPUTS_orig="$TEXINPUTS" export TEXINPUTS --- 53,89 ---- eq="'" ! usage="Usage: $0 [OPTION]... FILE... ! Run a Texinfo document through TeX. ! Options: ! -b, --batch No interaction (\nonstopmode in TeX). ! -c, --clean Remove all auxiliary files. -D, --debug Turn on shell debugging ($bq${bq}set -x$eq$eq). ! -t, --texinfo CMD Insert CMD after @setfilename before running TeX. ! --verbose Report on what is done. ! -h, --help Display this help and exit. ! -v, --version Display version information and exit. ! The values of the TEX, TEXINDEX, and MAKEINFO environment variables are ! used to run those commands, if they are set. ! ! Email bug reports to bug-texinfo@gnu.org." # Initialize variables. # Don't use `unset' since old bourne shells don't have this command. # Instead, assign them an empty value. ! # Some of these, like TEX and TEXINDEX, may be inherited from the environment. ! backup_extension=.bak # these files get deleted if all goes well. ! batch= ! clean= debug= orig_pwd="`pwd`" ! textra= ! verbose=false ! makeinfo="${MAKEINFO-makeinfo}" texindex="${TEXINDEX-texindex}" tex="${TEX-tex}" ! # Save this so we can construct a new TEXINPUTS path for each file. TEXINPUTS_orig="$TEXINPUTS" export TEXINPUTS *************** *** 87,109 **** # Long options which take arguments will need a `*' appended to the # canonical name to match the value appended after the `=' character. ! while : ; do ! case $# in 0) break ;; esac case "$1" in ! -D | --debug | --d* ) ! debug=t ! shift ! ;; ! -h | --help | --h* ) ! echo "$usage" 1>&2 ! exit 0 ! ;; ! -v | --version | --v* ) ! echo "texi2dvi version $version" 1>&2 ! exit 0 ! ;; -- ) # Stop option processing shift ! break ! ;; -* ) case "$1" in --- 94,118 ---- # Long options which take arguments will need a `*' appended to the # canonical name to match the value appended after the `=' character. ! while :; do ! test $# -eq 0 && break ! case "$1" in ! -b | --batch | --b* ) batch=t; shift ;; ! -c | --clean | --c* ) clean=t; shift ;; ! -D | --debug | --d* ) debug=t; shift ;; ! -h | --help | --h* ) echo "$usage"; exit 0 ;; ! # OK, we should do real option parsing here, but be lazy for now. ! -t | --texinfo | --t*) shift; textra="$textra $1"; shift ;; ! -v | --vers* ) ! echo "$progname (GNU Texinfo 3.12) $version" ! echo "Copyright (C) 1998 Free Software Foundation, Inc. ! There is NO warranty. You may redistribute this software ! under the terms of the GNU General Public License. ! For more information about these matters, see the files named COPYING." ! exit 0 ;; ! --verb* ) verbose=echo; shift ;; -- ) # Stop option processing shift ! break ;; -* ) case "$1" in *************** *** 112,275 **** esac exec 1>&2 ! echo "$progname: unknown or ambiguous option $bq$arg$eq" ! echo "$progname: Use $bq--help$eq for a list of options." ! exit 1 ! ;; ! * ) ! break ! ;; esac done # See if there are any command line args left (which will be interpreted as ! # filename arguments) ! case $# in ! 0 ) ! exec 1>&2 ! echo "$progname: at least one file name is required as an argument." ! echo "$progname: Use $bq--help$eq for a description of command syntax." ! exit 2 ! ;; ! esac ! case "$debug" in t ) set -x ;; esac # Texify files ! for command_line_filename in ${1+"$@"} ; do ! # Roughly equivalent to `dirname ...`, but more portable ! directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`" ! filename_texi="`basename ${command_line_filename}`" ! # Strip off the last extension part (probably .texinfo or .texi) ! filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`" ! ! # If directory and file are the same, then it's probably because there's ! # no pathname component. Set dirname to `.', the current directory. ! if test "z${directory}" = "z${command_line_filename}" ; then ! directory="." ! fi ! ! # Source file might @include additional texinfo sources. Put `.' and ! # directory where source file(s) reside in TEXINPUTS before anything ! # else. `.' goes first to ensure that any old .aux, .cps, etc. files in ! # ${directory} don't get used in preference to fresher files in `.'. ! TEXINPUTS=".:${directory}:${TEXINPUTS_orig}" ! ! # "Unset" variables that might have values from previous iterations and ! # which won't be completely reset later. ! definite_index_files="" ! ! # See if file exists here. If it doesn't we're in trouble since, even ! # though the user may be able to reenter a valid filename at the tex ! # prompt (assuming they're attending the terminal), this script won't be ! # able to find the right index files and so forth. ! if test ! -r "${command_line_filename}" ; then ! echo "${progname}: ${command_line_filename}: No such file or permission denied." 1>&2 ! continue; ! fi ! ! # Find all files having root filename with a two-letter extension, ! # determine whether they're really index files, and save them. Foo.aux ! # is actually the cross-references file, but we need to keep track of ! # that too. ! possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" ! for this_file in ${possible_index_files} ; do # If file is empty, forget it. ! if test ! -s "${this_file}" ; then ! continue; ! fi ! # Examine first character of file. If it's not a backslash or ! # single quote, then it's definitely not an index or xref file. first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" ! if test "${first_character}" = "\\" -o "${first_character}" = "'" ; then ! definite_index_files="${definite_index_files} ${this_file}" fi ! done ! orig_index_files="${definite_index_files}" ! orig_index_files_sans_aux="`echo ${definite_index_files} \ ! | sed 's/'${filename_noext}'\.aux//; ! s/^[ ]*//;s/[ ]*$//;'`" ! ! # Now save copies of original index files so we have some means of ! # comparison later. ! for index_file_to_save in ${orig_index_files} ; do ! cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}" ! done ! ! # Run texindex on current index files. If they already exist, and ! # after running TeX a first time the index files don't change, then ! # there's no reason to run TeX again. But we won't know that if the ! # index files are out of date or nonexistent. ! if test "${orig_index_files_sans_aux}" ; then ${texindex} ${orig_index_files_sans_aux} ! fi ! if ${tex} ${command_line_filename} ; then # TeX run first time ! definite_index_files="" ! # Get list of new index files ! possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" ! for this_file in ${possible_index_files} ; do ! # If file is empty, forget it. ! if test ! -s ${this_file} ; then ! continue; ! fi ! ! # Examine first character of file. If it's not a backslash or ! # single quote, then it's definitely not an index or xref file. ! first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" ! if test "${first_character}" = "\\" -o "${first_character}" = "'" ; then ! definite_index_files="${definite_index_files} ${this_file}" ! fi done ! new_index_files="${definite_index_files}" ! new_index_files_sans_aux="`echo ${definite_index_files} \ ! | sed 's/'${filename_noext}'\.aux//; ! s/^[ ]*//;s/[ ]*$//;'`" ! ! # If old and new list don't at least have the same file list, then one ! # file or another has definitely changed. ! if test "${orig_index_files}" != "${new_index_files}" ; then ! index_files_changed_p=t ! else ! # File list is the same. We must compare each file until we find a ! # difference. ! index_files_changed_p="" ! for this_file in ${new_index_files} ; do ! # cmp -s will return nonzero exit status if files differ. ! cmp -s "${this_file}" "${this_file}${backup_extension}" ! if test $? -ne 0 ; then ! # We only need to keep comparing until we find *one* that ! # differs, because we'll have to run texindex & tex no ! # matter what. ! index_files_changed_p=t ! break ! fi ! done ! fi ! # If index files have changed since TeX has been run, or if the aux ! # file wasn't present originally, run texindex and TeX again. ! if test "${index_files_changed_p}" ; then ! retval=0 ! if test "${new_index_files_sans_aux}" ; then ! ${texindex} ${new_index_files_sans_aux} ! retval=$? ! fi ! if test ${retval} -eq 0 ; then ! ${tex} "${command_line_filename}" ! fi ! fi ! fi ! # Generate list of files to delete, then call rm once with the entire ! # list. This is significantly faster than multiple executions of rm. ! file_list="" ! for file in ${orig_index_files} ; do ! file_list="${file_list} ${file}${backup_extension}" ! done ! if test "${file_list}" ; then ! rm -f ${file_list} ! fi done ! # texi2dvi ends here --- 121,362 ---- esac exec 1>&2 ! echo "$progname: Unknown or ambiguous option $bq$arg$eq." ! echo "$progname: Try $bq--help$eq for more information." ! exit 1 ;; ! * ) break ;; esac done # See if there are any command line args left (which will be interpreted as ! # filename arguments). ! if test $# -eq 0; then ! exec 1>&2 ! echo "$progname: At least one file name is required as an argument." ! echo "$progname: Try $bq--help$eq for more information." ! exit 2 ! fi ! test "$debug" = t && set -x # Texify files ! for command_line_filename in ${1+"$@"}; do ! $verbose "Processing $command_line_filename ..." ! ! # See if file exists. If it doesn't we're in trouble since, even ! # though the user may be able to reenter a valid filename at the tex ! # prompt (assuming they're attending the terminal), this script won't ! # be able to find the right index files and so forth. ! if test ! -r "${command_line_filename}"; then ! echo "$0: Could not read ${command_line_filename}." >&2 ! continue ! fi ! ! # Roughly equivalent to `dirname ...`, but more portable ! directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`" ! filename_texi="`basename ${command_line_filename}`" ! # Strip off the last extension part (probably .texinfo or .texi) ! filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`" ! ! # Use same basename since we want to generate aux files with the same ! # basename as the manual. Use extension .texi for the temp file so ! # that TeX will ignore it. Thus, we must use a subdirectory. ! # ! # Output the macro-expanded file to here. The vastly abbreviated ! # temporary directory name is so we don't have collisions on 8.3 or ! # 14-character filesystems. ! tmp_dir=${TMPDIR-/tmp}/txi2d.$$ ! filename_tmp=$tmp_dir/$filename_noext.texi ! # Output the file with the user's extra commands to here. ! tmp_dir2=${tmp_dir}.2 ! filename_tmp2=$tmp_dir2/$filename_noext.texi ! mkdir $tmp_dir $tmp_dir2 ! # Always remove the temporary directories. ! trap "rm -rf $tmp_dir $tmp_dir2" 1 2 15 ! ! # If directory and file are the same, then it's probably because there's ! # no pathname component. Set dirname to `.', the current directory. ! if test "z${directory}" = "z${command_line_filename}"; then ! directory=. ! fi ! ! # Source file might @include additional texinfo sources. Put `.' and ! # directory where source file(s) reside in TEXINPUTS before anything ! # else. `.' goes first to ensure that any old .aux, .cps, etc. files in ! # ${directory} don't get used in preference to fresher files in `.'. ! TEXINPUTS=".:${directory}:${TEXINPUTS_orig}" ! ! # Expand macro commands in the original source file using Makeinfo; ! # the macro syntax bfox implemented is impossible to implement in TeX. ! # Always use `end' footnote style, since the `separate' style ! # generates different output (arguably this is a bug in -E). ! # Discard main info output, the user asked to run TeX, not makeinfo. ! # Redirect output to /dev/null to throw away `Making info file...' msg. ! $verbose "Macro-expanding $command_line_filename to $filename_tmp ..." ! $makeinfo --footnote-style=end -E $filename_tmp -o /dev/null \ ! $command_line_filename >/dev/null ! ! # But if there were no macros, or makeinfo failed for some reason, ! # just use the original file. (It shouldn't make any difference, but ! # let's be safe.) ! if test $? -ne 0 || cmp -s $filename_tmp $command_line_filename; then ! $verbose "Reverting to $command_line_filename ..." ! cp -p $command_line_filename $filename_tmp ! fi ! filename_input=$filename_tmp ! dirname_input=$tmp_dir ! ! # Used most commonly for @finalout, @smallbook, etc. ! if test -n "$textra"; then ! $verbose "Inserting extra commands: $textra." ! sed '/^@setfilename/a\ ! '"$textra" $filename_input >$filename_tmp2 ! filename_input=$filename_tmp2 ! dirname_input=$tmp_dir2 ! fi ! ! # If clean mode was specified, then move to the temporary directory. ! if test "$clean" = t; then ! $verbose "cd $dirname_input" ! cd $dirname_input || exit 1 ! filename_input=`basename $filename_input` ! fi ! ! while true; do # will break out of loop below ! # "Unset" variables that might have values from previous iterations and ! # which won't be completely reset later. ! definite_index_files= ! ! # Find all files having root filename with a two-letter extension, ! # determine whether they're really index files, and save them. Foo.aux ! # is actually the cross-references file, but we need to keep track of ! # that too. ! possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" ! for this_file in ${possible_index_files}; do # If file is empty, forget it. ! test -s "${this_file}" || continue ! # Examine first character of file. If it's not suitable to be an ! # index or xref file, don't process it. first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" ! if test "x${first_character}" = "x\\" \ ! || test "x${first_character}" = "x'"; then ! definite_index_files="${definite_index_files} ${this_file}" fi ! done ! orig_index_files="${definite_index_files}" ! orig_index_files_sans_aux="`echo ${definite_index_files} \ ! | sed 's/'${filename_noext}'\.aux//; ! s/^[ ]*//;s/[ ]*$//;'`" ! ! # Now save copies of original index files so we have some means of ! # comparison later. ! $verbose "Backing up current index files: $orig_index_files ..." ! for index_file_to_save in ${orig_index_files}; do ! cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}" ! done ! ! # Run texindex on current index files. If they already exist, and ! # after running TeX a first time the index files don't change, then ! # there's no reason to run TeX again. But we won't know that if the ! # index files are out of date or nonexistent. ! if test -n "${orig_index_files_sans_aux}"; then ! $verbose "Running $texindex $orig_index_files_sans_aux ..." ${texindex} ${orig_index_files_sans_aux} ! fi ! # Finally, run TeX. ! if test "$batch" = t; then ! tex_mode='\nonstopmode' ! else ! tex_mode= ! fi ! $verbose "Running $tex $filename_input ..." ! cmd="$tex $tex_mode \\input $filename_input" ! $cmd ! ! # Check if index files changed. ! # ! definite_index_files= ! # Get list of new index files. ! possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" ! for this_file in ${possible_index_files}; do ! # If file is empty, forget it. ! test -s "${this_file}" || continue ! ! # Examine first character of file. If it's not a backslash or ! # single quote, then it's definitely not an index or xref file. ! # (Will have to check for @ when we switch to Texinfo syntax in ! # all these files...) ! first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" ! if test "x${first_character}" = "x\\" \ ! || test "x${first_character}" = "x'"; then ! definite_index_files="${definite_index_files} ${this_file}" ! fi ! done ! new_index_files="${definite_index_files}" ! new_index_files_sans_aux="`echo ${definite_index_files} \ ! | sed 's/'${filename_noext}'\.aux//; ! s/^[ ]*//;s/[ ]*$//;'`" ! ! # If old and new list don't at least have the same file list, then one ! # file or another has definitely changed. ! $verbose "Original index files =$orig_index_files" ! $verbose "New index files =$new_index_files" ! if test "z${orig_index_files}" != "z${new_index_files}"; then ! index_files_changed_p=t ! else ! # File list is the same. We must compare each file until we find a ! # difference. ! index_files_changed_p= ! for this_file in ${new_index_files}; do ! $verbose "Comparing index file $this_file ..." ! # cmp -s will return nonzero exit status if files differ. ! cmp -s "${this_file}" "${this_file}${backup_extension}" ! if test $? -ne 0; then ! # We only need to keep comparing until we find *one* that ! # differs, because we'll have to run texindex & tex no ! # matter what. ! index_files_changed_p=t ! $verbose "Index file $this_file differed:" ! test $verbose = echo \ ! && diff -c "${this_file}${backup_extension}" "${this_file}" ! break ! fi done ! fi ! # If index files have changed since TeX has been run, or if the aux ! # file wasn't present originally, run texindex and TeX again. ! if test "${index_files_changed_p}"; then :; else ! # Nothing changed. We're done with TeX. ! break ! fi ! done ! # If we were in clean mode, compilation was in a tmp directory. ! # Copy the DVI file into the directory where the compilation ! # has been done. (The temp dir is about to get removed anyway.) ! # We also return to the original directory so that ! # - the next file is processed in correct conditions ! # - the temporary file can be removed ! if test -n "$clean"; then ! $verbose "Copying DVI file from `pwd` to $orig_pwd" ! cp -p $filename_noext.dvi $orig_pwd ! cd $orig_pwd || exit 1 ! fi ! ! # Generate list of files to delete, then call rm once with the entire ! # list. This is significantly faster than multiple executions of rm. ! file_list= ! for file in ${orig_index_files}; do ! file_list="${file_list} ${file}${backup_extension}" ! done ! if test -n "${file_list}"; then ! $verbose "Removing $file_list $tmp_dir $tmp_dir2 ..." ! rm -f ${file_list} ! rm -rf $tmp_dir $tmp_dir2 ! fi done ! $verbose "$0 done." ! true # exit successfully. diff -aNrc2 readline-2.2.1/doc/texi2html readline-4.0/doc/texi2html *** readline-2.2.1/doc/texi2html Tue Mar 3 14:30:51 1998 --- readline-4.0/doc/texi2html Mon Apr 27 12:05:31 1998 *************** *** 1,3 **** ! #!/usr/bin/perl 'di '; 'ig 00 '; --- 1,3 ---- ! #!/usr/local/bin/perl 'di '; 'ig 00 '; *************** *** 10,14 **** #-############################################################################## ! # @(#)texi2html 1.51 09/10/96 Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch # The man page for this program is included at the end of this file and can be --- 10,14 ---- #-############################################################################## ! # @(#)texi2html 1.52 01/05/98 Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch # The man page for this program is included at the end of this file and can be *************** *** 30,34 **** $DEBUG_USER = 64; ! $BIBRE = '\[[\w\/]+\]'; # RE for a bibliography reference $FILERE = '[\/\w.+-]+'; # RE for a file name $VARRE = '[^\s\{\}]+'; # RE for a variable name --- 30,34 ---- $DEBUG_USER = 64; ! $BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference $FILERE = '[\/\w.+-]+'; # RE for a file name $VARRE = '[^\s\{\}]+'; # RE for a variable name *************** *** 38,43 **** $ERROR = "***"; # prefix for errors and warnings ! $THISPROG = "texi2html 1.51"; # program name and version ! $HOMEPAGE = "http://wwwcn.cern.ch/dci/texi2html/"; # program home page $TODAY = &pretty_date; # like "20 September 1993" $SPLITTAG = "\n"; # tag to know where to split --- 38,43 ---- $ERROR = "***"; # prefix for errors and warnings ! $THISPROG = "texi2html 1.52"; # program name and version ! $HOMEPAGE = "http://wwwinfo.cern.ch/dis/texi2html/"; # program home page $TODAY = &pretty_date; # like "20 September 1993" $SPLITTAG = "\n"; # tag to know where to split *************** *** 130,133 **** --- 130,134 ---- "?", "?", ".", ".", + "-", "", ); *************** *** 160,165 **** 'code', 'CODE', 'ctrl', '&do_ctrl', # special case ! 'dfn', 'STRONG', # DFN tag is illegal in the standard 'dmn', '', # useless 'emph', 'EM', 'file', '"TT', # will put quotes, cf. &apply_style --- 161,167 ---- 'code', 'CODE', 'ctrl', '&do_ctrl', # special case ! 'dfn', 'EM', # DFN tag is illegal in the standard 'dmn', '', # useless + 'email', '&do_email', # insert a clickable email address 'emph', 'EM', 'file', '"TT', # will put quotes, cf. &apply_style *************** *** 167,170 **** --- 169,173 ---- 'kbd', 'KBD', 'key', 'KBD', + 'math', 'EM', 'r', '', # unsupported 'samp', '"SAMP', # will put quotes, cf. &apply_style *************** *** 173,176 **** --- 176,181 ---- 't', 'TT', 'titlefont', '', # useless + 'uref', '&do_uref', # insert a clickable URL + 'url', '&do_url', # insert a clickable URL 'var', 'VAR', 'w', '', # unsupported *************** *** 271,274 **** --- 276,280 ---- 'vskip', 1, 'filbreak', 1, + 'paragraphindent', 1, # unsupported formats 'cartouche', 1, *************** *** 284,287 **** --- 290,295 ---- #---############################################################################ + %value = (); # hold texinfo variables, see also -D + $use_bibliography = 1; $use_acc = 0; *************** *** 307,310 **** --- 315,319 ---- -glossary : handle a glossary -invisible name: use 'name' as an invisible anchor + -Dname : define name like with \@set -I dir : search also for files in 'dir' -menu : handle menus *************** *** 318,322 **** EOT ! while ($#ARGV >= 0 && $ARGV[0] =~ /^-/) { $_ = shift(@ARGV); if (/^-acc$/) { $use_acc = 1; next; } --- 327,331 ---- EOT ! while (@ARGV && $ARGV[0] =~ /^-/) { $_ = shift(@ARGV); if (/^-acc$/) { $use_acc = 1; next; } *************** *** 328,331 **** --- 337,341 ---- if (/^-i(nvisible)?$/) { $invisible_mark = shift(@ARGV); next; } if (/^-iso$/) { $use_iso = 1; next; } + if (/^-D(.+)?$/) { $value{$1 || shift(@ARGV)} = 1; next; } if (/^-I(.+)?$/) { push(@include_dirs, $1 || shift(@ARGV)); next; } if (/^-m(enu)?$/) { $show_menu = 1; next; } *************** *** 384,390 **** # variables # - %value = (); # hold texinfo variables $value{'html'} = 1; # predefine html (the output format) ! $value{'texi2html'} = '1.51'; # predefine texi2html (the translator) # _foo: internal to track @foo foreach ('_author', '_title', '_subtitle', --- 394,399 ---- # variables # $value{'html'} = 1; # predefine html (the output format) ! $value{'texi2html'} = '1.52'; # predefine texi2html (the translator) # _foo: internal to track @foo foreach ('_author', '_title', '_subtitle', *************** *** 454,458 **** $node = ''; # current node name $in_table = 0; # am I inside a table ! $table_type = ''; # type of table ('', 'f', 'v') @tables = (); # nested table support $in_bibliography = 0; # am I inside a bibliography --- 463,467 ---- $node = ''; # current node name $in_table = 0; # am I inside a table ! $table_type = ''; # type of table ('', 'f', 'v', 'multi') @tables = (); # nested table support $in_bibliography = 0; # am I inside a bibliography *************** *** 555,561 **** s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; # non-@ substitutions cf. texinfmt.el ! s/``/\"/g; ! s/''/\"/g; ! s/([\w ])---([\w ])/$1--$2/g; # # analyze the tag --- 564,572 ---- s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; # non-@ substitutions cf. texinfmt.el ! unless ($in_pre) { ! s/``/\"/g; ! s/''/\"/g; ! s/([\w ])---([\w ])/$1--$2/g; ! } # # analyze the tag *************** *** 571,582 **** &skip_until($tag), next if $tag eq 'tex'; # handle special tables ! if ($tag eq 'table') { ! $table_type = ''; ! } elsif ($tag eq 'ftable') { $tag = 'table'; - $table_type = 'f'; - } elsif ($tag eq 'vtable') { - $tag = 'table'; - $table_type = 'v'; } # special cases --- 582,588 ---- &skip_until($tag), next if $tag eq 'tex'; # handle special tables ! if ($tag =~ /^(|f|v|multi)table$/) { ! $table_type = $1; $tag = 'table'; } # special cases *************** *** 648,656 **** next; } elsif ($tag eq 'table') { ! if (/^\@[fv]?table\s+\@(\w+)\s*$/) { ! $in_table = $1; unshift(@tables, join($;, $table_type, $in_table)); ! push(@lines, &debug("
    \n", __LINE__)); ! &html_push_if('DL'); push(@lines, &html_debug("\n", __LINE__)); } else { --- 654,667 ---- next; } elsif ($tag eq 'table') { ! if (/^\@(|f|v|multi)table\s+\@(\w+)/) { ! $in_table = $2; unshift(@tables, join($;, $table_type, $in_table)); ! if ($table_type eq "multi") { ! push(@lines, &debug("\n", __LINE__)); ! &html_push_if('TABLE'); ! } else { ! push(@lines, &debug("
    \n", __LINE__)); ! &html_push_if('DL'); ! } push(@lines, &html_debug("\n", __LINE__)); } else { *************** *** 777,784 **** push(@lines, &debug("\n", __LINE__)); push(@lines, &html_debug("\n", __LINE__)); ! } elsif ($end_tag eq 'table' || ! $end_tag eq 'ftable' || ! $end_tag eq 'vtable') { ! shift(@tables); if (@tables) { ($table_type, $in_table) = split($;, $tables[0]); --- 788,809 ---- push(@lines, &debug("\n", __LINE__)); push(@lines, &html_debug("\n", __LINE__)); ! } elsif ($end_tag =~ /^(|f|v|multi)table$/) { ! unless (@tables) { ! warn "$ERROR \@end $end_tag without \@*table\n"; ! next; ! } ! ($table_type, $in_table) = split($;, shift(@tables)); ! unless ($1 eq $table_type) { ! warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; ! next; ! } ! if ($table_type eq "multi") { ! push(@lines, "
    \n"); ! &html_pop_if('TR'); ! } else { ! push(@lines, "
    \n"); ! &html_pop_if('DD'); ! } ! &html_pop_if(); if (@tables) { ($table_type, $in_table) = split($;, $tables[0]); *************** *** 786,792 **** $in_table = 0; } - push(@lines, "
    \n"); - &html_pop_if('DD'); - &html_pop_if(); } elsif (defined($def_map{$end_tag})) { push(@lines, &debug("
    \n", __LINE__)); --- 811,814 ---- *************** *** 987,990 **** --- 1009,1018 ---- unshift(@input_spool, "\@${table_type}index $what\n"); } + } elsif ($html_element eq 'TABLE') { + push(@lines, &debug("$what\n", __LINE__)); + &html_push('TR'); + } elsif ($html_element eq 'TR') { + push(@lines, &debug("\n", __LINE__)); + push(@lines, &debug("$what\n", __LINE__)); } else { push(@lines, &debug("
  • $what\n", __LINE__)); *************** *** 997,1000 **** --- 1025,1031 ---- } next; + } elsif (/^\@tab\s+(.*)$/) { + push(@lines, "$1\n"); + next; } } *************** *** 1089,1092 **** --- 1120,1135 ---- if $key ne $_ && $debug & $DEBUG_INDEX; } + push(@lines2, "Jump to:\n"); + $last_letter = undef; + foreach $key (sort byalpha @keys) { + $letter = substr($key2alpha{$key}, 0, 1); + $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;; + if (!defined($last_letter) || $letter ne $last_letter) { + push(@lines2, "-\n") if defined($last_letter); + push(@lines2, "" . &protect_html($letter) . "\n"); + $last_letter = $letter; + } + } + push(@lines2, "

    \n"); $last_letter = undef; foreach $key (sort byalpha @keys) { *************** *** 1095,1099 **** if (!defined($last_letter) || $letter ne $last_letter) { push(@lines2, "

  • \n") if defined($last_letter); ! push(@lines2, "

    " . &protect_html($letter) . "

    \n"); push(@lines2, "\n"); $last_letter = $letter; --- 1138,1142 ---- if (!defined($last_letter) || $letter ne $last_letter) { push(@lines2, "\n") if defined($last_letter); ! push(@lines2, "

    " . &protect_html($letter) . "

    \n"); push(@lines2, "\n"); $last_letter = $letter; *************** *** 1658,1663 **** --- 1701,1722 ---- sub do_ctrl { "^$_[0]" } + sub do_email { + local($addr, $text) = split(/,\s*/, $_[0]); + + $text = $addr unless $text; + &anchor('', "mailto:$addr", $text); + } + sub do_sc { "\U$_[0]\E" } + sub do_uref { + local($url, $text) = split(/,\s*/, $_[0]); + + $text = $url unless $text; + &anchor('', $url, $text); + } + + sub do_url { &anchor('', $_[0], $_[0]) } + sub apply_style { local($texi_style, $text) = @_; *************** *** 1823,1827 **** This document was generated on $TODAY using the texi2html ! translator version 1.51.

    EOT &print_footer; --- 1882,1886 ---- This document was generated on $TODAY using the texi2html ! translator version 1.52.

    EOT &print_footer; *************** *** 1880,1884 **** .nr % 0 \" start at page 1 '; __END__ ############# From here on it's a standard manual page ############ ! .TH TEXI2HTML 1 "09/10/96" .AT 3 .SH NAME --- 1939,1943 ---- .nr % 0 \" start at page 1 '; __END__ ############# From here on it's a standard manual page ############ ! .TH TEXI2HTML 1 "01/05/98" .AT 3 .SH NAME *************** *** 1925,1930 **** .TP .B \-invisible \fIname\fP ! Use \fIname\fP to create invisible destination anchors for index links. This is a workaround ! for a known bug of many WWW browsers, including xmosaic. .TP .B \-I \fIdir\fP --- 1984,1990 ---- .TP .B \-invisible \fIname\fP ! Use \fIname\fP to create invisible destination anchors for index links ! (you can for instance use the invisible.xbm file shipped with this program). ! This is a workaround for a known bug of many WWW browsers, including netscape. .TP .B \-I \fIdir\fP *************** *** 1986,2004 **** .SH ADDITIONAL COMMANDS .I texi2html ! implements the following non-Texinfo commands: .TP 16 .B @ifhtml This indicates the start of an HTML section, this section will passed through ! without any modofication. .TP .B @end ifhtml ! This indcates the end of an HTML section. .SH VERSION ! This is \fItexi2html\fP version 1.51, 09/10/96. .PP The latest version of \fItexi2html\fP can be found in WWW, cf. URL ! http://wwwcn.cern.ch/dci/texi2html/ .SH AUTHOR ! The main author is Lionel Cons, CERN CN/DCI/UWS, Lionel.Cons@cern.ch. Many other people around the net contributed to this program. .SH COPYRIGHT --- 2046,2064 ---- .SH ADDITIONAL COMMANDS .I texi2html ! implements the following non-Texinfo commands (maybe they are in Texinfo now...): .TP 16 .B @ifhtml This indicates the start of an HTML section, this section will passed through ! without any modification. .TP .B @end ifhtml ! This indicates the end of an HTML section. .SH VERSION ! This is \fItexi2html\fP version 1.52, 01/05/98. .PP The latest version of \fItexi2html\fP can be found in WWW, cf. URL ! http://wwwinfo.cern.ch/dis/texi2html/ .SH AUTHOR ! The main author is Lionel Cons, CERN IT/DIS/OSE, Lionel.Cons@cern.ch. Many other people around the net contributed to this program. .SH COPYRIGHT diff -aNrc2 readline-2.2.1/examples/Makefile.in readline-4.0/examples/Makefile.in *** readline-2.2.1/examples/Makefile.in Fri Apr 3 11:18:56 1998 --- readline-4.0/examples/Makefile.in Thu Feb 18 12:24:58 1999 *************** *** 1,5 **** # This is the Makefile for the examples subdirectory of readline. -*- text -*- # ! SHELL = /bin/sh RM = rm -f --- 1,5 ---- # This is the Makefile for the examples subdirectory of readline. -*- text -*- # ! SHELL = @MAKE_SHELL@ RM = rm -f *************** *** 15,19 **** CPPFLAGS = @CPPFLAGS@ ! INCLUDES = -I $(srcdir) -I $(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) --- 15,19 ---- CPPFLAGS = @CPPFLAGS@ ! INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(CPPFLAGS) $(INCLUDES) $(CFLAGS) *************** *** 23,30 **** .c.o: $(CC) $(CCFLAGS) -c $< ! EXECUTABLES = fileman rltest rl ! OBJECTS = fileman.o rltest.o rl.o all: $(EXECUTABLES) --- 23,31 ---- .c.o: + ${RM} $@ $(CC) $(CCFLAGS) -c $< ! EXECUTABLES = fileman rltest rl rlversion ! OBJECTS = fileman.o rltest.o rl.o rlversion.o all: $(EXECUTABLES) *************** *** 39,42 **** --- 40,46 ---- $(CC) $(LDFLAGS) -o $@ rltest.o -lreadline $(TERMCAP_LIB) + rlversion: rlversion.o + $(CC) $(LDFLAGS) -o $@ rlversion.o -lreadline $(TERMCAP_LIB) + clean mostlyclean: $(RM) $(OBJECTS) *************** *** 49,50 **** --- 53,55 ---- rltest.o: rltest.c rl.o: rl.c + rlversion.o: rlversion.c diff -aNrc2 readline-2.2.1/examples/rl.c readline-4.0/examples/rl.c *** readline-2.2.1/examples/rl.c Fri Apr 3 11:37:26 1998 --- readline-4.0/examples/rl.c Wed Jun 3 13:38:31 1998 *************** *** 43,46 **** --- 43,47 ---- } + static void usage() { *************** *** 55,59 **** char *temp, *prompt; struct stat sb; ! int done, opt, fd; FILE *ifp; --- 56,60 ---- char *temp, *prompt; struct stat sb; ! int opt, fd; FILE *ifp; diff -aNrc2 readline-2.2.1/examples/rlversion.c readline-4.0/examples/rlversion.c *** readline-2.2.1/examples/rlversion.c Wed Dec 31 19:00:00 1969 --- readline-4.0/examples/rlversion.c Fri May 15 13:55:51 1998 *************** *** 0 **** --- 1,21 ---- + /* + * rlversion -- print out readline's version number + */ + + #define READLINE_LIBRARY + + #if defined (HAVE_CONFIG_H) + # include + #endif + + #include + #include + #include "posixstat.h" + + #include "readline.h" + + main() + { + printf ("%s\n", rl_library_version ? rl_library_version : "unknown"); + exit (0); + } diff -aNrc2 readline-2.2.1/funmap.c readline-4.0/funmap.c *** readline-2.2.1/funmap.c Mon Sep 8 16:02:33 1997 --- readline-4.0/funmap.c Thu Dec 31 10:11:50 1998 *************** *** 72,75 **** --- 72,76 ---- { "copy-region-as-kill", rl_copy_region_to_kill }, { "delete-char", rl_delete }, + { "delete-char-or-list", rl_delete_or_show_completions }, { "delete-horizontal-space", rl_delete_horizontal_space }, { "digit-argument", rl_digit_argument }, *************** *** 84,87 **** --- 85,89 ---- { "end-of-line", rl_end_of_line }, { "exchange-point-and-mark", rl_exchange_point_and_mark }, + { "forward-backward-delete-char", rl_rubout_or_delete }, { "forward-char", rl_forward }, { "forward-search-history", rl_forward_search_history }, diff -aNrc2 readline-2.2.1/histexpand.c readline-4.0/histexpand.c *** readline-2.2.1/histexpand.c Thu Nov 6 15:44:45 1997 --- readline-4.0/histexpand.c Tue Jan 12 11:31:39 1999 *************** *** 366,369 **** --- 366,373 ---- elen = 29; break; + case NO_PREV_SUBST: + emsg = "no previous substitution"; + elen = 24; + break; default: emsg = "unknown expansion error"; *************** *** 655,667 **** } - /* If there is no lhs, the substitution can't succeed. */ - if (subst_lhs_len == 0) - { - *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); - free (result); - free (temp); - return -1; - } - FREE (subst_rhs); subst_rhs = get_subst_pattern (string, &i, delimiter, 1, &subst_rhs_len); --- 659,662 ---- *************** *** 674,677 **** --- 669,681 ---- else i += 2; + + /* If there is no lhs, the substitution can't succeed. */ + if (subst_lhs_len == 0) + { + *ret_string = hist_error (string, starting_index, i, NO_PREV_SUBST); + free (result); + free (temp); + return -1; + } l_temp = strlen (temp); diff -aNrc2 readline-2.2.1/histfile.c readline-4.0/histfile.c *** readline-2.2.1/histfile.c Mon Oct 6 13:45:12 1997 --- readline-4.0/histfile.c Tue Sep 15 13:01:56 1998 *************** *** 156,160 **** --- 156,164 ---- buffer = xmalloc (file_size + 1); + #if 0 if (read (file, buffer, file_size) != file_size) + #else + if (read (file, buffer, file_size) < 0) + #endif { error_and_exit: *************** *** 218,222 **** history_truncate_file (fname, lines) char *fname; ! register int lines; { register int i; --- 222,226 ---- history_truncate_file (fname, lines) char *fname; ! int lines; { register int i; *************** *** 277,280 **** --- 281,290 ---- { write (file, buffer + i, file_size - i); + + #if defined (__BEOS__) + /* BeOS ignores O_TRUNC. */ + ftruncate (file, file_size - i); + #endif + close (file); } diff -aNrc2 readline-2.2.1/histlib.h readline-4.0/histlib.h *** readline-2.2.1/histlib.h Thu Nov 21 08:54:24 1996 --- readline-4.0/histlib.h Tue Jan 12 11:15:53 1999 *************** *** 70,73 **** --- 70,74 ---- #define SUBST_FAILED 2 #define BAD_MODIFIER 3 + #define NO_PREV_SUBST 4 /* Possible definitions for history starting point specification. */ diff -aNrc2 readline-2.2.1/history.c readline-4.0/history.c *** readline-2.2.1/history.c Fri Jul 18 17:05:41 1997 --- readline-4.0/history.c Fri Jun 5 16:07:42 1998 *************** *** 279,283 **** int which; char *line; ! char *data; { HIST_ENTRY *temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); --- 279,283 ---- int which; char *line; ! histdata_t data; { HIST_ENTRY *temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); diff -aNrc2 readline-2.2.1/history.h readline-4.0/history.h *** readline-2.2.1/history.h Wed Mar 26 11:57:22 1997 --- readline-4.0/history.h Fri Jun 5 16:24:45 1998 *************** *** 23,26 **** --- 23,36 ---- #define _HISTORY_H_ + #ifdef __cplusplus + extern "C" { + #endif + + #if defined READLINE_LIBRARY + # include "rlstdc.h" + #else + # include + #endif + #if !defined (_FUNCTION_DEF) # define _FUNCTION_DEF *************** *** 31,38 **** #endif /* The structure used to store a history entry. */ typedef struct _hist_entry { char *line; ! char *data; } HIST_ENTRY; --- 41,54 ---- #endif + #ifdef __STDC__ + typedef void *histdata_t; + #else + typedef char *histdata_t; + #endif + /* The structure used to store a history entry. */ typedef struct _hist_entry { char *line; ! histdata_t data; } HIST_ENTRY; *************** *** 53,63 **** /* Begin a session in which the history functions might be used. This just initializes the interactive variables. */ ! extern void using_history (); /* Return the current HISTORY_STATE of the history. */ ! extern HISTORY_STATE *history_get_history_state (); /* Set the state of the current history array to STATE. */ ! extern void history_set_history_state (); /* Manage the history list. */ --- 69,79 ---- /* Begin a session in which the history functions might be used. This just initializes the interactive variables. */ ! extern void using_history __P((void)); /* Return the current HISTORY_STATE of the history. */ ! extern HISTORY_STATE *history_get_history_state __P((void)); /* Set the state of the current history array to STATE. */ ! extern void history_set_history_state __P((HISTORY_STATE *)); /* Manage the history list. */ *************** *** 65,93 **** /* Place STRING at the end of the history list. The associated data field (if any) is set to NULL. */ ! extern void add_history (); /* A reasonably useless function, only here for completeness. WHICH is the magic number that tells us which element to delete. The elements are numbered from 0. */ ! extern HIST_ENTRY *remove_history (); /* Make the history entry at 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. */ ! extern HIST_ENTRY *replace_history_entry (); /* Clear the history list and start over. */ ! extern void clear_history (); /* Stifle the history list, remembering only MAX number of entries. */ ! extern void stifle_history (); /* Stop stifling the history. This returns the previous amount the history was stifled by. The value is positive if the history was stifled, negative if it wasn't. */ ! extern int unstifle_history (); /* Return 1 if the history is stifled, 0 if it is not. */ ! extern int history_is_stifled (); /* Information about the history list. */ --- 81,109 ---- /* Place STRING at the end of the history list. The associated data field (if any) is set to NULL. */ ! extern void add_history __P((char *)); /* A reasonably useless function, only here for completeness. WHICH is the magic number that tells us which element to delete. The elements are numbered from 0. */ ! extern HIST_ENTRY *remove_history __P((int)); /* Make the history entry at 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. */ ! extern HIST_ENTRY *replace_history_entry __P((int, char *, histdata_t)); /* Clear the history list and start over. */ ! extern void clear_history __P((void)); /* Stifle the history list, remembering only MAX number of entries. */ ! extern void stifle_history __P((int)); /* Stop stifling the history. This returns the previous amount the history was stifled by. The value is positive if the history was stifled, negative if it wasn't. */ ! extern int unstifle_history __P((void)); /* Return 1 if the history is stifled, 0 if it is not. */ ! extern int history_is_stifled __P((void)); /* Information about the history list. */ *************** *** 96,131 **** history. Element 0 of this list is the beginning of time. If there is no history, return NULL. */ ! extern HIST_ENTRY **history_list (); /* Returns the number which says what history element we are now looking at. */ ! extern int where_history (); /* 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 (); /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ ! extern HIST_ENTRY *history_get (); /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines. */ ! extern int history_total_bytes (); /* Moving around the history list. */ /* Set the position in the history list to POS. */ ! int history_set_pos (); /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer. */ ! extern HIST_ENTRY *previous_history (); /* Move history_offset forward to the next item in the input_history, and return the a pointer to that entry. If there is no next entry, return a NULL pointer. */ ! extern HIST_ENTRY *next_history (); /* Searching the history list. */ --- 112,147 ---- history. Element 0 of this list is the beginning of time. If there is no history, return NULL. */ ! extern HIST_ENTRY **history_list __P((void)); /* Returns the number which says what history element we are now looking at. */ ! 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)); /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ ! extern HIST_ENTRY *history_get __P((int)); /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines. */ ! 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)); /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer. */ ! extern HIST_ENTRY *previous_history __P((void)); /* Move history_offset forward to the next item in the input_history, and return the a pointer to that entry. If there is no next entry, return a NULL pointer. */ ! extern HIST_ENTRY *next_history __P((void)); /* Searching the history list. */ *************** *** 137,145 **** is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ ! extern int history_search (); /* Search the history for STRING, starting at history_offset. ! The search is anchored: matching lines must begin with string. */ ! extern int history_search_prefix (); /* Search for STRING in the history list, starting at POS, an --- 153,162 ---- is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ ! extern int history_search __P((char *, int)); /* Search the history for STRING, starting at history_offset. ! The search is anchored: matching lines must begin with string. ! DIRECTION is as in history_search(). */ ! extern int history_search_prefix __P((char *, int)); /* Search for STRING in the history list, starting at POS, an *************** *** 148,152 **** Returns the absolute index of the history element where STRING was found, or -1 otherwise. */ ! extern int history_search_pos (); /* Managing the history file. */ --- 165,169 ---- Returns the absolute index of the history element where STRING was found, or -1 otherwise. */ ! extern int history_search_pos __P((char *, int, int)); /* Managing the history file. */ *************** *** 155,159 **** If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ ! extern int read_history (); /* Read a range of lines from FILENAME, adding them to the history list. --- 172,176 ---- If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ ! extern int read_history __P((char *)); /* Read a range of lines from FILENAME, adding them to the history list. *************** *** 162,178 **** until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ ! extern int read_history_range (); /* Write the current history to FILENAME. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history (). */ ! extern int write_history (); /* 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 (); /* Truncate the history file, leaving only the last NLINES lines. */ ! extern int history_truncate_file (); /* History expansion. */ --- 179,195 ---- until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ ! extern int read_history_range __P((char *, int, int)); /* Write the current history to FILENAME. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history (). */ ! 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 *)); /* Truncate the history file, leaving only the last NLINES lines. */ ! extern int history_truncate_file __P((char *, int)); /* History expansion. */ *************** *** 190,207 **** If an error ocurred in expansion, then OUTPUT contains a descriptive error message. */ ! extern int history_expand (); /* Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are broken up as in the shell. */ ! extern char *history_arg_extract (); /* Return the text of the history event beginning at the current ! offset into STRING. */ ! extern char *get_history_event (); /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ ! extern char **history_tokenize (); /* Exported history variables. */ --- 207,228 ---- If an error ocurred in expansion, then OUTPUT contains a descriptive error message. */ ! extern int history_expand __P((char *, char **)); /* Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are broken up as in the shell. */ ! extern char *history_arg_extract __P((int, int, char *)); /* Return the text of the history event beginning at the current ! offset into STRING. Pass STRING with *INDEX equal to the ! history_expansion_char that begins this specification. ! DELIMITING_QUOTE is a character that is allowed to end the string ! specification for what to search for in addition to the normal ! characters `:', ` ', `\t', `\n', and sometimes `?'. */ ! extern char *get_history_event __P((char *, int *, int)); /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ ! extern char **history_tokenize __P((char *)); /* Exported history variables. */ *************** *** 220,223 **** --- 241,248 ---- application and not expanded. */ extern Function *history_inhibit_expansion_function; + + #ifdef __cplusplus + } + #endif #endif /* !_HISTORY_H_ */ diff -aNrc2 readline-2.2.1/input.c readline-4.0/input.c *** readline-2.2.1/input.c Wed Dec 11 11:59:34 1996 --- readline-4.0/input.c Tue Sep 15 13:03:28 1998 *************** *** 125,160 **** } ! /* Add KEY to the buffer of characters to be read. */ ! int ! rl_stuff_char (key) ! int key; ! { ! if (key == EOF) ! { ! key = NEWLINE; ! rl_pending_input = EOF; ! } ! ibuffer[push_index++] = key; ! if (push_index >= ibuffer_len) ! push_index = 0; ! return push_index; ! } ! ! /* Make C be the next command to be executed. */ ! int ! rl_execute_next (c) ! int c; ! { ! rl_pending_input = c; ! return 0; ! } ! ! /* Return the amount of space available in the ! buffer for stuffing characters. */ static int ibuffer_space () { if (pop_index > push_index) ! return (pop_index - push_index); else return (ibuffer_len - (push_index - pop_index)); --- 125,135 ---- } ! /* Return the amount of space available in the buffer for stuffing ! characters. */ static int ibuffer_space () { if (pop_index > push_index) ! return (pop_index - push_index - 1); else return (ibuffer_len - (push_index - pop_index)); *************** *** 342,345 **** --- 317,350 ---- } + /* Add KEY to the buffer of characters to be read. Returns 1 if the + character was stuffed correctly; 0 otherwise. */ + int + rl_stuff_char (key) + int key; + { + if (ibuffer_space () == 0) + return 0; + + if (key == EOF) + { + key = NEWLINE; + rl_pending_input = EOF; + } + ibuffer[push_index++] = key; + if (push_index >= ibuffer_len) + push_index = 0; + + return 1; + } + + /* Make C be the next command to be executed. */ + int + rl_execute_next (c) + int c; + { + rl_pending_input = c; + return 0; + } + /* **************************************************************** */ /* */ *************** *** 409,412 **** --- 414,422 ---- if (result == 0) return (EOF); + + #if defined (__BEOS__) + if (errno == EINTR) + continue; + #endif #if defined (EWOULDBLOCK) diff -aNrc2 readline-2.2.1/isearch.c readline-4.0/isearch.c *** readline-2.2.1/isearch.c Tue Aug 12 12:55:24 1997 --- readline-4.0/isearch.c Tue Feb 2 13:26:54 1999 *************** *** 49,52 **** --- 49,55 ---- #include "history.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; *************** *** 56,62 **** extern char *rl_line_buffer; - extern void _rl_save_prompt (); - extern void _rl_restore_prompt (); - extern int rl_execute_next (); extern void rl_extend_line_buffer (); --- 59,62 ---- *************** *** 179,182 **** --- 179,187 ---- int reverse; + /* The list of characters which terminate the search, but are not + subsequently executed. If the variable isearch-terminators has + been set, we use that value, otherwise we use ESC and C-J. */ + unsigned char *isearch_terminators; + orig_point = rl_point; last_found_line = orig_line = where_history (); *************** *** 185,188 **** --- 190,196 ---- allocated_line = (char *)NULL; + isearch_terminators = _rl_isearch_terminators ? _rl_isearch_terminators + : (unsigned char *)"\033\012"; + /* Create an arrary of pointers to the lines that we want to search. */ maybe_replace_line (); *************** *** 212,216 **** i = orig_line; ! _rl_save_prompt (); /* Initialize search parameters. */ --- 220,224 ---- i = orig_line; ! rl_save_prompt (); /* Initialize search parameters. */ *************** *** 247,254 **** --- 255,270 ---- } + #if 0 /* Let NEWLINE (^J) terminate the search for people who don't like using ESC. ^M can still be used to terminate the search and immediately execute the command. */ if (c == ESC || c == NEWLINE) + #else + /* The characters in isearch_terminators (set from the user-settable + variable isearch-terminators) are used to terminate the search but + not subsequently execute the character as a command. The default + value is "\033\012" (ESC and C-J). */ + if (strchr (isearch_terminators, c)) + #endif { /* ESC still terminates the search, but if there is pending *************** *** 292,296 **** rl_point = orig_point; rl_end = strlen (rl_line_buffer); ! _rl_restore_prompt(); rl_clear_message (); if (allocated_line) --- 308,312 ---- rl_point = orig_point; rl_end = strlen (rl_line_buffer); ! rl_restore_prompt(); rl_clear_message (); if (allocated_line) *************** *** 410,414 **** strcpy (rl_line_buffer, lines[orig_line]); ! _rl_restore_prompt (); /* Free the search string. */ --- 426,430 ---- strcpy (rl_line_buffer, lines[orig_line]); ! rl_restore_prompt (); /* Free the search string. */ *************** *** 416,422 **** if (last_found_line < orig_line) ! rl_get_previous_history (orig_line - last_found_line); else ! rl_get_next_history (last_found_line - orig_line); /* If the string was not found, put point at the end of the line. */ --- 432,438 ---- if (last_found_line < orig_line) ! rl_get_previous_history (orig_line - last_found_line, 0); else ! rl_get_next_history (last_found_line - orig_line, 0); /* If the string was not found, put point at the end of the line. */ diff -aNrc2 readline-2.2.1/keymaps.c readline-4.0/keymaps.c *** readline-2.2.1/keymaps.c Mon Mar 27 14:56:38 1995 --- readline-4.0/keymaps.c Fri Jun 5 15:37:34 1998 *************** *** 125,129 **** void rl_discard_keymap (map) ! Keymap (map); { int i; --- 125,129 ---- void rl_discard_keymap (map) ! Keymap map; { int i; diff -aNrc2 readline-2.2.1/keymaps.h readline-4.0/keymaps.h *** readline-2.2.1/keymaps.h Thu Sep 4 13:11:41 1997 --- readline-4.0/keymaps.h Fri Jun 5 15:41:19 1998 *************** *** 25,30 **** --- 25,32 ---- #if defined (READLINE_LIBRARY) + # include "rlstdc.h" # include "chardefs.h" #else + # include # include #endif *************** *** 71,95 **** /* Return a new, empty keymap. Free it with free() when you are done. */ ! extern Keymap rl_make_bare_keymap (); /* Return a new keymap which is a copy of MAP. */ ! extern Keymap rl_copy_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. */ ! extern Keymap rl_make_keymap (); ! extern void rl_discard_keymap (); /* Return the keymap corresponding to a given name. Names look like ! `emacs' or `emacs-meta' or `vi-insert'. */ ! extern Keymap rl_get_keymap_by_name (); /* Return the current keymap. */ ! extern Keymap rl_get_keymap (); /* Set the current keymap to MAP. */ ! extern void rl_set_keymap (); #endif /* _KEYMAPS_H_ */ --- 73,100 ---- /* Return a new, empty keymap. Free it with free() when you are done. */ ! extern Keymap rl_make_bare_keymap __P((void)); /* Return a new keymap which is a copy of MAP. */ ! extern Keymap rl_copy_keymap __P((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. */ ! extern Keymap rl_make_keymap __P((void)); ! /* Free the storage associated with a keymap. */ ! extern void rl_discard_keymap __P((Keymap)); ! ! /* These functions actually appear in bind.c */ /* Return the keymap corresponding to a given name. Names look like ! `emacs' or `emacs-meta' or `vi-insert'. */ ! extern Keymap rl_get_keymap_by_name __P((char *)); /* Return the current keymap. */ ! extern Keymap rl_get_keymap __P((void)); /* Set the current keymap to MAP. */ ! extern void rl_set_keymap __P((Keymap)); #endif /* _KEYMAPS_H_ */ diff -aNrc2 readline-2.2.1/kill.c readline-4.0/kill.c *** readline-2.2.1/kill.c Wed Jul 9 15:10:26 1997 --- readline-4.0/kill.c Tue Jun 30 17:16:16 1998 *************** *** 573,576 **** --- 573,578 ---- static int count_passed = 1; static int direction = 1; + static int undo_needed = 0; + int retval; if (rl_last_func != rl_yank_last_arg) *************** *** 583,587 **** else { ! rl_do_undo (); if (count < 1) direction = -direction; --- 585,590 ---- else { ! if (undo_needed) ! rl_do_undo (); if (count < 1) direction = -direction; *************** *** 589,599 **** if (history_skip < 0) history_skip = 0; - count_passed = count; } if (explicit_arg_p) ! return (rl_yank_nth_arg_internal (count, key, history_skip)); else ! return (rl_yank_nth_arg_internal ('$', key, history_skip)); } --- 592,604 ---- if (history_skip < 0) history_skip = 0; } if (explicit_arg_p) ! retval = rl_yank_nth_arg_internal (count_passed, key, history_skip); else ! retval = rl_yank_nth_arg_internal ('$', key, history_skip); ! ! undo_needed = retval == 0; ! return retval; } diff -aNrc2 readline-2.2.1/posixjmp.h readline-4.0/posixjmp.h *** readline-2.2.1/posixjmp.h Thu Jan 16 13:54:33 1997 --- readline-4.0/posixjmp.h Thu Feb 18 12:34:51 1999 *************** *** 10,17 **** #if defined (HAVE_POSIX_SIGSETJMP) # define procenv_t sigjmp_buf ! # undef setjmp ! # define setjmp(x) sigsetjmp((x), 1) ! # undef longjmp ! # define longjmp(x, n) siglongjmp((x), (n)) #else # define procenv_t jmp_buf --- 10,19 ---- #if defined (HAVE_POSIX_SIGSETJMP) # define procenv_t sigjmp_buf ! # if !defined (__OPENNT) ! # undef setjmp ! # define setjmp(x) sigsetjmp((x), 1) ! # undef longjmp ! # define longjmp(x, n) siglongjmp((x), (n)) ! # endif /* !__OPENNT */ #else # define procenv_t jmp_buf diff -aNrc2 readline-2.2.1/readline.c readline-4.0/readline.c *** readline-2.2.1/readline.c Thu Apr 2 11:16:12 1998 --- readline-4.0/readline.c Thu Dec 31 10:10:10 1998 *************** *** 65,69 **** #ifndef RL_LIBRARY_VERSION ! # define RL_LIBRARY_VERSION "2.2-bash" #endif --- 65,69 ---- #ifndef RL_LIBRARY_VERSION ! # define RL_LIBRARY_VERSION "4.0" #endif *************** *** 84,88 **** extern int _rl_output_character_function (); #endif - extern void _rl_get_screen_size (); extern int _rl_enable_meta; --- 84,87 ---- *************** *** 101,105 **** /* Functions imported from bind.c. */ extern void _rl_bind_if_unbound (); - extern int rl_set_keymap_from_edit_mode (); /* Functions imported from input.c. */ --- 100,103 ---- *************** *** 119,125 **** extern void _rl_clear_to_eol (); extern void _rl_clear_screen (); ! ! extern void _rl_save_prompt (); ! extern void _rl_restore_prompt (); extern void _rl_erase_at_end_of_line (); --- 117,121 ---- 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 (); *************** *** 254,260 **** /* If non-zero, then this is the address of a function to call just ! before readline_internal () prints the first prompt. */ Function *rl_startup_hook = (Function *)NULL; /* What we use internally. You should always refer to RL_LINE_BUFFER. */ static char *the_line; --- 250,261 ---- /* If non-zero, then this is the address of a function to call just ! before readline_internal_setup () prints the first prompt. */ Function *rl_startup_hook = (Function *)NULL; + /* If non-zero, this is the address of a function to call just before + readline_internal_setup () returns and readline_internal starts + reading input characters. */ + Function *rl_pre_input_hook = (Function *)NULL; + /* What we use internally. You should always refer to RL_LINE_BUFFER. */ static char *the_line; *************** *** 287,290 **** --- 288,294 ---- Keymap rl_executing_keymap; + /* Non-zero means to erase entire line, including prompt, on empty input lines. */ + int rl_erase_empty_line = 0; + /* Line buffer and maintenence. */ char *rl_line_buffer = (char *)NULL; *************** *** 389,392 **** --- 393,399 ---- #endif /* VI_MODE */ } + + if (rl_pre_input_hook) + (*rl_pre_input_hook) (); } *************** *** 406,410 **** temp = savestring (the_line); rl_revert_line (1, 0); ! entry = replace_history_entry (where_history (), the_line, (HIST_ENTRY *)NULL); _rl_free_history_entry (entry); --- 413,417 ---- temp = savestring (the_line); rl_revert_line (1, 0); ! entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL); _rl_free_history_entry (entry); *************** *** 489,492 **** --- 496,505 ---- (*rl_redisplay_function) (); + /* If the application writer has told us to erase the entire line if + the only character typed was something bound to rl_newline, do so. */ + if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline && + rl_point == 0 && rl_end == 0) + _rl_erase_entire_line (); + #if defined (READLINE_CALLBACKS) return 0; *************** *** 502,506 **** readline_internal_charloop () { ! int eof; while (rl_done == 0) --- 515,519 ---- readline_internal_charloop () { ! int eof = 1; while (rl_done == 0) *************** *** 838,846 **** int key, c, sawminus, sawdigits; ! _rl_save_prompt (); sawminus = sawdigits = 0; while (1) { rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); key = c = rl_read_key (); --- 851,867 ---- int key, c, sawminus, sawdigits; ! rl_save_prompt (); sawminus = sawdigits = 0; while (1) { + if (rl_numeric_arg > 1000000) + { + sawdigits = rl_explicit_arg = rl_numeric_arg = 0; + ding (); + rl_restore_prompt (); + rl_clear_message (); + return 1; + } rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); key = c = rl_read_key (); *************** *** 859,863 **** { key = rl_read_key (); ! _rl_restore_prompt (); rl_clear_message (); return (_rl_dispatch (key, _rl_keymap)); --- 880,884 ---- { key = rl_read_key (); ! rl_restore_prompt (); rl_clear_message (); return (_rl_dispatch (key, _rl_keymap)); *************** *** 882,886 **** if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0) rl_explicit_arg = 1; ! _rl_restore_prompt (); rl_clear_message (); return (_rl_dispatch (key, _rl_keymap)); --- 903,907 ---- if (sawminus && rl_numeric_arg == 1 && rl_explicit_arg == 0) rl_explicit_arg = 1; ! rl_restore_prompt (); rl_clear_message (); return (_rl_dispatch (key, _rl_keymap)); *************** *** 1232,1236 **** /* Clear the current line. Numeric argument to C-l does this. */ int ! rl_refresh_line () { int curr_line, nleft; --- 1253,1258 ---- /* Clear the current line. Numeric argument to C-l does this. */ int ! rl_refresh_line (ignore1, ignore2) ! int ignore1, ignore2; { int curr_line, nleft; *************** *** 1279,1283 **** if (rl_explicit_arg) { ! rl_refresh_line (); return 0; } --- 1301,1305 ---- if (rl_explicit_arg) { ! rl_refresh_line (count, key); return 0; } *************** *** 1429,1432 **** --- 1451,1459 ---- #endif /* VI_MODE */ + /* If we've been asked to erase empty lines, suppress the final update, + since _rl_update_final calls crlf(). */ + if (rl_erase_empty_line && rl_point == 0 && rl_end == 0) + return 0; + if (readline_echoing_p) _rl_update_final (); *************** *** 1508,1514 **** else return (rl_delete_text (rl_point, rl_point + 1)); - } /* Delete all spaces and tabs around point. */ int --- 1535,1554 ---- else return (rl_delete_text (rl_point, rl_point + 1)); } + /* Delete the character under the cursor, unless the insertion + point is at the end of the line, in which case the character + behind the cursor is deleted. COUNT is obeyed and may be used + to delete forward or backward that many characters. */ + int + rl_rubout_or_delete (count, key) + int count, key; + { + if (rl_end != 0 && rl_point == rl_end) + return (rl_rubout (count, key)); + else + return (rl_delete (count, key)); + } + /* Delete all spaces and tabs around point. */ int *************** *** 1534,1537 **** --- 1574,1590 ---- } + /* Like the tcsh editing function delete-char-or-list. The eof character + is caught before this is invoked, so this really does the same thing as + delete-char-or-list-or-eof, as long as it's bound to the eof character. */ + int + rl_delete_or_show_completions (count, key) + int count, key; + { + if (rl_end != 0 && rl_point == rl_end) + return (rl_possible_completions (count, key)); + else + return (rl_delete (count, key)); + } + #ifndef RL_COMMENT_BEGIN_DEFAULT #define RL_COMMENT_BEGIN_DEFAULT "#" *************** *** 1860,1864 **** if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list)) { ! temp = replace_history_entry (where_history (), the_line, rl_undo_list); free (temp->line); free (temp); --- 1913,1917 ---- if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list)) { ! temp = replace_history_entry (where_history (), the_line, (histdata_t)rl_undo_list); free (temp->line); free (temp); diff -aNrc2 readline-2.2.1/readline.h readline-4.0/readline.h *** readline-2.2.1/readline.h Mon Sep 8 16:00:15 1997 --- readline-4.0/readline.h Thu Dec 31 10:10:15 1998 *************** *** 24,31 **** --- 24,37 ---- #define _READLINE_H_ + #ifdef __cplusplus + extern "C" { + #endif + #if defined (READLINE_LIBRARY) + # include "rlstdc.h" # include "keymaps.h" # include "tilde.h" #else + # include # include # include *************** *** 61,136 **** extern FUNMAP **funmap; ! /* Functions available to bind to key sequences. */ ! extern int ! rl_tilde_expand (), rl_set_mark (), rl_exchange_point_and_mark (), ! rl_beg_of_line (), rl_backward (), rl_delete (), rl_end_of_line (), ! rl_forward (), ding (), rl_newline (), rl_kill_line (), ! rl_copy_region_to_kill (), rl_kill_region (), rl_char_search (), ! rl_clear_screen (), rl_get_next_history (), rl_get_previous_history (), ! rl_quoted_insert (), rl_reverse_search_history (), rl_transpose_chars (), ! rl_unix_line_discard (), rl_unix_word_rubout (), ! rl_yank (), rl_rubout (), rl_backward_word (), rl_kill_word (), ! rl_forward_word (), rl_tab_insert (), rl_yank_pop (), rl_yank_nth_arg (), ! rl_backward_kill_word (), rl_backward_kill_line (), rl_transpose_words (), ! rl_complete (), rl_possible_completions (), rl_insert_completions (), ! rl_menu_complete (), ! rl_do_lowercase_version (), rl_kill_full_line (), ! rl_digit_argument (), rl_universal_argument (), rl_abort (), ! rl_undo_command (), rl_revert_line (), rl_beginning_of_history (), ! rl_end_of_history (), rl_forward_search_history (), rl_insert (), ! rl_upcase_word (), rl_downcase_word (), rl_capitalize_word (), ! rl_restart_output (), rl_re_read_init_file (), ! rl_dump_functions (), rl_dump_variables (), rl_dump_macros (), ! rl_delete_horizontal_space (), rl_history_search_forward (), ! rl_history_search_backward (), rl_tty_status (), rl_yank_last_arg (), ! rl_insert_comment (), rl_backward_char_search (), ! rl_copy_forward_word (), rl_copy_backward_word (); ! ! /* Not available unless readline is compiled -DPAREN_MATCHING. */ ! extern int rl_insert_close (); ! ! /* Not available unless READLINE_CALLBACKS is defined. */ ! extern void rl_callback_handler_install (); ! extern void rl_callback_read_char (); ! extern void rl_callback_handler_remove (); /* Not available unless __CYGWIN32__ is defined. */ #ifdef __CYGWIN32__ ! extern int rl_paste_from_clipboard (); #endif ! /* These are *both* defined even when VI_MODE is not. */ ! extern int rl_vi_editing_mode (), rl_emacs_editing_mode (); ! /* Non incremental history searching. */ ! extern int rl_noninc_forward_search (); ! extern int rl_noninc_reverse_search (); ! extern int rl_noninc_forward_search_again (); ! extern int rl_noninc_reverse_search_again (); ! /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ ! extern int rl_vi_check (); ! extern int ! rl_vi_undo (), rl_vi_redo (), rl_vi_tilde_expand (), ! rl_vi_movement_mode (), rl_vi_insertion_mode (), rl_vi_arg_digit (), ! rl_vi_prev_word (), rl_vi_next_word (), rl_vi_char_search (), ! rl_vi_eof_maybe (), rl_vi_append_mode (), rl_vi_put (), ! rl_vi_append_eol (), rl_vi_insert_beg (), rl_vi_delete (), ! rl_vi_first_print (), rl_vi_fword (), rl_vi_fWord (), rl_vi_bword (), ! rl_vi_bWord (), rl_vi_eword (), rl_vi_eWord (), rl_vi_end_word (), ! rl_vi_change_case (), rl_vi_match (), rl_vi_bracktype (), ! rl_vi_change_char (), rl_vi_yank_arg (), rl_vi_search (), ! rl_vi_search_again (), rl_vi_subst (), rl_vi_overstrike (), ! rl_vi_overstrike_delete (), rl_vi_replace(), rl_vi_column (), ! rl_vi_delete_to (), rl_vi_change_to (), rl_vi_yank_to (), ! rl_vi_complete (), rl_vi_fetch_history (), rl_vi_set_mark (), ! rl_vi_goto_mark (), rl_vi_back_to_indent (); ! ! /* Keyboard macro commands. */ ! extern int rl_start_kbd_macro (), rl_end_kbd_macro (); ! extern int rl_call_last_kbd_macro (); ! extern void rl_push_macro_input (); ! extern int rl_arrow_keys(), rl_refresh_line (); /* **************************************************************** */ --- 67,255 ---- extern FUNMAP **funmap; ! /* **************************************************************** */ ! /* */ ! /* Functions available to bind to key sequences */ ! /* */ ! /* **************************************************************** */ + /* Bindable commands for numeric arguments. */ + extern int rl_digit_argument __P((int, int)); + extern int rl_universal_argument __P((int, int)); + + /* Bindable commands for moving the cursor. */ + extern int rl_forward __P((int, int)); + extern int rl_backward __P((int, int)); + extern int rl_beg_of_line __P((int, int)); + extern int rl_end_of_line __P((int, int)); + extern int rl_forward_word __P((int, int)); + extern int rl_backward_word __P((int, int)); + extern int rl_refresh_line __P((int, int)); + extern int rl_clear_screen __P((int, int)); + extern int rl_arrow_keys __P((int, int)); + + /* Bindable commands for inserting and deleting text. */ + extern int rl_insert __P((int, int)); + extern int rl_quoted_insert __P((int, int)); + extern int rl_tab_insert __P((int, int)); + extern int rl_newline __P((int, int)); + extern int rl_do_lowercase_version __P((int, int)); + extern int rl_rubout __P((int, int)); + extern int rl_delete __P((int, int)); + extern int rl_rubout_or_delete __P((int, int)); + extern int rl_delete_horizontal_space __P((int, int)); + extern int rl_delete_or_show_completions __P((int, int)); + extern int rl_insert_comment __P((int, int)); + + /* Bindable commands for changing case. */ + extern int rl_upcase_word __P((int, int)); + extern int rl_downcase_word __P((int, int)); + extern int rl_capitalize_word __P((int, int)); + + /* Bindable commands for transposing characters and words. */ + extern int rl_transpose_words __P((int, int)); + extern int rl_transpose_chars __P((int, int)); + + /* Bindable commands for searching within a line. */ + extern int rl_char_search __P((int, int)); + extern int rl_backward_char_search __P((int, int)); + + /* Bindable commands for readline's interface to the command history. */ + extern int rl_beginning_of_history __P((int, int)); + extern int rl_end_of_history __P((int, int)); + extern int rl_get_next_history __P((int, int)); + extern int rl_get_previous_history __P((int, int)); + + /* Bindable commands for managing the mark and region. */ + extern int rl_set_mark __P((int, int)); + extern int rl_exchange_point_and_mark __P((int, int)); + + /* Bindable commands to set the editing mode (emacs or vi). */ + extern int rl_vi_editing_mode __P((int, int)); + extern int rl_emacs_editing_mode __P((int, int)); + + /* Bindable commands for managing key bindings. */ + extern int rl_re_read_init_file __P((int, int)); + extern int rl_dump_functions __P((int, int)); + extern int rl_dump_macros __P((int, int)); + extern int rl_dump_variables __P((int, int)); + + /* Bindable commands for word completion. */ + extern int rl_complete __P((int, int)); + extern int rl_possible_completions __P((int, int)); + extern int rl_insert_completions __P((int, int)); + extern int rl_menu_complete __P((int, int)); + + /* Bindable commands for killing and yanking text, and managing the kill ring. */ + extern int rl_kill_word __P((int, int)); + extern int rl_backward_kill_word __P((int, int)); + extern int rl_kill_line __P((int, int)); + extern int rl_backward_kill_line __P((int, int)); + extern int rl_kill_full_line __P((int, int)); + extern int rl_unix_word_rubout __P((int, int)); + extern int rl_unix_line_discard __P((int, int)); + extern int rl_copy_region_to_kill __P((int, int)); + extern int rl_kill_region __P((int, int)); + extern int rl_copy_forward_word __P((int, int)); + extern int rl_copy_backward_word __P((int, int)); + extern int rl_yank __P((int, int)); + extern int rl_yank_pop __P((int, int)); + extern int rl_yank_nth_arg __P((int, int)); + extern int rl_yank_last_arg __P((int, int)); /* Not available unless __CYGWIN32__ is defined. */ #ifdef __CYGWIN32__ ! extern int rl_paste_from_clipboard __P((int, int)); #endif ! /* Bindable commands for incremental searching. */ ! extern int rl_reverse_search_history __P((int, int)); ! extern int rl_forward_search_history __P((int, int)); ! ! /* Bindable keyboard macro commands. */ ! extern int rl_start_kbd_macro __P((int, int)); ! extern int rl_end_kbd_macro __P((int, int)); ! extern int rl_call_last_kbd_macro __P((int, int)); ! ! /* Bindable undo commands. */ ! extern int rl_revert_line __P((int, int)); ! extern int rl_undo_command __P((int, int)); ! ! /* Bindable tilde expansion commands. */ ! extern int rl_tilde_expand __P((int, int)); ! ! /* Bindable terminal control commands. */ ! extern int rl_restart_output __P((int, int)); ! extern int rl_stop_output __P((int, int)); ! ! /* Miscellaneous bindable commands. */ ! extern int rl_abort __P((int, int)); ! extern int rl_tty_status __P((int, int)); ! ! /* Bindable commands for incremental and non-incremental history searching. */ ! extern int rl_history_search_forward __P((int, int)); ! extern int rl_history_search_backward __P((int, int)); ! extern int rl_noninc_forward_search __P((int, int)); ! 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. */ ! extern int rl_insert_close __P((int, int)); ! /* Not available unless READLINE_CALLBACKS is defined. */ ! extern void rl_callback_handler_install __P((char *, VFunction *)); ! extern void rl_callback_read_char __P((void)); ! extern void rl_callback_handler_remove __P((void)); ! /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ ! /* VI-mode bindable commands. */ ! extern int rl_vi_redo __P((int, int)); ! extern int rl_vi_undo __P((int, int)); ! extern int rl_vi_yank_arg __P((int, int)); ! extern int rl_vi_fetch_history __P((int, int)); ! extern int rl_vi_search_again __P((int, int)); ! extern int rl_vi_search __P((int, int)); ! extern int rl_vi_complete __P((int, int)); ! extern int rl_vi_tilde_expand __P((int, int)); ! extern int rl_vi_prev_word __P((int, int)); ! extern int rl_vi_next_word __P((int, int)); ! extern int rl_vi_end_word __P((int, int)); ! extern int rl_vi_insert_beg __P((int, int)); ! extern int rl_vi_append_mode __P((int, int)); ! extern int rl_vi_append_eol __P((int, int)); ! extern int rl_vi_eof_maybe __P((int, int)); ! extern int rl_vi_insertion_mode __P((int, int)); ! extern int rl_vi_movement_mode __P((int, int)); ! extern int rl_vi_arg_digit __P((int, int)); ! extern int rl_vi_change_case __P((int, int)); ! extern int rl_vi_put __P((int, int)); ! extern int rl_vi_column __P((int, int)); ! extern int rl_vi_delete_to __P((int, int)); ! extern int rl_vi_change_to __P((int, int)); ! extern int rl_vi_yank_to __P((int, int)); ! extern int rl_vi_delete __P((int, int)); ! extern int rl_vi_back_to_indent __P((int, int)); ! extern int rl_vi_first_print __P((int, int)); ! extern int rl_vi_char_search __P((int, int)); ! extern int rl_vi_match __P((int, int)); ! extern int rl_vi_change_char __P((int, int)); ! extern int rl_vi_subst __P((int, int)); ! extern int rl_vi_overstrike __P((int, int)); ! extern int rl_vi_overstrike_delete __P((int, int)); ! extern int rl_vi_replace __P((int, int)); ! extern int rl_vi_set_mark __P((int, int)); ! extern int rl_vi_goto_mark __P((int, int)); ! ! /* VI-mode utility functions. */ ! extern int rl_vi_check __P((void)); ! extern int rl_vi_domove __P((int, int *)); ! extern int rl_vi_bracktype __P((int)); ! ! /* VI-mode pseudo-bindable commands, used as utility functions. */ ! extern int rl_vi_fWord __P((int, int)); ! extern int rl_vi_bWord __P((int, int)); ! extern int rl_vi_eWord __P((int, int)); ! extern int rl_vi_fword __P((int, int)); ! extern int rl_vi_bword __P((int, int)); ! extern int rl_vi_eword __P((int, int)); /* **************************************************************** */ *************** *** 142,196 **** /* Readline functions. */ /* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ ! extern char *readline (); ! /* These functions are from bind.c. */ ! /* 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. */ ! extern int rl_add_defun (); ! ! extern Keymap rl_make_bare_keymap (); ! extern Keymap rl_copy_keymap (); ! extern Keymap rl_make_keymap (); ! extern void rl_discard_keymap (); ! extern Keymap rl_get_keymap (), rl_get_keymap_by_name (); ! extern void rl_set_keymap (); ! extern char *rl_get_keymap_name (); ! ! extern int rl_bind_key (), rl_bind_key_in_map (); ! extern int rl_unbind_key (), rl_unbind_key_in_map (); ! extern int rl_unbind_function_in_map (), rl_unbind_command_in_map (); ! extern int rl_set_key (); ! extern int rl_generic_bind (); ! extern int rl_parse_and_bind (); ! /* Backwards compatibility, use rl_generic_bind instead. */ ! extern int rl_macro_bind (), rl_variable_bind (); ! extern int rl_read_init_file (); ! extern Function *rl_named_function (), *rl_function_of_keyseq (); ! extern char **rl_invoking_keyseqs (), **rl_invoking_keyseqs_in_map (); ! extern void rl_function_dumper (); ! extern void rl_variable_dumper (); ! extern void rl_macro_dumper (); ! extern void rl_list_funmap_names (); /* Undocumented in the texinfo manual; not really useful to programs. */ ! extern int rl_translate_keyseq (); ! extern void rl_initialize_funmap (); ! /* Functions for undoing. */ ! extern int rl_begin_undo_group (), rl_end_undo_group (); ! extern void rl_add_undo (), free_undo_list (); ! extern int rl_do_undo (); ! extern int rl_modifying (); /* Functions for redisplay. */ ! extern void rl_redisplay (); ! extern int rl_forced_update_display (); ! extern int rl_clear_message (); ! extern int rl_reset_line_state (); ! extern int rl_on_new_line (); #if defined (__STDC__) && defined (USE_VARARGS) && defined (PREFER_STDARG) --- 261,338 ---- /* Readline functions. */ /* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ ! extern char *readline __P((char *)); ! extern int rl_initialize __P((void)); ! extern int rl_discard_argument __P((void)); ! /* Utility functions to bind keys to readline commands. */ ! extern int rl_add_defun __P((char *, Function *, int)); ! extern int rl_bind_key __P((int, Function *)); ! extern int rl_bind_key_in_map __P((int, Function *, Keymap)); ! extern int rl_unbind_key __P((int)); ! extern int rl_unbind_key_in_map __P((int, Keymap)); ! extern int rl_unbind_function_in_map __P((Function *, Keymap)); ! extern int rl_unbind_command_in_map __P((char *, Keymap)); ! extern int rl_set_key __P((char *, Function *, Keymap)); ! extern int rl_generic_bind __P((int, char *, char *, Keymap)); ! extern int rl_variable_bind __P((char *, char *)); ! ! /* Backwards compatibility, use rl_generic_bind instead. */ ! extern int rl_macro_bind __P((char *, char *, Keymap)); /* Undocumented in the texinfo manual; not really useful to programs. */ ! extern int rl_translate_keyseq __P((char *, char *, int *)); ! extern char *rl_untranslate_keyseq __P((int)); ! extern Function *rl_named_function __P((char *)); ! extern Function *rl_function_of_keyseq __P((char *, Keymap, int *)); ! ! extern void rl_list_funmap_names __P((void)); ! extern char **rl_invoking_keyseqs_in_map __P((Function *, Keymap)); ! extern char **rl_invoking_keyseqs __P((Function *)); ! ! extern void rl_function_dumper __P((int)); ! extern void rl_macro_dumper __P((int)); ! extern void rl_variable_dumper __P((int)); ! ! extern int rl_read_init_file __P((char *)); ! extern int rl_parse_and_bind __P((char *)); ! ! /* Functions for manipulating keymaps. */ ! extern Keymap rl_make_bare_keymap __P((void)); ! extern Keymap rl_copy_keymap __P((Keymap)); ! extern Keymap rl_make_keymap __P((void)); ! extern void rl_discard_keymap __P((Keymap)); ! ! extern Keymap rl_get_keymap_by_name __P((char *)); ! extern char *rl_get_keymap_name __P((Keymap)); ! extern void rl_set_keymap __P((Keymap)); ! extern Keymap rl_get_keymap __P((void)); ! extern void rl_set_keymap_from_edit_mode __P((void)); ! extern char *rl_get_keymap_name_from_edit_mode __P((void)); ! ! /* Functions for manipulating the funmap, which maps command names to functions. */ ! extern int rl_add_funmap_entry __P((char *, Function *)); ! extern void rl_initialize_funmap __P((void)); ! extern char **rl_funmap_names __P((void)); ! ! /* Utility functions for managing keyboard macros. */ ! extern void rl_push_macro_input __P((char *)); ! ! /* Functions for undoing, from undo.c */ ! extern void rl_add_undo __P((enum undo_code, int, int, char *)); ! extern void free_undo_list __P((void)); ! extern int rl_do_undo __P((void)); ! extern int rl_begin_undo_group __P((void)); ! extern int rl_end_undo_group __P((void)); ! 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_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) *************** *** 201,234 **** /* Undocumented in texinfo manual. */ ! extern int rl_character_len (); ! extern int rl_show_char (); ! extern int crlf (); /* Modifying text. */ ! extern int rl_insert_text (), rl_delete_text (); ! extern int rl_kill_text (); ! extern char *rl_copy_text (); ! ! /* `Public' utility functions. */ ! extern int rl_reset_terminal (); ! extern int rl_stuff_char (); ! extern int rl_read_key (), rl_getc (); ! ! extern int rl_initialize (); ! /* Undocumented. */ ! extern int rl_expand_prompt (); ! extern int rl_set_signals (), rl_clear_signals (); ! extern int maybe_save_line (), maybe_unsave_line (), maybe_replace_line (); /* Completion functions. */ ! /* These functions are from complete.c. */ ! extern int rl_complete_internal (); ! /* Return an array of strings which are the result of repeatadly calling ! FUNC with TEXT. */ ! extern char **completion_matches (); ! extern char *username_completion_function (); ! extern char *filename_completion_function (); /* **************************************************************** */ --- 343,399 ---- /* Undocumented in texinfo manual. */ ! extern int rl_show_char __P((int)); ! extern int rl_character_len __P((int, int)); ! extern int crlf __P((void)); ! ! /* Save and restore internal prompt redisplay information. */ ! extern void rl_save_prompt __P((void)); ! extern void rl_restore_prompt __P((void)); /* Modifying text. */ ! extern int rl_insert_text __P((char *)); ! extern int rl_delete_text __P((int, int)); ! extern int rl_kill_text __P((int, int)); ! extern char *rl_copy_text __P((int, int)); ! ! /* Terminal and tty mode management. */ ! extern void rl_prep_terminal __P((int)); ! extern void rl_deprep_terminal __P((void)); ! extern void rltty_set_default_bindings __P((Keymap)); ! ! extern int rl_reset_terminal __P((char *)); ! extern void rl_resize_terminal __P((void)); ! ! /* `Public' utility functions . */ ! extern void rl_extend_line_buffer __P((int)); ! extern int ding __P((void)); ! ! /* Functions for character input. */ ! extern int rl_stuff_char __P((int)); ! extern int rl_execute_next __P((int)); ! extern int rl_read_key __P((void)); ! extern int rl_getc __P((FILE *)); ! ! /* Readline signal handling, from signals.c */ ! extern int rl_set_signals __P((void)); ! extern int rl_clear_signals __P((void)); ! extern void rl_cleanup_after_signal __P((void)); ! extern void rl_reset_after_signal __P((void)); ! extern void rl_free_line_state __P((void)); ! /* Undocumented. */ ! extern int rl_expand_prompt __P((char *)); ! ! extern int maybe_save_line __P((void)); ! extern int maybe_unsave_line __P((void)); ! extern int maybe_replace_line __P((void)); /* Completion functions. */ ! extern int rl_complete_internal __P((int)); ! extern void rl_display_match_list __P((char **, int, int)); ! extern char **completion_matches __P((char *, CPFunction *)); ! extern char *username_completion_function __P((char *, int)); ! extern char *filename_completion_function __P((char *, int)); /* **************************************************************** */ *************** *** 255,262 **** --- 420,431 ---- extern int rl_point, rl_end; + /* The mark, or saved cursor position. */ extern int rl_mark; + /* Flag to indicate that readline has finished with the current input + line and should return it. */ extern int rl_done; + /* If set to a character value, that will be the next keystroke read. */ extern int rl_pending_input; *************** *** 276,279 **** --- 445,453 ---- extern Function *rl_startup_hook; + /* If non-zero, this is the address of a function to call just before + readline_internal_setup () returns and readline_internal starts + reading input characters. */ + extern Function *rl_pre_input_hook; + /* The address of a function to call periodically while Readline is awaiting character input, or NULL, for no event handling. */ *************** *** 289,292 **** --- 463,484 ---- extern Keymap rl_binding_keymap; + /* Display variables. */ + /* If non-zero, readline will erase the entire line, including any prompt, + if the only thing typed on an otherwise-blank line is something bound to + rl_newline. */ + extern int rl_erase_empty_line; + + /* 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. */ + extern int rl_catch_signals; + + /* If non-zero, readline will install a signal handler for SIGWINCH + that also attempts to call any calling application's SIGWINCH signal + handler. Note that the terminal is not cleaned up before the + application's signal handler is called; use rl_cleanup_after_signal() + to do that. */ + extern int rl_catch_sigwinch; + /* Completion variables. */ /* Pointer to the generator function for completion_matches (). *************** *** 347,350 **** --- 539,551 ---- #define rl_symbolic_link_hook rl_directory_completion_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 instead of actually doing the display. + It takes three arguments: (char **matches, int num_matches, int max_length) + where MATCHES is the array of strings that matched, NUM_MATCHES is the + number of strings in that array, and MAX_LENGTH is the length of the + longest string in that array. */ + extern VFunction *rl_completion_display_matches_hook; + /* 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 *************** *** 412,415 **** --- 613,620 ---- #if !defined (savestring) extern char *savestring (); /* XXX backwards compatibility */ + #endif + + #ifdef __cplusplus + } #endif diff -aNrc2 readline-2.2.1/rlconf.h readline-4.0/rlconf.h *** readline-2.2.1/rlconf.h Sun Feb 26 15:41:49 1995 --- readline-4.0/rlconf.h Fri May 15 09:59:23 1998 *************** *** 57,63 **** /* Define this if you want code that allows readline to be used in an X `callback' style. */ ! #if !defined (SHELL) ! # define READLINE_CALLBACKS ! #endif #endif /* _RLCONF_H_ */ --- 57,61 ---- /* Define this if you want code that allows readline to be used in an X `callback' style. */ ! #define READLINE_CALLBACKS #endif /* _RLCONF_H_ */ diff -aNrc2 readline-2.2.1/rlstdc.h readline-4.0/rlstdc.h *** readline-2.2.1/rlstdc.h Wed Dec 31 19:00:00 1969 --- readline-4.0/rlstdc.h Fri Jun 5 15:31:37 1998 *************** *** 0 **** --- 1,79 ---- + /* stdc.h -- macros to make source compile on both ANSI C and K&R C + compilers. */ + + /* Copyright (C) 1993 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 1, 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, 675 Mass Ave, Cambridge, MA 02139, USA. */ + + #if !defined (_RL_STDC_H_) + #define _RL_STDC_H_ + + /* Adapted from BSD /usr/include/sys/cdefs.h. */ + + /* 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 (__STDC__) + + # if !defined (__P) + # define __P(protos) protos + # endif + # define __STRING(x) #x + + # if !defined (__GNUC__) + # define inline + # endif + + #else /* !__STDC__ */ + + # if !defined (__P) + # 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 /* !_RL_STDC_H_ */ diff -aNrc2 readline-2.2.1/rltty.c readline-4.0/rltty.c *** readline-2.2.1/rltty.c Thu Feb 6 09:14:13 1997 --- readline-4.0/rltty.c Wed May 13 17:55:41 1998 *************** *** 38,44 **** #include "rldefs.h" ! #if !defined (SHELL) && defined (GWINSZ_IN_SYS_IOCTL) # include ! #endif /* !SHELL && GWINSZ_IN_SYS_IOCTL */ #include "rltty.h" --- 38,44 ---- #include "rldefs.h" ! #if defined (GWINSZ_IN_SYS_IOCTL) # include ! #endif /* GWINSZ_IN_SYS_IOCTL */ #include "rltty.h" *************** *** 145,149 **** #endif ! #if !defined (SHELL) && defined (TIOCGWINSZ) /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ --- 145,149 ---- #endif ! #if defined (TIOCGWINSZ) /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ *************** *** 157,163 **** (void) ioctl (tty, TIOCSWINSZ, &w); } ! #else /* SHELL || !TIOCGWINSZ */ ! # define set_winsize(tty) ! #endif /* SHELL || !TIOCGWINSZ */ #if defined (NEW_TTY_DRIVER) --- 157,161 ---- (void) ioctl (tty, TIOCSWINSZ, &w); } ! #endif /* TIOCGWINSZ */ #if defined (NEW_TTY_DRIVER) *************** *** 390,393 **** --- 388,392 ---- { int ioctl_ret; + set_winsize (tty); diff -aNrc2 readline-2.2.1/savestring.c readline-4.0/savestring.c *** readline-2.2.1/savestring.c Wed Dec 31 19:00:00 1969 --- readline-4.0/savestring.c Thu Dec 31 14:39:49 1998 *************** *** 0 **** --- 1,33 ---- + /* savestring.c */ + + /* Copyright (C) 1998 Free Software Foundation, Inc. + + This file is part of the GNU Readline Library, a library for + reading lines of text with interactive input and history editing. + + 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 + (at your option) any later version. + + The GNU Readline Library 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. + + 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. */ + + extern char *strcpy (); + extern char *xmalloc (); + + /* Backwards compatibility, now that savestring has been removed from + all `public' readline header files. */ + char * + savestring (s) + char *s; + { + return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s))); + } diff -aNrc2 readline-2.2.1/search.c readline-4.0/search.c *** readline-2.2.1/search.c Thu Mar 6 16:26:16 1997 --- readline-4.0/search.c Mon May 18 10:15:04 1998 *************** *** 62,66 **** extern int _rl_free_history_entry (); extern char *_rl_make_prompt_for_search (); - extern void _rl_restore_prompt (); extern void rl_extend_line_buffer (); --- 62,65 ---- *************** *** 173,177 **** free (p); ! #define SEARCH_RETURN _rl_restore_prompt (); return /* Read the search string. */ --- 172,176 ---- free (p); ! #define SEARCH_RETURN rl_restore_prompt (); return /* Read the search string. */ *************** *** 242,246 **** } ! _rl_restore_prompt (); noninc_dosearch (noninc_search_string, dir); } --- 241,245 ---- } ! rl_restore_prompt (); noninc_dosearch (noninc_search_string, dir); } diff -aNrc2 readline-2.2.1/shell.c readline-4.0/shell.c *** readline-2.2.1/shell.c Tue Feb 3 10:31:56 1998 --- readline-4.0/shell.c Thu May 14 16:35:41 1998 *************** *** 27,34 **** #endif #if defined (HAVE_UNISTD_H) - # ifdef _MINIX - # include - # endif # include #endif /* HAVE_UNISTD_H */ --- 27,33 ---- #endif + #include + #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ *************** *** 46,65 **** #endif /* !HAVE_STRING_H */ ! extern char *xmalloc (), *xrealloc (); ! #if !defined (SHELL) ! #ifdef savestring ! #undef savestring ! #endif ! /* Backwards compatibility, now that savestring has been removed from ! all `public' readline header files. */ ! char * ! savestring (s) ! char *s; ! { ! return ((char *)strcpy (xmalloc (1 + (int)strlen (s)), (s))); ! } /* Does shell-like quoting using single quotes. */ --- 45,58 ---- #endif /* !HAVE_STRING_H */ ! #include ! #if !defined (HAVE_GETPW_DECLS) ! extern struct passwd *getpwuid (); ! #endif /* !HAVE_GETPW_DECLS */ ! extern char *xmalloc (); ! /* All of these functions are resolved from bash if we are linking readline ! as part of bash. */ /* Does shell-like quoting using single quotes. */ *************** *** 127,138 **** } - #else /* SHELL */ - extern char *get_string_value (); - char * ! get_env_value (varname) ! char *varname; { ! return get_string_value (varname); ! } ! #endif /* SHELL */ --- 120,133 ---- } char * ! get_home_dir () { ! char *home_dir; ! struct passwd *entry; ! ! home_dir = (char *)NULL; ! entry = getpwuid (getuid ()); ! if (entry) ! home_dir = entry->pw_dir; ! return (home_dir); ! } diff -aNrc2 readline-2.2.1/shlib/Makefile.in readline-4.0/shlib/Makefile.in *** readline-2.2.1/shlib/Makefile.in Wed Dec 31 19:00:00 1969 --- readline-4.0/shlib/Makefile.in Thu Feb 18 12:25:29 1999 *************** *** 0 **** --- 1,316 ---- + ## -*- text -*- ## + # Makefile for the GNU readline library shared library support. + # + # Copyright (C) 1998 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., 675 Mass Ave, Cambridge, MA 02139, USA. + RL_LIBRARY_VERSION = @LIBVERSION@ + RL_LIBRARY_NAME = readline + + srcdir = @srcdir@ + VPATH = .:@top_srcdir@ + topdir = @top_srcdir@ + BUILD_DIR = @BUILD_DIR@ + + INSTALL = @INSTALL@ + INSTALL_PROGRAM = @INSTALL_PROGRAM@ + INSTALL_DATA = @INSTALL_DATA@ + + CC = @CC@ + RANLIB = @RANLIB@ + AR = @AR@ + ARFLAGS = @ARFLAGS@ + RM = rm -f + CP = cp + MV = mv + + SHELL = @MAKE_SHELL@ + + host_os = @host_os@ + + prefix = @prefix@ + exec_prefix = @exec_prefix@ + libdir = @libdir@ + + CFLAGS = @CFLAGS@ + LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' + CPPFLAGS = @CPPFLAGS@ + LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@ @CFLAGS@ + + DEFS = @DEFS@ + LOCAL_DEFS = @LOCAL_DEFS@ + + # + # These values are generated for configure by ${topdir}/support/shobj-conf. + # If your system is not supported by that script, but includes facilities for + # dynamic loading of shared objects, please update the script and send the + # changes to bash-maintainers@gnu.org. + # + SHOBJ_CC = @SHOBJ_CC@ + SHOBJ_CFLAGS = @SHOBJ_CFLAGS@ + SHOBJ_LD = @SHOBJ_LD@ + + SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@ + SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@ + SHOBJ_LIBS = @SHOBJ_LIBS@ + + SHLIB_XLDFLAGS = @SHLIB_XLDFLAGS@ + SHLIB_LIBS = @SHLIB_LIBS@ + SHLIB_LIBSUFF = @SHLIB_LIBSUFF@ + + SHLIB_LIBVERSION = @SHLIB_LIBVERSION@ + + SHLIB_STATUS = @SHLIB_STATUS@ + + # shared library versioning + SHLIB_MAJOR= 4 + # shared library systems like SVR4's do not use minor versions + SHLIB_MINOR= .0 + + # For libraries which include headers from other libraries. + INCLUDES = -I. -I.. -I$(topdir) -I$(includedir) + + CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(CPPFLAGS) $(INCLUDES) $(LOCAL_CFLAGS) $(CFLAGS) + + .SUFFIXES: .so + + .c.so: + ${RM} $@ + $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -o $*.o $< + $(MV) $*.o $@ + + # The name of the main library target. + + SHARED_READLINE = libreadline.$(SHLIB_LIBVERSION) + SHARED_HISTORY = libhistory.$(SHLIB_LIBVERSION) + SHARED_LIBS = $(SHARED_READLINE) $(SHARED_HISTORY) + + # The C code source files for this library. + CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \ + $(topdir)/vi_mode.c $(topdir)/parens.c $(topdir)/rltty.c \ + $(topdir)/complete.c $(topdir)/bind.c $(topdir)/isearch.c \ + $(topdir)/display.c $(topdir)/signals.c $(topdir)/emacs_keymap.c \ + $(topdir)/vi_keymap.c $(topdir)/util.c $(topdir)/kill.c \ + $(topdir)/undo.c $(topdir)/macro.c $(topdir)/input.c \ + $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c \ + $(topdir)/history.c $(topdir)/histsearch.c $(topdir)/histexpand.c \ + $(topdir)/histfile.c $(topdir)/nls.c $(topdir)/search.c \ + $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.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 + + SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so + SHARED_TILDEOBJ = tilde.so + SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \ + rltty.so complete.so bind.so isearch.so display.so signals.so \ + util.so kill.so undo.so macro.so input.so callback.so terminal.so \ + nls.so xmalloc.so $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) + + ########################################################################## + + all: $(SHLIB_STATUS) + + supported: $(SHARED_LIBS) + + 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 "Please send the changes you made to bash-maintainers@gnu.org" + @echo "for inclusion in future bash and readline releases." + + $(SHARED_READLINE): $(SHARED_OBJ) + $(RM) $@ + $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_OBJ) $(SHLIB_LIBS) + + $(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so + $(RM) $@ + $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so $(SHLIB_LIBS) + + installdirs: $(topdir)/support/mkdirs + -$(SHELL) $(topdir)/support/mkdirs $(libdir) + + install: installdirs $(SHLIB_STATUS) + $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY) + $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -i "$(INSTALL_DATA)" $(SHARED_READLINE) + @echo install: you may need to run ldconfig + + uninstall: + $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_HISTORY) + $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -d $(libdir) -U $(SHARED_READLINE) + @echo uninstall: you may need to run ldconfig + + clean mostlyclean: force + $(RM) $(SHARED_OBJ) $(SHARED_LIBS) + + distclean maintainer-clean: clean + $(RM) Makefile + + force: + + # Tell versions [3.59,3.63) of GNU make not to export all variables. + # Otherwise a system limit (for SysV at least) may be exceeded. + .NOEXPORT: + + # Dependencies + bind.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h + bind.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + bind.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + bind.so: $(topdir)/tilde.h $(topdir)/history.h + callback.so: $(topdir)/rlconf.h + callback.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h + callback.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + callback.so: $(topdir)/tilde.h + complete.so: $(topdir)/ansi_stdlib.h posixdir.h $(topdir)/posixstat.h + complete.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + complete.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + complete.so: $(topdir)/tilde.h + display.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h + display.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + display.so: $(topdir)/tcap.h + display.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + display.so: $(topdir)/tilde.h $(topdir)/history.h + funmap.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + funmap.so: $(topdir)/rlconf.h $(topdir)/ansi_stdlib.h + funmap.so: ${BUILD_DIR}/config.h $(topdir)/tilde.h + histexpand.so: $(topdir)/ansi_stdlib.h + histexpand.so: $(topdir)/history.h histlib.h + histexpand.so: ${BUILD_DIR}/config.h + histfile.so: $(topdir)/ansi_stdlib.h + histfile.so: $(topdir)/history.h histlib.h + histfile.so: ${BUILD_DIR}/config.h + history.so: $(topdir)/ansi_stdlib.h + history.so: $(topdir)/history.h histlib.h + history.so: ${BUILD_DIR}/config.h + histsearch.so: $(topdir)/ansi_stdlib.h + histsearch.so: $(topdir)/history.h histlib.h + histsearch.so: ${BUILD_DIR}/config.h + input.so: $(topdir)/ansi_stdlib.h + input.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + input.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + input.so: $(topdir)/tilde.h + isearch.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + isearch.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + isearch.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h + keymaps.so: emacs_keymap.c vi_keymap.c + keymaps.so: $(topdir)/keymaps.h $(topdir)/chardefs.h $(topdir)/rlconf.h + keymaps.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + keymaps.so: ${BUILD_DIR}/config.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h + kill.so: $(topdir)/ansi_stdlib.h + kill.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + kill.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + kill.so: $(topdir)/tilde.h $(topdir)/history.h + macro.so: $(topdir)/ansi_stdlib.h + macro.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + 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 + 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 + readline.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + readline.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + readline.so: $(topdir)/history.h $(topdir)/tilde.h + readline.so: $(topdir)/posixstat.h $(topdir)/ansi_stdlib.h $(topdir)/posixjmp.h + rltty.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + rltty.so: $(topdir)/rltty.h $(topdir)/tilde.h + rltty.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + search.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + search.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + search.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h + signals.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + signals.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + signals.so: $(topdir)/history.h $(topdir)/tilde.h + terminal.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + terminal.so: $(topdir)/tcap.h + terminal.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + terminal.so: $(topdir)/tilde.h $(topdir)/history.h + tilde.so: $(topdir)/ansi_stdlib.h ${BUILD_DIR}/config.h $(topdir)/tilde.h + undo.so: $(topdir)/ansi_stdlib.h + undo.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + undo.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + undo.so: $(topdir)/tilde.h $(topdir)/history.h + util.so: $(topdir)/posixjmp.h $(topdir)/ansi_stdlib.h + util.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + util.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + util.so: $(topdir)/tilde.h + vi_mode.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h + vi_mode.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h + 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 + + readline.so: $(topdir)/readline.c + vi_mode.so: $(topdir)/vi_mode.c + funmap.so: $(topdir)/funmap.c + keymaps.so: $(topdir)/keymaps.c + parens.so: $(topdir)/parens.c + search.so: $(topdir)/search.c + rltty.so: $(topdir)/rltty.c + complete.so: $(topdir)/complete.c + bind.so: $(topdir)/bind.c + isearch.so: $(topdir)/isearch.c + display.so: $(topdir)/display.c + signals.so: $(topdir)/signals.c + util.so: $(topdir)/util.c + kill.so: $(topdir)/kill.c + undo.so: $(topdir)/undo.c + macro.so: $(topdir)/macro.c + input.so: $(topdir)/input.c + callback.so: $(topdir)/callback.c + terminal.so: $(topdir)/terminal.c + nls.so: $(topdir)/nls.c + xmalloc.so: $(topdir)/xmalloc.c + history.so: $(topdir)/history.c + histexpand.so: $(topdir)/histexpand.c + histfile.so: $(topdir)/histfile.c + histsearch.so: $(topdir)/histsearch.c + savestring.so: $(topdir)/savestring.c + shell.so: $(topdir)/shell.c + tilde.so: $(topdir)/tilde.c + + readline.so: readline.c + vi_mode.so: vi_mode.c + funmap.so: funmap.c + keymaps.so: keymaps.c + parens.so: parens.c + search.so: search.c + rltty.so: rltty.c + complete.so: complete.c + bind.so: bind.c + isearch.so: isearch.c + display.so: display.c + signals.so: signals.c + util.so: util.c + kill.so: kill.c + undo.so: undo.c + macro.so: macro.c + input.so: input.c + callback.so: callback.c + terminal.so: terminal.c + nls.so: nls.c + xmalloc.so: xmalloc.c + history.so: history.c + histexpand.so: histexpand.c + histfile.so: histfile.c + histsearch.so: histsearch.c + savestring.so: savestring.c + shell.so: shell.c + tilde.so: tilde.c diff -aNrc2 readline-2.2.1/signals.c readline-4.0/signals.c *** readline-2.2.1/signals.c Wed Mar 26 13:47:06 1997 --- readline-4.0/signals.c Thu May 14 12:56:26 1998 *************** *** 50,65 **** #include "history.h" - 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 (RETSIGTYPE) # if defined (VOID_SIGHANDLER) --- 50,53 ---- *************** *** 80,85 **** --- 68,99 ---- 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 (); + static SigHandler *rl_set_sighandler (); + /* Exported variables for use by applications. */ + + /* If non-zero, readline will install its own signal handlers for + SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ + int rl_catch_signals = 1; + + /* If non-zero, readline will install a signal handler for SIGWINCH. */ + #ifdef SIGWINCH + int rl_catch_sigwinch = 1; + #endif + + static int signals_set_flag; + static int sigwinch_set_flag; + /* **************************************************************** */ /* */ *************** *** 88,117 **** /* **************************************************************** */ - /* If we're not being compiled as part of bash, initialize handlers for - and catch the job control signals (SIGTTIN, SIGTTOU, SIGTSTP) and - SIGTERM. */ - #if !defined (SHELL) - # define HANDLE_JOB_SIGNALS - # define HANDLE_SIGTERM - #endif /* !SHELL */ - #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; } sighandler_cxt; # define sigemptyset(m) #endif /* !HAVE_POSIX_SIGNALS */ ! static sighandler_cxt old_int, old_alrm; ! ! #if defined (HANDLE_JOB_SIGNALS) static sighandler_cxt old_tstp, old_ttou, old_ttin; - #endif /* HANDLE_JOB_SIGNALS */ - - #if defined (HANDLE_SIGTERM) - static sighandler_cxt old_term; #endif - #if defined (SIGWINCH) static sighandler_cxt old_winch; --- 102,117 ---- /* **************************************************************** */ #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; #endif #if defined (SIGWINCH) static sighandler_cxt old_winch; *************** *** 144,159 **** { case SIGINT: ! { ! register HIST_ENTRY *entry; ! ! free_undo_list (); ! ! entry = current_history (); ! if (entry) ! entry->data = (char *)NULL; ! } ! _rl_kill_kbd_macro (); ! rl_clear_message (); ! _rl_init_argument (); #if defined (SIGTSTP) --- 144,149 ---- { case SIGINT: ! rl_free_line_state (); ! /* FALLTHROUGH */ #if defined (SIGTSTP) *************** *** 164,171 **** case SIGALRM: case SIGTERM: ! _rl_clean_up_for_exit (); ! (*rl_deprep_term_function) (); ! rl_clear_signals (); ! rl_pending_input = 0; #if defined (HAVE_POSIX_SIGNALS) --- 154,159 ---- case SIGALRM: case SIGTERM: ! case SIGQUIT: ! rl_cleanup_after_signal (); #if defined (HAVE_POSIX_SIGNALS) *************** *** 189,194 **** #endif /* !HAVE_POSIX_SIGNALS */ ! (*rl_prep_term_function) (_rl_meta_flag); ! rl_set_signals (); } --- 177,181 ---- #endif /* !HAVE_POSIX_SIGNALS */ ! rl_reset_after_signal (); } *************** *** 198,202 **** #if defined (SIGWINCH) static RETSIGTYPE ! rl_handle_sigwinch (sig) int sig; { --- 185,189 ---- #if defined (SIGWINCH) static RETSIGTYPE ! rl_sigwinch_handler (sig) int sig; { *************** *** 210,221 **** because we call the application's SIGWINCH handler after updating our own idea of the screen size. */ ! rl_set_sighandler (SIGWINCH, rl_handle_sigwinch, &dummy_winch); #endif ! if (readline_echoing_p) ! { ! _rl_get_screen_size (fileno (rl_instream), 1); ! _rl_redisplay_after_sigwinch (); ! } /* If another sigwinch handler has been installed, call it. */ --- 197,204 ---- because we call the application's SIGWINCH handler after updating our own idea of the screen size. */ ! rl_set_sighandler (SIGWINCH, rl_sigwinch_handler, &dummy_winch); #endif ! rl_resize_terminal (); /* If another sigwinch handler has been installed, call it. */ *************** *** 264,323 **** } ! int ! rl_set_signals () { sighandler_cxt dummy; SigHandler *oh; - #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&dummy.sa_mask); ! #endif ! ! oh = rl_set_sighandler (SIGINT, rl_signal_handler, &old_int); if (oh == (SigHandler *)SIG_IGN) ! rl_sigaction (SIGINT, &old_int, &dummy); ! oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm); ! if (oh == (SigHandler *)SIG_IGN) ! rl_sigaction (SIGALRM, &old_alrm, &dummy); #if defined (HAVE_POSIX_SIGNALS) && defined (SA_RESTART) ! /* If the application using readline has already installed a signal ! handler with SA_RESTART, SIGALRM will cause reads to be restarted ! automatically, so readline should just get out of the way. Since ! we tested for SIG_IGN above, we can just test for SIG_DFL here. */ ! if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART)) ! rl_sigaction (SIGALRM, &old_alrm, &dummy); #endif /* HAVE_POSIX_SIGNALS */ - #if defined (HANDLE_JOB_SIGNALS) - #if defined (SIGTSTP) ! oh = rl_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp); ! if (oh == (SigHandler *)SIG_IGN) ! rl_sigaction (SIGTSTP, &old_tstp, &dummy); ! #else ! oh = (SigHandler *)NULL; #endif /* SIGTSTP */ #if defined (SIGTTOU) ! rl_set_sighandler (SIGTTOU, rl_signal_handler, &old_ttou); ! rl_set_sighandler (SIGTTIN, rl_signal_handler, &old_ttin); ! ! if (oh == (SigHandler *)SIG_IGN) ! { ! rl_set_sighandler (SIGTTOU, SIG_IGN, &dummy); ! rl_set_sighandler (SIGTTIN, SIG_IGN, &dummy); ! } #endif /* SIGTTOU */ ! #endif /* HANDLE_JOB_SIGNALS */ ! #if defined (HANDLE_SIGTERM) ! /* Handle SIGTERM if we're not being compiled as part of bash. */ ! rl_set_sighandler (SIGTERM, rl_signal_handler, &old_term); ! #endif /* HANDLE_SIGTERM */ #if defined (SIGWINCH) ! rl_set_sighandler (SIGWINCH, rl_handle_sigwinch, &old_winch); #endif /* SIGWINCH */ --- 247,310 ---- } ! static void ! rl_maybe_set_sighandler (sig, handler, ohandler) ! int sig; ! SigHandler *handler; ! sighandler_cxt *ohandler; { sighandler_cxt dummy; SigHandler *oh; sigemptyset (&dummy.sa_mask); ! oh = rl_set_sighandler (sig, handler, ohandler); if (oh == (SigHandler *)SIG_IGN) ! rl_sigaction (sig, ohandler, &dummy); ! } ! int ! rl_set_signals () ! { ! sighandler_cxt dummy; ! SigHandler *oh; ! ! if (rl_catch_signals && signals_set_flag == 0) ! { ! rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int); ! rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term); ! rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit); ! ! oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm); ! if (oh == (SigHandler *)SIG_IGN) ! rl_sigaction (SIGALRM, &old_alrm, &dummy); #if defined (HAVE_POSIX_SIGNALS) && defined (SA_RESTART) ! /* If the application using readline has already installed a signal ! handler with SA_RESTART, SIGALRM will cause reads to be restarted ! automatically, so readline should just get out of the way. Since ! we tested for SIG_IGN above, we can just test for SIG_DFL here. */ ! if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART)) ! rl_sigaction (SIGALRM, &old_alrm, &dummy); #endif /* HAVE_POSIX_SIGNALS */ #if defined (SIGTSTP) ! rl_maybe_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp); #endif /* SIGTSTP */ #if defined (SIGTTOU) ! rl_maybe_set_sighandler (SIGTTOU, rl_signal_handler, &old_ttou); #endif /* SIGTTOU */ ! #if defined (SIGTTIN) ! rl_maybe_set_sighandler (SIGTTIN, rl_signal_handler, &old_ttin); ! #endif /* SIGTTIN */ ! signals_set_flag = 1; ! } #if defined (SIGWINCH) ! if (rl_catch_sigwinch && sigwinch_set_flag == 0) ! { ! rl_maybe_set_sighandler (SIGWINCH, rl_sigwinch_handler, &old_winch); ! sigwinch_set_flag = 1; ! } #endif /* SIGWINCH */ *************** *** 330,363 **** sighandler_cxt dummy; ! #if defined (HAVE_POSIX_SIGNALS) ! sigemptyset (&dummy.sa_mask); ! #endif ! ! rl_sigaction (SIGINT, &old_int, &dummy); ! rl_sigaction (SIGALRM, &old_alrm, &dummy); ! #if defined (HANDLE_JOB_SIGNALS) #if defined (SIGTSTP) ! rl_sigaction (SIGTSTP, &old_tstp, &dummy); ! #endif #if defined (SIGTTOU) ! rl_sigaction (SIGTTOU, &old_ttou, &dummy); ! rl_sigaction (SIGTTIN, &old_ttin, &dummy); #endif /* SIGTTOU */ ! #endif /* HANDLE_JOB_SIGNALS */ ! #if defined (HANDLE_SIGTERM) ! rl_sigaction (SIGTERM, &old_term, &dummy); ! #endif /* HANDLE_SIGTERM */ #if defined (SIGWINCH) ! sigemptyset (&dummy.sa_mask); ! rl_sigaction (SIGWINCH, &old_winch, &dummy); #endif return 0; } #endif /* HANDLE_SIGNALS */ --- 317,394 ---- sighandler_cxt dummy; ! if (rl_catch_signals && signals_set_flag == 1) ! { ! sigemptyset (&dummy.sa_mask); ! rl_sigaction (SIGINT, &old_int, &dummy); ! rl_sigaction (SIGTERM, &old_term, &dummy); ! rl_sigaction (SIGQUIT, &old_quit, &dummy); ! rl_sigaction (SIGALRM, &old_alrm, &dummy); #if defined (SIGTSTP) ! rl_sigaction (SIGTSTP, &old_tstp, &dummy); ! #endif /* SIGTSTP */ #if defined (SIGTTOU) ! rl_sigaction (SIGTTOU, &old_ttou, &dummy); #endif /* SIGTTOU */ ! #if defined (SIGTTIN) ! rl_sigaction (SIGTTIN, &old_ttin, &dummy); ! #endif /* SIGTTIN */ ! signals_set_flag = 0; ! } #if defined (SIGWINCH) ! if (rl_catch_sigwinch && sigwinch_set_flag == 1) ! { ! sigemptyset (&dummy.sa_mask); ! rl_sigaction (SIGWINCH, &old_winch, &dummy); ! sigwinch_set_flag = 0; ! } #endif return 0; } + + /* Clean up the terminal and readline state after catching a signal, before + resending it to the calling application. */ + void + rl_cleanup_after_signal () + { + _rl_clean_up_for_exit (); + (*rl_deprep_term_function) (); + rl_clear_signals (); + rl_pending_input = 0; + } + + /* Reset the terminal and readline state after a signal handler returns. */ + void + rl_reset_after_signal () + { + (*rl_prep_term_function) (_rl_meta_flag); + rl_set_signals (); + } + + /* Free up the readline variable line state for the current line (undo list, + any partial history entry, any keyboard macros in progress, and any + numeric arguments in process) after catching a signal, before calling + rl_cleanup_after_signal(). */ + void + rl_free_line_state () + { + register HIST_ENTRY *entry; + + free_undo_list (); + + entry = current_history (); + if (entry) + entry->data = (char *)NULL; + + _rl_kill_kbd_macro (); + rl_clear_message (); + _rl_init_argument (); + } + #endif /* HANDLE_SIGNALS */ diff -aNrc2 readline-2.2.1/support/config.guess readline-4.0/support/config.guess *** readline-2.2.1/support/config.guess Fri Mar 27 16:37:51 1998 --- readline-4.0/support/config.guess Tue Dec 29 09:10:39 1998 *************** *** 152,155 **** --- 152,167 ---- 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 + exit 0 ;; + SX-4:SUPER-UX:*:*) + echo sx4-nec-superux${UNAME_RELEASE} + exit 0 ;; # end cases added for Bash alpha:OSF1:*:*) *************** *** 214,217 **** --- 226,232 ---- echo m68k-cbm-openbsd${UNAME_RELEASE} exit 0 ;; + *:[Aa]miga[Oo][Ss]:*:*) + echo ${UNAME_MACHINE}-unknown-amigaos + exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} *************** *** 316,323 **** exit 0 ;; Power?Macintosh:Rhapsody:*:*) ! echo powerpc-apple-nextstep${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) ! echo ${UNAME_MACHINE}-unknown-nextstep${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) --- 331,338 ---- exit 0 ;; Power?Macintosh:Rhapsody:*:*) ! echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) ! echo ${UNAME_MACHINE}-unknown-rhapsody${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) *************** *** 738,741 **** --- 753,761 ---- echo i386-sequent-sysv4 exit 0 ;; + # added by chet for bash based on usenet posting from 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:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version *************** *** 863,867 **** # says echo i586-unisys-sysv4 ! exit 0 ;; esac --- 883,887 ---- # says echo i586-unisys-sysv4 ! exit 0 ;; esac diff -aNrc2 readline-2.2.1/support/config.sub readline-4.0/support/config.sub *** readline-2.2.1/support/config.sub Wed Oct 8 11:03:43 1997 --- readline-4.0/support/config.sub Thu Dec 31 09:37:04 1998 *************** *** 95,99 **** -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ ! -apple) os= basic_machine=$1 --- 95,99 ---- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ ! -apple ) os= basic_machine=$1 *************** *** 103,107 **** ;; -sco5) ! os=sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; --- 103,107 ---- ;; -sco5) ! os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; *************** *** 176,180 **** | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* \ ! | alpha-* | we32k-* | cydra-* | ns16k-* \ | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \ | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \ --- 176,181 ---- | 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-* \ *************** *** 184,188 **** | tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \ | concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \ ! | *-convex) ;; # Recognize the various machine names and aliases which stand --- 185,189 ---- | tandem-* | symmetric-* | drs6000-icl | *-*ardent | gould-gould \ | concurrent-* | ksr1-* | esa-ibm | fxc-alliant | *370-amdahl \ ! | *-convex | sx4*-nec) ;; # Recognize the various machine names and aliases which stand *************** *** 209,213 **** ;; amiga | amiga-*) ! basic_machine=m68k-cbm ;; amigados) --- 210,219 ---- ;; amiga | amiga-*) ! # basic_machine=m68k-cbm ! basic_machine=m68k-unknown ! ;; ! amigaos) ! basic_machine=m68k-unknown ! os=-amigaos ;; amigados) *************** *** 405,408 **** --- 411,422 ---- basic_machine=m68000-convergent ;; + mipsel*-linux*) + basic_machine=mipsel-unknown + os=-linux + ;; + mips*-linux*) + basic_machine=mips-unknown + os=-linux + ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` *************** *** 455,458 **** --- 469,480 ---- basic_machine=np1-gould ;; + osr5 | sco5) # SCO Open Server + basic_machine=i386-pc + os=-sco3.2v5 + ;; + odt | odt3 | odt4) # SCO Open Desktop + basic_machine=i386-pc + os=-sco3.2v4 + ;; pa-hitachi) basic_machine=hppa1.1-hitachi *************** *** 585,588 **** --- 607,618 ---- os=-sym1 ;; + uw2 | unixware | unixware2) + basic_machine=i386-pc + os=-sysv4.2uw2.1 + ;; + uw7 | unixware7) + basic_machine=i386-pc + os=-sysv5uw7 + ;; vaxv) basic_machine=vax-dec *************** *** 623,627 **** # some cases the only manufacturer, in others, it is the most popular. mips) ! basic_machine=mips-mips ;; romp) --- 653,661 ---- # some cases the only manufacturer, in others, it is the most popular. mips) ! if test "x$os" = "x-linux" ; then ! basic_machine=mips-unknown ! else ! basic_machine=mips-mips ! fi ;; romp) *************** *** 684,690 **** os=-solaris2 ;; ! -unixware* | svr4*) os=-sysv4 ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` --- 718,730 ---- os=-solaris2 ;; ! svr4*) os=-sysv4 ;; + -unixware | -uw | -unixware2* | -uw2*) + os=-sysv4.2uw2.1 + ;; + -unixware7* | -uw7*) + os=-sysv5uw7 + ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` *************** *** 697,701 **** | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ ! | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ --- 737,741 ---- | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ ! | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ *************** *** 705,709 **** | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ! | -linux-gnu* | -uxpv* | -qnx* | -powerux) # Remember, each alternative MUST END IN *, to match a version number. ;; --- 745,750 ---- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ ! | -linux-gnu* | -uxpv* | -qnx* | -powerux* | -beos* | -rhapsody* \ ! | -superux* ) # Remember, each alternative MUST END IN *, to match a version number. ;; *************** *** 760,764 **** os=-sysv4 ;; ! # This must come after -sysvr4. -sysv*) ;; --- 801,808 ---- os=-sysv4 ;; ! -sysvr5) ! os=-sysv5 ! ;; ! # This must come after -sysvr[45]. -sysv*) ;; *************** *** 818,821 **** --- 862,868 ---- os=-sunos4.1.1 ;; + *-be) + os=-beos + ;; *-ibm) os=-aix *************** *** 831,835 **** ;; *-cbm) ! os=-amigados ;; *-dg) --- 878,882 ---- ;; *-cbm) ! os=-amigaos ;; *-dg) diff -aNrc2 readline-2.2.1/support/mkdist readline-4.0/support/mkdist *** readline-2.2.1/support/mkdist Wed Apr 16 13:09:54 1997 --- readline-4.0/support/mkdist Tue Feb 2 13:07:53 1999 *************** *** 49,53 **** newdir=${ROOTNAME}-$version ! vmsg creating distribution for version $version in $newdir if [ ! -d $newdir ]; then --- 49,53 ---- newdir=${ROOTNAME}-$version ! vmsg creating distribution for $ROOTNAME version $version in $newdir if [ ! -d $newdir ]; then diff -aNrc2 readline-2.2.1/support/shlib-install readline-4.0/support/shlib-install *** readline-2.2.1/support/shlib-install Wed Dec 31 19:00:00 1969 --- readline-4.0/support/shlib-install Tue Jan 5 11:58:27 1999 *************** *** 0 **** --- 1,105 ---- + #! /bin/sh + # + # shlib-install - install a shared library and do any necessary host-specific + # post-installation configuration (like ldconfig) + # + # usage: shlib-install [-D] -O host_os -d installation-dir -i install-prog [-U] library + # + # Chet Ramey + # chet@po.cwru.edu + + # + # defaults + # + INSTALLDIR=/usr/local/lib + LDCONFIG=ldconfig + + PROGNAME=`basename $0` + USAGE="$PROGNAME [-D] -O host_os -d installation-dir -i install-prog [-U] library" + + # process options + + while [ $# -gt 0 ]; do + case "$1" in + -O) shift; host_os="$1"; shift ;; + -d) shift; INSTALLDIR="$1"; shift ;; + -i) shift; INSTALLPROG="$1" ; shift ;; + -D) echo=echo ; shift ;; + -U) uninstall=true ; shift ;; + -*) echo "$USAGE" >&2 ; exit 2;; + *) break ;; + esac + done + + # set install target name + LIBNAME="$1" + + if [ -z "$LIBNAME" ]; then + echo "$USAGE" >&2 + exit 2 + fi + + OLDSUFF=old + MV=mv + RM="rm -f" + LN="ln -s" + + # pre-install + + if [ -z "$uninstall" ]; then + ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} + if [ -f "$INSTALLDIR/$LIBNAME" ]; then + ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}${OLDSUFF} + fi + fi + + # install/uninstall + + if [ -z "$uninstall" ] ; then + ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME} + else + ${echo} ${RM} ${INSTALLDIR}/${LIBNAME} + fi + + # post-install/uninstall + + case "$LIBNAME" in + *.*.[0-9].[0-9]) # libname.so.M.N + LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M + LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'` # libname.so + ;; + *.*.[0-9]) # libname.so.M + LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so + ;; + esac + + # + # Create symlinks to the installed library. This section is incomplete. + # + case "$host_os" in + *linux*|bsdi4*) + # 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 + ;; + + solaris2*|aix4.[2-9]*|hpux1*) + # libname.so -> libname.so.M + ${echo} ${RM} ${INSTALLDIR}/$LINK1 + if [ -z "$uninstall" ]; then + ${echo} ln -s $INSTALLDIR/$LIBNAME ${INSTALLDIR}/$LINK1 + fi + ;; + + *) ;; + esac + + exit 0 diff -aNrc2 readline-2.2.1/support/shobj-conf readline-4.0/support/shobj-conf *** readline-2.2.1/support/shobj-conf Wed Dec 31 19:00:00 1969 --- readline-4.0/support/shobj-conf Tue Dec 29 15:05:29 1998 *************** *** 0 **** --- 1,341 ---- + #! /bin/sh + # + # shobj-conf -- output a series of variable assignments to be substituted + # into a Makefile by configure which specify system-dependent + # information for creating shared objects that may be loaded + # into bash with `enable -f' + # + # usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor + # + # Chet Ramey + # chet@po.cwru.edu + + # + # defaults + # + SHOBJ_STATUS=supported + SHLIB_STATUS=supported + + SHOBJ_CC=cc + SHOBJ_CFLAGS= + SHOBJ_LD= + SHOBJ_LDFLAGS= + SHOBJ_XLDFLAGS= + SHOBJ_LIBS= + + SHLIB_XLDFLAGS= + SHLIB_LIBS= + SHLIB_LIBSUFF='so' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' + + PROGNAME=`basename $0` + USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" + + while [ $# -gt 0 ]; do + case "$1" in + -C) shift; SHOBJ_CC="$1"; shift ;; + -c) shift; host_cpu="$1"; shift ;; + -o) shift; host_os="$1"; shift ;; + -v) shift; host_vendor="$1"; shift ;; + *) echo "$USAGE" >&2 ; exit 2;; + esac + done + + case "${host_os}-${SHOBJ_CC}" in + sunos4*-gcc*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=/usr/bin/ld + SHOBJ_LDFLAGS='-assert pure-text' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + sunos4*) + SHOBJ_CFLAGS=-pic + SHOBJ_LD=/usr/bin/ld + SHOBJ_LDFLAGS='-assert pure-text' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + sunos5*-gcc*|solaris2*-gcc*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-i' + + SHLIB_XLDFLAGS='-R $(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sunos5*|solaris2*) + SHOBJ_CFLAGS='-K pic' + SHOBJ_LD=/usr/ccs/bin/ld + SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' + + SHLIB_XLDFLAGS='-R $(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + freebsd2* | netbsd* | openbsd*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-x -Bshareable' + + SHLIB_XLDFLAGS='-R$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + freebsd3*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared' + + SHLIB_XLDFLAGS='-R$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + linux*) + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' + + SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + bsdi2*) + SHOBJ_CC=shlicc2 + SHOBJ_CFLAGS= + SHOBJ_LD=ld + SHOBJ_LDFLAGS=-r + SHOBJ_LIBS=-lc_s.2.1.0 + + # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in + # the ass -- they require changing {/usr/lib,etc}/shlib.map on + # each system, and the library creation process is byzantine + SHLIB_STATUS=unsupported + ;; + + bsdi3*) + SHOBJ_CC=shlicc2 + SHOBJ_CFLAGS= + SHOBJ_LD=ld + SHOBJ_LDFLAGS=-r + SHOBJ_LIBS=-lc_s.3.0.0 + + # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in + # the ass -- they require changing {/usr/lib,etc}/shlib.map on + # each system, and the library creation process is byzantine + SHLIB_STATUS=unsupported + ;; + + bsdi4*) + # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked + # shared libraries. gcc 2.x is the standard compiler, and the + # `normal' gcc options should work as they do in Linux. + + SHOBJ_CFLAGS=-fPIC + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' + ;; + + osf*) + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' + + SHLIB_XLDFLAGS='-rpath $(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + aix4.[2-9]*-gcc*) # lightly tested by jik@cisco.com + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='ld' + SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' + SHOBJ_XLDFLAGS='-G' + + SHLIB_XLDFLAGS='-bM:SRE' + SHLIB_LIBS='-lcurses -lc' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + aix4.[2-9]*) + SHOBJ_CFLAGS=-K + SHOBJ_LD='ld' + SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' + SHOBJ_XLDFLAGS='-G' + + SHLIB_XLDFLAGS='-bM:SRE' + SHLIB_LIBS='-lcurses -lc' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + # + # THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface + # + irix[56]*-gcc*) + SHOBJ_CFLAGS='-fpic' + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' + + SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + irix[56]*) + SHOBJ_CFLAGS='-K PIC' + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' + + SHLIB_XLDFLAGS='-rpath $(libdir)' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + hpux9*-gcc*) + # must use gcc; the bundled cc cannot compile PIC code + SHOBJ_CFLAGS='-fpic' + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' + SHLIB_LIBSUFF='sl' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + hpux9*) + SHOBJ_STATUS=unsupported + SHLIB_STATUS=unsupported + ;; + + hpux10*-gcc*) + # must use gcc; the bundled cc cannot compile PIC code + SHOBJ_CFLAGS='-fpic' + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' + + SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' + SHLIB_LIBSUFF='sl' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + hpux10*) + SHOBJ_STATUS=unsupported + SHLIB_STATUS=unsupported + ;; + + hpux11*-gcc*) + # must use gcc; the bundled cc cannot compile PIC code + SHOBJ_CFLAGS='-fpic' + SHOBJ_LD='${CC}' + # SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' + SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s -Wl,+h,$@' + + SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' + SHLIB_LIBSUFF='sl' + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + hpux11*) + SHOBJ_STATUS=unsupported + SHLIB_STATUS=unsupported + ;; + + sysv4*-gcc*) + SHOBJ_CFLAGS=-shared + SHOBJ_LDFLAGS='-shared -h $@' + SHOBJ_LD='${CC}' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sysv4*) + SHOBJ_CFLAGS='-K PIC' + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-dy -z text -G -h $@' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sco3.2v5*-gcc*) + SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sco3.2v5*) + SHOBJ_CFLAGS='-K pic -b elf' + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sysv5uw7*-gcc*) + SHOBJ_CFLAGS='-fpic' + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + sysv5uw7*) + SHOBJ_CFLAGS='-K PIC' + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-G -dy -z text -h $@' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + dgux*-gcc*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + dgux*) + SHOBJ_CFLAGS='-K pic' + SHOBJ_LD=ld + SHOBJ_LDFLAGS='-G -dy -h $@' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + # + # Rely on correct gcc configuration for everything else + # + *-gcc*) + SHOBJ_CFLAGS=-fpic + SHOBJ_LD='${CC}' + SHOBJ_LDFLAGS='-shared' + + SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' + ;; + + *) + SHOBJ_STATUS=unsupported + SHLIB_STATUS=unsupported + ;; + + esac + + echo SHOBJ_CC=\'"$SHOBJ_CC"\' + echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' + echo SHOBJ_LD=\'"$SHOBJ_LD"\' + echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' + echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' + echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' + + echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' + echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' + echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' + echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' + + echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' + echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' + + exit 0 diff -aNrc2 readline-2.2.1/terminal.c readline-4.0/terminal.c *** readline-2.2.1/terminal.c Fri Jul 18 17:08:00 1997 --- readline-4.0/terminal.c Thu May 14 10:54:16 1998 *************** *** 233,236 **** --- 233,246 ---- } + void + rl_resize_terminal () + { + if (readline_echoing_p) + { + _rl_get_screen_size (fileno (rl_instream), 1); + _rl_redisplay_after_sigwinch (); + } + } + struct _tc_string { char *tc_var; diff -aNrc2 readline-2.2.1/tilde.c readline-4.0/tilde.c *** readline-2.2.1/tilde.c Fri Jul 18 17:08:41 1997 --- readline-4.0/tilde.c Thu May 14 15:47:28 1998 *************** *** 48,55 **** #include "tilde.h" - #ifdef SHELL - #include "shell.h" - #endif - #if !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid (), *getpwnam (); --- 48,51 ---- *************** *** 78,81 **** --- 74,83 ---- #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 (); + /* The default value of tilde_additional_prefixes. This is set to whitespace preceding a tilde so that simple programs which do not *************** *** 172,184 **** } - #if !defined (SHELL) - static char * - get_string_value (varname) - char *varname; - { - return ((char *)getenv (varname)); - } - #endif - /* Return a new string which is the result of tilde expanding STRING. */ char * --- 174,177 ---- *************** *** 285,309 **** } - static char * - get_home_dir () - { - char *home_dir; - - #ifdef SHELL - home_dir = (char *)NULL; - if (current_user.home_dir == 0) - get_current_user_info (); - home_dir = current_user.home_dir; - #else - struct passwd *entry; - - home_dir = (char *)NULL; - entry = getpwuid (getuid ()); - if (entry) - home_dir = entry->pw_dir; - #endif - return (home_dir); - } - /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. --- 278,281 ---- *************** *** 329,333 **** { /* Prefix $HOME to the rest of the string. */ ! expansion = get_string_value ("HOME"); /* If there is no HOME variable, look up the directory in --- 301,305 ---- { /* Prefix $HOME to the rest of the string. */ ! expansion = get_env_value ("HOME"); /* If there is no HOME variable, look up the directory in diff -aNrc2 readline-2.2.1/util.c readline-4.0/util.c *** readline-2.2.1/util.c Fri Oct 3 11:12:47 1997 --- readline-4.0/util.c Mon Jun 8 15:47:06 1998 *************** *** 65,68 **** --- 65,69 ---- /* 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 (); *************** *** 125,129 **** #if defined (TIOCSTAT) ioctl (1, TIOCSTAT, (char *)0); ! rl_refresh_line (); #else ding (); --- 126,130 ---- #if defined (TIOCSTAT) ioctl (1, TIOCSTAT, (char *)0); ! rl_refresh_line (count, key); #else ding (); diff -aNrc2 readline-2.2.1/vi_mode.c readline-4.0/vi_mode.c *** readline-2.2.1/vi_mode.c Tue Mar 17 10:41:27 1998 --- readline-4.0/vi_mode.c Mon Jun 8 15:48:00 1998 *************** *** 78,82 **** /* Variables imported from readline.c */ ! extern int rl_point, rl_end, rl_mark, rl_done; extern FILE *rl_instream; extern int rl_line_buffer_len, rl_explicit_arg, rl_numeric_arg; --- 78,82 ---- /* 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; *************** *** 353,359 **** if (_rl_uppercase_p (key)) ! rl_vi_bWord (count); else ! rl_vi_bword (count); return (0); --- 353,359 ---- if (_rl_uppercase_p (key)) ! rl_vi_bWord (count, key); else ! rl_vi_bword (count, key); return (0); *************** *** 375,381 **** if (_rl_uppercase_p (key)) ! rl_vi_fWord (count); else ! rl_vi_fword (count); return (0); } --- 375,381 ---- if (_rl_uppercase_p (key)) ! rl_vi_fWord (count, key); else ! rl_vi_fword (count, key); return (0); } *************** *** 393,399 **** if (_rl_uppercase_p (key)) ! rl_vi_eWord (count); else ! rl_vi_eword (count); return (0); } --- 393,399 ---- if (_rl_uppercase_p (key)) ! rl_vi_eWord (count, key); else ! rl_vi_eword (count, key); return (0); } *************** *** 401,406 **** /* Move forward a word the way that 'W' does. */ int ! rl_vi_fWord (count) ! int count; { while (count-- && rl_point < (rl_end - 1)) --- 401,406 ---- /* Move forward a word the way that 'W' does. */ int ! rl_vi_fWord (count, ignore) ! int count, ignore; { while (count-- && rl_point < (rl_end - 1)) *************** *** 418,423 **** int ! rl_vi_bWord (count) ! int count; { while (count-- && rl_point > 0) --- 418,423 ---- int ! rl_vi_bWord (count, ignore) ! int count, ignore; { while (count-- && rl_point > 0) *************** *** 442,447 **** int ! rl_vi_eWord (count) ! int count; { while (count-- && rl_point < (rl_end - 1)) --- 442,447 ---- int ! rl_vi_eWord (count, ignore) ! int count, ignore; { while (count-- && rl_point < (rl_end - 1)) *************** *** 472,477 **** int ! rl_vi_fword (count) ! int count; { while (count-- && rl_point < (rl_end - 1)) --- 472,477 ---- int ! rl_vi_fword (count, ignore) ! int count, ignore; { while (count-- && rl_point < (rl_end - 1)) *************** *** 498,503 **** int ! rl_vi_bword (count) ! int count; { while (count-- && rl_point > 0) --- 498,503 ---- int ! rl_vi_bword (count, ignore) ! int count, ignore; { while (count-- && rl_point > 0) *************** *** 537,542 **** int ! rl_vi_eword (count) ! int count; { while (count-- && rl_point < rl_end - 1) --- 537,542 ---- int ! rl_vi_eword (count, ignore) ! int count, ignore; { while (count-- && rl_point < rl_end - 1) *************** *** 730,734 **** rl_point++; ! rl_yank (); rl_backward (1, key); return (0); --- 730,734 ---- rl_point++; ! rl_yank (1, key); rl_backward (1, key); return (0);