# HG changeset patch # User jwe # Date 981782142 0 # Node ID e42e28db4dda267a03a03b564b642d4a2fe46327 # Parent 56522edd5c33169929c6e8bf2a5171b82166f3ad [project @ 2001-02-10 05:14:17 by jwe] diff --git a/readline/CHANGELOG b/readline/CHANGELOG new file mode 100644 --- /dev/null +++ b/readline/CHANGELOG @@ -0,0 +1,447 @@ +[Readline-specific changelog. Descriptions of changes to the source are + found in the bash changelog.] + + 6/9 + --- +Makefile.in + - quote value of ${INSTALL_DATA} when passing it to makes in + subdirectories + + 7/1 + --- +Makefile.in + - don't pass INSTALL_DATA to a make in the `doc' subdirectory; let + autoconf set the value itself in the Makefile + - removed a stray `-' before $(RANLIB) in the `install' recipe + +doc/Makefile.in + - add a VPATH assignment so the documentation is not remade if it's + already up-to-date in the distribution + +configure.in + - call AC_SUBST(LOCAL_LDFLAGS), since Makefile.in contains + @LOCAL_LDFLAGS@ + + 7/9 + --- + +config.h.in + - add define lines for STRUCT_WINSIZE_IN_SYS_IOCTL and + STRUCT_WINSIZE_IN_TERMIOS + +configure.in + - call BASH_STRUCT_WINSIZE to look for the definition of + `struct winsize' + + 7/17 + ---- +configure.in + - call AC_MINIX + +config.h.in + - add define line for AC_MINIX + + 7/18 + ---- +Makefile.in + - add `install-shared' and `uninstall-shared' targets + + 8/4 + --- +Makefile.in + - install and uninstall libhistory.a in the `install' and + `uninstall' targets + + 9/4 + --- +configure.in + - bumped LIBVERSION up to 2.1.1, indicating that this is patch + level 1 to release 2.1 + + + 9/16 + ---- +Makefile.in + - `make distclean' now descends into the `examples' subdir + +doc/Makefile.in + - the `distclean' and `maintainer-clean' targets should remove + Makefile + +examples/Makefile.in + - added the various clean targets + + 4/2 + --- +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] + + 3/11 + ---- +doc/Makefile.in + - removed references to HTMLTOC, since separate HTML table-of-contents + files are no longer created + +examples/Makefile.in + - remove `*.exe' in clean target for MS-DOS + +Makefile.in + - make `readline' target depend on ./libreadline.a + - configure now substitutes TERMCAP_LIB into Makefile.in + - use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline' + - clean target now removes readline and readline.exe in case they + get built + +configure.in + - use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP + + 3/15 + ---- +support/shlib-install + - Irix 5.x and Irix 6.x should install shared libraries like Solaris 2 + - changes for installing on hp-ux 1[01].x + + 3/23 + ---- +configure.in + - make sure that the $CC argument to shobj-conf is quoted + + 4/8 + --- + +xmalloc.h, rlprivate.h, rlshell.h + - new files + +Makefile.in,shlib/Makefile.in + - add dependencies on xmalloc.h, rlshell.h + - add xmalloc.h, rlprivate.h, rlshell.h to list of header files + +MANIFEST + - add xmalloc.h, rlprivate.h, rlshell.h + + 4/9 + --- +Makefile.in,shlib/Makefile.in + - add dependencies on rlprivate.h + + 4/13 + ---- +doc/Makefile.in + - add variable, PSDVI, which is the desired resolution of the + generated postscript files. Set to 300 because I don't have + any 600-dpi printers + - set LANGUAGE= before calling makeinfo, so messages are in English + - add rluserman.{info,dvi,ps,html} to appropriate variables + - add rules to create rluserman.{info,dvi,ps,html} + - install and uninstall rluserman.info, but don't update the directory + file in $(infodir) yet + +MANIFEST + - add doc/rluserman.{texinfo,info,dvi,ps,html} + + 4/30 + ---- +configure.in + - updated library version to 4.1 + + 5/3 + --- +configure.in + - SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are + constructed from $LIBRARY_VERSION and substituted into Makefiles + + 5/5 + --- +support/shlib-install + - OSF/1 installs shared libraries like Solaris + +Makefile.in + - broke the header file install and uninstall into two new targets: + install-headers and uninstall-headers + - install and uninstall depend on install-headers and uninstall-headers + respectively + - changed install-shared and uninstall-shared targets to depend on + install-headers and uninstall-headers, respectively, so users may + choose to install only the shared libraries. I'm not sure about + the uninstall one yet -- maybe it should check whether or not + the static libraries are installed and not remove the header files + if they are + + 9/3 + --- +configure.in, config.h.in + - added test for memmove (for later use) + - changed version to 4.1-beta1 + + 9/13 + ---- +examples/rlfe.c + - Per Bothner's `rlfe' readline front-end program + +examples/Makefile.in + - added rules to build rlfe + + 9/21 + ---- +support/shlib-install + - changes to handle FreeBSD-3.x elf or a.out shared libraries, which + have different semantics and need different naming conventions + + 1/24/2000 + --------- +doc/Makefile.in + - remove *.bt and *.bts on `make clean' + + 2/4 + --- + + +configure.in + - changed LIBVERSION to 4.1-beta5 + + 3/17/2000 + --------- +[readline-4.1 released] + + 3/23 + ---- +Makefile.in + - remove the `-t' argument to ranlib in the install recipe; some + ranlibs don't have it and attempt to create a file named `-t' + + 3/27 + ---- +support/shlib-install + - install shared libraries unwritable by anyone on HP-UX + - changed symlinks to relative pathnames on all platforms + +shlib/Makefile.in + - added missing `includedir' assignment, substituted by configure + +Makefile.in + - added missing @SET_MAKE@ so configure can set $MAKE appropriately + +configure.in + - add call to AC_PROG_MAKE_SET + + 8/30 + ---- +shlib/Makefile.in + - change the soname bound into the shared libraries, so it includes + only the major version number. If it includes the minor version, + programs depending on it must be rebuilt (which may or may not be + a bad thing) + + 9/6 + --- +examples/rlfe.c + - add -l option to log input and output (-a option appends to logfile) + - add -n option to set readline application name + - add -v, -h options for version and help information + - change a few things because getopt() is now used to parse arguments + + 9/12 + ---- +support/shlib-install + - fix up the libname on HPUX 11 + + 10/18 + ----- +configure.in + - changed library version to 4.2-alpha + + 10/30 + ----- +configure.in + - add -fsigned-char to LOCAL_CFLAGS for Linux running on the IBM + S/390 + +Makefile.in + - added new file, rltypedefs.h, installed by default with `make install' + + 11/2 + ---- +compat.c + - new file, with backwards-compatibility function definitions + +Makefile.in,shlib/Makefile.in + - make sure that compat.o/compat.so are built and linked apppropriately + +support/shobj-conf + - picked up bash version, which means that shared libs built on + linux and BSD/OS 4.x will have an soname that does not include + the minor version number + + 11/13 + ----- +examples/rlfe.c + - rlfe can perform filename completion for relative pathnames in the + inferior process's context if the OS supports /proc/PID/cwd (linux + does it OK, Solaris is slightly warped, none of the BSDs have it) + + 11/17/2000 + ---------- +[readline-4.2-alpha released] + + 11/27 + ----- +Makefile.in,shlib/Makefile.in + - added dependencies for rltypedefs.h + +shlib/Makefile.in + - changed dependencies on histlib.h to $(topdir)/histlib.h + + 1/22 + ---- +configure.in + - changed release version to 4.2-beta + + 2/2 + --- +examples/Makefile.in + - build histexamp as part of the examples + + 2/5 + --- +doc/Makefile.in + - don't remove the dvi, postscript, html, info, and text `objects' + on a `make distclean', only on a `make maintainer-clean' diff --git a/readline/CHANGES b/readline/CHANGES new file mode 100644 --- /dev/null +++ b/readline/CHANGES @@ -0,0 +1,423 @@ +This document details the changes between this version, readline-4.2, +and the previous version, readline-4.1. + +1. Changes to Readline + +a. When setting the terminal attributes on systems using `struct termio', + readline waits for output to drain before changing the attributes. + +b. A fix was made to the history word tokenization code to avoid attempts to + dereference a null pointer. + +c. Readline now defaults rl_terminal_name to $TERM if the calling application + has left it unset, and tries to initialize with the resultant value. + +d. Instead of calling (*rl_getc_function)() directly to get input in certain + places, readline now calls rl_read_key() consistently. + +e. Fixed a bug in the completion code that allowed a backslash to quote a + single quote inside a single-quoted string. + +f. rl_prompt is no longer assigned directly from the argument to readline(), + but uses memory allocated by readline. This allows constant strings to + be passed to readline without problems arising when the prompt processing + code wants to modify the string. + +g. Fixed a bug that caused non-interactive history searches to return the + wrong line when performing multiple searches backward for the same string. + +h. Many variables, function arguments, and function return values are now + declared `const' where appropriate, to improve behavior when linking with + C++ code. + +i. The control character detection code now works better on systems where + `char' is unsigned by default. + +j. The vi-mode numeric argument is now capped at 999999, just like emacs mode. + +k. The Function, CPFunction, CPPFunction, and VFunction typedefs have been + replaced with a set of specific prototyped typedefs, though they are + still in the readline header files for backwards compatibility. + +m. Nearly all of the (undocumented) internal global variables in the library + now have an _rl_ prefix -- there were a number that did not, like + screenheight, screenwidth, alphabetic, etc. + +n. The ding() convenience function has been renamed to rl_ding(), though the + old function is still defined for backwards compatibility. + +o. The completion convenience functions filename_completion_function, + username_completion_function, and completion_matches now have an rl_ + prefix, though the old names are still defined for backwards compatibility. + +p. The functions shared by readline and bash (linkage is satisfied from bash + when compiling with bash, and internally otherwise) now have an sh_ prefix. + +q. Changed the shared library creation procedure on Linux and BSD/OS 4.x so + that the `soname' contains only the major version number rather than the + major and minor numbers. + +r. Fixed a redisplay bug that occurred when the prompt spanned more than one + physical line and contained invisible characters. + +s. Added a missing `includedir' variable to the Makefile. + +t. When installing the shared libraries, make sure symbolic links are relative. + +u. Added configure test so that it can set `${MAKE}' appropriately. + +v. Fixed a bug in rl_forward that could cause the point to be set to before + the beginning of the line in vi mode. + +w. Fixed a bug in the callback read-char interface to make it work when a + readline function pushes some input onto the input stream with + rl_execute_next (like the incremental search functions). + +x. Fixed a file descriptor leak in the history file manipulation code that + was tripped when attempting to truncate a non-regular file (like + /dev/null). + +y. Changes to make all of the exported readline functions declared in + readline.h have an rl_ prefix (rltty_set_default_bindings is now + rl_tty_set_default_bindings, crlf is now rl_crlf, etc.) + +z. The formatted documentation included in the base readline distribution + is no longer removed on a `make distclean'. + +2. New Features in Readline + +a. The blink timeout for paren matching is now settable by applications. + +b. _rl_executing_macro has been renamed to rl_executing_macro, which means + it's now part of the public interface. + +c. Readline has a new variable, rl_readline_state, which is a bitmap that + encapsulates the current state of the library; intended for use by + callbacks and hook functions. + +d. rlfe has a new -l option to log input and output (-a appends to logfile), + a new -n option to set the readline application name, and -v and -h + options for version and help information. + +e. rlfe can now perform filename completion for the inferior process if the + OS has a /proc//cwd that can be read with readlink(2) to get the + inferior's current working directory. + +f. A new file, rltypedefs.h, contains the new typedefs for function pointers + and is installed by `make install'. + +g. New application-callable function rl_set_prompt(const char *prompt): + expands its prompt string argument and sets rl_prompt to the result. + +h. New application-callable function rl_set_screen_size(int rows, int cols): + public method for applications to set readline's idea of the screen + dimensions. + +i. The history example program (examples/histexamp.c) is now built as one + of the examples. + +j. The documentation has been updated to cover nearly all of the public + functions and variables declared in readline.h. + +------------------------------------------------------------------------------- +This document details the changes between this version, readline-4.1, +and the previous version, readline-4.0. + +1. Changes to Readline + +a. Changed the HTML documents so that the table-of-contents is no longer + a separate file. + +b. Changes to the shared object configuration for: Irix 5.x, Irix 6.x, + OSF/1. + +c. The shared library major and minor versions are now constructed + automatically by configure and substituted into the makefiles. + +d. It's now possible to install the shared libraries separately from the + static libraries. + +e. The history library tries to truncate the history file only if it is a + regular file. + +f. A bug that caused _rl_dispatch to address negative array indices on + systems with signed chars was fixed. + +g. rl-yank-nth-arg now leaves the history position the same as when it was + called. + +h. Changes to the completion code to handle MS-DOS drive-letter:pathname + filenames. + +i. Completion is now case-insensitive by default on MS-DOS. + +j. Fixes to the history file manipulation code for MS-DOS. + +k. Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS. + +l. Some fixes were made to the redisplay code for better operation on MS-DOS. + +m. The quoted-insert code will now insert tty special chars like ^C. + +n. A bug was fixed that caused the display code to reference memory before + the start of the prompt string. + +o. More support for __EMX__ (OS/2). + +p. A bug was fixed in readline's signal handling that could cause infinite + recursion in signal handlers. + +q. A bug was fixed that caused the point to be less than zero when rl_forward + was given a very large numeric argument. + +r. The vi-mode code now gets characters via the application-settable value + of rl_getc_function rather than calling rl_getc directly. + +s. The history file code now uses O_BINARY mode when reading and writing + the history file on cygwin32. + +t. Fixed a bug in the redisplay code for lines with more than 256 line + breaks. + +u. A bug was fixed which caused invisible character markers to not be + stripped from the prompt string if the terminal was in no-echo mode. + +v. Readline no longer tries to get the variables it needs for redisplay + from the termcap entry if the calling application has specified its + own redisplay function. Readline treats the terminal as `dumb' in + this case. + +w. Fixes to the SIGWINCH code so that a multiple-line prompt with escape + sequences is redrawn correctly. + +x. Changes to the install and install-shared targets so that the libraries + and header files are installed separately. + +2. New Features in Readline + +a. A new Readline `user manual' is in doc/rluserman.texinfo. + +b. Parentheses matching is now always compiled into readline, and enabled + or disabled when the value of the `blink-matching-paren' variable is + changed. + +c. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename. + +d. MS-DOS systems now use ~/_history as the default history file. + +e. history-search-{forward,backward} now leave the point at the end of the + line when the string to search for is empty, like + {reverse,forward}-search-history. + +f. history-search-{forward,backward} now leave the last history line found + in the readline buffer if the second or subsequent search fails. + +g. New function for use by applications: rl_on_new_line_with_prompt, used + when an application displays the prompt itself before calling readline(). + +h. New variable for use by applications: rl_already_prompted. An application + that displays the prompt itself before calling readline() must set this to + a non-zero value. + +i. A new variable, rl_gnu_readline_p, always 1. The intent is that an + application can verify whether or not it is linked with the `real' + readline library or some substitute. + +j. Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program + is included in the examples subdirectory, though it is not built + by default. + +------------------------------------------------------------------------------- +This document details the changes between this version, readline-4.0, +and the previous version, readline-2.2. + +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. + +1. Changes to Readline + +a. Added a missing `extern' to a declaration in readline.h that kept + readline from compiling cleanly on some systems. + +b. The history file is now opened with mode 0600 when it is written for + better security. + +c. Changes were made to the SIGWINCH handling code so that prompt redisplay + is done better. + +d. ^G now interrupts incremental searches correctly. + +e. A bug that caused a core dump when the set of characters to be quoted + when completing words was empty was fixed. + +f. Fixed a problem in the readline test program rltest.c that caused a core + dump. + +g. The code that handles parser directives in inputrc files now displays + more error messages. + +h. The history expansion code was fixed so that the appearance of the + history comment character at the beginning of a word inhibits history + expansion for that word and the rest of the input line. + +i. The code that prints completion listings now behaves better if one or + more of the filenames contains non-printable characters. + +j. The time delay when showing matching parentheses is now 0.5 seconds. + + +2. New Features in Readline + +a. There is now an option for `iterative' yank-last-arg handline, so a user + can keep entering `M-.', yanking the last argument of successive history + lines. + +b. New variable, `print-completions-horizontally', which causes completion + matches to be displayed across the screen (like `ls -x') rather than up + and down the screen (like `ls'). + +c. New variable, `completion-ignore-case', which causes filename completion + and matching to be performed case-insensitively. + +d. There is a new bindable command, `magic-space', which causes history + expansion to be performed on the current readline buffer and a space to + be inserted into the result. + +e. There is a new bindable command, `menu-complete', which enables tcsh-like + menu completion (successive executions of menu-complete insert a single + completion match, cycling through the list of possible completions). + +f. There is a new bindable command, `paste-from-clipboard', for use on Win32 + systems, to insert the text from the Win32 clipboard into the editing + buffer. + +g. The key sequence translation code now understands printf-style backslash + escape sequences, including \NNN octal escapes. These escape sequences + may be used in key sequence definitions or macro values. + +h. An `$include' inputrc file parser directive has been added. diff --git a/readline/USAGE b/readline/USAGE new file mode 100644 --- /dev/null +++ b/readline/USAGE @@ -0,0 +1,37 @@ +From rms@gnu.org Thu Jul 22 20:37:55 1999 +Flags: 10 +Return-Path: rms@gnu.org +Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins) + id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for ) +Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6) + id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for ) +Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi) + id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for ) +Received: from wijiji.santafe.edu (wijiji [192.12.12.5]) + by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831 + for ; Thu, 22 Jul 1999 18:37:47 -0600 (MDT) +Received: (from rms@localhost) + by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089; + Thu, 22 Jul 1999 18:37:46 -0600 (MDT) +Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT) +Message-Id: <199907230037.SAA01089@wijiji.santafe.edu> +X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f +From: Richard Stallman +To: chet@nike.ins.cwru.edu +Subject: Use of Readline +Reply-to: rms@gnu.org + +I think Allbery's suggestion is a good one. So please add this text +in a suitable place. Please don't put it in the GPL itself; that +should be the same as the GPL everywhere else. Putting it in the +README and/or the documentation would be a good idea. + + +====================================================================== +Our position on the use of Readline through a shared-library linking +mechanism is that there is no legal difference between shared-library +linking and static linking--either kind of linking combines various +modules into a single larger work. The conditions for using Readline +in a larger work are stated in section 3 of the GNU GPL. + + diff --git a/readline/doc/history.dvi b/readline/doc/history.dvi deleted file mode 100644 index c853b0165ddeecbddc5da85bdc0fa2b6e25da48f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ - - - -GNU History Library - - -

GNU History Library

-

Edition 4.2-beta, for History Library Version 4.2-beta.

-

Feb 2001

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

-


-

Table of Contents

- -


- -

-This document describes the GNU History library, a programming tool that -provides a consistent user interface for recalling lines of previously -typed input. - -

-

-Published by the Free Software Foundation
-59 Temple Place, Suite 330,
-Boston, MA 02111 USA - -

-

-Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

-

-Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -

-

-Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -

-

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

- - - -

Using History Interactively

- -

-This chapter describes how to use the GNU History Library interactively, -from a user's standpoint. It should be considered a user's guide. For -information on using the GNU History Library in your own programs, -see section Programming with GNU History. - -

- - - - - -

History Expansion

-

- - -

-

-The History library provides a history expansion feature that is similar -to the history expansion provided by csh. This section -describes the syntax used to manipulate the history information. - -

-

-History expansions introduce words from the history list into -the input stream, making it easy to repeat commands, insert the -arguments to a previous command into the current input line, or -fix errors in previous commands quickly. - -

-

-History expansion takes place in two parts. The first is to determine -which line from the history list should be used during substitution. -The second is to select portions of that line for inclusion into the -current one. The line selected from the history is called the -event, and the portions of that line that are acted upon are -called words. Various modifiers are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several words -surrounded by quotes are considered one word. -History expansions are introduced by the appearance of the -history expansion character, which is `!' by default. - -

- - - - - - -

Event Designators

-

- - -

-

-An event designator is a reference to a command line entry in the -history list. - - -

-
- -
! -
-Start a history substitution, except when followed by a space, tab, -the end of the line, `=' or `('. - -
!n -
-Refer to command line n. - -
!-n -
-Refer to the command n lines back. - -
!! -
-Refer to the previous command. This is a synonym for `!-1'. - -
!string -
-Refer to the most recent command starting with string. - -
!?string[?] -
-Refer to the most recent command containing string. The trailing -`?' may be omitted if the string is followed immediately by -a newline. - -
^string1^string2^ -
-Quick Substitution. Repeat the last command, replacing string1 -with string2. Equivalent to -!!:s/string1/string2/. - -
!# -
-The entire command line typed so far. - -
- - - -

Word Designators

- -

-Word designators are used to select desired words from the event. -A `:' separates the event specification from the word designator. It -may be omitted if the word designator begins with a `^', `$', -`*', `-', or `%'. Words are numbered from the beginning -of the line, with the first word being denoted by 0 (zero). Words are -inserted into the current line separated by single spaces. - -

-

-For example, - -

-
- -
!! -
-designates the preceding command. When you type this, the preceding -command is repeated in toto. - -
!!:$ -
-designates the last argument of the preceding command. This may be -shortened to !$. - -
!fi:2 -
-designates the second argument of the most recent command starting with -the letters fi. -
- -

-Here are the word designators: - -

- -
0 (zero) -
-The 0th word. For many applications, this is the command word. - -
n -
-The nth word. - -
^ -
-The first argument; that is, word 1. - -
$ -
-The last argument. - -
% -
-The word matched by the most recent `?string?' search. - -
x-y -
-A range of words; `-y' abbreviates `0-y'. - -
* -
-All of the words, except the 0th. This is a synonym for `1-$'. -It is not an error to use `*' if there is just one word in the event; -the empty string is returned in that case. - -
x* -
-Abbreviates `x-$' - -
x- -
-Abbreviates `x-$' like `x*', but omits the last word. - -
- -

-If a word designator is supplied without an event specification, the -previous command is used as the event. - -

- - -

Modifiers

- -

-After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a `:'. - -

-
- -
h -
-Remove a trailing pathname component, leaving only the head. - -
t -
-Remove all leading pathname components, leaving the tail. - -
r -
-Remove a trailing suffix of the form `.suffix', leaving -the basename. - -
e -
-Remove all but the trailing suffix. - -
p -
-Print the new command but do not execute it. - -
s/old/new/ -
-Substitute new for the first occurrence of old in the -event line. Any delimiter may be used in place of `/'. -The delimiter may be quoted in old and new -with a single backslash. If `&' appears in new, -it is replaced by old. A single backslash will quote -the `&'. The final delimiter is optional if it is the last -character on the input line. - -
& -
-Repeat the previous substitution. - -
g -
-Cause changes to be applied over the entire event line. Used in -conjunction with `s', as in gs/old/new/, -or with `&'. - -
- - - -

Programming with GNU History

- -

-This chapter describes how to interface programs that you write -with the GNU History Library. -It should be considered a technical guide. -For information on the interactive use of GNU History, see section Using History Interactively. - -

- - - - - -

Introduction to History

- -

-Many programs read input from the user a line at a time. The GNU -History library is able to keep track of those lines, associate arbitrary -data with each line, and utilize information from previous lines in -composing new ones. - -

-

-The programmer using the History library has available functions -for remembering lines on a history list, associating arbitrary data -with a line, removing lines from the list, searching through the list -for a line containing an arbitrary text string, and referencing any line -in the list directly. In addition, a history expansion function -is available which provides for a consistent user interface across -different programs. - -

-

-The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by csh. - -

-

-If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - -

-

-Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file <readline/history.h> in any file that uses the -History library's features. It supplies extern declarations for all -of the library's public functions and variables, and declares all of -the public data structures. - -

- - -

History Storage

- -

-The history list is an array of history entries. A history entry is -declared as follows: - -

- -
-typedef void *histdata_t;
-
-typedef struct _hist_entry {
-  char *line;
-  histdata_t data;
-} HIST_ENTRY;
-
- -

-The history list itself might therefore be declared as - -

- -
-HIST_ENTRY **the_history_list;
-
- -

-The state of the History library is encapsulated into a single structure: - -

- -
-/* A structure used to pass around the current state of the history. */
-typedef struct _hist_state {
-  HIST_ENTRY **entries; /* Pointer to the entries themselves. */
-  int offset;           /* The location pointer within this array. */
-  int length;           /* Number of elements within this array. */
-  int size;             /* Number of slots allocated to this array. */
-  int flags;
-} HISTORY_STATE;
-
- -

-If the flags member includes HS_STIFLED, the history has been -stifled. - -

- - -

History Functions

- -

-This section describes the calling sequence for the various functions -present in GNU History. - -

- - - - - -

Initializing History and State Management

- -

-This section describes functions used to initialize and manage -the state of the History library when you want to use the history -functions in your program. - -

-

-

-
Function: void using_history (void) -
-Begin a session in which the history functions might be used. This -initializes the interactive variables. -
- -

-

-

-
Function: HISTORY_STATE * history_get_history_state (void) -
-Return a structure describing the current state of the input history. -
- -

-

-

-
Function: void history_set_history_state (HISTORY_STATE *state) -
-Set the state of the history list according to state. -
- -

- - -

History List Management

- -

-These functions manage individual entries on the history list, or set -parameters managing the list itself. - -

-

-

-
Function: void add_history (const char *string) -
-Place string at the end of the history list. The associated data -field (if any) is set to NULL. -
- -

-

-

-
Function: HIST_ENTRY * remove_history (int which) -
-Remove history entry at offset which from the history. The -removed element is returned so you can free the line, data, -and containing structure. -
- -

-

-

-
Function: HIST_ENTRY * replace_history_entry (int which, const char *line, histdata_t data) -
-Make the history entry at offset which have line and data. -This returns the old entry so you can dispose of the data. In the case -of an invalid which, a NULL pointer is returned. -
- -

-

-

-
Function: void clear_history (void) -
-Clear the history list by deleting all the entries. -
- -

-

-

-
Function: void stifle_history (int max) -
-Stifle the history list, remembering only the last max entries. -
- -

-

-

-
Function: int unstifle_history (void) -
-Stop stifling the history. This returns the previous amount the -history was stifled. The value is positive if the history was -stifled, negative if it wasn't. -
- -

-

-

-
Function: int history_is_stifled (void) -
-Returns non-zero if the history is stifled, zero if it is not. -
- -

- - -

Information About the History List

- -

-These functions return information about the entire history list or -individual list entries. - -

-

-

-
Function: HIST_ENTRY ** history_list (void) -
-Return a NULL terminated array of HIST_ENTRY * which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return NULL. -
- -

-

-

-
Function: int where_history (void) -
-Returns the offset of the current history element. -
- -

-

-

-
Function: HIST_ENTRY * current_history (void) -
-Return the history entry at the current position, as determined by -where_history(). If there is no entry there, return a NULL -pointer. -
- -

-

-

-
Function: HIST_ENTRY * history_get (int offset) -
-Return the history entry at position offset, starting from -history_base (see section History Variables). -If there is no entry there, or if offset -is greater than the history length, return a NULL pointer. -
- -

-

-

-
Function: int history_total_bytes (void) -
-Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. -
- -

- - -

Moving Around the History List

- -

-These functions allow the current index into the history list to be -set or changed. - -

-

-

-
Function: int history_set_pos (int pos) -
-Set the current history offset to pos, an absolute index -into the list. -
- -

-

-

-
Function: HIST_ENTRY * previous_history (void) -
-Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a NULL pointer. -
- -

-

-

-
Function: HIST_ENTRY * next_history (void) -
-Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a NULL pointer. -
- -

- - -

Searching the History List

-

- - -

-

-These functions allow searching of the history list for entries containing -a specific string. Searching may be performed both forward and backward -from the current history position. The search may be anchored, -meaning that the string must match at the beginning of the history entry. - - -

-

-

-
Function: int history_search (const char *string, int direction) -
-Search the history for string, starting at the current history offset. -If direction is less than 0, then the search is through -previous entries, otherwise through subsequent entries. -If string is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -string was found. Otherwise, nothing is changed, and a -1 is -returned. -
- -

-

-

-
Function: int history_search_prefix (const char *string, int direction) -
-Search the history for string, starting at the current history -offset. The search is anchored: matching lines must begin with -string. If direction is less than 0, then the search is -through previous entries, otherwise through subsequent entries. -If string is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. -
- -

-

-

-
Function: int history_search_pos (const char *string, int direction, int pos) -
-Search for string in the history list, starting at pos, an -absolute index into the list. If direction is negative, the search -proceeds backward from pos, otherwise forward. Returns the absolute -index of the history element where string was found, or -1 otherwise. -
- -

- - -

Managing the History File

- -

-The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -

-

-

-
Function: int read_history (const char *filename) -
-Add the contents of filename to the history list, a line at a time. -If filename is NULL, then read from `~/.history'. -Returns 0 if successful, or errno if not. -
- -

-

-

-
Function: int read_history_range (const char *filename, int from, int to) -
-Read a range of lines from filename, adding them to the history list. -Start reading at line from and end at to. -If from is zero, start at the beginning. If to is less than -from, then read until the end of the file. If filename is -NULL, then read from `~/.history'. Returns 0 if successful, -or errno if not. -
- -

-

-

-
Function: int write_history (const char *filename) -
-Write the current history to filename, overwriting filename -if necessary. -If filename is NULL, then write the history list to `~/.history'. -Values returned are as in read_history(). -
- -

-

-

-
Function: int append_history (int nelements, const char *filename) -
-Append the last nelements of the history list to filename. -If filename is NULL, then append to `~/.history'. -
- -

-

-

-
Function: int history_truncate_file (const char *filename, int nlines) -
-Truncate the history file filename, leaving only the last -nlines lines. -If filename is NULL, then `~/.history' is truncated. -
- -

- - -

History Expansion

- -

-These functions implement csh-like history expansion. - -

-

-

-
Function: int history_expand (char *string, char **output) -
-Expand string, placing the result into output, a pointer -to a string (see section History Expansion). Returns: -
- -
0 -
-If no expansions took place (or, if the only change in -the text was the removal of escape characters preceding the history expansion -character); -
1 -
-if expansions did take place; -
-1 -
-if there was an error in expansion; -
2 -
-if the returned line should be displayed, but not executed, -as with the :p modifier (see section Modifiers). -
- -

-If an error ocurred in expansion, then output contains a descriptive -error message. -

- -

-

-

-
Function: char * history_arg_extract (int first, int last, const char *string) -
-Extract a string segment consisting of the first through last -arguments present in string. Arguments are split as in Bash. -
- -

-

-

-
Function: char * get_history_event (const char *string, int *cindex, int qchar) -
-Returns the text of the history event beginning at string + -*cindex. *cindex is modified to point to after the event -specifier. At function entry, cindex points to the index into -string where the history event specification begins. qchar -is a character that is allowed to end the event specification in addition -to the "normal" terminating characters. -
- -

-

-

-
Function: char ** history_tokenize (const char *string) -
-Return an array of tokens parsed out of string, much as the -shell might. The tokens are split on the characters " \t\n()<>;&|$", -and shell quoting conventions are obeyed. -
- -

- - -

History Variables

- -

-This section describes the externally-visible variables exported by -the GNU History Library. - -

-

-

-
Variable: int history_base -
-The logical offset of the first entry in the history list. -
- -

-

-

-
Variable: int history_length -
-The number of entries currently stored in the history list. -
- -

-

-

-
Variable: int max_input_history -
-The maximum number of history entries. This must be changed using -stifle_history(). -
- -

-

-

-
Variable: char history_expansion_char -
-The character that starts a history event. The default is `!'. -
- -

-

-

-
Variable: char history_subst_char -
-The character that invokes word substitution if found at the start of -a line. The default is `^'. -
- -

-

-

-
Variable: char history_comment_char -
-During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. -
- -

-

-

-
Variable: char * history_no_expand_chars -
-The list of characters which inhibit history expansion if found immediately -following history_expansion_char. The default is space, TAB, and -`='. -
- -

-

-

-
Variable: char * history_search_delimiter_chars -
-The list of additional characters which can delimit a history search -string, in addition to space, TAB, `:' and `?' in the case of -a substring search. The default is empty. -
- -

-

-

-
Variable: int history_quotes_inhibit_expansion -
-If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -
- -

-

-

-
Variable: rl_linebuf_func_t * history_inhibit_expansion_function -
-This should be set to the address of a function that takes two arguments: -a char * (string) -and an int index into that string (i). -It should return a non-zero value if the history expansion starting at -string[i] should not be performed; zero if the expansion should -be done. -It is intended for use by applications like Bash that use the history -expansion character for additional purposes. -By default, this variable is set to NULL. -
- -

- - -

History Programming Example

- -

-The following program demonstrates simple use of the GNU History Library. - -

- -
-#include <stdio.h>
-#include <readline/history.h>
-
-main (argc, argv)
-     int argc;
-     char **argv;
-{
-  char line[1024], *t;
-  int len, done = 0;
-
-  line[0] = 0;
-
-  using_history ();
-  while (!done)
-    {
-      printf ("history$ ");
-      fflush (stdout);
-      t = fgets (line, sizeof (line) - 1, stdin);
-      if (t && *t)
-        {
-          len = strlen (t);
-          if (t[len - 1] == '\n')
-            t[len - 1] = '\0';
-        }
-
-      if (!t)
-        strcpy (line, "quit");
-
-      if (line[0])
-        {
-          char *expansion;
-          int result;
-
-          result = history_expand (line, &expansion);
-          if (result)
-            fprintf (stderr, "%s\n", expansion);
-
-          if (result < 0 || result == 2)
-            {
-              free (expansion);
-              continue;
-            }
-
-          add_history (expansion);
-          strncpy (line, expansion, sizeof (line) - 1);
-          free (expansion);
-        }
-
-      if (strcmp (line, "quit") == 0)
-        done = 1;
-      else if (strcmp (line, "save") == 0)
-        write_history ("history_file");
-      else if (strcmp (line, "read") == 0)
-        read_history ("history_file");
-      else if (strcmp (line, "list") == 0)
-        {
-          register HIST_ENTRY **the_list;
-          register int i;
-
-          the_list = history_list ();
-          if (the_list)
-            for (i = 0; the_list[i]; i++)
-              printf ("%d: %s\n", i + history_base, the_list[i]->line);
-        }
-      else if (strncmp (line, "delete", 6) == 0)
-        {
-          int which;
-          if ((sscanf (line + 6, "%d", &which)) == 1)
-            {
-              HIST_ENTRY *entry = remove_history (which);
-              if (!entry)
-                fprintf (stderr, "No such entry %d\n", which);
-              else
-                {
-                  free (entry->line);
-                  free (entry);
-                }
-            }
-          else
-            {
-              fprintf (stderr, "non-numeric arg given to `delete'\n");
-            }
-        }
-    }
-}
-
- - - -

Concept Index

-

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

-

a

- -
  • anchored search -
  • -

    e

    - -
  • event designators -
  • -

    h

    - -
  • history events -
  • history expansion -
  • History Searching -
  • - -

    - - -

    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 -
  • history_base -
  • history_comment_char -
  • history_expand -
  • history_expansion_char -
  • history_get -
  • history_get_history_state -
  • history_inhibit_expansion_function -
  • history_is_stifled -
  • history_length -
  • history_list -
  • history_no_expand_chars -
  • history_quotes_inhibit_expansion -
  • history_search -
  • history_search_delimiter_chars -
  • history_search_pos -
  • history_search_prefix -
  • history_set_history_state -
  • history_set_pos -
  • history_subst_char -
  • history_tokenize -
  • history_total_bytes -
  • history_truncate_file -
  • -

    m

    - -
  • max_input_history -
  • -

    n

    - -
  • next_history -
  • -

    p

    - -
  • previous_history -
  • -

    r

    - -
  • read_history -
  • read_history_range -
  • remove_history -
  • replace_history_entry -
  • -

    s

    - -
  • stifle_history -
  • -

    u

    - -
  • unstifle_history -
  • using_history -
  • -

    w

    - -
  • where_history -
  • write_history -
  • - -

    -


    -This document was generated on 5 Febuary 2001 using the -texi2html -translator version 1.52.

    - - diff --git a/readline/doc/history.info b/readline/doc/history.info deleted file mode 100644 --- a/readline/doc/history.info +++ /dev/null @@ -1,825 +0,0 @@ -This is history.info, produced by makeinfo version 4.0 from -/usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* History: (history). The GNU history library API -END-INFO-DIR-ENTRY - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - - Copyright (C) 1988-2001 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: history.info, Node: Top, Next: Using History Interactively, Up: (dir) - -GNU History Library -******************* - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - -* Menu: - -* Using History Interactively:: GNU History User's Manual. -* Programming with GNU History:: GNU History Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top - -Using History Interactively -*************************** - - This chapter describes how to use the GNU History Library -interactively, from a user's standpoint. It should be considered a -user's guide. For information on using the GNU History Library in your -own programs, *note Programming with GNU History::. - -* Menu: - -* History Interaction:: What it feels like using History as a user. - - -File: history.info, Node: History Interaction, Up: Using History Interactively - -History Expansion -================= - - The History library provides a history expansion feature that is -similar to the history expansion provided by `csh'. This section -describes the syntax used to manipulate the history information. - - History expansions introduce words from the history list into the -input stream, making it easy to repeat commands, insert the arguments -to a previous command into the current input line, or fix errors in -previous commands quickly. - - History expansion takes place in two parts. The first is to -determine which line from the history list should be used during -substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the history is -called the "event", and the portions of that line that are acted upon -are called "words". Various "modifiers" are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several words surrounded by quotes are -considered one word. History expansions are introduced by the -appearance of the history expansion character, which is `!' by default. - -* Menu: - -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of substitution. - - -File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction - -Event Designators ------------------ - - An event designator is a reference to a command line entry in the -history list. - -`!' - Start a history substitution, except when followed by a space, tab, - the end of the line, `=' or `('. - -`!N' - Refer to command line N. - -`!-N' - Refer to the command N lines back. - -`!!' - Refer to the previous command. This is a synonym for `!-1'. - -`!STRING' - Refer to the most recent command starting with STRING. - -`!?STRING[?]' - Refer to the most recent command containing STRING. The trailing - `?' may be omitted if the STRING is followed immediately by a - newline. - -`^STRING1^STRING2^' - Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. - -`!#' - The entire command line typed so far. - - -File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction - -Word Designators ----------------- - - Word designators are used to select desired words from the event. A -`:' separates the event specification from the word designator. It may -be omitted if the word designator begins with a `^', `$', `*', `-', or -`%'. Words are numbered from the beginning of the line, with the first -word being denoted by 0 (zero). Words are inserted into the current -line separated by single spaces. - - For example, - -`!!' - designates the preceding command. When you type this, the - preceding command is repeated in toto. - -`!!:$' - designates the last argument of the preceding command. This may be - shortened to `!$'. - -`!fi:2' - designates the second argument of the most recent command starting - with the letters `fi'. - - Here are the word designators: - -`0 (zero)' - The `0'th word. For many applications, this is the command word. - -`N' - The Nth word. - -`^' - The first argument; that is, word 1. - -`$' - The last argument. - -`%' - The word matched by the most recent `?STRING?' search. - -`X-Y' - A range of words; `-Y' abbreviates `0-Y'. - -`*' - All of the words, except the `0'th. This is a synonym for `1-$'. - It is not an error to use `*' if there is just one word in the - event; the empty string is returned in that case. - -`X*' - Abbreviates `X-$' - -`X-' - Abbreviates `X-$' like `X*', but omits the last word. - - If a word designator is supplied without an event specification, the -previous command is used as the event. - - -File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction - -Modifiers ---------- - - After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a `:'. - -`h' - Remove a trailing pathname component, leaving only the head. - -`t' - Remove all leading pathname components, leaving the tail. - -`r' - Remove a trailing suffix of the form `.SUFFIX', leaving the - basename. - -`e' - Remove all but the trailing suffix. - -`p' - Print the new command but do not execute it. - -`s/OLD/NEW/' - Substitute NEW for the first occurrence of OLD in the event line. - Any delimiter may be used in place of `/'. The delimiter may be - quoted in OLD and NEW with a single backslash. If `&' appears in - NEW, it is replaced by OLD. A single backslash will quote the - `&'. The final delimiter is optional if it is the last character - on the input line. - -`&' - Repeat the previous substitution. - -`g' - Cause changes to be applied over the entire event line. Used in - conjunction with `s', as in `gs/OLD/NEW/', or with `&'. - - -File: history.info, Node: Programming with GNU History, Next: Concept Index, Prev: Using History Interactively, Up: Top - -Programming with GNU History -**************************** - - This chapter describes how to interface programs that you write with -the GNU History Library. It should be considered a technical guide. -For information on the interactive use of GNU History, *note Using -History Interactively::. - -* Menu: - -* Introduction to History:: What is the GNU History library for? -* History Storage:: How information is stored. -* History Functions:: Functions that you can use. -* History Variables:: Variables that control behaviour. -* History Programming Example:: Example of using the GNU History Library. - - -File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History - -Introduction to History -======================= - - Many programs read input from the user a line at a time. The GNU -History library is able to keep track of those lines, associate -arbitrary data with each line, and utilize information from previous -lines in composing new ones. - - The programmer using the History library has available functions for -remembering lines on a history list, associating arbitrary data with a -line, removing lines from the list, searching through the list for a -line containing an arbitrary text string, and referencing any line in -the list directly. In addition, a history "expansion" function is -available which provides for a consistent user interface across -different programs. - - The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by `csh'. - - If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - - Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file `' in any file that uses the History -library's features. It supplies extern declarations for all of the -library's public functions and variables, and declares all of the -public data structures. - - -File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History - -History Storage -=============== - - The history list is an array of history entries. A history entry is -declared as follows: - - typedef void *histdata_t; - - typedef struct _hist_entry { - char *line; - histdata_t data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - HIST_ENTRY **the_history_list; - - The state of the History library is encapsulated into a single -structure: - - /* A structure used to pass around the current state of the history. */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes `HS_STIFLED', the history has been -stifled. - - -File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History - -History Functions -================= - - This section describes the calling sequence for the various functions -present in GNU History. - -* Menu: - -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. - - -File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions - -Initializing History and State Management ------------------------------------------ - - This section describes functions used to initialize and manage the -state of the History library when you want to use the history functions -in your program. - - - Function: void using_history (void) - Begin a session in which the history functions might be used. This - initializes the interactive variables. - - - Function: HISTORY_STATE * history_get_history_state (void) - Return a structure describing the current state of the input - history. - - - Function: void history_set_history_state (HISTORY_STATE *state) - Set the state of the history list according to STATE. - - -File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions - -History List Management ------------------------ - - These functions manage individual entries on the history list, or set -parameters managing the list itself. - - - Function: void add_history (const char *string) - Place STRING at the end of the history list. The associated data - field (if any) is set to `NULL'. - - - Function: HIST_ENTRY * remove_history (int which) - Remove history entry at offset WHICH from the history. The - removed element is returned so you can free the line, data, and - containing structure. - - - Function: HIST_ENTRY * replace_history_entry (int which, const char - *line, histdata_t data) - Make the history entry at offset WHICH have LINE and DATA. This - returns the old entry so you can dispose of the data. In the case - of an invalid WHICH, a `NULL' pointer is returned. - - - Function: void clear_history (void) - Clear the history list by deleting all the entries. - - - Function: void stifle_history (int max) - Stifle the history list, remembering only the last MAX entries. - - - Function: int unstifle_history (void) - Stop stifling the history. This returns the previous amount the - history was stifled. The value is positive if the history was - stifled, negative if it wasn't. - - - Function: int history_is_stifled (void) - Returns non-zero if the history is stifled, zero if it is not. - - -File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions - -Information About the History List ----------------------------------- - - These functions return information about the entire history list or -individual list entries. - - - Function: HIST_ENTRY ** history_list (void) - Return a `NULL' terminated array of `HIST_ENTRY *' which is the - current input history. Element 0 of this list is the beginning of - time. If there is no history, return `NULL'. - - - Function: int where_history (void) - Returns the offset of the current history element. - - - Function: HIST_ENTRY * current_history (void) - Return the history entry at the current position, as determined by - `where_history()'. If there is no entry there, return a `NULL' - pointer. - - - Function: HIST_ENTRY * history_get (int offset) - Return the history entry at position OFFSET, starting from - `history_base' (*note History Variables::). If there is no entry - there, or if OFFSET is greater than the history length, return a - `NULL' pointer. - - - Function: int history_total_bytes (void) - Return the number of bytes that the primary history entries are - using. This function returns the sum of the lengths of all the - lines in the history. - - -File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions - -Moving Around the History List ------------------------------- - - These functions allow the current index into the history list to be -set or changed. - - - Function: int history_set_pos (int pos) - Set the current history offset to POS, an absolute index into the - list. - - - Function: HIST_ENTRY * previous_history (void) - Back up the current history offset to the previous history entry, - and return a pointer to that entry. If there is no previous - entry, return a `NULL' pointer. - - - Function: HIST_ENTRY * next_history (void) - Move the current history offset forward to the next history entry, - and return the a pointer to that entry. If there is no next - entry, return a `NULL' pointer. - - -File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions - -Searching the History List --------------------------- - - These functions allow searching of the history list for entries -containing a specific string. Searching may be performed both forward -and backward from the current history position. The search may be -"anchored", meaning that the string must match at the beginning of the -history entry. - - - Function: int history_search (const char *string, int direction) - Search the history for STRING, starting at the current history - offset. If DIRECTION is less than 0, then the search is through - previous entries, otherwise through subsequent entries. If STRING - is found, then the current history index is set to that history - entry, and the value returned is the offset in the line of the - entry where STRING was found. Otherwise, nothing is changed, and - a -1 is returned. - - - Function: int history_search_prefix (const char *string, int - direction) - Search the history for STRING, starting at the current history - offset. The search is anchored: matching lines must begin with - STRING. If DIRECTION is less than 0, then the search is through - previous entries, otherwise through subsequent entries. If STRING - is found, then the current history index is set to that entry, and - the return value is 0. Otherwise, nothing is changed, and a -1 is - returned. - - - Function: int history_search_pos (const char *string, int direction, - int pos) - Search for STRING in the history list, starting at POS, an - absolute index into the list. If DIRECTION is negative, the search - proceeds backward from POS, otherwise forward. Returns the - absolute index of the history element where STRING was found, or - -1 otherwise. - - -File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions - -Managing the History File -------------------------- - - The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - - - Function: int read_history (const char *filename) - Add the contents of FILENAME to the history list, a line at a time. - If FILENAME is `NULL', then read from `~/.history'. Returns 0 if - successful, or `errno' if not. - - - Function: int read_history_range (const char *filename, int from, - int to) - Read a range of lines from FILENAME, adding them to the history - list. Start reading at line FROM and end at TO. If FROM is zero, - start at the beginning. If TO is less than FROM, then read until - the end of the file. If FILENAME is `NULL', then read from - `~/.history'. Returns 0 if successful, or `errno' if not. - - - Function: int write_history (const char *filename) - Write the current history to FILENAME, overwriting FILENAME if - necessary. If FILENAME is `NULL', then write the history list to - `~/.history'. Values returned are as in `read_history()'. - - - Function: int append_history (int nelements, const char *filename) - Append the last NELEMENTS of the history list to FILENAME. If - FILENAME is `NULL', then append to `~/.history'. - - - Function: int history_truncate_file (const char *filename, int - nlines) - Truncate the history file FILENAME, leaving only the last NLINES - lines. If FILENAME is `NULL', then `~/.history' is truncated. - - -File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions - -History Expansion ------------------ - - These functions implement `csh'-like history expansion. - - - Function: int history_expand (char *string, char **output) - Expand STRING, placing the result into OUTPUT, a pointer to a - string (*note History Interaction::). Returns: - `0' - If no expansions took place (or, if the only change in the - text was the removal of escape characters preceding the - history expansion character); - - `1' - if expansions did take place; - - `-1' - if there was an error in expansion; - - `2' - if the returned line should be displayed, but not executed, - as with the `:p' modifier (*note Modifiers::). - - If an error ocurred in expansion, then OUTPUT contains a - descriptive error message. - - - Function: char * history_arg_extract (int first, int last, const - char *string) - Extract a string segment consisting of the FIRST through LAST - arguments present in STRING. Arguments are split as in Bash. - - - Function: char * get_history_event (const char *string, int *cindex, - int qchar) - Returns the text of the history event beginning at STRING + - *CINDEX. *CINDEX is modified to point to after the event - specifier. At function entry, CINDEX points to the index into - STRING where the history event specification begins. QCHAR is a - character that is allowed to end the event specification in - addition to the "normal" terminating characters. - - - Function: char ** history_tokenize (const char *string) - Return an array of tokens parsed out of STRING, much as the shell - might. The tokens are split on the characters `" \t\n()<>;&|$"', - and shell quoting conventions are obeyed. - - -File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History - -History Variables -================= - - This section describes the externally-visible variables exported by -the GNU History Library. - - - Variable: int history_base - The logical offset of the first entry in the history list. - - - Variable: int history_length - The number of entries currently stored in the history list. - - - Variable: int max_input_history - The maximum number of history entries. This must be changed using - `stifle_history()'. - - - Variable: char history_expansion_char - The character that starts a history event. The default is `!'. - - - Variable: char history_subst_char - The character that invokes word substitution if found at the start - of a line. The default is `^'. - - - Variable: char history_comment_char - During tokenization, if this character is seen as the first - character of a word, then it and all subsequent characters up to a - newline are ignored, suppressing history expansion for the - remainder of the line. This is disabled by default. - - - Variable: char * history_no_expand_chars - The list of characters which inhibit history expansion if found - immediately following HISTORY_EXPANSION_CHAR. The default is - space, TAB, and `='. - - - Variable: char * history_search_delimiter_chars - The list of additional characters which can delimit a history - search string, in addition to space, TAB, `:' and `?' in the case - of a substring search. The default is empty. - - - Variable: int history_quotes_inhibit_expansion - If non-zero, single-quoted words are not scanned for the history - expansion character. The default value is 0. - - - Variable: rl_linebuf_func_t * history_inhibit_expansion_function - This should be set to the address of a function that takes two - arguments: a `char *' (STRING) and an `int' index into that string - (I). It should return a non-zero value if the history expansion - starting at STRING[I] should not be performed; zero if the - expansion should be done. It is intended for use by applications - like Bash that use the history expansion character for additional - purposes. By default, this variable is set to `NULL'. - - -File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History - -History Programming Example -=========================== - - The following program demonstrates simple use of the GNU History -Library. - - #include - #include - - main (argc, argv) - int argc; - char **argv; - { - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } - } - - -File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top - -Concept Index -************* - -* Menu: - -* anchored search: Searching the History List. -* event designators: Event Designators. -* history events: Event Designators. -* history expansion: History Interaction. -* History Searching: Searching the History List. - - -File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* add_history: History List Management. -* append_history: Managing the History File. -* clear_history: History List Management. -* current_history: Information About the History List. -* get_history_event: History Expansion. -* history_arg_extract: History Expansion. -* history_base: History Variables. -* history_comment_char: History Variables. -* history_expand: History Expansion. -* history_expansion_char: History Variables. -* history_get: Information About the History List. -* history_get_history_state: Initializing History and State Management. -* history_inhibit_expansion_function: History Variables. -* history_is_stifled: History List Management. -* history_length: History Variables. -* history_list: Information About the History List. -* history_no_expand_chars: History Variables. -* history_quotes_inhibit_expansion: History Variables. -* history_search: Searching the History List. -* history_search_delimiter_chars: History Variables. -* history_search_pos: Searching the History List. -* history_search_prefix: Searching the History List. -* history_set_history_state: Initializing History and State Management. -* history_set_pos: Moving Around the History List. -* history_subst_char: History Variables. -* history_tokenize: History Expansion. -* history_total_bytes: Information About the History List. -* history_truncate_file: Managing the History File. -* max_input_history: History Variables. -* next_history: Moving Around the History List. -* previous_history: Moving Around the History List. -* read_history: Managing the History File. -* read_history_range: Managing the History File. -* remove_history: History List Management. -* replace_history_entry: History List Management. -* stifle_history: History List Management. -* unstifle_history: History List Management. -* using_history: Initializing History and State Management. -* where_history: Information About the History List. -* write_history: Managing the History File. - - - -Tag Table: -Node: Top1136 -Node: Using History Interactively1716 -Node: History Interaction2223 -Node: Event Designators3642 -Node: Word Designators4569 -Node: Modifiers6198 -Node: Programming with GNU History7336 -Node: Introduction to History8061 -Node: History Storage9746 -Node: History Functions10843 -Node: Initializing History and State Management11814 -Node: History List Management12614 -Node: Information About the History List14164 -Node: Moving Around the History List15520 -Node: Searching the History List16407 -Node: Managing the History File18325 -Node: History Expansion19996 -Node: History Variables21856 -Node: History Programming Example24183 -Node: Concept Index26905 -Node: Function and Variable Index27391 - -End Tag Table diff --git a/readline/doc/history.ps b/readline/doc/history.ps deleted file mode 100644 --- a/readline/doc/history.ps +++ /dev/null @@ -1,1641 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: history.dvi -%%Pages: 20 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o history.ps history.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2001.02.05:1130 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (history.dvi) -@start -%DVIPSBitmapFont: Fa cmti10 10.95 1 -/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbxti10 14.4 1 -/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmtt9 9 26 -/Fc 26 123 df95 D97 -D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0E -EA1DFCEA0CF81217809614>II<137EA2130EA5EA07CEEA0FFEEA1C3EEA -301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF12177F9614>II<13FCEA01FEEA038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F17 -7F9614>II<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206 -120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I<12FCA2121CA5EBFF80A2EB -1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF1F80A21117809614>107 -DII -IIIII -I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F00F157F9414>II<38FE3F80A2383C1E00EA1C1CA36C5A -A3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA -1B6C121AA3EA1E7CA2EA0E3811107F8F14>II<38FE3F80A2381C0E005B -A2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7FC127E123C11187F8F -14>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmti9 9 1 -/Fd 1 47 df<1230127812F0126005047C830C>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr9 9 24 -/Fe 24 122 df48 D<12035AB4FC1207B3A2EA7FF80D187D -9713>I54 -D<1240EA7FFF13FEA2EA4004EA80081310A2EA00201340A21380120113005AA25A1206A2 -120EA5120410197E9813>II -I<39FFE1FFC0390E001C00AB380FFFFC380E001CAC39FFE1FFC01A1A7F991D>72 -D83 -D97 D99 D<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C -5AEA1C373807C7E0131A7F9915>II103 D<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF014 -1A809915>I<1218123CA212181200A612FC121CAE12FF081A80990A>I110 DII< -EAFC78EA1D9CEA1E1C1308EA1C00ABEAFF800E10808F0F>114 DI<1208A41218A21238EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38 -FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14> -118 D<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA -181CEA381E38FC3FC012107F8F14>120 D<38FF0F80383C0700EA1C061304A26C5AA26C -5AA3EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmss10 10.95 2 -/Ff 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmbx10 12 27 -/Fg 27 123 df12 D<90380FFF80137F3801FC1F -3803F03FEA07E0EA0FC0141FA7B6FCA2380FC01FB2397FF8FFF0A21C237FA220>I97 DII<49B4FC -A2EB003FAB13FE3807FFBF380FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C -5B380F81FF3907FF3FE0EA01FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E -00F0127E007C13F8147812FCB512F8A200FCC7FCA3127CA26C1318A26C1330380F80E038 -03FFC0C6130015167E951A>II<9038FE0F803903FF9FC0380F83E338 -1F01F3391E00F000003E7FA5001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2 -121C381FFFE014FC6C13FF7E001F1480397C001FC00078130F00F81307A3007CEB0F806C -EB1F00381F807E6CB45A000113E01A217F951D>II<121E123FEA7F80A4EA3F00121E -C7FCA6EAFF80A2121FB2EAFFF0A20C247EA30F>I107 DI<3AFF03F8 -03F890390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FF -F0FFF0A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FF -E0A21B167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7 -007C133E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87 -F0EBBFFC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EB -F07EEBBFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>II<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000AD -EAFFF8A214167E9518>I<3807F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA -7FFE6C7E6C1380120738003FC0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812 -167E9517>I<487EA41203A21207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3 -EA07FEEA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01 -FC1B167D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA2 -6C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3 -FF83FCA23A1F807C00E0D80FC014C08001E013010007017F1380A2D803F0EB0300ECCF83 -01F81387D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118 -136026167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD8013 -7F91C7FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48487E000E137F39FF81FF -E0A21B167F951E>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035B -A26C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC38 -13305BEA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F -00E0138038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB -00E0EA7E03B5FCA214167E9519>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmtt10 12 27 -/Fh 27 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<1338137CA2136C13EEA313 -C6A2EA01C7A438038380A4380701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83 -FE387F01FC171E7F9D1A>65 D69 D<38FF83FEA3381C0070AA381FFFF0A3381C -0070AB38FF83FEA3171E7F9D1A>72 D -I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213301338A21318131CA2 -130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>78 -DI82 D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12 -701278123FEA1FF0EA07FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF001 -38FC03C0B5128000EF1300EAE3FC141E7D9D1A>I<387FFFFEB5FCA238E0380EA5000013 -00B33803FF80A3171E7F9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003 -138013C700011300A2EA00EEA2137CA21338AA48B4FCA3171E7F9D1A>89 -D<387FFFC0B512E0A26C13C013047D7E1A>95 D97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB0038120E14 -1CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>IIIII<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3 -FE13E713E3171E7F9D1A>104 DI108 -D -110 DI<387F81F838FF8F -FC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114 -D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F -9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C -A2133817157F941A>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 13.14 41 -/Fi 41 123 df12 -D<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA21200B3AA387FFF -FCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC387C00FE12FE14 -FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B1370 -EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F>I<48 -B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB03F8 -EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FEA214 -FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A214F8 -1301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A12185A12 -705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEBFFF8 -14F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FCC712 -7EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE0018 -237DA21F>II<1230123C003FB512C0A2 -15804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133CA25B -A213F8A41201A66C5A13601A257DA41F>I<141CA2143EA3147FA24A7EA39038019FC0A2 -9038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FCA290 -39E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229257E -A42E>65 D68 -DII72 DI76 D -I<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>83 -D87 -D97 -DIII<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>II<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>II<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I108 D<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E8 -03F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80 -390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>II<38FFC1FCEBCFFF390FFC1FC09038F0 -07E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038 -CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC -13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA70 -01EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212 -E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F -121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39 -FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I< -39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC0000 -5B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A239 -0FC00F003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F8 -1361EBE0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I<387FFFF8A2387C03F0EA700738600FE000 -E013C0EB1F80EAC03F1400137EEA00FE5B485A0003130C13F0EA07E0120FEBC01C381F80 -18003F1338387F0078387E01F8B5FCA216187E971B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsl10 10.95 30 -/Fj 30 122 df<903803F07C90381E0DC69038380F0FEB701E01E0130EEC0C003801C01C -A548485A007FB512C03903803800A448485AA6000E5BA648485A001E7F38FF8FFC20207E -9F1B>11 DI<903803F03F9039 -1E09E0809039380F80C09039701F01E0EBE03E021E13C02601C01CC7FCA548485A007FB6 -12803903803803A43A0700700700A6000EEBE00EA64848485A001EEBE01E3AFF8FF8FFC0 -23207E9F26>14 D<13201360A4383061C0383C4380380E4E00EA0778EA01E0A2EA07B8EA -1C9CEA708FEAE083EA0180A490C7FC12147AA117>42 D<13181338EA01F8EA0E701200A5 -13E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B9D17>49 DI<13 -FFEA01FE1380A5EA0300A61206A65AA65AA65AA65AA6B4FCA2102D7EA10D>91 -D<13FFEA01FEEA0006A5130CA61318A61330A61360A613C0A6EA0180A6EAFF00A2102D82 -A10D>93 D97 D<13FEEA0383380E0780121C00 -38130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99 -D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>II<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>II<13E0120712011200 -A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>108 -D<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5000EEB -E00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A0 -3803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319> -I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0130300F013 -8038700700EA380E6C5AEA07E014147D9317>IIIII<1380EA0100 -A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<38 -1C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011147B -9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA0390 -13A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C030060148015 -401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C48 -5A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0C0EBE180EB -73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07FC -18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B143014205C13705CA2 -0171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278 -191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmcsc10 10.95 3 -/Fk 3 118 df103 -D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C130E1307A2 -EB03A0EB01E0A213001460123800FE132016177E961C>110 D<38FF81FC381C00701420 -B0000C1340120E6C138038018300EA007C16177E961C>117 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 17.28 36 -/Fl 36 122 df49 DI<1578A215FCA34A7E -A24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F02787FEC700FA202E07F1507 -010180ECC003A249486C7EA201078191C7FC498191B6FCA24981011CC7123F013C810138 -141FA24981160F01F081491407A2484881486C1403B549B512FCA336317DB03D>65 -DI<913A03FF800180023F -EBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C8127F -4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127FA2 -7FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93FC0 -5CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A>I< -B812E0A3C6903880007FEE0FF016031601A21600A21770A31738A21507A21700A35D5D5D -91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>70 DIII78 -D80 -D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3481603 -A5C792C7FCB3AA017FB6FCA331307DAF38>84 DII97 DIIIII<90391FF007C09039FFFE3F -E03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF000A2003F80A5001F5CA2 -000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC121EA2121F7F90B57E6C -14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C140F00FC1407A4007EEC -0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0D8001F90C7FC242F7E9F -28>III108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01 -E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3 -B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1 -801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F2D>II<3901F83FE000FFEBFFFC9038FBE07F9039FF00 -3F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216FEA816FC1507A216F8A2 -ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3FC091C8FCABB512C0A3 -272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30FF0EA07F6A29038FC07 -E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 D<3801FF86000713FEEA1F00003C -133E48131E140E12F8A36C90C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA00 -3F01001380143F0060131F00E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C0 -7F8019207D9F20>I<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FC -C7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>IIII<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B90 -381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF081 -90380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FCA3 -28207F9F2B>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmsy10 10.95 1 -/Fm 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbx12 14.4 45 -/Fn 45 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -DII<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I65 DI<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>I69 -DI<91387FE003903907 -FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880485A82 -485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E6C -B45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>III77 -DI80 -D82 D<9038FF80600003EBF0E0000F13F8381F80FD383F -001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE -80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C1307 -6C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I85 DII<3803FF80000F13F0381F01FC383F80 -FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E -13DF393F839FFC381FFE0F3803FC031E1B7E9A21>97 DIIII< -EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A338 -7FFF80A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003E -EB3E10007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC12 -38A2123C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007C -EB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>II<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120F -B3A3EAFFFEA30F2B7EAA12>I108 -D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200 -01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1 -FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25 ->II<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC -140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80 -9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13 -D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78 -00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC -130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0 -A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801 -FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF -3801FFC738007F87201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0 -A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5A -A26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8 -EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F14 -38EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I< -39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A -130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F -39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EB -FC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D -5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmtt10 10.95 75 -/Fo 75 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -DI -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>III<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>II<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>IIII<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC -38FE078038F803C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5A -EA01F8131C7E9B18>54 D<1230127812FCA2127812301200A81230127812FCA212781230 -0614779318>58 D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E12 -1C123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07 -F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E013 -03EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0 -130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2 -EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>II<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 -D68 DII<387F07F038FF -8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18 ->72 DI76 D<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>78 DII< -EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB -0380A5149CA3387F01F8EAFF81387F00F0161C7F9B18>82 D<3803F1C0EA1FFF5AEA7C0F -EA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2 -126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA2 -38E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F -01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03381C01C0 -EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC487E6C -5A151C7F9B18>89 D91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>III<387FFFC0B512E0A26C13C013047E7F18>I<1206121E123E12381270A212E0A312F8 -12FC127CA21238070E789E18>II<127E -12FE127E120EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80 -E013C1EBFFC0000E138038063E00151C809B18>II< -EB1F80133F131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007 -A2EA380FEA3C1F381FFFF0380FFBF83803E3F0151C7E9B18>III<3801E1F03807FFF85A381E1E30381C0E00 -487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F03870 -0070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE12 -7E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17 -1C809B18>II108 D<38F9C1C038FFF7F013FF383E3E -38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>IIII<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2 -EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38 -FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I< -EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE0 -03A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA23803 -8000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E -07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8 -007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A213701514 -7F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380 -A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039E -EA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F800 -7F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2 -EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC -121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485A -EA03C0485A380F0070121E5A5AB512F0A314147F9318>II<126012 -F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0 -005BABEA03C012FF90C7FC127C13247E9F18>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmr10 10.95 74 -/Fp 74 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>II<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I34 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -DI<127012F8A3127005057C840D>I48 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>III<1306A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A2 -124012C0B512F038000E00A7EBFFE0141E7F9D17>II<137CEA0182EA0701380E0380EA0C07121838 -38030090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F013C0A51270A214 -801238EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE014C0A238400080 -38800100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A131F7E9D17>I< -EA03F0EA0C0CEA1006EA3003382001801260A3127038780300123EEA3F06EA1FC8EA0FF0 -EA03F8487EEA0C7EEA103F38300F80EA6007EB01C012C01300A31480EA600100201300EA -1002EA0C0CEA03F0121F7E9D17>II<127012F8A312701200AA127012F8A3127005147C93 -0D>I<127012F8A312701200AA127012F012F8A212781208A31210A31220A21240051D7C -930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FC -EB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F9F22>65 -DI<90380FE0109038381C30 -9038E002703803C00139078000F048C71270121E15305A1510127C127800F81400A91278 -007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C217E9F21 ->IIII<90380FE01090 -38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814 -00A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E002309038380C -1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF8 -1D1F7E9E22>II76 DIIII -II<3803F040380C0C -C0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC00071380C6 -13C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA81FC14 -217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410A40000 -1400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB010013 -80120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F8000F86CC7 -126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804A26D5AA3 -6D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF03B1F000F -C007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F01410D801 -E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D000F133F -6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0B3B3A512 -FFA2082D7CA10D>91 DI<12FFA21203B3B3A512FFA2082D80A10D>I<120812101220A2 -1240A21280A312B812FCA2127C1238060E7D9F0D>96 DI<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6147014 -F014E0001E13C0381A018038198700EA107C15207E9F19>I -III<137CEA01 -C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803E330EA -0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA3FFE38 -1FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC00141F7F94 -17>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F19>I<12 -38127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA00E013 -00A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I<121C12 -FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C131C7F -130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F0C>I<39 -1C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021147E9326 ->IIII<3801F0403807 -0CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA0709EA01F1 -EA0001A8EB0FF8151D7F9318>III<1202A31206A2120EA2123EEA -FFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA1C03AE13 -07120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380A3380701 -00A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF9FE1FC39 -3C078070391C030060EC8020000E1440A214C0D80704138014E0A239038861001471A238 -01D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03C0380E01 -80EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA06073804 -0380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13C06C1380 -A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF080A200F1 -C7FC1262123C151D7F9318>II -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmbx12 20.736 13 -/Fq 13 122 df71 DI76 -D78 -D85 D97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I105 D<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE0D807F8EB0FF0 -48486D7EA248486D7E003F81A248486D7EA400FF1680A9007F1600A36C6C495AA2001F5D -6D1307000F5D6C6C495AD803FEEB3FE03A00FF80FF806DB5C7FC010F13F8010113C02926 -7DA530>111 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000 -035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fq(GNU)33 b(History)f(Library)p 75 709 -1800 17 v 756 757 a Fp(Edition)16 b(4.2-b)q(eta,)e(for)h -Fo(History)f(Library)g Fp(V)l(ersion)i(4.2-b)q(eta.)1698 -811 y(F)l(eb)f(2001)75 2467 y Fn(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fp(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f -(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o -(vides)h(a)75 271 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g -(recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75 -339 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 394 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -448 y(Boston,)d(MA)h(02111)f(USA)75 516 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 570 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fm(\015)i Fp(1988-2001)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 Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(1)75 149 y Fl(1)41 b(Using)26 b(History)h(In)n(teractiv)n -(ely)137 289 y Fp(This)17 b(c)o(hapter)g(describ)q(es)h(ho)o(w)e(to)g -(use)h(the)g Fk(gnu)f Fp(History)g(Library)h(in)o(teractiv)o(ely)l(,)h -(from)e(a)g(user's)75 344 y(standp)q(oin)o(t.)38 b(It)21 -b(should)h(b)q(e)g(considered)g(a)f(user's)g(guide.)38 -b(F)l(or)21 b(information)g(on)g(using)h(the)f Fk(gnu)75 -398 y Fp(History)c(Library)h(in)h(y)o(our)e(o)o(wn)g(programs,)f(see)i -(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],)75 -453 y(page)e(5.)75 600 y Fn(1.1)33 b(History)22 b(Expansion)137 -704 y Fp(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h -(expansion)h(feature)e(that)h(is)g(similar)h(to)e(the)h(history)75 -759 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fo(csh)p Fp(.)18 -b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e(used)h(to)g -(manipulate)h(the)f(history)75 814 y(information.)137 -888 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i -(history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75 -943 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o -(ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75 -998 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f -(quic)o(kly)l(.)137 1072 y(History)j(expansion)i(tak)o(es)d(place)i(in) -h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i -(whic)o(h)f(line)h(from)75 1127 y(the)h(history)f(list)i(should)g(b)q -(e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f -(select)i(p)q(ortions)e(of)75 1182 y(that)15 b(line)i(for)d(inclusion)k -(in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e -(the)g(history)g(is)h(called)h(the)75 1237 y Fj(ev)o(en)o(t)p -Fp(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted) -h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fp(.)i(V)l(arious)c -Fj(mo)q(di\014ers)75 1292 y Fp(are)i(a)o(v)m(ailable)i(to)e(manipulate) -i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o -(to)h(w)o(ords)e(in)j(the)e(same)75 1346 y(fashion)c(that)e(Bash)i(do)q -(es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes) -h(are)f(considered)h(one)g(w)o(ord.)75 1401 y(History)18 -b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g -(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1456 -y(whic)o(h)d(is)g(`)p Fo(!)p Fp(')e(b)o(y)h(default.)75 -1583 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137 -1687 y Fp(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f -(a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75 -1777 y Fo(!)216 b Fp(Start)16 b(a)g(history)h(substitution,)g(except)h -(when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315 -1832 y(the)e(line,)i(`)p Fo(=)p Fp(')d(or)h(`)p Fo(\()p -Fp('.)75 1919 y Fo(!)p Fj(n)191 b Fp(Refer)16 b(to)e(command)h(line)i -Fj(n)p Fp(.)75 2006 y Fo(!-)p Fj(n)167 b Fp(Refer)16 -b(to)e(the)i(command)f Fj(n)g Fp(lines)i(bac)o(k.)75 -2094 y Fo(!!)192 b Fp(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 Fo(!-1)p Fp('.)75 -2181 y Fo(!)p Fj(string)102 b Fp(Refer)16 b(to)e(the)i(most)e(recen)o -(t)h(command)g(starting)g(with)g Fj(string)p Fp(.)75 -2268 y Fo(!?)p Fj(string)t Fo([?])315 2323 y Fp(Refer)i(to)f(the)h -(most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p -Fp(.)25 b(The)17 b(trailing)g(`)p Fo(?)p Fp(')f(ma)o(y)g(b)q(e)315 -2377 y(omitted)f(if)h(the)f Fj(string)k Fp(is)d(follo)o(w)o(ed)f -(immediately)i(b)o(y)e(a)g(newline.)75 2464 y Fo(^)p -Fj(string1)t Fo(^)p Fj(string2)t Fo(^)315 2519 y Fp(Quic)o(k)i -(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h -Fj(string1)i Fp(with)e Fj(string2)p Fp(.)315 2574 y(Equiv)m(alen)o(t)g -(to)d Fo(!!:s/)p Fj(string1)t Fo(/)p Fj(string2)t Fo(/)p -Fp(.)75 2661 y Fo(!#)192 b Fp(The)15 b(en)o(tire)h(command)f(line)i(t)o -(yp)q(ed)f(so)e(far.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fp(2)1347 b(GNU)15 b(History)g(Library)75 -149 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 247 -y Fp(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o -(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fo(:)p -Fp(')e(separates)h(the)75 302 y(ev)o(en)o(t)j(sp)q(eci\014cation)h -(from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h -(omitted)g(if)g(the)g(w)o(ord)f(designator)75 357 y(b)q(egins)f(with)g -(a)e(`)p Fo(^)p Fp(',)h(`)p Fo($)p Fp(',)f(`)p Fo(*)p -Fp(',)g(`)p Fo(-)p Fp(',)g(or)h(`)p Fo(\045)p Fp('.)24 -b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i -(of)e(the)g(line,)75 411 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h -(denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i -(in)o(to)f(the)g(curren)o(t)f(line)75 466 y(separated)c(b)o(y)g(single) -i(spaces.)137 535 y(F)l(or)e(example,)75 616 y Fo(!!)192 -b Fp(designates)18 b(the)g(preceding)i(command.)28 b(When)18 -b(y)o(ou)g(t)o(yp)q(e)g(this,)h(the)f(preceding)h(com-)315 -671 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 752 y Fo(!!:$)144 -b Fp(designates)12 b(the)f(last)g(argumen)o(t)f(of)h(the)g(preceding)i -(command.)19 b(This)11 b(ma)o(y)g(b)q(e)h(shortened)315 -807 y(to)j Fo(!$)p Fp(.)75 887 y Fo(!fi:2)120 b Fp(designates)15 -b(the)g(second)g(argumen)o(t)f(of)g(the)h(most)f(recen)o(t)g(command)h -(starting)f(with)h(the)315 942 y(letters)g Fo(fi)p Fp(.)137 -1024 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1105 -y Fo(0)h(\(zero\))57 b Fp(The)15 b Fo(0)p Fp(th)g(w)o(ord.)20 -b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g(the)f(command)g(w)o -(ord.)75 1186 y Fj(n)215 b Fp(The)15 b Fj(n)p Fp(th)h(w)o(ord.)75 -1267 y Fo(^)216 b Fp(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o -(ord)g(1.)75 1348 y Fo($)216 b Fp(The)15 b(last)h(argumen)o(t.)75 -1429 y Fo(\045)216 b Fp(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g -(most)g(recen)o(t)g(`)p Fo(?)p Fj(string)t Fo(?)p Fp(')f(searc)o(h.)75 -1510 y Fj(x)p Fo(-)p Fj(y)168 b Fp(A)15 b(range)g(of)g(w)o(ords;)f(`)p -Fo(-)p Fj(y)t Fp(')g(abbreviates)i(`)p Fo(0-)p Fj(y)t -Fp('.)75 1591 y Fo(*)216 b Fp(All)15 b(of)f(the)f(w)o(ords,)g(except)i -(the)f Fo(0)p Fp(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p -Fo(1-$)p Fp('.)18 b(It)c(is)g(not)g(an)g(error)315 1645 -y(to)g(use)h(`)p Fo(*)p Fp(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f -(in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g -(in)315 1700 y(that)f(case.)75 1781 y Fj(x)s Fo(*)189 -b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p Fp(')75 1862 -y Fj(x)p Fo(-)192 b Fp(Abbreviates)16 b(`)p Fj(x)p Fo(-$)p -Fp(')e(lik)o(e)i(`)p Fj(x)s Fo(*)p Fp(',)e(but)i(omits)f(the)g(last)g -(w)o(ord.)137 1943 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h -(without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h -(command)75 1998 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 -2113 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2210 y Fp(After)10 -b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g -(sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75 -2265 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p -Fo(:)p Fp('.)75 2346 y Fo(h)216 b Fp(Remo)o(v)o(e)15 -b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the) -f(head.)75 2427 y Fo(t)216 b Fp(Remo)o(v)o(e)15 b(all)h(leading)h -(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75 -2508 y Fo(r)216 b Fp(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g -(the)g(form)g(`)p Fo(.)p Fj(su\016x)s Fp(',)f(lea)o(ving)i(the)f -(basename.)75 2589 y Fo(e)216 b Fp(Remo)o(v)o(e)15 b(all)h(but)g(the)f -(trailing)h(su\016x.)75 2670 y Fo(p)216 b Fp(Prin)o(t)15 -b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)p -eop -%%Page: 3 5 -3 4 bop 75 -58 a Fp(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(3)75 149 y Fo(s/)p Fj(old)r Fo(/)p Fj(new)t -Fo(/)315 204 y Fp(Substitute)17 b Fj(new)j Fp(for)c(the)h(\014rst)e(o)q -(ccurrence)j(of)e Fj(old)i Fp(in)f(the)g(ev)o(en)o(t)f(line.)25 -b(An)o(y)16 b(delimiter)315 259 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g -(of)f(`)p Fo(/)p Fp('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h -(quoted)f(in)i Fj(old)g Fp(and)f Fj(new)k Fp(with)12 -b(a)315 314 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p -Fo(&)p Fp(')e(app)q(ears)h(in)h Fj(new)p Fp(,)f(it)g(is)h(replaced)g(b) -o(y)f Fj(old)p Fp(.)20 b(A)14 b(single)i(bac)o(kslash)315 -369 y(will)j(quote)e(the)h(`)p Fo(&)p Fp('.)25 b(The)17 -b(\014nal)i(delimiter)g(is)f(optional)g(if)f(it)h(is)g(the)f(last)g(c)o -(haracter)g(on)315 423 y(the)e(input)h(line.)75 503 y -Fo(&)216 b Fp(Rep)q(eat)16 b(the)f(previous)h(substitution.)75 -583 y Fo(g)216 b Fp(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o -(v)o(er)e(the)g(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20 -b(in)g(conjunction)315 638 y(with)c(`)p Fo(s)p Fp(',)d(as)i(in)h -Fo(gs/)p Fj(old)r Fo(/)p Fj(new)t Fo(/)p Fp(,)f(or)g(with)g(`)p -Fo(&)p Fp('.)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fp(4)1347 b(GNU)15 b(History)g(Library)p -eop -%%Page: 5 7 -5 6 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(5)75 149 y Fl(2)41 b(Programming)28 b(with)e(GNU)i -(History)137 269 y Fp(This)17 b(c)o(hapter)f(describ)q(es)i(ho)o(w)e -(to)f(in)o(terface)i(programs)e(that)g(y)o(ou)h(write)g(with)h(the)f -Fk(gnu)g Fp(History)75 324 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g -(considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15 -b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75 -379 y(of)e Fk(gnu)g Fp(History)l(,)g(see)g(Chapter)g(1)g([Using)g -(History)g(In)o(teractiv)o(ely],)h(page)f(1.)75 509 y -Fn(2.1)33 b(In)n(tro)r(duction)24 b(to)e(History)137 -607 y Fp(Man)o(y)11 b(programs)f(read)h(input)i(from)d(the)i(user)f(a)g -(line)i(at)e(a)g(time.)19 b(The)12 b Fk(gnu)f Fp(History)g(library)h -(is)g(able)75 661 y(to)i(k)o(eep)g(trac)o(k)g(of)g(those)g(lines,)i -(asso)q(ciate)e(arbitrary)g(data)g(with)g(eac)o(h)h(line,)h(and)e -(utilize)j(information)75 716 y(from)d(previous)i(lines)h(in)f(comp)q -(osing)g(new)f(ones.)137 784 y(The)f(programmer)f(using)h(the)g -(History)g(library)g(has)g(a)o(v)m(ailable)h(functions)g(for)e(remem)o -(b)q(ering)h(lines)75 839 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g -(arbitrary)f(data)f(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d -(the)i(list,)h(searc)o(hing)75 894 y(through)17 b(the)h(list)g(for)f(a) -h(line)h(con)o(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g -(referencing)h(an)o(y)e(line)i(in)75 949 y(the)c(list)i(directly)l(.)22 -b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fp(function)h(is)e -(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75 -1003 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g -(programs.)137 1072 y(The)f(user)h(using)f(programs)f(written)h(with)g -(the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h -(consisten)o(t)75 1126 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f -(w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g -(previous)75 1181 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f -(commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d -(are)75 1236 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o -(vided)g(b)o(y)g Fo(csh)p Fp(.)137 1304 y(If)f(the)g(programmer)f -(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f -(includes)j(some)c(history)75 1359 y(manipulation)j(b)o(y)e(default,)g -(and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i -(editing.)137 1427 y(Before)i(declaring)i(an)o(y)d(functions)i(using)g -(an)o(y)f(functionalit)o(y)h(the)f(History)g(library)h(pro)o(vides)f -(in)75 1482 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should) -i(include)g(the)f(\014le)g Fo()d -Fp(in)j(an)o(y)f(\014le)75 1537 y(that)d(uses)h(the)h(History)e -(library's)i(features.)18 b(It)12 b(supplies)i(extern)e(declarations)h -(for)e(all)i(of)f(the)g(library's)75 1591 y(public)17 -b(functions)f(and)g(v)m(ariables,)g(and)f(declares)h(all)g(of)f(the)h -(public)h(data)d(structures.)75 1722 y Fn(2.2)33 b(History)22 -b(Storage)137 1819 y Fp(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f -(of)g(history)i(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h -(declared)g(as)f(follo)o(ws:)195 1885 y Fo(typedef)23 -b(void)g(*histdata_t;)195 1988 y(typedef)g(struct)g(_hist_entry)f({)243 -2040 y(char)h(*line;)243 2092 y(histdata_t)f(data;)195 -2144 y(})i(HIST_ENTRY;)137 2212 y Fp(The)16 b(history)f(list)h(itself)g -(migh)o(t)f(therefore)g(b)q(e)h(declared)g(as)195 2277 -y Fo(HIST_ENTRY)22 b(**the_history_list;)137 2345 y Fp(The)16 -b(state)e(of)h(the)g(History)g(library)h(is)g(encapsulated)g(in)o(to)f -(a)g(single)i(structure:)195 2411 y Fo(/*)24 b(A)f(structure)g(used)g -(to)h(pass)f(around)g(the)h(current)f(state)g(of)g(the)h(history.)f(*/) -195 2462 y(typedef)g(struct)g(_hist_state)f({)243 2514 -y(HIST_ENTRY)g(**entries;)h(/*)g(Pointer)g(to)h(the)f(entries)g -(themselves.)g(*/)243 2566 y(int)g(offset;)262 b(/*)23 -b(The)h(location)f(pointer)f(within)h(this)h(array.)f(*/)243 -2618 y(int)g(length;)262 b(/*)23 b(Number)g(of)h(elements)f(within)g -(this)g(array.)g(*/)243 2670 y(int)g(size;)310 b(/*)23 -b(Number)g(of)h(slots)f(allocated)g(to)g(this)h(array.)f(*/)p -eop -%%Page: 6 8 -6 7 bop 75 -58 a Fp(6)1347 b(GNU)15 b(History)g(Library)243 -149 y Fo(int)23 b(flags;)195 201 y(})h(HISTORY_STATE;)137 -271 y Fp(If)16 b(the)f(\015ags)g(mem)o(b)q(er)g(includes)j -Fo(HS_STIFLED)p Fp(,)13 b(the)i(history)h(has)f(b)q(een)h(sti\015ed.)75 -404 y Fn(2.3)33 b(History)22 b(F)-6 b(unctions)137 503 -y Fp(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 -557 y(History)l(.)75 674 y Fi(2.3.1)30 b(Initializing)20 -b(History)h(and)f(State)g(Managemen)n(t)137 772 y Fp(This)e(section)g -(describ)q(es)h(functions)f(used)g(to)e(initialize)21 -b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75 -827 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g -(functions)h(in)g(y)o(our)f(program.)1762 950 y(F)l(unction)-1861 -b Fh(void)20 b Fg(using)p 333 950 18 3 v 20 w(history)j -Ff(\()p Fo(void)p Ff(\))195 1005 y Fp(Begin)e(a)f(session)g(in)h(whic)o -(h)g(the)f(history)g(functions)g(migh)o(t)g(b)q(e)h(used.)34 -b(This)21 b(initializes)i(the)195 1059 y(in)o(teractiv)o(e)16 -b(v)m(ariables.)1762 1182 y(F)l(unction)-1861 b Fh(HISTORY_STATE)21 -b(*)e Fg(history)p 657 1182 V 21 w(get)p 755 1182 V 21 -w(history)p 951 1182 V 21 w(state)j Ff(\()p Fo(void)p -Ff(\))195 1237 y Fp(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(.)1762 -1360 y(F)l(unction)-1861 b Fh(void)20 b Fg(history)p -377 1360 V 20 w(set)p 468 1360 V 21 w(history)p 664 1360 -V 21 w(state)j Ff(\()p Fo(HISTORY_STATE)13 b(*state)p -Ff(\))195 1415 y Fp(Set)i(the)h(state)e(of)h(the)g(history)g(list)h -(according)g(to)e Fj(state)p Fp(.)75 1531 y Fi(2.3.2)30 -b(History)20 b(List)h(Managemen)n(t)137 1630 y Fp(These)11 -b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f -(list,)i(or)f(set)f(parameters)g(managing)75 1684 y(the)15 -b(list)h(itself.)1762 1808 y(F)l(unction)-1861 b Fh(void)20 -b Fg(add)p 294 1808 V 20 w(history)j Ff(\()p Fo(const)14 -b(char)g(*string)p Ff(\))195 1862 y Fp(Place)i Fj(string)i -Fp(at)d(the)g(end)h(of)e(the)h(history)g(list.)21 b(The)15 -b(asso)q(ciated)g(data)g(\014eld)h(\(if)f(an)o(y\))f(is)i(set)f(to)195 -1917 y Fo(NULL)p Fp(.)1762 2040 y(F)l(unction)-1861 b -Fh(HIST_ENTRY)21 b(*)e Fg(remo)n(v)n(e)p 584 2040 V 20 -w(history)k Ff(\()p Fo(int)14 b(which)p Ff(\))195 2095 -y Fp(Remo)o(v)o(e)23 b(history)f(en)o(try)h(at)f(o\013set)g -Fj(whic)o(h)h Fp(from)f(the)h(history)l(.)43 b(The)23 -b(remo)o(v)o(ed)f(elemen)o(t)h(is)195 2150 y(returned)16 -b(so)e(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining) -h(structure.)1762 2273 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 -b(*)e Fg(replace)p 580 2273 V 22 w(history)p 777 2273 -V 20 w(en)n(try)24 b Ff(\()p Fo(int)14 b(which,)g(const)h(char)283 -2328 y(*line,)f(histdata_t)g(data)p Ff(\))195 2382 y -Fp(Mak)o(e)f(the)h(history)g(en)o(try)f(at)g(o\013set)g -Fj(whic)o(h)i Fp(ha)o(v)o(e)e Fj(line)18 b Fp(and)c Fj(data)p -Fp(.)19 b(This)14 b(returns)g(the)g(old)g(en)o(try)195 -2437 y(so)19 b(y)o(ou)f(can)i(disp)q(ose)g(of)e(the)i(data.)30 -b(In)20 b(the)f(case)g(of)g(an)g(in)o(v)m(alid)i Fj(whic)o(h)p -Fp(,)g(a)d Fo(NULL)h Fp(p)q(oin)o(ter)g(is)195 2492 y(returned.)1762 -2615 y(F)l(unction)-1861 b Fh(void)20 b Fg(clear)p 320 -2615 V 21 w(history)j Ff(\()p Fo(void)p Ff(\))195 2670 -y Fp(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(7)1762 149 y(F)l(unction)-1861 b Fh(void)20 -b Fg(sti\015e)p 320 149 18 3 v 21 w(history)j Ff(\()p -Fo(int)14 b(max)p Ff(\))195 204 y Fp(Sti\015e)i(the)f(history)h(list,)f -(remem)o(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fp(en)o(tries.)1762 -311 y(F)l(unction)-1861 b Fh(int)20 b Fg(unsti\015e)p -358 311 V 21 w(history)i Ff(\()p Fo(void)p Ff(\))195 -366 y Fp(Stop)c(sti\015ing)i(the)e(history)l(.)29 b(This)19 -b(returns)f(the)h(previous)g(amoun)o(t)e(the)i(history)f(w)o(as)f -(sti\015ed.)195 421 y(The)e(v)m(alue)i(is)f(p)q(ositiv)o(e)g(if)f(the)h -(history)f(w)o(as)f(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.) -1762 528 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p -351 528 V 20 w(is)p 409 528 V 21 w(sti\015ed)k Ff(\()p -Fo(void)p Ff(\))195 583 y Fp(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.)75 -689 y Fi(2.3.3)30 b(Information)19 b(Ab)r(out)i(the)f(History)h(List) -137 783 y Fp(These)13 b(functions)h(return)f(information)g(ab)q(out)f -(the)h(en)o(tire)h(history)e(list)i(or)e(individual)k(list)e(en)o -(tries.)1762 890 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 -b(**)e Fg(history)p 605 890 V 21 w(list)24 b Ff(\()p -Fo(void)p Ff(\))195 945 y Fp(Return)16 b(a)f Fo(NULL)f -Fp(terminated)i(arra)o(y)e(of)h Fo(HIST_ENTRY)f(*)h Fp(whic)o(h)h(is)f -(the)h(curren)o(t)f(input)h(history)l(.)195 1000 y(Elemen)o(t)g(0)f(of) -f(this)i(list)g(is)g(the)f(b)q(eginning)i(of)e(time.)20 -b(If)c(there)f(is)h(no)f(history)l(,)g(return)g Fo(NULL)p -Fp(.)1762 1107 y(F)l(unction)-1861 b Fh(int)20 b Fg(where)p -325 1107 V 20 w(history)j Ff(\()p Fo(void)p Ff(\))195 -1161 y Fp(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g -(history)g(elemen)o(t.)1762 1268 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(curren)n(t)p 587 1268 V 21 -w(history)k Ff(\()p Fo(void)p Ff(\))195 1323 y Fp(Return)13 -b(the)g(history)f(en)o(try)g(at)g(the)g(curren)o(t)h(p)q(osition,)g(as) -f(determined)i(b)o(y)e Fo(where_history\(\))p Fp(.)195 -1378 y(If)j(there)h(is)f(no)h(en)o(try)e(there,)h(return)g(a)g -Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1485 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(history)p 579 1485 V 21 w(get)j -Ff(\()p Fo(int)15 b(offset)p Ff(\))195 1540 y Fp(Return)21 -b(the)g(history)g(en)o(try)f(at)h(p)q(osition)g Fj(o\013set)p -Fp(,)g(starting)f(from)g Fo(history_base)f Fp(\(see)i(Sec-)195 -1594 y(tion)15 b(2.4)f([History)g(V)l(ariables],)h(page)g(10\).)j(If)d -(there)g(is)g(no)g(en)o(try)f(there,)h(or)f(if)h Fj(o\013set)g -Fp(is)g(greater)195 1649 y(than)g(the)g(history)g(length,)h(return)f(a) -g Fo(NULL)g Fp(p)q(oin)o(ter.)1762 1756 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 1756 V 20 w(total)p 487 -1756 V 22 w(b)n(ytes)j Ff(\()p Fo(void)p Ff(\))195 1811 -y Fp(Return)14 b(the)g(n)o(um)o(b)q(er)g(of)g(b)o(ytes)f(that)g(the)h -(primary)g(history)g(en)o(tries)g(are)g(using.)20 b(This)14 -b(function)195 1866 y(returns)h(the)g(sum)h(of)e(the)i(lengths)f(of)g -(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1972 y -Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137 -2066 y Fp(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g -(in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.) -1762 2173 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p -351 2173 V 20 w(set)p 442 2173 V 21 w(p)r(os)h Ff(\()p -Fo(int)15 b(pos)p Ff(\))195 2228 y Fp(Set)g(the)h(curren)o(t)f(history) -g(o\013set)f(to)h Fj(p)q(os)p Fp(,)g(an)g(absolute)g(index)i(in)o(to)e -(the)g(list.)1762 2335 y(F)l(unction)-1861 b Fh(HIST_ENTRY)21 -b(*)e Fg(previous)p 615 2335 V 20 w(history)k Ff(\()p -Fo(void)p Ff(\))195 2390 y Fp(Bac)o(k)14 b(up)h(the)g(curren)o(t)f -(history)g(o\013set)g(to)f(the)i(previous)g(history)f(en)o(try)l(,)g -(and)h(return)f(a)g(p)q(oin)o(ter)195 2445 y(to)h(that)f(en)o(try)l(.) -20 b(If)15 b(there)g(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fo(NULL)g Fp(p)q(oin)o(ter.)1762 2552 y(F)l(unction)-1861 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 2552 V 21 w(history)k -Ff(\()p Fo(void)p Ff(\))195 2606 y Fp(Mo)o(v)o(e)17 b(the)h(curren)o(t) -f(history)h(o\013set)f(forw)o(ard)f(to)h(the)h(next)g(history)g(en)o -(try)l(,)g(and)g(return)f(the)h(a)195 2661 y(p)q(oin)o(ter)e(to)e(that) -h(en)o(try)l(.)k(If)d(there)f(is)h(no)f(next)g(en)o(try)l(,)g(return)g -(a)g Fo(NULL)g Fp(p)q(oin)o(ter.)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fp(8)1347 b(GNU)15 b(History)g(Library)75 -149 y Fi(2.3.5)30 b(Searc)n(hing)21 b(the)f(History)h(List)137 -245 y Fp(These)14 b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i -(history)f(list)h(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c) -i(string.)75 300 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q -(oth)g(forw)o(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g -(history)f(p)q(osition.)75 355 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i -Fj(anc)o(hored)p Fp(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc) -o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 410 y(history)g(en)o(try)l -(.)1762 524 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p -351 524 18 3 v 20 w(searc)n(h)j Ff(\()p Fo(const)14 b(char)h(*string,)f -(int)h(direction)p Ff(\))195 578 y Fp(Searc)o(h)g(the)f(history)g(for)g -Fj(string)p Fp(,)g(starting)g(at)g(the)h(curren)o(t)f(history)g -(o\013set.)19 b(If)c Fj(direction)g Fp(is)g(less)195 -633 y(than)20 b(0,)g(then)h(the)f(searc)o(h)f(is)i(through)f(previous)g -(en)o(tries,)i(otherwise)e(through)f(subsequen)o(t)195 -688 y(en)o(tries.)h(If)c Fj(string)j Fp(is)d(found,)f(then)g(the)h -(curren)o(t)f(history)g(index)h(is)g(set)f(to)g(that)f(history)h(en)o -(try)l(,)195 743 y(and)i(the)g(v)m(alue)h(returned)f(is)g(the)g -(o\013set)e(in)j(the)f(line)h(of)e(the)h(en)o(try)g(where)g -Fj(string)j Fp(w)o(as)c(found.)195 798 y(Otherwise,)g(nothing)f(is)h(c) -o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 912 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 912 V 20 w(searc)n(h)p -527 912 V 21 w(pre\014x)i Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h -(direction)p Ff(\))195 966 y Fp(Searc)o(h)20 b(the)h(history)f(for)g -Fj(string)p Fp(,)h(starting)e(at)h(the)g(curren)o(t)h(history)f -(o\013set.)34 b(The)20 b(searc)o(h)g(is)195 1021 y(anc)o(hored:)g(matc) -o(hing)14 b(lines)j(m)o(ust)d(b)q(egin)i(with)f Fj(string)p -Fp(.)20 b(If)15 b Fj(direction)h Fp(is)f(less)g(than)g(0,)f(then)h(the) -195 1076 y(searc)o(h)g(is)i(through)e(previous)h(en)o(tries,)g -(otherwise)g(through)f(subsequen)o(t)h(en)o(tries.)22 -b(If)16 b Fj(string)j Fp(is)195 1131 y(found,)e(then)g(the)f(curren)o -(t)h(history)f(index)i(is)f(set)f(to)g(that)g(en)o(try)l(,)g(and)h(the) -f(return)h(v)m(alue)h(is)f(0.)195 1186 y(Otherwise,)f(nothing)f(is)h(c) -o(hanged,)f(and)h(a)e(-1)h(is)h(returned.)1762 1300 y(F)l(unction)-1861 -b Fh(int)20 b Fg(history)p 351 1300 V 20 w(searc)n(h)p -527 1300 V 21 w(p)r(os)h Ff(\()p Fo(const)14 b(char)h(*string,)f(int)h -(direction,)f(int)283 1355 y(pos)p Ff(\))195 1409 y Fp(Searc)o(h)j(for) -g Fj(string)k Fp(in)d(the)f(history)g(list,)h(starting)e(at)h -Fj(p)q(os)p Fp(,)g(an)g(absolute)h(index)g(in)o(to)f(the)h(list.)195 -1464 y(If)g Fj(direction)i Fp(is)e(negativ)o(e,)h(the)f(searc)o(h)g -(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p Fp(,)h(otherwise)h -(forw)o(ard.)195 1519 y(Returns)k(the)f(absolute)g(index)h(of)f(the)g -(history)g(elemen)o(t)h(where)f Fj(string)k Fp(w)o(as)21 -b(found,)j(or)d(-1)195 1574 y(otherwise.)75 1684 y Fi(2.3.6)30 -b(Managing)20 b(the)g(History)h(File)137 1780 y Fp(The)16 -b(History)g(library)h(can)e(read)h(the)g(history)g(from)f(and)h(write)g -(it)g(to)f(a)h(\014le.)22 b(This)17 b(section)f(do)q(cu-)75 -1835 y(men)o(ts)f(the)g(functions)h(for)f(managing)g(a)g(history)g -(\014le.)1762 1949 y(F)l(unction)-1861 b Fh(int)20 b -Fg(read)p 286 1949 V 20 w(history)i Ff(\()p Fo(const)15 -b(char)f(*filename)p Ff(\))195 2003 y Fp(Add)h(the)g(con)o(ten)o(ts)f -(of)h Fj(\014lename)j Fp(to)c(the)h(history)g(list,)g(a)g(line)h(at)f -(a)f(time.)20 b(If)15 b Fj(\014lename)k Fp(is)c Fo(NULL)p -Fp(,)195 2058 y(then)h(read)f(from)f(`)p Fo(~/.history)p -Fp('.)k(Returns)e(0)e(if)i(successful,)g(or)f Fo(errno)f -Fp(if)i(not.)1762 2172 y(F)l(unction)-1861 b Fh(int)20 -b Fg(read)p 286 2172 V 20 w(history)p 481 2172 V 20 w(range)i -Ff(\()p Fo(const)14 b(char)h(*filename,)f(int)h(from,)f(int)h(to)p -Ff(\))195 2227 y Fp(Read)g(a)e(range)h(of)f(lines)j(from)d -Fj(\014lename)p Fp(,)i(adding)g(them)f(to)f(the)h(history)g(list.)20 -b(Start)13 b(reading)i(at)195 2282 y(line)g Fj(from)d -Fp(and)h(end)h(at)f Fj(to)p Fp(.)18 b(If)c Fj(from)e -Fp(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)13 -b Fj(to)i Fp(is)e(less)h(than)f Fj(from)p Fp(,)195 2337 -y(then)i(read)g(un)o(til)i(the)e(end)g(of)g(the)g(\014le.)21 -b(If)15 b Fj(\014lename)k Fp(is)d Fo(NULL)p Fp(,)e(then)h(read)g(from)f -(`)p Fo(~/.history)p Fp('.)195 2392 y(Returns)i(0)f(if)g(successful,)h -(or)f Fo(errno)g Fp(if)g(not.)1762 2506 y(F)l(unction)-1861 -b Fh(int)20 b Fg(write)p 304 2506 V 22 w(history)i Ff(\()p -Fo(const)15 b(char)f(*filename)p Ff(\))195 2560 y Fp(W)l(rite)k(the)f -(curren)o(t)g(history)h(to)f Fj(\014lename)p Fp(,)h(o)o(v)o(erwriting)f -Fj(\014lename)k Fp(if)d(necessary)l(.)27 b(If)18 b Fj(\014lename)195 -2615 y Fp(is)e Fo(NULL)p Fp(,)e(then)h(write)g(the)h(history)f(list)h -(to)e(`)p Fo(~/.history)p Fp('.)k(V)l(alues)e(returned)f(are)g(as)g(in) -h Fo(read_)195 2670 y(history\(\))p Fp(.)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(9)1762 149 y(F)l(unction)-1861 b Fh(int)20 -b Fg(app)r(end)p 360 149 18 3 v 19 w(history)j Ff(\()p -Fo(int)14 b(nelements,)g(const)h(char)f(*filename)p Ff(\))195 -204 y Fp(App)q(end)19 b(the)e(last)g Fj(nelemen)o(ts)k -Fp(of)16 b(the)i(history)f(list)h(to)f Fj(\014lename)p -Fp(.)27 b(If)18 b Fj(\014lename)j Fp(is)d Fo(NULL)p Fp(,)f(then)195 -259 y(app)q(end)f(to)f(`)p Fo(~/.history)p Fp('.)1762 -411 y(F)l(unction)-1861 b Fh(int)20 b Fg(history)p 351 -411 V 20 w(truncate)p 582 411 V 21 w(\014le)k Ff(\()p -Fo(const)14 b(char)h(*filename,)e(int)i(nlines)p Ff(\))195 -466 y Fp(T)l(runcate)k(the)h(history)f(\014le)h Fj(\014lename)p -Fp(,)h(lea)o(ving)f(only)g(the)f(last)g Fj(nlines)k Fp(lines.)34 -b(If)20 b Fj(\014lename)i Fp(is)195 520 y Fo(NULL)p Fp(,)14 -b(then)i(`)p Fo(~/.history)p Fp(')d(is)j(truncated.)75 -656 y Fi(2.3.7)30 b(History)20 b(Expansion)137 764 y -Fp(These)c(functions)g(implemen)o(t)g Fo(csh)p Fp(-lik)o(e)g(history)g -(expansion.)1762 916 y(F)l(unction)-1861 b Fh(int)20 -b Fg(history)p 351 916 V 20 w(expand)j Ff(\()p Fo(char)14 -b(*string,)g(char)h(**output)p Ff(\))195 970 y Fp(Expand)j -Fj(string)p Fp(,)f(placing)h(the)g(result)f(in)o(to)g -Fj(output)p Fp(,)h(a)e(p)q(oin)o(ter)i(to)f(a)g(string)g(\(see)g -(Section)h(1.1)195 1025 y([History)d(In)o(teraction],)f(page)h(1\).)20 -b(Returns:)195 1122 y Fo(0)216 b Fp(If)19 b(no)g(expansions)g(to)q(ok)f -(place)i(\(or,)e(if)i(the)e(only)i(c)o(hange)e(in)i(the)f(text)f(w)o -(as)g(the)435 1177 y(remo)o(v)m(al)d(of)g(escap)q(e)h(c)o(haracters)e -(preceding)i(the)f(history)g(expansion)h(c)o(haracter\);)195 -1268 y Fo(1)216 b Fp(if)16 b(expansions)g(did)g(tak)o(e)e(place;)195 -1360 y Fo(-1)192 b Fp(if)16 b(there)f(w)o(as)f(an)h(error)g(in)h -(expansion;)195 1451 y Fo(2)216 b Fp(if)14 b(the)g(returned)g(line)i -(should)f(b)q(e)f(displa)o(y)o(ed,)h(but)f(not)f(executed,)i(as)e(with) -h(the)g Fo(:p)435 1506 y Fp(mo)q(di\014er)i(\(see)f(Section)h(1.1.3)e -([Mo)q(di\014ers],)h(page)g(2\).)195 1603 y(If)g(an)h(error)e(o)q -(curred)i(in)g(expansion,)f(then)h Fj(output)g Fp(con)o(tains)f(a)g -(descriptiv)o(e)i(error)d(message.)1762 1755 y(F)l(unction)-1861 -b Fh(char)20 b(*)f Fg(history)p 422 1755 V 21 w(arg)p -524 1755 V 19 w(extract)24 b Ff(\()p Fo(int)14 b(first,)h(int)g(last,)f -(const)g(char)283 1809 y(*string)p Ff(\))195 1864 y Fp(Extract)19 -b(a)h(string)g(segmen)o(t)g(consisting)h(of)f(the)g Fj(\014rst)h -Fp(through)f Fj(last)h Fp(argumen)o(ts)e(presen)o(t)h(in)195 -1919 y Fj(string)p Fp(.)g(Argumen)o(ts)15 b(are)f(split)j(as)d(in)j -(Bash.)1762 2071 y(F)l(unction)-1861 b Fh(char)20 b(*)f -Fg(get)p 324 2071 V 21 w(history)p 520 2071 V 20 w(ev)n(en)n(t)25 -b Ff(\()p Fo(const)14 b(char)h(*string,)f(int)g(*cindex,)g(int)283 -2126 y(qchar)p Ff(\))195 2181 y Fp(Returns)23 b(the)g(text)f(of)h(the)f -(history)h(ev)o(en)o(t)g(b)q(eginning)h(at)f Fj(string)j -Fo(+)d Fj(*cindex)p Fp(.)43 b Fj(*cindex)27 b Fp(is)195 -2235 y(mo)q(di\014ed)16 b(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o -(en)o(t)f(sp)q(eci\014er.)22 b(A)o(t)14 b(function)h(en)o(try)l(,)g -Fj(cindex)k Fp(p)q(oin)o(ts)c(to)f(the)195 2290 y(index)19 -b(in)o(to)f Fj(string)k Fp(where)c(the)g(history)g(ev)o(en)o(t)g(sp)q -(eci\014cation)h(b)q(egins.)30 b Fj(qc)o(har)21 b Fp(is)d(a)g(c)o -(haracter)195 2345 y(that)13 b(is)h(allo)o(w)o(ed)g(to)e(end)i(the)g -(ev)o(en)o(t)f(sp)q(eci\014cation)j(in)e(addition)g(to)f(the)h -(\\normal")f(terminating)195 2400 y(c)o(haracters.)1762 -2552 y(F)l(unction)-1861 b Fh(char)20 b(**)f Fg(history)p -448 2552 V 21 w(tok)n(enize)25 b Ff(\()p Fo(const)14 -b(char)h(*string)p Ff(\))195 2606 y Fp(Return)c(an)f(arra)o(y)g(of)g -(tok)o(ens)g(parsed)g(out)g(of)g Fj(string)p Fp(,)h(m)o(uc)o(h)g(as)f -(the)g(shell)i(migh)o(t.)19 b(The)10 b(tok)o(ens)g(are)195 -2661 y(split)16 b(on)f(the)h(c)o(haracters)e Fo(")h(\\t\\n\(\)<>;&|$")p -Fp(,)e(and)i(shell)i(quoting)f(con)o(v)o(en)o(tions)f(are)g(ob)q(ey)o -(ed.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fp(10)1324 b(GNU)15 b(History)g(Library)75 -149 y Fn(2.4)33 b(History)22 b(V)-6 b(ariables)137 247 -y Fp(This)23 b(section)g(describ)q(es)h(the)f(externally-visible)j(v)m -(ariables)d(exp)q(orted)g(b)o(y)f(the)h(GNU)f(History)75 -302 y(Library)l(.)1773 423 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(history)p 351 423 18 3 v 20 w(base)195 477 y Fp(The)15 -b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f -(history)g(list.)1773 598 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(history)p 351 598 V 20 w(length)195 653 y Fp(The)15 -b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the) -f(history)g(list.)1773 774 y(V)l(ariable)-1861 b Fh(int)20 -b Fg(max)p 283 774 V 19 w(input)p 435 774 V 21 w(history)195 -829 y Fp(The)j(maxim)o(um)g(n)o(um)o(b)q(er)g(of)g(history)g(en)o -(tries.)43 b(This)24 b(m)o(ust)e(b)q(e)i(c)o(hanged)f(using)h -Fo(stifle_)195 884 y(history\(\))p Fp(.)1773 1004 y(V)l(ariable)-1861 -b Fh(char)20 b Fg(history)p 377 1004 V 20 w(expansion)p -644 1004 V 21 w(c)n(har)195 1059 y Fp(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 -Fo(!)p Fp('.)1773 1180 y(V)l(ariable)-1861 b Fh(char)20 -b Fg(history)p 377 1180 V 20 w(subst)p 529 1180 V 20 -w(c)n(har)195 1235 y Fp(The)h(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g -(w)o(ord)g(substitution)h(if)g(found)f(at)g(the)h(start)e(of)h(a)g -(line.)37 b(The)195 1290 y(default)16 b(is)f(`)p Fo(^)p -Fp('.)1773 1411 y(V)l(ariable)-1861 b Fh(char)20 b Fg(history)p -377 1411 V 20 w(commen)n(t)p 627 1411 V 19 w(c)n(har)195 -1465 y Fp(During)f(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)h -(seen)h(as)e(the)h(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)g(then) -195 1520 y(it)j(and)g(all)g(subsequen)o(t)h(c)o(haracters)d(up)j(to)e -(a)g(newline)i(are)f(ignored,)h(suppressing)g(history)195 -1575 y(expansion)16 b(for)f(the)g(remainder)h(of)f(the)g(line.)21 -b(This)16 b(is)g(disabled)h(b)o(y)e(default.)1773 1696 -y(V)l(ariable)-1861 b Fh(char)20 b(*)f Fg(history)p 422 -1696 V 21 w(no)p 504 1696 V 20 w(expand)p 704 1696 V -20 w(c)n(hars)195 1751 y Fp(The)c(list)h(of)e(c)o(haracters)g(whic)o(h) -i(inhibit)h(history)e(expansion)h(if)f(found)h(immediately)g(follo)o -(wing)195 1805 y Fj(history)p 336 1805 14 2 v 16 w(expansion)p -547 1805 V 18 w(c)o(har)p Fp(.)j(The)d(default)f(is)h(space,)f(T)l(AB,) -g(and)h(`)p Fo(=)p Fp('.)1773 1926 y(V)l(ariable)-1861 -b Fh(char)20 b(*)f Fg(history)p 422 1926 18 3 v 21 w(searc)n(h)p -599 1926 V 20 w(delimiter)p 843 1926 V 23 w(c)n(hars)195 -1981 y Fp(The)13 b(list)h(of)f(additional)h(c)o(haracters)e(whic)o(h)i -(can)g(delimit)g(a)f(history)g(searc)o(h)g(string,)g(in)h(addition)195 -2036 y(to)h(space,)g(T)l(AB,)g(`)p Fo(:)p Fp(')f(and)h(`)p -Fo(?)p Fp(')g(in)h(the)f(case)g(of)g(a)g(substring)g(searc)o(h.)20 -b(The)c(default)f(is)h(empt)o(y)l(.)1773 2157 y(V)l(ariable)-1861 -b Fh(int)20 b Fg(history)p 351 2157 V 20 w(quotes)p 533 -2157 V 21 w(inhibit)p 717 2157 V 23 w(expansion)195 2212 -y Fp(If)15 b(non-zero,)f(single-quoted)j(w)o(ords)c(are)i(not)f -(scanned)h(for)f(the)h(history)g(expansion)g(c)o(haracter.)195 -2266 y(The)g(default)h(v)m(alue)h(is)e(0.)1773 2387 y(V)l(ariable)-1861 -b Fh(rl_linebuf_func_t)22 b(*)d Fg(history)p 762 2387 -V 21 w(inhibit)p 946 2387 V 23 w(expansion)p 1216 2387 -V 20 w(function)195 2442 y Fp(This)e(should)h(b)q(e)f(set)g(to)f(the)g -(address)h(of)f(a)h(function)g(that)f(tak)o(es)g(t)o(w)o(o)f(argumen)o -(ts:)22 b(a)17 b Fo(char)d(*)195 2497 y Fp(\()p Fj(string)t -Fp(\))e(and)i(an)f Fo(int)g Fp(index)i(in)o(to)e(that)f(string)i(\()p -Fj(i)r Fp(\).)19 b(It)14 b(should)g(return)f(a)g(non-zero)h(v)m(alue)g -(if)g(the)195 2552 y(history)h(expansion)g(starting)f(at)g -Fj(string[i])i Fp(should)g(not)e(b)q(e)h(p)q(erformed;)g(zero)f(if)h -(the)g(expansion)195 2606 y(should)i(b)q(e)g(done.)22 -b(It)16 b(is)h(in)o(tended)g(for)e(use)i(b)o(y)f(applications)h(lik)o -(e)g(Bash)f(that)g(use)g(the)g(history)195 2661 y(expansion)g(c)o -(haracter)f(for)f(additional)j(purp)q(oses.)j(By)c(default,)f(this)h(v) -m(ariable)g(is)g(set)f(to)f Fo(NULL)p Fp(.)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fp(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)867 b(11)75 149 y Fn(2.5)33 b(History)22 b(Programming)h -(Example)137 258 y Fp(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 -335 y Fo(#include)23 b()195 387 y(#include)g -()195 491 y(main)g(\(argc,)g(argv\))314 -543 y(int)h(argc;)314 594 y(char)g(**argv;)195 646 y({)243 -698 y(char)f(line[1024],)f(*t;)243 750 y(int)h(len,)g(done)h(=)g(0;)243 -854 y(line[0])f(=)g(0;)243 958 y(using_history)f(\(\);)243 -1010 y(while)h(\(!done\))290 1061 y({)338 1113 y(printf)g(\("history$)g -("\);)338 1165 y(fflush)g(\(stdout\);)338 1217 y(t)h(=)g(fgets)f -(\(line,)g(sizeof)g(\(line\))g(-)h(1,)f(stdin\);)338 -1269 y(if)h(\(t)f(&&)h(*t\))386 1321 y({)434 1373 y(len)f(=)h(strlen)f -(\(t\);)434 1425 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 -1477 y(t[len)h(-)f(1])h(=)g('\\0';)386 1528 y(})338 1632 -y(if)g(\(!t\))386 1684 y(strcpy)f(\(line,)g("quit"\);)338 -1788 y(if)h(\(line[0]\))386 1840 y({)434 1892 y(char)f(*expansion;)434 -1944 y(int)g(result;)434 2047 y(result)g(=)g(history_expand)f(\(line,)h -(&expansion\);)434 2099 y(if)g(\(result\))481 2151 y(fprintf)g -(\(stderr,)g("\045s\\n",)g(expansion\);)434 2255 y(if)g(\(result)g(<)h -(0)g(||)f(result)g(==)h(2\))481 2307 y({)529 2359 y(free)f -(\(expansion\);)529 2411 y(continue;)481 2462 y(})434 -2566 y(add_history)f(\(expansion\);)434 2618 y(strncpy)h(\(line,)g -(expansion,)f(sizeof)h(\(line\))g(-)h(1\);)434 2670 y(free)f -(\(expansion\);)p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fp(12)1324 b(GNU)15 b(History)g(Library)386 -149 y Fo(})338 253 y(if)24 b(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\)) -386 305 y(done)g(=)h(1;)338 357 y(else)f(if)h(\(strcmp)f(\(line,)g -("save"\))g(==)h(0\))386 409 y(write_history)e(\("history_file"\);)338 -461 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386 -513 y(read_history)e(\("history_file"\);)338 565 y(else)h(if)h -(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 616 y({)434 -668 y(register)e(HIST_ENTRY)h(**the_list;)434 720 y(register)f(int)i -(i;)434 824 y(the_list)e(=)i(history_list)e(\(\);)434 -876 y(if)h(\(the_list\))481 928 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e -(i++\))529 980 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g -(history_base,)e(the_list[i]->line\);)386 1032 y(})338 -1083 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386 -1135 y({)434 1187 y(int)f(which;)434 1239 y(if)g(\(\(sscanf)g(\(line)g -(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))481 1291 y({)529 -1343 y(HIST_ENTRY)f(*entry)g(=)g(remove_history)f(\(which\);)529 -1395 y(if)i(\(!entry\))577 1447 y(fprintf)f(\(stderr,)f("No)i(such)f -(entry)g(\045d\\n",)g(which\);)529 1499 y(else)577 1550 -y({)625 1602 y(free)g(\(entry->line\);)625 1654 y(free)g(\(entry\);)577 -1706 y(})481 1758 y(})434 1810 y(else)481 1862 y({)529 -1914 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)481 1966 y(})386 2017 y(})290 2069 y(})195 -2121 y(})p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fp(App)q(endix)17 b(A:)e(Concept)g(Index)1196 -b(13)75 149 y Fl(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75 -321 y Fn(A)75 383 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)8 -b(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)16 -b Fe(8)75 507 y Fn(E)75 568 y Fe(ev)o(en)o(t)d(designators)g -Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b -Fe(1)1012 321 y Fn(H)1012 431 y Fe(history)15 b(ev)o(en)o(ts)d -Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Fe(1)1012 500 y(history)15 b(expansion)8 b Fd(.)g(.)e(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)21 b Fe(1)1012 568 y(History)14 b(Searc)o(hing)6 -b Fd(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b -Fe(8)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fp(14)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: 15 17 -15 16 bop 75 -58 a Fp(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)919 b(15)75 149 y Fl(App)r(endix)25 -b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 321 y Fn(A)75 382 y Fc(add_histor)o(y)8 b -Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(6)75 428 y Fc(append_his)o(to)o(ry)8 b Fd(.)s(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)21 b Fe(9)75 557 y Fn(C)75 618 -y Fc(clear_hist)o(or)o(y)6 b Fd(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)22 b Fe(6)75 664 y Fc(current_hi)o(st)o(ory)7 -b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b -Fe(7)75 793 y Fn(G)75 854 y Fc(get_histor)o(y_)o(eve)o(nt)5 -b Fd(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 b Fe(9)75 -983 y Fn(H)75 1044 y Fc(history_ar)o(g_)o(ext)o(ra)o(ct)5 -b Fd(.)s(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1090 y Fc(history_ba)o(se) -6 b Fd(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Fe(10)75 1136 y Fc(history_co)o(mm)o(ent)o(_c)o(har)s -Fd(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)16 b Fe(10)75 1181 y Fc(history_ex)o(pa)o(nd)8 -b Fd(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Fe(9)75 1227 y Fc(history_ex)o(pa)o(nsi)o(on)o(_ch)o(ar)8 -b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)24 b Fe(10)75 1273 y Fc(history_ge)o(t)8 -b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(7)75 1318 y Fc(history_ge)o(t_)o(his)o(to)o(ry_)o(sta)o(te)6 -b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)22 b Fe(6)75 1364 y Fc(history_in)o(hi)o(bit)o(_e)o(xpa)o(nsi)o(on) -o(_fu)o(nc)o(tio)o(n)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)h(.)24 -b Fe(10)75 1410 y Fc(history_is)o(_s)o(tif)o(le)o(d)6 -b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(7)75 1455 -y Fc(history_le)o(ng)o(th)8 b Fd(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)21 b Fe(10)75 1501 y Fc(history_li)o(st)6 b Fd(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75 -1547 y Fc(history_no)o(_e)o(xpa)o(nd)o(_ch)o(ars)7 b -Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)23 b Fe(10)75 1592 y Fc(history_qu)o(ot)o(es_)o(in)o(hib)o(it_)o -(ex)o(pan)o(si)o(on)t Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 -b Fe(10)75 1638 y Fc(history_se)o(ar)o(ch)8 b Fd(.)s(.)f(.)f(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Fe(8)75 1684 y Fc(history_se)o(ar)o -(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)18 b Fe(10)75 1729 y Fc(history_se)o(ar)o(ch_)o(po) -o(s)6 b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Fe(8)75 -1775 y Fc(history_se)o(ar)o(ch_)o(pr)o(efi)o(x)s Fd(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)16 b Fe(8)75 1821 y Fc(history_se)o(t_)o(his)o(to)o(ry_) -o(sta)o(te)6 b Fd(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)22 b Fe(6)75 1867 y Fc(history_se)o(t_)o(pos)7 -b Fd(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 b -Fe(7)75 1912 y Fc(history_su)o(bs)o(t_c)o(ha)o(r)5 b -Fd(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fe(10)75 1958 y Fc(history_to)o(ke) -o(niz)o(e)7 b Fd(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 -b Fe(9)1012 321 y Fc(history_tot)o(al)o(_by)o(te)o(s)5 -b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 b Fe(7)1012 367 y -Fc(history_tru)o(nc)o(ate)o(_f)o(ile)s Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Fe(9)1012 500 y Fn(M)1012 562 y Fc(max_input_h)o(is)o(tor)o(y)6 -b Fd(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(10)1012 694 -y Fn(N)1012 756 y Fc(next_histor)o(y)7 b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Fe(7)1012 888 y Fn(P)1012 -950 y Fc(previous_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)20 b Fe(7)1012 1082 y Fn(R)1012 1144 y Fc(read_histor)o(y)7 -b Fd(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Fe(8)1012 1190 y Fc(read_histor)o(y_)o(ran)o(ge)5 b -Fd(.)s(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Fe(8)1012 1237 -y Fc(remove_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)22 b Fe(6)1012 1283 y Fc(replace_his)o(to)o(ry_)o(en)o(try)s -Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1415 y Fn(S)1012 -1477 y Fc(stifle_hist)o(or)o(y)9 b Fd(.)s(.)d(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)22 b Fe(7)1012 1609 y Fn(U)1012 1671 -y Fc(unstifle_hi)o(st)o(ory)6 b Fd(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)20 b Fe(7)1012 1717 y Fc(using_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(6)1012 1850 -y Fn(W)1012 1912 y Fc(where_histo)o(ry)6 b Fd(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 b Fe(7)1012 1958 y Fc(write_histo)o(ry)6 -b Fd(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Fe(8)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fp(16)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: -1 19 --1 18 bop 1862 -58 a Fp(i)75 149 y Fl(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fn(1)67 b(Using)22 b(History)h(In)n -(teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)h(.)31 b Fn(1)224 389 y Fp(1.1)45 b(History)15 -b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fp(1)374 444 y(1.1.1)44 -b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)26 b Fp(1)374 499 y(1.1.2)44 b(W)l(ord)15 -b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)19 b Fp(2)374 553 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8 -b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)19 b Fp(2)75 675 y Fn(2)67 b(Programming)23 -b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)38 b Fn(5)224 743 y Fp(2.1)45 b(In)o(tro)q(duction)16 -b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)24 b Fp(5)224 798 y(2.2)45 b(History)15 -b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fp(5)224 853 -y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 -b Fp(6)374 907 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e -(Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b -Fp(6)374 962 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d -Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)29 b Fp(6)374 1017 y(2.3.3)44 -b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c -Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fp(7)374 1072 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g -(List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)25 b Fp(7)374 1127 y(2.3.5)44 b(Searc)o(hing)16 -b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fp(8)374 1181 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6 -b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)20 b Fp(8)374 1236 y(2.3.7)44 -b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)24 b Fp(9)224 1291 y(2.4)45 b(History)15 b(V)l(ariables)6 -b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)21 b Fp(10)224 1346 y(2.5)45 b(History)15 -b(Programming)f(Example)7 b Fa(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fp(11)75 1467 y Fn(App)r(endix)i(A)67 b(Concept)22 -b(Index)17 b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)38 b Fn(13)75 1602 y(App)r(endix)24 b(B)67 -b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16 -b Fb(.)10 b(.)g(.)g(.)38 b Fn(15)p eop -%%Page: -2 20 --2 19 bop 75 -58 a Fp(ii)1346 b(GNU)15 b(History)g(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline/doc/readline.dvi b/readline/doc/readline.dvi deleted file mode 100644 index b1c81d4461836b2cc004d16acd46043199e15644..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ - - - -GNU Readline Library - - -

    GNU Readline Library

    -

    Edition 4.2-beta, for Readline Library Version 4.2-beta.

    -

    Feb 2001

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

    -


    -

    Table of Contents

    - -


    - -

    -This document describes the GNU Readline Library, a utility which aids -in the consistency of user interface across discrete programs that need -to provide a command line interface. - -

    -

    -Published by the Free Software Foundation
    -59 Temple Place, Suite 330,
    -Boston, MA 02111 USA - -

    -

    -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

    -

    -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -

    -

    -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -

    -

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

    - - - -

    Command Line Editing

    - -

    -This chapter describes the basic features of the GNU -command line editing interface. - -

    - - - - - -

    Introduction to Line Editing

    - -

    -The following paragraphs describe the notation used to represent -keystrokes. - -

    -

    -The text C-k is read as `Control-K' and describes the character -produced when the k key is pressed while the Control key -is depressed. - -

    -

    -The text M-k is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the k -key is pressed. -The Meta key is labeled ALT on many keyboards. -On keyboards with two keys labeled ALT (usually to either side of -the space bar), the ALT on the left side is generally set to -work as a Meta key. -The ALT key on the right may also be configured to work as a -Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - -

    -

    -If you do not have a Meta or ALT key, or another key working as -a Meta key, the identical keystroke can be generated by typing ESC -first, and then typing k. -Either process is known as metafying the k key. - -

    -

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

    -

    -In addition, several keys have their own names. Specifically, -DEL, ESC, LFD, SPC, RET, and TAB all -stand for themselves when seen in this text, or in an init file -(see section Readline Init File). -If your keyboard lacks a LFD key, typing C-j will -produce the desired character. -The RET key may be labeled Return or Enter on -some keyboards. - -

    - - -

    Readline Interaction

    -

    - - -

    -

    -Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press RET. You do not have to be at the -end of the line to press RET; the entire line is accepted -regardless of the location of the cursor within the line. - -

    - - - - - -

    Readline Bare Essentials

    -

    - - - - -

    -

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

    -

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

    -

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

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

    -(Depending on your configuration, the Backspace key be set to -delete the character to the left of the cursor and the DEL key set -to delete the character underneath the cursor, like C-d, rather -than the character to the left of the cursor.) - -

    - - -

    Readline Movement Commands

    - -

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

    -
    - -
    C-a -
    -Move to the start of the line. -
    C-e -
    -Move to the end of the line. -
    M-f -
    -Move forward a word, where a word is composed of letters and digits. -
    M-b -
    -Move backward a word. -
    C-l -
    -Clear the screen, reprinting the current line at the top. -
    - -

    -Notice how C-f moves forward a character, while M-f moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - -

    - - -

    Readline Killing Commands

    - -

    - - - -

    -

    -Killing text means to delete the text from the line, but to save -it away for later use, usually by yanking (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) - -

    -

    -If the description for a command says that it `kills' text, then you can -be sure that you can get the text back in a different (or the same) -place later. - -

    -

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

    -

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

    -
    - -
    C-k -
    -Kill the text from the current cursor position to the end of the line. - -
    M-d -
    -Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by M-f. - -
    M-DEL -
    -Kill from the cursor the start of the previous word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by M-b. - -
    C-w -
    -Kill from the cursor to the previous whitespace. This is different than -M-DEL because the word boundaries differ. - -
    - -

    -Here is how to yank the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -

    -
    - -
    C-y -
    -Yank the most recently killed text back into the buffer at the cursor. - -
    M-y -
    -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is C-y or M-y. -
    - - - -

    Readline Arguments

    - -

    -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - -

    -

    -The general way to pass numeric arguments to a command is to type meta -digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once -you have typed one meta digit to get the argument started, you can type -the remainder of the digits, and then the command. For example, to give -the C-d command an argument of 10, you could type `M-1 0 C-d', -which will delete the next ten characters on the input line. - -

    - - -

    Searching for Commands in the History

    - -

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

    -

    -Incremental searches begin before the user has finished typing the -search string. -As each character of the search string is typed, Readline displays -the next entry from the history matching the string typed so far. -An incremental search requires only as many characters as needed to -find the desired history entry. -To search backward in the history for a particular string, type -C-r. Typing C-s searches forward through the history. -The characters present in the value of the isearch-terminators variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the ESC and -C-J characters will terminate an incremental search. -C-g will abort an incremental search and restore the original line. -When the search is terminated, the history entry containing the -search string becomes the current line. - -

    -

    -To find other matching entries in the history list, type C-r or -C-s as appropriate. -This will search backward or forward in the history for the next -entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate -the search and execute that command. -For instance, a RET will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. - -

    -

    -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, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable @env{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

    - -

    -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a `#' are comments. -Lines beginning with a `$' indicate conditional -constructs (see section Conditional Init Constructs). Other lines -denote variable settings and key bindings. - -

    -
    - -
    Variable Settings -
    -You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the set command within the init file. Here is how to -change from the default Emacs-like key binding to use -vi line editing commands: - - -
    -set editing-mode vi
    -
    - -A great deal of run-time behavior is changeable with the following -variables. - -
    - -
    bell-style -
    - -Controls what happens when Readline wants to ring the terminal bell. -If set to `none', Readline never rings the bell. If set to -`visible', Readline uses a visible bell if one is available. -If set to `audible' (the default), Readline attempts to ring -the terminal's bell. - -
    comment-begin -
    - -The string to insert at the beginning of the line when the -insert-comment command is executed. The default value -is "#". - -
    completion-ignore-case -
    -If set to `on', Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is `off'. - -
    completion-query-items -
    - -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -The default limit is 100. - -
    convert-meta -
    - -If set to `on', Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an ESC character, converting them to a -meta-prefixed key sequence. The default value is `on'. - -
    disable-completion -
    - -If set to `On', Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to self-insert. The default is `off'. - -
    editing-mode -
    - -The editing-mode variable controls which default set of -key bindings is used. By default, Readline starts up in Emacs editing -mode, where the keystrokes are most similar to Emacs. This variable can be -set to either `emacs' or `vi'. - -
    enable-keypad -
    - -When set to `on', Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is `off'. - -
    expand-tilde -
    - -If set to `on', tilde expansion is performed when Readline -attempts word completion. The default is `off'. - -
    horizontal-scroll-mode -
    - -This variable can be set to either `on' or `off'. Setting it -to `on' means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to `off'. - -
    input-meta -
    - - -If set to `on', Readline will enable eight-bit input (it -will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The -default value is `off'. The name meta-flag is a -synonym for this variable. - -
    isearch-terminators -
    - -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (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 -emacs, -emacs-standard, -emacs-meta, -emacs-ctlx, -vi, -vi-move, -vi-command, and -vi-insert. -vi is equivalent to vi-command; emacs is -equivalent to emacs-standard. The default value is emacs. -The value of the editing-mode variable also affects the -default keymap. - -
    mark-directories -
    -If set to `on', completed directory names have a slash -appended. The default is `on'. - -
    mark-modified-lines -
    - -This variable, when set to `on', causes Readline to display an -asterisk (`*') at the start of history lines which have been modified. -This variable is `off' by default. - -
    output-meta -
    - -If set to `on', Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is `off'. - -
    print-completions-horizontally -
    -If set to `on', Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is `off'. - -
    show-all-if-ambiguous -
    - -This alters the default behavior of the completion functions. If -set to `on', -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is `off'. - -
    visible-stats -
    - -If set to `on', a character denoting a file's type -is appended to the filename when listing possible -completions. The default is `off'. - -
    - -
    Key Bindings -
    -The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. - -Once you know the name of the command, simply place on a line -in the init file the name of the key -you wish to bind the command to, a colon, and then the name of the -command. The name of the key -can be expressed in different ways, depending on what you find most -comfortable. - -
    - -
    keyname: function-name or macro -
    -keyname is the name of a key spelled out in English. For example: - -
    -Control-u: universal-argument
    -Meta-Rubout: backward-kill-word
    -Control-o: "> output"
    -
    - -In the above example, C-u is bound to the function -universal-argument, -M-DEL is bound to the function backward-kill-word, and -C-o is bound to run the macro -expressed on the right hand side (that is, to insert the text -`> output' into the line). - -A number of symbolic character names are recognized while -processing this key binding syntax: -DEL, -ESC, -ESCAPE, -LFD, -NEWLINE, -RET, -RETURN, -RUBOUT, -SPACE, -SPC, -and -TAB. - -
    "keyseq": function-name or macro -
    -keyseq differs from keyname above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - - -
    -"\C-u": universal-argument
    -"\C-x\C-r": re-read-init-file
    -"\e[11~": "Function Key 1"
    -
    - -In the above example, C-u is again bound to the function -universal-argument (just as it was in the first example), -`C-x C-r' is bound to the function re-read-init-file, -and `ESC [ 1 1 ~' is bound to insert -the text `Function Key 1'. - -
    - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -
    - -
    \C- -
    -control prefix -
    \M- -
    -meta prefix -
    \e -
    -an escape character -
    \\ -
    -backslash -
    \" -
    -", a double quotation mark -
    \' -
    -', a single quote or apostrophe -
    - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -
    - -
    \a -
    -alert (bell) -
    \b -
    -backspace -
    \d -
    -delete -
    \f -
    -form feed -
    \n -
    -newline -
    \r -
    -carriage return -
    \t -
    -horizontal tab -
    \v -
    -vertical tab -
    \nnn -
    -the character whose ASCII code is the octal value nnn -(one to three digits) -
    \xnnn -
    -the character whose ASCII code is the hexadecimal value nnn -(one to three digits) -
    - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including `"' and `''. -For example, the following binding will make `C-x \' -insert a single `\' into the line: - -
    -"\C-x\\": "\\"
    -
    - -
    - - - -

    Conditional Init Constructs

    - -

    -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are four parser directives used. - -

    -
    - -
    $if -
    -The $if construct allows bindings to be made based on the -editing mode, the terminal being used, or the application using -Readline. The text of the test extends to the end of the line; -no characters are required to isolate it. - -
    - -
    mode -
    -The mode= form of the $if directive is used to test -whether Readline is in emacs or vi mode. -This may be used in conjunction -with the `set keymap' command, for instance, to set bindings in -the emacs-standard and emacs-ctlx keymaps only if -Readline is starting out in emacs mode. - -
    term -
    -The term= form may be used to include terminal-specific -key bindings, perhaps to bind the key sequences output by the -terminal's function keys. The word on the right side of the -`=' is tested against both the full name of the terminal and -the portion of the terminal name before the first `-'. This -allows sun to match both sun and sun-cmd, -for instance. - -
    application -
    -The application construct is used to include -application-specific settings. Each program using the Readline -library sets the application name, and you can test for it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -
    -$if Bash
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -$endif
    -
    - -
    - -
    $endif -
    -This command, as seen in the previous example, terminates an -$if command. - -
    $else -
    -Commands in this branch of the $if directive are executed if -the test fails. - -
    $include -
    -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -
    -$include /etc/inputrc
    -
    - -
    - - - -

    Sample Init File

    - -

    -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -

    - -
    -# This file controls the behaviour of line input editing for
    -# programs that use the Gnu Readline library.  Existing programs
    -# include FTP, Bash, and Gdb.
    -#
    -# You can re-read the inputrc file with C-x C-r.
    -# Lines beginning with '#' are comments.
    -#
    -# First, include any systemwide bindings and variable assignments from
    -# /etc/Inputrc
    -$include /etc/Inputrc
    -
    -#
    -# Set various bindings for emacs mode.
    -
    -set editing-mode emacs 
    -
    -$if mode=emacs
    -
    -Meta-Control-h:	backward-kill-word	Text after the function name is ignored
    -
    -#
    -# Arrow keys in keypad mode
    -#
    -#"\M-OD":        backward-char
    -#"\M-OC":        forward-char
    -#"\M-OA":        previous-history
    -#"\M-OB":        next-history
    -#
    -# Arrow keys in ANSI mode
    -#
    -"\M-[D":        backward-char
    -"\M-[C":        forward-char
    -"\M-[A":        previous-history
    -"\M-[B":        next-history
    -#
    -# Arrow keys in 8 bit keypad mode
    -#
    -#"\M-\C-OD":       backward-char
    -#"\M-\C-OC":       forward-char
    -#"\M-\C-OA":       previous-history
    -#"\M-\C-OB":       next-history
    -#
    -# Arrow keys in 8 bit ANSI mode
    -#
    -#"\M-\C-[D":       backward-char
    -#"\M-\C-[C":       forward-char
    -#"\M-\C-[A":       previous-history
    -#"\M-\C-[B":       next-history
    -
    -C-q: quoted-insert
    -
    -$endif
    -
    -# An old-style binding.  This happens to be the default.
    -TAB: complete
    -
    -# Macros that are convenient for shell interaction
    -$if Bash
    -# edit the path
    -"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
    -# prepare to type a quoted word -- insert open and close double quotes
    -# and move to just after the open quote
    -"\C-x\"": "\"\"\C-b"
    -# insert a backslash (testing backslash escapes in sequences and macros)
    -"\C-x\\": "\\"
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -# Add a binding to refresh the line, which is unbound
    -"\C-xr": redraw-current-line
    -# Edit variable on current line.
    -"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
    -$endif
    -
    -# use a visible bell if one is available
    -set bell-style visible
    -
    -# don't strip characters to 7 bits when reading
    -set input-meta on
    -
    -# allow iso-latin1 characters to be inserted rather than converted to
    -# prefix-meta sequences
    -set convert-meta off
    -
    -# display characters with the eighth bit set directly rather than
    -# as meta-prefixed characters
    -set output-meta on
    -
    -# if there are more than 150 possible completions for a word, ask the
    -# user if he wants to see all of them
    -set completion-query-items 150
    -
    -# For FTP
    -$if Ftp
    -"\C-xg": "get \M-?"
    -"\C-xt": "put \M-?"
    -"\M-.": yank-last-arg
    -$endif
    -
    - - - -

    Bindable Readline Commands

    - - - - -

    -This section describes Readline commands that may be bound to key -sequences. - -

    -

    -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, point refers to the current cursor -position, and mark refers to a cursor position saved by the -set-mark command. -The text between the point and mark is referred to as the region. - -

    - - -

    Commands For Moving

    -
    - -
    beginning-of-line (C-a) -
    - -Move to the start of the current line. - -
    end-of-line (C-e) -
    - -Move to the end of the line. - -
    forward-char (C-f) -
    - -Move forward a character. - -
    backward-char (C-b) -
    - -Move back a character. - -
    forward-word (M-f) -
    - -Move forward to the end of the next word. Words are composed of -letters and digits. - -
    backward-word (M-b) -
    - -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -
    clear-screen (C-l) -
    - -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -
    redraw-current-line () -
    - -Refresh the current line. By default, this is unbound. - -
    - - - -

    Commands For Manipulating The History

    - -
    - -
    accept-line (Newline or Return) -
    - -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -add_history(). -If this line is a modified history line, then restore the history line -to its original state. - -
    previous-history (C-p) -
    - -Move `up' through the history list. - -
    next-history (C-n) -
    - -Move `down' through the history list. - -
    beginning-of-history (M-<) -
    - -Move to the first line in the history. - -
    end-of-history (M->) -
    - -Move to the end of the input history, i.e., the line currently -being entered. - -
    reverse-search-history (C-r) -
    - -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -
    forward-search-history (C-s) -
    - -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -
    non-incremental-reverse-search-history (M-p) -
    - -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -
    non-incremental-forward-search-history (M-n) -
    - -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -
    history-search-forward () -
    - -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. - -
    history-search-backward () -
    - -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -
    yank-nth-arg (M-C-y) -
    - -Insert the first argument to the previous command (usually -the second word on the previous line). With an argument n, -insert the nth word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the nth word from the end of the previous command. - -
    yank-last-arg (M-. or M-_) -
    - -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like yank-nth-arg. -Successive calls to yank-last-arg move back through the history -list, inserting the last argument of each line in turn. - -
    - - - -

    Commands For Changing Text

    - -
    - -
    delete-char (C-d) -
    - -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to delete-char, then -return EOF. - -
    backward-delete-char (Rubout) -
    - -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -
    forward-backward-delete-char () -
    - -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. - -
    quoted-insert (C-q or C-v) -
    - -Add the next character typed to the line verbatim. This is -how to insert key sequences like C-q, for example. - -
    tab-insert (M-TAB) -
    - -Insert a tab character. - -
    self-insert (a, b, A, 1, !, ...) -
    - -Insert yourself. - -
    transpose-chars (C-t) -
    - -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. - -
    transpose-words (M-t) -
    - -Drag the word before point past the word after point, -moving point past that word as well. - -
    upcase-word (M-u) -
    - -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -
    downcase-word (M-l) -
    - -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -
    capitalize-word (M-c) -
    - -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -
    - - - -

    Killing And Yanking

    - -
    - -
    kill-line (C-k) -
    - -Kill the text from point to the end of the line. - -
    backward-kill-line (C-x Rubout) -
    - -Kill backward to the beginning of the line. - -
    unix-line-discard (C-u) -
    - -Kill backward from the cursor to the beginning of the current line. - -
    kill-whole-line () -
    - -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -
    kill-word (M-d) -
    - -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as forward-word. - -
    backward-kill-word (M-DEL) -
    - -Kill the word behind point. -Word boundaries are the same as backward-word. - -
    unix-word-rubout (C-w) -
    - -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -
    delete-horizontal-space () -
    - -Delete all spaces and tabs around point. By default, this is unbound. - -
    kill-region () -
    - -Kill the text in the current region. -By default, this command is unbound. - -
    copy-region-as-kill () -
    - -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -
    copy-backward-word () -
    - -Copy the word before point to the kill buffer. -The word boundaries are the same as backward-word. -By default, this command is unbound. - -
    copy-forward-word () -
    - -Copy the word following point to the kill buffer. -The word boundaries are the same as forward-word. -By default, this command is unbound. - -
    yank (C-y) -
    - -Yank the top of the kill ring into the buffer at the current -cursor position. - -
    yank-pop (M-y) -
    - -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -
    - - - -

    Specifying Numeric Arguments

    -
    - -
    digit-argument (M-0, M-1, ... M--) -
    - -Add this digit to the argument already accumulating, or start a new -argument. M-- starts a negative argument. - -
    universal-argument () -
    - -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing universal-argument -again ends the numeric argument, but is otherwise ignored. -As a special case, if this command is immediately followed by a -character that is neither a digit or minus sign, the argument count -for the next command is multiplied by four. -The argument count is initially one, so executing this function the -first time makes the argument count four, a second time makes the -argument count sixteen, and so on. -By default, this is not bound to a key. -
    - - - -

    Letting Readline Type For You

    - -
    - -
    complete (TAB) -
    - -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -The default is filename completion. - -
    possible-completions (M-?) -
    - -List the possible completions of the text before the cursor. - -
    insert-completions (M-*) -
    - -Insert all completions of the text before point that would have -been generated by possible-completions. - -
    menu-complete () -
    - -Similar to complete, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of menu-complete steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung and the -original text is restored. -An argument of n moves n positions forward in the list -of matches; a negative argument may be used to move backward -through the list. -This command is intended to be bound to TAB, but is unbound -by default. - -
    delete-char-or-list () -
    - -Deletes the character under the cursor if not at the beginning or -end of the line (like delete-char). -If at the end of the line, behaves identically to -possible-completions. -This command is unbound by default. - -
    - - - -

    Keyboard Macros

    -
    - -
    start-kbd-macro (C-x () -
    - -Begin saving the characters typed into the current keyboard macro. - -
    end-kbd-macro (C-x )) -
    - -Stop saving the characters typed into the current keyboard macro -and save the definition. - -
    call-last-kbd-macro (C-x e) -
    - -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -
    - - - -

    Some Miscellaneous Commands

    -
    - -
    re-read-init-file (C-x C-r) -
    - -Read in the contents of the inputrc file, and incorporate -any bindings or variable assignments found there. - -
    abort (C-g) -
    - -Abort the current editing command and -ring the terminal's bell (subject to the setting of -bell-style). - -
    do-uppercase-version (M-a, M-b, M-x, ...) -
    - -If the metafied character x is lowercase, run the command -that is bound to the corresponding uppercase character. - -
    prefix-meta (ESC) -
    - -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing `ESC f' is equivalent to typing -M-f. - -
    undo (C-_ or C-x C-u) -
    - -Incremental undo, separately remembered for each line. - -
    revert-line (M-r) -
    - -Undo all changes made to this line. This is like executing the undo -command enough times to get back to the beginning. - -
    tilde-expand (M-~) -
    - -Perform tilde expansion on the current word. - -
    set-mark (C-@) -
    - -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -
    exchange-point-and-mark (C-x C-x) -
    - -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -
    character-search (C-]) -
    - -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -
    character-search-backward (M-C-]) -
    - -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -
    insert-comment (M-#) -
    - -The value of the comment-begin -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -
    dump-functions () -
    - -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-variables () -
    - -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-macros () -
    - -Print all of the Readline key sequences bound to macros and the -strings they output. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    - - - -

    Readline vi Mode

    - -

    -While the Readline library does not have a full set of vi -editing functions, it does contain enough to allow simple editing -of the line. The Readline vi mode behaves as specified in -the POSIX 1003.2 standard. - -

    -

    -In order to switch interactively between emacs and vi -editing modes, use the command M-C-j (toggle-editing-mode). -The Readline default is emacs mode. - -

    -

    -When you enter a line in vi mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing ESC -switches you into `command' mode, where you can edit the text of the -line with the standard vi movement keys, move to previous -history lines with `k' and subsequent lines with `j', and -so forth. - -

    - - - -

    Programming with GNU Readline

    - -

    -This chapter describes the interface between the GNU Readline Library and -other programs. If you are a programmer, and you wish to include the -features found in GNU Readline -such as completion, line editing, and interactive history manipulation -in your own programs, this section is for you. - -

    - - - - - -

    Basic Behavior

    - -

    -Many programs provide a command line interface, such as mail, -ftp, and sh. For such programs, the default behaviour of -Readline is sufficient. This section describes how to use Readline in -the simplest way possible, perhaps to replace calls in your code to -gets() or fgets(). - -

    -

    - - - -

    - -
    -char *readline (const char *prompt);
    -
    - -

    -The function readline() prints a prompt prompt -and then reads and returns a single line of text from the user. -If prompt is NULL or the empty string, no prompt is displayed. -The line readline returns is allocated with malloc(); -the caller should free() the line when it has finished with it. -The declaration for readline in ANSI C is - -

    -

    -So, one might say - -

    -char *line = readline ("Enter a line: ");
    -
    - -

    -in order to read a line of text from the user. -The line returned has the final newline removed, so only the -text remains. - -

    -

    -If readline encounters an EOF while reading the line, and the -line is empty at that point, then (char *)NULL is returned. -Otherwise, the line is ended just as if a newline had been typed. - -

    -

    -If you want the user to be able to get at the line later, (with -C-p for example), you must call add_history() to save the -line away in a history list of such lines. - -

    - -
    -add_history (line);
    -
    - -

    -For full details on the GNU History Library, see the associated manual. - -

    -

    -It is preferable to avoid saving empty lines on the history list, since -users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard gets() library -function, and has the advantage of no static buffer to overflow: - -

    - -
    -/* A static variable for holding the line. */
    -static char *line_read = (char *)NULL;
    -
    -/* Read a string, and return a pointer to it.  Returns NULL on EOF. */
    -char *
    -rl_gets ()
    -{
    -  /* If the buffer has already been allocated, return the memory
    -     to the free pool. */
    -  if (line_read)
    -    {
    -      free (line_read);
    -      line_read = (char *)NULL;
    -    }
    -
    -  /* Get a line from the user. */
    -  line_read = readline ("");
    -
    -  /* If the line has any text in it, save it on the history. */
    -  if (line_read && *line_read)
    -    add_history (line_read);
    -
    -  return (line_read);
    -}
    -
    - -

    -This function gives the user the default behaviour of TAB -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the TAB key -with rl_bind_key(). - -

    - -
    -int rl_bind_key (int key, rl_command_func_t *function);
    -
    - -

    -rl_bind_key() takes two arguments: key is the character that -you want to bind, and function is the address of the function to -call when key is pressed. Binding TAB to rl_insert() -makes TAB insert itself. -rl_bind_key() returns non-zero if key is not a valid -ASCII character code (between 0 and 255). - -

    -

    -Thus, to disable the default TAB behavior, the following suffices: - -

    -rl_bind_key ('\t', rl_insert);
    -
    - -

    -This code should be executed once at the start of your program; you -might write a function called initialize_readline() which -performs this and other desired initializations, such as installing -custom completers (see section Custom Completers). - -

    - - -

    Custom Functions

    - -

    -Readline provides many functions for manipulating the text of -the line, but it isn't possible to anticipate the needs of all -programs. This section describes the various functions and variables -defined within the Readline library which allow a user program to add -customized functionality to Readline. - -

    -

    -Before declaring any functions that customize Readline's behavior, or -using any functionality Readline provides in other code, an -application writer should include the file <readline/readline.h> -in any file that uses Readline's features. Since some of the definitions -in readline.h use the stdio library, the file -<stdio.h> should be included before readline.h. - -

    - - - - - -

    Readline Typedefs

    - -

    -For readabilty, we declare a number of new object types, all pointers -to functions. - -

    -

    -The reason for declaring these new types is to make it easier to write -code describing pointers to C functions with appropriately prototyped -arguments and return values. - -

    -

    -For instance, say we want to declare a variable func as a pointer -to a function which takes two int arguments and returns an -int (this is the type of all of the Readline bindable functions). -Instead of the classic C declaration - -

    -

    -int (*func)(); - -

    -

    -or the ANSI-C style declaration - -

    -

    -int (*func)(int, int); - -

    -

    -we may write - -

    -

    -rl_command_func_t *func; - -

    -

    -The full list of function pointer types available is - -

    -
    - -
    typedef int rl_command_func_t (int, int); -
    -
    typedef char *rl_compentry_func_t (const char *, int); -
    -
    typedef char **rl_completion_func_t (const char *, int, int); -
    -
    typedef char *rl_quote_func_t (char *, int, char *); -
    -
    typedef char *rl_dequote_func_t (char *, int); -
    -
    typedef int rl_compignore_func_t (char **); -
    -
    typedef void rl_compdisp_func_t (char **, int, int); -
    -
    typedef int rl_hook_func_t (void); -
    -
    typedef int rl_getc_func_t (FILE *); -
    -
    typedef int rl_linebuf_func_t (char *, int); -
    -
    typedef int rl_intfunc_t (int); -
    -
    #define rl_ivoidfunc_t rl_hook_func_t -
    -
    typedef int rl_icpfunc_t (char *); -
    -
    typedef int rl_icppfunc_t (char **); -
    -
    typedef void rl_voidfunc_t (void); -
    -
    typedef void rl_vintfunc_t (int); -
    -
    typedef void rl_vcpfunc_t (char *); -
    -
    typedef void rl_vcppfunc_t (char **); -
    -
    - - - -

    Writing a New Function

    - -

    -In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - -

    -

    -The calling sequence for a command foo looks like - -

    - -
    -foo (int count, int key)
    -
    - -

    -where count is the numeric argument (or 1 if defaulted) and -key is the key that invoked this function. - -

    -

    -It is completely up to the function as to what should be done with the -numeric argument. Some functions use it as a repeat count, some -as a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a -function uses the numeric argument as a repeat count, it should be able -to do something useful with both negative and positive arguments. -At the very least, it should be aware that it can be passed a -negative argument. - -

    - - -

    Readline Variables

    - -

    -These variables are available to function writers. - -

    -

    -

    -
    Variable: char * rl_line_buffer -
    -This is the line gathered so far. You are welcome to modify the -contents of the line, but see section Allowing Undoing. The -function rl_extend_line_buffer is available to increase -the memory allocated to rl_line_buffer. -
    - -

    -

    -

    -
    Variable: int rl_point -
    -The offset of the current cursor position in rl_line_buffer -(the point). -
    - -

    -

    -

    -
    Variable: int rl_end -
    -The number of characters present in rl_line_buffer. When -rl_point is at the end of the line, rl_point and -rl_end are equal. -
    - -

    -

    -

    -
    Variable: int rl_mark -
    -The mark (saved position) in the current line. If set, the mark -and point define a region. -
    - -

    -

    -

    -
    Variable: int rl_done -
    -Setting this to a non-zero value causes Readline to return the current -line immediately. -
    - -

    -

    -

    -
    Variable: int rl_num_chars_to_read -
    -Setting this to a positive value before calling readline() causes -Readline to return after accepting that many characters, rather -than reading up to a character bound to accept-line. -
    - -

    -

    -

    -
    Variable: int rl_pending_input -
    -Setting this to a value makes it the next keystroke read. This is a -way to stuff a single character into the input stream. -
    - -

    -

    -

    -
    Variable: int rl_dispatching -
    -Set to a non-zero value if a function is being called from a key binding; -zero otherwise. Application functions can test this to discover whether -they were called directly or by Readline's dispatching mechanism. -
    - -

    -

    -

    -
    Variable: int rl_erase_empty_line -
    -Setting this to a non-zero value causes Readline to completely erase -the current line, including any prompt, any time a newline is typed as -the only character on an otherwise-empty line. The cursor is moved to -the beginning of the newly-blank line. -
    - -

    -

    -

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

    -

    -

    -
    Variable: int rl_already_prompted -
    -If an application wishes to display the prompt itself, rather than have -Readline do it the first time readline() is called, it should set -this variable to a non-zero value after displaying the prompt. -The prompt must also be passed as the argument to readline() so -the redisplay functions can update the display properly. -The calling application is responsible for managing the value; Readline -never sets it. -
    - -

    -

    -

    -
    Variable: const char * rl_library_version -
    -The version number of this revision of the library. -
    - -

    -

    -

    -
    Variable: int rl_gnu_readline_p -
    -Always set to 1, denoting that this is GNU readline rather than some -emulation. -
    - -

    -

    -

    -
    Variable: const char * rl_terminal_name -
    -The terminal type, used for initialization. If not set by the application, -Readline sets this to the value of the @env{TERM} environment variable -the first time it is called. -
    - -

    -

    -

    -
    Variable: const char * rl_readline_name -
    -This variable is set to a unique name by each application using Readline. -The value allows conditional parsing of the inputrc file -(see section Conditional Init Constructs). -
    - -

    -

    -

    -
    Variable: FILE * rl_instream -
    -The stdio stream from which Readline reads input. -
    - -

    -

    -

    -
    Variable: FILE * rl_outstream -
    -The stdio stream to which Readline performs output. -
    - -

    -

    -

    -
    Variable: rl_command_func_t * rl_last_func -
    -The address of the last command function Readline executed. May be used to -test whether or not a function is being executed twice in succession, for -example. -
    - -

    -

    -

    -
    Variable: rl_hook_func_t * rl_startup_hook -
    -If non-zero, this is the address of a function to call just -before readline prints the first prompt. -
    - -

    -

    -

    -
    Variable: rl_hook_func_t * rl_pre_input_hook -
    -If non-zero, this is the address of a function to call after -the first prompt has been printed and just before readline -starts reading input characters. -
    - -

    -

    -

    -
    Variable: rl_hook_func_t * rl_event_hook -
    -If non-zero, this is the address of a function to call periodically -when readline is waiting for terminal input. -
    - -

    -

    -

    -
    Variable: rl_getc_func_t * rl_getc_function -
    -If non-zero, readline will call indirectly through this pointer -to get a character from the input stream. By default, it is set to -rl_getc, the default readline character input function -(see section Character Input). -
    - -

    -

    -

    -
    Variable: rl_voidfunc_t * rl_redisplay_function -
    -If non-zero, readline will call indirectly through this pointer -to update the display with the current contents of the editing buffer. -By default, it is set to rl_redisplay, the default readline -redisplay function (see section Redisplay). -
    - -

    -

    -

    -
    Variable: rl_vintfunc_t * rl_prep_term_function -
    -If non-zero, readline will call indirectly through this pointer -to initialize the terminal. The function takes a single argument, an -int flag that says whether or not to use eight-bit characters. -By default, this is set to rl_prep_terminal -(see section Terminal Management). -
    - -

    -

    -

    -
    Variable: rl_voidfunc_t * rl_deprep_term_function -
    -If non-zero, readline will call indirectly through this pointer -to reset the terminal. This function should undo the effects of -rl_prep_term_function. -By default, this is set to rl_deprep_terminal -(see section Terminal Management). -
    - -

    -

    -

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

    -

    -

    -
    Variable: Keymap rl_binding_keymap -
    -This variable is set to the keymap (see section Selecting a Keymap) in which the -last key binding occurred. -
    - -

    -

    -

    -
    Variable: char * rl_executing_macro -
    -This variable is set to the text of any currently-executing macro. -
    - -

    -

    -

    -
    Variable: int rl_readline_state -
    -A variable with bit values that encapsulate the current Readline state. -A bit is set with the RL_SETSTATE macro, and unset with the -RL_UNSETSTATE macro. Use the RL_ISSTATE macro to test -whether a particular state bit is set. Current state bits include: - -

    -
    - -
    RL_STATE_NONE -
    -Readline has not yet been called, nor has it begun to intialize. -
    RL_STATE_INITIALIZING -
    -Readline is initializing its internal data structures. -
    RL_STATE_INITIALIZED -
    -Readline has completed its initialization. -
    RL_STATE_TERMPREPPED -
    -Readline has modified the terminal modes to do its own input and redisplay. -
    RL_STATE_READCMD -
    -Readline is reading a command from the keyboard. -
    RL_STATE_METANEXT -
    -Readline is reading more input after reading the meta-prefix character. -
    RL_STATE_DISPATCHING -
    -Readline is dispatching to a command. -
    RL_STATE_MOREINPUT -
    -Readline is reading more input while executing an editing command. -
    RL_STATE_ISEARCH -
    -Readline is performing an incremental history search. -
    RL_STATE_NSEARCH -
    -Readline is performing a non-incremental history search. -
    RL_STATE_SEARCH -
    -Readline is searching backward or forward through the history for a string. -
    RL_STATE_NUMERICARG -
    -Readline is reading a numeric argument. -
    RL_STATE_MACROINPUT -
    -Readline is currently getting its input from a previously-defined keyboard -macro. -
    RL_STATE_MACRODEF -
    -Readline is currently reading characters defining a keyboard macro. -
    RL_STATE_OVERWRITE -
    -Readline is in overwrite mode. -
    RL_STATE_COMPLETING -
    -Readline is performing word completion. -
    RL_STATE_SIGHANDLER -
    -Readline is currently executing the readline signal handler. -
    RL_STATE_UNDOING -
    -Readline is performing an undo. -
    RL_STATE_DONE -
    -Readline has read a key sequence bound to accept-line -and is about to return the line to the caller. -
    - -
    - -

    -

    -
    Variable: int rl_explicit_arg -
    -Set to a non-zero value if an explicit numeric argument was specified by -the user. Only valid in a bindable command function. -
    - -

    -

    -

    -
    Variable: int rl_numeric_arg -
    -Set to the value of any numeric argument explicitly specified by the user -before executing the current Readline function. Only valid in a bindable -command function. -
    - -

    -

    -

    -
    Variable: int rl_editing_mode -
    -Set to a value denoting Readline's current editing mode. A value of -emacs_mode means Readline is currently in emacs mode; vi_mode -means that vi mode is active. -
    - -

    - - - -

    Readline Convenience Functions

    - - - - - - -

    Naming a Function

    - -

    -The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - -

    - -
    -Meta-Rubout:	backward-kill-word
    -
    - -

    -This binds the keystroke Meta-Rubout to the function -descriptively named backward-kill-word. You, as the -programmer, should bind the functions you write to descriptive names as -well. Readline provides a function for doing that: - -

    -

    -

    -
    Function: int rl_add_defun (const char *name, rl_command_func_t *function, int key) -
    -Add name to the list of named functions. Make function be -the function that gets called. If key is not -1, then bind it to -function using rl_bind_key(). -
    - -

    -

    -Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other -than adding a function to Readline, you may need to use the -underlying functions described below. - -

    - - -

    Selecting a Keymap

    - -

    -Key bindings take place on a keymap. The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - -

    -

    -

    -
    Function: Keymap rl_make_bare_keymap (void) -
    -Returns a new, empty keymap. The space for the keymap is allocated with -malloc(); the caller should free it by calling -rl_discard_keymap() when done. -
    - -

    -

    -

    -
    Function: Keymap rl_copy_keymap (Keymap map) -
    -Return a new keymap which is a copy of map. -
    - -

    -

    -

    -
    Function: Keymap rl_make_keymap (void) -
    -Return a new keymap with the printing characters bound to rl_insert, -the lowercase Meta characters bound to run their equivalents, and -the Meta digits bound to produce numeric arguments. -
    - -

    -

    -

    -
    Function: void rl_discard_keymap (Keymap keymap) -
    -Free the storage associated with keymap. -
    - -

    -

    -Readline has several internal keymaps. These functions allow you to -change which keymap is active. - -

    -

    -

    -
    Function: Keymap rl_get_keymap (void) -
    -Returns the currently active keymap. -
    - -

    -

    -

    -
    Function: void rl_set_keymap (Keymap keymap) -
    -Makes keymap the currently active keymap. -
    - -

    -

    -

    -
    Function: Keymap rl_get_keymap_by_name (const char *name) -
    -Return the keymap matching name. name is one which would -be supplied in a set keymap inputrc line (see section Readline Init File). -
    - -

    -

    -

    -
    Function: char * rl_get_keymap_name (Keymap keymap) -
    -Return the name matching keymap. name is one which would -be supplied in a set keymap inputrc line (see section Readline Init File). -
    - -

    - - -

    Binding Keys

    - -

    -Key sequences are associate with functions through the keymap. -Readline has several internal keymaps: emacs_standard_keymap, -emacs_meta_keymap, emacs_ctlx_keymap, -vi_movement_keymap, and vi_insertion_keymap. -emacs_standard_keymap is the default, and the examples in -this manual assume that. - -

    -

    -Since readline() installs a set of default key bindings the first -time it is called, there is always the danger that a custom binding -installed before the first call to readline() will be overridden. -An alternate mechanism is to install custom key bindings in an -initialization function assigned to the rl_startup_hook variable -(see section Readline Variables). - -

    -

    -These functions manage key bindings. - -

    -

    -

    -
    Function: int rl_bind_key (int key, rl_command_func_t *function) -
    -Binds key to function in the currently active keymap. -Returns non-zero in the case of an invalid key. -
    - -

    -

    -

    -
    Function: int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) -
    -Bind key to function in map. Returns non-zero in the case -of an invalid key. -
    - -

    -

    -

    -
    Function: int rl_unbind_key (int key) -
    -Bind key to the null function in the currently active keymap. -Returns non-zero in case of error. -
    - -

    -

    -

    -
    Function: int rl_unbind_key_in_map (int key, Keymap map) -
    -Bind key to the null function in map. -Returns non-zero in case of error. -
    - -

    -

    -

    -
    Function: int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) -
    -Unbind all keys that execute function in map. -
    - -

    -

    -

    -
    Function: int rl_unbind_command_in_map (const char *command, Keymap map) -
    -Unbind all keys that are bound to command in map. -
    - -

    -

    -

    -
    Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) -
    -Bind the key sequence represented by the string keyseq to the function -function. This makes new keymaps as -necessary. The initial keymap in which to do bindings is map. -
    - -

    -

    -

    -
    Function: int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) -
    -Bind the key sequence represented by the string keyseq to the arbitrary -pointer data. type says what kind of data is pointed to by -data; this can be a function (ISFUNC), a macro -(ISMACR), or a keymap (ISKMAP). This makes new keymaps as -necessary. The initial keymap in which to do bindings is map. -
    - -

    -

    -

    -
    Function: int rl_parse_and_bind (char *line) -
    -Parse line as if it had been read from the inputrc file and -perform any key bindings and variable assignments found -(see section Readline Init File). -
    - -

    -

    -

    -
    Function: int rl_read_init_file (const char *filename) -
    -Read keybindings and variable assignments from filename -(see section Readline Init File). -
    - -

    - - -

    Associating Function Names and Bindings

    - -

    -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. You may also -associate a new function name with an arbitrary function. - -

    -

    -

    -
    Function: rl_command_func_t * rl_named_function (const char *name) -
    -Return the function with name name. -
    - -

    -

    -

    -
    Function: rl_command_func_t * rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) -
    -Return the function invoked by keyseq in keymap map. -If map is NULL, the current keymap is used. If type is -not NULL, the type of the object is returned in the int variable -it points to (one of ISFUNC, ISKMAP, or ISMACR). -
    - -

    -

    -

    -
    Function: char ** rl_invoking_keyseqs (rl_command_func_t *function) -
    -Return an array of strings representing the key sequences used to -invoke function in the current keymap. -
    - -

    -

    -

    -
    Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) -
    -Return an array of strings representing the key sequences used to -invoke function in the keymap map. -
    - -

    -

    -

    -
    Function: void rl_function_dumper (int readable) -
    -Print the readline function names and the key sequences currently -bound to them to rl_outstream. If readable is non-zero, -the list is formatted in such a way that it can be made part of an -inputrc file and re-read. -
    - -

    -

    -

    -
    Function: void rl_list_funmap_names (void) -
    -Print the names of all bindable Readline functions to rl_outstream. -
    - -

    -

    -

    -
    Function: const char ** rl_funmap_names (void) -
    -Return a NULL terminated array of known function names. The array is -sorted. The array itself is allocated, but not the strings inside. You -should free() the array when you are done, but not the pointers. -
    - -

    -

    -

    -
    Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function) -
    -Add name to the list of bindable Readline command names, and make -function the function to be called when name is invoked. -
    - -

    - - -

    Allowing Undoing

    - -

    -Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try -something if you know you can undo it. - -

    -

    -If your function simply inserts text once, or deletes text once, and -uses rl_insert_text() or rl_delete_text() to do it, then -undoing is already done for you automatically. - -

    -

    -If you do multiple insertions or multiple deletions, or any combination -of these operations, you should group them together into one operation. -This is done with rl_begin_undo_group() and -rl_end_undo_group(). - -

    -

    -The types of events that can be undone are: - -

    - -
    -enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; 
    -
    - -

    -Notice that UNDO_DELETE means to insert some text, and -UNDO_INSERT means to delete some text. That is, the undo code -tells what to undo, not how to undo it. UNDO_BEGIN and -UNDO_END are tags added by rl_begin_undo_group() and -rl_end_undo_group(). - -

    -

    -

    -
    Function: int rl_begin_undo_group (void) -
    -Begins saving undo information in a group construct. The undo -information usually comes from calls to rl_insert_text() and -rl_delete_text(), but could be the result of calls to -rl_add_undo(). -
    - -

    -

    -

    -
    Function: int rl_end_undo_group (void) -
    -Closes the current undo group started with rl_begin_undo_group -(). There should be one call to rl_end_undo_group() -for each call to rl_begin_undo_group(). -
    - -

    -

    -

    -
    Function: void rl_add_undo (enum undo_code what, int start, int end, char *text) -
    -Remember how to undo an event (according to what). The affected -text runs from start to end, and encompasses text. -
    - -

    -

    -

    -
    Function: void rl_free_undo_list (void) -
    -Free the existing undo list. -
    - -

    -

    -

    -
    Function: int rl_do_undo (void) -
    -Undo the first thing on the undo list. Returns 0 if there was -nothing to undo, non-zero if something was undone. -
    - -

    -

    -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g., change its case), call rl_modifying() -once, just before you modify the text. You must supply the indices of -the text range that you are going to modify. - -

    -

    -

    -
    Function: int rl_modifying (int start, int end) -
    -Tell Readline to save the text between start and end as a -single undo unit. It is assumed that you will subsequently modify -that text. -
    - -

    - - -

    Redisplay

    - -

    -

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

    -

    -

    -
    Function: int rl_forced_update_display (void) -
    -Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -
    - -

    -

    -

    -
    Function: int rl_on_new_line (void) -
    -Tell the update functions that we have moved onto a new (empty) line, -usually after ouputting a newline. -
    - -

    -

    -

    -
    Function: int rl_on_new_line_with_prompt (void) -
    -Tell the update functions that we have moved onto a new line, with -rl_prompt already displayed. -This could be used by applications that want to output the prompt string -themselves, but still need Readline to know the prompt string length for -redisplay. -It should be used after setting rl_already_prompted. -
    - -

    -

    -

    -
    Function: int rl_reset_line_state (void) -
    -Reset the display state to a clean state and redisplay the current line -starting on a new line. -
    - -

    -

    -

    -
    Function: int rl_crlf (void) -
    -Move the cursor to the start of the next screen line. -
    - -

    -

    -

    -
    Function: int rl_message (const char *, ...) -
    -The arguments are a format string as would be supplied to printf, -possibly containing conversion specifications such as `%d', and -any additional arguments necessary to satisfy the conversion specifications. -The resulting string is displayed in the echo area. The echo area -is also used to display numeric arguments and search strings. -
    - -

    -

    -

    -
    Function: int rl_clear_message (void) -
    -Clear the message in the echo area. -
    - -

    -

    -

    -
    Function: void rl_save_prompt (void) -
    -Save the local Readline prompt display state in preparation for -displaying a new message in the message area with rl_message(). -
    - -

    -

    -

    -
    Function: void rl_restore_prompt (void) -
    -Restore the local Readline prompt display state saved by the most -recent call to rl_save_prompt. -
    - -

    -

    -

    -
    Function: int rl_expand_prompt (char *prompt) -
    -Expand any special character sequences in prompt and set up the -local Readline prompt redisplay variables. -This function is called by readline(). It may also be called to -expand the primary prompt if the rl_on_new_line_with_prompt() -function or rl_already_prompted variable is used. -It returns the number of visible characters on the last line of the -(possibly multi-line) prompt. -
    - - -

    Modifying Text

    - -

    -

    -
    Function: int rl_insert_text (const char *text) -
    -Insert text into the line at the current cursor position. -
    - -

    -

    -

    -
    Function: int rl_delete_text (int start, int end) -
    -Delete the text between start and end in the current line. -
    - -

    -

    -

    -
    Function: char * rl_copy_text (int start, int end) -
    -Return a copy of the text between start and end in -the current line. -
    - -

    -

    -

    -
    Function: int rl_kill_text (int start, int end) -
    -Copy the text between start and end in the current line -to the kill ring, appending or prepending to the last kill if the -last command was a kill command. The text is deleted. -If start is less than end, -the text is appended, otherwise prepended. If the last command was -not a kill, a new kill ring slot is used. -
    - -

    - - -

    Character Input

    - -

    -

    -
    Function: int rl_read_key (void) -
    -Return the next character available from Readline's current input stream. -This handles input inserted into -the input stream via rl_pending_input (see section Readline Variables) -and rl_stuff_char(), macros, and characters read from the keyboard. -
    - -

    -

    -

    -
    Function: int rl_getc (FILE *stream) -
    -Return the next character available from stream, which is assumed to -be the keyboard. -
    - -

    -

    -

    -
    Function: int rl_stuff_char (int c) -
    -Insert c into the Readline input stream. It will be "read" -before Readline attempts to read characters from the terminal with -rl_read_key(). -
    - -

    -

    -

    -
    Function: int rl_execute_next (int c) -
    -Make c be the next command to be executed when rl_read_key() -is called. This sets rl_pending_input. -
    - -

    -

    -

    -
    Function: int rl_clear_pending_input (void) -
    -Unet rl_pending_input, effectively negating the effect of any -previous call to rl_execute_next(). This works only if the -pending input has not already been read with rl_read_key(). -
    - -

    - - -

    Terminal Management

    - -

    -

    -
    Function: int rl_prep_terminal (int meta_flag) -
    -Modify the terminal settings for Readline's use, so readline() -can read a single character at a time from the keyboard. -The meta_flag argument should be non-zero if Readline should -read eight-bit input. -
    - -

    -

    -

    -
    Function: in rl_deprep_terminal (void) -
    -Undo the effects of rl_prep_terminal(), leaving the terminal in -the state in which it was before the most recent call to -rl_prep_terminal(). -
    - -

    -

    -

    -
    Function: void rl_tty_set_default_bindings (Keymap kmap) -
    -Read the operating system's terminal editing characters (as would be displayed -by stty to their readline equivalents. The bindings are performed -in kmap. -
    - -

    -

    -

    -
    Function: int rl_reset_terminal (const char *terminal_name) -
    -Reinitialize Readline's idea of the terminal settings using -terminal_name as the terminal type (e.g., vt100). -If terminal_name is NULL, the value of the TERM -environment variable is used. -
    - -

    - - -

    Utility Functions

    - -

    -

    -
    Function: int rl_extend_line_buffer (int len) -
    -Ensure that rl_line_buffer has enough space to hold len -characters, possibly reallocating it if necessary. -
    - -

    -

    -

    -
    Function: int rl_initialize (void) -
    -Initialize or re-initialize Readline's internal state. -It's not strictly necessary to call this; readline() calls it before -reading any input. -
    - -

    -

    -

    -
    Function: int rl_ding (void) -
    -Ring the terminal bell, obeying the setting of bell-style. -
    - -

    -

    -

    -
    Function: int rl_alphabetic (int c) -
    -Return 1 if c is an alphabetic character. -
    - -

    -

    -

    -
    Function: void rl_display_match_list (char **matches, int len, int max) -
    -A convenience function for displaying a list of strings in -columnar format on Readline's output stream. matches is the list -of strings, in argv format, such as a list of completion matches. -len is the number of strings in matches, and max -is the length of the longest string in matches. This function uses -the setting of print-completions-horizontally to select how the -matches are displayed (see section Readline Init File Syntax). -
    - -

    -

    -The following are implemented as macros, defined in chardefs.h. -Applications should refrain from using them. - -

    -

    -

    -
    Function: int _rl_uppercase_p (int c) -
    -Return 1 if c is an uppercase alphabetic character. -
    - -

    -

    -

    -
    Function: int _rl_lowercase_p (int c) -
    -Return 1 if c is a lowercase alphabetic character. -
    - -

    -

    -

    -
    Function: int _rl_digit_p (int c) -
    -Return 1 if c is a numeric character. -
    - -

    -

    -

    -
    Function: int _rl_to_upper (int c) -
    -If c is a lowercase alphabetic character, return the corresponding -uppercase character. -
    - -

    -

    -

    -
    Function: int _rl_to_lower (int c) -
    -If c is an uppercase alphabetic character, return the corresponding -lowercase character. -
    - -

    -

    -

    -
    Function: int _rl_digit_value (int c) -
    -If c is a number, return the value it represents. -
    - -

    - - -

    Alternate Interface

    - -

    -An alternate interface is available to plain readline(). Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to select() -on various file descriptors. To accomodate this need, readline can -also be invoked as a `callback' function from an event loop. There -are functions available to make this easy. - -

    -

    -

    -
    Function: void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) -
    -Set up the terminal for readline I/O and display the initial -expanded value of prompt. Save the value of lhandler to -use as a function to call when a complete line of input has been entered. -The function takes the text of the line as an argument. -
    - -

    -

    -

    -
    Function: void rl_callback_read_char (void) -
    -Whenever an application determines that keyboard input is available, it -should call rl_callback_read_char(), which will read the next -character from the current input source. If that character completes the -line, rl_callback_read_char will invoke the lhandler -function saved by rl_callback_handler_install to process the -line. EOF is indicated by calling lhandler with a -NULL line. -
    - -

    -

    -

    -
    Function: void rl_callback_handler_remove (void) -
    -Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -
    - -

    - - -

    An Example

    - -

    -Here is a function which changes lowercase characters to their uppercase -equivalents, and uppercase characters to lowercase. If -this function was bound to `M-c', then typing `M-c' would -change the case of the character under point. Typing `M-1 0 M-c' -would change the case of the following 10 characters, leaving the cursor on -the last character changed. - -

    - -
    -/* Invert the case of the COUNT following characters. */
    -int
    -invert_case_line (count, key)
    -     int count, key;
    -{
    -  register int start, end, i;
    -
    -  start = rl_point;
    -
    -  if (rl_point >= rl_end)
    -    return (0);
    -
    -  if (count < 0)
    -    {
    -      direction = -1;
    -      count = -count;
    -    }
    -  else
    -    direction = 1;
    -      
    -  /* Find the end of the range to modify. */
    -  end = start + (count * direction);
    -
    -  /* Force it to be within range. */
    -  if (end > rl_end)
    -    end = rl_end;
    -  else if (end < 0)
    -    end = 0;
    -
    -  if (start == end)
    -    return (0);
    -
    -  if (start > end)
    -    {
    -      int temp = start;
    -      start = end;
    -      end = temp;
    -    }
    -
    -  /* Tell readline that we are modifying the line, so it will save
    -     the undo information. */
    -  rl_modifying (start, end);
    -
    -  for (i = start; i != end; i++)
    -    {
    -      if (_rl_uppercase_p (rl_line_buffer[i]))
    -        rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
    -      else if (_rl_lowercase_p (rl_line_buffer[i]))
    -        rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
    -    }
    -  /* Move point to on top of the last character changed. */
    -  rl_point = (direction == 1) ? end - 1 : start;
    -  return (0);
    -}
    -
    - - - -

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

    -

    -There is an additional Readline signal handler, for SIGWINCH, which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an xterm). The Readline SIGWINCH -handler updates Readline's internal screen size information, and then calls -any SIGWINCH signal handler the calling application has installed. -Readline calls the application's SIGWINCH signal handler without -resetting the terminal to its original state. If the application's signal -handler does more than update its idea of the terminal size and return (for -example, a longjmp back to a main processing loop), it must -call rl_cleanup_after_signal() (described below), to restore the -terminal state. - -

    -

    -Readline provides two variables that allow application writers to -control whether or not it will catch certain signals and act on them -when they are received. It is important that applications change the -values of these variables only when calling readline(), not in -a signal handler, so Readline's internal signal state is not corrupted. - -

    -

    -

    -
    Variable: int rl_catch_signals -
    -If this variable is non-zero, Readline will install signal handlers for -SIGINT, SIGQUIT, SIGTERM, SIGALRM, -SIGTSTP, SIGTTIN, and SIGTTOU. - -

    -

    -The default value of rl_catch_signals is 1. -

    - -

    -

    -

    -
    Variable: int rl_catch_sigwinch -
    -If this variable is non-zero, Readline will install a signal handler for -SIGWINCH. - -

    -

    -The default value of rl_catch_sigwinch is 1. -

    - -

    -

    -If an application does not wish to have Readline catch any signals, or -to handle signals other than those Readline catches (SIGHUP, -for example), -Readline provides convenience functions to do the necessary terminal -and internal state cleanup upon receipt of a signal. - -

    -

    -

    -
    Function: void rl_cleanup_after_signal (void) -
    -This function will reset the state of the terminal to what it was before -readline() was called, and remove the Readline signal handlers for -all signals, depending on the values of rl_catch_signals and -rl_catch_sigwinch. -
    - -

    -

    -

    -
    Function: void rl_free_line_state (void) -
    -This will free any partial state associated with the current input line -(undo information, any partial history entry, any partially-entered -keyboard macro, and any partially-entered numeric argument). This -should be called before rl_cleanup_after_signal(). The -Readline signal handler for SIGINT calls this to abort the -current input line. -
    - -

    -

    -

    -
    Function: void rl_reset_after_signal (void) -
    -This will reinitialize the terminal and reinstall any Readline signal -handlers, depending on the values of rl_catch_signals and -rl_catch_sigwinch. -
    - -

    -

    -If an application does not wish Readline to catch SIGWINCH, it may -call rl_resize_terminal() or rl_set_screen_size() to force -Readline to update its idea of the terminal size when a SIGWINCH -is received. - -

    -

    -

    -
    Function: void rl_resize_terminal (void) -
    -Update Readline's internal screen size by reading values from the kernel. -
    - -

    -

    -

    -
    Function: void rl_set_screen_size (int rows, int cols) -
    -Set Readline's idea of the terminal size to rows rows and -cols columns. -
    - -

    -

    -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

    - -

    -Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. -The following sections describe how your program and Readline -cooperate to provide this service. - -

    - - - - - -

    How Completing Works

    - -

    -In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately -expand a partial word without knowing all of the possible words -which make sense in that context. The Readline library provides -the user interface to completion, and two of the most common -completion functions: filename and username. For completing other types -of text, you must write your own completion function. This section -describes exactly what such functions must do, and provides an example. - -

    -

    -There are three major functions used to perform completion: - -

    - -
      -
    1. - -The user-interface function rl_complete(). This function is -called with the same arguments as other bindable Readline functions: -count and invoking_key. -It isolates the word to be completed and calls -rl_completion_matches() to generate a list of possible completions. -It then either lists the possible completions, inserts the possible -completions, or actually performs the -completion, depending on which behavior is desired. - -
    2. - -The internal function rl_completion_matches() uses an -application-supplied generator function to generate the list of -possible matches, and then returns the array of these matches. -The caller should place the address of its generator function in -rl_completion_entry_function. - -
    3. - -The generator function is called repeatedly from -rl_completion_matches(), returning a string each time. The -arguments to the generator function are text and state. -text is the partial word to be completed. state is zero the -first time the function is called, allowing the generator to perform -any necessary initialization, and a positive non-zero integer for -each subsequent call. The generator function returns -(char *)NULL to inform rl_completion_matches() that there are -no more possibilities left. Usually the generator function computes the -list of possible completions when state is zero, and returns them -one at a time on subsequent calls. Each string the generator function -returns as a match must be allocated with malloc(); Readline -frees the strings when it has finished with them. - -
    - -

    -

    -
    Function: int rl_complete (int ignore, int invoking_key) -
    -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -rl_completion_matches()). The default is to do filename completion. -
    - -

    -

    -

    -
    Variable: rl_compentry_func_t * rl_completion_entry_function -
    -This is a pointer to the generator function for -rl_completion_matches(). -If the value of rl_completion_entry_function is -NULL then the default filename generator -function, rl_filename_completion_function(), is used. -
    - -

    - - -

    Completion Functions

    - -

    -Here is the complete list of callable completion functions present in -Readline. - -

    -

    -

    -
    Function: int rl_complete_internal (int what_to_do) -
    -Complete the word at or before point. what_to_do says what to do -with the completion. A value of `?' means list the possible -completions. `TAB' means do standard completion. `*' means -insert all of the possible completions. `!' means to display -all of the possible completions, if there is more than one, as well as -performing partial completion. -
    - -

    -

    -

    -
    Function: int rl_complete (int ignore, int invoking_key) -
    -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -rl_completion_matches() and rl_completion_entry_function). -The default is to do filename -completion. This calls rl_complete_internal() with an -argument depending on invoking_key. -
    - -

    -

    -

    -
    Function: int rl_possible_completions (int count, int invoking_key) -
    -List the possible completions. See description of rl_complete -(). This calls rl_complete_internal() with an argument of -`?'. -
    - -

    -

    -

    -
    Function: int rl_insert_completions (int count, int invoking_key) -
    -Insert the list of possible completions into the line, deleting the -partially-completed word. See description of rl_complete(). -This calls rl_complete_internal() with an argument of `*'. -
    - -

    -

    -

    -
    Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) -
    -Returns an array of (char *) which is a list of completions for -text. If there are no completions, returns NULL. -The first entry in the returned array is the substitution for text. -The remaining entries are the possible completions. The array is -terminated with a NULL pointer. - -

    -

    -entry_func is a function of two args, and returns a -(char *). The first argument is text. The second is a -state argument; it is zero on the first call, and non-zero on subsequent -calls. entry_func returns a NULL pointer to the caller -when there are no more matches. -

    - -

    -

    -

    -
    Function: char * rl_filename_completion_function (const char *text, int state) -
    -A generator function for filename completion in the general case. Note -that completion in Bash is a little different because of all -the pathnames that must be followed when looking up completions for a -command. The Bash source is a useful reference for writing custom -completion functions. -
    - -

    -

    -

    -
    Function: char * rl_username_completion_function (const char *text, int state) -
    -A completion generator for usernames. text contains a partial -username preceded by a random character (usually `~'). As with all -completion generators, state is zero on the first call and non-zero -for subsequent calls. -
    - -

    - - -

    Completion Variables

    - -

    -

    -
    Variable: rl_compentry_func_t * rl_completion_entry_function -
    -A pointer to the generator function for rl_completion_matches(). -NULL means to use rl_filename_completion_function(), the default -filename completer. -
    - -

    -

    -

    -
    Variable: rl_completion_func_t * rl_attempted_completion_function -
    -A pointer to an alternative function to create matches. -The function is called with text, start, and end. -start and end are indices in rl_line_buffer defining -the boundaries of text, which is a character string. -If this function exists and returns NULL, or if this variable is -set to NULL, then rl_complete() will call the value of -rl_completion_entry_function to generate matches, otherwise the -array of strings returned will be used. -If this function sets the rl_attempted_completion_over -variable to a non-zero value, Readline will not perform its default -completion if this function returns no matches. -
    - -

    -

    -

    -
    Variable: rl_quote_func_t * rl_filename_quoting_function -
    -A pointer to a function that will quote a filename in an -application-specific fashion. This is called if filename completion is being -attempted and one of the characters in rl_filename_quote_characters -appears in a completed filename. The function is called with -text, match_type, and quote_pointer. The text -is the filename to be quoted. The match_type is either -SINGLE_MATCH, if there is only one completion match, or -MULT_MATCH. Some functions use this to decide whether or not to -insert a closing quote character. The quote_pointer is a pointer -to any opening quote character the user typed. Some functions choose -to reset this character. -
    - -

    -

    -

    -
    Variable: rl_dequote_func_t * rl_filename_dequoting_function -
    -A pointer to a function that will remove application-specific quoting -characters from a filename before completion is attempted, so those -characters do not interfere with matching the text against names in -the filesystem. It is called with text, the text of the word -to be dequoted, and quote_char, which is the quoting character -that delimits the filename (usually `'' or `"'). If -quote_char is zero, the filename was not in an embedded string. -
    - -

    -

    -

    -
    Variable: rl_linebuf_func_t * rl_char_is_quoted_p -
    -A pointer to a function to call that determines whether or not a specific -character in the line buffer is quoted, according to whatever quoting -mechanism the program calling readline uses. The function is called with -two arguments: text, the text of the line, and index, the -index of the character in the line. It is used to decide whether a -character found in rl_completer_word_break_characters should be -used to break words for the completer. -
    - -

    -

    -

    -
    Variable: int rl_completion_query_items -
    -Up to this many items will be displayed in response to a -possible-completions call. After that, we ask the user if she is sure -she wants to see them all. The default value is 100. -
    - -

    -

    -

    -
    Variable: const char * rl_basic_word_break_characters -
    -The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash, i.e., -" \t\n\"\\'`@$><=;|&{(". -
    - -

    -

    -

    -
    Variable: const char * rl_basic_quote_characters -
    -List of quote characters which can cause a word break. -
    - -

    -

    -

    -
    Variable: const char * rl_completer_word_break_characters -
    -The list of characters that signal a break between words for -rl_complete_internal(). The default list is the value of -rl_basic_word_break_characters. -
    - -

    -

    -

    -
    Variable: const char * rl_completer_quote_characters -
    -List of characters which can be used to quote a substring of the line. -Completion occurs on the entire substring, and within the substring -rl_completer_word_break_characters are treated as any other character, -unless they also appear within this list. -
    - -

    -

    -

    -
    Variable: const char * rl_filename_quote_characters -
    -A list of characters that cause a filename to be quoted by the completer -when they appear in a completed filename. The default is the null string. -
    - -

    -

    -

    -
    Variable: const char * rl_special_prefixes -
    -The list of characters that are word break characters, but should be -left in text when it is passed to the completion function. -Programs can use this to help determine what kind of completing to do. -For instance, Bash sets this variable to "$@" so that it can complete -shell variables and hostnames. -
    - -

    -

    -

    -
    Variable: int rl_completion_append_character -
    -When a single completion alternative matches at the end of the command -line, this character is appended to the inserted completion text. The -default is a space character (` '). Setting this to the null -character (`\0') prevents anything being appended automatically. -This can be changed in custom completion functions to -provide the "most sensible word separator character" according to -an application-specific command line syntax specification. -
    - -

    -

    -

    -
    Variable: int rl_ignore_completion_duplicates -
    -If non-zero, then disallow duplicates in the matches. Default is 1. -
    - -

    -

    -

    -
    Variable: int rl_filename_completion_desired -
    -Non-zero means that the results of the matches are to be treated as -filenames. This is always zero on entry, and can only be changed -within a completion entry generator function. If it is set to a non-zero -value, directory names have a slash appended and Readline attempts to -quote completed filenames if they contain any characters in -rl_filename_quote_characters and rl_filename_quoting_desired -is set to a non-zero value. -
    - -

    -

    -

    -
    Variable: int rl_filename_quoting_desired -
    -Non-zero means that the results of the matches are to be quoted using -double quotes (or an application-specific quoting mechanism) if the -completed filename contains any characters in -rl_filename_quote_chars. This is always non-zero -on entry, and can only be changed within a completion entry generator -function. The quoting is effected via a call to the function pointed to -by rl_filename_quoting_function. -
    - -

    -

    -

    -
    Variable: int rl_attempted_completion_over -
    -If an application-specific completion function assigned to -rl_attempted_completion_function sets this variable to a non-zero -value, Readline will not perform its default filename completion if the -application's completion function returns no matches. -It should be set only by an application's completion function. -
    - -

    -

    -

    -
    Variable: int rl_completion_type -
    -Set to a character describing the type of completion Readline is currently -attempting; see the description of rl_complete_internal() -(see section Completion Functions) for the list of characters. -
    - -

    -

    -

    -
    Variable: int rl_inhibit_completion -
    -If this variable is non-zero, completion is inhibited. The completion -character will be inserted as any other bound to self-insert. -
    - -

    -

    -

    -
    Variable: rl_compignore_func_t * rl_ignore_some_completions_function -
    -This function, if defined, is called by the completer when real filename -completion is done, after all the matching names have been generated. -It is passed a NULL terminated array of matches. -The first element (matches[0]) is the -maximal substring common to all matches. This function can -re-arrange the list of matches as required, but each element deleted -from the array must be freed. -
    - -

    -

    -

    -
    Variable: rl_icppfunc_t * rl_directory_completion_hook -
    -This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument, and may modify that string. -If the string is replaced with a new string, the old value should be freed. -Any modified directory name should have a trailing slash. -The modified value will be displayed as part of the completion, replacing -the directory portion of the pathname the user typed. -It returns an integer that should be non-zero if the function modifies -its directory argument. -It could be used to expand symbolic links or shell variables in pathnames. -
    - -

    -

    -

    -
    Variable: rl_compdisp_func_t * rl_completion_display_matches_hook -
    -If non-zero, then this is the address of a function to call when -completing a word would normally display the list of possible matches. -This function is called in lieu of Readline displaying the list. -It takes three arguments: -(char **matches, int num_matches, int max_length) -where matches is the array of matching strings, -num_matches is the number of strings in that array, and -max_length is the length of the longest string in that array. -Readline provides a convenience function, rl_display_match_list, -that takes care of doing the display to Readline's output stream. That -function may be called from this hook. -
    - -

    - - -

    A Short Completion Example

    - -

    -Here is a small application demonstrating the use of the GNU Readline -library. It is called fileman, and the source code resides in -`examples/fileman.c'. This sample application provides -completion of command names, line editing features, and access to the -history list. - -

    - -
    -/* fileman.c -- A tiny application which demonstrates how to use the
    -   GNU Readline library.  This application interactively allows users
    -   to manipulate files and their modes. */
    -
    -#include <stdio.h>
    -#include <sys/types.h>
    -#include <sys/file.h>
    -#include <sys/stat.h>
    -#include <sys/errno.h>
    -
    -#include <readline/readline.h>
    -#include <readline/history.h>
    -
    -extern char *xmalloc ();
    -
    -/* The names of functions that actually do the manipulation. */
    -int com_list __P((char *));
    -int com_view __P((char *));
    -int com_rename __P((char *));
    -int com_stat __P((char *));
    -int com_pwd __P((char *));
    -int com_delete __P((char *));
    -int com_help __P((char *));
    -int com_cd __P((char *));
    -int com_quit __P((char *));
    -
    -/* A structure which contains information on the commands this program
    -   can understand. */
    -
    -typedef struct {
    -  char *name;			/* User printable name of the function. */
    -  rl_icpfunc_t *func;		/* Function to call to do the job. */
    -  char *doc;			/* Documentation for this function.  */
    -} COMMAND;
    -
    -COMMAND commands[] = {
    -  { "cd", com_cd, "Change to directory DIR" },
    -  { "delete", com_delete, "Delete FILE" },
    -  { "help", com_help, "Display this text" },
    -  { "?", com_help, "Synonym for `help'" },
    -  { "list", com_list, "List files in DIR" },
    -  { "ls", com_list, "Synonym for `list'" },
    -  { "pwd", com_pwd, "Print the current working directory" },
    -  { "quit", com_quit, "Quit using Fileman" },
    -  { "rename", com_rename, "Rename FILE to NEWNAME" },
    -  { "stat", com_stat, "Print out statistics on FILE" },
    -  { "view", com_view, "View the contents of FILE" },
    -  { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
    -};
    -
    -/* Forward declarations. */
    -char *stripwhite ();
    -COMMAND *find_command ();
    -
    -/* The name of this program, as taken from argv[0]. */
    -char *progname;
    -
    -/* When non-zero, this means the user is done using this program. */
    -int done;
    -
    -char *
    -dupstr (s)
    -     int s;
    -{
    -  char *r;
    -
    -  r = xmalloc (strlen (s) + 1);
    -  strcpy (r, s);
    -  return (r);
    -}
    -
    -main (argc, argv)
    -     int argc;
    -     char **argv;
    -{
    -  char *line, *s;
    -
    -  progname = argv[0];
    -
    -  initialize_readline ();	/* Bind our completer. */
    -
    -  /* Loop reading and executing lines until the user quits. */
    -  for ( ; done == 0; )
    -    {
    -      line = readline ("FileMan: ");
    -
    -      if (!line)
    -        break;
    -
    -      /* Remove leading and trailing whitespace from the line.
    -         Then, if there is anything left, add it to the history list
    -         and execute it. */
    -      s = stripwhite (line);
    -
    -      if (*s)
    -        {
    -          add_history (s);
    -          execute_line (s);
    -        }
    -
    -      free (line);
    -    }
    -  exit (0);
    -}
    -
    -/* Execute a command line. */
    -int
    -execute_line (line)
    -     char *line;
    -{
    -  register int i;
    -  COMMAND *command;
    -  char *word;
    -
    -  /* Isolate the command word. */
    -  i = 0;
    -  while (line[i] && whitespace (line[i]))
    -    i++;
    -  word = line + i;
    -
    -  while (line[i] && !whitespace (line[i]))
    -    i++;
    -
    -  if (line[i])
    -    line[i++] = '\0';
    -
    -  command = find_command (word);
    -
    -  if (!command)
    -    {
    -      fprintf (stderr, "%s: No such command for FileMan.\n", word);
    -      return (-1);
    -    }
    -
    -  /* Get argument to command, if any. */
    -  while (whitespace (line[i]))
    -    i++;
    -
    -  word = line + i;
    -
    -  /* Call the function. */
    -  return ((*(command->func)) (word));
    -}
    -
    -/* Look up NAME as the name of a command, and return a pointer to that
    -   command.  Return a NULL pointer if NAME isn't a command name. */
    -COMMAND *
    -find_command (name)
    -     char *name;
    -{
    -  register int i;
    -
    -  for (i = 0; commands[i].name; i++)
    -    if (strcmp (name, commands[i].name) == 0)
    -      return (&commands[i]);
    -
    -  return ((COMMAND *)NULL);
    -}
    -
    -/* Strip whitespace from the start and end of STRING.  Return a pointer
    -   into STRING. */
    -char *
    -stripwhite (string)
    -     char *string;
    -{
    -  register char *s, *t;
    -
    -  for (s = string; whitespace (*s); s++)
    -    ;
    -    
    -  if (*s == 0)
    -    return (s);
    -
    -  t = s + strlen (s) - 1;
    -  while (t > s && whitespace (*t))
    -    t--;
    -  *++t = '\0';
    -
    -  return s;
    -}
    -
    -/* **************************************************************** */
    -/*                                                                  */
    -/*                  Interface to Readline Completion                */
    -/*                                                                  */
    -/* **************************************************************** */
    -
    -char *command_generator __P((const char *, int));
    -char **fileman_completion __P((const char *, int, int));
    -
    -/* Tell the GNU Readline library how to complete.  We want to try to
    -   complete on command names if this is the first word in the line, or
    -   on filenames if not. */
    -initialize_readline ()
    -{
    -  /* Allow conditional parsing of the ~/.inputrc file. */
    -  rl_readline_name = "FileMan";
    -
    -  /* Tell the completer that we want a crack first. */
    -  rl_attempted_completion_function = fileman_completion;
    -}
    -
    -/* Attempt to complete on the contents of TEXT.  START and END
    -   bound the region of rl_line_buffer that contains the word to
    -   complete.  TEXT is the word to complete.  We can use the entire
    -   contents of rl_line_buffer in case we want to do some simple
    -   parsing.  Returnthe array of matches, or NULL if there aren't any. */
    -char **
    -fileman_completion (text, start, end)
    -     const char *text;
    -     int start, end;
    -{
    -  char **matches;
    -
    -  matches = (char **)NULL;
    -
    -  /* If this word is at the start of the line, then it is a command
    -     to complete.  Otherwise it is the name of a file in the current
    -     directory. */
    -  if (start == 0)
    -    matches = rl_completion_matches (text, command_generator);
    -
    -  return (matches);
    -}
    -
    -/* Generator function for command completion.  STATE lets us
    -   know whether to start from scratch; without any state
    -   (i.e. STATE == 0), then we start at the top of the list. */
    -char *
    -command_generator (text, state)
    -     const char *text;
    -     int state;
    -{
    -  static int list_index, len;
    -  char *name;
    -
    -  /* If this is a new word to complete, initialize now.  This
    -     includes saving the length of TEXT for efficiency, and
    -     initializing the index variable to 0. */
    -  if (!state)
    -    {
    -      list_index = 0;
    -      len = strlen (text);
    -    }
    -
    -  /* Return the next name which partially matches from the
    -     command list. */
    -  while (name = commands[list_index].name)
    -    {
    -      list_index++;
    -
    -      if (strncmp (name, text, len) == 0)
    -        return (dupstr(name));
    -    }
    -
    -  /* If no names matched, then return NULL. */
    -  return ((char *)NULL);
    -}
    -
    -/* **************************************************************** */
    -/*                                                                  */
    -/*                       FileMan Commands                           */
    -/*                                                                  */
    -/* **************************************************************** */
    -
    -/* String to pass to system ().  This is for the LIST, VIEW and RENAME
    -   commands. */
    -static char syscom[1024];
    -
    -/* List the file(s) named in arg. */
    -com_list (arg)
    -     char *arg;
    -{
    -  if (!arg)
    -    arg = "";
    -
    -  sprintf (syscom, "ls -FClg %s", arg);
    -  return (system (syscom));
    -}
    -
    -com_view (arg)
    -     char *arg;
    -{
    -  if (!valid_argument ("view", arg))
    -    return 1;
    -
    -  sprintf (syscom, "more %s", arg);
    -  return (system (syscom));
    -}
    -
    -com_rename (arg)
    -     char *arg;
    -{
    -  too_dangerous ("rename");
    -  return (1);
    -}
    -
    -com_stat (arg)
    -     char *arg;
    -{
    -  struct stat finfo;
    -
    -  if (!valid_argument ("stat", arg))
    -    return (1);
    -
    -  if (stat (arg, &finfo) == -1)
    -    {
    -      perror (arg);
    -      return (1);
    -    }
    -
    -  printf ("Statistics for `%s':\n", arg);
    -
    -  printf ("%s has %d link%s, and is %d byte%s in length.\n", arg,
    -          finfo.st_nlink,
    -          (finfo.st_nlink == 1) ? "" : "s",
    -          finfo.st_size,
    -          (finfo.st_size == 1) ? "" : "s");
    -  printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
    -  printf ("      Last access at: %s", ctime (&finfo.st_atime));
    -  printf ("    Last modified at: %s", ctime (&finfo.st_mtime));
    -  return (0);
    -}
    -
    -com_delete (arg)
    -     char *arg;
    -{
    -  too_dangerous ("delete");
    -  return (1);
    -}
    -
    -/* Print out help for ARG, or for all of the commands if ARG is
    -   not present. */
    -com_help (arg)
    -     char *arg;
    -{
    -  register int i;
    -  int printed = 0;
    -
    -  for (i = 0; commands[i].name; i++)
    -    {
    -      if (!*arg || (strcmp (arg, commands[i].name) == 0))
    -        {
    -          printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
    -          printed++;
    -        }
    -    }
    -
    -  if (!printed)
    -    {
    -      printf ("No commands match `%s'.  Possibilties are:\n", arg);
    -
    -      for (i = 0; commands[i].name; i++)
    -        {
    -          /* Print in six columns. */
    -          if (printed == 6)
    -            {
    -              printed = 0;
    -              printf ("\n");
    -            }
    -
    -          printf ("%s\t", commands[i].name);
    -          printed++;
    -        }
    -
    -      if (printed)
    -        printf ("\n");
    -    }
    -  return (0);
    -}
    -
    -/* Change to the directory ARG. */
    -com_cd (arg)
    -     char *arg;
    -{
    -  if (chdir (arg) == -1)
    -    {
    -      perror (arg);
    -      return 1;
    -    }
    -
    -  com_pwd ("");
    -  return (0);
    -}
    -
    -/* Print out the current working directory. */
    -com_pwd (ignore)
    -     char *ignore;
    -{
    -  char dir[1024], *s;
    -
    -  s = getcwd (dir, sizeof(dir) - 1);
    -  if (s == 0)
    -    {
    -      printf ("Error getting pwd: %s\n", dir);
    -      return 1;
    -    }
    -
    -  printf ("Current directory is %s\n", dir);
    -  return 0;
    -}
    -
    -/* The user wishes to quit using this program.  Just set DONE
    -   non-zero. */
    -com_quit (arg)
    -     char *arg;
    -{
    -  done = 1;
    -  return (0);
    -}
    -
    -/* Function which tells you that you can't do this. */
    -too_dangerous (caller)
    -     char *caller;
    -{
    -  fprintf (stderr,
    -           "%s: Too dangerous for me to distribute.  Write it yourself.\n",
    -           caller);
    -}
    -
    -/* Return non-zero if ARG is a valid argument for CALLER, else print
    -   an error message and return zero. */
    -int
    -valid_argument (caller, arg)
    -     char *caller, *arg;
    -{
    -  if (!arg || !*arg)
    -    {
    -      fprintf (stderr, "%s: Argument required.\n", caller);
    -      return (0);
    -    }
    -
    -  return (1);
    -}
    -
    - - - -

    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 -
  • - -

    - - -

    Function and Variable Index

    -

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

    -

    _

    - -
  • _rl_digit_p -
  • _rl_digit_value -
  • _rl_lowercase_p -
  • _rl_to_lower -
  • _rl_to_upper -
  • _rl_uppercase_p -
  • -

    a

    - -
  • abort (C-g) -
  • accept-line (Newline or Return) -
  • -

    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 -
  • 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--) -
  • 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

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

    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) -
  • -

    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) -
  • -

    o

    - -
  • output-meta -
  • -

    p

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

    q

    - -
  • quoted-insert (C-q or 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_funmap_entry -
  • rl_add_undo -
  • rl_alphabetic -
  • rl_already_prompted -
  • rl_attempted_completion_function -
  • rl_attempted_completion_over -
  • 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_pending_input -
  • 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_matches -
  • rl_completion_query_items -
  • rl_completion_type -
  • rl_copy_keymap -
  • rl_copy_text -
  • rl_crlf -
  • rl_delete_text -
  • rl_deprep_term_function -
  • rl_deprep_terminal -
  • rl_ding -
  • rl_directory_completion_hook -
  • rl_discard_keymap -
  • rl_dispatching -
  • rl_display_match_list -
  • rl_do_undo -
  • rl_done -
  • rl_editing_mode -
  • rl_end -
  • rl_end_undo_group -
  • rl_erase_empty_line -
  • rl_event_hook -
  • rl_execute_next -
  • rl_executing_keymap -
  • rl_executing_macro -
  • rl_expand_prompt -
  • rl_explicit_arg -
  • rl_extend_line_buffer -
  • rl_filename_completion_desired -
  • rl_filename_completion_function -
  • 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_free_undo_list -
  • rl_function_dumper -
  • rl_function_of_keyseq -
  • rl_funmap_names -
  • rl_generic_bind -
  • rl_get_keymap -
  • rl_get_keymap_by_name -
  • rl_get_keymap_name -
  • rl_getc -
  • rl_getc_function -
  • rl_gnu_readline_p -
  • 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_last_func -
  • 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_num_chars_to_read -
  • rl_numeric_arg -
  • rl_on_new_line -
  • rl_on_new_line_with_prompt -
  • rl_outstream -
  • rl_parse_and_bind -
  • rl_pending_input -
  • rl_point -
  • rl_possible_completions -
  • rl_pre_input_hook -
  • rl_prep_term_function -
  • rl_prep_terminal -
  • rl_prompt -
  • rl_read_init_file -
  • rl_read_key -
  • rl_readline_name -
  • rl_readline_state -
  • 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_key -
  • rl_set_keymap -
  • rl_set_screen_size -
  • rl_set_signals -
  • rl_special_prefixes -
  • rl_startup_hook -
  • rl_stuff_char -
  • rl_terminal_name -
  • rl_tty_set_default_bindings -
  • rl_unbind_command_in_map -
  • rl_unbind_function_in_map -
  • rl_unbind_key -
  • rl_unbind_key_in_map -
  • rl_username_completion_function -
  • -

    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-~) -
  • transpose-chars (C-t) -
  • transpose-words (M-t) -
  • -

    u

    - -
  • undo (C-_ or C-x C-u) -
  • universal-argument () -
  • unix-line-discard (C-u) -
  • unix-word-rubout (C-w) -
  • upcase-word (M-u) -
  • -

    v

    - -
  • visible-stats -
  • -

    y

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

    -


    -This document was generated on 5 Febuary 2001 using the -texi2html -translator version 1.52.

    - - diff --git a/readline/doc/readline.info b/readline/doc/readline.info deleted file mode 100644 --- a/readline/doc/readline.info +++ /dev/null @@ -1,3400 +0,0 @@ -This is readline.info, produced by makeinfo version 4.0 from -/usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -END-INFO-DIR-ENTRY - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - - Copyright (C) 1988-2001 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: readline.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. -* Programming with GNU Readline:: GNU Readline Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text `C-k' is read as `Control-K' and describes the character -produced when the key is pressed while the Control key is depressed. - - The text `M-k' is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the -key is pressed. The Meta key is labeled on many keyboards. On -keyboards with two keys labeled (usually to either side of the -space bar), the on the left side is generally set to work as a -Meta key. The key on the right may also be configured to work as -a Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - - If you do not have a Meta or key, or another key working as a -Meta key, the identical keystroke can be generated by typing -_first_, and then typing . Either process is known as "metafying" -the key. - - The text `M-C-k' is read as `Meta-Control-k' and describes the -character produced by "metafying" `C-k'. - - In addition, several keys have their own names. Specifically, -, , , , , and all stand for themselves -when seen in this text, or in an init file (*note Readline Init File::). -If your keyboard lacks a key, typing will produce the -desired character. The key may be labeled or on -some keyboards. - - -File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press . You do not have to be at the end of -the line to press ; the entire line is accepted regardless of the -location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may mistype a character, and not notice the error -until you have typed several other characters. In that case, you can -type `C-b' to move the cursor to the left, and then correct your -mistake. Afterwards, you can move the cursor to the right with `C-f'. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the bare essentials for editing the text of an input line -follows. - -`C-b' - Move back one character. - -`C-f' - Move forward one character. - - or - Delete the character to the left of the cursor. - -`C-d' - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -`C-_' or `C-x C-u' - Undo the last editing command. You can undo all the way back to an - empty line. - -(Depending on your configuration, the key be set to delete -the character to the left of the cursor and the key set to delete -the character underneath the cursor, like `C-d', rather than the -character to the left of the cursor.) - - -File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to `C-b', `C-f', `C-d', and -. Here are some commands for moving more rapidly about the line. - -`C-a' - Move to the start of the line. - -`C-e' - Move to the end of the line. - -`M-f' - Move forward a word, where a word is composed of letters and - digits. - -`M-b' - Move backward a word. - -`C-l' - Clear the screen, reprinting the current line at the top. - - Notice how `C-f' moves forward a character, while `M-f' moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`Cut' and `paste' are more recent jargon for `kill' and -`yank'.) - - If the description for a command says that it `kills' text, then you -can be sure that you can get the text back in a different (or the same) -place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -`C-k' - Kill the text from the current cursor position to the end of the - line. - -`M-d' - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by `M-f'. - -`M-' - Kill from the cursor the start of the previous word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by `M-b'. - -`C-w' - Kill from the cursor to the previous whitespace. This is - different than `M-' because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -`C-y' - Yank the most recently killed text back into the buffer at the - cursor. - -`M-y' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `C-y' or `M-y'. - - -File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once you -have typed one meta digit to get the argument started, you can type the -remainder of the digits, and then the command. For example, to give -the `C-d' command an argument of 10, you could type `M-1 0 C-d', which -will delete the next ten characters on the input line. - - -File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -"incremental" and "non-incremental". - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. To search backward in the -history for a particular string, type `C-r'. Typing `C-s' searches -forward through the history. The characters present in the value of -the `isearch-terminators' variable are used to terminate an incremental -search. If that variable has not been assigned a value, the and -`C-J' characters will terminate an incremental search. `C-g' will -abort an incremental search and restore the original line. When the -search is terminated, the history entry containing the search string -becomes the current line. - - To find other matching entries in the history list, type `C-r' or -`C-s' as appropriate. This will search backward or forward in the -history for the next entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate the -search and execute that command. For instance, a will terminate -the search and accept the line, thereby executing the command from the -history list. A movement command will terminate the search, make the -last line found the current line, and begin editing. - - Non-incremental searches read the entire search string before -starting to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - - -File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home -directory. The name of this file is taken from the value of the -environment variable `INPUTRC'. If that variable is unset, the default -is `~/.inputrc'. - - When a program which uses the Readline library starts up, the init -file is read, and the key bindings are set. - - In addition, the `C-x C-r' command re-reads this init file, thus -incorporating any changes that you might have made to it. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. This variable must be set to an integer value - greater than or equal to 0. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which default set of key - bindings is used. By default, Readline starts up in Emacs - editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either `emacs' or `vi'. - - `enable-keypad' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not clear the eighth bit in the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::). If this variable has not been - given a value, the characters and `C-J' will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place on a line in - the init file the name of the key you wish to bind the command to, - a colon, and then the name of the command. The name of the key - can be expressed in different ways, depending on what you find most - comfortable. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, `C-u' is bound to the function - `universal-argument', `M-DEL' is bound to the function - `backward-kill-word', and `C-o' is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - A number of symbolic character names are recognized while - processing this key binding syntax: DEL, ESC, ESCAPE, LFD, - NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, `C-u' is again bound to the function - `universal-argument' (just as it was in the first example), - `C-x C-r' is bound to the function `re-read-init-file', and - ` <[> <1> <1> <~>' is bound to insert the text `Function - Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the character whose ASCII code is the octal value NNN (one to - three digits) - - `\xNNN' - the character whose ASCII code is the hexadecimal value NNN - (one to three digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against both the full name of the terminal and - the portion of the terminal name before the first `-'. This - allows `sun' to match both `sun' and `sun-cmd', for instance. - - `application' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. - $include /etc/inputrc - - -File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an INPUTRC file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the Gnu Readline library. Existing programs - # include FTP, Bash, and Gdb. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # First, include any systemwide bindings and variable assignments from - # /etc/Inputrc - $include /etc/Inputrc - - # - # Set various bindings for emacs mode. - - set editing-mode emacs - - $if mode=emacs - - Meta-Control-h: backward-kill-word Text after the function name is ignored - - # - # Arrow keys in keypad mode - # - #"\M-OD": backward-char - #"\M-OC": forward-char - #"\M-OA": previous-history - #"\M-OB": next-history - # - # Arrow keys in ANSI mode - # - "\M-[D": backward-char - "\M-[C": forward-char - "\M-[A": previous-history - "\M-[B": next-history - # - # Arrow keys in 8 bit keypad mode - # - #"\M-\C-OD": backward-char - #"\M-\C-OC": forward-char - #"\M-\C-OA": previous-history - #"\M-\C-OB": next-history - # - # Arrow keys in 8 bit ANSI mode - # - #"\M-\C-[D": backward-char - #"\M-\C-[C": forward-char - #"\M-\C-[A": previous-history - #"\M-\C-[B": next-history - - C-q: quoted-insert - - $endif - - # An old-style binding. This happens to be the default. - TAB: complete - - # Macros that are convenient for shell interaction - $if Bash - # edit the path - "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" - # prepare to type a quoted word -- insert open and close double quotes - # and move to just after the open quote - "\C-x\"": "\"\"\C-b" - # insert a backslash (testing backslash escapes in sequences and macros) - "\C-x\\": "\\" - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - # Add a binding to refresh the line, which is unbound - "\C-xr": redraw-current-line - # Edit variable on current line. - "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" - $endif - - # use a visible bell if one is available - set bell-style visible - - # don't strip characters to 7 bits when reading - set input-meta on - - # allow iso-latin1 characters to be inserted rather than converted to - # prefix-meta sequences - set convert-meta off - - # display characters with the eighth bit set directly rather than - # as meta-prefixed characters - set output-meta on - - # if there are more than 150 possible completions for a word, ask the - # user if he wants to see all of them - set completion-query-items 150 - - # For FTP - $if Ftp - "\C-xg": "get \M-?" - "\C-xt": "put \M-?" - "\M-.": yank-last-arg - $endif - - -File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. - - Command names without an accompanying key sequence are unbound by -default. In the following descriptions, "point" refers to the current -cursor position, and "mark" refers to a cursor position saved by the -`set-mark' command. The text between the point and mark is referred to -as the "region". - - -File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline or Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, it may be added to the history list for future recall - with `add_history()'. If this line is a modified history line, - then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-. or M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not bound to `delete-char', then - return EOF. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q or C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like `C-q', for example. - -`tab-insert (M-)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - - -File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter point is. By - default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `yank' or `yank-pop'. - - -File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. `M--' starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete ()' - Attempt to perform completion on the text before point. The - actual completion performed is application-specific. The default - is filename completion. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `complete', but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of `menu-complete' steps through the list of possible - completions, inserting each match in turn. At the end of the list - of completions, the bell is rung and the original text is restored. - An argument of N moves N positions forward in the list of matches; - a negative argument may be used to move backward through the list. - This command is intended to be bound to , but is unbound by - default. - -`delete-char-or-list ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta ()' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing ` f' is equivalent to typing - `M-f'. - -`undo (C-_ or C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they output. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - - -File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command `M-C-j' (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - This document describes the GNU Readline Library, a utility for -aiding in the consitency of user interface across discrete programs -that need to provide a command line interface. - - Copyright (C) 1988-2001 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: readline.info, Node: Programming with GNU Readline, Next: Concept Index, Prev: Command Line Editing, Up: Top - -Programming with GNU Readline -***************************** - - This chapter describes the interface between the GNU Readline -Library and other programs. If you are a programmer, and you wish to -include the features found in GNU Readline such as completion, line -editing, and interactive history manipulation in your own programs, -this section is for you. - -* Menu: - -* Basic Behavior:: Using the default behavior of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Readline Variables:: Variables accessible to custom - functions. -* Readline Convenience Functions:: Functions which Readline supplies to - aid in writing your own custom - functions. -* Readline Signal Handling:: How Readline behaves when it receives signals. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. - - -File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline - -Basic Behavior -============== - - Many programs provide a command line interface, such as `mail', -`ftp', and `sh'. For such programs, the default behaviour of Readline -is sufficient. This section describes how to use Readline in the -simplest way possible, perhaps to replace calls in your code to -`gets()' or `fgets()'. - - `char *readline (const char *PROMPT);' - - The function `readline()' prints a prompt PROMPT and then reads and -returns a single line of text from the user. If PROMPT is `NULL' or -the empty string, no prompt is displayed. The line `readline' returns -is allocated with `malloc()'; the caller should `free()' the line when -it has finished with it. The declaration for `readline' in ANSI C is - -So, one might say - `char *line = readline ("Enter a line: ");' - -in order to read a line of text from the user. The line returned has -the final newline removed, so only the text remains. - - If `readline' encounters an `EOF' while reading the line, and the -line is empty at that point, then `(char *)NULL' is returned. -Otherwise, the line is ended just as if a newline had been typed. - - If you want the user to be able to get at the line later, (with - for example), you must call `add_history()' to save the line away -in a "history" list of such lines. - - `add_history (line)'; - -For full details on the GNU History Library, see the associated manual. - - It is preferable to avoid saving empty lines on the history list, -since users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard `gets()' library -function, and has the advantage of no static buffer to overflow: - - /* A static variable for holding the line. */ - static char *line_read = (char *)NULL; - - /* Read a string, and return a pointer to it. Returns NULL on EOF. */ - char * - rl_gets () - { - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - free (line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); - } - - This function gives the user the default behaviour of -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the key with -`rl_bind_key()'. - - `int rl_bind_key (int KEY, rl_command_func_t *FUNCTION);' - - `rl_bind_key()' takes two arguments: KEY is the character that you -want to bind, and FUNCTION is the address of the function to call when -KEY is pressed. Binding to `rl_insert()' makes insert -itself. `rl_bind_key()' returns non-zero if KEY is not a valid ASCII -character code (between 0 and 255). - - Thus, to disable the default behavior, the following suffices: - `rl_bind_key ('\t', rl_insert);' - - This code should be executed once at the start of your program; you -might write a function called `initialize_readline()' which performs -this and other desired initializations, such as installing custom -completers (*note Custom Completers::). - - -File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline - -Custom Functions -================ - - Readline provides many functions for manipulating the text of the -line, but it isn't possible to anticipate the needs of all programs. -This section describes the various functions and variables defined -within the Readline library which allow a user program to add -customized functionality to Readline. - - Before declaring any functions that customize Readline's behavior, or -using any functionality Readline provides in other code, an application -writer should include the file `' in any file that -uses Readline's features. Since some of the definitions in -`readline.h' use the `stdio' library, the file `' should be -included before `readline.h'. - -* Menu: - -* Readline Typedefs:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. - - -File: readline.info, Node: Readline Typedefs, Next: Function Writing, Up: Custom Functions - -Readline Typedefs ------------------ - - For readabilty, we declare a number of new object types, all pointers -to functions. - - The reason for declaring these new types is to make it easier to -write code describing pointers to C functions with appropriately -prototyped arguments and return values. - - For instance, say we want to declare a variable FUNC as a pointer to -a function which takes two `int' arguments and returns an `int' (this -is the type of all of the Readline bindable functions). Instead of the -classic C declaration - - `int (*func)();' - -or the ANSI-C style declaration - - `int (*func)(int, int);' - -we may write - - `rl_command_func_t *func;' - - The full list of function pointer types available is - -`typedef int rl_command_func_t (int, int);' - -`typedef char *rl_compentry_func_t (const char *, int);' - -`typedef char **rl_completion_func_t (const char *, int, int);' - -`typedef char *rl_quote_func_t (char *, int, char *);' - -`typedef char *rl_dequote_func_t (char *, int);' - -`typedef int rl_compignore_func_t (char **);' - -`typedef void rl_compdisp_func_t (char **, int, int);' - -`typedef int rl_hook_func_t (void);' - -`typedef int rl_getc_func_t (FILE *);' - -`typedef int rl_linebuf_func_t (char *, int);' - -`typedef int rl_intfunc_t (int);' - -`#define rl_ivoidfunc_t rl_hook_func_t' - -`typedef int rl_icpfunc_t (char *);' - -`typedef int rl_icppfunc_t (char **);' - -`typedef void rl_voidfunc_t (void);' - -`typedef void rl_vintfunc_t (int);' - -`typedef void rl_vcpfunc_t (char *);' - -`typedef void rl_vcppfunc_t (char **);' - -File: readline.info, Node: Function Writing, Prev: Readline Typedefs, Up: Custom Functions - -Writing a New Function ----------------------- - - In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - - The calling sequence for a command `foo' looks like - - `foo (int count, int key)' - -where COUNT is the numeric argument (or 1 if defaulted) and KEY is the -key that invoked this function. - - It is completely up to the function as to what should be done with -the numeric argument. Some functions use it as a repeat count, some as -a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a function uses the numeric argument as a -repeat count, it should be able to do something useful with both -negative and positive arguments. At the very least, it should be aware -that it can be passed a negative argument. - - -File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline - -Readline Variables -================== - - These variables are available to function writers. - - - Variable: char * rl_line_buffer - This is the line gathered so far. You are welcome to modify the - contents of the line, but see *Note Allowing Undoing::. The - function `rl_extend_line_buffer' is available to increase the - memory allocated to `rl_line_buffer'. - - - Variable: int rl_point - The offset of the current cursor position in `rl_line_buffer' (the - _point_). - - - Variable: int rl_end - The number of characters present in `rl_line_buffer'. When - `rl_point' is at the end of the line, `rl_point' and `rl_end' are - equal. - - - Variable: int rl_mark - The MARK (saved position) in the current line. If set, the mark - and point define a _region_. - - - Variable: int rl_done - Setting this to a non-zero value causes Readline to return the - current line immediately. - - - Variable: int rl_num_chars_to_read - Setting this to a positive value before calling `readline()' causes - Readline to return after accepting that many characters, rather - than reading up to a character bound to `accept-line'. - - - Variable: int rl_pending_input - Setting this to a value makes it the next keystroke read. This is - a way to stuff a single character into the input stream. - - - Variable: int rl_dispatching - Set to a non-zero value if a function is being called from a key - binding; zero otherwise. Application functions can test this to - discover whether they were called directly or by Readline's - dispatching mechanism. - - - Variable: int rl_erase_empty_line - Setting this to a non-zero value causes Readline to completely - erase the current line, including any prompt, any time a newline - is typed as the only character on an otherwise-empty line. The - cursor is moved to the beginning of the newly-blank line. - - - Variable: char * rl_prompt - The prompt Readline uses. This is set from the argument to - `readline()', and should not be assigned to directly. - - - Variable: int rl_already_prompted - If an application wishes to display the prompt itself, rather than - have Readline do it the first time `readline()' is called, it - should set this variable to a non-zero value after displaying the - prompt. The prompt must also be passed as the argument to - `readline()' so the redisplay functions can update the display - properly. The calling application is responsible for managing the - value; Readline never sets it. - - - Variable: const char * rl_library_version - The version number of this revision of the library. - - - Variable: int rl_gnu_readline_p - Always set to 1, denoting that this is GNU readline rather than - some emulation. - - - Variable: const char * rl_terminal_name - The terminal type, used for initialization. If not set by the - application, Readline sets this to the value of the `TERM' - environment variable the first time it is called. - - - Variable: const char * rl_readline_name - This variable is set to a unique name by each application using - Readline. The value allows conditional parsing of the inputrc file - (*note Conditional Init Constructs::). - - - Variable: FILE * rl_instream - The stdio stream from which Readline reads input. - - - Variable: FILE * rl_outstream - The stdio stream to which Readline performs output. - - - Variable: rl_command_func_t * rl_last_func - The address of the last command function Readline executed. May - be used to test whether or not a function is being executed twice - in succession, for example. - - - Variable: rl_hook_func_t * rl_startup_hook - If non-zero, this is the address of a function to call just before - `readline' prints the first prompt. - - - Variable: rl_hook_func_t * rl_pre_input_hook - If non-zero, this is the address of a function to call after the - first prompt has been printed and just before `readline' starts - reading input characters. - - - Variable: rl_hook_func_t * rl_event_hook - If non-zero, this is the address of a function to call periodically - when readline is waiting for terminal input. - - - Variable: rl_getc_func_t * rl_getc_function - If non-zero, `readline' will call indirectly through this pointer - to get a character from the input stream. By default, it is set to - `rl_getc', the default `readline' character input function (*note - Character Input::). - - - Variable: rl_voidfunc_t * rl_redisplay_function - If non-zero, `readline' will call indirectly through this pointer - to update the display with the current contents of the editing - buffer. By default, it is set to `rl_redisplay', the default - `readline' redisplay function (*note Redisplay::). - - - Variable: rl_vintfunc_t * rl_prep_term_function - If non-zero, `readline' will call indirectly through this pointer - to initialize the terminal. The function takes a single argument, - an `int' flag that says whether or not to use eight-bit characters. - By default, this is set to `rl_prep_terminal' (*note Terminal - Management::). - - - Variable: rl_voidfunc_t * rl_deprep_term_function - If non-zero, `readline' will call indirectly through this pointer - to reset the terminal. This function should undo the effects of - `rl_prep_term_function'. By default, this is set to - `rl_deprep_terminal' (*note Terminal Management::). - - - Variable: Keymap rl_executing_keymap - This variable is set to the keymap (*note Keymaps::) in which the - currently executing readline function was found. - - - Variable: Keymap rl_binding_keymap - This variable is set to the keymap (*note Keymaps::) in which the - last key binding occurred. - - - Variable: char * rl_executing_macro - This variable is set to the text of any currently-executing macro. - - - Variable: int rl_readline_state - A variable with bit values that encapsulate the current Readline - state. A bit is set with the `RL_SETSTATE' macro, and unset with - the `RL_UNSETSTATE' macro. Use the `RL_ISSTATE' macro to test - whether a particular state bit is set. Current state bits include: - - `RL_STATE_NONE' - Readline has not yet been called, nor has it begun to - intialize. - - `RL_STATE_INITIALIZING' - Readline is initializing its internal data structures. - - `RL_STATE_INITIALIZED' - Readline has completed its initialization. - - `RL_STATE_TERMPREPPED' - Readline has modified the terminal modes to do its own input - and redisplay. - - `RL_STATE_READCMD' - Readline is reading a command from the keyboard. - - `RL_STATE_METANEXT' - Readline is reading more input after reading the meta-prefix - character. - - `RL_STATE_DISPATCHING' - Readline is dispatching to a command. - - `RL_STATE_MOREINPUT' - Readline is reading more input while executing an editing - command. - - `RL_STATE_ISEARCH' - Readline is performing an incremental history search. - - `RL_STATE_NSEARCH' - Readline is performing a non-incremental history search. - - `RL_STATE_SEARCH' - Readline is searching backward or forward through the history - for a string. - - `RL_STATE_NUMERICARG' - Readline is reading a numeric argument. - - `RL_STATE_MACROINPUT' - Readline is currently getting its input from a - previously-defined keyboard macro. - - `RL_STATE_MACRODEF' - Readline is currently reading characters defining a keyboard - macro. - - `RL_STATE_OVERWRITE' - Readline is in overwrite mode. - - `RL_STATE_COMPLETING' - Readline is performing word completion. - - `RL_STATE_SIGHANDLER' - Readline is currently executing the readline signal handler. - - `RL_STATE_UNDOING' - Readline is performing an undo. - - `RL_STATE_DONE' - Readline has read a key sequence bound to `accept-line' and - is about to return the line to the caller. - - - - Variable: int rl_explicit_arg - Set to a non-zero value if an explicit numeric argument was - specified by the user. Only valid in a bindable command function. - - - Variable: int rl_numeric_arg - Set to the value of any numeric argument explicitly specified by - the user before executing the current Readline function. Only - valid in a bindable command function. - - - Variable: int rl_editing_mode - Set to a value denoting Readline's current editing mode. A value - of EMACS_MODE means Readline is currently in emacs mode; VI_MODE - means that vi mode is active. - - -File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline - -Readline Convenience Functions -============================== - -* Menu: - -* Function Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Associating Function Names and Bindings:: Translate function names to - key sequences. -* Allowing Undoing:: How to make your functions undoable. -* Redisplay:: Functions to control line display. -* Modifying Text:: Functions to modify `rl_line_buffer'. -* Character Input:: Functions to read keyboard input. -* Terminal Management:: Functions to manage terminal settings. -* Utility Functions:: Generally useful functions and hooks. -* Alternate Interface:: Using Readline in a `callback' fashion. - - -File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions - -Naming a Function ------------------ - - The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - - Meta-Rubout: backward-kill-word - - This binds the keystroke to the function -_descriptively_ named `backward-kill-word'. You, as the programmer, -should bind the functions you write to descriptive names as well. -Readline provides a function for doing that: - - - Function: int rl_add_defun (const char *name, rl_command_func_t - *function, int key) - Add NAME to the list of named functions. Make FUNCTION be the - function that gets called. If KEY is not -1, then bind it to - FUNCTION using `rl_bind_key()'. - - Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other than adding a -function to Readline, you may need to use the underlying functions -described below. - - -File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions - -Selecting a Keymap ------------------- - - Key bindings take place on a "keymap". The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - - - Function: Keymap rl_make_bare_keymap (void) - Returns a new, empty keymap. The space for the keymap is - allocated with `malloc()'; the caller should free it by calling - `rl_discard_keymap()' when done. - - - Function: Keymap rl_copy_keymap (Keymap map) - Return a new keymap which is a copy of MAP. - - - Function: Keymap rl_make_keymap (void) - Return a new keymap with the printing characters bound to - rl_insert, the lowercase Meta characters bound to run their - equivalents, and the Meta digits bound to produce numeric - arguments. - - - Function: void rl_discard_keymap (Keymap keymap) - Free the storage associated with KEYMAP. - - Readline has several internal keymaps. These functions allow you to -change which keymap is active. - - - Function: Keymap rl_get_keymap (void) - Returns the currently active keymap. - - - Function: void rl_set_keymap (Keymap keymap) - Makes KEYMAP the currently active keymap. - - - Function: Keymap rl_get_keymap_by_name (const char *name) - Return the keymap matching NAME. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::). - - - Function: char * rl_get_keymap_name (Keymap keymap) - Return the name matching KEYMAP. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::). - - -File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions - -Binding Keys ------------- - - Key sequences are associate with functions through the keymap. -Readline has several internal keymaps: `emacs_standard_keymap', -`emacs_meta_keymap', `emacs_ctlx_keymap', `vi_movement_keymap', and -`vi_insertion_keymap'. `emacs_standard_keymap' is the default, and the -examples in this manual assume that. - - Since `readline()' installs a set of default key bindings the first -time it is called, there is always the danger that a custom binding -installed before the first call to `readline()' will be overridden. An -alternate mechanism is to install custom key bindings in an -initialization function assigned to the `rl_startup_hook' variable -(*note Readline Variables::). - - These functions manage key bindings. - - - Function: int rl_bind_key (int key, rl_command_func_t *function) - Binds KEY to FUNCTION in the currently active keymap. Returns - non-zero in the case of an invalid KEY. - - - Function: int rl_bind_key_in_map (int key, rl_command_func_t - *function, Keymap map) - Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an - invalid KEY. - - - Function: int rl_unbind_key (int key) - Bind KEY to the null function in the currently active keymap. - Returns non-zero in case of error. - - - Function: int rl_unbind_key_in_map (int key, Keymap map) - Bind KEY to the null function in MAP. Returns non-zero in case of - error. - - - Function: int rl_unbind_function_in_map (rl_command_func_t - *function, Keymap map) - Unbind all keys that execute FUNCTION in MAP. - - - Function: int rl_unbind_command_in_map (const char *command, Keymap - map) - Unbind all keys that are bound to COMMAND in MAP. - - - Function: int rl_set_key (const char *keyseq, rl_command_func_t - *function, Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - function FUNCTION. This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_generic_bind (int type, const char *keyseq, char - *data, Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - arbitrary pointer DATA. TYPE says what kind of data is pointed to - by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or - a keymap (`ISKMAP'). This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_parse_and_bind (char *line) - Parse LINE as if it had been read from the `inputrc' file and - perform any key bindings and variable assignments found (*note - Readline Init File::). - - - Function: int rl_read_init_file (const char *filename) - Read keybindings and variable assignments from FILENAME (*note - Readline Init File::). - - -File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions - -Associating Function Names and Bindings ---------------------------------------- - - These functions allow you to find out what keys invoke named -functions and the functions invoked by a particular key sequence. You -may also associate a new function name with an arbitrary function. - - - Function: rl_command_func_t * rl_named_function (const char *name) - Return the function with name NAME. - - - Function: rl_command_func_t * rl_function_of_keyseq (const char - *keyseq, Keymap map, int *type) - Return the function invoked by KEYSEQ in keymap MAP. If MAP is - `NULL', the current keymap is used. If TYPE is not `NULL', the - type of the object is returned in the `int' variable it points to - (one of `ISFUNC', `ISKMAP', or `ISMACR'). - - - Function: char ** rl_invoking_keyseqs (rl_command_func_t *function) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the current keymap. - - - Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t - *function, Keymap map) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the keymap MAP. - - - Function: void rl_function_dumper (int readable) - Print the readline function names and the key sequences currently - bound to them to `rl_outstream'. If READABLE is non-zero, the - list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: void rl_list_funmap_names (void) - Print the names of all bindable Readline functions to - `rl_outstream'. - - - Function: const char ** rl_funmap_names (void) - Return a NULL terminated array of known function names. The array - is sorted. The array itself is allocated, but not the strings - inside. You should `free()' the array when you are done, but not - the pointers. - - - Function: int rl_add_funmap_entry (const char *name, - rl_command_func_t *function) - Add NAME to the list of bindable Readline command names, and make - FUNCTION the function to be called when NAME is invoked. - - -File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions - -Allowing Undoing ----------------- - - Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try something if -you know you can undo it. - - If your function simply inserts text once, or deletes text once, and -uses `rl_insert_text()' or `rl_delete_text()' to do it, then undoing is -already done for you automatically. - - If you do multiple insertions or multiple deletions, or any -combination of these operations, you should group them together into -one operation. This is done with `rl_begin_undo_group()' and -`rl_end_undo_group()'. - - The types of events that can be undone are: - - enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; - - Notice that `UNDO_DELETE' means to insert some text, and -`UNDO_INSERT' means to delete some text. That is, the undo code tells -what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are tags -added by `rl_begin_undo_group()' and `rl_end_undo_group()'. - - - Function: int rl_begin_undo_group (void) - Begins saving undo information in a group construct. The undo - information usually comes from calls to `rl_insert_text()' and - `rl_delete_text()', but could be the result of calls to - `rl_add_undo()'. - - - Function: int rl_end_undo_group (void) - Closes the current undo group started with `rl_begin_undo_group - ()'. There should be one call to `rl_end_undo_group()' for each - call to `rl_begin_undo_group()'. - - - Function: void rl_add_undo (enum undo_code what, int start, int end, - char *text) - Remember how to undo an event (according to WHAT). The affected - text runs from START to END, and encompasses TEXT. - - - Function: void rl_free_undo_list (void) - Free the existing undo list. - - - Function: int rl_do_undo (void) - Undo the first thing on the undo list. Returns `0' if there was - nothing to undo, non-zero if something was undone. - - Finally, if you neither insert nor delete text, but directly modify -the existing text (e.g., change its case), call `rl_modifying()' once, -just before you modify the text. You must supply the indices of the -text range that you are going to modify. - - - Function: int rl_modifying (int start, int end) - Tell Readline to save the text between START and END as a single - undo unit. It is assumed that you will subsequently modify that - text. - - -File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions - -Redisplay ---------- - - - Function: void rl_redisplay (void) - Change what's displayed on the screen to reflect the current - contents of `rl_line_buffer'. - - - Function: int rl_forced_update_display (void) - Force the line to be updated and redisplayed, whether or not - Readline thinks the screen display is correct. - - - Function: int rl_on_new_line (void) - Tell the update functions that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - Function: int rl_on_new_line_with_prompt (void) - Tell the update functions that we have moved onto a new line, with - RL_PROMPT already displayed. This could be used by applications - that want to output the prompt string themselves, but still need - Readline to know the prompt string length for redisplay. It - should be used after setting RL_ALREADY_PROMPTED. - - - Function: int rl_reset_line_state (void) - Reset the display state to a clean state and redisplay the current - line starting on a new line. - - - Function: int rl_crlf (void) - Move the cursor to the start of the next screen line. - - - Function: int rl_message (const char *, ...) - The arguments are a format string as would be supplied to `printf', - possibly containing conversion specifications such as `%d', and - any additional arguments necessary to satisfy the conversion - specifications. The resulting string is displayed in the "echo - area". The echo area is also used to display numeric arguments - and search strings. - - - Function: int rl_clear_message (void) - Clear the message in the echo area. - - - Function: void rl_save_prompt (void) - Save the local Readline prompt display state in preparation for - displaying a new message in the message area with `rl_message()'. - - - Function: void rl_restore_prompt (void) - Restore the local Readline prompt display state saved by the most - recent call to `rl_save_prompt'. - - - Function: int rl_expand_prompt (char *prompt) - Expand any special character sequences in PROMPT and set up the - local Readline prompt redisplay variables. This function is - called by `readline()'. It may also be called to expand the - primary prompt if the `rl_on_new_line_with_prompt()' function or - `rl_already_prompted' variable is used. It returns the number of - visible characters on the last line of the (possibly multi-line) - prompt. - - -File: readline.info, Node: Modifying Text, Next: Character Input, Prev: Redisplay, Up: Readline Convenience Functions - -Modifying Text --------------- - - - Function: int rl_insert_text (const char *text) - Insert TEXT into the line at the current cursor position. - - - Function: int rl_delete_text (int start, int end) - Delete the text between START and END in the current line. - - - Function: char * rl_copy_text (int start, int end) - Return a copy of the text between START and END in the current - line. - - - Function: int rl_kill_text (int start, int end) - Copy the text between START and END in the current line to the - kill ring, appending or prepending to the last kill if the last - command was a kill command. The text is deleted. If START is - less than END, the text is appended, otherwise prepended. If the - last command was not a kill, a new kill ring slot is used. - - -File: readline.info, Node: Character Input, Next: Terminal Management, Prev: Modifying Text, Up: Readline Convenience Functions - -Character Input ---------------- - - - Function: int rl_read_key (void) - Return the next character available from Readline's current input - stream. This handles input inserted into the input stream via - RL_PENDING_INPUT (*note Readline Variables::) and - `rl_stuff_char()', macros, and characters read from the keyboard. - - - Function: int rl_getc (FILE *stream) - Return the next character available from STREAM, which is assumed - to be the keyboard. - - - Function: int rl_stuff_char (int c) - Insert C into the Readline input stream. It will be "read" before - Readline attempts to read characters from the terminal with - `rl_read_key()'. - - - Function: int rl_execute_next (int c) - Make C be the next command to be executed when `rl_read_key()' is - called. This sets RL_PENDING_INPUT. - - - Function: int rl_clear_pending_input (void) - Unet RL_PENDING_INPUT, effectively negating the effect of any - previous call to `rl_execute_next()'. This works only if the - pending input has not already been read with `rl_read_key()'. - - -File: readline.info, Node: Terminal Management, Next: Utility Functions, Prev: Character Input, Up: Readline Convenience Functions - -Terminal Management -------------------- - - - Function: int rl_prep_terminal (int meta_flag) - Modify the terminal settings for Readline's use, so `readline()' - can read a single character at a time from the keyboard. The - META_FLAG argument should be non-zero if Readline should read - eight-bit input. - - - Function: in rl_deprep_terminal (void) - Undo the effects of `rl_prep_terminal()', leaving the terminal in - the state in which it was before the most recent call to - `rl_prep_terminal()'. - - - Function: void rl_tty_set_default_bindings (Keymap kmap) - Read the operating system's terminal editing characters (as would - be displayed by `stty' to their readline equivalents. The - bindings are performed in KMAP. - - - Function: int rl_reset_terminal (const char *terminal_name) - Reinitialize Readline's idea of the terminal settings using - TERMINAL_NAME as the terminal type (e.g., `vt100'). If - TERMINAL_NAME is NULL, the value of the `TERM' environment - variable is used. - - -File: readline.info, Node: Utility Functions, Next: Alternate Interface, Prev: Terminal Management, Up: Readline Convenience Functions - -Utility Functions ------------------ - - - Function: int rl_extend_line_buffer (int len) - Ensure that `rl_line_buffer' has enough space to hold LEN - characters, possibly reallocating it if necessary. - - - Function: int rl_initialize (void) - Initialize or re-initialize Readline's internal state. It's not - strictly necessary to call this; `readline()' calls it before - reading any input. - - - Function: int rl_ding (void) - Ring the terminal bell, obeying the setting of `bell-style'. - - - Function: int rl_alphabetic (int c) - Return 1 if C is an alphabetic character. - - - Function: void rl_display_match_list (char **matches, int len, int - max) - A convenience function for displaying a list of strings in - columnar format on Readline's output stream. `matches' is the list - of strings, in argv format, such as a list of completion matches. - `len' is the number of strings in `matches', and `max' is the - length of the longest string in `matches'. This function uses the - setting of `print-completions-horizontally' to select how the - matches are displayed (*note Readline Init File Syntax::). - - The following are implemented as macros, defined in `chardefs.h'. -Applications should refrain from using them. - - - Function: int _rl_uppercase_p (int c) - Return 1 if C is an uppercase alphabetic character. - - - Function: int _rl_lowercase_p (int c) - Return 1 if C is a lowercase alphabetic character. - - - Function: int _rl_digit_p (int c) - Return 1 if C is a numeric character. - - - Function: int _rl_to_upper (int c) - If C is a lowercase alphabetic character, return the corresponding - uppercase character. - - - Function: int _rl_to_lower (int c) - If C is an uppercase alphabetic character, return the corresponding - lowercase character. - - - Function: int _rl_digit_value (int c) - If C is a number, return the value it represents. - - -File: readline.info, Node: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions - -Alternate Interface -------------------- - - An alternate interface is available to plain `readline()'. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to `select()' on -various file descriptors. To accomodate this need, readline can also -be invoked as a `callback' function from an event loop. There are -functions available to make this easy. - - - Function: void rl_callback_handler_install (const char *prompt, - rl_vcpfunc_t *lhandler) - Set up the terminal for readline I/O and display the initial - expanded value of PROMPT. Save the value of LHANDLER to use as a - function to call when a complete line of input has been entered. - The function takes the text of the line as an argument. - - - Function: void rl_callback_read_char (void) - Whenever an application determines that keyboard input is - available, it should call `rl_callback_read_char()', which will - read the next character from the current input source. If that - character completes the line, `rl_callback_read_char' will invoke - the LHANDLER function saved by `rl_callback_handler_install' to - process the line. `EOF' is indicated by calling LHANDLER with a - `NULL' line. - - - Function: void rl_callback_handler_remove (void) - Restore the terminal to its initial state and remove the line - handler. This may be called from within a callback as well as - independently. - -An Example ----------- - - Here is a function which changes lowercase characters to their -uppercase equivalents, and uppercase characters to lowercase. If this -function was bound to `M-c', then typing `M-c' would change the case of -the character under point. Typing `M-1 0 M-c' would change the case of -the following 10 characters, leaving the cursor on the last character -changed. - - /* Invert the case of the COUNT following characters. */ - int - invert_case_line (count, key) - int count, key; - { - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, so it will save - the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (_rl_uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); - else if (_rl_lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); - } - - -File: readline.info, Node: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline - -Readline Signal Handling -======================== - - Signals are asynchronous events sent to a process by the Unix kernel, -sometimes on behalf of another process. They are intended to indicate -exceptional events, like a user pressing the interrupt key on his -terminal, or a network connection being broken. There is a class of -signals that can be sent to the process currently reading input from -the keyboard. Since Readline changes the terminal attributes when it -is called, it needs to perform special processing when 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()' below). - - There is an additional Readline signal handler, for `SIGWINCH', which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an `xterm'). The Readline `SIGWINCH' -handler updates Readline's internal screen size information, and then -calls any `SIGWINCH' signal handler the calling application has -installed. Readline calls the application's `SIGWINCH' signal handler -without resetting the terminal to its original state. If the -application's signal handler does more than update its idea of the -terminal size and return (for example, a `longjmp' back to a main -processing loop), it _must_ call `rl_cleanup_after_signal()' (described -below), to restore the terminal state. - - Readline provides two variables that allow application writers to -control whether or not it will catch certain signals and act on them -when they are received. It is important that applications change the -values of these variables only when calling `readline()', not in a -signal handler, so Readline's internal signal state is not corrupted. - - - Variable: int rl_catch_signals - If this variable is non-zero, Readline will install signal - handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', `SIGTSTP', - `SIGTTIN', and `SIGTTOU'. - - The default value of `rl_catch_signals' is 1. - - - Variable: int rl_catch_sigwinch - If this variable is non-zero, Readline will install a signal - handler for `SIGWINCH'. - - The default value of `rl_catch_sigwinch' is 1. - - If an application does not wish to have Readline catch any signals, -or to handle signals other than those Readline catches (`SIGHUP', for -example), Readline provides convenience functions to do the necessary -terminal and internal state cleanup upon receipt of a signal. - - - Function: void rl_cleanup_after_signal (void) - This function will reset the state of the terminal to what it was - before `readline()' was called, and remove the Readline signal - handlers for all signals, depending on the values of - `rl_catch_signals' and `rl_catch_sigwinch'. - - - Function: void rl_free_line_state (void) - This will free any partial state associated with the current input - line (undo information, any partial history entry, any - partially-entered keyboard macro, and any partially-entered - numeric argument). This should be called before - `rl_cleanup_after_signal()'. The Readline signal handler for - `SIGINT' calls this to abort the current input line. - - - Function: void rl_reset_after_signal (void) - This will reinitialize the terminal and reinstall any Readline - signal handlers, depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - If an application does not wish Readline to catch `SIGWINCH', it may -call `rl_resize_terminal()' or `rl_set_screen_size()' to force Readline -to update its idea of the terminal size when a `SIGWINCH' is received. - - - Function: void rl_resize_terminal (void) - Update Readline's internal screen size by reading values from the - kernel. - - - Function: void rl_set_screen_size (int rows, int cols) - Set Readline's idea of the terminal size to ROWS rows and COLS - columns. - - The following functions install and remove Readline's signal -handlers. - - - Function: int rl_set_signals (void) - Install Readline's signal handler for `SIGINT', `SIGQUIT', - `SIGTERM', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU', and - `SIGWINCH', depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - - Function: int rl_clear_signals (void) - Remove all of the Readline signal handlers installed by - `rl_set_signals()'. - - -File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, Up: Programming with GNU Readline - -Custom Completers -================= - - Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. The following -sections describe how your program and Readline cooperate to provide -this service. - -* Menu: - -* How Completing Works:: The logic used to do completion. -* Completion Functions:: Functions provided by Readline. -* Completion Variables:: Variables which control completion. -* A Short Completion Example:: An example of writing completer subroutines. - - -File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers - -How Completing Works --------------------- - - In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately expand a -partial word without knowing all of the possible words which make sense -in that context. The Readline library provides the user interface to -completion, and two of the most common completion functions: filename -and username. For completing other types of text, you must write your -own completion function. This section describes exactly what such -functions must do, and provides an example. - - There are three major functions used to perform completion: - - 1. The user-interface function `rl_complete()'. This function is - called with the same arguments as other bindable Readline - functions: COUNT and INVOKING_KEY. It isolates the word to be - completed and calls `rl_completion_matches()' to generate a list - of possible completions. It then either lists the possible - completions, inserts the possible completions, or actually - performs the completion, depending on which behavior is desired. - - 2. The internal function `rl_completion_matches()' uses an - application-supplied "generator" function to generate the list of - possible matches, and then returns the array of these matches. - The caller should place the address of its generator function in - `rl_completion_entry_function'. - - 3. The generator function is called repeatedly from - `rl_completion_matches()', returning a string each time. The - arguments to the generator function are TEXT and STATE. TEXT is - the partial word to be completed. STATE is zero the first time - the function is called, allowing the generator to perform any - necessary initialization, and a positive non-zero integer for each - subsequent call. The generator function returns `(char *)NULL' to - inform `rl_completion_matches()' that there are no more - possibilities left. Usually the generator function computes the - list of possible completions when STATE is zero, and returns them - one at a time on subsequent calls. Each string the generator - function returns as a match must be allocated with `malloc()'; - Readline frees the strings when it has finished with them. - - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `rl_completion_matches()'). The default is to do filename - completion. - - - Variable: rl_compentry_func_t * rl_completion_entry_function - This is a pointer to the generator function for - `rl_completion_matches()'. If the value of - `rl_completion_entry_function' is `NULL' then the default filename - generator function, `rl_filename_completion_function()', is used. - - -File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers - -Completion Functions --------------------- - - Here is the complete list of callable completion functions present in -Readline. - - - Function: int rl_complete_internal (int what_to_do) - Complete the word at or before point. WHAT_TO_DO says what to do - with the completion. A value of `?' means list the possible - completions. `TAB' means do standard completion. `*' means - insert all of the possible completions. `!' means to display all - of the possible completions, if there is more than one, as well as - performing partial completion. - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `rl_completion_matches()' and `rl_completion_entry_function'). - The default is to do filename completion. This calls - `rl_complete_internal()' with an argument depending on - INVOKING_KEY. - - - Function: int rl_possible_completions (int count, int invoking_key) - List the possible completions. See description of `rl_complete - ()'. This calls `rl_complete_internal()' with an argument of `?'. - - - Function: int rl_insert_completions (int count, int invoking_key) - Insert the list of possible completions into the line, deleting the - partially-completed word. See description of `rl_complete()'. - This calls `rl_complete_internal()' with an argument of `*'. - - - Function: char ** rl_completion_matches (const char *text, - rl_compentry_func_t *entry_func) - Returns an array of `(char *)' which is a list of completions for - TEXT. If there are no completions, returns `NULL'. The first - entry in the returned array is the substitution for TEXT. The - remaining entries are the possible completions. The array is - terminated with a `NULL' pointer. - - ENTRY_FUNC is a function of two args, and returns a `(char *)'. - The first argument is TEXT. The second is a state argument; it is - zero on the first call, and non-zero on subsequent calls. - ENTRY_FUNC returns a `NULL' pointer to the caller when there are - no more matches. - - - Function: char * rl_filename_completion_function (const char *text, - int state) - A generator function for filename completion in the general case. - Note that completion in Bash is a little different because of all - the pathnames that must be followed when looking up completions - for a command. The Bash source is a useful reference for writing - custom completion functions. - - - Function: char * rl_username_completion_function (const char *text, - int state) - A completion generator for usernames. TEXT contains a partial - username preceded by a random character (usually `~'). As with all - completion generators, STATE is zero on the first call and non-zero - for subsequent calls. - - -File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers - -Completion Variables --------------------- - - - Variable: rl_compentry_func_t * rl_completion_entry_function - A pointer to the generator function for `rl_completion_matches()'. - `NULL' means to use `rl_filename_completion_function()', the - default filename completer. - - - Variable: rl_completion_func_t * rl_attempted_completion_function - A pointer to an alternative function to create matches. The - function is called with TEXT, START, and END. START and END are - indices in `rl_line_buffer' defining the boundaries of TEXT, which - is a character string. If this function exists and returns - `NULL', or if this variable is set to `NULL', then `rl_complete()' - will call the value of `rl_completion_entry_function' to generate - matches, otherwise the array of strings returned will be used. If - this function sets the `rl_attempted_completion_over' variable to - a non-zero value, Readline will not perform its default completion - if this function returns no matches. - - - Variable: rl_quote_func_t * rl_filename_quoting_function - A pointer to a function that will quote a filename in an - application-specific fashion. This is called if filename - completion is being attempted and one of the characters in - `rl_filename_quote_characters' appears in a completed filename. - The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. - The TEXT is the filename to be quoted. The MATCH_TYPE is either - `SINGLE_MATCH', if there is only one completion match, or - `MULT_MATCH'. Some functions use this to decide whether or not to - insert a closing quote character. The QUOTE_POINTER is a pointer - to any opening quote character the user typed. Some functions - choose to reset this character. - - - Variable: rl_dequote_func_t * rl_filename_dequoting_function - A pointer to a function that will remove application-specific - quoting characters from a filename before completion is attempted, - so those characters do not interfere with matching the text - against names in the filesystem. It is called with TEXT, the text - of the word to be dequoted, and QUOTE_CHAR, which is the quoting - character that delimits the filename (usually `'' or `"'). If - QUOTE_CHAR is zero, the filename was not in an embedded string. - - - Variable: rl_linebuf_func_t * rl_char_is_quoted_p - A pointer to a function to call that determines whether or not a - specific character in the line buffer is quoted, according to - whatever quoting mechanism the program calling readline uses. The - function is called with two arguments: TEXT, the text of the line, - and INDEX, the index of the character in the line. It is used to - decide whether a character found in - `rl_completer_word_break_characters' should be used to break words - for the completer. - - - Variable: int rl_completion_query_items - Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she is - sure she wants to see them all. The default value is 100. - - - Variable: const char * rl_basic_word_break_characters - The basic list of characters that signal a break between words for - the completer routine. The default value of this variable is the - characters which break words for completion in Bash, i.e., `" - \t\n\"\\'`@$><=;|&{("'. - - - Variable: const char * rl_basic_quote_characters - List of quote characters which can cause a word break. - - - Variable: const char * rl_completer_word_break_characters - The list of characters that signal a break between words for - `rl_complete_internal()'. The default list is the value of - `rl_basic_word_break_characters'. - - - Variable: const char * rl_completer_quote_characters - List of characters which can be used to quote a substring of the - line. Completion occurs on the entire substring, and within the - substring `rl_completer_word_break_characters' are treated as any - other character, unless they also appear within this list. - - - Variable: const char * rl_filename_quote_characters - A list of characters that cause a filename to be quoted by the - completer when they appear in a completed filename. The default - is the null string. - - - Variable: const char * rl_special_prefixes - The list of characters that are word break characters, but should - be left in TEXT when it is passed to the completion function. - Programs can use this to help determine what kind of completing to - do. For instance, Bash sets this variable to "$@" so that it can - complete shell variables and hostnames. - - - Variable: int rl_completion_append_character - When a single completion alternative matches at the end of the - command line, this character is appended to the inserted - completion text. The default is a space character (` '). Setting - this to the null character (`\0') prevents anything being appended - automatically. This can be changed in custom completion functions - to provide the "most sensible word separator character" according - to an application-specific command line syntax specification. - - - Variable: int rl_ignore_completion_duplicates - If non-zero, then disallow duplicates in the matches. Default is - 1. - - - Variable: int rl_filename_completion_desired - Non-zero means that the results of the matches are to be treated as - filenames. This is _always_ zero on entry, and can only be changed - within a completion entry generator function. If it is set to a - non-zero value, directory names have a slash appended and Readline - attempts to quote completed filenames if they contain any - characters in `rl_filename_quote_characters' and - `rl_filename_quoting_desired' is set to a non-zero value. - - - Variable: int rl_filename_quoting_desired - Non-zero means that the results of the matches are to be quoted - using double quotes (or an application-specific quoting mechanism) - if the completed filename contains any characters in - `rl_filename_quote_chars'. This is _always_ non-zero on entry, - and can only be changed within a completion entry generator - function. The quoting is effected via a call to the function - pointed to by `rl_filename_quoting_function'. - - - Variable: int rl_attempted_completion_over - If an application-specific completion function assigned to - `rl_attempted_completion_function' sets this variable to a non-zero - value, Readline will not perform its default filename completion - if the application's completion function returns no matches. It - should be set only by an application's completion function. - - - Variable: int rl_completion_type - Set to a character describing the type of completion Readline is - currently attempting; see the description of - `rl_complete_internal()' (*note Completion Functions::) for the - list of characters. - - - Variable: int rl_inhibit_completion - If this variable is non-zero, completion is inhibited. The - completion character will be inserted as any other bound to - `self-insert'. - - - Variable: rl_compignore_func_t * rl_ignore_some_completions_function - This function, if defined, is called by the completer when real - filename completion is done, after all the matching names have - been generated. It is passed a `NULL' terminated array of matches. - The first element (`matches[0]') is the maximal substring common - to all matches. This function can re-arrange the list of matches - as required, but each element deleted from the array must be freed. - - - Variable: rl_icppfunc_t * rl_directory_completion_hook - This function, if defined, is allowed to modify the directory - portion of filenames Readline completes. It is called with the - address of a string (the current directory name) as an argument, - and may modify that string. If the string is replaced with a new - string, the old value should be freed. Any modified directory - name should have a trailing slash. The modified value will be - displayed as part of the completion, replacing the directory - portion of the pathname the user typed. It returns an integer - that should be non-zero if the function modifies its directory - argument. It could be used to expand symbolic links or shell - variables in pathnames. - - - Variable: rl_compdisp_func_t * rl_completion_display_matches_hook - If non-zero, then this is the address of a function to call when - completing a word would normally display the list of possible - matches. This function is called in lieu of Readline displaying - the list. It takes three arguments: (`char **'MATCHES, `int' - NUM_MATCHES, `int' MAX_LENGTH) where MATCHES is the array of - matching strings, NUM_MATCHES is the number of strings in that - array, and MAX_LENGTH is the length of the longest string in that - array. Readline provides a convenience function, - `rl_display_match_list', that takes care of doing the display to - Readline's output stream. That function may be called from this - hook. - - -File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers - -A Short Completion Example --------------------------- - - Here is a small application demonstrating the use of the GNU Readline -library. It is called `fileman', and the source code resides in -`examples/fileman.c'. This sample application provides completion of -command names, line editing features, and access to the history list. - - /* fileman.c -- A tiny application which demonstrates how to use the - GNU Readline library. This application interactively allows users - to manipulate files and their modes. */ - - #include - #include - #include - #include - #include - - #include - #include - - extern char *xmalloc (); - - /* The names of functions that actually do the manipulation. */ - int com_list __P((char *)); - int com_view __P((char *)); - int com_rename __P((char *)); - int com_stat __P((char *)); - int com_pwd __P((char *)); - int com_delete __P((char *)); - int com_help __P((char *)); - int com_cd __P((char *)); - int com_quit __P((char *)); - - /* A structure which contains information on the commands this program - can understand. */ - - typedef struct { - char *name; /* User printable name of the function. */ - rl_icpfunc_t *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ - } COMMAND; - - COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL } - }; - - /* Forward declarations. */ - char *stripwhite (); - COMMAND *find_command (); - - /* The name of this program, as taken from argv[0]. */ - char *progname; - - /* When non-zero, this means the user is done using this program. */ - int done; - - char * - dupstr (s) - int s; - { - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); - } - - main (argc, argv) - int argc; - char **argv; - { - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); - } - - /* Execute a command line. */ - int - execute_line (line) - char *line; - { - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); - } - - /* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ - COMMAND * - find_command (name) - char *name; - { - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); - } - - /* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ - char * - stripwhite (string) - char *string; - { - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; - } - - /* **************************************************************** */ - /* */ - /* Interface to Readline Completion */ - /* */ - /* **************************************************************** */ - - char *command_generator __P((const char *, int)); - char **fileman_completion __P((const char *, int, int)); - - /* Tell the GNU Readline library how to complete. We want to try to - complete on command names if this is the first word in the line, or - on filenames if not. */ - initialize_readline () - { - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = fileman_completion; - } - - /* Attempt to complete on the contents of TEXT. START and END - bound the region of rl_line_buffer that contains the word to - complete. TEXT is the word to complete. We can use the entire - contents of rl_line_buffer in case we want to do some simple - parsing. Returnthe array of matches, or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - const char *text; - int start, end; - { - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = rl_completion_matches (text, command_generator); - - return (matches); - } - - /* Generator function for command completion. STATE lets us - know whether to start from scratch; without any state - (i.e. STATE == 0), then we start at the top of the list. */ - char * - command_generator (text, state) - const char *text; - int state; - { - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This - includes saving the length of TEXT for efficiency, and - initializing the index variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the - command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); - } - - /* **************************************************************** */ - /* */ - /* FileMan Commands */ - /* */ - /* **************************************************************** */ - - /* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ - static char syscom[1024]; - - /* List the file(s) named in arg. */ - com_list (arg) - char *arg; - { - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); - } - - com_view (arg) - char *arg; - { - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); - } - - com_rename (arg) - char *arg; - { - too_dangerous ("rename"); - return (1); - } - - com_stat (arg) - char *arg; - { - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); - } - - com_delete (arg) - char *arg; - { - too_dangerous ("delete"); - return (1); - } - - /* Print out help for ARG, or for all of the commands if ARG is - not present. */ - com_help (arg) - char *arg; - { - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); - } - - /* Change to the directory ARG. */ - com_cd (arg) - char *arg; - { - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); - } - - /* Print out the current working directory. */ - com_pwd (ignore) - char *ignore; - { - char dir[1024], *s; - - s = getcwd (dir, sizeof(dir) - 1); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; - } - - /* The user wishes to quit using this program. Just set DONE - non-zero. */ - com_quit (arg) - char *arg; - { - done = 1; - return (0); - } - - /* Function which tells you that you can't do this. */ - too_dangerous (caller) - char *caller; - { - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); - } - - /* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; - { - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); - } - - -File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top - -Concept Index -************* - -* Menu: - -* command editing: Readline Bare Essentials. -* editing command lines: Readline Bare Essentials. -* initialization file, readline: Readline Init File. -* interaction, readline: Readline Interaction. -* kill ring: Readline Killing Commands. -* killing text: Readline Killing Commands. -* notation, readline: Readline Bare Essentials. -* readline, function: Basic Behavior. -* yanking text: Readline Killing Commands. - - -File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* _rl_digit_p: Utility Functions. -* _rl_digit_value: Utility Functions. -* _rl_lowercase_p: Utility Functions. -* _rl_to_lower: Utility Functions. -* _rl_to_upper: Utility Functions. -* _rl_uppercase_p: Utility Functions. -* abort (C-g): Miscellaneous Commands. -* accept-line (Newline or Return): Commands For History. -* backward-char (C-b): Commands For Moving. -* backward-delete-char (Rubout): Commands For Text. -* backward-kill-line (C-x Rubout): Commands For Killing. -* backward-kill-word (M-): Commands For Killing. -* backward-word (M-b): Commands For Moving. -* beginning-of-history (M-<): Commands For History. -* beginning-of-line (C-a): Commands For Moving. -* bell-style: Readline Init File Syntax. -* call-last-kbd-macro (C-x e): Keyboard Macros. -* capitalize-word (M-c): Commands For Text. -* character-search (C-]): Miscellaneous Commands. -* character-search-backward (M-C-]): Miscellaneous Commands. -* clear-screen (C-l): Commands For Moving. -* comment-begin: Readline Init File Syntax. -* complete (): Commands For Completion. -* completion-query-items: Readline Init File Syntax. -* convert-meta: Readline Init File Syntax. -* copy-backward-word (): Commands For Killing. -* copy-forward-word (): Commands For Killing. -* copy-region-as-kill (): Commands For Killing. -* delete-char (C-d): Commands For Text. -* delete-char-or-list (): Commands For Completion. -* delete-horizontal-space (): Commands For Killing. -* digit-argument (M-0, M-1, ... M--): Numeric Arguments. -* disable-completion: Readline Init File Syntax. -* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. -* downcase-word (M-l): Commands For Text. -* dump-functions (): Miscellaneous Commands. -* dump-macros (): Miscellaneous Commands. -* dump-variables (): Miscellaneous Commands. -* editing-mode: Readline Init File Syntax. -* enable-keypad: Readline Init File Syntax. -* end-kbd-macro (C-x )): Keyboard Macros. -* end-of-history (M->): Commands For History. -* end-of-line (C-e): Commands For Moving. -* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. -* expand-tilde: Readline Init File Syntax. -* forward-backward-delete-char (): Commands For Text. -* forward-char (C-f): Commands For Moving. -* forward-search-history (C-s): Commands For History. -* forward-word (M-f): Commands For Moving. -* history-search-backward (): Commands For History. -* history-search-forward (): Commands For History. -* horizontal-scroll-mode: Readline Init File Syntax. -* input-meta: Readline Init File Syntax. -* insert-comment (M-#): Miscellaneous Commands. -* insert-completions (M-*): Commands For Completion. -* isearch-terminators: Readline Init File Syntax. -* keymap: Readline Init File Syntax. -* kill-line (C-k): Commands For Killing. -* kill-region (): Commands For Killing. -* kill-whole-line (): Commands For Killing. -* kill-word (M-d): Commands For Killing. -* mark-modified-lines: Readline Init File Syntax. -* menu-complete (): Commands For Completion. -* meta-flag: Readline Init File Syntax. -* next-history (C-n): Commands For History. -* non-incremental-forward-search-history (M-n): Commands For History. -* non-incremental-reverse-search-history (M-p): Commands For History. -* output-meta: Readline Init File Syntax. -* possible-completions (M-?): Commands For Completion. -* prefix-meta (): Miscellaneous Commands. -* previous-history (C-p): Commands For History. -* quoted-insert (C-q or C-v): Commands For Text. -* re-read-init-file (C-x C-r): Miscellaneous Commands. -* readline: Basic Behavior. -* redraw-current-line (): Commands For Moving. -* reverse-search-history (C-r): Commands For History. -* revert-line (M-r): Miscellaneous Commands. -* rl_add_defun: Function Naming. -* rl_add_funmap_entry: Associating Function Names and Bindings. -* rl_add_undo: Allowing Undoing. -* rl_alphabetic: Utility Functions. -* rl_already_prompted: Readline Variables. -* rl_attempted_completion_function: Completion Variables. -* rl_attempted_completion_over: Completion Variables. -* rl_basic_quote_characters: Completion Variables. -* rl_basic_word_break_characters: Completion Variables. -* rl_begin_undo_group: Allowing Undoing. -* rl_bind_key: Binding Keys. -* rl_bind_key_in_map: Binding Keys. -* rl_binding_keymap: Readline Variables. -* rl_callback_handler_install: Alternate Interface. -* rl_callback_handler_remove: Alternate Interface. -* rl_callback_read_char: Alternate Interface. -* rl_catch_signals: Readline Signal Handling. -* rl_catch_sigwinch: Readline Signal Handling. -* rl_char_is_quoted_p: Completion Variables. -* rl_cleanup_after_signal: Readline Signal Handling. -* rl_clear_message: Redisplay. -* rl_clear_pending_input: Character Input. -* rl_clear_signals: Readline Signal Handling. -* rl_complete <1>: How Completing Works. -* rl_complete: Completion Functions. -* rl_complete_internal: Completion Functions. -* rl_completer_quote_characters: Completion Variables. -* rl_completer_word_break_characters: Completion Variables. -* rl_completion_append_character: Completion Variables. -* rl_completion_display_matches_hook: Completion Variables. -* rl_completion_entry_function <1>: How Completing Works. -* rl_completion_entry_function: Completion Variables. -* rl_completion_matches: Completion Functions. -* rl_completion_query_items: Completion Variables. -* rl_completion_type: Completion Variables. -* rl_copy_keymap: Keymaps. -* rl_copy_text: Modifying Text. -* rl_crlf: Redisplay. -* rl_delete_text: Modifying Text. -* rl_deprep_term_function: Readline Variables. -* rl_deprep_terminal: Terminal Management. -* rl_ding: Utility Functions. -* rl_directory_completion_hook: Completion Variables. -* rl_discard_keymap: Keymaps. -* rl_dispatching: Readline Variables. -* rl_display_match_list: Utility Functions. -* rl_do_undo: Allowing Undoing. -* rl_done: Readline Variables. -* rl_editing_mode: Readline Variables. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_erase_empty_line: Readline Variables. -* rl_event_hook: Readline Variables. -* rl_execute_next: Character Input. -* rl_executing_keymap: Readline Variables. -* rl_executing_macro: Readline Variables. -* rl_expand_prompt: Redisplay. -* rl_explicit_arg: Readline Variables. -* rl_extend_line_buffer: Utility Functions. -* rl_filename_completion_desired: Completion Variables. -* rl_filename_completion_function: Completion Functions. -* rl_filename_dequoting_function: Completion Variables. -* rl_filename_quote_characters: Completion Variables. -* rl_filename_quoting_desired: Completion Variables. -* rl_filename_quoting_function: Completion Variables. -* rl_forced_update_display: Redisplay. -* rl_free_line_state: Readline Signal Handling. -* rl_free_undo_list: Allowing Undoing. -* rl_function_dumper: Associating Function Names and Bindings. -* rl_function_of_keyseq: Associating Function Names and Bindings. -* rl_funmap_names: Associating Function Names and Bindings. -* rl_generic_bind: Binding Keys. -* rl_get_keymap: Keymaps. -* rl_get_keymap_by_name: Keymaps. -* rl_get_keymap_name: Keymaps. -* rl_getc: Character Input. -* rl_getc_function: Readline Variables. -* rl_gnu_readline_p: Readline Variables. -* rl_ignore_completion_duplicates: Completion Variables. -* rl_ignore_some_completions_function: Completion Variables. -* rl_inhibit_completion: Completion Variables. -* rl_initialize: Utility Functions. -* rl_insert_completions: Completion Functions. -* rl_insert_text: Modifying Text. -* rl_instream: Readline Variables. -* rl_invoking_keyseqs: Associating Function Names and Bindings. -* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. -* rl_kill_text: Modifying Text. -* rl_last_func: Readline Variables. -* rl_library_version: Readline Variables. -* rl_line_buffer: Readline Variables. -* rl_list_funmap_names: Associating Function Names and Bindings. -* rl_make_bare_keymap: Keymaps. -* rl_make_keymap: Keymaps. -* rl_mark: Readline Variables. -* rl_message: Redisplay. -* rl_modifying: Allowing Undoing. -* rl_named_function: Associating Function Names and Bindings. -* rl_num_chars_to_read: Readline Variables. -* rl_numeric_arg: Readline Variables. -* rl_on_new_line: Redisplay. -* rl_on_new_line_with_prompt: Redisplay. -* rl_outstream: Readline Variables. -* rl_parse_and_bind: Binding Keys. -* rl_pending_input: Readline Variables. -* rl_point: Readline Variables. -* rl_possible_completions: Completion Functions. -* rl_pre_input_hook: Readline Variables. -* rl_prep_term_function: Readline Variables. -* rl_prep_terminal: Terminal Management. -* rl_prompt: Readline Variables. -* rl_read_init_file: Binding Keys. -* rl_read_key: Character Input. -* rl_readline_name: Readline Variables. -* rl_readline_state: Readline Variables. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_reset_after_signal: Readline Signal Handling. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Terminal Management. -* rl_resize_terminal: Readline Signal Handling. -* rl_restore_prompt: Redisplay. -* rl_save_prompt: Redisplay. -* rl_set_key: Binding Keys. -* rl_set_keymap: Keymaps. -* rl_set_screen_size: Readline Signal Handling. -* rl_set_signals: Readline Signal Handling. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Character Input. -* rl_terminal_name: Readline Variables. -* rl_tty_set_default_bindings: Terminal Management. -* rl_unbind_command_in_map: Binding Keys. -* rl_unbind_function_in_map: Binding Keys. -* rl_unbind_key: Binding Keys. -* rl_unbind_key_in_map: Binding Keys. -* rl_username_completion_function: Completion Functions. -* self-insert (a, b, A, 1, !, ...): Commands For Text. -* set-mark (C-@): Miscellaneous Commands. -* show-all-if-ambiguous: Readline Init File Syntax. -* start-kbd-macro (C-x (): Keyboard Macros. -* transpose-chars (C-t): Commands For Text. -* transpose-words (M-t): Commands For Text. -* undo (C-_ or C-x C-u): Miscellaneous Commands. -* universal-argument (): Numeric Arguments. -* unix-line-discard (C-u): Commands For Killing. -* unix-word-rubout (C-w): Commands For Killing. -* upcase-word (M-u): Commands For Text. -* visible-stats: Readline Init File Syntax. -* yank (C-y): Commands For Killing. -* yank-last-arg (M-. or M-_): Commands For History. -* yank-nth-arg (M-C-y): Commands For History. -* yank-pop (M-y): Commands For Killing. - - - -Tag Table: -Node: Top1164 -Node: Command Line Editing1763 -Node: Introduction and Notation2414 -Node: Readline Interaction4032 -Node: Readline Bare Essentials5219 -Node: Readline Movement Commands7000 -Node: Readline Killing Commands7957 -Node: Readline Arguments9867 -Node: Searching10903 -Node: Readline Init File12859 -Node: Readline Init File Syntax13920 -Node: Conditional Init Constructs23536 -Node: Sample Init File25975 -Node: Bindable Readline Commands29145 -Node: Commands For Moving30195 -Node: Commands For History31044 -Node: Commands For Text33826 -Node: Commands For Killing35831 -Node: Numeric Arguments37804 -Node: Commands For Completion38932 -Node: Keyboard Macros40421 -Node: Miscellaneous Commands40980 -Node: Readline vi Mode43796 -Node: Programming with GNU Readline45549 -Node: Basic Behavior46517 -Node: Custom Functions49930 -Node: Readline Typedefs50908 -Node: Function Writing52537 -Node: Readline Variables53621 -Node: Readline Convenience Functions62417 -Node: Function Naming63272 -Node: Keymaps64524 -Node: Binding Keys66280 -Node: Associating Function Names and Bindings69206 -Node: Allowing Undoing71451 -Node: Redisplay73986 -Node: Modifying Text76536 -Node: Character Input77451 -Node: Terminal Management78661 -Node: Utility Functions79830 -Node: Alternate Interface81893 -Node: Readline Signal Handling85289 -Node: Custom Completers90545 -Node: How Completing Works91260 -Node: Completion Functions94258 -Node: Completion Variables97317 -Node: A Short Completion Example106674 -Node: Concept Index119199 -Node: Function and Variable Index119953 - -End Tag Table diff --git a/readline/doc/readline.ps b/readline/doc/readline.ps deleted file mode 100644 --- a/readline/doc/readline.ps +++ /dev/null @@ -1,4858 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: readline.dvi -%%Pages: 62 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o readline.ps readline.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2001.02.05:1130 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi) -@start -%DVIPSBitmapFont: Fa cmbxti10 14.4 1 -/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmsl9 9 1 -/Fb 1 121 df<383FC7E038078380EB0200EA038413C8EA01D8EA00F05B7F1201133812 -02487EEA081E123838FC3FC013107F8F14>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmsltt10 9 4 -/Fc 4 78 df45 D48 -D<134013E0EA01C01203120F123D12111201EA0380A6EA0700A6120EEAFFE0A20B177B96 -14>I<381F81F813C1380FC3E0EA0EC213C6A213CE13CC381CCDC013DD13D9A213F1A238 -38E3801303A53870070038FC0FC0A215177F9614>77 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt9 9 46 -/Fd 46 127 df<126012F0AD12601200A4126012F0A212600417789614>33 -D35 -D40 D<128012C01260123012381218121C120EA31207A9120EA3121C121812 -381230126012C01280081D7C9914>II<127012F812FCA2127C120C1218 -123012E012C0060A798414>44 DI<127012F8A3127005057984 -14>I<1203A25A5A123F12F712471207AEEA7FF0A20C177C9614>49 -D<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F80EA03 -C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA03E0EA -01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F157E95 -14>62 DIII<3801F180EA07FFEA0E1FEA1C071238EA7003A348C7FCA738 -700380A338380700121CEA0E0EEA07FCEA01F011177F9614>67 D<38FC1F80A2007C1300 -EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80A211177F9614>77 -D<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4133E12FEA21117 -7F9614>I82 D93 -D95 D97 D<12FCA2121CA513F8EA1DFEEA -1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I< -EA03F8EA0FFEEA1C0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F0 -0F107E8F14>I<137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301E -EA383E381FEFC0EA07CF12177F9614>II<13FCEA01FEEA -038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>II<12FCA2121CA51378EA1D -FEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA212 -07ACEAFFF8A20D187C9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2 -EA1E70EA1C38133C131C7F38FF1F80A21117809614>107 DIIIIIIII<1206120EA4EA7FFC12FFEA -0E00A8130EA3131CEA07F8EA01F00F157F9414>II<38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311 -107F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E38 -11107F8F14>II<38FE3F80A2381C0E005BA2120E5BA212071330A2EA03 -70A25B1201A25BA3485A12730077C7FC127E123C11187F8F14>II126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmti9 9 1 -/Fe 1 47 df<1230127812F0126005047C830C>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr9 9 39 -/Ff 39 123 df<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA1C03AE38FF -8FF0141A809915>12 DI<126012F0A212701210A31220A21240A2040B7D830B>44 -DI48 D<12035AB4FC1207B3A2EA -7FF80D187D9713>III<1318A2133813 -7813F813B8EA01381202A212041208121812101220124012C0B5FCEA0038A6EA03FF1018 -7F9713>III<1240EA7FFF13FEA2EA4004EA80081310A2 -EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>III97 -D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C01480381E0300EA1906 -EA10F8131A809915>II<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C5A -EA1C373807C7E0131A7F9915>IIII<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I<1218 -123CA212181200A612FC121CAE12FF081A80990A>I<12FC121CA9EB1FC0EB0F00130C5B -13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A809914>107 -D<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0A2001C1301 -AB39FF9FE7F81D107F8F20>I -IIIIII<1208A41218A21238EAFFC0 -EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC1F80EA1C03AB1307120CEA0E -0B3803F3F01410808F15>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2 -EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C0700003C1306381C0C04130E380E16 -081317A238072310149013A33803C1A014E0380180C0A319107F8F1C>I<38FE3F80383C -1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181CEA381E38FC3FC0 -12107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C -5AA248C7FCA212E112E212E4127811177F8F14>II -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmss10 10.95 2 -/Fg 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmbx10 12 27 -/Fh 27 123 df<90380FF83F90397FFDFFC03A01FC1FE3E03903F03FC7EA07E0D80FC013 -87ED83C091381F8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 -DI97 DII<49B4FCA2EB003FAB13FE3807FFBF380FC1FF48 -C67E003E7F127E127CA212FCA7127C127E123E6C5B380F81FF3907FF3FE0EA01FC1B237E -A220>I<13FE3807FF80380F83C0381E01E0383E00F0127E007C13F8147812FCB512F8A2 -00FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0C6130015167E951A>II<9038FE0F803903FF9FC0380F83E3381F01F3391E00F000003E7FA5001E5BEA -1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C381FFFE014FC6C13FF7E001F1480 -397C001FC00078130F00F81307A3007CEB0F806CEB1F00381F807E6CB45A000113E01A21 -7F951D>II<121E123FEA7F80A4EA3F00121EC7FCA6EAFF80A2121FB2EAFFF0A20C24 -7EA30F>I107 -DI<3AFF03F803F890390FFE0FFE3A1F183F -183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0A22C167D9531>I<38 -FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B167D9520>I<13FF00 -0713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C133E007E137E003E137C -6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBFFC381FF07EEBC01F90 -38800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEBBFFCEB8FE00180C7FC -A8EAFFF0A21B207E9520>I -I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8A214167E9518>I<38 -07F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C7E6C1380120738003F -C0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E9517>I<487EA41203A2 -1207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FEEA01F811207F9F16> -I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B167D9520>I<39FFF01F -E0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0EB -7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FCA23A1F807C00E0D80F -C014C08001E013010007017F1380A2D803F0EB0300ECCF8301F81387D801F913C61487D8 -00FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026167F9529>I<39FFF0 -7FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7FC7F6D7E497EEB37E0 -EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B167F951E>I<39FFF0 -1FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0 -EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305BEA69C0EA7F80001FC8 -FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E0138038C03F005B137EC6 -5A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA7E03B5FCA214167E95 -19>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmtt10 12 29 -/Fi 29 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D69 -D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012 -FF127F161E7F9D1A>I73 -D<387F03F838FF87FC387F03F8381C01E0EB03C01480EB07005B131E131C5B13785B7F12 -1DEA1FDC139C130EEA1E0F7F001C13801303EB01C0A2EB00E0A21470007F13FC38FF81FE -387F00FC171E7F9D1A>75 DI<387FFFC0B512E0A26C13C013047D7E1A>95 D97 D<12FEA3120EA6133EEBFF80000F13E0EBC1F0EB8070EB00 -38120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E138038063E00161E7F9D1A>I< -EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E381F -01F0380FFFE0000313C03800FE0014157D941A>III< -EB07E0EB1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0B5FCA23800E000AF383FFF8048 -13C06C1380151E7F9D1A>I<3801F87C3807FFFE5A381E078C381C0380383801C0A5381C -0380EA1E07381FFF005BEA39F80038C7FCA27E381FFF8014E04813F83878007C0070131C -48130EA40070131C0078133C003E13F8381FFFF0000713C00001130017217F941A>I<12 -FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D -1A>I -I<12FEA3120EA6EB0FFCEB1FFEEB0FFCEB03C0EB0780EB0F00131E5B5B13FC120F13DE13 -8F380E07801303EB01C014E0EB00F038FFE3FE14FF14FE181E7F9D1A>107 -DI<387CE0E038FFFBF8EA7FFF381F1F1CEA -1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>IIII<3801F8E0EA07FEEA0FFFEA1E07EA3C03EA78011270EAE000A613011270EA -7803123CEA1E0FEA0FFFEA07FCEA01F0C7FCA8EB0FFEA317207E941A>I<387F81F838FF -8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>I<3807FB -80EA1FFF127FEA7807EAE003A30078C7FCEA7FC0EA1FFCEA07FE38003F801307386001C0 -12E0A2EAF00338FC0780B51200EAEFFEEAE3F812157C941A>I<487E1203A6387FFFE0B5 -FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F9B1A>I<38FE0FE0A3EA0E -00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387FC7FC00FF13FE007F13FC380E -00E0A3380701C0A338038380A33801C700A3EA00EEA3137CA2133817157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7 -A213E61366136E133CA31338A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F -941A>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 13.14 52 -/Fj 52 122 df<123C127E12FFA4127E123C08087C8711>46 D48 D<131C133C13FC12FFA21200B3AA -387FFFFCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12 -FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B -1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F> -I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB -03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FE -A214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A2 -14F81301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A1218 -5A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEB -FFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FC -C7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE -0018237DA21F>II<1230123C003FB512 -C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133C -A25BA213F8A41201A66C5A13601A257DA41F>II<13FF000313C0380F83E0381F00F04813F8007E13 -7CA2147E12FEA3147FA4127E14FF123EEA3F01001F137FEA0FFEEA03FCC7FC147EA2123C -007E13FCA214F814F0EA7C01383003E0381C0F80380FFF00EA03F818237DA21F>I<141C -A2143EA3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F140301 -1C7FEB1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C712 -0FA2486E7ED8FFF090B51280A229257EA42E>65 DI<9138FF8008010FEBF01890393FC03C789039FE0006F8D801F8130348481301 -4848130048481478121F48481438A2007F151890C8FCA2481500A97E16187F123FA26C6C -1430120F6C6C14606C6C14C06C6CEB0180D800FEEB070090383FC01E90380FFFF8010013 -C025257DA42C>I69 DI72 -DI75 DIII82 D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A2 -7E91C7FCB4FCEA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC -0FE01407A200C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B -257DA422>I<007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C16 -0C5AA4C71400B3A390B512FEA226247EA32B>IIII89 D97 DIII<137F3803FFC03807C1F0380F80F8EA1F0048 -137C127E147E12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803 -FFE038007F8017187E971C>II<3901FF07C00007EBDFE0380F83F1EA1F -01393E00F800007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA2123812 -3C383FFFE06C13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00 -381F807E3807FFF8C613C01B247E971F>II<120FEA1F80EA3FC0A4 -EA1F80EA0F00C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I107 DI<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A -9007E803F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE9038 -83FF80390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>II<38FFC1FCEBCFFF390FFC1FC0 -9038F007E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F -809038CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7C -EB90FC13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C -07EA7001EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC0 -01A212E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A3120312 -07120F121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218 ->I<39FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E97 -22>I<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13 -FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<3BFFF9FF -E0FF80A23B1FC03F001C00000F6D13181580D807E05CA29039F03FC07000030137136015 -E02601F8635BA29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA201 -1E133CA3010C131829187F972C>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C -6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F39 -07003F8048131F39FFC07FF8A21D187F9720>I<39FFF80FF8A2390FC001C015803907E0 -0300A26D5A00031306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D -5AA26DC7FCA21306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmsl10 10.95 44 -/Fk 44 122 df12 -DI -45 D<1408140C141C143CA2147C147E149EA2EB011EA21302801304A21308A201101380 -14071320A2EB7FFF90384007C0EB8003A2EA0100A21202EC01E01206001F130339FF801F -FE1F207F9F22>65 D<0007B5FC3900F803C090387801E0EC00F04913F8A515F03801E001 -EC03E015C0EC0F809038FFFE009038E00F803903C003C0EC01E015F0A21400A2485A1401 -A215E01403EC07C0390F000F80EC3E00B512F01D1F7E9E20>II<0007B57E3900F801E0903878007081497F151E150E150FA348481480A648 -4814005DA3151E153E4848133C5DA25D4A5A4A5A260F000FC7FC143CB512F0211F7E9E23 ->I<0007B512FC3900F8007C0178131C150C5B1504A414043901E00800A31438EBFFF8EB -E0383803C010A4EC00081510485AA21520A2156015C0380F00011407B612801E1F7E9E1F ->I<0007B512F83900F800780178133815185B1508A53901E00800A314181438EBFFF838 -03C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E>I<3807FF803800F8001378 -A25BA6485AA6485AA6485AA648C7FC7FEAFFF0111F7E9E10>73 D<3A07FF803FE03A00F8 -001F000178130C5D4913205D5D4AC7FC1402140848485A5C146014F013E1EBE4F83803C8 -78EBD07CEBE03CEBC03E141E141F48487E81140781140381380F00016D487E39FFF00FFE -231F7E9E23>75 D<3807FFE0D800FCC7FC1378A25BA6485AA6485AA41580EC0100EA0780 -A25C14021406140E380F001E147CB512FC191F7E9E1C>I78 -DI<0007B5FC3900F803C0 -90387800F015785B157CA41578484813F815F0EC01E0EC03C0EC0F00EBFFFCD803C0C7FC -A6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FFFE3900F8078090387801E0EC00F05B -15F8A415F03801E00115E0EC03C0EC0780EC1E00EBFFF03803C03880141E140EA2140F48 -485AA51502D80F001304EB800F39FFF00788C7EA01F01F207E9E21>82 -DI<003FB512F0383C0780003014301260 -39400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C1F7A9E21>I<39FF -F00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600705BA25CA200785B -1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF81FF03B1F000FC007 -C0001E903907800380001FED01006C1502140F5EEC17C002135B142301805C000713435E -14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EBC80015F4EA01F015 -F85B5D5B15605B000014402C207A9E2F>87 D -97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14F0A538 -7001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA0383380E -0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314> -I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>II<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>II<13E0120712011200 -A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E7FA213 -0F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0 -A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98618639 -07A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E -3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713E01300 -A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C -00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07 -E014147D9317>I -IIII<1380EA0100A35A5A5A121EEAFFF8EA0E00 -A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03 -A238380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0 -001C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15 -147C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D810013 -09EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321 ->I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E13 -4E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F80 -3901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C -133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmti10 10.95 20 -/Fl 20 122 df12 -D<127012F8A212F012E005057B840E>46 D -97 D<137EEA01C138030080EA0E07121E001C1300EA3C0248C7FCA35AA5EA70011302EA -3004EA1838EA07C011147C9315>99 D<1478EB03F8EB0070A414E0A4EB01C0A213F1EA03 -8938070780EA0E03121C123C383807001278A3EAF00EA31420EB1C40A2EA703C135C3830 -8C80380F070015207C9F17>I<137CEA01C2EA0701120E121C123CEA3802EA780CEA7BF0 -EA7C0012F0A4127013011302EA3804EA1838EA07C010147C9315>I103 -D<13C0EA01E0A213C0C7FCA7120E12131223EA4380EA4700A21287120EA35AA3EA384013 -80A21270EA31001232121C0B1F7C9E0E>105 D108 D<391C0F80F0392630C3183947 -40640C903880680EEB0070A2008E495A120EA34848485AA3ED70803A3803807100A215E1 -15623970070064D83003133821147C9325>I<381C0F80382630C0384740601380EB0070 -A2008E13E0120EA3381C01C0A3EB038400381388A2EB0708EB031000701330383001C016 -147C931A>I<137CEA01C338030180000E13C0121E001C13E0123C1278A338F003C0A3EB -07801400EA700F130EEA3018EA1870EA07C013147C9317>I<3801C1E038026218380474 -1C1378EB701EA2EA08E01200A33801C03CA3143838038078147014E0EBC1C038072380EB -1E0090C7FCA2120EA45AA2B47E171D809317>I114 D<13FCEA0302EA0601EA0C03 -130713061300EA0F8013F0EA07F8EA03FCEA003E130E1270EAF00CA2EAE008EA4010EA20 -60EA1F8010147D9313>II<000E13C0001313E0382301C0EA43 -81EA4701A238870380120EA3381C0700A31410EB0E201218A2381C1E40EA0C263807C380 -14147C9318>I<380E0380EA1307002313C0EA4383EA4701130000871380120EA3381C01 -00A31302A25BA25BEA0E30EA03C012147C9315>I<000EEBC1C0001313E3392301C3E038 -4381C1384701C015603987038040120EA3391C070080A3EC0100A21306EB0F02000C5B38 -0E13083803E1F01B147C931E>I<000E13C0001313E0382301C0EA4381EA4701A2388703 -80120EA3381C0700A4130E1218A2EA1C1EEA0C3CEA07DCEA001CA25B12F05BEAE060485A -EA4380003EC7FC131D7C9316>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr8 8 29 -/Fm 29 118 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 DIIIII76 D<00FEEB03F8001E14C000171305A338138009A23811C011A3 -3810E021A2EB7041A3EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I80 D82 DI<387FFFF83860381800401308A200801304A300001300AF3803FF -8016177F9619>I<12FCA212C0B3AB12FCA206217D980A>91 D97 -D<12F81238A8EA39F0EA3E0CEA380613077F1480A414005B1306EA361CEA21F011177F96 -14>II101 D<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE300 -12E7127C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0 -123813F01378133CA2EAFE7F10177F9613>I110 DII114 -DI<1208A31218A21238EAFFC0EA3800A71340A4EA1C80EA0F000A147F93 -0E>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmsy9 9 2 -/Fn 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmsltt10 10.95 29 -/Fo 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3 -C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA -7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203 -120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I67 D<3807FFC014E014F03801C0F814 -78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013 -07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000 -A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18 -1C7F9B18>I74 D76 D<3907E01F80000FEB3FC0000714803903 -B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6 -5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12 -1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<387FFFC0B512E0A26C13C013047E7F18>95 D97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012 -38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I100 D<13F8EA07FE487E381F -0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F -FE6C5AEA07F012147B9318>III<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6 -EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106 -DII<13FCEA03FF000F1380 -EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F -FC6C5AEA07E013147C9318>111 D113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA -FFFC7F5B17147E9318>II<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF -E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013 -E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119 -D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC -EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F -F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13 -78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmcsc10 10.95 12 -/Fp 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807 -FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97 -D99 -D101 DII105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13 -0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700 -70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D> -II115 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F -133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF -18177F961C>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmbx12 17.28 34 -/Fq 34 121 df49 DI<913A03FF80018002 -3FEBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C812 -7F4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127F -A27FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93F -C05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A> -67 D69 DII73 D76 D78 D80 D -82 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A348 -1603A5C792C7FCB3AA017FB6FCA331307DAF38>84 DII97 -DIIIII<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>III108 D<2703F007F8EB1FE000FFD9 -3FFEEBFFF8913A783F01E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602 -F8148001FC5CA3495CB3B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFE -EC783F02C013803A0FF1801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F -2D>II<3901F83FE000FFEBFF -FC9038FBE07F9039FF003F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216 -FEA816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC -3FC091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF3 -0FF0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 -D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0 -6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13 -1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201 -12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB -07F0192E7FAD1F>II119 D<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B -90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF0 -8190380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FC -A328207F9F2B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmsy10 10.95 1 -/Fr 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmbx12 14.4 54 -/Fs 54 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -DII<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>II -57 D65 DI<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>IIII<91387F -E003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F48488048488048 -4880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E -6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>III75 DII -III< -ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48 -486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C -6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0 -90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F -5A6F5A6F5A2A357CA833>II<9038FF80600003EBF0E0 -000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F -FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0 -1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8 -25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815 -01A5C791C7FCB3A490B612C0A32A287EA72F>IIII89 -D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA -0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21 ->97 DIIIII<9038FF80F00003EBE3 -F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E6C137C -380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C14F012 -1F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512003800 -7FF01E287E9A22>II<1207EA0F80EA1FC0EA3FE0A3EA1F -C0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D8 -0FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A333 -1B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213 -E0B039FFFE3FFFA3201B7D9A25>II<38FFE1FE9038EFFF809038FE0FE039 -0FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038 -F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FF -C1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmtt10 10.95 91 -/Ft 91 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -DI -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>III<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>II<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>IIII<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003C0EA0001EB00E0A2126012 -F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C7E9B18>I<137E48B4FC00 -071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC38FE078038F803 -C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5AEA01F8131C7E9B -18>I<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13F05BA2485AA3485A -A448C7FCA7131D7E9C18>II<1230127812FCA2127812301200A8 -1230127812FCA2127812300614779318>58 D<1218123C127EA2123C12181200A8121812 -3C127EA2123E121E120E121C123C127812F01260071A789318>I<14C0EB03E01307EB1F -C0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E01303EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4 -387FFFC0B512E0A26C13C0130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A -126013187E9918>II<137CEA01FEEA07FF380F -8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1EAE380A638E1C1C0127113E338 -70FF8038387F00EA3C1C381E00E0EA0F833807FFC00001138038007E00131C7E9B18>I< -137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E03381C01C0A338 -7F07F000FF13F8007F13F0151C7F9B18>II -IIII<3801F1C0EA03FD -EA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F130F387001C0A2130312 -38A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F07F038FF8FF8387F07F0 -381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>II<3801FFC0A338000E00B3 -12F0A2133CEA7FFCEA3FF0EA0FC0121C7D9B18>I<387F07F038FF87F8387F07F0381C03 -C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380 -A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>II<38FC01F8EAFE03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A2 -13F81370A21300A638FE03F8A3151C7F9B18>I<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>IIIII<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A3 -90C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2126012E0130100 -F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E07038A40000 -1300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F01380783C03803 -FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03383C01E0001C13C0A3EA1E -03000E1380A438070700A4EA038EA4EA018C13DCA3EA00D813F8A21370151C7F9B18>I< -38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2001913C0A3138CA2EA1D8DA31305 -000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0139F130F380E0700120FEA070E13 -8EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138EEA070F7F000E138013 -03001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03F8EAFF07EAFE03381C -01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC48 -7E6C5A151C7F9B18>I<383FFFE05AA2387001C01303EB07801400C65A131E131C133C5B -137013F0485A5B1203485A90C7FC5A001E13E0121C123C5A1270B5FCA3131C7E9B18>I< -EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>I<126012F0A27E1278127C123CA2123E12 -1E121F7EA27F12077F1203A27F12017F12007F1378A2137C133C133E131EA2131F7F1480 -1307A2EB030011247D9F18>II<387FFFC0 -B512E0A26C13C013047E7F18>95 D<1206121E123E12381270A212E0A312F812FC127CA2 -1238070E789E18>II<127E12FE127E12 -0EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFF -C0000E138038063E00151C809B18>IIIII<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C -0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338 -A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA513 -3EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18> -II<1338 -137CA313381300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C -18>I<127E12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA -0E0F7FEB038014C0387FC7F812FF127F151C7F9B18>II<38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB -3E3E1714809318>III< -EA7E3E38FEFF80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EB -FFC0000E1380EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1F -FFEA3E1FEA380FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA00 -03A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0 -005BA290C7FCA9EAFFFC7F5B14147E9318>II<487E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380 -EB3E0013197F9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE -3801FCFC1714809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700 -A3138FEA038EA3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0 -A4381C01C0137113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318> -I<387F8FF0139F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA03 -9E138EEA0707000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13 -F8007F13F0380E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC13 -78A31370A313F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA23870 -01E0EB03C0EB078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A3 -14147F9318>II<126012F0B3B012600424769F18>I<127CB4FC13C0 -1203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18 ->II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmr10 10.95 77 -/Fu 77 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>II<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I34 -D<1340A2EA03F0EA0C4EEA10413820408012600040134038C041C01343A238E04180EB40 -001270127CEA3FC0EA1FF86C7EEA03FEEA007FEB4F801343EB41C0A2EAF040A312801480 -EA404100201300EA3042EA0C4CEA03F0EA0040A312257EA117>36 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -DI<127012F8A3127005057C840D>I<144014C0EB0180A3EB0300 -A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35AA2122D -7EA117>II<13801203120F12F31203B3A6EA -07C0EAFFFE0F1E7C9D17>III<1306A2130EA2131E132EA2134E138EA2EA -010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17> -II<137CEA -0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EA -F807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17 ->I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B -1201A41203A76C5A131F7E9D17>III<127012F8A312 -701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A212 -781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB20 -78A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E0 -39FF801FFE1F207F9F22>65 DI<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A15 -10127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E003 -00EB380CEB0FF01C217E9F21>IIII<90380FE0109038381C309038E002703803C00139078000F048C71270121E -15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903 -C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD -90B5FCEB0007AF39FFF07FF81D1F7E9E22>II< -39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB21 -E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23> -75 DI< -B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A290 -380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A ->IIII82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 DI<12FFA21203B3B3A512FFA2082D80 -A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -DI<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>IIII<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>IIII<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>III<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fv cmbx12 20.736 14 -/Fv 14 122 df71 D76 D78 D82 -D85 D97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I100 -D<49B47E010F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0 -485A003F15F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F00 -0F15F06C6C13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013 -C025267DA52C>I105 D<13FE12FFA412071203B3B3AEB512F8A415 -3C7DBB1A>108 D110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fv(GNU)33 b(Readline)h(Library)p 75 -709 1800 17 v 732 757 a Fu(Edition)16 b(4.2-b)q(eta,)e(for)h -Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.2-b)q(eta.)1698 -811 y(F)l(eb)f(2001)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f -(GNU)g(Readline)i(Library)l(,)e(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h -(the)f(consistency)75 271 y(of)h(user)g(in)o(terface)h(across)e -(discrete)i(programs)e(that)h(need)h(to)e(pro)o(vide)i(a)f(command)g -(line)i(in)o(terface.)75 339 y(Published)g(b)o(y)f(the)f(F)l(ree)g -(Soft)o(w)o(are)f(F)l(oundation)75 394 y(59)h(T)l(emple)h(Place,)f -(Suite)i(330,)75 448 y(Boston,)d(MA)h(02111)f(USA)75 -516 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g -(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o -(vided)h(the)75 570 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q -(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)75 -638 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g -(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h(man)o(ual)g -(under)h(the)f(con-)75 692 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,) -g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g(deriv)o(ed)g(w)o -(ork)e(is)h(distributed)75 747 y(under)h(the)f(terms)g(of)g(a)f(p)q -(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -814 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 869 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 924 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fr(\015)i Fu(1988-2001)e(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 149 y Fq(1)41 b(Command)28 b(Line)e(Editing)137 -271 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fp(gnu)g Fu(command)g(line)i(editing)f(in)o(terface.)75 -403 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -501 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -569 y(The)h(text)f Fo(C-k)h Fu(is)g(read)g(as)f(`Con)o(trol-K')g(and)h -(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831 -567 y Fn(h)p 1844 541 19 2 v 1844 569 a Fm(k)p 1844 577 -V 1860 567 a Fn(i)75 624 y Fu(k)o(ey)d(is)h(pressed)g(while)g(the)f -(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g -Fo(M-k)f Fu(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -745 y Fn(h)p 942 719 V 942 747 a Fm(k)p 942 755 V 958 -745 a Fn(i)987 747 y Fu(k)o(ey)g(is)h(pressed.)20 b(The)15 -b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Fn(h)p 1791 -719 72 2 v 1791 747 a Fm(AL)m(T)p 1791 755 V 1860 745 -a Fn(i)75 802 y Fu(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 800 y Fn(h)p 1225 774 V 1225 802 a Fm(AL)m(T)p 1225 -810 V 1294 800 a Fn(i)1322 802 y Fu(\(usually)i(to)e(either)i(side)g -(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Fn(h)p -400 829 V 400 857 a Fm(AL)m(T)p 400 865 V 469 855 a Fn(i)499 -857 y Fu(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Fn(h)p -1709 829 V 1709 857 a Fm(AL)m(T)p 1709 865 V 1778 855 -a Fn(i)1808 857 y Fu(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1033 y Fn(h)p 706 1007 V 706 1035 a Fm(AL)m(T)p 706 1043 -V 775 1033 a Fn(i)801 1035 y Fu(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping) -809 1088 y Fn(h)p 822 1062 70 2 v 822 1090 a Fm(ESC)p -822 1098 V 888 1088 a Fn(i)915 1090 y Fl(\014rst)p Fu(,)g(and)g(then)h -(t)o(yping)1339 1088 y Fn(h)p 1351 1062 19 2 v 1351 1090 -a Fm(k)p 1351 1098 V 1368 1088 a Fn(i)1383 1090 y Fu(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j -Fk(metafying)k Fu(the)425 1143 y Fn(h)p 437 1117 V 437 -1145 a Fm(k)p 437 1153 V 454 1143 a Fn(i)484 1145 y Fu(k)o(ey)l(.)137 -1214 y(The)i(text)e Fo(M-C-k)h Fu(is)h(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75 -1268 y Fk(metafying)e Fo(C-k)p Fu(.)137 1337 y(In)g(addition,)h(sev)o -(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1335 y Fn(h)p 1396 1309 -73 2 v 1396 1337 a Fm(DEL)p 1396 1345 V 1467 1335 a Fn(i)1482 -1337 y Fu(,)1514 1335 y Fn(h)p 1526 1309 70 2 v 1526 -1337 a Fm(ESC)p 1526 1345 V 1593 1335 a Fn(i)1608 1337 -y Fu(,)1640 1335 y Fn(h)p 1652 1309 72 2 v 1652 1337 -a Fm(LFD)p 1652 1345 V 1722 1335 a Fn(i)1737 1337 y Fu(,)1768 -1335 y Fn(h)p 1780 1309 70 2 v 1780 1337 a Fm(SPC)p 1780 -1345 V 1847 1335 a Fn(i)1862 1337 y Fu(,)75 1390 y Fn(h)p -87 1364 76 2 v 87 1392 a Fm(RET)p 87 1399 V 160 1390 -a Fn(i)175 1392 y Fu(,)23 b(and)306 1390 y Fn(h)p 318 -1364 74 2 v 318 1392 a Fm(T)m(AB)p 318 1399 V 390 1390 -a Fn(i)427 1392 y Fu(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1447 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1445 y Fn(h)p 1456 1419 72 2 v 1456 1447 a Fm(LFD)p 1456 -1454 V 1526 1445 a Fn(i)1560 1447 y Fu(k)o(ey)l(,)h(t)o(yping)1802 -1445 y Fn(h)p 1814 1419 49 2 v 1814 1447 a Fm(C-j)p 1814 -1454 V 1860 1445 a Fn(i)75 1501 y Fu(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1499 y Fn(h)p 886 1473 76 2 -v 886 1501 a Fm(RET)p 886 1509 V 959 1499 a Fn(i)989 -1501 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499 -y Fn(h)p 1397 1473 109 2 v 1397 1501 a Fm(Return)p 1397 -1509 V 1503 1499 a Fn(i)1533 1501 y Fu(or)1588 1499 y -Fn(h)p 1600 1473 86 2 v 1600 1501 a Fm(En)o(ter)p 1600 -1509 V 1684 1499 a Fn(i)1714 1501 y Fu(on)f(some)75 1556 -y(k)o(eyb)q(oards.)75 1688 y Fs(1.2)33 b(Readline)23 -b(In)n(teraction)137 1786 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2058 y Fn(h)p 1172 2032 76 -2 v 1172 2060 a Fm(RET)p 1172 2068 V 1245 2058 a Fn(i)1260 -2060 y Fu(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f -(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563 -2113 y Fn(h)p 575 2087 V 575 2115 a Fm(RET)p 575 2122 -V 648 2113 a Fn(i)663 2115 y Fu(;)i(the)f(en)o(tire)h(line)g(is)g -(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75 -2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fj(1.2.1)30 -b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fu(In)12 -b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h -(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f -(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h -(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23 -b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h -(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h -(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560 -y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f -(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t) -o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19 -b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fo(C-b)f -Fu(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75 -2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13 -b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g -(with)g Fo(C-f)p Fu(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)i(Library)137 -149 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 449 y Fo(C-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o -(haracter.)75 530 y Fo(C-f)168 b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h -(c)o(haracter.)75 608 y Fn(h)p 87 582 73 2 v 87 610 a -Fm(DEL)p 87 618 V 158 608 a Fn(i)188 610 y Fu(or)244 -608 y Fn(h)p 256 582 159 2 v 256 610 a Fm(Bac)o(kspace)p -256 618 V 412 608 a Fn(i)315 665 y Fu(Delete)h(the)f(c)o(haracter)g(to) -f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fo(C-d)168 -b Fu(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -961 y Fo(C-_)g Fu(or)f Fo(C-x)h(C-u)315 1015 y Fu(Undo)i(the)g(last)f -(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o -(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75 -1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863 -1149 y Fn(h)p 875 1123 V 875 1151 a Fm(Bac)o(kspace)p -875 1159 V 1032 1149 a Fn(i)1063 1151 y Fu(k)o(ey)g(b)q(e)h(set)f(to)f -(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h -(cursor)f(and)g(the)596 1204 y Fn(h)p 608 1178 73 2 v -608 1206 a Fm(DEL)p 608 1213 V 679 1204 a Fn(i)710 1206 -y Fu(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h -(the)g(cursor,)f(lik)o(e)75 1260 y Fo(C-d)p Fu(,)e(rather)h(than)g(the) -g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75 -1374 y Fj(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 -1471 y Fu(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fo(C-b)p -Fu(,)h Fo(C-f)p Fu(,)f Fo(C-d)p Fu(,)g(and)522 1578 y -Fn(h)p 534 1552 V 534 1580 a Fm(DEL)p 534 1588 V 605 -1578 a Fn(i)619 1580 y Fu(.)23 b(Here)16 b(are)g(some)f(commands)h(for) -f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635 -y(line.)75 1716 y Fo(C-a)168 b Fu(Mo)o(v)o(e)14 b(to)h(the)g(start)f -(of)h(the)g(line.)75 1796 y Fo(C-e)168 b Fu(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fo(M-f)168 -b Fu(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h -(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957 -y Fo(M-b)168 b Fu(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2037 y Fo(C-l)168 b Fu(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f -(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f -Fo(C-f)g Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i -Fo(M-f)e Fu(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18 -b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75 -2341 y Fj(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2438 y Fk(Killing)26 b Fu(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fk(y)o(anking)22 -b Fu(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fk(kill-ring)p Fu(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 458 y Fo(C-k)168 -b Fu(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y -Fo(M-d)168 b Fu(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f -Fo(M-f)p Fu(.)75 668 y Fo(M-)123 666 y Fn(h)p 135 640 -73 2 v 135 668 a Fm(DEL)p 135 675 V 206 666 a Fn(i)315 -668 y Fu(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h(the)g -(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f(to)315 -723 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 777 y Fo(M-b)p Fu(.)75 855 y Fo(C-w)168 b -Fu(Kill)18 b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22 -b(This)16 b(is)g(di\013eren)o(t)g(than)f Fo(M-)1777 853 -y Fn(h)p 1789 827 V 1789 855 a Fm(DEL)p 1789 863 V 1860 -853 a Fn(i)315 910 y Fu(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h -(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fk(y)o(ank)j -Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21 -b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d -(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fo(C-y)168 -b Fu(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g -(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198 -y Fo(M-y)168 b Fu(Rotate)17 b(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 1252 y(command)d(is)h Fo(C-y)f Fu(or)f Fo(M-y)p Fu(.)75 -1361 y Fj(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457 -y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g -(Readline)i(commands.)k(Sometimes)15 b(the)g(argumen)o(t)e(acts)75 -1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f -(the)g Fl(sign)j Fu(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o -(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t) -f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g -(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o -(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o -(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g -(t)o(yp)q(e)g(`)p Ft(M--)f(C-k)p Fu('.)137 1742 y(The)h(general)f(w)o -(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is) -h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797 -y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a) -g(min)o(us)g(sign)g(\(`)p Ft(-)p Fu('\),)d(then)j(the)f(sign)h(of)f -(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31 -b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h -(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75 -1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g -(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f -Fo(C-d)75 1961 y Fu(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f -(could)i(t)o(yp)q(e)f(`)p Ft(M-1)14 b(0)h(C-d)p Fu(',)k(whic)o(h)g -(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14 -b(on)i(the)f(input)h(line.)75 2125 y Fj(1.2.5)30 b(Searc)n(hing)21 -b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fu(Readline)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 2275 y(taining)e(a)f(sp)q(eci\014ed)i -(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20 -b Fk(incremen)o(tal)e Fu(and)e Fk(non-incremen)o(tal)p -Fu(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f -(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.) -19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g -(string)f(is)h(t)o(yp)q(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en) -o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12 -b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g -(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75 -2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l -(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g -(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fo(C-r)p -Fu(.)k(T)o(yping)d Fo(C-s)e Fu(searc)o(hes)h(forw)o(ard)e(through)h -(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75 -2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Ft(isearch-terminators)d -Fu(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q -(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Fn(h)p -1301 2642 70 2 v 1301 2670 a Fm(ESC)p 1301 2678 V 1368 -2668 a Fn(i)1402 2670 y Fu(and)e Fo(C-J)f Fu(c)o(haracters)g(will)p -eop -%%Page: 4 6 -4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75 -149 y(terminate)k(an)g(incremen)o(tal)i(searc)o(h.)37 -b Fo(C-g)21 b Fu(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f -(and)g(restore)g(the)75 204 y(original)16 b(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 334 y(T)l(o)g(\014nd)i -(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o -(yp)q(e)f Fo(C-r)g Fu(or)g Fo(C-s)g Fu(as)h(appropriate.)k(This)75 -388 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i -(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g -(searc)o(h)g(string)75 443 y(t)o(yp)q(ed)19 b(so)g(far.)30 -b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline) -i(command)d(will)j(terminate)e(the)75 498 y(searc)o(h)10 -b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063 -496 y Fn(h)p 1076 470 76 2 v 1076 498 a Fm(RET)p 1076 -506 V 1149 496 a Fn(i)1174 498 y Fu(will)g(terminate)f(the)g(searc)o(h) -f(and)h(accept)75 553 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g -(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f -(command)g(will)75 608 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g -(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g -(editing.)137 682 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 737 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 792 y(con)o(ten)o(ts)15 -b(of)f(the)i(curren)o(t)f(line.)75 939 y Fs(1.3)33 b(Readline)23 -b(Init)h(File)137 1042 y Fu(Although)f(the)g(Readline)i(library)e -(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g -(installed)75 1097 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e -(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 -b(An)o(y)20 b(user)h(can)g(customize)75 1152 y(programs)15 -b(that)h(use)g(Readline)j(b)o(y)d(putting)g(commands)g(in)i(an)e -Fk(inputrc)k Fu(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 -1207 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g -(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g -(v)m(ariable)75 1262 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h -(is)g(unset,)f(the)g(default)h(is)g(`)p Ft(~/.inputrc)p -Fu('.)137 1336 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline) -i(library)f(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g -(the)75 1391 y(k)o(ey)g(bindings)i(are)e(set.)137 1465 -y(In)f(addition,)h(the)e Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g -(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 -1520 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 -1647 y Fj(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 -1751 y Fu(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w) -o(ed)i(in)f(the)g(Readline)i(init)f(\014le.)26 b(Blank)18 -b(lines)g(are)75 1805 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d -(a)h(`)p Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22 -b(b)q(eginning)h(with)e(a)f(`)p Ft($)p Fu(')f(indicate)75 -1860 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 -1915 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75 -2006 y(V)l(ariable)h(Settings)315 2060 y(Y)l(ou)k(can)h(mo)q(dify)g -(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)k(b)o(y)d(altering)h -(the)f(v)m(alues)h(of)315 2115 y(v)m(ariables)13 b(in)g(Readline)i -(using)d(the)g Ft(set)g Fu(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2170 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Ft(vi)g Fu(line)i(editing)g(commands:)435 2238 y Ft(set)23 -b(editing-mode)g(vi)315 2309 y Fu(A)15 b(great)g(deal)g(of)g(run-time)h -(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m -(ariables.)315 2396 y Ft(bell-style)555 2451 y Fu(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2506 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Ft(none)p Fu(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2560 y(`)p Ft(visible)p Fu(',)c(Readline)j(uses) -f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 2615 y(`)p Ft(audible)p Fu(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2670 y(b)q(ell.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 149 y Ft(comment-begin)555 204 y Fu(The)15 b(string)f(to)g -(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g -Ft(insert-)555 259 y(comment)f Fu(command)h(is)h(executed.)21 -b(The)15 b(default)h(v)m(alue)g(is)g Ft("#")p Fu(.)315 -338 y Ft(completion-ignore-case)555 393 y Fu(If)e(set)f(to)g(`)p -Ft(on)p Fu(',)g(Readline)j(p)q(erforms)d(\014lename)i(matc)o(hing)f -(and)g(completion)555 448 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k -(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)315 -527 y Ft(completion-query-items)555 582 y Fu(The)d(n)o(um)o(b)q(er)h -(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f -(user)555 637 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i -(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21 -b(the)555 691 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f -(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -746 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f -(view)h(them;)f(otherwise,)555 801 y(they)f(are)g(simply)i(listed.)20 -b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger) -h(v)m(alue)555 856 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d -(default)f(limit)i(is)f Ft(100)p Fu(.)315 935 y Ft(convert-meta)555 -990 y Fu(If)11 b(set)g(to)g(`)p Ft(on)p Fu(',)f(Readline)j(will)g(con)o -(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555 -1044 y(to)f(an)h Fp(asci)q(i)e Fu(k)o(ey)i(sequence)g(b)o(y)g -(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555 -1097 y Fn(h)p 567 1071 70 2 v 567 1099 a Fm(ESC)p 567 -1107 V 634 1097 a Fn(i)666 1099 y Fu(c)o(haracter,)k(con)o(v)o(erting)h -(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555 -1154 y(The)e(default)h(v)m(alue)h(is)e(`)p Ft(on)p Fu('.)315 -1233 y Ft(disable-completion)555 1288 y Fu(If)k(set)f(to)f(`)p -Ft(On)p Fu(',)h(Readline)j(will)f(inhibit)g(w)o(ord)e(completion.)30 -b(Completion)555 1343 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g -(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555 -1398 y(to)h Ft(self-insert)p Fu(.)j(The)d(default)h(is)g(`)p -Ft(off)p Fu('.)315 1477 y Ft(editing-mode)555 1531 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 1586 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 1641 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 -1696 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 1775 y Ft(enable-keypad)555 1830 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 1885 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 1939 y(The)j(default)h(is)g(`)p -Ft(off)p Fu('.)315 2019 y Ft(expand-tilde)555 2073 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 2128 y(w)o(ord)f -(completion.)21 b(The)15 b(default)h(is)f(`)p Ft(off)p -Fu('.)315 2207 y Ft(horizontal-scroll-mode)555 2262 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 2317 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 -2372 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 2426 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 2481 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Ft(off)p Fu('.)315 2560 y Ft(input-meta)555 2615 y Fu(If)h(set)f(to)g -(`)p Ft(on)p Fu(',)f(Readline)k(will)g(enable)e(eigh)o(t-bit)h(input)f -(\(it)g(will)h(not)e(clear)555 2670 y(the)20 b(eigh)o(th)g(bit)g(in)h -(the)f(c)o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)p -eop -%%Page: 6 8 -6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)i(Library)555 -149 y(terminal)k(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 -204 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 289 y Ft(isearch-terminators)555 344 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 399 y(searc)o(h)12 b(without)h(subsequen)o -(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555 -454 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40 -b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 509 y(b)q(een)17 -b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247 -507 y Fn(h)p 1259 481 70 2 v 1259 509 a Fm(ESC)p 1259 -516 V 1326 507 a Fn(i)1357 509 y Fu(and)g Fo(C-J)f Fu(will)i(terminate) -f(an)555 563 y(incremen)o(tal)g(searc)o(h.)315 649 y -Ft(keymap)96 b Fu(Sets)19 b(Readline's)j(idea)e(of)f(the)g(curren)o(t)h -(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 703 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 758 y Ft(emacs-meta)p -Fu(,)49 b Ft(emacs-ctlx)p Fu(,)g Ft(vi)p Fu(,)h Ft(vi-move)p -Fu(,)f Ft(vi-command)p Fu(,)g(and)555 813 y Ft(vi-insert)p -Fu(.)31 b Ft(vi)20 b Fu(is)g(equiv)m(alen)o(t)h(to)e -Ft(vi-command)p Fu(;)g Ft(emacs)g Fu(is)h(equiv)m(alen)o(t)555 -868 y(to)15 b Ft(emacs-standard)p Fu(.)20 b(The)d(default)f(v)m(alue)h -(is)g Ft(emacs)p Fu(.)k(The)16 b(v)m(alue)h(of)f(the)555 -923 y Ft(editing-mode)e Fu(v)m(ariable)i(also)f(a\013ects)g(the)g -(default)h(k)o(eymap.)315 1008 y Ft(mark-directories)555 -1063 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 1117 -y(The)15 b(default)h(is)g(`)p Ft(on)p Fu('.)315 1203 -y Ft(mark-modified-lines)555 1258 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 1312 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 1367 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p -Fu(')e(b)o(y)h(default.)315 1452 y Ft(output-meta)555 -1507 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 -1562 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 1617 y(default)16 -b(is)f(`)p Ft(off)p Fu('.)315 1702 y Ft(print-completions-horizont)o -(ally)555 1757 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 -1812 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 1866 y(The)15 b(default)h(is)g(`)p -Ft(off)p Fu('.)315 1952 y Ft(show-all-if-ambiguous)555 -2006 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 2061 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 2116 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 2171 y(The)c(default)h(v)m(alue)h(is)e(`)p -Ft(off)p Fu('.)315 2256 y Ft(visible-stats)555 2311 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 -2366 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 2451 y(Key)h(Bindings)315 -2506 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h -(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20 -b(y)o(ou)315 2560 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f -(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 -b(The)14 b(follo)o(wing)315 2615 y(sections)k(con)o(tain)h(tables)f(of) -f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y) -l(,)315 2670 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 149 y(Once)19 b(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g -(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315 -204 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e -(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315 -259 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g -(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315 -314 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)e -(comfortable.)315 392 y Fk(k)o(eyname)s Fu(:)19 b Fk(function-name)g -Fu(or)c Fk(macro)555 447 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 511 y Ft(Control-u:)22 b(universal-argument)675 -563 y(Meta-Rubout:)g(backward-kill-word)675 615 y(Control-o:)g(">)i -(output")555 682 y Fu(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i -Fo(C-u)e Fu(is)h(b)q(ound)g(to)f(the)g(function)h Ft(universal-)555 -736 y(argument)p Fu(,)e Fo(M-DEL)h Fu(is)g(b)q(ound)h(to)e(the)h -(function)h Ft(backward-kill-word)p Fu(,)555 791 y(and)g -Fo(C-o)f Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g -(the)f(righ)o(t)h(hand)555 846 y(side)c(\(that)e(is,)i(to)e(insert)i -(the)f(text)g(`)p Ft(>)f(output)p Fu(')g(in)o(to)i(the)f(line\).)555 -913 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e(names) -g(are)g(recognized)i(while)g(pro-)555 968 y(cessing)13 -b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fk(DEL)p -Fu(,)11 b Fk(ESC)p Fu(,)h Fk(ESCAPE)p Fu(,)f Fk(LFD)p -Fu(,)g Fk(NEW-)555 1022 y(LINE)p Fu(,)16 b Fk(RET)p Fu(,)f -Fk(RETURN)p Fu(,)g Fk(R)o(UBOUT)p Fu(,)h Fk(SP)l(A)o(CE)p -Fu(,)f Fk(SPC)p Fu(,)f(and)i Fk(T)l(AB)p Fu(.)315 1101 -y Ft(")p Fk(k)o(eyseq)q Ft(")p Fu(:)k Fk(function-name)e -Fu(or)d Fk(macro)555 1156 y(k)o(eyseq)i Fu(di\013ers)e(from)g -Fk(k)o(eyname)j Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g -(an)f(en-)555 1211 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 -1265 y(double)e(quotes.)j(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey) -g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 1320 y(in)j(the)f(follo)o -(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are) -f(not)555 1375 y(recognized.)675 1439 y Ft("\\C-u":)23 -b(universal-argument)675 1491 y("\\C-x\\C-r":)f(re-read-init-file)675 -1543 y("\\e[11~":)h("Function)f(Key)i(1")555 1609 y Fu(In)33 -b(the)f(ab)q(o)o(v)o(e)g(example,)37 b Fo(C-u)32 b Fu(is)h(again)f(b)q -(ound)h(to)f(the)g(function)555 1664 y Ft(universal-argument)19 -b Fu(\(just)j(as)f(it)h(w)o(as)f(in)i(the)f(\014rst)f(example\),)j(`)p -Fo(C-x)555 1719 y(C-r)p Fu(')c(is)h(b)q(ound)g(to)f(the)h(function)g -Ft(re-read-init-file)p Fu(,)f(and)g(`)1731 1717 y Fn(h)p -1743 1691 70 2 v 1743 1719 a Fm(ESC)p 1743 1727 V 1810 -1717 a Fn(i)15 b(h)p 1852 1691 10 2 v 1852 1719 a Fm([)p -1852 1727 V 1860 1717 a Fn(i)555 1772 y(h)p 567 1746 -18 2 v 567 1774 a Fm(1)p 567 1781 V 583 1772 a Fn(i)g(h)p -625 1746 V 625 1774 a Fm(1)p 625 1781 V 640 1772 a Fn(i)g(h)p -683 1746 24 2 v 683 1774 a Ft(~)p 683 1781 V 704 1772 -a Fn(i)719 1774 y Fu(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p -Ft(Function)f(Key)g(1)p Fu('.)315 1852 y(The)h(follo)o(wing)h -Fp(gnu)e Fu(Emacs)h(st)o(yle)g(escap)q(e)h(sequences)g(are)e(a)o(v)m -(ailable)j(when)e(sp)q(ecifying)315 1907 y(k)o(ey)g(sequences:)315 -1986 y Fo(\\C-)168 b Fu(con)o(trol)15 b(pre\014x)315 -2064 y Fo(\\M-)168 b Fu(meta)15 b(pre\014x)315 2143 y -Fo(\\e)192 b Fu(an)15 b(escap)q(e)h(c)o(haracter)315 -2222 y Fo(\\\\)192 b Fu(bac)o(kslash)315 2301 y Fo(\\)p -Ft(")555 2299 y Fn(h)p 567 2272 V 567 2301 a Ft(")p 567 -2308 V 589 2299 a Fn(i)604 2301 y Fu(,)15 b(a)f(double)j(quotation)e -(mark)315 2379 y Fo(\\')555 2377 y Fn(h)p 567 2351 10 -2 v 567 2379 a Fm(')p 567 2387 V 575 2377 a Fn(i)590 -2379 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 -2458 y(In)f(addition)h(to)f(the)f Fp(gnu)h Fu(Emacs)g(st)o(yle)f(escap) -q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315 -2513 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 2591 y -Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 2670 y Ft(\\b)192 -b Fu(bac)o(kspace)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)315 -149 y Ft(\\d)192 b Fu(delete)315 224 y Ft(\\f)g Fu(form)14 -b(feed)315 298 y Ft(\\n)192 b Fu(newline)315 372 y Ft(\\r)g -Fu(carriage)15 b(return)315 447 y Ft(\\t)192 b Fu(horizon)o(tal)16 -b(tab)315 521 y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 -595 y Ft(\\)p Fk(nnn)141 b Fu(the)14 b(c)o(haracter)f(whose)h -Fp(asci)q(i)e Fu(co)q(de)j(is)f(the)g(o)q(ctal)g(v)m(alue)h -Fk(nnn)f Fu(\(one)g(to)f(three)555 650 y(digits\))315 -724 y Ft(\\x)p Fk(nnn)117 b Fu(the)16 b(c)o(haracter)f(whose)h -Fp(asci)q(i)f Fu(co)q(de)i(is)f(the)h(hexadecimal)g(v)m(alue)g -Fk(nnn)g Fu(\(one)555 779 y(to)e(three)g(digits\))315 -853 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 908 -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 963 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 1018 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 1073 y(example,)14 b(the)f(follo)o(wing)g -(binding)i(will)g(mak)o(e)d(`)p Fo(C-x)i Ft(\\)p Fu(')f(insert)g(a)g -(single)h(`)p Ft(\\)p Fu(')e(in)o(to)h(the)g(line:)435 -1134 y Ft("\\C-x\\\\":)23 b("\\\\")75 1238 y Fj(1.3.2)30 -b(Conditional)20 b(Init)g(Constructs)137 1332 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 1387 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 1441 y(the)e(result)h -(of)f(tests.)k(There)c(are)g(four)g(parser)g(directiv)o(es)h(used.)75 -1516 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 1570 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 -1625 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 -1699 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 1754 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 -1809 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 1864 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 1919 y(in)k Ft(emacs)f Fu(mo)q(de.)315 -1993 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 -2048 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 2103 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 2157 -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 2212 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 -2267 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 2341 y -Ft(application)555 2396 y Fu(The)d Fk(application)i Fu(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2451 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Fk(application)555 2506 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 -2560 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 2615 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 2670 y(previous)j(w)o(ord)e(in)i(Bash:)p -eop -%%Page: 9 11 -9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)675 149 y Ft($if)23 b(Bash)675 201 y(#)h(Quote)f(the)g(current)g -(or)h(previous)f(word)675 253 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -305 y($endif)75 385 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 465 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 544 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 599 y(bindings)j(from)e(that)f(\014le.)435 -663 y Ft($include)23 b(/etc/inputrc)75 775 y Fj(1.3.3)30 -b(Sample)20 b(Init)h(File)137 872 y Fu(Here)16 b(is)g(an)f(example)h -(of)f(an)g Fk(inputrc)k Fu(\014le.)i(This)16 b(illustrates)g(k)o(ey)f -(binding,)i(v)m(ariable)f(assignmen)o(t,)75 927 y(and)f(conditional)i -(syn)o(tax.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)i(Library)195 -201 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -305 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 357 -y(#)195 409 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -616 y(#)i(/etc/Inputrc)195 668 y($include)f(/etc/Inputrc)195 -772 y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195 -1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v -195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195 -1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g -(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195 -1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195 -1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g -(previous-history)195 1914 y("\\M-[B":)g(next-history)195 -1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g -(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195 -2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g -(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p -eop -%%Page: 11 13 -11 12 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 201 y Ft(C-q:)23 b(quoted-insert)195 305 y($endif)195 -409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h -(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g -(are)h(convenient)e(for)h(shell)h(interaction)195 616 -y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720 -y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 -772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)f(insert)g(open) -h(and)f(close)g(double)g(quotes)195 824 y(#)h(and)f(move)g(to)h(just)f -(after)h(the)f(open)g(quote)195 876 y("\\C-x\\"":)g("\\"\\"\\C-b")195 -928 y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f -(in)i(sequences)f(and)g(macros\))195 980 y("\\C-x\\\\":)g("\\\\")195 -1032 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1083 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1135 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1187 y("\\C-xr":)f(redraw-current-line)195 1239 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1291 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1343 y($endif)195 -1447 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1499 y(set)f(bell-style)g(visible)195 1602 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1654 -y(set)f(input-meta)g(on)195 1758 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1810 y(#)h(prefix-meta)e(sequences)195 1862 y(set)h(convert-meta)g(off) -195 1966 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2017 y(#)h(as)f(meta-prefixed)f -(characters)195 2069 y(set)h(output-meta)g(on)195 2173 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2225 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2277 y(set)g(completion-query-items)e -(150)195 2381 y(#)j(For)f(FTP)195 2433 y($if)g(Ftp)195 -2484 y("\\C-xg":)g("get)g(\\M-?")195 2536 y("\\C-xt":)g("put)g(\\M-?") -195 2588 y("\\M-.":)g(yank-last-arg)195 2640 y($endif)p -eop -%%Page: 12 14 -12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -247 y Fu(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -315 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g -(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29 -b(In)75 369 y(the)15 b(follo)o(wing)h(descriptions,)g -Fk(p)q(oin)o(t)h Fu(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Fk(mark)h Fu(refers)e(to)f(a)75 424 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Ft(set-mark)f Fu(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 479 y(referred)h(to)g(as)g(the)g -Fk(region)p Fu(.)75 593 y Fj(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 716 y Ft(beginning-of-line)13 -b(\(C-a\))315 771 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 864 y Ft(end-of-line)f(\(C-e\))315 -919 y Fu(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1012 y Ft(forward-char)f(\(C-f\))315 1067 y Fu(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1160 y Ft(backward-char)e(\(C-b\))315 -1215 y Fu(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1309 y Ft(forward-word)f(\(M-f\))315 1363 y Fu(Mo)o(v)o(e)g(forw)o(ard) -g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q -(osed)i(of)f(letters)g(and)315 1418 y(digits.)75 1512 -y Ft(backward-word)e(\(M-b\))315 1566 y Fu(Mo)o(v)o(e)j(bac)o(k)g(to)h -(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24 -b(W)l(ords)16 b(are)h(comp)q(osed)315 1621 y(of)e(letters)g(and)g -(digits.)75 1715 y Ft(clear-screen)f(\(C-l\))315 1769 -y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,) -i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315 -1824 y(of)i(the)g(screen.)75 1918 y Ft(redraw-current-line)e(\(\))315 -1972 y Fu(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2086 y Fj(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2209 y Ft(accept-line)14 b(\(Newline)g(or)h(Return\))315 -2264 y Fu(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor) -f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315 -2319 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g -(future)g(recall)h(with)f Ft(add_history\(\))p Fu(.)k(If)d(this)315 -2374 y(line)f(is)f(a)f(mo)q(di\014ed)i(history)f(line,)h(then)f -(restore)f(the)g(history)h(line)h(to)e(its)h(original)g(state.)75 -2467 y Ft(previous-history)e(\(C-p\))315 2522 y Fu(Mo)o(v)o(e)h(`up')h -(through)g(the)g(history)g(list.)75 2615 y Ft(next-history)f(\(C-n\)) -315 2670 y Fu(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.) -p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 149 y Ft(beginning-of-history)12 b(\(M-<\))315 -204 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 307 y Ft(end-of-history)e(\(M->\))315 362 y Fu(Mo)o(v)o(e)h(to)h -(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i -(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 466 y Ft -(reverse-search-history)c(\(C-r\))315 520 y Fu(Searc)o(h)k(bac)o(kw)o -(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h -(`up')f(through)g(the)h(his-)315 575 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 678 -y Ft(forward-search-history)c(\(C-s\))315 733 y Fu(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 788 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 891 -y Ft(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -946 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t) -f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -1001 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1056 -y(user.)75 1159 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1214 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1268 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1323 y(user.)75 1427 y Ft(history-search-forward)f(\(\))315 -1481 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1536 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1591 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1694 y Ft(history-search-backward)c(\(\))315 1749 y Fu(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1804 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -1859 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1962 y Ft(yank-nth-arg)e(\(M-C-y\))315 2017 y Fu(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 2071 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Fk(n)p Fu(,)i(insert)f(the)h -Fk(n)p Fu(th)f(w)o(ord)g(from)g(the)g(previous)315 2126 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -2181 y(argumen)o(t)g(inserts)i(the)f Fk(n)p Fu(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2284 y -Ft(yank-last-arg)d(\(M-.)i(or)g(M-_\))315 2339 y Fu(Insert)j(last)f -(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f -(of)g(the)g(previous)315 2394 y(history)e(en)o(try\).)20 -b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g -Ft(yank-nth-arg)p Fu(.)j(Succes-)315 2449 y(siv)o(e)f(calls)g(to)f -Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g -(list,)i(inserting)f(the)315 2503 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2630 y Fj(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Ft(delete-char)d(\(C-d\))315 204 y Fu(Delete)j(the)f(c)o -(haracter)g(under)h(the)f(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e -(the)i(b)q(eginning)h(of)e(the)315 259 y(line,)j(there)e(are)g(no)g(c)o -(haracters)f(in)i(the)g(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o -(yp)q(ed)g(w)o(as)f(not)315 314 y(b)q(ound)g(to)f Ft(delete-char)p -Fu(,)e(then)j(return)f Fp(eof)p Fu(.)75 406 y Ft(backward-delete-char)d -(\(Rubout\))315 460 y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the) -f(cursor.)j(A)c(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 -515 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -607 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315 -662 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 -717 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 -771 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 863 -y Ft(quoted-insert)e(\(C-q)i(or)g(C-v\))315 918 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 973 -y(sequences)f(lik)o(e)h Fo(C-q)p Fu(,)d(for)h(example.)75 -1065 y Ft(tab-insert)f(\(M-)401 1063 y Fn(h)p 412 1037 -74 2 v 412 1065 a Fm(T)m(AB)p 412 1072 V 484 1063 a Fn(i)499 -1065 y Ft(\))315 1119 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 -1211 y Ft(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315 -1266 y Fu(Insert)g(y)o(ourself.)75 1358 y Ft(transpose-chars)e(\(C-t\)) -315 1413 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 -1467 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 1522 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 1577 y(ha)o(v)o(e)k(no)g(e\013ect.)75 -1669 y Ft(transpose-words)e(\(M-t\))315 1724 y Fu(Drag)i(the)h(w)o(ord) -g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o -(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1778 -y(w)o(ord)f(as)f(w)o(ell.)75 1870 y Ft(upcase-word)g(\(M-u\))315 -1925 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 -1980 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 2072 y Ft(downcase-word)d(\(M-l\))315 -2126 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 2181 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 2273 y Ft(capitalize-word)e(\(M-c\))315 -2328 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 -2383 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 2494 y Fj(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2615 y Ft(kill-line)14 b(\(C-k\))315 2670 -y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 149 y Ft(backward-kill-line)13 b(\(C-x)h(Rubout\))315 -204 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 295 y Ft(unix-line-discard)e(\(C-u\))315 349 -y Fu(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 440 y Ft(kill-whole-line)e -(\(\))315 495 y Fu(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o -(t)f(line,)j(no)e(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 -b(default,)h(this)f(is)315 549 y(un)o(b)q(ound.)75 640 -y Ft(kill-word)c(\(M-d\))315 695 y Fu(Kill)j(from)d(p)q(oin)o(t)h(to)f -(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o -(een)g(w)o(ords,)e(to)i(the)f(end)315 750 y(of)h(the)g(next)g(w)o(ord.) -20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Ft(forward-word)p Fu(.)75 840 y Ft(backward-kill-word)e(\(M-)592 -838 y Fn(h)p 603 812 73 2 v 603 840 a Fm(DEL)p 603 848 -V 674 838 a Fn(i)689 840 y Ft(\))315 895 y Fu(Kill)k(the)d(w)o(ord)g(b) -q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h -(same)f(as)g Ft(backward-word)p Fu(.)75 985 y Ft(unix-word-rubout)f -(\(C-w\))315 1040 y Fu(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o -(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23 -b(The)16 b(killed)315 1095 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 1185 y Ft(delete-horizontal-space)c(\(\))315 -1240 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 1330 -y Ft(kill-region)e(\(\))315 1385 y Fu(Kill)j(the)f(text)e(in)i(the)g -(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un) -o(b)q(ound.)75 1476 y Ft(copy-region-as-kill)d(\(\))315 -1530 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 1585 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1676 y Ft(copy-backward-word)d(\(\))315 1730 -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 -1785 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 1876 y Ft(copy-forward-word)d(\(\)) -315 1930 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 1985 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 2076 y Ft(yank)f(\(C-y\))315 -2131 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 -2221 y Ft(yank-pop)f(\(M-y\))315 2276 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 2331 y(command)d(is)h Ft(yank)e -Fu(or)h Ft(yank-pop)p Fu(.)75 2441 y Fj(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2560 y Ft(digit-argument)13 -b(\()p Fo(M-0)p Ft(,)i Fo(M-1)p Ft(,)f(...)h Fo(M--)p -Ft(\))315 2615 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 -2670 y Fo(M--)h Fu(starts)f(a)h(negativ)o(e)g(argumen)o(t.)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Ft(universal-argument)c(\(\))315 204 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 -259 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 314 -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 369 -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 -423 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 -478 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 -533 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 -588 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 -643 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 745 y Fj(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 857 y Ft(complete)14 b(\()305 855 y Fn(h)p 317 -828 74 2 v 317 857 a Fm(T)m(AB)p 317 864 V 389 855 a -Fn(i)404 857 y Ft(\))315 911 y Fu(A)o(ttempt)c(to)h(p)q(erform)g -(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 966 y(p)q(erformed)j(is)h -(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1049 y Ft(possible-completions)c(\(M-?\))315 -1103 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 1186 y Ft(insert-completions)e(\(M-*\))315 -1241 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 -1295 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1378 -y Ft(menu-complete)e(\(\))315 1433 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 1487 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 1542 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 1597 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 1652 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Fk(n)g Fu(mo)o(v)o(es)g Fk(n)g Fu(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1707 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 1761 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)1067 1759 y Fn(h)p 1079 1733 V -1079 1761 a Fm(T)m(AB)p 1079 1769 V 1150 1759 a Fn(i)1165 -1761 y Fu(,)f(but)h(is)f(un)o(b)q(ound)i(b)o(y)e(default.)75 -1844 y Ft(delete-char-or-list)e(\(\))315 1899 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 1954 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 2008 y(completions)p -Fu(.)k(This)e(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75 -2111 y Fj(1.4.7)30 b(Keyb)r(oard)20 b(Macros)75 2222 -y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 2277 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 2360 y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 -2414 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 2469 y(de\014nition.)75 2552 y Ft(call-last-kbd-macro)g(\(C-x) -h(e\))315 2606 y Fu(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h -(macro)f(de\014ned,)i(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the) -315 2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k) -o(eyb)q(oard.)p eop -%%Page: 17 19 -17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Fj(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -265 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 320 -y Fu(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Fk(inputrc)k -Fu(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 374 y(assignmen)o(ts)k(found)h(there.)75 -461 y Ft(abort)e(\(C-g\))315 515 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 570 y(setting)i(of)g Ft(bell-style)p -Fu(\).)75 657 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fk(x)p Ft(,)h(...\))315 711 y Fu(If)f(the)g(meta\014ed)g(c)o(haracter)f -Fk(x)k Fu(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g(b)q -(ound)h(to)e(the)315 766 y(corresp)q(onding)j(upp)q(ercase)g(c)o -(haracter.)75 852 y Ft(prefix-meta)e(\()377 850 y Fn(h)p -389 824 70 2 v 389 852 a Fm(ESC)p 389 860 V 456 850 a -Fn(i)471 852 y Ft(\))315 907 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 962 y(meta)d(k)o(ey)l(.)20 b(T)o(yping)15 -b(`)694 960 y Fn(h)p 706 934 V 706 962 a Fm(ESC)p 706 -970 V 773 960 a Fn(i)803 962 y Ft(f)p Fu(')g(is)g(equiv)m(alen)o(t)i -(to)e(t)o(yping)g Fo(M-f)p Fu(.)75 1048 y Ft(undo)g(\(C-_)f(or)h(C-x)g -(C-u\))315 1103 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1189 y Ft(revert-line)f(\(M-r\))315 -1244 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 1299 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1385 y Ft(tilde-expand)f(\(M-~\))315 -1440 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1526 y Ft(set-mark)f(\(C-@\))315 1581 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 1636 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1722 y Ft(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1777 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 1832 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 1918 -y Ft(character-search)e(\(C-]\))315 1973 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 2028 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2114 y Ft(character-search-backward)c(\(M-C-]\))315 2169 -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 -2223 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 2310 y Ft(insert-comment)d(\(M-#\)) -315 2365 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 -2419 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 -Fk(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Ft(dump-variables)c(\(\))315 204 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 259 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 314 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Fk(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 406 y Ft(dump-macros)f(\(\))315 -461 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 -516 y(output.)26 b(If)18 b(a)f(n)o(umeric)h(argumen)o(t)f(is)h -(supplied,)i(the)d(output)g(is)h(formatted)e(in)j(suc)o(h)e(a)315 -570 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Fk(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 625 y(default.)75 754 y Fs(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 850 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 -905 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 960 y(the)c Fp(posix)g Fu(1003.2)f(standard.) -137 1027 y(In)h(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o -(w)o(een)f Ft(emacs)e Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f -(the)h(command)75 1082 y Fo(M-C-j)f Fu(\(toggle-editing-mo)q(de\).)21 -b(The)16 b(Readline)h(default)f(is)g Ft(emacs)e Fu(mo)q(de.)137 -1149 y(When)i(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 1204 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Ft(i)p Fu('.)18 b(Pressing)608 1202 y Fn(h)p 620 1176 -70 2 v 620 1204 a Fm(ESC)p 620 1211 V 687 1202 a Fn(i)715 -1204 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 1259 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 1313 -y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop -%%Page: 19 21 -19 20 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(19)75 149 y Fq(2)41 b(Programming)28 -b(with)e(GNU)i(Readline)137 267 y Fu(This)16 b(c)o(hapter)f(describ)q -(es)i(the)f(in)o(terface)g(b)q(et)o(w)o(een)f(the)h(GNU)f(Readline)j -(Library)e(and)f(other)g(pro-)75 322 y(grams.)38 b(If)22 -b(y)o(ou)f(are)g(a)g(programmer,)h(and)f(y)o(ou)g(wish)i(to)d(include)k -(the)e(features)f(found)h(in)g(GNU)75 377 y(Readline)16 -b(suc)o(h)e(as)f(completion,)h(line)h(editing,)g(and)f(in)o(teractiv)o -(e)g(history)f(manipulation)i(in)g(y)o(our)d(o)o(wn)75 -432 y(programs,)i(this)h(section)h(is)g(for)e(y)o(ou.)75 -561 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 658 y Fu(Man)o(y)15 -b(programs)f(pro)o(vide)i(a)f(command)g(line)i(in)o(terface,)e(suc)o(h) -h(as)f Ft(mail)p Fu(,)f Ft(ftp)p Fu(,)h(and)g Ft(sh)p -Fu(.)20 b(F)l(or)15 b(suc)o(h)75 713 y(programs,)e(the)h(default)h(b)q -(eha)o(viour)g(of)f(Readline)j(is)d(su\016cien)o(t.)21 -b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75 -768 y(Readline)19 b(in)g(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p) -q(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e -Ft(gets\(\))g Fu(or)75 822 y Ft(fgets\(\))p Fu(.)195 -887 y Ft(char)23 b(*readline)g(\(const)g(char)g(*)p Fk(prompt)q -Ft(\);)137 955 y Fu(The)17 b(function)g Ft(readline\(\))e -Fu(prin)o(ts)h(a)g(prompt)g Fk(prompt)h Fu(and)f(then)h(reads)f(and)h -(returns)f(a)g(single)75 1009 y(line)i(of)e(text)g(from)f(the)i(user.) -23 b(If)17 b Fk(prompt)g Fu(is)g Ft(NULL)e Fu(or)h(the)h(empt)o(y)f -(string,)g(no)g(prompt)g(is)h(displa)o(y)o(ed.)75 1064 -y(The)i(line)h Ft(readline)d Fu(returns)i(is)g(allo)q(cated)g(with)g -Ft(malloc\(\))p Fu(;)g(the)g(caller)g(should)h Ft(free\(\))e -Fu(the)g(line)75 1119 y(when)e(it)f(has)g(\014nished)i(with)f(it.)k -(The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)75 -1187 y(So,)g(one)g(migh)o(t)g(sa)o(y)195 1251 y Ft(char)23 -b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)75 -1319 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f -(the)i(user.)19 b(The)11 b(line)j(returned)d(has)h(the)f(\014nal)h -(newline)i(remo)o(v)o(ed,)75 1374 y(so)h(only)h(the)f(text)g(remains.) -137 1441 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g -Ft(EOF)g Fu(while)i(reading)f(the)f(line,)j(and)d(the)h(line)g(is)g -(empt)o(y)f(at)g(that)75 1496 y(p)q(oin)o(t,)15 b(then)g -Ft(\(char)f(*\)NULL)g Fu(is)h(returned.)21 b(Otherwise,)15 -b(the)g(line)h(is)f(ended)h(just)e(as)h(if)g(a)f(newline)j(had)75 -1551 y(b)q(een)f(t)o(yp)q(ed.)137 1618 y(If)d(y)o(ou)g(w)o(an)o(t)f -(the)h(user)g(to)f(b)q(e)i(able)g(to)e(get)g(at)h(the)g(line)h(later,)f -(\(with)1325 1616 y Fn(h)p 1338 1590 57 2 v 1338 1618 -a Fm(C-p)p 1338 1626 V 1392 1616 a Fn(i)1420 1618 y Fu(for)f -(example\),)i(y)o(ou)f(m)o(ust)75 1673 y(call)j Ft(add_history\(\))e -Fu(to)g(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)e -Fk(history)19 b Fu(list)d(of)f(suc)o(h)h(lines.)195 1738 -y Ft(add_history)22 b(\(line\);)75 1805 y Fu(F)l(or)15 -b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f -(asso)q(ciated)g(man)o(ual.)137 1873 y(It)h(is)g(preferable)h(to)e(a)o -(v)o(oid)g(sa)o(ving)h(empt)o(y)f(lines)i(on)f(the)g(history)f(list,)i -(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1928 y(burning)h(need)g(to) -e(reuse)h(a)g(blank)g(line.)22 b(Here)15 b(is)g(a)g(function)g(whic)o -(h)h(usefully)h(replaces)e(the)g(standard)75 1983 y Ft(gets\(\))f -Fu(library)i(function,)g(and)f(has)g(the)h(adv)m(an)o(tage)e(of)h(no)g -(static)g(bu\013er)g(to)g(o)o(v)o(er\015o)o(w:)195 2047 -y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/) -195 2099 y(static)g(char)g(*line_read)g(=)h(\(char)f(*\)NULL;)195 -2203 y(/*)h(Read)f(a)h(string,)f(and)g(return)g(a)h(pointer)f(to)g(it.) -48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)195 2255 y(char)f(*)195 -2307 y(rl_gets)g(\(\))195 2359 y({)243 2411 y(/*)g(If)h(the)f(buffer)g -(has)h(already)f(been)g(allocated,)g(return)g(the)g(memory)314 -2462 y(to)h(the)f(free)h(pool.)f(*/)243 2514 y(if)g(\(line_read\))290 -2566 y({)338 2618 y(free)g(\(line_read\);)338 2670 y(line_read)g(=)h -(\(char)f(*\)NULL;)p eop -%%Page: 20 22 -20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)i(Library)290 -149 y Ft(})243 253 y(/*)23 b(Get)h(a)f(line)h(from)f(the)h(user.)f(*/) -243 305 y(line_read)f(=)i(readline)f(\(""\);)243 409 -y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f -(the)h(history.)f(*/)243 461 y(if)g(\(line_read)g(&&)g(*line_read\))290 -513 y(add_history)g(\(line_read\);)243 616 y(return)g(\(line_read\);) -195 668 y(})137 738 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h -(the)g(default)h(b)q(eha)o(viour)g(of)1169 736 y Fn(h)p -1181 710 74 2 v 1181 738 a Fm(T)m(AB)p 1181 746 V 1253 -736 a Fn(i)1280 738 y Fu(completion:)19 b(completion)13 -b(on)f(\014le)75 793 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t) -f(Readline)k(to)c(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o -(hange)h(the)f(binding)75 848 y(of)g(the)205 846 y Fn(h)p -217 820 V 217 848 a Fm(T)m(AB)p 217 855 V 289 846 a Fn(i)319 -848 y Fu(k)o(ey)g(with)h Ft(rl_bind_key\(\))p Fu(.)195 -914 y Ft(int)23 b(rl_bind_key)g(\(int)g Fk(k)o(ey)p Ft(,)h -(rl_command_func_t)d(*)p Fk(function)p Ft(\);)137 984 -y(rl_bind_key\(\))15 b Fu(tak)o(es)h(t)o(w)o(o)g(argumen)o(ts:)22 -b Fk(k)o(ey)e Fu(is)e(the)e(c)o(haracter)g(that)g(y)o(ou)h(w)o(an)o(t)f -(to)g(bind,)i(and)75 1039 y Fk(function)h Fu(is)f(the)g(address)g(of)g -(the)g(function)g(to)g(call)h(when)f Fk(k)o(ey)k Fu(is)c(pressed.)29 -b(Binding)1628 1037 y Fn(h)p 1641 1011 V 1641 1039 a -Fm(T)m(AB)p 1641 1046 V 1712 1037 a Fn(i)1745 1039 y -Fu(to)17 b Ft(rl_)75 1094 y(insert\(\))f Fu(mak)o(es)422 -1092 y Fn(h)p 434 1066 V 434 1094 a Fm(T)m(AB)p 434 1101 -V 506 1092 a Fn(i)539 1094 y Fu(insert)i(itself.)28 b -Ft(rl_bind_key\(\))15 b Fu(returns)j(non-zero)g(if)g -Fk(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1148 y(ASCI)q(I)f(c)o -(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137 -1218 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1216 -y Fn(h)p 716 1190 V 716 1218 a Fm(T)m(AB)p 716 1226 V -787 1216 a Fn(i)817 1218 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h -(su\016ces:)195 1285 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137 -1354 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e -(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a) -g(func-)75 1409 y(tion)k(called)h Ft(initialize_readline\(\))13 -b Fu(whic)o(h)k(p)q(erforms)f(this)h(and)g(other)f(desired)h -(initializations,)75 1464 y(suc)o(h)f(as)e(installing)k(custom)c -(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h -(37\).)75 1599 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 -1697 y Fu(Readline)15 b(pro)o(vides)e(man)o(y)e(functions)i(for)f -(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q -(ossi-)75 1752 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h -(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h -(functions)g(and)75 1807 y(v)m(ariables)g(de\014ned)h(within)f(the)f -(Readline)j(library)d(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h -(add)g(customized)75 1862 y(functionalit)o(y)j(to)f(Readline.)137 -1931 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g -(Readline's)i(b)q(eha)o(vior,)g(or)d(using)i(an)o(y)f(func-)75 -1986 y(tionalit)o(y)23 b(Readline)i(pro)o(vides)f(in)f(other)g(co)q -(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75 -2041 y Ft()14 b Fu(in)j(an)o(y)g(\014le)h(that)e -(uses)h(Readline's)h(features.)24 b(Since)19 b(some)d(of)g(the)h -(de\014-)75 2096 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g -Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft()f -Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2151 y Ft(readline.h)p -Fu(.)75 2268 y Fj(2.2.1)30 b(Readline)20 b(T)n(yp)r(edefs)137 -2366 y Fu(F)l(or)15 b(readabilt)o(y)l(,)g(w)o(e)g(declare)i(a)d(n)o(um) -o(b)q(er)i(of)f(new)g(ob)s(ject)g(t)o(yp)q(es,)g(all)h(p)q(oin)o(ters)f -(to)g(functions.)137 2436 y(The)j(reason)g(for)f(declaring)i(these)f -(new)g(t)o(yp)q(es)g(is)h(to)e(mak)o(e)g(it)h(easier)h(to)e(write)h(co) -q(de)g(describing)75 2491 y(p)q(oin)o(ters)e(to)e(C)h(functions)h(with) -g(appropriately)f(protot)o(yp)q(ed)g(argumen)o(ts)g(and)g(return)g(v)m -(alues.)137 2560 y(F)l(or)j(instance,)i(sa)o(y)e(w)o(e)g(w)o(an)o(t)f -(to)h(declare)h(a)f(v)m(ariable)i Fk(func)i Fu(as)c(a)g(p)q(oin)o(ter)h -(to)f(a)g(function)h(whic)o(h)75 2615 y(tak)o(es)12 b(t)o(w)o(o)g -Ft(int)g Fu(argumen)o(ts)g(and)h(returns)g(an)g Ft(int)f -Fu(\(this)h(is)g(the)g(t)o(yp)q(e)g(of)g(all)g(of)g(the)g(Readline)i -(bindable)75 2670 y(functions\).)20 b(Instead)c(of)f(the)g(classic)h(C) -f(declaration)p eop -%%Page: 21 23 -21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(21)137 149 y Ft(int)15 b(\(*func\)\(\);)75 -220 y Fu(or)g(the)g(ANSI-C)h(st)o(yle)f(declaration)137 -290 y Ft(int)g(\(*func\)\(int,)f(int\);)75 360 y Fu(w)o(e)h(ma)o(y)f -(write)137 430 y Ft(rl_command_func_t)f(*func;)137 500 -y Fu(The)j(full)g(list)g(of)f(function)h(p)q(oin)o(ter)g(t)o(yp)q(es)f -(a)o(v)m(ailable)i(is)75 584 y Ft(typedef)d(int)h(rl_command_func_t)e -(\(int,)h(int\);)75 652 y(typedef)g(char)h(*rl_compentry_func_t)d -(\(const)j(char)f(*,)h(int\);)75 721 y(typedef)f(char)h -(**rl_completion_func_t)d(\(const)i(char)h(*,)g(int,)f(int\);)75 -790 y(typedef)g(char)h(*rl_quote_func_t)e(\(char)h(*,)h(int,)g(char)f -(*\);)75 858 y(typedef)g(char)h(*rl_dequote_func_t)d(\(char)j(*,)g -(int\);)75 927 y(typedef)f(int)h(rl_compignore_func_t)d(\(char)j(**\);) -75 996 y(typedef)f(void)h(rl_compdisp_func_t)d(\(char)j(**,)g(int,)f -(int\);)75 1064 y(typedef)g(int)h(rl_hook_func_t)e(\(void\);)75 -1133 y(typedef)h(int)h(rl_getc_func_t)e(\(FILE)i(*\);)75 -1202 y(typedef)f(int)h(rl_linebuf_func_t)e(\(char)h(*,)h(int\);)75 -1270 y(typedef)f(int)h(rl_intfunc_t)e(\(int\);)75 1339 -y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)75 1408 y(typedef)h(int)h -(rl_icpfunc_t)e(\(char)i(*\);)75 1476 y(typedef)f(int)h(rl_icppfunc_t)e -(\(char)i(**\);)75 1545 y(typedef)f(void)h(rl_voidfunc_t)e(\(void\);)75 -1614 y(typedef)h(void)h(rl_vintfunc_t)e(\(int\);)75 1682 -y(typedef)h(void)h(rl_vcpfunc_t)e(\(char)i(*\);)75 1751 -y(typedef)f(void)h(rl_vcppfunc_t)e(\(char)i(**\);)75 -1855 y Fj(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 -b(unction)137 1954 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g -(for)e(Readline,)j(y)o(ou)e(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o -(v)o(en)o(tions)75 2009 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h -(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d -(describ)q(e)k(the)d(curren)o(t)75 2064 y(state)c(of)h(the)g(line)i -(read)e(so)g(far.)137 2134 y(The)h(calling)h(sequence)f(for)f(a)f -(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 2201 y -Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 2271 y Fu(where)18 -b Fk(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o(t)e(\(or)h(1)f(if) -i(defaulted\))f(and)g Fk(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v) -o(ok)o(ed)75 2326 y(this)f(function.)137 2396 y(It)c(is)g(completely)h -(up)f(to)f(the)g(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g -(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 2451 y(Some)20 -b(functions)h(use)f(it)g(as)g(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g -(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)75 -2506 y(b)q(eha)o(vior)i(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d -(opp)q(osed)h(to)f(refreshing)i(the)e(screen,)j(for)d(example\).)75 -2560 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18 -b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o(umeric)h(argumen)o(t) -d(as)i(a)f(rep)q(eat)75 2615 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h -(to)e(do)h(something)h(useful)g(with)f(b)q(oth)g(negativ)o(e)g(and)g(p) -q(ositiv)o(e)h(argumen)o(ts.)75 2670 y(A)o(t)g(the)g(v)o(ery)g(least,)g -(it)g(should)h(b)q(e)g(a)o(w)o(are)e(that)h(it)g(can)g(b)q(e)h(passed)g -(a)f(negativ)o(e)g(argumen)o(t.)p eop -%%Page: 22 24 -22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fs(2.3)33 b(Readline)23 b(V)-6 b(ariables)137 246 -y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h -(writers.)1773 362 y(V)l(ariable)-1861 b Fi(char)20 b(*)f -Fh(rl)p 286 362 18 3 v 21 w(line)p 395 362 V 23 w(bu\013er)195 -417 y Fu(This)d(is)g(the)g(line)h(gathered)f(so)f(far.)20 -b(Y)l(ou)c(are)f(w)o(elcome)h(to)f(mo)q(dify)h(the)g(con)o(ten)o(ts)f -(of)g(the)h(line,)195 472 y(but)i(see)g(Section)h(2.4.5)d([Allo)o(wing) -i(Undoing],)h(page)e(29.)27 b(The)18 b(function)h Ft(rl_extend_line_) -195 526 y(buffer)14 b Fu(is)i(a)o(v)m(ailable)h(to)d(increase)j(the)e -(memory)f(allo)q(cated)j(to)d Ft(rl_line_buffer)p Fu(.)1773 -643 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 643 -V 21 w(p)r(oin)n(t)195 698 y Fu(The)15 b(o\013set)g(of)f(the)i(curren)o -(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d -Fu(\(the)i Fl(p)n(oint)t Fu(\).)1773 814 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 814 V 21 w(end)195 869 y Fu(The)14 -b(n)o(um)o(b)q(er)g(of)g(c)o(haracters)f(presen)o(t)h(in)h -Ft(rl_line_buffer)p Fu(.)i(When)e Ft(rl_point)e Fu(is)h(at)f(the)h(end) -195 924 y(of)h(the)g(line,)i Ft(rl_point)d Fu(and)h Ft(rl_end)f -Fu(are)h(equal.)1773 1040 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 1040 V 21 w(mark)195 1095 y Fu(The)f Fk(mark)h -Fu(\(sa)o(v)o(ed)e(p)q(osition\))h(in)g(the)g(curren)o(t)f(line.)31 -b(If)19 b(set,)g(the)f(mark)g(and)h(p)q(oin)o(t)g(de\014ne)g(a)195 -1150 y Fl(r)n(e)n(gion)p Fu(.)1773 1266 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1266 V 21 w(done)195 1321 y -Fu(Setting)11 b(this)g(to)g(a)f(non-zero)h(v)m(alue)h(causes)f -(Readline)i(to)e(return)f(the)h(curren)o(t)g(line)h(immediately)l(.) -1773 1437 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 -1437 V 21 w(n)n(um)p 347 1437 V 19 w(c)n(hars)p 496 1437 -V 20 w(to)p 567 1437 V 21 w(read)195 1492 y Fu(Setting)d(this)g(to)f(a) -g(p)q(ositiv)o(e)h(v)m(alue)h(b)q(efore)f(calling)h Ft(readline\(\))d -Fu(causes)h(Readline)j(to)d(return)195 1547 y(after)h(accepting)i(that) -e(man)o(y)g(c)o(haracters,)h(rather)f(than)h(reading)g(up)g(to)f(a)h(c) -o(haracter)f(b)q(ound)195 1602 y(to)e Ft(accept-line)p -Fu(.)1773 1718 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p -215 1718 V 21 w(p)r(ending)p 436 1718 V 20 w(input)195 -1773 y Fu(Setting)13 b(this)g(to)f(a)g(v)m(alue)i(mak)o(es)e(it)h(the)f -(next)h(k)o(eystrok)o(e)f(read.)19 b(This)13 b(is)g(a)f(w)o(a)o(y)g(to) -f(stu\013)h(a)h(single)195 1828 y(c)o(haracter)h(in)o(to)i(the)f(input) -h(stream.)1773 1944 y(V)l(ariable)-1861 b Fi(int)20 b -Fh(rl)p 215 1944 V 21 w(dispatc)n(hing)195 1999 y Fu(Set)12 -b(to)g(a)f(non-zero)i(v)m(alue)g(if)g(a)f(function)h(is)f(b)q(eing)i -(called)f(from)f(a)f(k)o(ey)h(binding;)j(zero)d(otherwise.)195 -2054 y(Application)20 b(functions)e(can)g(test)g(this)g(to)f(disco)o(v) -o(er)h(whether)g(they)g(w)o(ere)g(called)h(directly)g(or)195 -2108 y(b)o(y)c(Readline's)i(dispatc)o(hing)g(mec)o(hanism.)1773 -2225 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2225 -V 21 w(erase)p 363 2225 V 20 w(empt)n(y)p 540 2225 V -20 w(line)195 2280 y Fu(Setting)j(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 -2334 y(line,)g(including)h(an)o(y)c(prompt,)h(an)o(y)g(time)g(a)f -(newline)j(is)e(t)o(yp)q(ed)g(as)f(the)h(only)g(c)o(haracter)f(on)195 -2389 y(an)e(otherwise-empt)o(y)g(line.)31 b(The)18 b(cursor)g(is)h(mo)o -(v)o(ed)e(to)h(the)g(b)q(eginning)i(of)e(the)g(newly-blank)195 -2444 y(line.)1773 2560 y(V)l(ariable)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 2560 V 21 w(prompt)195 2615 y Fu(The)13 -b(prompt)g(Readline)i(uses.)20 b(This)13 b(is)h(set)f(from)f(the)h -(argumen)o(t)g(to)f Ft(readline\(\))p Fu(,)g(and)h(should)195 -2670 y(not)i(b)q(e)h(assigned)f(to)g(directly)l(.)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)1773 149 y(V)l(ariable)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(already)p 419 149 V 21 -w(prompted)195 204 y Fu(If)e(an)g(application)i(wishes)f(to)f(displa)o -(y)h(the)f(prompt)g(itself,)h(rather)f(than)g(ha)o(v)o(e)g(Readline)i -(do)195 259 y(it)d(the)f(\014rst)g(time)h Ft(readline\(\))e -Fu(is)i(called,)h(it)e(should)i(set)e(this)h(v)m(ariable)g(to)f(a)g -(non-zero)h(v)m(alue)195 314 y(after)h(displa)o(ying)j(the)e(prompt.)31 -b(The)19 b(prompt)g(m)o(ust)f(also)h(b)q(e)h(passed)f(as)f(the)h -(argumen)o(t)g(to)195 369 y Ft(readline\(\))c Fu(so)h(the)h(redispla)o -(y)g(functions)h(can)e(up)q(date)h(the)g(displa)o(y)h(prop)q(erly)l(.) -24 b(The)17 b(calling)195 423 y(application)g(is)f(resp)q(onsible)h -(for)d(managing)h(the)h(v)m(alue;)g(Readline)h(nev)o(er)f(sets)e(it.) -1773 555 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f -Fh(rl)p 436 555 V 21 w(library)p 625 555 V 21 w(v)n(ersion)195 -610 y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g -(of)f(the)g(library)l(.)1773 741 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 741 V 21 w(gn)n(u)p 327 741 -V 20 w(readline)p 545 741 V 22 w(p)195 796 y Fu(Alw)o(a)o(ys)15 -b(set)g(to)f(1,)h(denoting)h(that)e(this)i(is)g Fp(gnu)f -Fu(readline)h(rather)f(than)g(some)g(em)o(ulation.)1773 -928 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 928 V 21 w(terminal)p 668 928 V 21 w(name)195 982 -y Fu(The)14 b(terminal)h(t)o(yp)q(e,)f(used)h(for)e(initialization.)23 -b(If)14 b(not)f(set)h(b)o(y)g(the)g(application,)i(Readline)g(sets)195 -1037 y(this)g(to)e(the)h(v)m(alue)i(of)e(the)g Ft(TERM)g -Fu(en)o(vironmen)o(t)g(v)m(ariable)i(the)e(\014rst)g(time)g(it)h(is)f -(called.)1773 1169 y(V)l(ariable)-1861 b Fi(const)20 -b(char)g(*)f Fh(rl)p 436 1169 V 21 w(readline)p 655 1169 -V 22 w(name)195 1223 y Fu(This)d(v)m(ariable)h(is)f(set)g(to)f(a)g -(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.)24 -b(The)16 b(v)m(alue)195 1278 y(allo)o(ws)e(conditional)i(parsing)e(of)g -(the)g(inputrc)h(\014le)g(\(see)f(Section)h(1.3.2)d([Conditional)j -(Init)g(Con-)195 1333 y(structs],)f(page)h(8\).)1773 -1465 y(V)l(ariable)-1861 b Fi(FILE)20 b(*)f Fh(rl)p 286 -1465 V 21 w(instream)195 1519 y Fu(The)c(stdio)h(stream)e(from)h(whic)o -(h)h(Readline)h(reads)e(input.)1773 1651 y(V)l(ariable)-1861 -b Fi(FILE)20 b(*)f Fh(rl)p 286 1651 V 21 w(outstream)195 -1706 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q -(erforms)e(output.)1773 1837 y(V)l(ariable)-1861 b Fi -(rl_command_func_t)22 b(*)d Fh(rl)p 626 1837 V 21 w(last)p -735 1837 V 21 w(func)195 1892 y Fu(The)f(address)f(of)g(the)g(last)h -(command)f(function)h(Readline)i(executed.)27 b(Ma)o(y)17 -b(b)q(e)h(used)g(to)f(test)195 1947 y(whether)e(or)g(not)g(a)g -(function)h(is)f(b)q(eing)i(executed)f(t)o(wice)g(in)g(succession,)g -(for)e(example.)1773 2078 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 -b(*)e Fh(rl)p 547 2078 V 22 w(startup)p 752 2078 V 19 -w(ho)r(ok)195 2133 y Fu(If)e(non-zero,)h(this)g(is)f(the)h(address)f -(of)f(a)h(function)h(to)f(call)h(just)f(b)q(efore)g Ft(readline)f -Fu(prin)o(ts)i(the)195 2188 y(\014rst)d(prompt.)1773 -2319 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e -Fh(rl)p 547 2319 V 22 w(pre)p 651 2319 V 20 w(input)p -804 2319 V 21 w(ho)r(ok)195 2374 y Fu(If)f(non-zero,)g(this)g(is)h(the) -f(address)f(of)h(a)f(function)i(to)e(call)i(after)e(the)h(\014rst)f -(prompt)g(has)h(b)q(een)195 2429 y(prin)o(ted)e(and)f(just)g(b)q(efore) -h Ft(readline)e Fu(starts)g(reading)h(input)i(c)o(haracters.)1773 -2560 y(V)l(ariable)-1861 b Fi(rl_hook_func_t)21 b(*)e -Fh(rl)p 547 2560 V 22 w(ev)n(en)n(t)p 701 2560 V 22 w(ho)r(ok)195 -2615 y Fu(If)j(non-zero,)h(this)e(is)h(the)g(address)f(of)g(a)g -(function)i(to)d(call)j(p)q(erio)q(dically)h(when)e(readline)h(is)195 -2670 y(w)o(aiting)15 b(for)g(terminal)h(input.)p eop -%%Page: 24 26 -24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)i(Library)1773 -149 y(V)l(ariable)-1861 b Fi(rl_getc_func_t)21 b(*)e -Fh(rl)p 547 149 18 3 v 22 w(getc)p 671 149 V 21 w(function)195 -204 y Fu(If)14 b(non-zero,)g Ft(readline)f Fu(will)i(call)g(indirectly) -h(through)d(this)i(p)q(oin)o(ter)f(to)f(get)g(a)h(c)o(haracter)f(from) -195 259 y(the)18 b(input)h(stream.)28 b(By)18 b(default,)h(it)f(is)h -(set)e(to)h Ft(rl_getc)p Fu(,)f(the)h(default)h Ft(readline)e -Fu(c)o(haracter)195 314 y(input)f(function)g(\(see)f(Section)h(2.4.8)e -([Character)g(Input],)h(page)g(32\).)1773 442 y(V)l(ariable)-1861 -b Fi(rl_voidfunc_t)21 b(*)e Fh(rl)p 521 442 V 21 w(redispla)n(y)p -765 442 V 22 w(function)195 497 y Fu(If)e(non-zero,)f -Ft(readline)g Fu(will)i(call)g(indirectly)g(through)e(this)h(p)q(oin)o -(ter)g(to)f(up)q(date)h(the)g(displa)o(y)195 552 y(with)d(the)f(curren) -o(t)h(con)o(ten)o(ts)f(of)g(the)g(editing)i(bu\013er.)k(By)14 -b(default,)g(it)g(is)g(set)f(to)g Ft(rl_redisplay)p Fu(,)195 -607 y(the)i(default)h Ft(readline)e Fu(redispla)o(y)i(function)g(\(see) -g(Section)g(2.4.6)d([Redispla)o(y],)j(page)f(30\).)1773 -735 y(V)l(ariable)-1861 b Fi(rl_vintfunc_t)21 b(*)e Fh(rl)p -521 735 V 21 w(prep)p 656 735 V 21 w(term)p 798 735 V -19 w(function)195 790 y Fu(If)11 b(non-zero,)g Ft(readline)e -Fu(will)j(call)g(indirectly)h(through)d(this)h(p)q(oin)o(ter)g(to)e -(initialize)14 b(the)d(terminal.)195 844 y(The)19 b(function)g(tak)o -(es)f(a)g(single)i(argumen)o(t,)e(an)h Ft(int)f Fu(\015ag)g(that)g(sa)o -(ys)g(whether)g(or)h(not)f(to)g(use)195 899 y(eigh)o(t-bit)g(c)o -(haracters.)25 b(By)17 b(default,)h(this)f(is)h(set)e(to)h -Ft(rl_prep_terminal)e Fu(\(see)i(Section)h(2.4.9)195 -954 y([T)l(erminal)e(Managemen)o(t],)d(page)i(32\).)1773 -1082 y(V)l(ariable)-1861 b Fi(rl_voidfunc_t)21 b(*)e -Fh(rl)p 521 1082 V 21 w(deprep)p 714 1082 V 21 w(term)p -856 1082 V 19 w(function)195 1137 y Fu(If)e(non-zero,)g -Ft(readline)f Fu(will)i(call)g(indirectly)h(through)e(this)g(p)q(oin)o -(ter)g(to)f(reset)h(the)g(terminal.)195 1192 y(This)h(function)g -(should)h(undo)f(the)f(e\013ects)h(of)f Ft(rl_prep_term_function)p -Fu(.)24 b(By)17 b(default,)i(this)195 1247 y(is)d(set)f(to)f -Ft(rl_deprep_terminal)f Fu(\(see)i(Section)h(2.4.9)e([T)l(erminal)i -(Managemen)o(t],)d(page)i(32\).)1773 1375 y(V)l(ariable)-1861 -b Fi(Keymap)20 b Fh(rl)p 293 1375 V 21 w(executing)p -551 1375 V 22 w(k)n(eymap)195 1430 y Fu(This)f(v)m(ariable)g(is)f(set)g -(to)g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h -(26\))f(in)i(whic)o(h)195 1485 y(the)c(curren)o(tly)h(executing)g -(readline)h(function)f(w)o(as)f(found.)1773 1613 y(V)l(ariable)-1861 -b Fi(Keymap)20 b Fh(rl)p 293 1613 V 21 w(binding)p 501 -1613 V 22 w(k)n(eymap)195 1668 y Fu(This)f(v)m(ariable)g(is)f(set)g(to) -g(the)g(k)o(eymap)f(\(see)h(Section)h(2.4.2)e([Keymaps],)g(page)h(26\)) -f(in)i(whic)o(h)195 1723 y(the)c(last)g(k)o(ey)g(binding)j(o)q -(ccurred.)1773 1851 y(V)l(ariable)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 1851 V 21 w(executing)p 544 1851 V -22 w(macro)195 1906 y Fu(This)d(v)m(ariable)g(is)g(set)f(to)g(the)g -(text)g(of)f(an)o(y)h(curren)o(tly-executing)i(macro.)1773 -2034 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 2034 -V 21 w(readline)p 434 2034 V 22 w(state)195 2089 y Fu(A)d(v)m(ariable)i -(with)e(bit)h(v)m(alues)h(that)d(encapsulate)i(the)g(curren)o(t)f -(Readline)i(state.)25 b(A)18 b(bit)f(is)h(set)195 2144 -y(with)h(the)g Ft(RL_SETSTATE)f Fu(macro,)h(and)g(unset)g(with)g(the)g -Ft(RL_UNSETSTATE)e Fu(macro.)31 b(Use)19 b(the)195 2199 -y Ft(RL_ISSTATE)e Fu(macro)h(to)g(test)g(whether)h(a)f(particular)i -(state)d(bit)j(is)f(set.)30 b(Curren)o(t)18 b(state)g(bits)195 -2253 y(include:)195 2339 y Ft(RL_STATE_NONE)435 2393 -y Fu(Readline)f(has)f(not)e(y)o(et)h(b)q(een)h(called,)h(nor)e(has)g -(it)g(b)q(egun)h(to)f(in)o(tialize.)195 2477 y Ft -(RL_STATE_INITIALIZING)435 2532 y Fu(Readline)i(is)f(initializi)q(ng)i -(its)d(in)o(ternal)h(data)f(structures.)195 2615 y Ft -(RL_STATE_INITIALIZED)435 2670 y Fu(Readline)i(has)f(completed)g(its)f -(initialization.)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)195 149 y Ft(RL_STATE_TERMPREPPED)435 -204 y Fu(Readline)17 b(has)d(mo)q(di\014ed)i(the)e(terminal)h(mo)q(des) -g(to)e(do)i(its)f(o)o(wn)g(input)h(and)g(redis-)435 259 -y(pla)o(y)l(.)195 342 y Ft(RL_STATE_READCMD)435 397 y -Fu(Readline)i(is)f(reading)g(a)f(command)g(from)f(the)i(k)o(eyb)q -(oard.)195 480 y Ft(RL_STATE_METANEXT)435 534 y Fu(Readline)h(is)f -(reading)g(more)f(input)h(after)e(reading)i(the)f(meta-pre\014x)h(c)o -(haracter.)195 617 y Ft(RL_STATE_DISPATCHING)435 672 -y Fu(Readline)h(is)f(dispatc)o(hing)h(to)d(a)h(command.)195 -755 y Ft(RL_STATE_MOREINPUT)435 810 y Fu(Readline)i(is)f(reading)g -(more)f(input)h(while)h(executing)f(an)f(editing)i(command.)195 -893 y Ft(RL_STATE_ISEARCH)435 947 y Fu(Readline)g(is)f(p)q(erforming)g -(an)f(incremen)o(tal)h(history)f(searc)o(h.)195 1030 -y Ft(RL_STATE_NSEARCH)435 1085 y Fu(Readline)i(is)f(p)q(erforming)g(a)f -(non-incremen)o(tal)h(history)g(searc)o(h.)195 1168 y -Ft(RL_STATE_SEARCH)435 1223 y Fu(Readline)c(is)f(searc)o(hing)g(bac)o -(kw)o(ard)e(or)h(forw)o(ard)f(through)h(the)g(history)g(for)f(a)h -(string.)195 1306 y Ft(RL_STATE_NUMERICARG)435 1360 y -Fu(Readline)17 b(is)f(reading)g(a)f(n)o(umeric)h(argumen)o(t.)195 -1443 y Ft(RL_STATE_MACROINPUT)435 1498 y Fu(Readline)e(is)f(curren)o -(tly)g(getting)f(its)g(input)h(from)e(a)h(previously-de\014ned)j(k)o -(eyb)q(oard)435 1553 y(macro.)195 1636 y Ft(RL_STATE_MACRODEF)435 -1691 y Fu(Readline)i(is)f(curren)o(tly)g(reading)g(c)o(haracters)e -(de\014ning)j(a)e(k)o(eyb)q(oard)g(macro.)195 1773 y -Ft(RL_STATE_OVERWRITE)435 1828 y Fu(Readline)i(is)f(in)g(o)o(v)o -(erwrite)f(mo)q(de.)195 1911 y Ft(RL_STATE_COMPLETING)435 -1966 y Fu(Readline)i(is)f(p)q(erforming)g(w)o(ord)e(completion.)195 -2049 y Ft(RL_STATE_SIGHANDLER)435 2104 y Fu(Readline)j(is)f(curren)o -(tly)g(executing)g(the)f(readline)i(signal)f(handler.)195 -2187 y Ft(RL_STATE_UNDOING)435 2241 y Fu(Readline)h(is)f(p)q(erforming) -g(an)f(undo.)195 2324 y Ft(RL_STATE_DONE)435 2379 y Fu(Readline)h(has)e -(read)g(a)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e Ft(accept-line)f -Fu(and)i(is)h(ab)q(out)f(to)435 2434 y(return)h(the)g(line)i(to)e(the)g -(caller.)1773 2560 y(V)l(ariable)-1861 b Fi(int)20 b -Fh(rl)p 215 2560 18 3 v 21 w(explicit)p 417 2560 V 24 -w(arg)195 2615 y Fu(Set)f(to)g(a)g(non-zero)h(v)m(alue)h(if)e(an)h -(explicit)h(n)o(umeric)g(argumen)o(t)d(w)o(as)h(sp)q(eci\014ed)i(b)o(y) -f(the)f(user.)195 2670 y(Only)d(v)m(alid)h(in)f(a)f(bindable)i(command) -f(function.)p eop -%%Page: 26 28 -26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)1773 -149 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 149 -18 3 v 21 w(n)n(umeric)p 437 149 V 20 w(arg)195 204 y -Fu(Set)j(to)f(the)g(v)m(alue)i(of)f(an)o(y)f(n)o(umeric)h(argumen)o(t)f -(explicitly)k(sp)q(eci\014ed)f(b)o(y)d(the)h(user)g(b)q(efore)195 -259 y(executing)14 b(the)f(curren)o(t)g(Readline)i(function.)20 -b(Only)14 b(v)m(alid)h(in)f(a)f(bindable)i(command)d(function.)1773 -368 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 368 -V 21 w(editing)p 407 368 V 22 w(mo)r(de)195 423 y Fu(Set)h(to)f(a)g(v)m -(alue)i(denoting)f(Readline's)h(curren)o(t)f(editing)h(mo)q(de.)36 -b(A)20 b(v)m(alue)i(of)e Fk(emacs)p 1754 423 14 2 v 17 -w(mo)q(de)195 477 y Fu(means)15 b(Readline)j(is)d(curren)o(tly)h(in)g -(emacs)f(mo)q(de;)g Fk(vi)p 1123 477 V 17 w(mo)q(de)j -Fu(means)d(that)g(vi)h(mo)q(de)f(is)h(activ)o(e.)75 601 -y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6 -b(unctions)75 737 y Fj(2.4.1)30 b(Naming)20 b(a)g(F)-5 -b(unction)137 832 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 887 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 941 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 -1004 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 1070 -y Fu(This)21 b(binds)g(the)f(k)o(eystrok)o(e)661 1068 -y Fn(h)p 673 1042 209 2 v 673 1070 a Fm(Meta-Rub)q(out)p -673 1077 V 879 1068 a Fn(i)914 1070 y Fu(to)g(the)g(function)g -Fl(descriptively)k Fu(named)c Ft(backward-)75 1124 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 -1179 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:)1762 1288 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1288 18 3 v 21 w(add)p 328 -1288 V 20 w(defun)i Fg(\()p Ft(const)14 b(char)h(*name,)f -(rl_command_func_t)283 1343 y(*function,)f(int)i(key)p -Fg(\))195 1397 y Fu(Add)j Fk(name)i Fu(to)d(the)h(list)h(of)e(named)h -(functions.)28 b(Mak)o(e)17 b Fk(function)h Fu(b)q(e)g(the)g(function)h -(that)d(gets)195 1452 y(called.)21 b(If)16 b Fk(k)o(ey)j -Fu(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fk(function)i -Fu(using)g Ft(rl_bind_key\(\))p Fu(.)137 1539 y(Using)g(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 1594 -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 1649 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 -1704 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)75 1811 -y Fj(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1906 y -Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fk(k)o(eymap)p -Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o -(een)g(the)f(k)o(eys)75 1960 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 2015 y(existing)i(k)o(eymaps,) -f(and)g(tell)h(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1762 -2124 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -2124 V 21 w(mak)n(e)p 445 2124 V 20 w(bare)p 575 2124 -V 20 w(k)n(eymap)j Fg(\()p Ft(void)p Fg(\))195 2179 y -Fu(Returns)13 b(a)e(new,)i(empt)o(y)f(k)o(eymap.)18 b(The)13 -b(space)f(for)f(the)i(k)o(eymap)e(is)i(allo)q(cated)g(with)f -Ft(malloc\(\))p Fu(;)195 2233 y(the)j(caller)i(should)f(free)f(it)h(b)o -(y)f(calling)i Ft(rl_discard_keymap\(\))12 b Fu(when)k(done.)1762 -2342 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -2342 V 21 w(cop)n(y)p 428 2342 V 21 w(k)n(eymap)j Fg(\()p -Ft(Keymap)14 b(map)p Fg(\))195 2397 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 Fk(map)p Fu(.)1762 -2506 y(F)l(unction)-1861 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(\()p -Ft(void)p Fg(\))195 2560 y Fu(Return)17 b(a)e(new)i(k)o(eymap)e(with)i -(the)f(prin)o(ting)h(c)o(haracters)e(b)q(ound)i(to)e(rl)p -1457 2560 14 2 v 17 w(insert,)h(the)g(lo)o(w)o(ercase)195 -2615 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)f(equiv)m -(alen)o(ts,)j(and)d(the)h(Meta)e(digits)i(b)q(ound)g(to)f(pro)q(duce) -195 2670 y(n)o(umeric)16 b(argumen)o(ts.)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)1762 149 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 149 18 3 v 21 w(discard)p 441 149 V 21 -w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 -204 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fk(k)o(eymap)p Fu(.)137 293 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 348 y(k)o(eymap)15 b(is)h(activ)o(e.)1762 -459 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -459 V 21 w(get)p 391 459 V 21 w(k)n(eymap)i Fg(\()p Ft(void)p -Fg(\))195 514 y Fu(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o -(eymap.)1762 625 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p -241 625 V 21 w(set)p 333 625 V 21 w(k)n(eymap)i Fg(\()p -Ft(Keymap)14 b(keymap)p Fg(\))195 680 y Fu(Mak)o(es)g -Fk(k)o(eymap)j Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1762 -791 y(F)l(unction)-1861 b Fi(Keymap)20 b Fh(rl)p 293 -791 V 21 w(get)p 391 791 V 21 w(k)n(eymap)p 605 791 V -20 w(b)n(y)p 685 791 V 21 w(name)i Fg(\()p Ft(const)14 -b(char)g(*name)p Fg(\))195 846 y Fu(Return)j(the)g(k)o(eymap)f(matc)o -(hing)h Fk(name)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 901 y(keymap)e -Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(4\).)1762 1012 y(F)l(unction)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 1012 V 21 w(get)p 384 1012 V 21 w(k)n(eymap)p -598 1012 V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p -Fg(\))195 1067 y Fu(Return)j(the)g(name)g(matc)o(hing)f -Fk(k)o(eymap)p Fu(.)24 b Fk(name)19 b Fu(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)h(supplied)h(in)e(a)f Ft(set)195 1122 y(keymap)e -Fu(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(4\).)75 1230 y Fj(2.4.3)30 b(Binding)20 b(Keys)137 -1325 y Fu(Key)13 b(sequences)g(are)e(asso)q(ciate)h(with)h(functions)f -(through)g(the)g(k)o(eymap.)19 b(Readline)14 b(has)e(sev)o(eral)g(in-) -75 1380 y(ternal)j(k)o(eymaps:)k Ft(emacs_standard_keymap)p -Fu(,)11 b Ft(emacs_meta_keymap)p Fu(,)h Ft(emacs_ctlx_keymap)p -Fu(,)g Ft(vi_)75 1435 y(movement_keymap)p Fu(,)20 b(and)i -Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18 -b Fu(is)k(the)f(default,)75 1490 y(and)15 b(the)h(examples)g(in)g(this) -f(man)o(ual)h(assume)f(that.)137 1556 y(Since)h Ft(readline\(\))c -Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f -(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 1611 -y(alw)o(a)o(ys)j(the)g(danger)g(that)g(a)g(custom)g(binding)i -(installed)g(b)q(efore)f(the)f(\014rst)g(call)i(to)d -Ft(readline\(\))g Fu(will)75 1666 y(b)q(e)f(o)o(v)o(erridden.)19 -b(An)13 b(alternate)g(mec)o(hanism)h(is)f(to)f(install)i(custom)f(k)o -(ey)g(bindings)h(in)g(an)f(initialization)75 1720 y(function)19 -b(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e -(Section)h(2.3)f([Readline)j(V)l(ariables],)75 1775 y(page)15 -b(22\).)137 1841 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1762 -1953 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1953 -V 21 w(bind)p 347 1953 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 -b(key,)h(rl_command_func_t)d(*function)p Fg(\))195 2007 -y Fu(Binds)18 b Fk(k)o(ey)i Fu(to)c Fk(function)h Fu(in)h(the)e(curren) -o(tly)h(activ)o(e)g(k)o(eymap.)23 b(Returns)17 b(non-zero)g(in)g(the)g -(case)195 2062 y(of)e(an)g(in)o(v)m(alid)i Fk(k)o(ey)p -Fu(.)1762 2173 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2173 V 21 w(bind)p 347 2173 V 21 w(k)n(ey)p 452 2173 -V 21 w(in)p 520 2173 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h -(rl_command_func_t)e(*function,)283 2228 y(Keymap)h(map)p -Fg(\))195 2283 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c Fk(function)h -Fu(in)g Fk(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 Fk(k)o(ey)p Fu(.)1762 2394 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2394 V 21 w(un)n(bind)p 409 -2394 V 21 w(k)n(ey)k Fg(\()p Ft(int)14 b(key)p Fg(\))195 -2449 y Fu(Bind)19 b Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i(function)f(in)g -(the)f(curren)o(tly)g(activ)o(e)h(k)o(eymap.)28 b(Returns)19 -b(non-zero)f(in)195 2504 y(case)d(of)g(error.)1762 2615 -y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2615 V -21 w(un)n(bind)p 409 2615 V 21 w(k)n(ey)p 514 2615 V -21 w(in)p 582 2615 V 22 w(map)h Fg(\()p Ft(int)14 b(key,)h(Keymap)f -(map)p Fg(\))195 2670 y Fu(Bind)i Fk(k)o(ey)j Fu(to)c(the)g(n)o(ull)i -(function)f(in)g Fk(map)p Fu(.)k(Returns)15 b(non-zero)h(in)g(case)f -(of)g(error.)p eop -%%Page: 28 30 -28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)1762 -149 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 149 -18 3 v 21 w(un)n(bind)p 409 149 V 21 w(function)p 635 -149 V 21 w(in)p 703 149 V 21 w(map)h Fg(\()p Ft(rl_command_func_t)13 -b(*function,)283 204 y(Keymap)h(map)p Fg(\))195 259 y -Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i Fk(function)g -Fu(in)g Fk(map)p Fu(.)1762 377 y(F)l(unction)-1861 b -Fi(int)20 b Fh(rl)p 215 377 V 21 w(un)n(bind)p 409 377 -V 21 w(command)p 674 377 V 17 w(in)p 738 377 V 22 w(map)h -Fg(\()p Ft(const)14 b(char)h(*command,)f(Keymap)283 432 -y(map)p Fg(\))195 486 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(are)h(b)q -(ound)h(to)f Fk(command)i Fu(in)f Fk(map)p Fu(.)1762 -604 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 604 -V 21 w(set)p 307 604 V 20 w(k)n(ey)k Fg(\()p Ft(const)14 -b(char)h(*keyseq,)f(rl_command_func_t)f(*function,)283 -659 y(Keymap)h(map)p Fg(\))195 714 y Fu(Bind)g(the)e(k)o(ey)h(sequence) -h(represen)o(ted)f(b)o(y)f(the)h(string)f Fk(k)o(eyseq)i -Fu(to)e(the)g(function)i Fk(function)p Fu(.)19 b(This)195 -768 y(mak)o(es)13 b(new)g(k)o(eymaps)g(as)f(necessary)l(.)20 -b(The)13 b(initial)j(k)o(eymap)c(in)i(whic)o(h)g(to)f(do)g(bindings)i -(is)f Fk(map)p Fu(.)1762 886 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 886 V 21 w(generic)p 413 886 V 21 w(bind)j -Fg(\()p Ft(int)15 b(type,)f(const)h(char)f(*keyseq,)g(char)h(*data,)283 -941 y(Keymap)f(map)p Fg(\))195 996 y Fu(Bind)h(the)e(k)o(ey)h(sequence) -h(represen)o(ted)e(b)o(y)h(the)g(string)f Fk(k)o(eyseq)i -Fu(to)d(the)i(arbitrary)f(p)q(oin)o(ter)h Fk(data)p Fu(.)195 -1051 y Fk(t)o(yp)q(e)j Fu(sa)o(ys)c(what)h(kind)h(of)f(data)g(is)g(p)q -(oin)o(ted)i(to)d(b)o(y)h Fk(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f -(function)h(\()p Ft(ISFUNC)p Fu(\),)d(a)195 1105 y(macro)i(\()p -Ft(ISMACR)p Fu(\),)f(or)h(a)h(k)o(eymap)f(\()p Ft(ISKMAP)p -Fu(\).)k(This)e(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.)20 -b(The)195 1160 y(initial)d(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g -(bindings)i(is)f Fk(map)p Fu(.)1762 1278 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1278 V 21 w(parse)p 369 1278 -V 19 w(and)p 480 1278 V 21 w(bind)j Fg(\()p Ft(char)14 -b(*line)p Fg(\))195 1333 y Fu(P)o(arse)g Fk(line)19 b -Fu(as)14 b(if)h(it)g(had)g(b)q(een)h(read)f(from)f(the)g -Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)f(an)o(y)h(k)o(ey)f(bindings) -195 1387 y(and)h(v)m(ariable)i(assignmen)o(ts)e(found)h(\(see)f -(Section)h(1.3)e([Readline)j(Init)f(File],)g(page)f(4\).)1762 -1505 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1505 -V 21 w(read)p 346 1505 V 20 w(init)p 450 1505 V 22 w(\014le)k -Fg(\()p Ft(const)14 b(char)h(*filename)p Fg(\))195 1560 -y Fu(Read)h(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)f(from) -f Fk(\014lename)k Fu(\(see)d(Section)g(1.3)f([Readline)195 -1615 y(Init)h(File],)g(page)f(4\).)75 1727 y Fj(2.4.4)30 -b(Asso)r(ciating)20 b(F)-5 b(unction)20 b(Names)h(and)f(Bindings)137 -1824 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 1879 y(in)o(v)o(ok)o(ed)j(b)o(y)g(a)f(particular)h(k)o -(ey)g(sequence.)21 b(Y)l(ou)14 b(ma)o(y)f(also)g(asso)q(ciate)h(a)g -(new)g(function)g(name)g(with)g(an)75 1933 y(arbitrary)h(function.)1762 -2051 y(F)l(unction)-1861 b Fi(rl_command_func_t)22 b(*)d -Fh(rl)p 626 2051 V 21 w(named)p 814 2051 V 19 w(function)k -Fg(\()p Ft(const)14 b(char)h(*name)p Fg(\))195 2106 y -Fu(Return)h(the)f(function)h(with)g(name)f Fk(name)p -Fu(.)1762 2224 y(F)l(unction)-1861 b Fi(rl_command_func_t)22 -b(*)d Fh(rl)p 626 2224 V 21 w(function)p 852 2224 V 21 -w(of)p 920 2224 V 20 w(k)n(eyseq)24 b Fg(\()p Ft(const)14 -b(char)283 2278 y(*keyseq,)g(Keymap)g(map,)h(int)f(*type)p -Fg(\))195 2333 y Fu(Return)j(the)f(function)h(in)o(v)o(ok)o(ed)g(b)o(y) -f Fk(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fk(map)p Fu(.)23 -b(If)17 b Fk(map)g Fu(is)g Ft(NULL)p Fu(,)f(the)g(curren)o(t)195 -2388 y(k)o(eymap)i(is)h(used.)31 b(If)18 b Fk(t)o(yp)q(e)j -Fu(is)e(not)g Ft(NULL)p Fu(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject) -f(is)h(returned)g(in)g(the)f Ft(int)195 2443 y Fu(v)m(ariable)f(it)e(p) -q(oin)o(ts)h(to)e(\(one)h(of)g Ft(ISFUNC)p Fu(,)f Ft(ISKMAP)p -Fu(,)g(or)h Ft(ISMACR)p Fu(\).)1762 2560 y(F)l(unction)-1861 -b Fi(char)20 b(**)f Fh(rl)p 312 2560 V 21 w(in)n(v)n(oking)p -541 2560 V 23 w(k)n(eyseqs)k Fg(\()p Ft(rl_command_func_t)13 -b(*function)p Fg(\))195 2615 y Fu(Return)j(an)g(arra)o(y)e(of)h -(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in) -o(v)o(ok)o(e)h Fk(function)g Fu(in)195 2670 y(the)f(curren)o(t)g(k)o -(eymap.)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)1762 149 y(F)l(unction)-1861 b Fi(char)20 -b(**)f Fh(rl)p 312 149 18 3 v 21 w(in)n(v)n(oking)p 541 -149 V 23 w(k)n(eyseqs)p 750 149 V 21 w(in)p 818 149 V -22 w(map)i Fg(\()p Ft(rl_command_func_t)283 204 y(*function,)13 -b(Keymap)i(map)p Fg(\))195 259 y Fu(Return)h(an)g(arra)o(y)e(of)h -(strings)h(represen)o(ting)g(the)g(k)o(ey)f(sequences)i(used)f(to)f(in) -o(v)o(ok)o(e)h Fk(function)g Fu(in)195 314 y(the)f(k)o(eymap)g -Fk(map)p Fu(.)1762 426 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 426 V 21 w(function)p 467 426 V 21 w(dump)r(er)g -Fg(\()p Ft(int)15 b(readable)p Fg(\))195 481 y Fu(Prin)o(t)g(the)f -(readline)j(function)e(names)g(and)f(the)h(k)o(ey)g(sequences)g(curren) -o(tly)g(b)q(ound)h(to)e(them)h(to)195 536 y Ft(rl_outstream)p -Fu(.)j(If)c Fk(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)h -(formatted)d(in)j(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)195 -590 y(b)q(e)i(made)f(part)g(of)f(an)i Ft(inputrc)e Fu(\014le)i(and)f -(re-read.)1762 702 y(F)l(unction)-1861 b Fi(void)20 b -Fh(rl)p 241 702 V 21 w(list)p 337 702 V 22 w(funmap)p -550 702 V 18 w(names)h Fg(\()p Ft(void)p Fg(\))195 757 -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(.)1762 869 y(F)l(unction)-1861 -b Fi(const)20 b(char)g(**)f Fh(rl)p 462 869 V 21 w(funmap)p -674 869 V 18 w(names)i Fg(\()p Ft(void)p Fg(\))195 924 -y Fu(Return)14 b(a)e(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g -(function)g(names.)20 b(The)13 b(arra)o(y)f(is)h(sorted.)19 -b(The)195 979 y(arra)o(y)11 b(itself)j(is)f(allo)q(cated,)h(but)f(not)f -(the)h(strings)f(inside.)21 b(Y)l(ou)13 b(should)h Ft(free\(\))d -Fu(the)i(arra)o(y)e(when)195 1034 y(y)o(ou)k(are)g(done,)g(but)g(not)g -(the)g(p)q(oin)o(ters.)1762 1146 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1146 V 21 w(add)p 328 1146 -V 20 w(funmap)p 539 1146 V 18 w(en)n(try)j Fg(\()p Ft(const)14 -b(char)h(*name,)f(rl_command_func_t)283 1201 y(*function)p -Fg(\))195 1255 y Fu(Add)j Fk(name)i Fu(to)d(the)g(list)h(of)f(bindable) -j(Readline)g(command)d(names,)g(and)h(mak)o(e)f Fk(function)h -Fu(the)195 1310 y(function)f(to)f(b)q(e)g(called)i(when)f -Fk(name)i Fu(is)d(in)o(v)o(ok)o(ed.)75 1419 y Fj(2.4.5)30 -b(Allo)n(wing)21 b(Undoing)137 1515 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 1569 y(useful.)21 -b(It)15 b(is)h(certainly)g(easy)f(to)g(try)f(something)i(if)f(y)o(ou)g -(kno)o(w)g(y)o(ou)g(can)g(undo)h(it.)137 1636 y(If)21 -b(y)o(our)f(function)h(simply)h(inserts)f(text)e(once,)j(or)e(deletes)h -(text)f(once,)i(and)f(uses)f Ft(rl_insert_)75 1690 y(text\(\))13 -b Fu(or)h Ft(rl_delete_text\(\))d Fu(to)j(do)f(it,)h(then)h(undoing)g -(is)f(already)g(done)h(for)e(y)o(ou)h(automatically)l(.)137 -1757 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 1812 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 1866 y(group\(\))14 b Fu(and)i Ft -(rl_end_undo_group\(\))p Fu(.)137 1933 y(The)g(t)o(yp)q(es)f(of)g(ev)o -(en)o(ts)g(that)f(can)h(b)q(e)h(undone)g(are:)195 1996 -y Ft(enum)23 b(undo_code)g({)h(UNDO_DELETE,)e(UNDO_INSERT,)g -(UNDO_BEGIN,)g(UNDO_END)h(};)137 2062 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 2117 y(some)e(text.)19 -b(That)14 b(is,)g(the)g(undo)g(co)q(de)g(tells)h(what)e(to)h(undo,)g -(not)f(ho)o(w)g(to)g(undo)i(it.)k Ft(UNDO_BEGIN)13 b -Fu(and)75 2172 y Ft(UNDO_END)h Fu(are)h(tags)f(added)i(b)o(y)f -Ft(rl_begin_undo_group\(\))d Fu(and)k Ft(rl_end_undo_group\(\))p -Fu(.)1762 2284 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2284 V 21 w(b)r(egin)p 372 2284 V 20 w(undo)p 517 -2284 V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 2339 -y Fu(Begins)16 b(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g -(construct.)20 b(The)c(undo)g(information)g(usually)195 -2393 y(comes)21 b(from)f(calls)i(to)e Ft(rl_insert_text\(\))e -Fu(and)j Ft(rl_delete_text\(\))p Fu(,)f(but)h(could)g(b)q(e)h(the)195 -2448 y(result)16 b(of)e(calls)j(to)d Ft(rl_add_undo\(\))p -Fu(.)1762 2560 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2560 V 21 w(end)p 326 2560 V 20 w(undo)p 471 2560 -V 20 w(group)h Fg(\()p Ft(void)p Fg(\))195 2615 y Fu(Closes)15 -b(the)f(curren)o(t)h(undo)g(group)f(started)g(with)g -Ft(rl_begin_undo_group)f(\(\))p Fu(.)19 b(There)c(should)195 -2670 y(b)q(e)h(one)f(call)i(to)d Ft(rl_end_undo_group\(\))f -Fu(for)h(eac)o(h)h(call)i(to)d Ft(rl_begin_undo_group\(\))p -Fu(.)p eop -%%Page: 30 32 -30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)1762 -149 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 149 -18 3 v 21 w(add)p 354 149 V 20 w(undo)i Fg(\()p Ft(enum)14 -b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)h(char)283 -204 y(*text)p Fg(\))195 259 y Fu(Remem)o(b)q(er)j(ho)o(w)e(to)h(undo)g -(an)g(ev)o(en)o(t)g(\(according)g(to)g Fk(what)q Fu(\).)24 -b(The)17 b(a\013ected)g(text)f(runs)i(from)195 314 y -Fk(start)d Fu(to)g Fk(end)p Fu(,)g(and)g(encompasses)h -Fk(text)p Fu(.)1762 428 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 428 V 21 w(free)p 356 428 V 20 w(undo)p -501 428 V 20 w(list)k Fg(\()p Ft(void)p Fg(\))195 483 -y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1762 -598 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 598 -V 21 w(do)p 297 598 V 20 w(undo)i Fg(\()p Ft(void)p Fg(\))195 -652 y Fu(Undo)12 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h(list.)19 -b(Returns)12 b Ft(0)g Fu(if)g(there)f(w)o(as)g(nothing)h(to)e(undo,)j -(non-zero)195 707 y(if)j(something)f(w)o(as)f(undone.)137 -798 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 853 y(c)o(hange)j(its)h(case\),)g(call)g Ft(rl_modifying\(\))e -Fu(once,)i(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f(text.)32 -b(Y)l(ou)20 b(m)o(ust)75 907 y(supply)c(the)g(indices)h(of)e(the)g -(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.)1762 -1022 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1022 -V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p -Fg(\))195 1077 y Fu(T)l(ell)22 b(Readline)g(to)d(sa)o(v)o(e)h(the)g -(text)g(b)q(et)o(w)o(een)g Fk(start)g Fu(and)g Fk(end)j -Fu(as)c(a)h(single)h(undo)g(unit.)35 b(It)20 b(is)195 -1131 y(assumed)15 b(that)g(y)o(ou)g(will)i(subsequen)o(tly)f(mo)q(dify) -g(that)e(text.)75 1242 y Fj(2.4.6)30 b(Redispla)n(y)1762 -1385 y Fu(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 -1385 V 21 w(redispla)n(y)k Fg(\()p Ft(void)p Fg(\))195 -1440 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)g(screen)g -(to)f(re\015ect)i(the)f(curren)o(t)f(con)o(ten)o(ts)h(of)f -Ft(rl_line_)195 1495 y(buffer)p Fu(.)1762 1609 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1609 V 21 w(forced)p 390 1609 -V 20 w(up)r(date)p 584 1609 V 20 w(displa)n(y)k Fg(\()p -Ft(void)p Fg(\))195 1664 y Fu(F)l(orce)c(the)g(line)h(to)e(b)q(e)i(up)q -(dated)f(and)g(redispla)o(y)o(ed,)i(whether)e(or)g(not)f(Readline)j -(thinks)f(the)195 1719 y(screen)16 b(displa)o(y)g(is)g(correct.)1762 -1833 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 1833 -V 21 w(on)p 297 1833 V 20 w(new)p 416 1833 V 21 w(line)k -Fg(\()p Ft(void)p Fg(\))195 1888 y Fu(T)l(ell)16 b(the)f(up)q(date)h -(functions)g(that)e(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h -(new)g(\(empt)o(y\))f(line,)i(usually)h(after)195 1943 -y(ouputting)f(a)e(newline.)1762 2058 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2058 V 21 w(on)p 297 2058 V -20 w(new)p 416 2058 V 21 w(line)p 525 2058 V 22 w(with)p -657 2058 V 22 w(prompt)h Fg(\()p Ft(void)p Fg(\))195 -2112 y Fu(T)l(ell)14 b(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha) -o(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f -Fk(rl)p 1556 2112 14 2 v 17 w(prompt)g Fu(already)195 -2167 y(displa)o(y)o(ed.)21 b(This)15 b(could)g(b)q(e)g(used)g(b)o(y)f -(applications)i(that)e(w)o(an)o(t)f(to)h(output)g(the)g(prompt)g -(string)195 2222 y(themselv)o(es,)g(but)g(still)h(need)g(Readline)h(to) -d(kno)o(w)g(the)h(prompt)f(string)h(length)g(for)f(redispla)o(y)l(.)21 -b(It)195 2277 y(should)16 b(b)q(e)g(used)g(after)e(setting)i -Fk(rl)p 795 2277 V 16 w(already)p 956 2277 V 17 w(prompted)p -Fu(.)1762 2391 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2391 18 3 v 21 w(reset)p 357 2391 V 20 w(line)p 465 -2391 V 23 w(state)j Fg(\()p Ft(void)p Fg(\))195 2446 -y Fu(Reset)18 b(the)f(displa)o(y)i(state)d(to)h(a)g(clean)h(state)f -(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)195 -2501 y(new)e(line.)1762 2615 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 2615 V 21 w(crlf)j Fg(\()p Ft(void)p Fg(\))195 -2670 y Fu(Mo)o(v)o(e)14 b(the)h(cursor)g(to)g(the)g(start)f(of)h(the)g -(next)g(screen)h(line.)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)1762 149 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(message)g Fg(\()p Ft(const)14 -b(char)h(*,)g(...)p Fg(\))195 204 y Fu(The)c(argumen)o(ts)e(are)h(a)g -(format)f(string)h(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)c -Ft(printf)p Fu(,)h(p)q(ossibly)i(con)o(taining)195 259 -y(con)o(v)o(ersion)22 b(sp)q(eci\014cations)i(suc)o(h)f(as)e(`)p -Ft(\045d)p Fu(',)i(and)f(an)o(y)g(additional)h(argumen)o(ts)e -(necessary)i(to)195 314 y(satisfy)d(the)h(con)o(v)o(ersion)g(sp)q -(eci\014cations.)38 b(The)21 b(resulting)h(string)e(is)i(displa)o(y)o -(ed)g(in)f(the)g Fk(ec)o(ho)195 369 y(area)p Fu(.)e(The)d(ec)o(ho)f -(area)g(is)g(also)g(used)h(to)f(displa)o(y)h(n)o(umeric)g(argumen)o(ts) -f(and)g(searc)o(h)g(strings.)1762 518 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 518 V 21 w(clear)p 354 518 -V 21 w(message)h Fg(\()p Ft(void)p Fg(\))195 573 y Fu(Clear)15 -b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1762 723 -y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 723 V -21 w(sa)n(v)n(e)p 365 723 V 21 w(prompt)h Fg(\()p Ft(void)p -Fg(\))195 778 y Fu(Sa)o(v)o(e)g(the)h(lo)q(cal)g(Readline)i(prompt)d -(displa)o(y)i(state)e(in)h(preparation)f(for)g(displa)o(ying)j(a)d(new) -195 833 y(message)15 b(in)h(the)f(message)g(area)f(with)i -Ft(rl_message\(\))p Fu(.)1762 982 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 982 V 21 w(restore)p 436 982 -V 20 w(prompt)g Fg(\()p Ft(void)p Fg(\))195 1037 y Fu(Restore)h(the)h -(lo)q(cal)g(Readline)i(prompt)d(displa)o(y)h(state)f(sa)o(v)o(ed)g(b)o -(y)g(the)g(most)g(recen)o(t)g(call)i(to)195 1092 y Ft(rl_save_prompt)p -Fu(.)1762 1242 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1242 V 21 w(expand)p 416 1242 V 20 w(prompt)h Fg(\()p -Ft(char)14 b(*prompt)p Fg(\))195 1296 y Fu(Expand)22 -b(an)o(y)f(sp)q(ecial)i(c)o(haracter)e(sequences)h(in)g -Fk(prompt)g Fu(and)g(set)f(up)h(the)f(lo)q(cal)i(Readline)195 -1351 y(prompt)17 b(redispla)o(y)i(v)m(ariables.)30 b(This)18 -b(function)h(is)f(called)i(b)o(y)e Ft(readline\(\))p -Fu(.)26 b(It)18 b(ma)o(y)f(also)h(b)q(e)195 1406 y(called)12 -b(to)e(expand)h(the)g(primary)g(prompt)f(if)h(the)f Ft -(rl_on_new_line_with_prompt\(\))d Fu(function)195 1461 -y(or)12 b Ft(rl_already_prompted)e Fu(v)m(ariable)k(is)g(used.)19 -b(It)13 b(returns)g(the)f(n)o(um)o(b)q(er)i(of)e(visible)j(c)o -(haracters)195 1516 y(on)g(the)g(last)h(line)g(of)f(the)g(\(p)q -(ossibly)i(m)o(ulti-line\))g(prompt.)75 1649 y Fj(2.4.7)30 -b(Mo)r(difying)20 b(T)-5 b(ext)1762 1828 y Fu(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1828 V 21 w(insert)p 378 1828 -V 21 w(text)k Fg(\()p Ft(const)14 b(char)g(*text)p Fg(\))195 -1883 y Fu(Insert)h Fk(text)h Fu(in)o(to)f(the)h(line)g(at)f(the)g -(curren)o(t)g(cursor)g(p)q(osition.)1762 2033 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2033 V 21 w(delete)p 383 2033 -V 22 w(text)k Fg(\()p Ft(int)14 b(start,)h(int)f(end)p -Fg(\))195 2088 y Fu(Delete)i(the)f(text)g(b)q(et)o(w)o(een)g -Fk(start)g Fu(and)h Fk(end)h Fu(in)f(the)g(curren)o(t)f(line.)1762 -2237 y(F)l(unction)-1861 b Fi(char)20 b(*)f Fh(rl)p 286 -2237 V 21 w(cop)n(y)p 421 2237 V 21 w(text)24 b Fg(\()p -Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 2292 y Fu(Return)h(a)f(cop)o -(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i Fk(start)f -Fu(and)g Fk(end)j Fu(in)e(the)f(curren)o(t)g(line.)1762 -2442 y(F)l(unction)-1861 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)i(the)g(text)f(b)q -(et)o(w)o(een)i Fk(start)f Fu(and)g Fk(end)i Fu(in)f(the)f(curren)o(t)g -(line)i(to)e(the)g(kill)i(ring,)e(app)q(ending)195 2552 -y(or)f(prep)q(ending)k(to)c(the)h(last)g(kill)i(if)e(the)g(last)g -(command)g(w)o(as)f(a)h(kill)i(command.)25 b(The)17 b(text)f(is)195 -2606 y(deleted.)26 b(If)17 b Fk(start)g Fu(is)g(less)g(than)g -Fk(end)p Fu(,)g(the)g(text)g(is)g(app)q(ended,)h(otherwise)f(prep)q -(ended.)27 b(If)17 b(the)195 2661 y(last)e(command)g(w)o(as)g(not)f(a)h -(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)h(used.)p -eop -%%Page: 32 34 -32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fj(2.4.8)30 b(Character)21 b(Input)1762 305 y Fu(F)l(unction) --1861 b Fi(int)20 b Fh(rl)p 215 305 18 3 v 21 w(read)p -346 305 V 20 w(k)n(ey)k Fg(\()p Ft(void)p Fg(\))195 360 -y Fu(Return)15 b(the)g(next)g(c)o(haracter)f(a)o(v)m(ailable)i(from)e -(Readline's)j(curren)o(t)e(input)g(stream.)k(This)d(han-)195 -415 y(dles)f(input)g(inserted)f(in)o(to)g(the)g(input)h(stream)e(via)h -Fk(rl)p 1117 415 14 2 v 17 w(p)q(ending)p 1290 415 V -18 w(input)i Fu(\(see)e(Section)h(2.3)e([Read-)195 469 -y(line)h(V)l(ariables],)f(page)f(22\))g(and)g Ft(rl_stuff_char\(\))p -Fu(,)f(macros,)g(and)i(c)o(haracters)e(read)h(from)g(the)195 -524 y(k)o(eyb)q(oard.)1762 651 y(F)l(unction)-1861 b -Fi(int)20 b Fh(rl)p 215 651 18 3 v 21 w(getc)j Fg(\()p -Ft(FILE)14 b(*stream)p Fg(\))195 705 y Fu(Return)d(the)g(next)g(c)o -(haracter)f(a)o(v)m(ailable)i(from)e Fk(stream)p Fu(,)g(whic)o(h)i(is)f -(assumed)f(to)g(b)q(e)i(the)e(k)o(eyb)q(oard.)1762 832 -y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 832 V 21 -w(stu\013)p 346 832 V 20 w(c)n(har)j Fg(\()p Ft(int)15 -b(c)p Fg(\))195 887 y Fu(Insert)i Fk(c)i Fu(in)o(to)d(the)h(Readline)i -(input)e(stream.)23 b(It)16 b(will)i(b)q(e)f Ft(")p Fu(read)p -Ft(")g Fu(b)q(efore)f(Readline)j(attempts)195 942 y(to)c(read)g(c)o -(haracters)f(from)h(the)g(terminal)h(with)f Ft(rl_read_key\(\))p -Fu(.)1762 1068 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1068 V 21 w(execute)p 423 1068 V 22 w(next)j Fg(\()p -Ft(int)15 b(c)p Fg(\))195 1123 y Fu(Mak)o(e)i Fk(c)k -Fu(b)q(e)d(the)g(next)g(command)g(to)f(b)q(e)i(executed)f(when)h -Ft(rl_read_key\(\))d Fu(is)i(called.)29 b(This)195 1178 -y(sets)15 b Fk(rl)p 317 1178 14 2 v 17 w(p)q(ending)p -490 1178 V 18 w(input)p Fu(.)1762 1304 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1304 18 3 v 21 w(clear)p 354 -1304 V 21 w(p)r(ending)p 575 1304 V 21 w(input)j Fg(\()p -Ft(void)p Fg(\))195 1359 y Fu(Unet)g Fk(rl)p 348 1359 -14 2 v 17 w(p)q(ending)p 521 1359 V 18 w(input)p Fu(,)j(e\013ectiv)o -(ely)e(negating)f(the)h(e\013ect)e(of)h(an)o(y)g(previous)h(call)g(to)e -Ft(rl_)195 1414 y(execute_next\(\))p Fu(.)29 b(This)19 -b(w)o(orks)f(only)h(if)h(the)e(p)q(ending)j(input)f(has)f(not)f -(already)h(b)q(een)h(read)195 1469 y(with)c Ft(rl_read_key\(\))p -Fu(.)75 1587 y Fj(2.4.9)30 b(T)-5 b(erminal)20 b(Managemen)n(t)1762 -1743 y Fu(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 -1743 18 3 v 21 w(prep)p 350 1743 V 20 w(terminal)j Fg(\()p -Ft(int)14 b(meta_flag)p Fg(\))195 1797 y Fu(Mo)q(dify)22 -b(the)f(terminal)h(settings)f(for)g(Readline's)i(use,)g(so)d -Ft(readline\(\))g Fu(can)i(read)f(a)g(single)195 1852 -y(c)o(haracter)15 b(at)g(a)g(time)i(from)d(the)i(k)o(eyb)q(oard.)22 -b(The)16 b Fk(meta)p 1192 1852 14 2 v 15 w(\015ag)k Fu(argumen)o(t)15 -b(should)h(b)q(e)h(non-zero)195 1907 y(if)f(Readline)h(should)f(read)f -(eigh)o(t-bit)i(input.)1762 2033 y(F)l(unction)-1861 -b Fi(in)19 b Fh(rl)p 188 2033 18 3 v 22 w(deprep)p 382 -2033 V 20 w(terminal)k Fg(\()p Ft(void)p Fg(\))195 2088 -y Fu(Undo)16 b(the)g(e\013ects)f(of)h Ft(rl_prep_terminal\(\))p -Fu(,)d(lea)o(ving)k(the)e(terminal)i(in)g(the)e(state)g(in)i(whic)o(h) -195 2143 y(it)e(w)o(as)g(b)q(efore)g(the)h(most)e(recen)o(t)h(call)i -(to)d Ft(rl_prep_terminal\(\))p Fu(.)1762 2270 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2270 V 21 w(tt)n(y)p 334 2270 -V 22 w(set)p 427 2270 V 20 w(default)p 620 2270 V 21 -w(bindings)k Fg(\()p Ft(Keymap)14 b(kmap)p Fg(\))195 -2324 y Fu(Read)19 b(the)g(op)q(erating)f(system's)g(terminal)h(editing) -h(c)o(haracters)e(\(as)f(w)o(ould)i(b)q(e)g(displa)o(y)o(ed)h(b)o(y)195 -2379 y Ft(stty)15 b Fu(to)f(their)i(readline)h(equiv)m(alen)o(ts.)k -(The)16 b(bindings)h(are)e(p)q(erformed)g(in)h Fk(kmap)p -Fu(.)1762 2506 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 2506 V 21 w(reset)p 357 2506 V 20 w(terminal)j Fg(\()p -Ft(const)15 b(char)f(*terminal_name)p Fg(\))195 2560 -y Fu(Reinitializ)q(e)h(Readline's)f(idea)f(of)f(the)g(terminal)h -(settings)g(using)g Fk(terminal)p 1491 2560 14 2 v 17 -w(name)h Fu(as)e(the)h(termi-)195 2615 y(nal)i(t)o(yp)q(e)f(\(e.g.,)e -Ft(vt100)p Fu(\).)19 b(If)14 b Fk(terminal)p 866 2615 -V 17 w(name)i Fu(is)f(NULL,)f(the)h(v)m(alue)g(of)e(the)h -Ft(TERM)g Fu(en)o(vironmen)o(t)195 2670 y(v)m(ariable)j(is)e(used.)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)75 149 y Fj(2.4.10)29 b(Utilit)n(y)22 -b(F)-5 b(unctions)1762 296 y Fu(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 296 18 3 v 21 w(extend)p 404 296 V 21 w(line)p -513 296 V 22 w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195 -351 y Fu(Ensure)g(that)g Ft(rl_line_buffer)e Fu(has)i(enough)g(space)h -(to)e(hold)i Fk(len)g Fu(c)o(haracters,)e(p)q(ossibly)i(real-)195 -406 y(lo)q(cating)g(it)f(if)h(necessary)l(.)1762 523 -y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 523 V 21 -w(initiali)q(z)q(e)26 b Fg(\()p Ft(void)p Fg(\))195 578 -y Fu(Initialize)21 b(or)d(re-initialize)k(Readline's)e(in)o(ternal)g -(state.)28 b(It's)18 b(not)g(strictly)h(necessary)g(to)f(call)195 -633 y(this;)d Ft(readline\(\))f Fu(calls)i(it)g(b)q(efore)f(reading)h -(an)o(y)f(input.)1762 751 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 751 V 21 w(ding)j Fg(\()p Ft(void)p Fg(\))195 -805 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(.)1762 923 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 923 V 21 w(alphab)r(etic)k -Fg(\()p Ft(int)14 b(c)p Fg(\))195 978 y Fu(Return)i(1)f(if)g -Fk(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1762 -1096 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1096 -V 21 w(displa)n(y)p 435 1096 V 22 w(matc)n(h)p 611 1096 -V 20 w(list)25 b Fg(\()p Ft(char)14 b(**matches,)g(int)g(len,)h(int)g -(max)p Fg(\))195 1150 y Fu(A)i(con)o(v)o(enience)i(function)f(for)f -(displa)o(ying)i(a)e(list)h(of)e(strings)h(in)i(columnar)e(format)f(on) -h(Read-)195 1205 y(line's)h(output)f(stream.)23 b Ft(matches)16 -b Fu(is)h(the)g(list)h(of)e(strings,)h(in)g(argv)f(format,)g(suc)o(h)h -(as)f(a)h(list)g(of)195 1260 y(completion)c(matc)o(hes.)19 -b Ft(len)11 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h -Ft(matches)p Fu(,)f(and)g Ft(max)g Fu(is)g(the)h(length)f(of)195 -1315 y(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)19 -b(This)13 b(function)h(uses)f(the)h(setting)f(of)f Ft -(print-completions-)195 1370 y(horizontally)k Fu(to)i(select)h(ho)o(w)e -(the)i(matc)o(hes)e(are)h(displa)o(y)o(ed)h(\(see)g(Section)g(1.3.1)d -([Readline)195 1424 y(Init)g(File)g(Syn)o(tax],)e(page)h(4\).)137 -1517 y(The)i(follo)o(wing)f(are)g(implemen)o(ted)i(as)e(macros,)f -(de\014ned)i(in)g Ft(chardefs.h)p Fu(.)k(Applications)d(should)75 -1572 y(refrain)d(from)g(using)h(them.)1762 1689 y(F)l(unction)-1861 -b Fi(int)p 176 1689 V 40 w Fh(rl)p 235 1689 V 21 w(upp)r(ercase)p -506 1689 V 20 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195 -1744 y Fu(Return)i(1)f(if)g Fk(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q -(etic)f(c)o(haracter.)1762 1862 y(F)l(unction)-1861 b -Fi(int)p 176 1862 V 40 w Fh(rl)p 235 1862 V 21 w(lo)n(w)n(ercase)p -489 1862 V 23 w(p)22 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 -1917 y Fu(Return)h(1)f(if)g Fk(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g -(alphab)q(etic)i(c)o(haracter.)1762 2034 y(F)l(unction)-1861 -b Fi(int)p 176 2034 V 40 w Fh(rl)p 235 2034 V 21 w(digit)p -369 2034 V 22 w(p)23 b Fg(\()p Ft(int)14 b(c)p Fg(\))195 -2089 y Fu(Return)i(1)f(if)g Fk(c)j Fu(is)e(a)f(n)o(umeric)h(c)o -(haracter.)1762 2207 y(F)l(unction)-1861 b Fi(int)p 176 -2207 V 40 w Fh(rl)p 235 2207 V 21 w(to)p 307 2207 V 21 -w(upp)r(er)21 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 2261 -y Fu(If)d Fk(c)j Fu(is)d(a)g(lo)o(w)o(ercase)f(alphab)q(etic)j(c)o -(haracter,)d(return)h(the)g(corresp)q(onding)h(upp)q(ercase)g(c)o -(haracter.)1762 2379 y(F)l(unction)-1861 b Fi(int)p 176 -2379 V 40 w Fh(rl)p 235 2379 V 21 w(to)p 307 2379 V 21 -w(lo)n(w)n(er)24 b Fg(\()p Ft(int)15 b(c)p Fg(\))195 -2434 y Fu(If)g Fk(c)i Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)g(c)o -(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o(w)o(ercase)f(c)o -(harac-)195 2489 y(ter.)1762 2606 y(F)l(unction)-1861 -b Fi(int)p 176 2606 V 40 w Fh(rl)p 235 2606 V 21 w(digit)p -369 2606 V 22 w(v)m(alue)24 b Fg(\()p Ft(int)15 b(c)p -Fg(\))195 2661 y Fu(If)g Fk(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g -(the)h(v)m(alue)g(it)g(represen)o(ts.)p eop -%%Page: 34 36 -34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fj(2.4.11)29 b(Alternate)21 b(In)n(terface)137 -245 y Fu(An)i(alternate)f(in)o(terface)h(is)g(a)o(v)m(ailable)h(to)d -(plain)j Ft(readline\(\))p Fu(.)40 b(Some)22 b(applications)i(need)g -(to)75 300 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 355 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 -409 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 464 y(this)i(easy)l(.)1762 -577 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 577 -18 3 v 21 w(callbac)n(k)p 458 577 V 23 w(handler)p 670 -577 V 21 w(install)25 b Fg(\()p Ft(const)14 b(char)h(*prompt,)283 -632 y(rl_vcpfunc_t)e(*lhandler)p Fg(\))195 687 y Fu(Set)f(up)h(the)g -(terminal)g(for)f(readline)i(I/O)f(and)f(displa)o(y)i(the)e(initial)j -(expanded)e(v)m(alue)h(of)e Fk(prompt)p Fu(.)195 742 -y(Sa)o(v)o(e)j(the)h(v)m(alue)h(of)f Fk(lhandler)21 b -Fu(to)15 b(use)h(as)f(a)h(function)h(to)e(call)i(when)f(a)g(complete)g -(line)i(of)d(input)195 797 y(has)g(b)q(een)h(en)o(tered.)21 -b(The)15 b(function)h(tak)o(es)e(the)i(text)e(of)h(the)g(line)i(as)e -(an)g(argumen)o(t.)1762 910 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 910 V 21 w(callbac)n(k)p 458 910 V 23 w(read)p -591 910 V 20 w(c)n(har)j Fg(\()p Ft(void)p Fg(\))195 -965 y Fu(Whenev)o(er)17 b(an)g(application)h(determines)g(that)e(k)o -(eyb)q(oard)h(input)h(is)f(a)o(v)m(ailable,)i(it)e(should)h(call)195 -1019 y Ft(rl_callback_read_char\(\))p Fu(,)8 b(whic)o(h)k(will)g(read)f -(the)g(next)g(c)o(haracter)f(from)g(the)h(curren)o(t)g(input)195 -1074 y(source.)20 b(If)14 b(that)f(c)o(haracter)g(completes)i(the)f -(line,)h Ft(rl_callback_read_char)c Fu(will)16 b(in)o(v)o(ok)o(e)e(the) -195 1129 y Fk(lhandler)21 b Fu(function)c(sa)o(v)o(ed)e(b)o(y)h -Ft(rl_callback_handler_install)d Fu(to)i(pro)q(cess)h(the)g(line.)24 -b Ft(EOF)195 1184 y Fu(is)16 b(indicated)h(b)o(y)e(calling)i -Fk(lhandler)j Fu(with)15 b(a)g Ft(NULL)g Fu(line.)1762 -1297 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 1297 -V 21 w(callbac)n(k)p 458 1297 V 23 w(handler)p 670 1297 -V 21 w(remo)n(v)n(e)i Fg(\()p Ft(void)p Fg(\))195 1352 -y Fu(Restore)d(the)f(terminal)i(to)d(its)i(initial)i(state)d(and)g -(remo)o(v)o(e)g(the)h(line)h(handler.)31 b(This)19 b(ma)o(y)f(b)q(e)195 -1407 y(called)f(from)d(within)j(a)e(callbac)o(k)h(as)f(w)o(ell)h(as)f -(indep)q(enden)o(tly)l(.)75 1516 y Fj(2.4.12)29 b(An)21 -b(Example)137 1612 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 1667 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 1721 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 1776 -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 -1840 y Ft(/*)24 b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e -(characters.)h(*/)195 1892 y(int)195 1944 y(invert_case_line)f -(\(count,)h(key\))314 1995 y(int)h(count,)f(key;)195 -2047 y({)243 2099 y(register)f(int)i(start,)f(end,)g(i;)243 -2203 y(start)g(=)h(rl_point;)243 2307 y(if)f(\(rl_point)g(>=)h -(rl_end\))290 2359 y(return)f(\(0\);)243 2462 y(if)g(\(count)g(<)h(0\)) -290 2514 y({)338 2566 y(direction)f(=)h(-1;)338 2618 -y(count)f(=)h(-count;)290 2670 y(})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)243 149 y Ft(else)290 201 y(direction)23 -b(=)h(1;)243 305 y(/*)f(Find)h(the)f(end)h(of)f(the)h(range)f(to)g -(modify.)g(*/)243 357 y(end)g(=)h(start)f(+)h(\(count)f(*)h -(direction\);)243 461 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g -(*/)243 513 y(if)g(\(end)h(>)f(rl_end\))290 565 y(end)h(=)g(rl_end;)243 -616 y(else)f(if)h(\(end)f(<)h(0\))290 668 y(end)g(=)g(0;)243 -772 y(if)f(\(start)g(==)h(end\))290 824 y(return)f(\(0\);)243 -928 y(if)g(\(start)g(>)h(end\))290 980 y({)338 1032 y(int)g(temp)f(=)h -(start;)338 1083 y(start)f(=)h(end;)338 1135 y(end)g(=)f(temp;)290 -1187 y(})243 1291 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 1343 y(the)g(undo)f -(information.)f(*/)243 1395 y(rl_modifying)g(\(start,)h(end\);)243 -1499 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))290 -1550 y({)338 1602 y(if)h(\(_rl_uppercase_p)d(\(rl_line_buffer[i]\)\)) -386 1654 y(rl_line_buffer[i])g(=)j(_rl_to_lower)e -(\(rl_line_buffer[i]\);)338 1706 y(else)h(if)h(\(_rl_lowercase_p)e -(\(rl_line_buffer[i]\)\))386 1758 y(rl_line_buffer[i])f(=)j -(_rl_to_upper)e(\(rl_line_buffer[i]\);)290 1810 y(})243 -1862 y(/*)h(Move)h(point)f(to)g(on)h(top)f(of)h(the)f(last)h(character) -e(changed.)h(*/)243 1914 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g -(end)f(-)h(1)g(:)f(start;)243 1966 y(return)g(\(0\);)195 -2017 y(})75 2217 y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 -2341 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 2396 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 2451 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 2506 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 2560 -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 -2615 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 -2670 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o -(ually)l(.)p eop -%%Page: 36 38 -36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)137 -149 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 -204 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 -259 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 -314 y(w)o(ere)d(in)i(e\013ect)e(b)q(efore)h Ft(readline\(\))e -Fu(w)o(as)h(called,)i(reset)f(the)f(signal)i(handling)g(to)e(what)g(it) -h(w)o(as)f(b)q(efore)75 369 y Ft(readline\(\))21 b Fu(w)o(as)h(called,) -j(and)e(resend)g(the)g(signal)g(to)f(the)h(calling)h(application.)44 -b(If)23 b(and)f(when)75 423 y(the)17 b(calling)i(application's)f -(signal)g(handler)g(returns,)f(Readline)i(will)g(reinitialize)h(the)d -(terminal)h(and)75 478 y(con)o(tin)o(ue)d(to)e(accept)i(input.)20 -b(When)15 b(a)e Ft(SIGINT)h Fu(is)g(receiv)o(ed,)h(the)g(Readline)h -(signal)f(handler)g(p)q(erforms)75 533 y(some)k(additional)i(w)o(ork,)e -(whic)o(h)h(will)h(cause)f(an)o(y)f(partially-en)o(tered)i(line)g(to)d -(b)q(e)i(ab)q(orted)g(\(see)f(the)75 588 y(description)e(of)d -Ft(rl_free_line_state\(\))f Fu(b)q(elo)o(w\).)137 655 -y(There)g(is)f(an)g(additional)i(Readline)h(signal)e(handler,)g(for)f -Ft(SIGWINCH)p Fu(,)f(whic)o(h)i(the)f(k)o(ernel)h(sends)g(to)e(a)75 -710 y(pro)q(cess)k(whenev)o(er)g(the)f(terminal's)h(size)g(c)o(hanges)f -(\(for)g(example,)h(if)g(a)f(user)h(resizes)g(an)f Ft(xterm)p -Fu(\).)19 b(The)75 764 y(Readline)h Ft(SIGWINCH)d Fu(handler)i(up)q -(dates)f(Readline's)i(in)o(ternal)e(screen)h(size)f(information,)h(and) -f(then)75 819 y(calls)g(an)o(y)f Ft(SIGWINCH)e Fu(signal)j(handler)g -(the)f(calling)i(application)f(has)f(installed.)27 b(Readline)19 -b(calls)f(the)75 874 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 929 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 984 y(return)e(\(for)f(example,)h(a)f -Ft(longjmp)g Fu(bac)o(k)h(to)f(a)h(main)g(pro)q(cessing)g(lo)q(op\),)g -(it)g Fl(must)20 b Fu(call)c Ft(rl_cleanup_)75 1038 y(after_signal\(\)) -d Fu(\(describ)q(ed)k(b)q(elo)o(w\),)e(to)g(restore)f(the)h(terminal)h -(state.)137 1105 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 1160 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 1215 y(applications)k(c)o -(hange)e(the)h(v)m(alues)g(of)f(these)h(v)m(ariables)g(only)g(when)g -(calling)h Ft(readline\(\))p Fu(,)d(not)h(in)h(a)75 1270 -y(signal)d(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g(state)e -(is)i(not)f(corrupted.)1773 1385 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1385 18 3 v 21 w(catc)n(h)p -366 1385 V 22 w(signals)195 1440 y Fu(If)15 b(this)g(v)m(ariable)g(is)g -(non-zero,)g(Readline)i(will)f(install)f(signal)h(handlers)f(for)f -Ft(SIGINT)p Fu(,)f Ft(SIGQUIT)p Fu(,)195 1495 y Ft(SIGTERM)p -Fu(,)h Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p Fu(,)f Ft(SIGTTIN)p -Fu(,)h(and)i Ft(SIGTTOU)p Fu(.)195 1562 y(The)f(default)h(v)m(alue)h -(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1773 1678 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1678 V 21 w(catc)n(h)p 366 -1678 V 22 w(sigwinc)n(h)195 1732 y Fu(If)15 b(this)h(v)m(ariable)h(is)e -(non-zero,)g(Readline)j(will)f(install)f(a)f(signal)h(handler)h(for)d -Ft(SIGWINCH)p Fu(.)195 1799 y(The)h(default)h(v)m(alue)h(of)d -Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1891 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 1945 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 2000 y(functions)d(to)f -(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o -(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1762 2116 -y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 2116 V -21 w(clean)n(up)p 450 2116 V 22 w(after)p 590 2116 V -20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 2171 y Fu(This)18 -b(function)f(will)i(reset)e(the)g(state)f(of)g(the)h(terminal)h(to)e -(what)h(it)g(w)o(as)f(b)q(efore)h Ft(readline\(\))195 -2226 y Fu(w)o(as)d(called,)i(and)f(remo)o(v)o(e)f(the)g(Readline)j -(signal)f(handlers)g(for)e(all)h(signals,)g(dep)q(ending)i(on)e(the)195 -2280 y(v)m(alues)h(of)f Ft(rl_catch_signals)e Fu(and)i -Ft(rl_catch_sigwinch)p Fu(.)1762 2396 y(F)l(unction)-1861 -b Fi(void)20 b Fh(rl)p 241 2396 V 21 w(free)p 356 2396 -V 20 w(line)p 464 2396 V 23 w(state)j Fg(\()p Ft(void)p -Fg(\))195 2451 y Fu(This)d(will)h(free)f(an)o(y)f(partial)h(state)f -(asso)q(ciated)h(with)g(the)g(curren)o(t)f(input)i(line)g(\(undo)f -(infor-)195 2506 y(mation,)i(an)o(y)f(partial)h(history)f(en)o(try)l(,) -h(an)o(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)h(and)f(an)o -(y)195 2560 y(partially-en)o(tered)k(n)o(umeric)g(argumen)o(t\).)45 -b(This)24 b(should)h(b)q(e)g(called)g(b)q(efore)g Ft(rl_cleanup_)195 -2615 y(after_signal\(\))p Fu(.)36 b(The)22 b(Readline)i(signal)e -(handler)g(for)f Ft(SIGINT)f Fu(calls)j(this)e(to)g(ab)q(ort)g(the)195 -2670 y(curren)o(t)15 b(input)h(line.)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)1762 149 y(F)l(unction)-1861 b Fi(void)20 -b Fh(rl)p 241 149 18 3 v 21 w(reset)p 383 149 V 20 w(after)p -521 149 V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 204 -y Fu(This)15 b(will)h(reinitialize)h(the)d(terminal)h(and)g(reinstall)h -(an)o(y)d(Readline)k(signal)e(handlers,)g(dep)q(end-)195 -259 y(ing)h(on)f(the)g(v)m(alues)i(of)d Ft(rl_catch_signals)f -Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)137 354 y(If)k(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 409 y(terminal\(\))12 -b Fu(or)h Ft(rl_set_screen_size\(\))e Fu(to)i(force)g(Readline)j(to)d -(up)q(date)h(its)g(idea)g(of)g(the)f(terminal)75 464 -y(size)j(when)g(a)f Ft(SIGWINCH)f Fu(is)h(receiv)o(ed.)1762 -586 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 586 -V 21 w(resize)p 401 586 V 22 w(terminal)j Fg(\()p Ft(void)p -Fg(\))195 641 y Fu(Up)q(date)16 b(Readline's)h(in)o(ternal)f(screen)f -(size)i(b)o(y)e(reading)g(v)m(alues)i(from)d(the)i(k)o(ernel.)1762 -763 y(F)l(unction)-1861 b Fi(void)20 b Fh(rl)p 241 763 -V 21 w(set)p 333 763 V 21 w(screen)p 510 763 V 20 w(size)k -Fg(\()p Ft(int)15 b(rows,)f(int)h(cols)p Fg(\))195 817 -y Fu(Set)g(Readline's)i(idea)f(of)f(the)g(terminal)h(size)g(to)f -Fk(ro)o(ws)h Fu(ro)o(ws)e(and)i Fk(cols)h Fu(columns.)137 -913 y(The)f(follo)o(wing)g(functions)g(install)g(and)g(remo)o(v)o(e)e -(Readline's)j(signal)f(handlers.)1762 1035 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1035 V 21 w(set)p 307 1035 -V 20 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1090 y Fu(Install)c -(Readline's)g(signal)g(handler)f(for)f Ft(SIGINT)p Fu(,)g -Ft(SIGQUIT)p Fu(,)g Ft(SIGTERM)p Fu(,)g Ft(SIGALRM)p -Fu(,)f Ft(SIGTSTP)p Fu(,)195 1144 y Ft(SIGTTIN)p Fu(,)11 -b Ft(SIGTTOU)p Fu(,)g(and)h Ft(SIGWINCH)p Fu(,)e(dep)q(ending)k(on)e -(the)f(v)m(alues)i(of)e Ft(rl_catch_signals)f Fu(and)195 -1199 y Ft(rl_catch_sigwinch)p Fu(.)1762 1321 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 1321 V 21 w(clear)p 354 1321 -V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 1376 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\(\))p Fu(.)75 1509 y Fs(2.6)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 1661 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 1716 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 -1886 y Fj(2.6.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 2203 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)22 b(user-in)o(terface)g -(function)h Ft(rl_complete\(\))p Fu(.)37 b(This)22 b(function)h(is)f -(called)h(with)f(the)g(same)165 2451 y(argumen)o(ts)17 -b(as)h(other)g(bindable)i(Readline)g(functions:)27 b -Fk(coun)o(t)19 b Fu(and)f Fk(in)o(v)o(oking)p 1556 2451 -14 2 v 17 w(k)o(ey)p Fu(.)28 b(It)19 b(isolates)165 2506 -y(the)g(w)o(ord)f(to)g(b)q(e)i(completed)f(and)g(calls)h -Ft(rl_completion_matches\(\))c Fu(to)i(generate)g(a)h(list)g(of)165 -2560 y(p)q(ossible)e(completions.)22 b(It)16 b(then)g(either)g(lists)g -(the)g(p)q(ossible)h(completions,)g(inserts)f(the)f(p)q(ossible)165 -2615 y(completions,)25 b(or)d(actually)i(p)q(erforms)e(the)g -(completion,)k(dep)q(ending)e(on)f(whic)o(h)g(b)q(eha)o(vior)g(is)165 -2670 y(desired.)p eop -%%Page: 38 40 -38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)100 -149 y(2.)29 b(The)17 b(in)o(ternal)h(function)f Ft -(rl_completion_matches\(\))d Fu(uses)j(an)g(application-supplie)q(d)j -Fk(gener-)165 204 y(ator)h Fu(function)e(to)f(generate)g(the)h(list)g -(of)f(p)q(ossible)i(matc)o(hes,)f(and)f(then)h(returns)g(the)f(arra)o -(y)f(of)165 259 y(these)j(matc)o(hes.)32 b(The)20 b(caller)g(should)h -(place)f(the)g(address)f(of)h(its)f(generator)g(function)h(in)g -Ft(rl_)165 314 y(completion_entry_function)p Fu(.)100 -383 y(3.)29 b(The)12 b(generator)e(function)i(is)g(called)h(rep)q -(eatedly)g(from)e Ft(rl_completion_matches\(\))p Fu(,)d(returning)165 -438 y(a)16 b(string)g(eac)o(h)h(time.)24 b(The)17 b(argumen)o(ts)e(to)h -(the)g(generator)g(function)h(are)f Fk(text)h Fu(and)g -Fk(state)p Fu(.)22 b Fk(text)165 493 y Fu(is)17 b(the)f(partial)g(w)o -(ord)f(to)h(b)q(e)h(completed.)23 b Fk(state)18 b Fu(is)e(zero)g(the)g -(\014rst)g(time)g(the)g(function)h(is)g(called,)165 547 -y(allo)o(wing)23 b(the)f(generator)f(to)g(p)q(erform)h(an)o(y)g -(necessary)g(initialization,)k(and)c(a)g(p)q(ositiv)o(e)h(non-)165 -602 y(zero)14 b(in)o(teger)h(for)f(eac)o(h)h(subsequen)o(t)g(call.)21 -b(The)15 b(generator)e(function)j(returns)e Ft(\(char)h(*\)NULL)f -Fu(to)165 657 y(inform)19 b Ft(rl_completion_matches\(\))d -Fu(that)i(there)h(are)g(no)g(more)g(p)q(ossibilities)j(left.)32 -b(Usually)165 712 y(the)19 b(generator)g(function)h(computes)g(the)f -(list)h(of)f(p)q(ossible)i(completions)g(when)e Fk(state)j -Fu(is)d(zero,)165 767 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)g -(on)g(subsequen)o(t)g(calls.)20 b(Eac)o(h)13 b(string)f(the)h -(generator)f(function)165 821 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h -(b)q(e)g(allo)q(cated)h(with)g Ft(malloc\(\))p Fu(;)d(Readline)19 -b(frees)d(the)g(strings)f(when)165 876 y(it)g(has)h(\014nished)g(with)g -(them.)1762 1005 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p -215 1005 18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 1059 y Fu(Complete)h(the)f(w)o(ord)g(at)f(or) -h(b)q(efore)h(p)q(oin)o(t.)21 b(Y)l(ou)15 b(ha)o(v)o(e)g(supplied)j -(the)d(function)i(that)d(do)q(es)i(the)195 1114 y(initial)23 -b(simple)f(matc)o(hing)e(selection)i(algorithm)f(\(see)f -Ft(rl_completion_matches\(\))p Fu(\).)33 b(The)195 1169 -y(default)16 b(is)f(to)g(do)g(\014lename)h(completion.)1773 -1298 y(V)l(ariable)-1861 b Fi(rl_compentry_func_t)22 -b(*)d Fh(rl)p 678 1298 V 21 w(completion)p 973 1298 V -21 w(en)n(try)p 1126 1298 V 22 w(function)195 1352 y -Fu(This)i(is)f(a)g(p)q(oin)o(ter)g(to)f(the)h(generator)g(function)g -(for)g Ft(rl_completion_matches\(\))p Fu(.)31 b(If)20 -b(the)195 1407 y(v)m(alue)13 b(of)f Ft(rl_completion_entry_fun)o(ction) -d Fu(is)j Ft(NULL)f Fu(then)h(the)g(default)h(\014lename)g(generator) -195 1462 y(function,)j Ft(rl_filename_completion_f)o(unction)o(\(\))p -Fu(,)c(is)k(used.)75 1582 y Fj(2.6.2)30 b(Completion)20 -b(F)-5 b(unctions)137 1682 y Fu(Here)16 b(is)f(the)h(complete)g(list)g -(of)e(callable)k(completion)e(functions)g(presen)o(t)f(in)h(Readline.) -1762 1810 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 -1810 V 21 w(complete)p 460 1810 V 21 w(in)n(ternal)k -Fg(\()p Ft(int)15 b(what_to_do)p Fg(\))195 1865 y Fu(Complete)k(the)g -(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)31 b Fk(what)p -1108 1865 14 2 v 16 w(to)p 1165 1865 V 16 w(do)21 b Fu(sa)o(ys)d(what)g -(to)g(do)h(with)g(the)g(com-)195 1920 y(pletion.)j(A)16 -b(v)m(alue)h(of)e(`)p Ft(?)p Fu(')g(means)g(list)i(the)e(p)q(ossible)j -(completions.)k(`)p Ft(TAB)p Fu(')14 b(means)i(do)f(standard)195 -1975 y(completion.)22 b(`)p Ft(*)p Fu(')15 b(means)g(insert)h(all)h(of) -e(the)h(p)q(ossible)h(completions.)22 b(`)p Ft(!)p Fu(')15 -b(means)g(to)g(displa)o(y)i(all)195 2029 y(of)g(the)g(p)q(ossible)i -(completions,)f(if)g(there)f(is)h(more)f(than)g(one,)g(as)g(w)o(ell)h -(as)f(p)q(erforming)h(partial)195 2084 y(completion.)1762 -2213 y(F)l(unction)-1861 b Fi(int)20 b Fh(rl)p 215 2213 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 2268 y Fu(Complete)21 b(the)g(w)o(ord)e(at)h -(or)g(b)q(efore)h(p)q(oin)o(t.)37 b(Y)l(ou)21 b(ha)o(v)o(e)f(supplied)j -(the)d(function)i(that)e(do)q(es)195 2322 y(the)d(initial)h(simple)g -(matc)o(hing)f(selection)h(algorithm)e(\(see)g Ft -(rl_completion_matches\(\))e Fu(and)195 2377 y Ft -(rl_completion_entry_functi)o(on)p Fu(\).)25 b(The)18 -b(default)h(is)f(to)f(do)h(\014lename)h(completion.)29 -b(This)195 2432 y(calls)16 b Ft(rl_complete_internal\(\))c -Fu(with)k(an)f(argumen)o(t)f(dep)q(ending)k(on)d Fk(in)o(v)o(oking)p -1657 2432 14 2 v 17 w(k)o(ey)p Fu(.)1762 2560 y(F)l(unction)-1861 -b Fi(int)20 b Fh(rl)p 215 2560 18 3 v 21 w(p)r(ossible)p -433 2560 V 20 w(completions)j Fg(\()p Ft(int)15 b(count,)f(int)h -(invoking_key)p Fg(\))195 2615 y Fu(List)21 b(the)f(p)q(ossible)i -(completions.)36 b(See)21 b(description)h(of)e Ft(rl_complete)13 -b(\(\))p Fu(.)35 b(This)21 b(calls)g Ft(rl_)195 2670 -y(complete_internal\(\))13 b Fu(with)i(an)g(argumen)o(t)g(of)f(`)p -Ft(?)p Fu('.)p eop -%%Page: 39 41 -39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(39)1762 149 y(F)l(unction)-1861 b Fi(int)20 -b Fh(rl)p 215 149 18 3 v 21 w(insert)p 378 149 V 21 w(completions)j -Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\))195 -204 y Fu(Insert)i(the)g(list)h(of)e(p)q(ossible)j(completions)e(in)o -(to)g(the)g(line,)i(deleting)f(the)f(partially-completed)195 -259 y(w)o(ord.)k(See)c(description)g(of)e Ft(rl_complete\(\))p -Fu(.)20 b(This)d(calls)g Ft(rl_complete_internal\(\))c -Fu(with)195 314 y(an)i(argumen)o(t)g(of)f(`)p Ft(*)p -Fu('.)1762 445 y(F)l(unction)-1861 b Fi(char)20 b(**)f -Fh(rl)p 312 445 V 21 w(completion)p 607 445 V 21 w(matc)n(hes)j -Fg(\()p Ft(const)15 b(char)f(*text,)283 500 y(rl_compentry_func_t)e -(*entry_func)p Fg(\))195 554 y Fu(Returns)17 b(an)f(arra)o(y)f(of)g -Ft(\(char)g(*\))h Fu(whic)o(h)h(is)f(a)g(list)h(of)f(completions)h(for) -e Fk(text)p Fu(.)23 b(If)16 b(there)g(are)g(no)195 609 -y(completions,)i(returns)g Ft(NULL)p Fu(.)25 b(The)17 -b(\014rst)g(en)o(try)g(in)h(the)f(returned)h(arra)o(y)e(is)i(the)f -(substitution)195 664 y(for)c Fk(text)p Fu(.)18 b(The)c(remaining)g(en) -o(tries)f(are)g(the)h(p)q(ossible)g(completions.)21 b(The)13 -b(arra)o(y)f(is)i(terminated)195 719 y(with)i(a)e Ft(NULL)h -Fu(p)q(oin)o(ter.)195 791 y Fk(en)o(try)p 302 791 14 -2 v 16 w(func)20 b Fu(is)e(a)f(function)g(of)g(t)o(w)o(o)f(args,)g(and) -h(returns)g(a)g Ft(\(char)d(*\))p Fu(.)25 b(The)18 b(\014rst)e(argumen) -o(t)g(is)195 845 y Fk(text)p Fu(.)32 b(The)19 b(second)h(is)g(a)f -(state)f(argumen)o(t;)j(it)e(is)h(zero)f(on)g(the)h(\014rst)f(call,)i -(and)e(non-zero)h(on)195 900 y(subsequen)o(t)e(calls.)27 -b Fk(en)o(try)p 662 900 V 16 w(func)20 b Fu(returns)d(a)g -Ft(NULL)g Fu(p)q(oin)o(ter)g(to)g(the)g(caller)h(when)g(there)f(are)g -(no)195 955 y(more)e(matc)o(hes.)1762 1086 y(F)l(unction)-1861 -b Fi(char)20 b(*)f Fh(rl)p 286 1086 18 3 v 21 w(\014lename)p -515 1086 V 20 w(completion)p 809 1086 V 21 w(function)k -Fg(\()p Ft(const)15 b(char)f(*text,)h(int)283 1141 y(state)p -Fg(\))195 1195 y Fu(A)h(generator)e(function)j(for)e(\014lename)h -(completion)h(in)f(the)g(general)g(case.)21 b(Note)15 -b(that)g(comple-)195 1250 y(tion)i(in)h(Bash)f(is)g(a)f(little)i -(di\013eren)o(t)f(b)q(ecause)h(of)f(all)g(the)g(pathnames)g(that)f(m)o -(ust)g(b)q(e)i(follo)o(w)o(ed)195 1305 y(when)f(lo)q(oking)g(up)g -(completions)h(for)d(a)i(command.)23 b(The)17 b(Bash)f(source)h(is)g(a) -f(useful)h(reference)195 1360 y(for)e(writing)g(custom)g(completion)h -(functions.)1762 1491 y(F)l(unction)-1861 b Fi(char)20 -b(*)f Fh(rl)p 286 1491 V 21 w(username)p 547 1491 V 19 -w(completion)p 840 1491 V 21 w(function)k Fg(\()p Ft(const)14 -b(char)g(*text,)283 1546 y(int)g(state)p Fg(\))195 1600 -y Fu(A)g(completion)i(generator)d(for)h(usernames.)19 -b Fk(text)c Fu(con)o(tains)f(a)g(partial)h(username)f(preceded)i(b)o(y) -195 1655 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p -Ft(~)p Fu('\).)i(As)c(with)g(all)i(completion)f(generators,)e -Fk(state)j Fu(is)f(zero)f(on)195 1710 y(the)g(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)75 1831 y Fj(2.6.3)30 -b(Completion)20 b(V)-5 b(ariables)1773 1991 y Fu(V)l(ariable)-1861 -b Fi(rl_compentry_func_t)22 b(*)d Fh(rl)p 678 1991 V -21 w(completion)p 973 1991 V 21 w(en)n(try)p 1126 1991 -V 22 w(function)195 2046 y Fu(A)e(p)q(oin)o(ter)g(to)f(the)h(generator) -f(function)h(for)f Ft(rl_completion_matches\(\))p Fu(.)22 -b Ft(NULL)16 b Fu(means)h(to)195 2101 y(use)f Ft -(rl_filename_completion_)o(functio)o(n\(\))p Fu(,)c(the)j(default)h -(\014lename)g(completer.)1773 2232 y(V)l(ariable)-1861 -b Fi(rl_completion_func_t)22 b(*)d Fh(rl)p 704 2232 V -22 w(attempted)p 985 2232 V 20 w(completion)p 1279 2232 -V 21 w(function)195 2286 y Fu(A)e(p)q(oin)o(ter)h(to)f(an)g(alternativ) -o(e)h(function)g(to)f(create)g(matc)o(hes.)26 b(The)18 -b(function)g(is)g(called)h(with)195 2341 y Fk(text)p -Fu(,)11 b Fk(start)p Fu(,)g(and)h Fk(end)p Fu(.)19 b -Fk(start)11 b Fu(and)h Fk(end)i Fu(are)d(indices)i(in)g -Ft(rl_line_buffer)c Fu(de\014ning)k(the)f(b)q(ound-)195 -2396 y(aries)h(of)g Fk(text)p Fu(,)f(whic)o(h)i(is)g(a)e(c)o(haracter)h -(string.)19 b(If)13 b(this)g(function)h(exists)g(and)f(returns)g -Ft(NULL)p Fu(,)f(or)g(if)195 2451 y(this)f(v)m(ariable)i(is)e(set)g(to) -f Ft(NULL)p Fu(,)h(then)g Ft(rl_complete\(\))e Fu(will)k(call)f(the)f -(v)m(alue)h(of)f Ft(rl_completion_)195 2506 y(entry_function)h -Fu(to)i(generate)g(matc)o(hes,)f(otherwise)i(the)f(arra)o(y)f(of)h -(strings)g(returned)g(will)i(b)q(e)195 2560 y(used.)31 -b(If)19 b(this)h(function)f(sets)g(the)g Ft(rl_attempted_completion_)o -(over)d Fu(v)m(ariable)k(to)e(a)h(non-)195 2615 y(zero)e(v)m(alue,)i -(Readline)h(will)g(not)d(p)q(erform)g(its)h(default)g(completion)h(if)f -(this)g(function)g(returns)195 2670 y(no)d(matc)o(hes.)p -eop -%%Page: 40 42 -40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)1773 -149 y(V)l(ariable)-1861 b Fi(rl_quote_func_t)21 b(*)f -Fh(rl)p 574 149 18 3 v 21 w(\014lename)p 803 149 V 20 -w(quoting)p 1012 149 V 21 w(function)195 204 y Fu(A)c(p)q(oin)o(ter)h -(to)f(a)g(function)h(that)e(will)j(quote)e(a)g(\014lename)i(in)f(an)f -(application-sp)q(eci\014)q(c)j(fashion.)195 259 y(This)h(is)g(called)i -(if)e(\014lename)g(completion)h(is)f(b)q(eing)h(attempted)e(and)h(one)g -(of)f(the)h(c)o(haracters)195 314 y(in)d Ft -(rl_filename_quote_characters)c Fu(app)q(ears)k(in)g(a)g(completed)g -(\014lename.)25 b(The)17 b(function)195 369 y(is)i(called)i(with)e -Fk(text)p Fu(,)g Fk(matc)o(h)p 722 369 14 2 v 16 w(t)o(yp)q(e)p -Fu(,)g(and)g Fk(quote)p 1059 369 V 17 w(p)q(oin)o(ter)p -Fu(.)31 b(The)19 b Fk(text)h Fu(is)f(the)g(\014lename)h(to)e(b)q(e)195 -423 y(quoted.)39 b(The)21 b Fk(matc)o(h)p 607 423 V 16 -w(t)o(yp)q(e)j Fu(is)e(either)g Ft(SINGLE_MATCH)p Fu(,)f(if)h(there)f -(is)h(only)g(one)g(completion)195 478 y(matc)o(h,)15 -b(or)g Ft(MULT_MATCH)p Fu(.)20 b(Some)c(functions)g(use)g(this)g(to)f -(decide)j(whether)e(or)f(not)g(to)g(insert)h(a)195 533 -y(closing)c(quote)e(c)o(haracter.)18 b(The)11 b Fk(quote)p -877 533 V 16 w(p)q(oin)o(ter)k Fu(is)c(a)f(p)q(oin)o(ter)i(to)e(an)o(y) -g(op)q(ening)i(quote)f(c)o(haracter)195 588 y(the)k(user)h(t)o(yp)q -(ed.)k(Some)15 b(functions)h(c)o(ho)q(ose)f(to)g(reset)g(this)g(c)o -(haracter.)1773 690 y(V)l(ariable)-1861 b Fi(rl_dequote_func_t)22 -b(*)d Fh(rl)p 626 690 18 3 v 21 w(\014lename)p 855 690 -V 20 w(dequoting)p 1122 690 V 21 w(function)195 744 y -Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(remo)o(v)o(e)e -(application-sp)q(eci\014)q(c)k(quoting)d(c)o(haracters)f(from)195 -799 y(a)i(\014lename)h(b)q(efore)g(completion)g(is)g(attempted,)f(so)f -(those)h(c)o(haracters)g(do)g(not)g(in)o(terfere)h(with)195 -854 y(matc)o(hing)i(the)g(text)g(against)f(names)h(in)h(the)f -(\014lesystem.)33 b(It)19 b(is)g(called)i(with)e Fk(text)p -Fu(,)g(the)g(text)195 909 y(of)i(the)g(w)o(ord)g(to)g(b)q(e)h -(dequoted,)h(and)e Fk(quote)p 1009 909 14 2 v 17 w(c)o(har)p -Fu(,)h(whic)o(h)g(is)g(the)f(quoting)h(c)o(haracter)f(that)195 -964 y(delimits)d(the)e(\014lename)i(\(usually)f(`)p Ft(')p -Fu(')f(or)f(`)p Ft(")p Fu('\).)22 b(If)17 b Fk(quote)p -1187 964 V 16 w(c)o(har)i Fu(is)e(zero,)f(the)g(\014lename)i(w)o(as)d -(not)195 1018 y(in)h(an)f(em)o(b)q(edded)i(string.)1773 -1120 y(V)l(ariable)-1861 b Fi(rl_linebuf_func_t)22 b(*)d -Fh(rl)p 626 1120 18 3 v 21 w(c)n(har)p 754 1120 V 21 -w(is)p 813 1120 V 21 w(quoted)p 1005 1120 V 21 w(p)195 -1175 y Fu(A)f(p)q(oin)o(ter)h(to)f(a)g(function)h(to)f(call)i(that)d -(determines)j(whether)e(or)g(not)g(a)g(sp)q(eci\014c)j(c)o(haracter)195 -1230 y(in)d(the)f(line)i(bu\013er)e(is)h(quoted,)g(according)f(to)g -(whatev)o(er)f(quoting)i(mec)o(hanism)g(the)f(program)195 -1284 y(calling)e(readline)h(uses.)j(The)14 b(function)h(is)f(called)h -(with)f(t)o(w)o(o)e(argumen)o(ts:)19 b Fk(text)p Fu(,)13 -b(the)g(text)h(of)f(the)195 1339 y(line,)k(and)e Fk(index)p -Fu(,)i(the)e(index)i(of)e(the)g(c)o(haracter)g(in)h(the)g(line.)22 -b(It)15 b(is)h(used)g(to)f(decide)i(whether)e(a)195 1394 -y(c)o(haracter)f(found)i(in)g Ft(rl_completer_word_break_)o(charact)o -(ers)c Fu(should)k(b)q(e)g(used)g(to)e(break)195 1449 -y(w)o(ords)g(for)h(the)g(completer.)1773 1551 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1551 V 21 w(completion)p 510 -1551 V 21 w(query)p 673 1551 V 21 w(items)195 1605 y -Fu(Up)e(to)g(this)g(man)o(y)g(items)g(will)i(b)q(e)f(displa)o(y)o(ed)g -(in)g(resp)q(onse)g(to)e(a)h(p)q(ossible-completions)j(call.)195 -1660 y(After)14 b(that,)f(w)o(e)h(ask)g(the)h(user)f(if)h(she)f(is)h -(sure)g(she)f(w)o(an)o(ts)f(to)h(see)h(them)f(all.)20 -b(The)15 b(default)g(v)m(alue)195 1715 y(is)h(100.)1773 -1817 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 1817 V 21 w(basic)p 580 1817 V 21 w(w)n(ord)p 725 -1817 V 21 w(break)p 886 1817 V 20 w(c)n(haracters)195 -1872 y Fu(The)j(basic)h(list)g(of)f(c)o(haracters)f(that)g(signal)i(a)f -(break)g(b)q(et)o(w)o(een)g(w)o(ords)g(for)f(the)h(completer)195 -1926 y(routine.)30 b(The)19 b(default)g(v)m(alue)h(of)e(this)h(v)m -(ariable)h(is)f(the)g(c)o(haracters)f(whic)o(h)h(break)g(w)o(ords)f -(for)195 1981 y(completion)e(in)g(Bash,)f(i.e.,)g Ft(")g -(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1773 2083 y(V)l(ariable)-1861 -b Fi(const)20 b(char)g(*)f Fh(rl)p 436 2083 V 21 w(basic)p -580 2083 V 21 w(quote)p 740 2083 V 21 w(c)n(haracters)195 -2138 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.)1773 2239 y(V)l(ariable)-1861 b -Fi(const)20 b(char)g(*)f Fh(rl)p 436 2239 V 21 w(completer)p -705 2239 V 21 w(w)n(ord)p 850 2239 V 20 w(break)p 1010 -2239 V 20 w(c)n(haracters)195 2294 y Fu(The)33 b(list)g(of)f(c)o -(haracters)g(that)f(signal)j(a)e(break)g(b)q(et)o(w)o(een)h(w)o(ords)f -(for)g Ft(rl_complete_)195 2349 y(internal\(\))p Fu(.)18 -b(The)e(default)g(list)g(is)f(the)h(v)m(alue)g(of)f Ft -(rl_basic_word_break_chara)o(cters)p Fu(.)1773 2451 y(V)l(ariable)-1861 -b Fi(const)20 b(char)g(*)f Fh(rl)p 436 2451 V 21 w(completer)p -705 2451 V 21 w(quote)p 865 2451 V 20 w(c)n(haracters)195 -2506 y Fu(List)h(of)e(c)o(haracters)h(whic)o(h)g(can)h(b)q(e)f(used)h -(to)e(quote)h(a)g(substring)g(of)g(the)g(line.)33 b(Completion)195 -2560 y(o)q(ccurs)13 b(on)h(the)f(en)o(tire)g(substring,)h(and)f(within) -i(the)e(substring)g Ft(rl_completer_word_break_)195 2615 -y(characters)j Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g -(unless)i(they)e(also)h(app)q(ear)g(within)h(this)195 -2670 y(list.)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)1773 149 y(V)l(ariable)-1861 b Fi(const)20 -b(char)g(*)f Fh(rl)p 436 149 18 3 v 21 w(\014lename)p -665 149 V 20 w(quote)p 824 149 V 21 w(c)n(haracters)195 -204 y Fu(A)e(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g(\014lename) -h(to)e(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f(they)195 -259 y(app)q(ear)e(in)h(a)f(completed)h(\014lename.)21 -b(The)16 b(default)g(is)f(the)h(n)o(ull)g(string.)1773 -376 y(V)l(ariable)-1861 b Fi(const)20 b(char)g(*)f Fh(rl)p -436 376 V 21 w(sp)r(ecial)p 623 376 V 22 w(pre\014xes)195 -431 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)h(w)o(ord)f -(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g(in)h -Fk(text)f Fu(when)195 486 y(it)f(is)f(passed)h(to)f(the)g(completion)h -(function.)20 b(Programs)11 b(can)h(use)h(this)g(to)f(help)h(determine) -h(what)195 541 y(kind)i(of)e(completing)i(to)e(do.)19 -b(F)l(or)14 b(instance,)i(Bash)e(sets)h(this)g(v)m(ariable)h(to)e -Ft(")p Fu($)p Ft(@")g Fu(so)g(that)g(it)h(can)195 596 -y(complete)h(shell)h(v)m(ariables)f(and)g(hostnames.)1773 -713 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 713 -V 21 w(completion)p 510 713 V 21 w(app)r(end)p 715 713 -V 19 w(c)n(haracter)195 768 y Fu(When)d(a)f(single)i(completion)g -(alternativ)o(e)f(matc)o(hes)f(at)g(the)h(end)g(of)f(the)h(command)f -(line,)j(this)195 823 y(c)o(haracter)10 b(is)h(app)q(ended)i(to)d(the)g -(inserted)i(completion)g(text.)18 b(The)11 b(default)g(is)g(a)g(space)g -(c)o(haracter)195 877 y(\(`)j('\).)19 b(Setting)14 b(this)f(to)g(the)g -(n)o(ull)i(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))e(prev)o(en)o(ts)i(an)o -(ything)h(b)q(eing)h(app)q(ended)f(auto-)195 932 y(matically)l(.)21 -b(This)15 b(can)f(b)q(e)h(c)o(hanged)g(in)g(custom)f(completion)i -(functions)f(to)f(pro)o(vide)h(the)f(\\most)195 987 y(sensible)i(w)o -(ord)c(separator)h(c)o(haracter")f(according)i(to)f(an)h -(application-sp)q(eci\014c)j(command)c(line)195 1042 -y(syn)o(tax)h(sp)q(eci\014cation.)1773 1159 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1159 V 21 w(ignore)p 391 1159 -V 20 w(completion)p 685 1159 V 21 w(duplicates)195 1214 -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.)1773 1331 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1331 V 21 w(\014lename)p 444 -1331 V 20 w(completion)p 738 1331 V 21 w(desired)195 -1386 y Fu(Non-zero)c(means)g(that)f(the)h(results)g(of)g(the)g(matc)o -(hes)f(are)h(to)f(b)q(e)i(treated)e(as)g(\014lenames.)23 -b(This)195 1441 y(is)14 b Fl(always)j Fu(zero)c(on)g(en)o(try)l(,)g -(and)h(can)f(only)h(b)q(e)g(c)o(hanged)f(within)i(a)e(completion)h(en)o -(try)f(generator)195 1496 y(function.)38 b(If)21 b(it)g(is)g(set)g(to)f -(a)g(non-zero)h(v)m(alue,)i(directory)e(names)g(ha)o(v)o(e)g(a)f(slash) -h(app)q(ended)195 1551 y(and)d(Readline)i(attempts)c(to)h(quote)g -(completed)i(\014lenames)f(if)g(they)g(con)o(tain)g(an)o(y)f(c)o -(haracters)195 1605 y(in)f Ft(rl_filename_quote_character)o(s)d -Fu(and)i Ft(rl_filename_quoting_desired)d Fu(is)k(set)f(to)f(a)195 -1660 y(non-zero)h(v)m(alue.)1773 1778 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 1778 V 21 w(\014lename)p 444 -1778 V 20 w(quoting)p 653 1778 V 21 w(desired)195 1832 -y Fu(Non-zero)14 b(means)g(that)f(the)i(results)f(of)g(the)g(matc)o -(hes)f(are)h(to)f(b)q(e)i(quoted)f(using)h(double)g(quotes)195 -1887 y(\(or)c(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o -(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y) -195 1942 y(c)o(haracters)i(in)i Ft(rl_filename_quote_chars)p -Fu(.)h(This)f(is)f Fl(always)k Fu(non-zero)d(on)f(en)o(try)l(,)f(and)i -(can)195 1997 y(only)c(b)q(e)g(c)o(hanged)g(within)h(a)f(completion)g -(en)o(try)g(generator)e(function.)20 b(The)12 b(quoting)g(is)g -(e\013ected)195 2052 y(via)j(a)g(call)i(to)d(the)i(function)g(p)q(oin)o -(ted)g(to)e(b)o(y)h Ft(rl_filename_quoting_function)p -Fu(.)1773 2169 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p -215 2169 V 21 w(attempted)p 495 2169 V 20 w(completion)p -789 2169 V 21 w(o)n(v)n(er)195 2224 y Fu(If)47 b(an)g(application-sp)q -(eci\014)q(c)j(completion)e(function)g(assigned)f(to)g -Ft(rl_attempted_)195 2279 y(completion_function)24 b -Fu(sets)i(this)h(v)m(ariable)h(to)e(a)g(non-zero)h(v)m(alue,)j -(Readline)f(will)f(not)195 2333 y(p)q(erform)e(its)h(default)f -(\014lename)i(completion)f(if)g(the)f(application's)i(completion)f -(function)195 2388 y(returns)15 b(no)g(matc)o(hes.)20 -b(It)15 b(should)h(b)q(e)g(set)f(only)h(b)o(y)f(an)g(application's)h -(completion)h(function.)1773 2506 y(V)l(ariable)-1861 -b Fi(int)20 b Fh(rl)p 215 2506 V 21 w(completion)p 510 -2506 V 21 w(t)n(yp)r(e)195 2560 y Fu(Set)e(to)e(a)i(c)o(haracter)f -(describing)i(the)e(t)o(yp)q(e)h(of)f(completion)i(Readline)h(is)e -(curren)o(tly)g(attempt-)195 2615 y(ing;)g(see)f(the)f(description)i -(of)f Ft(rl_complete_internal\(\))c Fu(\(see)k(Section)h(2.6.2)d -([Completion)195 2670 y(F)l(unctions],)g(page)g(38\))g(for)f(the)h -(list)h(of)f(c)o(haracters.)p eop -%%Page: 42 44 -42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)1773 -149 y(V)l(ariable)-1861 b Fi(int)20 b Fh(rl)p 215 149 -18 3 v 21 w(inhibit)p 399 149 V 23 w(completion)195 204 -y Fu(If)14 b(this)h(v)m(ariable)g(is)g(non-zero,)f(completion)i(is)e -(inhibited.)22 b(The)15 b(completion)g(c)o(haracter)e(will)j(b)q(e)195 -259 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)e -Ft(self-insert)p Fu(.)1773 376 y(V)l(ariable)-1861 b -Fi(rl_compignore_func_t)22 b(*)d Fh(rl)p 704 376 V 22 -w(ignore)p 881 376 V 20 w(some)p 1028 376 V 19 w(completions)p -1344 376 V 21 w(function)195 431 y Fu(This)g(function,)i(if)e -(de\014ned,)i(is)e(called)h(b)o(y)f(the)g(completer)g(when)h(real)f -(\014lename)h(completion)195 486 y(is)e(done,)f(after)f(all)i(the)f -(matc)o(hing)g(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)25 -b(It)17 b(is)h(passed)f(a)g Ft(NULL)f Fu(ter-)195 540 -y(minated)g(arra)o(y)e(of)h(matc)o(hes.)20 b(The)c(\014rst)f(elemen)o -(t)h(\()p Ft(matches[0])p Fu(\))d(is)j(the)g(maximal)g(substring)195 -595 y(common)e(to)g(all)h(matc)o(hes.)k(This)c(function)g(can)g -(re-arrange)f(the)g(list)h(of)f(matc)o(hes)g(as)g(required,)195 -650 y(but)h(eac)o(h)h(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f(m) -o(ust)g(b)q(e)i(freed.)1773 767 y(V)l(ariable)-1861 b -Fi(rl_icppfunc_t)21 b(*)e Fh(rl)p 521 767 V 21 w(directory)p -769 767 V 22 w(completion)p 1065 767 V 21 w(ho)r(ok)195 -822 y Fu(This)k(function,)i(if)e(de\014ned,)j(is)d(allo)o(w)o(ed)g(to)f -(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)f(\014lenames)195 -877 y(Readline)f(completes.)29 b(It)19 b(is)f(called)i(with)f(the)f -(address)h(of)e(a)h(string)h(\(the)f(curren)o(t)g(directory)195 -932 y(name\))g(as)g(an)h(argumen)o(t,)f(and)h(ma)o(y)f(mo)q(dify)h -(that)f(string.)30 b(If)19 b(the)f(string)h(is)g(replaced)h(with)195 -986 y(a)g(new)g(string,)h(the)f(old)g(v)m(alue)h(should)g(b)q(e)g -(freed.)34 b(An)o(y)20 b(mo)q(di\014ed)i(directory)e(name)g(should)195 -1041 y(ha)o(v)o(e)14 b(a)g(trailing)i(slash.)k(The)15 -b(mo)q(di\014ed)h(v)m(alue)g(will)g(b)q(e)f(displa)o(y)o(ed)h(as)e -(part)g(of)h(the)f(completion,)195 1096 y(replacing)h(the)g(directory)f -(p)q(ortion)g(of)g(the)g(pathname)g(the)h(user)f(t)o(yp)q(ed.)20 -b(It)14 b(returns)g(an)g(in)o(teger)195 1151 y(that)i(should)h(b)q(e)g -(non-zero)g(if)g(the)g(function)g(mo)q(di\014es)h(its)e(directory)h -(argumen)o(t.)23 b(It)17 b(could)g(b)q(e)195 1205 y(used)f(to)e(expand) -i(sym)o(b)q(olic)h(links)f(or)f(shell)i(v)m(ariables)f(in)g(pathnames.) -1773 1323 y(V)l(ariable)-1861 b Fi(rl_compdisp_func_t)22 -b(*)d Fh(rl)p 652 1323 V 21 w(completion)p 947 1323 V -21 w(displa)n(y)p 1141 1323 V 22 w(matc)n(hes)p 1366 -1323 V 21 w(ho)r(ok)195 1377 y Fu(If)11 b(non-zero,)h(then)f(this)h(is) -f(the)g(address)g(of)g(a)g(function)g(to)g(call)h(when)f(completing)i -(a)d(w)o(ord)h(w)o(ould)195 1432 y(normally)h(displa)o(y)g(the)f(list)h -(of)f(p)q(ossible)h(matc)o(hes.)18 b(This)12 b(function)g(is)g(called)g -(in)g(lieu)h(of)e(Readline)195 1487 y(displa)o(ying)21 -b(the)d(list.)32 b(It)19 b(tak)o(es)f(three)h(argumen)o(ts:)26 -b(\()p Ft(char)14 b(**)p Fk(matc)o(hes)p Fu(,)19 b Ft(int)f -Fk(n)o(um)p 1688 1487 14 2 v 17 w(matc)o(hes)p Fu(,)195 -1542 y Ft(int)13 b Fk(max)p 368 1542 V 16 w(length)p -Fu(\))i(where)f Fk(matc)o(hes)h Fu(is)f(the)g(arra)o(y)f(of)g(matc)o -(hing)h(strings,)g Fk(n)o(um)p 1578 1542 V 16 w(matc)o(hes)i -Fu(is)e(the)195 1597 y(n)o(um)o(b)q(er)h(of)f(strings)h(in)h(that)e -(arra)o(y)l(,)f(and)i Fk(max)p 1012 1597 V 16 w(length)h -Fu(is)f(the)g(length)g(of)g(the)f(longest)h(string)g(in)195 -1651 y(that)e(arra)o(y)l(.)19 b(Readline)d(pro)o(vides)f(a)e(con)o(v)o -(enience)j(function,)f Ft(rl_display_match_list)p Fu(,)c(that)195 -1706 y(tak)o(es)17 b(care)g(of)g(doing)h(the)f(displa)o(y)i(to)d -(Readline's)k(output)d(stream.)26 b(That)16 b(function)j(ma)o(y)d(b)q -(e)195 1761 y(called)h(from)d(this)i(ho)q(ok.)75 1873 -y Fj(2.6.4)30 b(A)21 b(Short)f(Completion)g(Example)137 -1969 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 2024 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 2079 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: 43 45 -43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(43)195 149 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f -(application)f(which)h(demonstrates)g(how)g(to)h(use)f(the)267 -201 y(GNU)g(Readline)g(library.)46 b(This)24 b(application)e -(interactively)g(allows)h(users)267 253 y(to)g(manipulate)g(files)g -(and)g(their)g(modes.)h(*/)195 357 y(#include)f()195 -409 y(#include)g()195 461 y(#include)g()195 -513 y(#include)g()195 565 y(#include)g()195 -668 y(#include)g()195 720 y(#include)g -()195 824 y(extern)g(char)g(*xmalloc)g(\(\);)195 -928 y(/*)h(The)f(names)g(of)h(functions)e(that)i(actually)f(do)g(the)h -(manipulation.)e(*/)195 980 y(int)h(com_list)g(__P\(\(char)g(*\)\);)195 -1032 y(int)g(com_view)g(__P\(\(char)g(*\)\);)195 1083 -y(int)g(com_rename)g(__P\(\(char)g(*\)\);)195 1135 y(int)g(com_stat)g -(__P\(\(char)g(*\)\);)195 1187 y(int)g(com_pwd)g(__P\(\(char)g(*\)\);) -195 1239 y(int)g(com_delete)g(__P\(\(char)g(*\)\);)195 -1291 y(int)g(com_help)g(__P\(\(char)g(*\)\);)195 1343 -y(int)g(com_cd)g(__P\(\(char)g(*\)\);)195 1395 y(int)g(com_quit)g -(__P\(\(char)g(*\)\);)195 1499 y(/*)h(A)f(structure)g(which)g(contains) -g(information)f(on)i(the)f(commands)g(this)g(program)267 -1550 y(can)g(understand.)f(*/)195 1654 y(typedef)h(struct)g({)243 -1706 y(char)g(*name;)g(/*)h(User)f(printable)g(name)g(of)h(the)f -(function.)g(*/)243 1758 y(rl_icpfunc_t)f(*func;)h(/*)h(Function)e(to)i -(call)f(to)h(do)f(the)h(job.)f(*/)243 1810 y(char)g(*doc;)g(/*)h -(Documentation)e(for)h(this)h(function.)46 b(*/)195 1862 -y(})24 b(COMMAND;)195 1966 y(COMMAND)f(commands[])f(=)i({)243 -2017 y({)f("cd",)h(com_cd,)f("Change)f(to)i(directory)f(DIR")g(},)243 -2069 y({)g("delete",)g(com_delete,)f("Delete)h(FILE")h(},)243 -2121 y({)f("help",)g(com_help,)g("Display)g(this)g(text")g(},)243 -2173 y({)g("?",)h(com_help,)e("Synonym)h(for)h(`help'")f(},)243 -2225 y({)g("list",)g(com_list,)g("List)g(files)g(in)h(DIR")f(},)243 -2277 y({)g("ls",)h(com_list,)e("Synonym)h(for)g(`list'")g(},)243 -2329 y({)g("pwd",)g(com_pwd,)g("Print)g(the)h(current)f(working)g -(directory")f(},)243 2381 y({)h("quit",)g(com_quit,)g("Quit)g(using)g -(Fileman")g(},)243 2433 y({)g("rename",)g(com_rename,)f("Rename)h(FILE) -h(to)f(NEWNAME")g(},)243 2484 y({)g("stat",)g(com_stat,)g("Print)g(out) -g(statistics)g(on)h(FILE")f(},)243 2536 y({)g("view",)g(com_view,)g -("View)g(the)h(contents)e(of)i(FILE")f(},)243 2588 y({)g(\(char)h -(*\)NULL,)f(\(rl_icpfunc_t)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 -2640 y(};)p eop -%%Page: 44 46 -44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)195 -201 y Ft(/*)24 b(Forward)e(declarations.)h(*/)195 253 -y(char)g(*stripwhite)g(\(\);)195 305 y(COMMAND)g(*find_command)f(\(\);) -195 409 y(/*)i(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f(from)g -(argv[0].)g(*/)195 461 y(char)g(*progname;)195 565 y(/*)h(When)f -(non-zero,)g(this)g(means)g(the)g(user)h(is)f(done)h(using)f(this)g -(program.)g(*/)195 616 y(int)g(done;)195 720 y(char)g(*)195 -772 y(dupstr)g(\(s\))314 824 y(int)h(s;)195 876 y({)243 -928 y(char)f(*r;)243 1032 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h -(1\);)243 1083 y(strcpy)f(\(r,)g(s\);)243 1135 y(return)g(\(r\);)195 -1187 y(})195 1291 y(main)g(\(argc,)g(argv\))314 1343 -y(int)h(argc;)314 1395 y(char)g(**argv;)195 1447 y({)243 -1499 y(char)f(*line,)g(*s;)243 1602 y(progname)f(=)i(argv[0];)243 -1706 y(initialize_readline)d(\(\);)i(/*)h(Bind)f(our)h(completer.)e(*/) -243 1810 y(/*)h(Loop)h(reading)f(and)g(executing)g(lines)g(until)g(the) -g(user)h(quits.)f(*/)243 1862 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290 -1914 y({)338 1966 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338 -2069 y(if)i(\(!line\))386 2121 y(break;)338 2225 y(/*)g(Remove)f -(leading)g(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410 -2277 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h -(the)f(history)g(list)410 2329 y(and)g(execute)g(it.)h(*/)338 -2381 y(s)g(=)g(stripwhite)e(\(line\);)338 2484 y(if)i(\(*s\))386 -2536 y({)434 2588 y(add_history)e(\(s\);)434 2640 y(execute_line)g -(\(s\);)p eop -%%Page: 45 47 -45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(45)386 149 y Ft(})338 253 y(free)23 b(\(line\);)290 -305 y(})243 357 y(exit)g(\(0\);)195 409 y(})195 513 y(/*)h(Execute)e(a) -i(command)f(line.)g(*/)195 565 y(int)195 616 y(execute_line)f(\(line\)) -314 668 y(char)i(*line;)195 720 y({)243 772 y(register)e(int)i(i;)243 -824 y(COMMAND)f(*command;)243 876 y(char)g(*word;)243 -980 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 1032 -y(i)g(=)h(0;)243 1083 y(while)f(\(line[i])g(&&)g(whitespace)g -(\(line[i]\)\))290 1135 y(i++;)243 1187 y(word)g(=)h(line)f(+)h(i;)243 -1291 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290 -1343 y(i++;)243 1447 y(if)g(\(line[i]\))290 1499 y(line[i++])g(=)h -('\\0';)243 1602 y(command)f(=)g(find_command)g(\(word\);)243 -1706 y(if)g(\(!command\))290 1758 y({)338 1810 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338 -1862 y(return)g(\(-1\);)290 1914 y(})243 2017 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)243 2069 y(while)f(\(whitespace)f -(\(line[i]\)\))290 2121 y(i++;)243 2225 y(word)h(=)h(line)f(+)h(i;)243 -2329 y(/*)f(Call)h(the)f(function.)g(*/)243 2381 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)195 2433 y(})195 -2536 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g -(and)h(return)f(a)g(pointer)g(to)h(that)267 2588 y(command.)46 -b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f -(name.)g(*/)195 2640 y(COMMAND)g(*)p eop -%%Page: 46 48 -46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)195 -149 y Ft(find_command)22 b(\(name\))314 201 y(char)i(*name;)195 -253 y({)243 305 y(register)e(int)i(i;)243 409 y(for)f(\(i)h(=)f(0;)h -(commands[i].name;)e(i++\))290 461 y(if)i(\(strcmp)f(\(name,)g -(commands[i].name\))f(==)h(0\))338 513 y(return)g(\(&commands[i]\);)243 -616 y(return)g(\(\(COMMAND)f(*\)NULL\);)195 668 y(})195 -772 y(/*)i(Strip)f(whitespace)f(from)i(the)f(start)g(and)h(end)f(of)h -(STRING.)46 b(Return)24 b(a)f(pointer)267 824 y(into)g(STRING.)g(*/)195 -876 y(char)g(*)195 928 y(stripwhite)f(\(string\))314 -980 y(char)i(*string;)195 1032 y({)243 1083 y(register)e(char)i(*s,)f -(*t;)243 1187 y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\)) -290 1239 y(;)243 1343 y(if)g(\(*s)h(==)f(0\))290 1395 -y(return)g(\(s\);)243 1499 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;) -243 1550 y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290 -1602 y(t--;)243 1654 y(*++t)h(=)h('\\0';)243 1758 y(return)f(s;)195 -1810 y(})195 1914 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 1966 y(/*)1575 -b(*/)195 2017 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)195 2069 y(/*)1575 b(*/)195 2121 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)195 2225 y(char)i(*command_generator)f -(__P\(\(const)g(char)i(*,)f(int\)\);)195 2277 y(char)g -(**fileman_completion)e(__P\(\(const)i(char)g(*,)h(int,)f(int\)\);)195 -2381 y(/*)h(Tell)f(the)g(GNU)h(Readline)f(library)f(how)i(to)g -(complete.)46 b(We)24 b(want)f(to)h(try)f(to)267 2433 -y(complete)f(on)i(command)f(names)g(if)h(this)f(is)h(the)f(first)g -(word)g(in)h(the)g(line,)f(or)267 2484 y(on)g(filenames)g(if)g(not.)h -(*/)195 2536 y(initialize_readline)d(\(\))195 2588 y({)243 -2640 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h(~/.inputrc)e -(file.)h(*/)p eop -%%Page: 47 49 -47 48 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(47)243 149 y Ft(rl_readline_name)21 b(=)j("FileMan";) -243 253 y(/*)f(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack)f -(first.)g(*/)243 305 y(rl_attempted_completion_)o(functio)o(n)e(=)j -(fileman_completion;)195 357 y(})195 461 y(/*)g(Attempt)e(to)i -(complete)f(on)g(the)h(contents)f(of)g(TEXT.)47 b(START)23 -b(and)h(END)267 513 y(bound)f(the)g(region)g(of)h(rl_line_buffer)e -(that)h(contains)g(the)g(word)h(to)267 565 y(complete.)46 -b(TEXT)23 b(is)h(the)f(word)h(to)f(complete.)47 b(We)23 -b(can)h(use)f(the)h(entire)267 616 y(contents)e(of)i(rl_line_buffer)e -(in)h(case)h(we)f(want)h(to)f(do)h(some)f(simple)267 -668 y(parsing.)46 b(Returnthe)23 b(array)g(of)h(matches,)e(or)i(NULL)f -(if)h(there)f(aren't)g(any.)g(*/)195 720 y(char)g(**)195 -772 y(fileman_completion)e(\(text,)i(start,)g(end\))314 -824 y(const)g(char)h(*text;)314 876 y(int)g(start,)f(end;)195 -928 y({)243 980 y(char)g(**matches;)243 1083 y(matches)g(=)g(\(char)h -(**\)NULL;)243 1187 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g -(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314 -1239 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h -(a)f(file)h(in)f(the)h(current)314 1291 y(directory.)f(*/)243 -1343 y(if)g(\(start)g(==)h(0\))290 1395 y(matches)f(=)h -(rl_completion_matches)d(\(text,)i(command_generator\);)243 -1499 y(return)g(\(matches\);)195 1550 y(})195 1654 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)267 1706 y(know)g(whether)g(to)g(start)h(from)f(scratch;)g -(without)g(any)g(state)267 1758 y(\(i.e.)g(STATE)g(==)h(0\),)f(then)g -(we)h(start)f(at)h(the)f(top)h(of)f(the)h(list.)f(*/)195 -1810 y(char)g(*)195 1862 y(command_generator)f(\(text,)h(state\))314 -1914 y(const)g(char)h(*text;)314 1966 y(int)g(state;)195 -2017 y({)243 2069 y(static)f(int)g(list_index,)g(len;)243 -2121 y(char)g(*name;)243 2225 y(/*)g(If)h(this)f(is)h(a)g(new)f(word)g -(to)h(complete,)f(initialize)f(now.)47 b(This)314 2277 -y(includes)23 b(saving)g(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)f -(and)314 2329 y(initializing)h(the)g(index)g(variable)g(to)h(0.)f(*/) -243 2381 y(if)g(\(!state\))290 2433 y({)338 2484 y(list_index)g(=)g(0;) -338 2536 y(len)h(=)f(strlen)g(\(text\);)290 2588 y(})p -eop -%%Page: 48 50 -48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)243 -149 y Ft(/*)23 b(Return)g(the)h(next)f(name)g(which)h(partially)e -(matches)h(from)g(the)314 201 y(command)g(list.)g(*/)243 -253 y(while)g(\(name)g(=)h(commands[list_index].name)o(\))290 -305 y({)338 357 y(list_index++;)338 461 y(if)g(\(strncmp)f(\(name,)g -(text,)g(len\))g(==)h(0\))386 513 y(return)f(\(dupstr\(name\)\);)290 -565 y(})243 668 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f -(NULL.)g(*/)243 720 y(return)g(\(\(char)g(*\)NULL\);)195 -772 y(})195 876 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 928 y(/*)1575 -b(*/)195 980 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 -1032 y(/*)1575 b(*/)195 1083 y(/*)24 b(***********************)o -(*******)o(********)o(*******)o(*******)o(********)o(****)d(*/)195 -1187 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47 -b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267 -1239 y(commands.)f(*/)195 1291 y(static)h(char)g(syscom[1024];)195 -1395 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195 -1447 y(com_list)g(\(arg\))314 1499 y(char)h(*arg;)195 -1550 y({)243 1602 y(if)f(\(!arg\))290 1654 y(arg)h(=)g("";)243 -1758 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243 -1810 y(return)g(\(system)g(\(syscom\)\);)195 1862 y(})195 -1966 y(com_view)g(\(arg\))314 2017 y(char)h(*arg;)195 -2069 y({)243 2121 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290 -2173 y(return)g(1;)243 2277 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)243 2329 y(return)g(\(system)g(\(syscom\)\);)195 -2381 y(})195 2484 y(com_rename)f(\(arg\))314 2536 y(char)i(*arg;)195 -2588 y({)243 2640 y(too_dangerous)e(\("rename"\);)p eop -%%Page: 49 51 -49 50 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(49)243 149 y Ft(return)23 b(\(1\);)195 -201 y(})195 305 y(com_stat)g(\(arg\))314 357 y(char)h(*arg;)195 -409 y({)243 461 y(struct)f(stat)g(finfo;)243 565 y(if)g -(\(!valid_argument)f(\("stat",)h(arg\)\))290 616 y(return)g(\(1\);)243 -720 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290 -772 y({)338 824 y(perror)g(\(arg\);)338 876 y(return)g(\(1\);)290 -928 y(})243 1032 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g -(arg\);)243 1135 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g -(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434 -1187 y(finfo.st_nlink,)434 1239 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("") -h(:)g("s",)434 1291 y(finfo.st_size,)434 1343 y(\(finfo.st_size)e(==)h -(1\))h(?)f("")h(:)g("s"\);)243 1395 y(printf)f(\("Inode)g(Last)g -(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243 -1447 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_atime\)\);)243 1499 y(printf)g(\(")95 b(Last)23 -b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243 -1550 y(return)g(\(0\);)195 1602 y(})195 1706 y(com_delete)f(\(arg\))314 -1758 y(char)i(*arg;)195 1810 y({)243 1862 y(too_dangerous)e -(\("delete"\);)243 1914 y(return)h(\(1\);)195 1966 y(})195 -2069 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f -(the)h(commands)f(if)g(ARG)h(is)267 2121 y(not)f(present.)g(*/)195 -2173 y(com_help)g(\(arg\))314 2225 y(char)h(*arg;)195 -2277 y({)243 2329 y(register)e(int)i(i;)243 2381 y(int)f(printed)g(=)h -(0;)243 2484 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -2536 y({)338 2588 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g -(commands[i].name\))f(==)i(0\)\))386 2640 y({)p eop -%%Page: 50 52 -50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)434 -149 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e(commands[i].name,)h -(commands[i].doc\);)434 201 y(printed++;)386 253 y(})290 -305 y(})243 409 y(if)h(\(!printed\))290 461 y({)338 513 -y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 b(Possibilties)22 -b(are:\\n",)h(arg\);)338 616 y(for)h(\(i)f(=)h(0;)g(commands[i].name;)d -(i++\))386 668 y({)434 720 y(/*)i(Print)g(in)h(six)f(columns.)g(*/)434 -772 y(if)g(\(printed)g(==)h(6\))481 824 y({)529 876 y(printed)f(=)h(0;) -529 928 y(printf)f(\("\\n"\);)481 980 y(})434 1083 y(printf)g -(\("\045s\\t",)f(commands[i].name\);)434 1135 y(printed++;)386 -1187 y(})338 1291 y(if)i(\(printed\))386 1343 y(printf)f(\("\\n"\);)290 -1395 y(})243 1447 y(return)g(\(0\);)195 1499 y(})195 -1602 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195 -1654 y(com_cd)f(\(arg\))314 1706 y(char)h(*arg;)195 1758 -y({)243 1810 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290 -1862 y({)338 1914 y(perror)g(\(arg\);)338 1966 y(return)g(1;)290 -2017 y(})243 2121 y(com_pwd)g(\(""\);)243 2173 y(return)g(\(0\);)195 -2225 y(})195 2329 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)195 2381 y(com_pwd)g(\(ignore\))314 -2433 y(char)h(*ignore;)195 2484 y({)243 2536 y(char)f(dir[1024],)g(*s;) -243 2640 y(s)g(=)h(getcwd)f(\(dir,)g(sizeof\(dir\))g(-)g(1\);)p -eop -%%Page: 51 53 -51 52 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(51)243 149 y Ft(if)23 b(\(s)h(==)f(0\))290 -201 y({)338 253 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g -(dir\);)338 305 y(return)g(1;)290 357 y(})243 461 y(printf)g -(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243 -513 y(return)g(0;)195 565 y(})195 668 y(/*)h(The)f(user)g(wishes)g(to)h -(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)267 -720 y(non-zero.)f(*/)195 772 y(com_quit)h(\(arg\))314 -824 y(char)h(*arg;)195 876 y({)243 928 y(done)f(=)h(1;)243 -980 y(return)f(\(0\);)195 1032 y(})195 1135 y(/*)h(Function)e(which)i -(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195 -1187 y(too_dangerous)f(\(caller\))314 1239 y(char)i(*caller;)195 -1291 y({)243 1343 y(fprintf)f(\(stderr,)457 1395 y("\045s:)h(Too)f -(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23 -b(it)h(yourself.\\n",)p 1987 1405 21 42 v 457 1447 a(caller\);)195 -1499 y(})195 1602 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 1654 y(an)g(error)g -(message)g(and)h(return)f(zero.)g(*/)195 1706 y(int)195 -1758 y(valid_argument)f(\(caller,)h(arg\))314 1810 y(char)h(*caller,)e -(*arg;)195 1862 y({)243 1914 y(if)h(\(!arg)g(||)h(!*arg\))290 -1966 y({)338 2017 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g -(required.\\n",)f(caller\);)338 2069 y(return)h(\(0\);)290 -2121 y(})243 2225 y(return)g(\(1\);)195 2277 y(})p eop -%%Page: 52 54 -52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: 53 55 -53 54 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(53)75 -149 y Fq(Concept)27 b(Index)75 321 y Fs(C)75 383 y Ff(command)14 -b(editing)e Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(1)75 513 y Fs(E)75 574 y Ff(editing)15 b(command)f(lines)f -Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)24 b Ff(1)75 704 y Fs(I)75 -765 y Ff(initiali)q(zati)q(on)16 b(\014le,)e(readline)t -Fe(.)8 b(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)17 b Ff(4)75 811 y(in)o(teraction,)e(readline)5 -b Fe(.)j(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(1)75 -942 y Fs(K)1012 321 y Ff(kill)d(ring)8 b Fe(.)f(.)g(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(3)1012 367 y(killin)q(g)16 b(text)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(2)1012 -497 y Fs(N)1012 559 y Ff(notation,)15 b(readline)7 b -Fe(.)h(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(1)1012 -689 y Fs(R)1012 750 y Ff(readline,)15 b(function)8 b -Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 b Ff(19)1012 -880 y Fs(Y)1012 942 y Ff(y)o(anking)15 b(text)t Fe(.)7 -b(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 -b Ff(2)p eop -%%Page: 54 56 -54 55 bop 75 -58 a Fu(54)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: 55 57 -55 56 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(55)75 149 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)p 79 307 21 3 v 75 369 a Fd(_rl_digit_)o(p)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(33)75 415 y Fd(_rl_digit_)o(va)o(lue)6 b Fe(.)t(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)20 b Ff(33)75 462 y Fd(_rl_lowerc)o(as)o(e_p)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(33)75 -508 y Fd(_rl_to_low)o(er)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)22 b Ff(33)75 554 y Fd(_rl_to_upp)o(er)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(33)75 600 y Fd(_rl_upperc)o(as)o(e_p)6 b Fe(.)t(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)20 b Ff(33)75 733 y Fs(A)75 794 y -Fd(abort)11 b(\(C-g\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)17 b Ff(17)75 841 y Fd(accept-lin)o(e)10 -b(\(Newline)f(or)j(Return\))6 b Fe(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)19 b Ff(12)75 973 y Fs(B)75 1035 y Fd(backward-c)o(ha)o(r)10 -b(\(C-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(12)75 -1081 y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))e -Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(14)75 1127 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10 -b(\(C-x)h(Rubout\))e Fe(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Ff(15)75 1174 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10 -b(\(M-)501 1172 y Fn(h)p 512 1146 73 2 v 512 1174 a Fm(DEL)p -512 1181 V 583 1172 a Fn(i)598 1174 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)23 b Ff(15)75 1220 y -Fd(backward-w)o(or)o(d)10 b(\(M-b\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 -b Ff(12)75 1266 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 -b(\(M-<\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)25 b Ff(13)75 1312 y Fd(beginning-)o(of)o(-li)o(ne)9 -b(\(C-a\))c Fe(.)t(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(12)75 1359 y(b)q(ell-st)o(yle)7 -b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)20 b Ff(4)75 1490 y Fs(C)75 1552 y Fd(call-last-)o(kb)o(d-m) -o(ac)o(ro)9 b(\(C-x)j(e\))5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(16)75 1598 y Fd(capitalize)o(-w)o(ord)9 -b(\(M-c\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(14)75 1644 y Fd(character-)o(se) -o(arc)o(h)10 b(\(C-]\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(17)75 -1691 y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 -b(\(M-C-]\))e Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(17)75 1737 y Fd(clear-scre)o(en)9 b(\(C-l\))g Fe(.)t(.)d(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)21 b Ff(12)75 1783 y(commen)o(t-b)q(egin)9 -b Fe(.)f(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)21 -b Ff(5)75 1829 y Fd(complete)10 b(\()265 1827 y Fn(h)p -276 1801 74 2 v 276 1829 a Fm(T)m(AB)p 276 1837 V 348 -1827 a Fn(i)363 1829 y Fd(\))f Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -22 b Ff(16)75 1875 y(completion-query-i)q(tems)t Fe(.)9 -b(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(5)75 1922 y(con)o(v)o(ert-meta)10 -b Fe(.)c(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 -b Ff(5)75 1968 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 -b(\(\))c Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)75 2014 y Fd(copy-forwa)o(rd)o -(-wo)o(rd)9 b(\(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(15)75 -2060 y Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(15)75 2193 y Fs(D)75 2255 y Fd(delete-cha)o(r)10 -b(\(C-d\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(14)75 -2301 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(16)75 2347 y Fd(delete-hor)o(iz)o(ont)o(al)o -(-sp)o(ace)9 b(\(\))i Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)25 b Ff(15)75 2393 y Fd(digit-argu)o(me)o(nt)9 -b(\()p Fc(M-0)p Fd(,)i Fc(M-1)p Fd(,)h(...)f Fc(M--)p -Fd(\))c Fe(.)e(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(15)75 -2439 y(disable-comple)q(tion)9 b Fe(.)g(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)21 b Ff(5)75 2486 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9 -b(\(M-a,)i(M-b,)g(M-)p Fb(x)p Fd(,)h(...)o(\))159 2531 -y Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(17)75 2578 y Fd(downcase-w)o(or)o(d)10 -b(\(M-l\))e Fe(.)t(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(14)75 -2624 y Fd(dump-funct)o(io)o(ns)9 b(\(\))g Fe(.)d(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)22 b Ff(17)75 2670 y Fd(dump-macro)o(s)10 b(\(\))g -Fe(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(18)1012 -307 y Fd(dump-variab)o(le)o(s)10 b(\(\))e Fe(.)e(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)23 b Ff(18)1012 465 y Fs(E)1012 537 y Ff(editing-mo)q(de)12 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)22 -b Ff(5)1012 587 y(enable-k)o(eypad)9 b Fe(.)g(.)d(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(5)1012 638 y Fd(end-kbd-mac)o(ro)9 -b(\(C-x)i(\)\))e Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 b Ff(16)1012 689 -y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(13)1012 740 y Fd(end-of-line)9 b(\(C-e\))e Fe(.)f(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)23 b Ff(12)1012 791 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma) -o(rk)9 b(\(C-x)j(C-x\))c Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(17)1012 842 y(expand-tilde)6 b Fe(.)j(.)d(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 b Ff(5)1012 999 y -Fs(F)1012 1070 y Fd(forward-bac)o(kw)o(ard)o(-d)o(ele)o(te)o(-ch)o(ar)9 -b(\(\))f Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(14)1012 1121 y Fd(forward-cha)o(r)10 b(\(C-f\))f -Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1172 y -Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 b(\(C-s\))e -Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Ff(13)1012 1223 y Fd(forward-wor)o(d)10 b(\(M-f\))f -Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(12)1012 1373 y -Fs(H)1012 1445 y Fd(history-sea)o(rc)o(h-b)o(ac)o(kwa)o(rd)9 -b(\(\))i Fe(.)c(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)25 b Ff(13)1012 1496 y Fd(history-sea)o(rc)o(h-f)o(or)o(war)o(d)10 -b(\(\))s Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)17 b Ff(13)1012 1546 y(horizon)o(tal-scrol)q(l-mo)r(de)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(5)1012 1697 y -Fs(I)1012 1768 y Ff(input-meta)8 b Fe(.)g(.)e(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(5)1012 1819 -y Fd(insert-comm)o(en)o(t)10 b(\(M-#\))d Fe(.)t(.)f(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(17)1012 1870 y Fd(insert-comp)o(le)o(tio)o(ns)9 -b(\(M-*\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)18 b Ff(16)1012 1921 y(isearc)o(h-terminators)t -Fe(.)8 b(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)16 b Ff(6)1012 -2071 y Fs(K)1012 2143 y Ff(k)o(eymap)9 b Fe(.)e(.)f(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(6)1012 2194 y Fd(kill-line)10 b(\(C-k\))f Fe(.)d(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)24 b Ff(14)1012 2245 y Fd(kill-region)9 -b(\(\))i Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(15)1012 2295 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))g -Fe(.)c(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(15)1012 2346 y -Fd(kill-word)10 b(\(M-d\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -24 b Ff(15)1012 2497 y Fs(M)1012 2568 y Ff(mark-mo)q(di\014ed-li)q(nes) -8 b Fe(.)h(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(6)1012 -2619 y Fd(menu-comple)o(te)9 b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)23 b Ff(16)1012 2670 y(meta-\015ag)t Fe(.)8 b(.)e(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 -b Ff(5)p eop -%%Page: 56 58 -56 57 bop 75 -58 a Fu(56)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fs(N)75 212 y Fd(next-histo)o(ry)9 b(\(C-n\))g -Fe(.)t(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(12)75 258 y Fd(non-increm)o(en)o -(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o(st)o(ory)9 -b(\(M-n\))159 304 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(13)75 -350 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)o(ear)o(ch)o(-hi)o -(st)o(ory)9 b(\(M-p\))159 396 y Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(13)75 521 y Fs(O)75 583 y Ff(output-meta)5 b Fe(.)i(.)f(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(6)75 -716 y Fs(P)75 778 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))h Fe(.)c(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)25 b Ff(16)75 824 y Fd(prefix-met)o(a)10 b(\()324 -822 y Fn(h)p 335 796 70 2 v 335 824 a Fm(ESC)p 335 832 -V 402 822 a Fn(i)417 824 y Fd(\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 -b Ff(17)75 870 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))c -Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(12)75 1004 y Fs(Q)75 1066 y Fd(quoted-ins)o(er)o -(t)10 b(\(C-q)h(or)h(C-v\))c Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(14)75 1199 y Fs(R)75 -1261 y Fd(re-read-in)o(it)o(-fi)o(le)9 b(\(C-x)i(C-r\))5 -b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 -b Ff(17)75 1307 y Fd(readline)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(19)75 -1354 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)18 b Ff(12)75 1400 y Fd(reverse-se)o(ar)o(ch-)o(hi)o -(sto)o(ry)9 b(\(C-r\))g Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)23 b Ff(13)75 1446 y Fd(revert-lin)o(e)10 -b(\(M-r\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(17)75 -1493 y Fd(rl_add_def)o(un)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)22 b Ff(26)75 1539 y Fd(rl_add_fun)o(ma)o(p_e)o(nt)o(ry) -t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75 1585 y Fd(rl_add_und)o(o)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(30)75 1632 y Fd(rl_alphabe)o(ti)o(c)9 b Fe(.)s(.)d(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)22 b Ff(33)75 1678 y Fd(rl_already)o(_p)o(rom)o -(pt)o(ed)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(23)75 -1724 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_f)o(unc)o(ti)o(on)t -Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(39)75 -1771 y Fd(rl_attempt)o(ed)o(_co)o(mp)o(let)o(ion)o(_o)o(ver)6 -b Fe(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(41)75 1817 y Fd(rl_basic_q)o(uo)o(te_)o(ch)o(ara)o(cte)o(rs)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -22 b Ff(40)75 1863 y Fd(rl_basic_w)o(or)o(d_b)o(re)o(ak_)o(cha)o(ra)o -(cte)o(rs)5 b Fe(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18 -b Ff(40)75 1910 y Fd(rl_begin_u)o(nd)o(o_g)o(ro)o(up)t -Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(29)75 1956 y Fd(rl_bind_ke)o(y)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(27)75 2002 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(27)75 2049 y -Fd(rl_binding)o(_k)o(eym)o(ap)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(24)75 2095 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7 -b Fe(.)s(.)g(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(34)75 2141 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(34)75 2188 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(34)75 2234 y Fd(rl_catch_s)o(ig)o(nal)o(s)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(36)75 -2281 y Fd(rl_catch_s)o(ig)o(win)o(ch)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)19 b Ff(36)75 2327 y Fd(rl_char_is)o(_q)o(uot)o(ed)o(_p)t -Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(40)75 2373 y Fd(rl_cleanup)o(_a)o -(fte)o(r_)o(sig)o(nal)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(36)75 2420 y -Fd(rl_clear_m)o(es)o(sag)o(e)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Ff(31)75 2466 y Fd(rl_clear_p)o(en)o(din)o(g_)o(inp)o(ut)8 -b Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)24 b Ff(32)75 2512 y Fd(rl_clear_s)o(ig)o(nal)o(s)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(37)1012 -149 y Fd(rl_complete)6 b Fe(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)24 b Ff(38)1012 196 y Fd(rl_complete)o(_i)o(nte)o(rn)o(al)s -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(38)1012 242 y Fd(rl_complete)o(r_)o -(quo)o(te)o(_ch)o(ar)o(act)o(ers)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)20 b Ff(40)1012 288 y Fd(rl_complete)o(r_)o(wor)o -(d_)o(bre)o(ak)o(_ch)o(ara)o(ct)o(ers)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.) -25 b Ff(40)1012 335 y Fd(rl_completi)o(on)o(_ap)o(pe)o(nd_)o(ch)o(ara)o -(cte)o(r)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(41)1012 381 y Fd(rl_completi)o(on)o(_di)o(sp)o(lay)o(_m)o(atc)o -(hes)o(_h)o(ook)8 b Fe(.)e(.)g(.)g(.)h(.)f(.)g(.)25 b -Ff(42)1012 427 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s -Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(38,)c(39)1012 -474 y Fd(rl_completi)o(on)o(_ma)o(tc)o(hes)8 b Fe(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(39)1012 520 y Fd(rl_completi)o(on)o(_qu)o(er)o(y_i)o(te)o(ms)9 -b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -23 b Ff(40)1012 566 y Fd(rl_completi)o(on)o(_ty)o(pe)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(41)1012 613 y -Fd(rl_copy_key)o(ma)o(p)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)21 b Ff(26)1012 659 y Fd(rl_copy_tex)o(t)6 b Fe(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(31)1012 705 y -Fd(rl_crlf)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(30)1012 752 y Fd(rl_delete_t)o(ex)o(t)8 -b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b -Ff(31)1012 798 y Fd(rl_deprep_t)o(er)o(m_f)o(un)o(cti)o(on)7 -b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)24 b Ff(24)1012 844 y Fd(rl_deprep_t)o(er)o(min)o(al)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(32)1012 891 y -Fd(rl_ding)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(33)1012 937 y Fd(rl_director)o(y_)o -(com)o(pl)o(eti)o(on)o(_ho)o(ok)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(42)1012 983 y Fd(rl_discard_)o(ke)o(yma) -o(p)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(27)1012 -1030 y Fd(rl_dispatch)o(in)o(g)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)21 b Ff(22)1012 1076 y Fd(rl_display_)o(ma)o(tch)o(_l)o -(ist)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)25 b Ff(33)1012 1122 y Fd(rl_do_undo)8 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)24 -b Ff(30)1012 1169 y Fd(rl_done)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(22)1012 -1215 y Fd(rl_editing_)o(mo)o(de)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)21 b Ff(26)1012 1261 y Fd(rl_end)5 b Fe(.)t(.)h(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Ff(22)1012 1308 y Fd(rl_end_undo)o(_g)o(rou)o(p)6 b -Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Ff(29)1012 1354 -y Fd(rl_erase_em)o(pt)o(y_l)o(in)o(e)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Ff(22)1012 1400 y Fd(rl_event_ho)o(ok)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(23)1012 1447 y Fd(rl_execute_)o(ne)o -(xt)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(32)1012 1493 y Fd(rl_executin)o(g_)o(key)o(ma)o(p)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(24)1012 1539 y Fd(rl_executin)o(g_) -o(mac)o(ro)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(24)1012 -1586 y Fd(rl_expand_p)o(ro)o(mpt)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)20 b Ff(31)1012 1632 y Fd(rl_explicit)o(_a)o(rg)7 -b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(25)1012 -1678 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fe(.)f(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(33)1012 1725 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o -(ire)o(d)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(41)1012 1771 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(fun)o -(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Ff(39)1012 1817 y Fd(rl_filename)o(_d)o(equ)o(ot)o(ing)o(_f)o(unc)o -(tio)o(n)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(40)1012 1864 y Fd(rl_filename)o(_q)o(uot)o(e_)o(cha)o(ra)o(cte)o -(rs)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(41)1012 1910 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_d)o(es)o(ire)o -(d)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Ff(41)1012 1956 y Fd(rl_filename)o(_q)o(uot)o(in)o(g_f)o(un)o(cti)o -(on)7 b Fe(.)s(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)20 -b Ff(40)1012 2003 y Fd(rl_forced_u)o(pd)o(ate)o(_d)o(isp)o(la)o(y)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)23 b Ff(30)1012 2049 y Fd(rl_free_lin)o(e_)o(sta)o(te)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(36)1012 2095 -y Fd(rl_free_und)o(o_)o(lis)o(t)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -19 b Ff(30)1012 2142 y Fd(rl_function)o(_d)o(ump)o(er)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(29)1012 2188 -y Fd(rl_function)o(_o)o(f_k)o(ey)o(seq)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25 -b Ff(28)1012 2234 y Fd(rl_funmap_n)o(am)o(es)7 b Fe(.)s(.)f(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)21 b Ff(29)1012 2281 y Fd(rl_generic_)o(bi)o(nd)7 -b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(28)1012 -2327 y Fd(rl_get_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)22 b Ff(27)1012 2373 y Fd(rl_get_keym)o(ap)o(_by)o(_n)o -(ame)8 b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)25 b Ff(27)1012 2420 y Fd(rl_get_keym)o(ap)o -(_na)o(me)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(27)1012 -2466 y Fd(rl_getc)t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(32)1012 2512 y -Fd(rl_getc_fun)o(ct)o(ion)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 -b Ff(24)p eop -%%Page: 57 59 -57 58 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(57)75 149 y Fd(rl_gnu_rea)o(dl)o(ine)o(_p)5 b Fe(.)s(.)i(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)19 b Ff(23)75 195 y Fd(rl_ignore_)o(co)o(mpl)o(et)o(ion)o -(_du)o(pl)o(ica)o(te)o(s)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)18 b Ff(41)75 241 y Fd(rl_ignore_)o(so)o(me_)o(co)o(mpl)o(eti)o(on)o -(s_f)o(un)o(cti)o(on)7 b Fe(.)g(.)f(.)g(.)g(.)g(.)24 -b Ff(42)75 286 y Fd(rl_inhibit)o(_c)o(omp)o(le)o(tio)o(n)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(42)75 332 y Fd(rl_initial)o(iz)o(e)9 -b Fe(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(33)75 378 y Fd(rl_insert_)o(co)o(mpl)o(et)o(ion)o(s)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(39)75 424 y Fd(rl_insert_)o(te)o(xt)8 -b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b -Ff(31)75 469 y Fd(rl_instrea)o(m)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)23 b Ff(23)75 515 y Fd(rl_invokin)o(g_)o(key)o -(se)o(qs)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(28)75 -561 y Fd(rl_invokin)o(g_)o(key)o(se)o(qs_)o(in_)o(ma)o(p)8 -b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(29)75 606 y Fd(rl_kill_te)o(xt)6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(31)75 652 y Fd(rl_last_fu)o(nc)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(23)75 698 y Fd(rl_library)o(_v)o(ers)o(io)o(n)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75 743 y Fd(rl_line_bu)o(ff) -o(er)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(22)75 789 y Fd(rl_list_fu)o(nm)o(ap_)o(na)o(mes)s -Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(29)75 835 y Fd(rl_make_ba)o(re)o(_ke)o -(ym)o(ap)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(26)75 -880 y Fd(rl_make_ke)o(ym)o(ap)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)21 b Ff(26)75 926 y Fd(rl_mark)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -17 b Ff(22)75 972 y Fd(rl_message)7 b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(31)75 1017 y Fd(rl_modifyi)o(ng) -6 b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(30)75 1063 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fe(.)s(.)i(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Ff(28)75 1109 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o -(ead)s Fe(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Ff(22)75 1154 y Fd(rl_numeric)o(_a) -o(rg)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(26)75 1200 y Fd(rl_on_new_)o(li)o(ne)8 b Fe(.)s(.)e(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(30)75 1246 y Fd(rl_on_new_)o(li)o(ne_)o -(wi)o(th_)o(pro)o(mp)o(t)8 b Fe(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)21 b Ff(30)75 1291 y Fd(rl_outstre)o(am)6 -b Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 -b Ff(23)75 1337 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fe(.)s(.)i(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)19 b Ff(28)75 1383 y Fd(rl_pending)o(_i)o(npu)o(t)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(22)75 -1428 y Fd(rl_point)s Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(22)75 1474 y Fd(rl_possibl)o(e_)o -(com)o(pl)o(eti)o(ons)7 b Fe(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(38)75 1520 y -Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(23)75 1566 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(24)75 1611 y Fd(rl_prep_te)o(rm)o(ina)o(l)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(32)75 -1657 y Fd(rl_prompt)8 b Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)24 b Ff(22)75 1703 y Fd(rl_read_in)o(it)o(_fi)o(le) -5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(28)75 -1748 y Fd(rl_read_ke)o(y)7 b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)23 b Ff(32)75 1794 y Fd(rl_readlin)o(e_)o(nam)o(e)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(23)75 -1840 y Fd(rl_readlin)o(e_)o(sta)o(te)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)19 b Ff(24)75 1885 y Fd(rl_redispl)o(ay)6 b Fe(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22 b Ff(30)75 1931 y -Fd(rl_redispl)o(ay)o(_fu)o(nc)o(tio)o(n)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(24)75 1977 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)25 b Ff(37)75 2022 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o -(te)t Fe(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(30)75 2068 -y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -19 b Ff(32)75 2114 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5 -b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(37)75 2159 y -Fd(rl_restore)o(_p)o(rom)o(pt)5 b Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(31)75 2205 y Fd(rl_save_pr)o(om)o(pt)8 b Fe(.)s(.)e(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)21 b Ff(31)75 2251 y Fd(rl_set_key)7 -b Fe(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Ff(28)1012 149 y Fd(rl_set_keym)o(ap)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(27)1012 195 y Fd(rl_set_scre)o(en)o -(_si)o(ze)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(37)1012 -242 y Fd(rl_set_sign)o(al)o(s)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)21 b Ff(37)1012 288 y Fd(rl_special_)o(pr)o(efi)o(xe)o(s)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(41)1012 334 y Fd(rl_startup_)o(ho)o -(ok)7 b Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(23)1012 380 y Fd(rl_stuff_ch)o(ar)8 b Fe(.)s(.)e(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(32)1012 426 y Fd(rl_terminal)o(_n)o -(ame)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Ff(23)1012 -472 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o(_bi)o(nd)o(ing)o(s)8 -b Fe(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)21 -b Ff(32)1012 518 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o(ma)o(p)7 -b Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)23 b Ff(28)1012 564 y Fd(rl_unbind_f)o(un)o(cti)o(on)o(_in)o(_m)o -(ap)9 b Fe(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)23 b Ff(28)1012 610 y Fd(rl_unbind_k)o(ey)8 b -Fe(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 -b Ff(27)1012 656 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(27)1012 702 y Fd(rl_username)o(_c)o -(omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fe(.)s(.)7 b(.)f(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)18 b Ff(39)1012 833 y Fs(S)1012 895 y -Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o(\))6 -b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(14)1012 941 y Fd(set-mark)10 b(\(C-@\))g Fe(.)c(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)25 b Ff(17)1012 987 y(sho)o(w-all-if-am)o(bigu)q -(ous)14 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(6)1012 -1033 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c Fe(.)d(.)i(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 -b Ff(16)1012 1157 y Fs(T)1012 1219 y Fd(tab-insert)9 -b(\(M-)1281 1217 y Fn(h)p 1292 1191 74 2 v 1292 1219 -a Fm(T)m(AB)p 1292 1226 V 1364 1217 a Fn(i)1379 1219 -y Fd(\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(14)1012 1265 -y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 -b Ff(17)1012 1311 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d -Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1357 y Fd(transpose-w)o(or)o(ds)9 -b(\(M-t\))d Fe(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(14)1012 1488 y -Fs(U)1012 1550 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c -Fe(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)1012 1596 y Fd(universal-a)o(rg)o -(ume)o(nt)9 b(\(\))d Fe(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(16)1012 -1642 y Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))5 b -Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)18 b Ff(15)1012 1688 y Fd(unix-word-r)o(ub)o(out)9 -b(\(C-w\))d Fe(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Ff(15)1012 1734 y Fd(upcase-word)9 -b(\(M-u\))e Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(14)1012 -1865 y Fs(V)1012 1927 y Ff(visible-stats)14 b Fe(.)6 -b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 -b Ff(6)1012 2051 y Fs(Y)1012 2113 y Fd(yank)12 b(\(C-y\))5 -b Fe(.)t(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(15)1012 2159 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c -Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(13)1012 2205 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d -Fe(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)h(.)20 b Ff(13)1012 2251 y Fd(yank-pop)10 -b(\(M-y\))g Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 -b Ff(15)p eop -%%Page: 58 60 -58 59 bop 75 -58 a Fu(58)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: -1 61 --1 60 bop 1862 -58 a Fu(i)75 149 y Fq(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fs(1)67 b(Command)22 b(Line)i(Editing)d -Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fs(1)224 389 y Fu(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fu(1)224 444 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fl(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fu(1)374 499 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(1)374 553 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fl(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fu(2)374 608 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 663 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fu(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(3)224 773 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fu(4)374 827 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fu(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fl(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fu(8)374 937 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fl(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fu(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)h(Commands) -6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fu(12)374 -1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1101 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fl(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1156 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fl(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(13)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fl(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(14)374 -1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fl(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fu(15)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fl(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fu(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fl(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fu(16)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fu(17)224 1485 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fu(18)75 1606 y Fs(2)67 b(Programming)23 -b(with)g(GNU)f(Readline)12 b Fa(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35 -b Fs(19)224 1675 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8 -b Fl(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(19)224 1729 y(2.2)45 -b(Custom)14 b(F)l(unctions)7 b Fl(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(20)374 -1784 y(2.2.1)44 b(Readline)17 b(T)o(yp)q(edefs)9 b Fl(.)g(.)e(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)g(.)f(.)h(.)24 b Fu(20)374 1839 y(2.2.2)44 -b(W)l(riting)16 b(a)e(New)i(F)l(unction)6 b Fl(.)i(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -21 b Fu(21)224 1894 y(2.3)45 b(Readline)17 b(V)l(ariables)f -Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g -(.)f(.)h(.)29 b Fu(22)224 1949 y(2.4)45 b(Readline)17 -b(Con)o(v)o(enience)g(F)l(unctions)7 b Fl(.)i(.)e(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -23 b Fu(26)374 2003 y(2.4.1)44 b(Naming)15 b(a)g(F)l(unction)e -Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Fu(26)374 -2058 y(2.4.2)44 b(Selecting)17 b(a)e(Keymap)6 b Fl(.)h(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)21 b Fu(26)374 2113 y(2.4.3)44 b(Binding)17 -b(Keys)5 b Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)20 b Fu(27)374 2168 y(2.4.4)44 b(Asso)q(ciating)16 -b(F)l(unction)g(Names)f(and)g(Bindings)8 b Fl(.)h(.)f(.)f(.)h(.)f(.)h -(.)23 b Fu(28)374 2222 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b -Fu(29)374 2277 y(2.4.6)44 b(Redispla)o(y)10 b Fl(.)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(30)374 2332 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7 -b Fl(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fu(31)374 2387 y(2.4.8)44 b(Character)14 b(Input)c -Fl(.)f(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)25 -b Fu(32)374 2442 y(2.4.9)44 b(T)l(erminal)16 b(Managemen)o(t)11 -b Fl(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(32)374 2496 y(2.4.10)43 -b(Utilit)o(y)17 b(F)l(unctions)c Fl(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)28 b Fu(33)374 2551 y(2.4.11)43 b(Alternate)16 -b(In)o(terface)f Fl(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(34)374 2606 y(2.4.12)43 b(An)16 b(Example)f Fl(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(34)224 2661 y(2.5)45 b(Readline)17 b(Signal)g(Handling)12 -b Fl(.)c(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fu(35)p eop -%%Page: -2 62 --2 61 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)224 -42 y(2.6)45 b(Custom)14 b(Completers)f Fl(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)28 b Fu(37)374 -96 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10 -b Fl(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(37)374 151 y(2.6.2)44 -b(Completion)16 b(F)l(unctions)6 b Fl(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -21 b Fu(38)374 206 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c -Fl(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(39)374 261 -y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b -Fl(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)20 b Fu(42)75 382 y Fs(Concept)i(Index)10 b Fa(.)i(.)e(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(53)75 517 -y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9 -b Fa(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)32 b Fs(55)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline/doc/readline_3.ps b/readline/doc/readline_3.ps deleted file mode 100644 --- a/readline/doc/readline_3.ps +++ /dev/null @@ -1,1227 +0,0 @@ -%!PS-Adobe-3.0 -%%Creator: groff version 1.15 -%%CreationDate: Mon Feb 5 11:30:24 2001 -%%DocumentNeededResources: font Times-Roman -%%+ font Times-Bold -%%+ font Times-Italic -%%+ font Courier -%%DocumentSuppliedResources: procset grops 1.15 0 -%%Pages: 13 -%%PageOrder: Ascend -%%Orientation: Portrait -%%EndComments -%%BeginProlog -%%BeginResource: procset grops 1.15 0 -/setpacking where{ -pop -currentpacking -true setpacking -}if -/grops 120 dict dup begin -/SC 32 def -/A/show load def -/B{0 SC 3 -1 roll widthshow}bind def -/C{0 exch ashow}bind def -/D{0 exch 0 SC 5 2 roll awidthshow}bind def -/E{0 rmoveto show}bind def -/F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def -/G{0 rmoveto 0 exch ashow}bind def -/H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/I{0 exch rmoveto show}bind def -/J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def -/K{0 exch rmoveto 0 exch ashow}bind def -/L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/M{rmoveto show}bind def -/N{rmoveto 0 SC 3 -1 roll widthshow}bind def -/O{rmoveto 0 exch ashow}bind def -/P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/Q{moveto show}bind def -/R{moveto 0 SC 3 -1 roll widthshow}bind def -/S{moveto 0 exch ashow}bind def -/T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def -/SF{ -findfont exch -[exch dup 0 exch 0 exch neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/MF{ -findfont -[5 2 roll -0 3 1 roll -neg 0 0]makefont -dup setfont -[exch/setfont cvx]cvx bind def -}bind def -/level0 0 def -/RES 0 def -/PL 0 def -/LS 0 def -/MANUAL{ -statusdict begin/manualfeed true store end -}bind def -/PLG{ -gsave newpath clippath pathbbox grestore -exch pop add exch pop -}bind def -/BP{ -/level0 save def -1 setlinecap -1 setlinejoin -72 RES div dup scale -LS{ -90 rotate -}{ -0 PL translate -}ifelse -1 -1 scale -}bind def -/EP{ -level0 restore -showpage -}bind def -/DA{ -newpath arcn stroke -}bind def -/SN{ -transform -.25 sub exch .25 sub exch -round .25 add exch round .25 add exch -itransform -}bind def -/DL{ -SN -moveto -SN -lineto stroke -}bind def -/DC{ -newpath 0 360 arc closepath -}bind def -/TM matrix def -/DE{ -TM currentmatrix pop -translate scale newpath 0 0 .5 0 360 arc closepath -TM setmatrix -}bind def -/RC/rcurveto load def -/RL/rlineto load def -/ST/stroke load def -/MT/moveto load def -/CL/closepath load def -/FL{ -currentgray exch setgray fill setgray -}bind def -/BL/fill load def -/LW/setlinewidth load def -/RE{ -findfont -dup maxlength 1 index/FontName known not{1 add}if dict begin -{ -1 index/FID ne{def}{pop pop}ifelse -}forall -/Encoding exch def -dup/FontName exch def -currentdict end definefont pop -}bind def -/DEFS 0 def -/EBEGIN{ -moveto -DEFS begin -}bind def -/EEND/end load def -/CNT 0 def -/level1 0 def -/PBEGIN{ -/level1 save def -translate -div 3 1 roll div exch scale -neg exch neg exch translate -0 setgray -0 setlinecap -1 setlinewidth -0 setlinejoin -10 setmiterlimit -[]0 setdash -/setstrokeadjust where{ -pop -false setstrokeadjust -}if -/setoverprint where{ -pop -false setoverprint -}if -newpath -/CNT countdictstack def -userdict begin -/showpage{}def -}bind def -/PEND{ -clear -countdictstack CNT sub{end}repeat -level1 restore -}bind def -end def -/setpacking where{ -pop -setpacking -}if -%%EndResource -%%IncludeResource: font Times-Roman -%%IncludeResource: font Times-Bold -%%IncludeResource: font Times-Italic -%%IncludeResource: font Courier -grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 -def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron -/scaron/zcaron/Ydieresis/trademark/quotesingle/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef -/.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent -/ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen -/period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon -/semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O -/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex -/underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y -/z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft -/guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl -/endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut -/dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash -/quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen -/brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft -/logicalnot/minus/registered/macron/degree/plusminus/twosuperior -/threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior -/ordmasculine/guilsinglright/onequarter/onehalf/threequarters -/questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE -/Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex -/Idieresis/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis -/multiply/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn -/germandbls/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla -/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis -/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash -/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis]def -/Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE -/Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE -%%EndProlog -%%Page: 1 1 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 9 -/Times-Bold@0 SF -.18(NA)72 84 S(ME).18 E F0 -(readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS) -72 112.8 Q/F2 10/Times-Bold@0 SF(#include )108 124.8 Q -(#include )-.18 E(#include )-.7 E/F3 10/Times-Italic@0 SF --.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0 -(\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT) -72 194.4 Q F0(Readline is Cop)108 206.4 Q -(yright \251 1989\2552001 by the Free Softw)-.1 E(are F)-.1 E -(oundation, Inc.)-.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S -(adline).18 E F0 .088 -(will read a line from the terminal and return it, using)2.588 F F2(pr) -2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr)2.587 -E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42 -(the empty string, no prompt is issued.)108 247.2 R .421 -(The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421 -(\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q -(The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15 -G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108 -276 S(adline).18 E F0(of)3.79 E 1.29 -(fers editing capabilities while the user is entering the line.)-.25 F -1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F -(mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G -(i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G -(ilable.).25 E .272 -(This manual page describes only the most basic use of)108 304.8 R F2 --.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272 -(uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25 -F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3 -(The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.) -2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.215 E F2 -.18(re)108 345.6 S -(adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.) --.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589 -F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283 -(while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2 -(NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF) -2.783 E F0 .283(is read with a non\255empty line, it)2.783 F -(is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.81(TA) --.36 G(TION)-.045 E F0 .181(An emacs-style notation is used to denote k) -108 398.4 R -.15(ey)-.1 G(strok).15 E 2.681(es. Control)-.1 F -.1(ke) -2.681 G .18(ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.68 -(,e)C .18(.g., C\255n means)-2.68 F 2.625(Control\255N. Similarly)108 -410.4 R(,)-.65 E F3(meta)2.625 E F0 -.1(ke)2.625 G .125 -(ys are denoted by M\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.625(,s)C 2.625 -(oM)-2.625 G .125(\255x means Meta\255X.)-2.625 F .126(\(On k)5.126 F --.15(ey)-.1 G .126(boards without a).15 F F3(meta)108 422.4 Q F0 -.1(ke) -3.309 G 2.109 -.65(y, M)-.05 H.65 E F3(x)A F0 .809(means ESC)3.309 F -F3(x)3.309 E F0 3.309(,i)C .809(.e., press the Escape k)-3.309 F 1.108 --.15(ey t)-.1 H .808(hen the).15 F F3(x)3.308 E F0 -.1(ke)3.308 G 4.608 --.65(y. T)-.05 H .808(his mak).65 F .808(es ESC the)-.1 F F3 .808 -(meta pr)3.308 F(e\214x)-.37 E F0(.)A .48(The combination M\255C\255)108 -434.4 R F3(x)A F0 .48(means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o) -C 2.98(rp)-2.98 G .48(ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48 -(hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E -(pressing the)108 446.4 Q F3(x)2.5 E F0 -.1(ke)2.5 G -.65(y.)-.05 G(\)) -.65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G 3.119 -(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w).27 G -.619(hich normally act as a repeat count.)-3.119 F(Sometimes,)5.619 E -(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti) -.4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 -(gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) -.15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 -(ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018 -(ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C -1.018(auses that command to act in a backw)-3.518 F 1.018 -(ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q -(vior with ar)-.2 E(guments de)-.18 E(viates from this are noted.)-.25 E -.811(When a command is described as)108 516 R F3(killing)3.311 E F0(te) -3.311 E .811(xt, the te)-.15 F .811(xt deleted is sa)-.15 F -.15(ve)-.2 -G 3.311(df).15 G .812(or possible future retrie)-3.311 F -.25(va)-.25 G -3.312(l\().25 G F3(yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029 -(killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G -2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E -.329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029 -(xt to be accumulated into one unit,)-.15 F .567(which can be yank)108 -540 R .567(ed all at once.)-.1 F .567(Commands which do not kill te) -5.567 F .567(xt separate the chunks of te)-.15 F .567(xt on the kill) --.15 F(ring.)108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-.855 E F0 -.091(Readline is customized by putting commands in an initialization \ -\214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591 -(\214le\). The)2.591 F .091(name of this \214le)2.591 F 1.442(is tak)108 -592.8 R 1.443(en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC) -3.943 E F0(en)3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F -1.443(that v)3.943 F 1.443(ariable is unset, the def)-.25 F 1.443 -(ault is)-.1 F F3(~/.inputr)108 604.8 Q(c)-.37 E F0 5.359(.W).31 G .359 -(hen a program which uses the readline library starts up, the init \214\ -le is read, and the k)-5.359 F .658 -.15(ey b)-.1 H(ind-).15 E 1.083 -(ings and v)108 616.8 R 1.083(ariables are set.)-.25 F 1.083 -(There are only a fe)6.083 F 3.583(wb)-.25 G 1.083(asic constructs allo) --3.583 F 1.084(wed in the readline init \214le.)-.25 F(Blank)6.084 E -.737(lines are ignored.)108 628.8 R .737(Lines be)5.737 F .737 -(ginning with a)-.15 F F2(#)3.237 E F0 .737(are comments.)3.237 F .737 -(Lines be)5.737 F .737(ginning with a)-.15 F F2($)3.237 E F0 .736 -(indicate conditional)3.236 F 2.614(constructs. Other)108 640.8 R .114 -(lines denote k)2.614 F .414 -.15(ey b)-.1 H .115(indings and v).15 F -.115(ariable settings.)-.25 F .115 -(Each program using this library may add)5.115 F(its o)108 652.8 Q -(wn commands and bindings.)-.25 E -.15(Fo)108 669.6 S 2.5(re).15 G -(xample, placing)-2.65 E(M\255Control\255u: uni)144 686.4 Q -.15(ve)-.25 -G(rsal\255ar).15 E(gument)-.18 E(or)108 698.4 Q(C\255Meta\255u: uni)144 -710.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(GNU Readline 4.2) -72 768 Q(2001 Feb 5)136.79 E(1)206.5 E EP -%%Page: 2 2 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R -(into the)108 84 Q/F1 10/Times-Italic@0 SF(inputr)2.5 E(c)-.37 E F0 -.1 -(wo)2.5 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G -(cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument) --.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795 -(wing symbolic character names are recognized while processing k)-.25 F -3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC) -5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,) -.28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5 -E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC) --.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5 -(TA)2.5 G(B).5 E F0(.).27 E .209 -(In addition to command names, readline allo)108 129.6 R .209(ws k)-.25 -F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 -(ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) --.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2 -10/Times-Bold@0 SF -.25(Ke)87 163.2 S 2.5(yB).25 G(indings)-2.5 E F0 -.382(The syntax for controlling k)108 175.2 R .682 -.15(ey b)-.1 H .382 -(indings in the).15 F F1(inputr)2.882 E(c)-.37 E F0 .382 -(\214le is simple.)2.882 F .382(All that is required is the name of the) -5.382 F .382(command or the te)108 187.2 R .383(xt of a macro and a k) --.15 F .683 -.15(ey s)-.1 H .383 -(equence to which it should be bound. The name may be speci-).15 F .853 -(\214ed in one of tw)108 199.2 R 3.353(ow)-.1 G .853 -(ays: as a symbolic k)-3.453 F 1.153 -.15(ey n)-.1 H .853 -(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or)3.353 E F1(Contr) -3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853(es, or as a k)-.15 F -.15 -(ey)-.1 G 3.145(sequence. When)108 211.2 R .645(using the form)3.145 F -F2 -.1(ke)3.145 G(yname).1 E F0(:)A F1(function-name).833 E F0(or)3.145 -E F1(macr)3.145 E(o)-.45 E F0(,)A F1 -.1(ke)3.145 G(yname)-.2 E F0 .645 -(is the name of a k)3.145 F .946 -.15(ey s)-.1 H(pelled).15 E -(out in English.)108 223.2 Q -.15(Fo)5 G 2.5(re).15 G(xample:)-2.65 E -(Control\255u: uni)144 247.2 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument) --.18 E(Meta\255Rubout: backw)144 259.2 Q(ard\255kill\255w)-.1 E(ord)-.1 -E(Control\255o: "> output")144 271.2 Q .229(In the abo)108 288 R .529 --.15(ve ex)-.15 H(ample,).15 E F1(C\255u)2.729 E F0 .229 -(is bound to the function)2.729 F F2(uni)2.729 E -.1(ve)-.1 G -(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)2.729 E F0 .228 -(is bound to the function)2.729 F F2(backward\255kill\255w)108 300 Q -(ord)-.1 E F0 3.837(,a)C(nd)-3.837 E F1(C\255o)3.837 E F0 1.337 -(is bound to run the macro e)3.837 F 1.337 -(xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 -312 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 -(into the line\).)2.5 E .056(In the second form,)108 328.8 R F2("k)2.556 -E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) -2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 -(fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 -(ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 -(denoting an entire k)108 340.8 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ -ay be speci\214ed by placing the sequence within double quotes.).15 F -(Some)6.284 E(GNU Emacs style k)108 352.8 Q .3 -.15(ey e)-.1 H -(scapes can be used, as in the follo).15 E(wing e)-.25 E(xample.)-.15 E -("\\C\255u": uni)144 376.8 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 -E("\\C\255x\\C\255r": re\255read\255init\255\214le)144 388.8 Q -("\\e[11~": "Function K)144 400.8 Q .3 -.15(ey 1)-.25 H(").15 E .238 -(In this e)108 417.6 R(xample,)-.15 E F1(C-u)2.738 E F0 .238(is ag)2.738 -F .238(ain bound to the function)-.05 F F2(uni)2.738 E -.1(ve)-.1 G -(rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .237(C-x C-r)5.238 F F0 .237 -(is bound to the function)2.737 F F2 -.18(re)108 429.6 S.18 E -(ead\255init\255\214le)-.18 E F0 3.224(,a)C(nd)-3.224 E F1 .724 -(ESC [ 1 1 ~)3.224 F F0 .724(is bound to insert the te)3.224 F(xt)-.15 E -F3 .725(Function Key 1)3.225 F F0 5.725(.T)C .725(he full set of GNU) --5.725 F(Emacs style escape sequences is)108 441.6 Q F2<5c43ad>144 453.6 -Q F0(control pre\214x)20.3 E F2<5c4dad>144 465.6 Q F0(meta pre\214x) -18.08 E F2(\\e)144 477.6 Q F0(an escape character)28.78 E F2(\\\\)144 -489.6 Q F0(backslash)30.44 E F2(\\")144 501.6 Q F0 -(literal ", a double quote)27.67 E F2(\\')144 513.6 Q F0 -(literal ', a single quote)29.89 E(In addition to the GNU Emacs style e\ -scape sequences, a second set of backslash escapes is a)108 530.4 Q -.25 -(va)-.2 G(ilable:).25 E F2(\\a)144 542.4 Q F0(alert \(bell\))28.22 E F2 -(\\b)144 554.4 Q F0(backspace)27.66 E F2(\\d)144 566.4 Q F0(delete)27.66 -E F2(\\f)144 578.4 Q F0(form feed)29.89 E F2(\\n)144 590.4 Q F0(ne)27.66 -E(wline)-.25 E F2(\\r)144 602.4 Q F0(carriage return)28.78 E F2(\\t)144 -614.4 Q F0(horizontal tab)29.89 E F2(\\v)144 626.4 Q F0 -.15(ve)28.22 G -(rtical tab).15 E F2(\\)144 638.4 Q F1(nnn)A F0 -(the character whose ASCII code is the octal v)18.22 E(alue)-.25 E F1 -(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 650.4 Q F1(nnn)A -F0(the character whose ASCII code is the he)13.22 E(xadecimal v)-.15 E -(alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E .74 -(When entering the te)108 667.2 R .74(xt of a macro, single or double q\ -uotes should be used to indicate a macro de\214nition.)-.15 F .089 -(Unquoted te)108 679.2 R .089(xt is assumed to be a function name.)-.15 -F .09(In the macro body)5.089 F 2.59(,t)-.65 G .09 -(he backslash escapes described abo)-2.59 F -.15(ve)-.15 G(are e)108 -691.2 Q 2.5(xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G -(ther character in the macro te)-2.5 E(xt, including " and '.)-.15 E F2 -(Bash)108 708 Q F0(allo)2.93 E .43(ws the current readline k)-.25 F .73 --.15(ey b)-.1 H .429(indings to be displayed or modi\214ed with the).15 -F F2(bind)2.929 E F0 -.2(bu)2.929 G .429(iltin command.).2 F 2.515 -(The editing mode may be switched during interacti)108 720 R 2.815 -.15 -(ve u)-.25 H 2.515(se by using the).15 F F25.015 E F0 2.516 -(option to the)5.016 F F2(set)5.016 E F0 -.2(bu)5.016 G(iltin).2 E -(GNU Readline 4.2)72 768 Q(2001 Feb 5)136.79 E(2)206.5 E EP -%%Page: 3 3 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 3.12 -(command. Other)108 84 R .62(programs using this library pro)3.12 F .619 -(vide similar mechanisms.)-.15 F(The)5.619 E/F1 10/Times-Italic@0 SF -(inputr)3.119 E(c)-.37 E F0 .619(\214le may be edited)3.119 F -(and re-read if a program does not pro)108 96 Q(vide an)-.15 E 2.5(yo) --.15 G(ther means to incorporate ne)-2.5 E 2.5(wb)-.25 G(indings.)-2.5 E -/F2 10/Times-Bold@0 SF -.92(Va)87 112.8 S(riables).92 E F0 .043 -(Readline has v)108 124.8 R .044 -(ariables that can be used to further customize its beha)-.25 F(vior)-.2 -E 5.044(.A)-.55 G -.25(va)-2.5 G .044(riable may be set in the).25 F F1 -(inpu-)2.544 E(tr)108 136.8 Q(c)-.37 E F0 -(\214le with a statement of the form)2.5 E F2(set)144 153.6 Q F1 -(variable\255name value)2.5 E F0 .807(Except where noted, readline v)108 -170.4 R .807(ariables can tak)-.25 F 3.307(et)-.1 G .807(he v)-3.307 F -(alues)-.25 E F2(On)3.307 E F0(or)3.307 E F2(Off)3.307 E F0 .807 -(\(without re)3.307 F -.05(ga)-.15 G .807(rd to case\).).05 F .807 -(The v)5.807 F(ari-)-.25 E(ables and their def)108 182.4 Q(ault v)-.1 E -(alues are:)-.25 E F2(bell\255style \(audible\))108 199.2 Q F0 .01 -(Controls what happens when readline w)144 211.2 R .011 -(ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F2(none) -2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E -.94(rings the bell.)144 223.2 R .94(If set to)5.94 F F2(visible)3.44 E -F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25 -(va)-.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F2(audible)3.44 E F0 -(,)A(readline attempts to ring the terminal')144 235.2 Q 2.5(sb)-.55 G -(ell.)-2.5 E F2(comment\255begin \(`)108 247.2 Q(`#')-.63 E('\))-.63 E -F0 .062(The string that is inserted in)144 259.2 R F2(vi)2.562 E F0 .062 -(mode when the)2.562 F F2(insert\255comment)2.562 E F0 .062 -(command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562 -E(mand is bound to)144 271.2 Q F2(M\255#)2.5 E F0(in emacs mode and to) -2.5 E F2(#)2.5 E F0(in vi command mode.)2.5 E F2(completion\255ignor)108 -283.2 Q(e\255case \(Off\))-.18 E F0(If set to)144 295.2 Q F2(On)2.5 E F0 -2.5(,r)C(eadline performs \214lename matching and completion in a case\ -\255insensiti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F2 -(completion\255query\255items \(100\))108 307.2 Q F0 .53 -(This determines when the user is queried about vie)144 319.2 R .529 -(wing the number of possible completions gen-)-.25 F .56(erated by the) -144 331.2 R F2(possible\255completions)3.06 E F0 3.06(command. It)3.06 F -.561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) --.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 343.2 R -.783(If the number of possible completions is greater than or equal to \ -the v)5.783 F .782(alue of this)-.25 F -.25(va)144 355.2 S .237 -(riable, the user is ask).25 F .237(ed whether or not he wishes to vie) --.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G -.237(re simply listed)-2.737 F(on the terminal.)144 367.2 Q F2(con)108 -379.2 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to)144 391.2 -R F2(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F -.15(ve)-.4 -G .613(rt characters with the eighth bit set to an ASCII k).15 F .912 --.15(ey s)-.1 H .612(equence by).15 F 1.315(stripping the eighth bit an\ -d pre\214xing it with an escape character \(in ef)144 403.2 R 1.316 -(fect, using escape as the)-.25 F F1(meta pr)144 415.2 Q(e\214x)-.37 E -F0(\).)A F2(disable\255completion \(Off\))108 427.2 Q F0 .038(If set to) -144 439.2 R F2(On)2.538 E F0 2.538(,r)C .038(eadline will inhibit w) --2.538 F .038(ord completion.)-.1 F .038 -(Completion characters will be inserted into the)5.038 F(line as if the) -144 451.2 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F2(self-insert)2.5 E -F0(.)A F2(editing\255mode \(emacs\))108 463.2 Q F0 .215 -(Controls whether readline be)144 475.2 R .215(gins with a set of k)-.15 -F .515 -.15(ey b)-.1 H .216(indings similar to emacs or vi.).15 F F2 -(editing\255mode)5.216 E F0(can be set to either)144 487.2 Q F2(emacs) -2.5 E F0(or)2.5 E F2(vi)2.5 E F0(.)A F2(enable\255k)108 499.2 Q -(eypad \(Off\))-.1 E F0 .893(When set to)144 511.2 R F2(On)3.393 E F0 -3.393(,r)C .893(eadline will try to enable the application k)-3.393 F --.15(ey)-.1 G .893(pad when it is called.).15 F .892(Some sys-)5.893 F -(tems need this to enable the arro)144 523.2 Q 2.5(wk)-.25 G -.15(ey) --2.6 G(s.).15 E F2(expand\255tilde \(Off\))108 535.2 Q F0(If set to)144 -547.2 Q F2(on)2.5 E F0 2.5(,t)C(ilde e)-2.5 E -(xpansion is performed when readline attempts w)-.15 E(ord completion.) --.1 E F2(horizontal\255scr)108 559.2 Q(oll\255mode \(Off\))-.18 E F0 -.448(When set to)144 571.2 R F2(On)2.948 E F0 2.948(,m)C(ak)-2.948 E -.448(es readline use a single line for display)-.1 F 2.948(,s)-.65 G -.449(crolling the input horizontally on a)-2.948 F 1.194(single screen \ -line when it becomes longer than the screen width rather than wrapping \ -to a ne)144 583.2 R(w)-.25 E(line.)144 595.2 Q F2(input\255meta \(Off\)) -108 607.2 Q F0 .367(If set to)144 619.2 R F2(On)2.867 E F0 2.867(,r)C -.367(eadline will enable eight-bit input \(that is, it will not clear t\ -he eighth bit in the char)-2.867 F(-)-.2 E .957(acters it reads\), re) -144 631.2 R -.05(ga)-.15 G .956 -(rdless of what the terminal claims it can support.).05 F .956(The name) -5.956 F F2(meta\255\215ag)3.456 E F0 .956(is a)3.456 F(synon)144 643.2 Q -(ym for this v)-.15 E(ariable.)-.25 E F2(isear)108 655.2 Q -(ch\255terminators \(`)-.18 E(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439 -(The string of characters that should terminate an incremental search w\ -ithout subsequently e)144 667.2 R -.15(xe)-.15 G(cut-).15 E .935 -(ing the character as a command.)144 679.2 R .935(If this v)5.935 F .935 -(ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934 -(alue, the characters)-3.684 F F1(ESC)3.434 E F0(and)144 691.2 Q F1 -(C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F2 -.1(ke) -108 703.2 S(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 -715.2 R -.15(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05 -(ga)-.15 G 4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F1 -2.324(emacs, emacs-standar)4.823 F(d,)-.37 E .809 -(emacs-meta, emacs-ctlx, vi, vi-mo)144 727.2 R(ve)-.1 E 3.308(,v)-.1 G -(i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F1(vi-insert)3.308 E F0(.) -.68 E F1(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .808(lent to) -.25 F F1(vi-command)3.308 E F0(;)A(GNU Readline 4.2)72 768 Q(2001 Feb 5) -136.79 E(3)206.5 E EP -%%Page: 4 4 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Italic@0 SF(emacs)144 84 Q F0 .697(is equi)3.196 F -.25(va)-.25 G -.697(lent to).25 F F1(emacs-standar)3.197 E(d)-.37 E F0 5.697(.T)C .697 -(he def)-5.697 F .697(ault v)-.1 F .697(alue is)-.25 F F1(emacs)3.197 E -F0 5.697(.T).27 G .697(he v)-5.697 F .697(alue of)-.25 F/F2 10 -/Times-Bold@0 SF(editing\255mode)3.197 E F0(also af)144 96 Q -(fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E F2 -(mark\255dir)108 108 Q(ectories \(On\))-.18 E F0(If set to)144 120 Q F2 -(On)2.5 E F0 2.5(,c)C(ompleted directory names ha)-2.5 E .3 -.15(ve a s) --.2 H(lash appended.).15 E F2(mark\255modi\214ed\255lines \(Off\))108 -132 Q F0(If set to)144 144 Q F2(On)2.5 E F0 2.5(,h)C -(istory lines that ha)-2.5 E .3 -.15(ve b)-.2 H -(een modi\214ed are displayed with a preceding asterisk \().15 E F2(*)A -F0(\).)A F2(output\255meta \(Off\))108 156 Q F0 .507(If set to)144 168 R -F2(On)3.007 E F0 3.007(,r)C .507(eadline will display characters with t\ -he eighth bit set directly rather than as a meta-)-3.007 F(pre\214x)144 -180 Q(ed escape sequence.)-.15 E F2 -(print\255completions\255horizontally \(Off\))108 192 Q F0 1.318 -(If set to)144 204 R F2(On)3.818 E F0 3.818(,r)C 1.319(eadline will dis\ -play completions with matches sorted horizontally in alphabetical)-3.818 -F(order)144 216 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25 -E F2(sho)108 228 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .478 -(This alters the def)144 240 R .478(ault beha)-.1 F .478 -(vior of the completion functions.)-.2 F .477(If set to)5.477 F F2(on) -2.977 E F0 2.977(,w)C .477(ords which ha)-3.077 F .777 -.15(ve m)-.2 H -(ore).15 E 1.264(than one possible completion cause the matches to be l\ -isted immediately instead of ringing the)144 252 R(bell.)144 264 Q F2 -(visible\255stats \(Off\))108 276 Q F0 .847(If set to)144 288 R F2(On) -3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 -(st)-.55 G .846(ype as reported by)-3.346 F F1(stat)3.346 E F0 .846 -(\(2\) is appended to the \214lename)B -(when listing possible completions.)144 300 Q F2(Conditional Constructs) -87 316.8 Q F0 .05(Readline implements a f)108 328.8 R .05(acility simil\ -ar in spirit to the conditional compilation features of the C preproces\ -sor)-.1 F .097(which allo)108 340.8 R .097(ws k)-.25 F .396 -.15(ey b) --.1 H .096(indings and v).15 F .096 -(ariable settings to be performed as the result of tests.)-.25 F .096 -(There are four parser)5.096 F(directi)108 352.8 Q -.15(ve)-.25 G 2.5 -(su).15 G(sed.)-2.5 E F2($if)108 369.6 Q F0(The)24.89 E F2($if)2.962 E -F0 .462(construct allo)2.962 F .463(ws bindings to be made based on the\ - editing mode, the terminal being used,)-.25 F .478 -(or the application using readline.)144 381.6 R .477(The te)5.477 F .477 -(xt of the test e)-.15 F .477 -(xtends to the end of the line; no characters)-.15 F -(are required to isolate it.)144 393.6 Q F2(mode)144 410.4 Q F0(The) -12.67 E F2(mode=)3.711 E F0 1.211(form of the)3.711 F F2($if)3.711 E F0 -(directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 -(sed to test whether readline is in emacs or vi)-3.711 F 3.065 -(mode. This)180 422.4 R .565(may be used in conjunction with the)3.065 F -F2 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) -3.065 F .029(set bindings in the)180 434.4 R F1(emacs-standar)2.529 E(d) --.37 E F0(and)2.529 E F1(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029 -(ymaps only if readline is starting out)-.05 F(in emacs mode.)180 446.4 -Q F2(term)144 463.2 Q F0(The)15.46 E F2(term=)3.197 E F0 .696 -(form may be used to include terminal-speci\214c k)3.197 F .996 -.15 -(ey b)-.1 H .696(indings, perhaps to bind).15 F .654(the k)180 475.2 R -.954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 -(sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 -(wo)3.154 G .654(rd on the right side of).1 F(the)180 487.2 Q F2(=)3.004 -E F0 .504(is tested ag)3.004 F .503(ainst the full name of the terminal\ - and the portion of the terminal name)-.05 F(before the \214rst)180 -499.2 Q F22.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F1(sun)2.5 E F0 -(to match both)2.5 E F1(sun)2.5 E F0(and)2.5 E F1(sun\255cmd)2.5 E F0 -2.5(,f).77 G(or instance.)-2.5 E F2(application)144 516 Q F0(The)180 528 -Q F2(application)3.003 E F0 .503 -(construct is used to include application-speci\214c settings.)3.003 F -.503(Each program)5.503 F .114(using the readline library sets the)180 -540 R F1 .114(application name)2.614 F F0 2.614(,a)C .114 -(nd an initialization \214le can test for a)-2.614 F .5(particular v)180 -552 R 3(alue. This)-.25 F .501(could be used to bind k)3 F .801 -.15 -(ey s)-.1 H .501(equences to functions useful for a spe-).15 F .397 -(ci\214c program.)180 564 R -.15(Fo)5.397 G 2.896(ri).15 G .396 -(nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 -(ey s)-.1 H .396(equence that quotes the).15 F(current or pre)180 576 Q -(vious w)-.25 E(ord in Bash:)-.1 E F2($if)180 600 Q F0(Bash)2.5 E 2.5 -(#Q)180 612 S(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E -("\\C-xq": "\\eb\\"\\ef\\"")180 624 Q F2($endif)180 636 Q($endif)108 -652.8 Q F0(This command, as seen in the pre)9.33 E(vious e)-.25 E -(xample, terminates an)-.15 E F2($if)2.5 E F0(command.)2.5 E F2($else) -108 669.6 Q F0(Commands in this branch of the)15.45 E F2($if)2.5 E F0 -(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe)-.15 G -(cuted if the test f).15 E(ails.)-.1 E F2($include)108 686.4 Q F0 .356 -(This directi)144 698.4 R .656 -.15(ve t)-.25 H(ak).15 E .356 -(es a single \214lename as an ar)-.1 F .357 -(gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) -144 710.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 --.15(ve w)-.25 H(ould read).05 E F1(/etc/inputr)2.5 E(c)-.37 E F0(:)A -(GNU Readline 4.2)72 768 Q(2001 Feb 5)136.79 E(4)206.5 E EP -%%Page: 5 5 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF($include)144 84 Q/F2 10/Times-Italic@0 SF(/etc/inputr) -5.833 E(c)-.37 E/F3 9/Times-Bold@0 SF(SEARCHING)72 100.8 Q F0 1.004 -(Readline pro)108 112.8 R 1.003(vides commands for searching through th\ -e command history for lines containing a speci\214ed)-.15 F 2.5 -(string. There)108 124.8 R(are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E -F2(incr)2.5 E(emental)-.37 E F0(and)2.5 E F2(non-incr)2.5 E(emental)-.37 -E F0(.).51 E .697(Incremental searches be)108 141.6 R .697 -(gin before the user has \214nished typing the search string.)-.15 F -.698(As each character of the)5.698 F .113 -(search string is typed, readline displays the ne)108 153.6 R .112 -(xt entry from the history matching the string typed so f)-.15 F(ar)-.1 -E 5.112(.A)-.55 G(n)-5.112 E .544 -(incremental search requires only as man)108 165.6 R 3.044(yc)-.15 G -.544(haracters as needed to \214nd the desired history entry)-3.044 F -5.545(.T)-.65 G 3.045(os)-6.345 G(earch)-3.045 E(backw)108 177.6 Q .181 -(ard in the history for a particular string, type)-.1 F F1(C\255r)2.681 -E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.68 E F0 .18(searches forw) -2.68 F .18(ard through the history)-.1 F(.)-.65 E .354 -(The characters present in the v)108 189.6 R .354(alue of the)-.25 F F1 -(isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354 -(riable are used to terminate an incremen-).25 F .6(tal search.)108 -201.6 R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F -.6(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6 -(characters will terminate an)3.1 F .122(incremental search.)108 213.6 R -F1(C\255G)5.122 E F0 .122 -(will abort an incremental search and restore the original line.)2.622 F -.123(When the search is)5.123 F(terminated, the history entry containin\ -g the search string becomes the current line.)108 225.6 Q 2.407 -.8 -(To \214)108 242.4 T .806 -(nd other matching entries in the history list, type).8 F F1(C\255s) -3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F -.806(This will search back-)5.806 F -.1(wa)108 254.4 S 1.308(rd or forw) -.1 F 1.309(ard in the history for the ne)-.1 F 1.309 -(xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A) --.55 G 1.609 -.15(ny o)-6.309 H 1.309(ther k).15 F -.15(ey)-.1 G .317 -(sequence bound to a readline command will terminate the search and e) -108 266.4 R -.15(xe)-.15 G .317(cute that command.).15 F -.15(Fo)5.317 G -2.817(ri).15 G(nstance,)-2.817 E 3.48(an)108 278.4 S -.25(ew)-3.48 G .98 -(line will terminate the search and accept the line, thereby e).25 F --.15(xe)-.15 G .981(cuting the command from the history).15 F 3.062 -(list. A)108 290.4 R(mo)3.062 E -.15(ve)-.15 G .562 -(ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562 -(he last line found the current line, and be)-3.062 F(gin)-.15 E -(editing.)108 302.4 Q .567(Non-incremental searches read the entire sea\ -rch string before starting to search for matching history lines.)108 -319.2 R(The search string may be typed by the user or be part of the co\ -ntents of the current line.)108 331.2 Q F3(EDITING COMMANDS)72 348 Q F0 -1.392(The follo)108 360 R 1.391 -(wing is a list of the names of the commands and the def)-.25 F 1.391 -(ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F -3.891(ya)-.15 G(re)-3.891 E 2.5(bound. Command)108 372 R -(names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H -(equence are unbound by def).15 E(ault.)-.1 E .054(In the follo)108 -388.8 R .054(wing descriptions,)-.25 F F2(point)2.554 E F0 .055 -(refers to the current cursor position, and)2.554 F F2(mark)2.555 E F0 -.055(refers to a cursor position)2.555 F(sa)108 400.8 Q -.15(ve)-.2 G -2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5 -(command. The)2.5 F(te)2.5 E -(xt between the point and mark is referred to as the)-.15 E F2 -.37(re) -2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 417.6 Q(or Mo)-.25 E(ving)-.1 -E(beginning\255of\255line \(C\255a\))108 429.6 Q F0(Mo)144 441.6 Q .3 --.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 -(end\255of\255line \(C\255e\))108 453.6 Q F0(Mo)144 465.6 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 -477.6 S(rward\255char \(C\255f\)).25 E F0(Mo)144 489.6 Q .3 -.15(ve f) --.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 -(backward\255char \(C\255b\))108 501.6 Q F0(Mo)144 513.6 Q .3 -.15(ve b) --.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 525.6 S(rward\255w) -.25 E(ord \(M\255f\))-.1 E F0(Mo)144 537.6 Q .823 -.15(ve f)-.15 H(orw) -.15 E .523(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W) --.1 F .522(ords are composed of alphanumeric characters \(let-)-.8 F -(ters and digits\).)144 549.6 Q F1(backward\255w)108 561.6 Q -(ord \(M\255b\))-.1 E F0(Mo)144 573.6 Q 1.71 -.15(ve b)-.15 H 1.41 -(ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 -(ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F -(characters \(letters and digits\).)144 585.6 Q F1(clear\255scr)108 -597.6 Q(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 609.6 R -.993(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 -G .993(th an ar).4 F .993(gument, refresh the)-.18 F -(current line without clearing the screen.)144 621.6 Q F1 -.18(re)108 -633.6 S(draw\255curr).18 E(ent\255line)-.18 E F0 -(Refresh the current line.)144 645.6 Q F1(Commands f)87 662.4 Q -(or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108 -674.4 Q(n\))-.15 E F0 .364(Accept the line re)144 686.4 R -.05(ga)-.15 G -.364(rdless of where the cursor is.).05 F .364 -(If this line is non-empty)5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G -.365(ay be added to the)-2.864 F .741 -(history list for future recall with)144 698.4 R F1(add_history\(\)) -3.241 E F0 5.741(.I)C 3.241(ft)-5.741 G .74 -(he line is a modi\214ed history line, the history)-3.241 F -(line is restored to its original state.)144 710.4 Q(GNU Readline 4.2)72 -768 Q(2001 Feb 5)136.79 E(5)206.5 E EP -%%Page: 6 6 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(pr)108 84 Q -.15(ev)-.18 G(ious\255history \(C\255p\)) -.15 E F0(Fetch the pre)144 96 Q(vious command from the history list, mo) --.25 E(ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 -108 Q F0(Fetch the ne)144 120 Q(xt command from the history list, mo) --.15 E(ving forw)-.15 E(ard in the list.)-.1 E F1 -(beginning\255of\255history \(M\255<\))108 132 Q F0(Mo)144 144 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.)-.65 E -F1(end\255of\255history \(M\255>\))108 156 Q F0(Mo)144 168 Q .3 -.15 -(ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 -G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108 -180 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.47 -(Search backw)144 192 R 1.471(ard starting at the current line and mo) --.1 F 1.471(ving `up' through the history as necessary)-.15 F(.)-.65 E -(This is an incremental search.)144 204 Q F1 -.25(fo)108 216 S -(rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.132 -(Search forw)144 228 R 1.132(ard starting at the current line and mo)-.1 -F 1.131(ving `do)-.15 F 1.131(wn' through the history as necessary)-.25 -F(.)-.65 E(This is an incremental search.)144 240 Q F1(non\255incr)108 -252 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E -(ch\255history \(M\255p\))-.18 E F0 .164(Search backw)144 264 R .164(ar\ -d through the history starting at the current line using a non-incremen\ -tal search for)-.1 F 2.5(as)144 276 S(tring supplied by the user)-2.5 E -(.)-.55 E F1(non\255incr)108 288 Q(emental\255f)-.18 E(orward\255sear) --.25 E(ch\255history \(M\255n\))-.18 E F0 1.354(Search forw)144 300 R -1.354(ard through the history using a non-incremental search for a stri\ -ng supplied by the)-.1 F(user)144 312 Q(.)-.55 E F1(history\255sear)108 -324 Q(ch\255f)-.18 E(orward)-.25 E F0 .248(Search forw)144 336 R .249(a\ -rd through the history for the string of characters between the start o\ -f the current line)-.1 F(and the current cursor position \(the)144 348 Q -/F2 10/Times-Italic@0 SF(point)2.5 E F0 2.5(\). This)B -(is a non-incremental search.)2.5 E F1(history\255sear)108 360 Q -(ch\255backward)-.18 E F0 .951(Search backw)144 372 R .951(ard through \ -the history for the string of characters between the start of the curre\ -nt)-.1 F(line and the point.)144 384 Q -(This is a non-incremental search.)5 E F1(yank\255nth\255ar)108 396 Q -2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622(Insert the \214rst ar)144 408 -R .622(gument to the pre)-.18 F .622 -(vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F -.622(vious line\))-.25 F .682(at point \(the current cursor position\).) -144 420 R -.4(Wi)5.682 G .682(th an ar).4 F(gument)-.18 E F2(n)3.182 E -F0 3.182(,i).24 G .682(nsert the)-3.182 F F2(n)3.182 E F0 .682(th w)B -.681(ord from the pre)-.1 F(vious)-.25 E .729(command \(the w)144 432 R -.729(ords in the pre)-.1 F .729(vious command be)-.25 F .729(gin with w) --.15 F .729(ord 0\).)-.1 F 3.23(An)5.73 G -2.25 -.15(eg a)-3.23 H(ti).15 -E 1.03 -.15(ve a)-.25 H -.18(rg).15 G .73(ument inserts).18 F(the)144 -444 Q F2(n)2.5 E F0(th w)A(ord from the end of the pre)-.1 E -(vious command.)-.25 E F1(yank\255last\255ar)108 456 Q 2.5(g\()-.1 G --1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.308 -(Insert the last ar)144 468 R 1.308(gument to the pre)-.18 F 1.307 -(vious command \(the last w)-.25 F 1.307(ord of the pre)-.1 F 1.307 -(vious history entry\).)-.25 F -.4(Wi)144 480 S .735(th an ar).4 F .735 -(gument, beha)-.18 F 1.035 -.15(ve ex)-.2 H .735(actly lik).15 F(e)-.1 E -F1(yank\255nth\255ar)3.235 E(g)-.1 E F0 5.736(.S)C(uccessi)-5.736 E -1.036 -.15(ve c)-.25 H .736(alls to).15 F F1(yank\255last\255ar)3.236 E -(g)-.1 E F0(mo)3.236 E -.15(ve)-.15 G -(back through the history list, inserting the last ar)144 492 Q -(gument of each line in turn.)-.18 E F1(Commands f)87 508.8 Q -(or Changing T)-.25 E(ext)-.92 E(delete\255char \(C\255d\))108 520.8 Q -F0 .487(Delete the character under the cursor)144 532.8 R 5.487(.I)-.55 -G 2.987(fp)-5.487 G .487(oint is at the be)-2.987 F .486 -(ginning of the line, there are no charac-)-.15 F -(ters in the line, and the last character typed w)144 544.8 Q -(as not bound to)-.1 E F1(delete\255char)2.5 E F0 2.5(,t)C(hen return) --2.5 E/F3 9/Times-Bold@0 SF(EOF)2.5 E/F4 9/Times-Roman@0 SF(.)A F1 -(backward\255delete\255char \(Rubout\))108 556.8 Q F0 .552 -(Delete the character behind the cursor)144 568.8 R 5.553(.W)-.55 G .553 -(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553(umeric ar)-3.053 F -.553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553(he deleted te).15 F -.553(xt on)-.15 F(the kill ring.)144 580.8 Q F1 -.25(fo)108 592.8 S -(rward\255backward\255delete\255char).25 E F0 .474 -(Delete the character under the cursor)144 604.8 R 2.974(,u)-.4 G .474 -(nless the cursor is at the end of the line, in which case the)-2.974 F -(character behind the cursor is deleted.)144 616.8 Q F1 -(quoted\255insert \(C\255q, C\255v\))108 628.8 Q F0 1.228(Add the ne)144 -640.8 R 1.228(xt character that you type to the line v)-.15 F 3.728 -(erbatim. This)-.15 F 1.228(is ho)3.728 F 3.729(wt)-.25 G 3.729(oi) --3.729 G 1.229(nsert characters lik)-3.729 F(e)-.1 E F1(C\255q)144 652.8 -Q F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F1(tab\255insert \(M-T)108 -664.8 Q(AB\))-.9 E F0(Insert a tab character)144 676.8 Q(.)-.55 E F1 -(self\255insert \(a, b, A, 1, !, ...\))108 688.8 Q F0 -(Insert the character typed.)144 700.8 Q(GNU Readline 4.2)72 768 Q -(2001 Feb 5)136.79 E(6)206.5 E EP -%%Page: 7 7 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(transpose\255chars \(C\255t\))108 84 Q F0 .322 -(Drag the character before point forw)144 96 R .321(ard o)-.1 F -.15(ve) --.15 G 2.821(rt).15 G .321(he character at point, mo)-2.821 F .321 -(ving point forw)-.15 F .321(ard as well.)-.1 F 1.03 -(If point is at the end of the line, then transpose the tw)144 108 R -3.531(oc)-.1 G 1.031(haracters before point.)-3.531 F(Ne)6.031 E -.05 -(ga)-.15 G(ti).05 E 1.331 -.15(ve a)-.25 H -.18(rg).15 G(u-).18 E -(ments don')144 120 Q 2.5(tw)-.18 G(ork.)-2.6 E F1(transpose\255w)108 -132 Q(ords \(M\255t\))-.1 E F0 .566(Drag the w)144 144 R .566 -(ord behind the cursor past the w)-.1 F .565(ord in front of the cursor) --.1 F 3.065(,m)-.4 G -.15(ov)-3.065 G .565(ing the cursor o).15 F -.15 -(ve)-.15 G 3.065(rt).15 G(hat)-3.065 E -.1(wo)144 156 S(rd as well.).1 E -F1(upcase\255w)108 168 Q(ord \(M\255u\))-.1 E F0 1.698 -(Uppercase the current \(or follo)144 180 R 1.698(wing\) w)-.25 F 4.198 -(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.999 -.15 -(ve a)-.25 H -.18(rg).15 G 1.699(ument, uppercase the pre).18 F(vious) --.25 E -.1(wo)144 192 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 -H(oint.).15 E F1(do)108 204 Q(wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0 -(Lo)144 216 Q 1.648(wercase the current \(or follo)-.25 F 1.648 -(wing\) w)-.25 F 4.148(ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G -(ti).05 E 1.947 -.15(ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F -1.647(wercase the pre)-.25 F(vious)-.25 E -.1(wo)144 228 S(rd, b).1 E -(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F1(capitalize\255w) -108 240 Q(ord \(M\255c\))-.1 E F0 1.974 -(Capitalize the current \(or follo)144 252 R 1.974(wing\) w)-.25 F 4.474 -(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 2.274 -.15 -(ve a)-.25 H -.18(rg).15 G 1.975(ument, capitalize the pre).18 F(vious) --.25 E -.1(wo)144 264 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 -H(oint.).15 E F1(Killing and Y)87 280.8 Q(anking)-.85 E -(kill\255line \(C\255k\))108 292.8 Q F0(Kill the te)144 304.8 Q -(xt from the current cursor position to the end of the line.)-.15 E F1 -(backward\255kill\255line \(C\255x Rubout\))108 316.8 Q F0(Kill backw) -144 328.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F1 -(unix\255line\255discard \(C\255u\))108 340.8 Q F0(Kill backw)144 352.8 -Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E -(The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) --2.5 G(he kill-ring.)-2.5 E F1(kill\255whole\255line)108 364.8 Q F0(Kil\ -l all characters on the current line, no matter where the cursor is.)144 -376.8 Q F1(kill\255w)108 388.8 Q(ord \(M\255d\))-.1 E F0 1.044 -(Kill from the cursor to the end of the current w)144 400.8 R 1.043 -(ord, or if between w)-.1 F 1.043(ords, to the end of the ne)-.1 F(xt) --.15 E -.1(wo)144 412.8 S 2.5(rd. W).1 F -(ord boundaries are the same as those used by)-.8 E F1 -.25(fo)2.5 G -(rward\255w).25 E(ord)-.1 E F0(.)A F1(backward\255kill\255w)108 424.8 Q -(ord \(M\255Rubout\))-.1 E F0 3.26(Kill the w)144 436.8 R 3.26 -(ord behind the cursor)-.1 F 8.26(.W)-.55 G 3.26 -(ord boundaries are the same as those used by)-9.06 F F1(back-)5.76 E -(ward\255w)144 448.8 Q(ord)-.1 E F0(.)A F1(unix\255w)108 460.8 Q -(ord\255rubout \(C\255w\))-.1 E F0 .482(Kill the w)144 472.8 R .482 -(ord behind the cursor)-.1 F 2.982(,u)-.4 G .482 -(sing white space as a w)-2.982 F .482(ord boundary)-.1 F 5.482(.T)-.65 -G .482(he w)-5.482 F .481(ord boundaries are)-.1 F(dif)144 484.8 Q -(ferent from)-.25 E F1(backward\255kill\255w)2.5 E(ord)-.1 E F0(.)A F1 -(delete\255horizontal\255space \(M\255\\\))108 496.8 Q F0 -(Delete all spaces and tabs around point.)144 508.8 Q F1(kill\255r)108 -520.8 Q(egion)-.18 E F0 1.13(Kill the te)144 532.8 R 1.13 -(xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0 -(\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F -1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144 -544.8 S(gion)-.03 E F0(.)A F1(copy\255r)108 556.8 Q(egion\255as\255kill) --.18 E F0(Cop)144 568.8 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E -(gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 -(copy\255backward\255w)108 580.8 Q(ord)-.1 E F0(Cop)144 592.8 Q 4.801 -(yt)-.1 G 2.301(he w)-4.801 F 2.301(ord before point to the kill b)-.1 F -(uf)-.2 E(fer)-.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.3 -(ord boundaries are the same as)-.1 F F1(back-)4.8 E(ward\255w)144 604.8 -Q(ord)-.1 E F0(.)A F1(copy\255f)108 616.8 Q(orward\255w)-.25 E(ord)-.1 E -F0(Cop)144 628.8 Q 4.507(yt)-.1 G 2.007(he w)-4.507 F 2.007(ord follo) --.1 F 2.007(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.008 -(.T)-.55 G 2.008(he w)-7.008 F 2.008(ord boundaries are the same as)-.1 -F F1 -.25(fo)4.508 G -.37(r-).25 G(ward\255w)144 640.8 Q(ord)-.1 E F0(.) -A F1(yank \(C\255y\))108 652.8 Q F0 -1(Ya)144 664.8 S -(nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at the cursor) --.25 E(.)-.55 E F1(yank\255pop \(M\255y\))108 676.8 Q F0 -(Rotate the kill ring, and yank the ne)144 688.8 Q 2.5(wt)-.25 G 2.5 -(op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E -F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 705.6 Q -(guments)-.1 E F0(GNU Readline 4.2)72 768 Q(2001 Feb 5)136.79 E(7)206.5 -E EP -%%Page: 8 8 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(digit\255ar)108 84 Q -(gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .642 -(Add this digit to the ar)144 96 R .641 -(gument already accumulating, or start a ne)-.18 F 3.141(wa)-.25 G -.18 -(rg)-3.141 G 3.141(ument. M\255\255).18 F .641(starts a ne)3.141 F(g-) --.15 E(ati)144 108 Q .3 -.15(ve a)-.25 H -.18(rg).15 G(ument.).18 E F1 -(uni)108 120 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .778 -(This is another w)144 132 R .779(ay to specify an ar)-.1 F 3.279 -(gument. If)-.18 F .779(this command is follo)3.279 F .779 -(wed by one or more digits,)-.25 F 1.376 -(optionally with a leading minus sign, those digits de\214ne the ar)144 -144 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 -156 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) -3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 -(ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) --.2 F(-)-.2 E .899(wise ignored.)144 168 R .898 -(As a special case, if this command is immediately follo)5.899 F .898 -(wed by a character that is)-.25 F .243 -(neither a digit or minus sign, the ar)144 180 R .243 -(gument count for the ne)-.18 F .243(xt command is multiplied by four) --.15 F 5.243(.T)-.55 G(he)-5.243 E(ar)144 192 Q .378 -(gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 -(cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F -.378(gument count)-.18 F(four)144 204 Q 2.5(,as)-.4 G(econd time mak) --2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 -(Completing)87 220.8 Q(complete \(T)108 232.8 Q(AB\))-.9 E F0 1.908 -(Attempt to perform completion on the te)144 244.8 R 1.908 -(xt before point.)-.15 F 1.909(The actual completion performed is)6.909 -F(application-speci\214c.)144 256.8 Q F1(Bash)5.518 E F0 3.018(,f)C .518 -(or instance, attempts completion treating the te)-3.018 F .517 -(xt as a v)-.15 F .517(ariable \(if the)-.25 F(te)144 268.8 Q .656 -(xt be)-.15 F .656(gins with)-.15 F F1($)3.156 E F0 .656 -(\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1 -(~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656 -(gins with)-.15 F F1(@)3.157 E F0 .657(\), or)B .93 -(command \(including aliases and functions\) in turn.)144 280.8 R .929 -(If none of these produces a match, \214lename)5.929 F 1.273 -(completion is attempted.)144 292.8 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773 -(nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273 -(ws completion of program functions and)-.25 F -.25(va)144 304.8 S(riab\ -les, and only attempts \214lename completion under certain circumstance\ -s.).25 E F1(possible\255completions \(M\255?\))108 316.8 Q F0 -(List the possible completions of the te)144 328.8 Q(xt before point.) --.15 E F1(insert\255completions \(M\255*\))108 340.8 Q F0 .783 -(Insert all completions of the te)144 352.8 R .783 -(xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H -.783(een generated by).15 F F1(possible\255com-)3.282 E(pletions)144 -364.8 Q F0(.)A F1(menu\255complete)108 376.8 Q F0 .928(Similar to)144 -388.8 R F1(complete)3.428 E F0 3.428(,b)C .929(ut replaces the w)-3.628 -F .929(ord to be completed with a single match from the list of)-.1 F -1.194(possible completions.)144 400.8 R 1.194(Repeated e)6.194 F -.15 -(xe)-.15 G 1.194(cution of).15 F F1(menu\255complete)3.694 E F0 1.193 -(steps through the list of possible)3.694 F .828 -(completions, inserting each match in turn.)144 412.8 R .828 -(At the end of the list of completions, the bell is rung)5.828 F 2.049 -(and the original te)144 424.8 R 2.049(xt is restored.)-.15 F 2.048 -(An ar)7.048 F 2.048(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)4.548 E -F0(mo)4.548 E -.15(ve)-.15 G(s).15 E F2(n)4.548 E F0 2.048 -(positions forw)4.548 F 2.048(ard in the list of)-.1 F .648 -(matches; a ne)144 436.8 R -.05(ga)-.15 G(ti).05 E .948 -.15(ve a)-.25 H --.18(rg).15 G .649(ument may be used to mo).18 F .949 -.15(ve b)-.15 H -(ackw).15 E .649(ard through the list.)-.1 F .649(This command is)5.649 -F(intended to be bound to)144 448.8 Q F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C -(ut is unbound by def)-2.7 E(ault.)-.1 E F1 -(delete\255char\255or\255list)108 460.8 Q F0 .374 -(Deletes the character under the cursor if not at the be)144 472.8 R -.373(ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char) -2.873 E F0(\).)A(If at the end of the line, beha)144 484.8 Q -.15(ve)-.2 -G 2.5(si).15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A -F1 -.25(Ke)87 501.6 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr) -108 513.6 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 525.6 Q -(gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15 -(ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 537.6 Q 2.5(o\() --.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 549.6 Q -(ving the characters typed into the current k)-.2 E -.15(ey)-.1 G -(board macro and store the de\214nition.).15 E F1 -(call\255last\255kbd\255macr)108 561.6 Q 2.5(o\()-.18 G(C\255x e\))-2.5 -E F0(Re-e)144 573.6 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey) --.1 G .999(board macro de\214ned, by making the characters in the macro\ - appear as if).15 F(typed at the k)144 585.6 Q -.15(ey)-.1 G(board.).15 -E F1(Miscellaneous)87 602.4 Q -.18(re)108 614.4 S.18 E -(ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.777 -(Read in the contents of the)144 626.4 R F2(inputr)4.277 E(c)-.37 E F0 -1.776(\214le, and incorporate an)4.276 F 4.276(yb)-.15 G 1.776 -(indings or v)-4.276 F 1.776(ariable assignments)-.25 F(found there.)144 -638.4 Q F1(abort \(C\255g\))108 650.4 Q F0 3.248 -(Abort the current editing command and ring the terminal')144 662.4 R -5.749(sb)-.55 G 3.249(ell \(subject to the setting of)-5.749 F F1 -(bell\255style)144 674.4 Q F0(\).)A F1(do\255upper)108 686.4 Q -(case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.) -C(..\))-2.5 E F0 1.756(If the meta\214ed character)144 698.4 R F2(x) -4.256 E F0 1.755(is lo)4.256 F 1.755 -(wercase, run the command that is bound to the corresponding)-.25 F -(uppercase character)144 710.4 Q(.)-.55 E(GNU Readline 4.2)72 768 Q -(2001 Feb 5)136.79 E(8)206.5 E EP -%%Page: 9 9 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R/F1 10 -/Times-Bold@0 SF(pr)108 84 Q(e\214x\255meta \(ESC\))-.18 E F0 -(Metafy the ne)144 96 Q(xt character typed.)-.15 E/F2 9/Times-Bold@0 SF -(ESC)5 E F1(f)2.25 E F0(is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1 -(Meta\255f)2.5 E F0(.)A F1(undo \(C\255_, C\255x C\255u\))108 108 Q F0 -(Incremental undo, separately remembered for each line.)144 120 Q F1 --2.29 -.18(re v)108 132 T(ert\255line \(M\255r\)).08 E F0 1.095 -(Undo all changes made to this line.)144 144 R 1.095(This is lik)6.095 F -3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E -F0 1.095(command enough times to)3.595 F -(return the line to its initial state.)144 156 Q F1 -(tilde\255expand \(M\255&\))108 168 Q F0(Perform tilde e)144 180 Q -(xpansion on the current w)-.15 E(ord.)-.1 E F1 -(set\255mark \(C\255@, M\255\))108 192 Q F0 .591 -(Set the mark to the current point.)144 204 R .591(If a numeric ar)5.591 -F .59(gument is supplied, the mark is set to that posi-)-.18 F(tion.)144 -216 Q F1(exchange\255point\255and\255mark \(C\255x C\255x\))108 228 Q F0 -(Sw)144 240 Q .282(ap the point with the mark.)-.1 F .283 -(The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G -2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) -144 252 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 -(character\255sear)108 264 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 276 S -.536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G 3.035(dt) -.15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 -(xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 -(ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) -144 288 Q(vious occurrences.)-.25 E F1(character\255sear)108 300 Q -(ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 312 S 1.043 -(haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G -3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 -(vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E --.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G -(count searches for subsequent occurrences.)144 324 Q F1 -(insert\255comment \(M\255#\))108 336 Q F0 .291(The v)144 348 R .291 -(alue of the readline)-.25 F F1(comment\255begin)2.791 E F0 -.25(va) -2.791 G .291(riable is inserted at the be).25 F .29 -(ginning of the current line,)-.15 F 1.277 -(and the line is accepted as if a ne)144 360 R 1.277 -(wline had been typed.)-.25 F 1.277(The def)6.277 F 1.277(ault v)-.1 F -1.277(alue of)-.25 F F1(comment\255begin)3.777 E F0(mak)144 372 Q -(es the current line a shell comment.)-.1 E F1(dump\255functions)108 384 -Q F0 .627(Print all of the functions and their k)144 396 R .927 -.15 -(ey b)-.1 H .626(indings to the readline output stream.).15 F .626 -(If a numeric ar)5.626 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 408 Q -(ay that it can be made part of an)-.1 E/F3 10/Times-Italic@0 SF(inputr) -2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 420 Q(ariables)-.1 E F0 -.283(Print all of the settable v)144 432 R .283(ariables and their v) --.25 F .283(alues to the readline output stream.)-.25 F .283 -(If a numeric ar)5.283 F(gu-)-.18 E -(ment is supplied, the output is formatted in such a w)144 444 Q -(ay that it can be made part of an)-.1 E F3(inputr)2.5 E(c)-.37 E F0 -(\214le.)2.5 E F1(dump\255macr)108 456 Q(os)-.18 E F0 .756 -(Print all of the readline k)144 468 R 1.056 -.15(ey s)-.1 H .756 -(equences bound to macros and the strings the).15 F 3.256(yo)-.15 G -3.256(uput. If)-3.256 F 3.255(an)3.255 G(umeric)-3.255 E(ar)144 480 Q -.528(gument is supplied, the output is formatted in such a w)-.18 F .528 -(ay that it can be made part of an)-.1 F F3(inputr)3.028 E(c)-.37 E F0 -(\214le.)144 492 Q F1(emacs\255editing\255mode \(C\255e\))108 504 Q F0 -(When in)144 516 Q F1(vi)2.5 E F0(editing mode, this causes a switch to) -2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1 -(vi\255editing\255mode \(M\255C\255j\))108 528 Q F0(When in)144 540 Q F1 -(emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E -F0(editing mode.)2.5 E F2(DEF)72 556.8 Q -.45(AU)-.81 G 1.656 -.828 -(LT K).45 H(EY BINDINGS).828 E F0 .065(The follo)108 568.8 R .065 -(wing is a list of the def)-.25 F .065(ault emacs and vi bindings.)-.1 F -.064(Characters with the eighth bit set are written as)5.064 F .615 -(M\255, and are referred to as)108 580.8 R F3(meta\214ed) -3.115 E F0 3.115(characters. The)3.115 F .616 -(printable ASCII characters not mentioned)3.116 F 1.116 -(in the list of emacs standard bindings are bound to the)108 592.8 R F1 -(self\255insert)3.615 E F0 1.115(function, which just inserts the gi) -3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108 -604.8 R .945(In vi insertion mode, all characters not speci\214cally me\ -ntioned are bound to)5.945 F F1(self\255insert)108 616.8 Q F0 5.359(.C)C -.359(haracters assigned to signal generation by)-5.359 F F3(stty)2.859 E -F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s) -.15 H .358(uch as C-Z or C-C,).4 F .187(retain that function.)108 628.8 -R .187(Upper and lo)5.187 F .188(wer case meta\214ed characters are bou\ -nd to the same function in the emacs)-.25 F .305(mode meta k)108 640.8 R --.15(ey)-.1 G 2.805(map. The).15 F .305(remaining characters are unboun\ -d, which causes readline to ring the bell \(subject)2.805 F -(to the setting of the)108 652.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5 -G(riable\).).25 E F1(Emacs Mode)87 669.6 Q F0(Emacs Standard bindings) -151.2 681.6 Q 2.5("C-@" set-mark)151.2 705.6 R 2.5("C-A" be)151.2 717.6 -R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 729.6 R(ard-char)-.1 E -(GNU Readline 4.2)72 768 Q(2001 Feb 5)136.79 E(9)206.5 E EP -%%Page: 10 10 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("C-D" delete-char)151.2 84 R 2.5("C-E" end-of-line)151.2 96 R 2.5 -("C-F" forw)151.2 108 R(ard-char)-.1 E 2.5("C-G" abort)151.2 120 R 2.5 -("C-H" backw)151.2 132 R(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 -144 R 2.5("C-J" accept-line)151.2 156 R 2.5("C-K" kill-line)151.2 168 R -2.5("C-L" clear)151.2 180 R(-screen)-.2 E 2.5("C-M" accept-line)151.2 -192 R 2.5("C-N" ne)151.2 204 R(xt-history)-.15 E 2.5("C-P" pre)151.2 216 -R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 228 R 2.5("C-R" re) -151.2 240 R -.15(ve)-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 -252 R(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 264 R 2.5 -("C-U" unix-line-discard)151.2 276 R 2.5("C-V" quoted-insert)151.2 288 R -2.5("C-W" unix-w)151.2 300 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 312 R -2.5("C-]" character)151.2 324 R(-search)-.2 E 2.5("C-_" undo)151.2 336 R -3.333("")151.2 348 S(to "/")-.833 E(self-insert)5 E 2.5("0" to)151.2 360 -R 2.5("9" self-insert)2.5 F 2.5(":" to)151.2 372 R 2.5("~" self-insert) -2.5 F 2.5("C-?" backw)151.2 384 R(ard-delete-char)-.1 E -(Emacs Meta bindings)151.2 400.8 Q 2.5("M-C-G" abort)151.2 424.8 R 2.5 -("M-C-H" backw)151.2 436.8 R(ard-kill-w)-.1 E(ord)-.1 E 2.5 -("M-C-I" tab-insert)151.2 448.8 R 2.5("M-C-J" vi-editing-mode)151.2 -460.8 R 2.5("M-C-M" vi-editing-mode)151.2 472.8 R 2.5("M-C-R" re)151.2 -484.8 R -.15(ve)-.25 G(rt-line).15 E 2.5("M-C-Y" yank-nth-ar)151.2 496.8 -R(g)-.18 E 2.5("M-C-[" complete)151.2 508.8 R 2.5("M-C-]" character) -151.2 520.8 R(-search-backw)-.2 E(ard)-.1 E 2.5("M-space" set-mark)151.2 -532.8 R 2.5("M-#" insert-comment)151.2 544.8 R 2.5("M-&" tilde-e)151.2 -556.8 R(xpand)-.15 E 2.5("M-*" insert-completions)151.2 568.8 R 2.5 -("M--" digit-ar)151.2 580.8 R(gument)-.18 E 2.5("M-." yank-last-ar)151.2 -592.8 R(g)-.18 E 2.5("M-0" digit-ar)151.2 604.8 R(gument)-.18 E 2.5 -("M-1" digit-ar)151.2 616.8 R(gument)-.18 E 2.5("M-2" digit-ar)151.2 -628.8 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 640.8 R(gument)-.18 E 2.5 -("M-4" digit-ar)151.2 652.8 R(gument)-.18 E 2.5("M-5" digit-ar)151.2 -664.8 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 676.8 R(gument)-.18 E 2.5 -("M-7" digit-ar)151.2 688.8 R(gument)-.18 E 2.5("M-8" digit-ar)151.2 -700.8 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 712.8 R(gument)-.18 E 2.5 -("M-<" be)151.2 724.8 R(ginning-of-history)-.15 E(GNU Readline 4.2)72 -768 Q(2001 Feb 5)136.79 E(10)201.5 E EP -%%Page: 11 11 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("M-=" possible-completions)151.2 84 R 2.5("M->" end-of-history)151.2 96 -R 2.5("M-?" possible-completions)151.2 108 R 2.5("M-B" backw)151.2 120 R -(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 132 R(ord)-.1 E 2.5 -("M-D" kill-w)151.2 144 R(ord)-.1 E 2.5("M-F" forw)151.2 156 R(ard-w)-.1 -E(ord)-.1 E 2.5("M-L" do)151.2 168 R(wncase-w)-.25 E(ord)-.1 E 2.5 -("M-N" non-incremental-forw)151.2 180 R(ard-search-history)-.1 E 2.5 -("M-P" non-incremental-re)151.2 192 R -.15(ve)-.25 G(rse-search-history) -.15 E 2.5("M-R" re)151.2 204 R -.15(ve)-.25 G(rt-line).15 E 2.5 -("M-T" transpose-w)151.2 216 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 228 R -(ord)-.1 E 2.5("M-Y" yank-pop)151.2 240 R 2.5 -("M-\\" delete-horizontal-space)151.2 252 R 2.5("M-~" tilde-e)151.2 264 -R(xpand)-.15 E 2.5("M-C-?" backw)151.2 276 R(ard-delete-w)-.1 E(ord)-.1 -E 2.5("M-_" yank-last-ar)151.2 288 R(g)-.18 E(Emacs Control-X bindings) -151.2 304.8 Q 2.5("C-XC-G" abort)151.2 328.8 R 2.5 -("C-XC-R" re-read-init-\214le)151.2 340.8 R 2.5("C-XC-U" undo)151.2 -352.8 R 2.5("C-XC-X" e)151.2 364.8 R(xchange-point-and-mark)-.15 E 2.5 -("C-X\(" start-kbd-macro)151.2 376.8 R 2.5("C-X\)" end-kbd-macro)151.2 -388.8 R 2.5("C-XE" call-last-kbd-macro)151.2 400.8 R 2.5("C-XC-?" backw) -151.2 412.8 R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF -(VI Mode bindings)87 441.6 Q F0(VI Insert Mode functions)151.2 453.6 Q -2.5("C-D" vi-eof-maybe)151.2 477.6 R 2.5("C-H" backw)151.2 489.6 R -(ard-delete-char)-.1 E 2.5("C-I" complete)151.2 501.6 R 2.5 -("C-J" accept-line)151.2 513.6 R 2.5("C-M" accept-line)151.2 525.6 R 2.5 -("C-R" re)151.2 537.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 -("C-S" forw)151.2 549.6 R(ard-search-history)-.1 E 2.5 -("C-T" transpose-chars)151.2 561.6 R 2.5("C-U" unix-line-discard)151.2 -573.6 R 2.5("C-V" quoted-insert)151.2 585.6 R 2.5("C-W" unix-w)151.2 -597.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 609.6 R 2.5("C-[" vi-mo) -151.2 621.6 R -.15(ve)-.15 G(ment-mode).15 E 2.5("C-_" undo)151.2 633.6 -R 3.333("")151.2 645.6 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw) -151.2 657.6 R(ard-delete-char)-.1 E(VI Command Mode functions)151.2 -674.4 Q 2.5("C-D" vi-eof-maybe)151.2 698.4 R 2.5 -("C-E" emacs-editing-mode)151.2 710.4 R 2.5("C-G" abort)151.2 722.4 R -(GNU Readline 4.2)72 768 Q(2001 Feb 5)136.79 E(11)201.5 E EP -%%Page: 12 12 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("C-H" backw)151.2 84 R(ard-char)-.1 E 2.5("C-J" accept-line)151.2 96 R -2.5("C-K" kill-line)151.2 108 R 2.5("C-L" clear)151.2 120 R(-screen)-.2 -E 2.5("C-M" accept-line)151.2 132 R 2.5("C-N" ne)151.2 144 R(xt-history) --.15 E 2.5("C-P" pre)151.2 156 R(vious-history)-.25 E 2.5 -("C-Q" quoted-insert)151.2 168 R 2.5("C-R" re)151.2 180 R -.15(ve)-.25 G -(rse-search-history).15 E 2.5("C-S" forw)151.2 192 R(ard-search-history) --.1 E 2.5("C-T" transpose-chars)151.2 204 R 2.5("C-U" unix-line-discard) -151.2 216 R 2.5("C-V" quoted-insert)151.2 228 R 2.5("C-W" unix-w)151.2 -240 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 252 R -4.166 3.333("" f) -151.2 264 T(orw)-3.333 E(ard-char)-.1 E 2.5("#" insert-comment)151.2 276 -R 2.5("$" end-of-line)151.2 288 R 2.5("%" vi-match)151.2 300 R 2.5 -("&" vi-tilde-e)151.2 312 R(xpand)-.15 E 2.5("*" vi-complete)151.2 324 R -2.5("+" ne)151.2 336 R(xt-history)-.15 E 2.5("," vi-char)151.2 348 R -(-search)-.2 E 2.5("-" pre)151.2 360 R(vious-history)-.25 E 2.5 -("." vi-redo)151.2 372 R 2.5("/" vi-search)151.2 384 R 2.5("0" be)151.2 -396 R(ginning-of-line)-.15 E("1" to "9")151.2 408 Q(vi-ar)5 E(g-digit) --.18 E 2.5(";" vi-char)151.2 420 R(-search)-.2 E 2.5("=" vi-complete) -151.2 432 R 2.5("?" vi-search)151.2 444 R 2.5("A" vi-append-eol)151.2 -456 R 2.5("B" vi-pre)151.2 468 R(v-w)-.25 E(ord)-.1 E 2.5 -("C" vi-change-to)151.2 480 R 2.5("D" vi-delete-to)151.2 492 R 2.5 -("E" vi-end-w)151.2 504 R(ord)-.1 E 2.5("F" vi-char)151.2 516 R(-search) --.2 E 2.5("G" vi-fetch-history)151.2 528 R 2.5("I" vi-insert-be)151.2 -540 R(g)-.15 E 2.5("N" vi-search-ag)151.2 552 R(ain)-.05 E 2.5 -("P" vi-put)151.2 564 R 2.5("R" vi-replace)151.2 576 R 2.5("S" vi-subst) -151.2 588 R 2.5("T" vi-char)151.2 600 R(-search)-.2 E 2.5("U" re)151.2 -612 R -.15(ve)-.25 G(rt-line).15 E 2.5("W" vi-ne)151.2 624 R(xt-w)-.15 E -(ord)-.1 E 2.5("X" backw)151.2 636 R(ard-delete-char)-.1 E 2.5 -("Y" vi-yank-to)151.2 648 R 2.5("\\" vi-complete)151.2 660 R 2.5 -("^" vi-\214rst-print)151.2 672 R 2.5("_" vi-yank-ar)151.2 684 R(g)-.18 -E 2.5("`" vi-goto-mark)151.2 696 R 2.5("a" vi-append-mode)151.2 708 R -2.5("b" vi-pre)151.2 720 R(v-w)-.25 E(ord)-.1 E(GNU Readline 4.2)72 768 -Q(2001 Feb 5)136.79 E(12)201.5 E EP -%%Page: 13 13 -%%BeginPageSetup -BP -%%EndPageSetup -/F0 10/Times-Roman@0 SF 342.2(READLINE\(3\) READLINE\(3\))72 48 R 2.5 -("c" vi-change-to)151.2 84 R 2.5("d" vi-delete-to)151.2 96 R 2.5 -("e" vi-end-w)151.2 108 R(ord)-.1 E 2.5("f" vi-char)151.2 120 R(-search) --.2 E 2.5("h" backw)151.2 132 R(ard-char)-.1 E 2.5 -("i" vi-insertion-mode)151.2 144 R 2.5("j" ne)151.2 156 R(xt-history) --.15 E 2.5("k" pre)151.2 168 R(v-history)-.25 E 2.5("l" forw)151.2 180 R -(ard-char)-.1 E 2.5("m" vi-set-mark)151.2 192 R 2.5("n" vi-search-ag) -151.2 204 R(ain)-.05 E 2.5("p" vi-put)151.2 216 R 2.5 -("r" vi-change-char)151.2 228 R 2.5("s" vi-subst)151.2 240 R 2.5 -("t" vi-char)151.2 252 R(-search)-.2 E 2.5("u" undo)151.2 264 R 2.5 -("w" vi-ne)151.2 276 R(xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 288 -R 2.5("y" vi-yank-to)151.2 300 R 2.5("|" vi-column)151.2 312 R 2.5 -("~" vi-change-case)151.2 324 R/F1 9/Times-Bold@0 SF(SEE ALSO)72 340.8 Q -/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 352.8 Q(ary)-.15 E F0 -2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2 -(The Gnu History Libr)108 364.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E -(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 376.8 Q F0(\(1\))A F1 -(FILES)72 393.6 Q F2(~/.inputr)109.666 405.6 Q(c)-.37 E F0(Indi)144 -417.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E -F0(initialization \214le)2.5 E F1 -.45(AU)72 434.4 S(THORS).45 E F0 -(Brian F)108 446.4 Q(ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E -(bfox@gnu.or)108 458.4 Q(g)-.18 E(Chet Rame)108 475.2 Q 1.3 -.65(y, C) --.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve) --.25 G(rsity).15 E(chet@ins.CWR)108 487.2 Q(U.Edu)-.4 E F1 -.09(BU)72 -504 S 2.25(GR).09 G(EPOR)-2.25 E(TS)-.36 E F0 .69(If you \214nd a b)108 -516 R .69(ug in)-.2 F F3 -.18(re)3.19 G(adline,).18 E F0 .69 -(you should report it.)3.19 F .691(But \214rst, you should mak)5.69 F -3.191(es)-.1 G .691(ure that it really is a b)-3.191 F(ug,)-.2 E -(and that it appears in the latest v)108 528 Q(ersion of the)-.15 E F3 --.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.) -.15 E .705(Once you ha)108 544.8 R 1.005 -.15(ve d)-.2 H .705 -(etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b) --.15 F .704(ug report to)-.2 F F2 -.2(bu)3.204 G(g\255r).2 E(eadline) --.37 E F0(@)A F2(gnu.or)A(g)-.37 E F0 5.704(.I)C 3.204(fy)-5.704 G(ou) --3.204 E(ha)108 556.8 Q 1.809 -.15(ve a \214)-.2 H 1.509 -(x, you are welcome to mail that as well!).15 F 1.51 -(Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F -(mailed to)108 568.8 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2 -(gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3 -(gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 585.6 Q -(ug reports concerning this manual page should be directed to)-.2 E F2 --.15(ch)2.5 G(et@ins.CWR).15 E -.25(U.)-.4 G(Edu).25 E F0(.).25 E F1 --.09(BU)72 602.4 S(GS).09 E F0(It')108 614.4 Q 2.5(st)-.55 G -(oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 4.2)72 768 Q -(2001 Feb 5)136.79 E(13)201.5 E EP -%%Trailer -end -%%EOF diff --git a/readline/doc/rluserman.dvi b/readline/doc/rluserman.dvi deleted file mode 100644 index 72da63ace1817194aaa4a18e8fd1b1706eee6ba9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@ - - - -GNU Readline Library - - -

    GNU Readline Library User Interface

    -

    Edition 4.2-beta, for Readline Library Version 4.2-beta.

    -

    Feb 2001

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

    -


    -

    Table of Contents

    - -


    - -

    -This document describes the end user interface of the GNU Readline Library, -a utility which aids in the consistency of user interface across discrete -programs that need to provide a command line interface. - -

    -

    -Published by the Free Software Foundation
    -59 Temple Place, Suite 330,
    -Boston, MA 02111 USA - -

    -

    -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -

    -

    -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -

    -

    -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -

    -

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

    - - - -

    Command Line Editing

    - -

    -This chapter describes the basic features of the GNU -command line editing interface. - -

    - - - - - -

    Introduction to Line Editing

    - -

    -The following paragraphs describe the notation used to represent -keystrokes. - -

    -

    -The text C-k is read as `Control-K' and describes the character -produced when the k key is pressed while the Control key -is depressed. - -

    -

    -The text M-k is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the k -key is pressed. -The Meta key is labeled ALT on many keyboards. -On keyboards with two keys labeled ALT (usually to either side of -the space bar), the ALT on the left side is generally set to -work as a Meta key. -The ALT key on the right may also be configured to work as a -Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - -

    -

    -If you do not have a Meta or ALT key, or another key working as -a Meta key, the identical keystroke can be generated by typing ESC -first, and then typing k. -Either process is known as metafying the k key. - -

    -

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

    -

    -In addition, several keys have their own names. Specifically, -DEL, ESC, LFD, SPC, RET, and TAB all -stand for themselves when seen in this text, or in an init file -(see section Readline Init File). -If your keyboard lacks a LFD key, typing C-j will -produce the desired character. -The RET key may be labeled Return or Enter on -some keyboards. - -

    - - -

    Readline Interaction

    -

    - - -

    -

    -Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press RET. You do not have to be at the -end of the line to press RET; the entire line is accepted -regardless of the location of the cursor within the line. - -

    - - - - - -

    Readline Bare Essentials

    -

    - - - - -

    -

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

    -

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

    -

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

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

    -(Depending on your configuration, the Backspace key be set to -delete the character to the left of the cursor and the DEL key set -to delete the character underneath the cursor, like C-d, rather -than the character to the left of the cursor.) - -

    - - -

    Readline Movement Commands

    - -

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

    -
    - -
    C-a -
    -Move to the start of the line. -
    C-e -
    -Move to the end of the line. -
    M-f -
    -Move forward a word, where a word is composed of letters and digits. -
    M-b -
    -Move backward a word. -
    C-l -
    -Clear the screen, reprinting the current line at the top. -
    - -

    -Notice how C-f moves forward a character, while M-f moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - -

    - - -

    Readline Killing Commands

    - -

    - - - -

    -

    -Killing text means to delete the text from the line, but to save -it away for later use, usually by yanking (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) - -

    -

    -If the description for a command says that it `kills' text, then you can -be sure that you can get the text back in a different (or the same) -place later. - -

    -

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

    -

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

    -
    - -
    C-k -
    -Kill the text from the current cursor position to the end of the line. - -
    M-d -
    -Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by M-f. - -
    M-DEL -
    -Kill from the cursor the start of the previous word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by M-b. - -
    C-w -
    -Kill from the cursor to the previous whitespace. This is different than -M-DEL because the word boundaries differ. - -
    - -

    -Here is how to yank the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -

    -
    - -
    C-y -
    -Yank the most recently killed text back into the buffer at the cursor. - -
    M-y -
    -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is C-y or M-y. -
    - - - -

    Readline Arguments

    - -

    -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - -

    -

    -The general way to pass numeric arguments to a command is to type meta -digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once -you have typed one meta digit to get the argument started, you can type -the remainder of the digits, and then the command. For example, to give -the C-d command an argument of 10, you could type `M-1 0 C-d', -which will delete the next ten characters on the input line. - -

    - - -

    Searching for Commands in the History

    - -

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

    -

    -Incremental searches begin before the user has finished typing the -search string. -As each character of the search string is typed, Readline displays -the next entry from the history matching the string typed so far. -An incremental search requires only as many characters as needed to -find the desired history entry. -To search backward in the history for a particular string, type -C-r. Typing C-s searches forward through the history. -The characters present in the value of the isearch-terminators variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the ESC and -C-J characters will terminate an incremental search. -C-g will abort an incremental search and restore the original line. -When the search is terminated, the history entry containing the -search string becomes the current line. - -

    -

    -To find other matching entries in the history list, type C-r or -C-s as appropriate. -This will search backward or forward in the history for the next -entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate -the search and execute that command. -For instance, a RET will terminate the search and accept -the line, thereby executing the command from the history list. -A movement command will terminate the search, make the last line found -the current line, and begin editing. - -

    -

    -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, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable @env{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

    - -

    -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a `#' are comments. -Lines beginning with a `$' indicate conditional -constructs (see section Conditional Init Constructs). Other lines -denote variable settings and key bindings. - -

    -
    - -
    Variable Settings -
    -You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the set command within the init file. Here is how to -change from the default Emacs-like key binding to use -vi line editing commands: - - -
    -set editing-mode vi
    -
    - -A great deal of run-time behavior is changeable with the following -variables. - -
    - -
    bell-style -
    - -Controls what happens when Readline wants to ring the terminal bell. -If set to `none', Readline never rings the bell. If set to -`visible', Readline uses a visible bell if one is available. -If set to `audible' (the default), Readline attempts to ring -the terminal's bell. - -
    comment-begin -
    - -The string to insert at the beginning of the line when the -insert-comment command is executed. The default value -is "#". - -
    completion-ignore-case -
    -If set to `on', Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is `off'. - -
    completion-query-items -
    - -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. -This variable must be set to an integer value greater than or equal to 0. -The default limit is 100. - -
    convert-meta -
    - -If set to `on', Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an ESC character, converting them to a -meta-prefixed key sequence. The default value is `on'. - -
    disable-completion -
    - -If set to `On', Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to self-insert. The default is `off'. - -
    editing-mode -
    - -The editing-mode variable controls which default set of -key bindings is used. By default, Readline starts up in Emacs editing -mode, where the keystrokes are most similar to Emacs. This variable can be -set to either `emacs' or `vi'. - -
    enable-keypad -
    - -When set to `on', Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is `off'. - -
    expand-tilde -
    - -If set to `on', tilde expansion is performed when Readline -attempts word completion. The default is `off'. - -
    horizontal-scroll-mode -
    - -This variable can be set to either `on' or `off'. Setting it -to `on' means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to `off'. - -
    input-meta -
    - - -If set to `on', Readline will enable eight-bit input (it -will not clear the eighth bit in the characters it reads), -regardless of what the terminal claims it can support. The -default value is `off'. The name meta-flag is a -synonym for this variable. - -
    isearch-terminators -
    - -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (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 -emacs, -emacs-standard, -emacs-meta, -emacs-ctlx, -vi, -vi-move, -vi-command, and -vi-insert. -vi is equivalent to vi-command; emacs is -equivalent to emacs-standard. The default value is emacs. -The value of the editing-mode variable also affects the -default keymap. - -
    mark-directories -
    -If set to `on', completed directory names have a slash -appended. The default is `on'. - -
    mark-modified-lines -
    - -This variable, when set to `on', causes Readline to display an -asterisk (`*') at the start of history lines which have been modified. -This variable is `off' by default. - -
    output-meta -
    - -If set to `on', Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is `off'. - -
    print-completions-horizontally -
    -If set to `on', Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is `off'. - -
    show-all-if-ambiguous -
    - -This alters the default behavior of the completion functions. If -set to `on', -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is `off'. - -
    visible-stats -
    - -If set to `on', a character denoting a file's type -is appended to the filename when listing possible -completions. The default is `off'. - -
    - -
    Key Bindings -
    -The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. - -Once you know the name of the command, simply place on a line -in the init file the name of the key -you wish to bind the command to, a colon, and then the name of the -command. The name of the key -can be expressed in different ways, depending on what you find most -comfortable. - -
    - -
    keyname: function-name or macro -
    -keyname is the name of a key spelled out in English. For example: - -
    -Control-u: universal-argument
    -Meta-Rubout: backward-kill-word
    -Control-o: "> output"
    -
    - -In the above example, C-u is bound to the function -universal-argument, -M-DEL is bound to the function backward-kill-word, and -C-o is bound to run the macro -expressed on the right hand side (that is, to insert the text -`> output' into the line). - -A number of symbolic character names are recognized while -processing this key binding syntax: -DEL, -ESC, -ESCAPE, -LFD, -NEWLINE, -RET, -RETURN, -RUBOUT, -SPACE, -SPC, -and -TAB. - -
    "keyseq": function-name or macro -
    -keyseq differs from keyname above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - - -
    -"\C-u": universal-argument
    -"\C-x\C-r": re-read-init-file
    -"\e[11~": "Function Key 1"
    -
    - -In the above example, C-u is again bound to the function -universal-argument (just as it was in the first example), -`C-x C-r' is bound to the function re-read-init-file, -and `ESC [ 1 1 ~' is bound to insert -the text `Function Key 1'. - -
    - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -
    - -
    \C- -
    -control prefix -
    \M- -
    -meta prefix -
    \e -
    -an escape character -
    \\ -
    -backslash -
    \" -
    -", a double quotation mark -
    \' -
    -', a single quote or apostrophe -
    - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -
    - -
    \a -
    -alert (bell) -
    \b -
    -backspace -
    \d -
    -delete -
    \f -
    -form feed -
    \n -
    -newline -
    \r -
    -carriage return -
    \t -
    -horizontal tab -
    \v -
    -vertical tab -
    \nnn -
    -the character whose ASCII code is the octal value nnn -(one to three digits) -
    \xnnn -
    -the character whose ASCII code is the hexadecimal value nnn -(one to three digits) -
    - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including `"' and `''. -For example, the following binding will make `C-x \' -insert a single `\' into the line: - -
    -"\C-x\\": "\\"
    -
    - -
    - - - -

    Conditional Init Constructs

    - -

    -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are four parser directives used. - -

    -
    - -
    $if -
    -The $if construct allows bindings to be made based on the -editing mode, the terminal being used, or the application using -Readline. The text of the test extends to the end of the line; -no characters are required to isolate it. - -
    - -
    mode -
    -The mode= form of the $if directive is used to test -whether Readline is in emacs or vi mode. -This may be used in conjunction -with the `set keymap' command, for instance, to set bindings in -the emacs-standard and emacs-ctlx keymaps only if -Readline is starting out in emacs mode. - -
    term -
    -The term= form may be used to include terminal-specific -key bindings, perhaps to bind the key sequences output by the -terminal's function keys. The word on the right side of the -`=' is tested against both the full name of the terminal and -the portion of the terminal name before the first `-'. This -allows sun to match both sun and sun-cmd, -for instance. - -
    application -
    -The application construct is used to include -application-specific settings. Each program using the Readline -library sets the application name, and you can test for it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -
    -$if Bash
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -$endif
    -
    - -
    - -
    $endif -
    -This command, as seen in the previous example, terminates an -$if command. - -
    $else -
    -Commands in this branch of the $if directive are executed if -the test fails. - -
    $include -
    -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -
    -$include /etc/inputrc
    -
    - -
    - - - -

    Sample Init File

    - -

    -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -

    - -
    -# This file controls the behaviour of line input editing for
    -# programs that use the Gnu Readline library.  Existing programs
    -# include FTP, Bash, and Gdb.
    -#
    -# You can re-read the inputrc file with C-x C-r.
    -# Lines beginning with '#' are comments.
    -#
    -# First, include any systemwide bindings and variable assignments from
    -# /etc/Inputrc
    -$include /etc/Inputrc
    -
    -#
    -# Set various bindings for emacs mode.
    -
    -set editing-mode emacs 
    -
    -$if mode=emacs
    -
    -Meta-Control-h:	backward-kill-word	Text after the function name is ignored
    -
    -#
    -# Arrow keys in keypad mode
    -#
    -#"\M-OD":        backward-char
    -#"\M-OC":        forward-char
    -#"\M-OA":        previous-history
    -#"\M-OB":        next-history
    -#
    -# Arrow keys in ANSI mode
    -#
    -"\M-[D":        backward-char
    -"\M-[C":        forward-char
    -"\M-[A":        previous-history
    -"\M-[B":        next-history
    -#
    -# Arrow keys in 8 bit keypad mode
    -#
    -#"\M-\C-OD":       backward-char
    -#"\M-\C-OC":       forward-char
    -#"\M-\C-OA":       previous-history
    -#"\M-\C-OB":       next-history
    -#
    -# Arrow keys in 8 bit ANSI mode
    -#
    -#"\M-\C-[D":       backward-char
    -#"\M-\C-[C":       forward-char
    -#"\M-\C-[A":       previous-history
    -#"\M-\C-[B":       next-history
    -
    -C-q: quoted-insert
    -
    -$endif
    -
    -# An old-style binding.  This happens to be the default.
    -TAB: complete
    -
    -# Macros that are convenient for shell interaction
    -$if Bash
    -# edit the path
    -"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
    -# prepare to type a quoted word -- insert open and close double quotes
    -# and move to just after the open quote
    -"\C-x\"": "\"\"\C-b"
    -# insert a backslash (testing backslash escapes in sequences and macros)
    -"\C-x\\": "\\"
    -# Quote the current or previous word
    -"\C-xq": "\eb\"\ef\""
    -# Add a binding to refresh the line, which is unbound
    -"\C-xr": redraw-current-line
    -# Edit variable on current line.
    -"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
    -$endif
    -
    -# use a visible bell if one is available
    -set bell-style visible
    -
    -# don't strip characters to 7 bits when reading
    -set input-meta on
    -
    -# allow iso-latin1 characters to be inserted rather than converted to
    -# prefix-meta sequences
    -set convert-meta off
    -
    -# display characters with the eighth bit set directly rather than
    -# as meta-prefixed characters
    -set output-meta on
    -
    -# if there are more than 150 possible completions for a word, ask the
    -# user if he wants to see all of them
    -set completion-query-items 150
    -
    -# For FTP
    -$if Ftp
    -"\C-xg": "get \M-?"
    -"\C-xt": "put \M-?"
    -"\M-.": yank-last-arg
    -$endif
    -
    - - - -

    Bindable Readline Commands

    - - - - -

    -This section describes Readline commands that may be bound to key -sequences. - -

    -

    -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, point refers to the current cursor -position, and mark refers to a cursor position saved by the -set-mark command. -The text between the point and mark is referred to as the region. - -

    - - -

    Commands For Moving

    -
    - -
    beginning-of-line (C-a) -
    - -Move to the start of the current line. - -
    end-of-line (C-e) -
    - -Move to the end of the line. - -
    forward-char (C-f) -
    - -Move forward a character. - -
    backward-char (C-b) -
    - -Move back a character. - -
    forward-word (M-f) -
    - -Move forward to the end of the next word. Words are composed of -letters and digits. - -
    backward-word (M-b) -
    - -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -
    clear-screen (C-l) -
    - -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -
    redraw-current-line () -
    - -Refresh the current line. By default, this is unbound. - -
    - - - -

    Commands For Manipulating The History

    - -
    - -
    accept-line (Newline or Return) -
    - -Accept the line regardless of where the cursor is. -If this line is -non-empty, it may be added to the history list for future recall with -add_history(). -If this line is a modified history line, then restore the history line -to its original state. - -
    previous-history (C-p) -
    - -Move `up' through the history list. - -
    next-history (C-n) -
    - -Move `down' through the history list. - -
    beginning-of-history (M-<) -
    - -Move to the first line in the history. - -
    end-of-history (M->) -
    - -Move to the end of the input history, i.e., the line currently -being entered. - -
    reverse-search-history (C-r) -
    - -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -
    forward-search-history (C-s) -
    - -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -
    non-incremental-reverse-search-history (M-p) -
    - -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -
    non-incremental-forward-search-history (M-n) -
    - -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -
    history-search-forward () -
    - -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. - -
    history-search-backward () -
    - -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -
    yank-nth-arg (M-C-y) -
    - -Insert the first argument to the previous command (usually -the second word on the previous line). With an argument n, -insert the nth word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the nth word from the end of the previous command. - -
    yank-last-arg (M-. or M-_) -
    - -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like yank-nth-arg. -Successive calls to yank-last-arg move back through the history -list, inserting the last argument of each line in turn. - -
    - - - -

    Commands For Changing Text

    - -
    - -
    delete-char (C-d) -
    - -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to delete-char, then -return EOF. - -
    backward-delete-char (Rubout) -
    - -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -
    forward-backward-delete-char () -
    - -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. - -
    quoted-insert (C-q or C-v) -
    - -Add the next character typed to the line verbatim. This is -how to insert key sequences like C-q, for example. - -
    tab-insert (M-TAB) -
    - -Insert a tab character. - -
    self-insert (a, b, A, 1, !, ...) -
    - -Insert yourself. - -
    transpose-chars (C-t) -
    - -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. - -
    transpose-words (M-t) -
    - -Drag the word before point past the word after point, -moving point past that word as well. - -
    upcase-word (M-u) -
    - -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -
    downcase-word (M-l) -
    - -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -
    capitalize-word (M-c) -
    - -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -
    - - - -

    Killing And Yanking

    - -
    - -
    kill-line (C-k) -
    - -Kill the text from point to the end of the line. - -
    backward-kill-line (C-x Rubout) -
    - -Kill backward to the beginning of the line. - -
    unix-line-discard (C-u) -
    - -Kill backward from the cursor to the beginning of the current line. - -
    kill-whole-line () -
    - -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -
    kill-word (M-d) -
    - -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as forward-word. - -
    backward-kill-word (M-DEL) -
    - -Kill the word behind point. -Word boundaries are the same as backward-word. - -
    unix-word-rubout (C-w) -
    - -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -
    delete-horizontal-space () -
    - -Delete all spaces and tabs around point. By default, this is unbound. - -
    kill-region () -
    - -Kill the text in the current region. -By default, this command is unbound. - -
    copy-region-as-kill () -
    - -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -
    copy-backward-word () -
    - -Copy the word before point to the kill buffer. -The word boundaries are the same as backward-word. -By default, this command is unbound. - -
    copy-forward-word () -
    - -Copy the word following point to the kill buffer. -The word boundaries are the same as forward-word. -By default, this command is unbound. - -
    yank (C-y) -
    - -Yank the top of the kill ring into the buffer at the current -cursor position. - -
    yank-pop (M-y) -
    - -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -
    - - - -

    Specifying Numeric Arguments

    -
    - -
    digit-argument (M-0, M-1, ... M--) -
    - -Add this digit to the argument already accumulating, or start a new -argument. M-- starts a negative argument. - -
    universal-argument () -
    - -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing universal-argument -again ends the numeric argument, but is otherwise ignored. -As a special case, if this command is immediately followed by a -character that is neither a digit or minus sign, the argument count -for the next command is multiplied by four. -The argument count is initially one, so executing this function the -first time makes the argument count four, a second time makes the -argument count sixteen, and so on. -By default, this is not bound to a key. -
    - - - -

    Letting Readline Type For You

    - -
    - -
    complete (TAB) -
    - -Attempt to perform completion on the text before point. -The actual completion performed is application-specific. -The default is filename completion. - -
    possible-completions (M-?) -
    - -List the possible completions of the text before the cursor. - -
    insert-completions (M-*) -
    - -Insert all completions of the text before point that would have -been generated by possible-completions. - -
    menu-complete () -
    - -Similar to complete, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of menu-complete steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung and the -original text is restored. -An argument of n moves n positions forward in the list -of matches; a negative argument may be used to move backward -through the list. -This command is intended to be bound to TAB, but is unbound -by default. - -
    delete-char-or-list () -
    - -Deletes the character under the cursor if not at the beginning or -end of the line (like delete-char). -If at the end of the line, behaves identically to -possible-completions. -This command is unbound by default. - -
    - - - -

    Keyboard Macros

    -
    - -
    start-kbd-macro (C-x () -
    - -Begin saving the characters typed into the current keyboard macro. - -
    end-kbd-macro (C-x )) -
    - -Stop saving the characters typed into the current keyboard macro -and save the definition. - -
    call-last-kbd-macro (C-x e) -
    - -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -
    - - - -

    Some Miscellaneous Commands

    -
    - -
    re-read-init-file (C-x C-r) -
    - -Read in the contents of the inputrc file, and incorporate -any bindings or variable assignments found there. - -
    abort (C-g) -
    - -Abort the current editing command and -ring the terminal's bell (subject to the setting of -bell-style). - -
    do-uppercase-version (M-a, M-b, M-x, ...) -
    - -If the metafied character x is lowercase, run the command -that is bound to the corresponding uppercase character. - -
    prefix-meta (ESC) -
    - -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing `ESC f' is equivalent to typing -M-f. - -
    undo (C-_ or C-x C-u) -
    - -Incremental undo, separately remembered for each line. - -
    revert-line (M-r) -
    - -Undo all changes made to this line. This is like executing the undo -command enough times to get back to the beginning. - -
    tilde-expand (M-~) -
    - -Perform tilde expansion on the current word. - -
    set-mark (C-@) -
    - -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -
    exchange-point-and-mark (C-x C-x) -
    - -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -
    character-search (C-]) -
    - -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -
    character-search-backward (M-C-]) -
    - -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -
    insert-comment (M-#) -
    - -The value of the comment-begin -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -
    dump-functions () -
    - -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-variables () -
    - -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    dump-macros () -
    - -Print all of the Readline key sequences bound to macros and the -strings they output. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an inputrc file. This command is unbound by default. - -
    - - - -

    Readline vi Mode

    - -

    -While the Readline library does not have a full set of vi -editing functions, it does contain enough to allow simple editing -of the line. The Readline vi mode behaves as specified in -the POSIX 1003.2 standard. - -

    -

    -In order to switch interactively between emacs and vi -editing modes, use the command M-C-j (toggle-editing-mode). -The Readline default is emacs mode. - -

    -

    -When you enter a line in vi mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing ESC -switches you into `command' mode, where you can edit the text of the -line with the standard vi movement keys, move to previous -history lines with `k' and subsequent lines with `j', and -so forth. - -

    - -


    -This document was generated on 5 Febuary 2001 using the -texi2html -translator version 1.52.

    - - diff --git a/readline/doc/rluserman.info b/readline/doc/rluserman.info deleted file mode 100644 --- a/readline/doc/rluserman.info +++ /dev/null @@ -1,1194 +0,0 @@ -This is rluserman.info, produced by makeinfo version 4.0 from -/usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* RLuserman: (rluserman). The GNU readline library User's Manual. -END-INFO-DIR-ENTRY - - This document describes the end user interface of the GNU Readline -Library, a utility which aids in the consistency of user interface -across discrete programs that need to provide a command line interface. - - Copyright (C) 1988-2001 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the end user interface of the GNU Readline -Library, a utility which aids in the consistency of user interface -across discrete programs that need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. - - -File: rluserman.info, Node: Command Line Editing, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text `C-k' is read as `Control-K' and describes the character -produced when the key is pressed while the Control key is depressed. - - The text `M-k' is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the -key is pressed. The Meta key is labeled on many keyboards. On -keyboards with two keys labeled (usually to either side of the -space bar), the on the left side is generally set to work as a -Meta key. The key on the right may also be configured to work as -a Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - - If you do not have a Meta or key, or another key working as a -Meta key, the identical keystroke can be generated by typing -_first_, and then typing . Either process is known as "metafying" -the key. - - The text `M-C-k' is read as `Meta-Control-k' and describes the -character produced by "metafying" `C-k'. - - In addition, several keys have their own names. Specifically, -, , , , , and all stand for themselves -when seen in this text, or in an init file (*note Readline Init File::). -If your keyboard lacks a key, typing will produce the -desired character. The key may be labeled or on -some keyboards. - - -File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press . You do not have to be at the end of -the line to press ; the entire line is accepted regardless of the -location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may mistype a character, and not notice the error -until you have typed several other characters. In that case, you can -type `C-b' to move the cursor to the left, and then correct your -mistake. Afterwards, you can move the cursor to the right with `C-f'. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the bare essentials for editing the text of an input line -follows. - -`C-b' - Move back one character. - -`C-f' - Move forward one character. - - or - Delete the character to the left of the cursor. - -`C-d' - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -`C-_' or `C-x C-u' - Undo the last editing command. You can undo all the way back to an - empty line. - -(Depending on your configuration, the key be set to delete -the character to the left of the cursor and the key set to delete -the character underneath the cursor, like `C-d', rather than the -character to the left of the cursor.) - - -File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to `C-b', `C-f', `C-d', and -. Here are some commands for moving more rapidly about the line. - -`C-a' - Move to the start of the line. - -`C-e' - Move to the end of the line. - -`M-f' - Move forward a word, where a word is composed of letters and - digits. - -`M-b' - Move backward a word. - -`C-l' - Clear the screen, reprinting the current line at the top. - - Notice how `C-f' moves forward a character, while `M-f' moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`Cut' and `paste' are more recent jargon for `kill' and -`yank'.) - - If the description for a command says that it `kills' text, then you -can be sure that you can get the text back in a different (or the same) -place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -`C-k' - Kill the text from the current cursor position to the end of the - line. - -`M-d' - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by `M-f'. - -`M-' - Kill from the cursor the start of the previous word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by `M-b'. - -`C-w' - Kill from the cursor to the previous whitespace. This is - different than `M-' because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -`C-y' - Yank the most recently killed text back into the buffer at the - cursor. - -`M-y' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `C-y' or `M-y'. - - -File: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once you -have typed one meta digit to get the argument started, you can type the -remainder of the digits, and then the command. For example, to give -the `C-d' command an argument of 10, you could type `M-1 0 C-d', which -will delete the next ten characters on the input line. - - -File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -"incremental" and "non-incremental". - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. To search backward in the -history for a particular string, type `C-r'. Typing `C-s' searches -forward through the history. The characters present in the value of -the `isearch-terminators' variable are used to terminate an incremental -search. If that variable has not been assigned a value, the and -`C-J' characters will terminate an incremental search. `C-g' will -abort an incremental search and restore the original line. When the -search is terminated, the history entry containing the search string -becomes the current line. - - To find other matching entries in the history list, type `C-r' or -`C-s' as appropriate. This will search backward or forward in the -history for the next entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate the -search and execute that command. For instance, a will terminate -the search and accept the line, thereby executing the command from the -history list. A movement command will terminate the search, make the -last line found the current line, and begin editing. - - Non-incremental searches read the entire search string before -starting to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - - -File: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home -directory. The name of this file is taken from the value of the -environment variable `INPUTRC'. If that variable is unset, the default -is `~/.inputrc'. - - When a program which uses the Readline library starts up, the init -file is read, and the key bindings are set. - - In addition, the `C-x C-r' command re-reads this init file, thus -incorporating any changes that you might have made to it. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. This variable must be set to an integer value - greater than or equal to 0. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which default set of key - bindings is used. By default, Readline starts up in Emacs - editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either `emacs' or `vi'. - - `enable-keypad' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not clear the eighth bit in the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::). If this variable has not been - given a value, the characters and `C-J' will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', `vi-move', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place on a line in - the init file the name of the key you wish to bind the command to, - a colon, and then the name of the command. The name of the key - can be expressed in different ways, depending on what you find most - comfortable. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, `C-u' is bound to the function - `universal-argument', `M-DEL' is bound to the function - `backward-kill-word', and `C-o' is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - A number of symbolic character names are recognized while - processing this key binding syntax: DEL, ESC, ESCAPE, LFD, - NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, `C-u' is again bound to the function - `universal-argument' (just as it was in the first example), - `C-x C-r' is bound to the function `re-read-init-file', and - ` <[> <1> <1> <~>' is bound to insert the text `Function - Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the character whose ASCII code is the octal value NNN (one to - three digits) - - `\xNNN' - the character whose ASCII code is the hexadecimal value NNN - (one to three digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against both the full name of the terminal and - the portion of the terminal name before the first `-'. This - allows `sun' to match both `sun' and `sun-cmd', for instance. - - `application' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. - $include /etc/inputrc - - -File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an INPUTRC file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the Gnu Readline library. Existing programs - # include FTP, Bash, and Gdb. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # First, include any systemwide bindings and variable assignments from - # /etc/Inputrc - $include /etc/Inputrc - - # - # Set various bindings for emacs mode. - - set editing-mode emacs - - $if mode=emacs - - Meta-Control-h: backward-kill-word Text after the function name is ignored - - # - # Arrow keys in keypad mode - # - #"\M-OD": backward-char - #"\M-OC": forward-char - #"\M-OA": previous-history - #"\M-OB": next-history - # - # Arrow keys in ANSI mode - # - "\M-[D": backward-char - "\M-[C": forward-char - "\M-[A": previous-history - "\M-[B": next-history - # - # Arrow keys in 8 bit keypad mode - # - #"\M-\C-OD": backward-char - #"\M-\C-OC": forward-char - #"\M-\C-OA": previous-history - #"\M-\C-OB": next-history - # - # Arrow keys in 8 bit ANSI mode - # - #"\M-\C-[D": backward-char - #"\M-\C-[C": forward-char - #"\M-\C-[A": previous-history - #"\M-\C-[B": next-history - - C-q: quoted-insert - - $endif - - # An old-style binding. This happens to be the default. - TAB: complete - - # Macros that are convenient for shell interaction - $if Bash - # edit the path - "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" - # prepare to type a quoted word -- insert open and close double quotes - # and move to just after the open quote - "\C-x\"": "\"\"\C-b" - # insert a backslash (testing backslash escapes in sequences and macros) - "\C-x\\": "\\" - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - # Add a binding to refresh the line, which is unbound - "\C-xr": redraw-current-line - # Edit variable on current line. - "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" - $endif - - # use a visible bell if one is available - set bell-style visible - - # don't strip characters to 7 bits when reading - set input-meta on - - # allow iso-latin1 characters to be inserted rather than converted to - # prefix-meta sequences - set convert-meta off - - # display characters with the eighth bit set directly rather than - # as meta-prefixed characters - set output-meta on - - # if there are more than 150 possible completions for a word, ask the - # user if he wants to see all of them - set completion-query-items 150 - - # For FTP - $if Ftp - "\C-xg": "get \M-?" - "\C-xt": "put \M-?" - "\M-.": yank-last-arg - $endif - - -File: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. - - Command names without an accompanying key sequence are unbound by -default. In the following descriptions, "point" refers to the current -cursor position, and "mark" refers to a cursor position saved by the -`set-mark' command. The text between the point and mark is referred to -as the "region". - - -File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline or Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, it may be added to the history list for future recall - with `add_history()'. If this line is a modified history line, - then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-. or M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not bound to `delete-char', then - return EOF. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q or C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like `C-q', for example. - -`tab-insert (M-)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - - -File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter point is. By - default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is `yank' or `yank-pop'. - - -File: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. `M--' starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete ()' - Attempt to perform completion on the text before point. The - actual completion performed is application-specific. The default - is filename completion. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `complete', but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of `menu-complete' steps through the list of possible - completions, inserting each match in turn. At the end of the list - of completions, the bell is rung and the original text is restored. - An argument of N moves N positions forward in the list of matches; - a negative argument may be used to move backward through the list. - This command is intended to be bound to , but is unbound by - default. - -`delete-char-or-list ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta ()' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing ` f' is equivalent to typing - `M-f'. - -`undo (C-_ or C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they output. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - - -File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command `M-C-j' (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - - -Tag Table: -Node: Top1208 -Node: Command Line Editing1604 -Node: Introduction and Notation2218 -Node: Readline Interaction3837 -Node: Readline Bare Essentials5025 -Node: Readline Movement Commands6807 -Node: Readline Killing Commands7765 -Node: Readline Arguments9676 -Node: Searching10713 -Node: Readline Init File12670 -Node: Readline Init File Syntax13732 -Node: Conditional Init Constructs23349 -Node: Sample Init File25789 -Node: Bindable Readline Commands28960 -Node: Commands For Moving30011 -Node: Commands For History30861 -Node: Commands For Text33644 -Node: Commands For Killing35650 -Node: Numeric Arguments37624 -Node: Commands For Completion38753 -Node: Keyboard Macros40243 -Node: Miscellaneous Commands40803 -Node: Readline vi Mode43620 - -End Tag Table diff --git a/readline/doc/rluserman.ps b/readline/doc/rluserman.ps deleted file mode 100644 --- a/readline/doc/rluserman.ps +++ /dev/null @@ -1,1917 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: rluserman.dvi -%%Pages: 22 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o rluserman.ps rluserman.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2001.02.05:1130 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (rluserman.dvi) -@start -%DVIPSBitmapFont: Fa cmbxti10 14.4 1 -/Fa 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbx12 13.14 46 -/Fb 46 122 df<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA212 -00B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC38 -7C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F -00131E5B1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA21823 -7DA21F>I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C010000 -13FCA2EB03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210 -127C12FEA214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14 -381478A214F81301130313071306130C131C13381330136013E0EA01C01380EA03005A12 -0E5A12185A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C00 -1F137CEBFFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8 -000813FCC7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FF -C03801FE0018237DA21F>II<1230123C -003FB512C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA2 -5BA2133CA25BA213F8A41201A66C5A13601A257DA41F>II<141CA2143EA3147FA24A7EA39038019F -C0A29038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FC -A29039E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229 -257EA42E>65 DI<9138FF8008010FEBF0 -1890393FC03C789039FE0006F8D801F81303484813014848130048481478121F48481438 -A2007F151890C8FCA2481500A97E16187F123FA26C6C1430120F6C6C14606C6C14C06C6C -EB0180D800FEEB070090383FC01E90380FFFF8010013C025257DA42C>I69 -DI72 DI75 -DIII82 -D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>I< -007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C160C5AA4C71400 -B3A390B512FEA226247EA32B>I89 -D97 -DIII<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>II<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>II<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I107 DI<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E803F001 -A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80390F8E -0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>II<38FFC1FCEBCFFF390FFC1FC09038F007E001 -C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038CFFF00 -EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC13B013 -A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA7001EAF0 -00A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212E014C0 -EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F121FB5 -12C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39FFC07F -E0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I<39FFF8 -0FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00005B13FE -EB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A2390FC00F -003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EB -E0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmsl10 10.95 37 -/Fc 37 122 df45 D<1408140C141C143CA2147C147E149EA2EB -011EA21302801304A21308A20110138014071320A2EB7FFF90384007C0EB8003A2EA0100 -A21202EC01E01206001F130339FF801FFE1F207F9F22>65 D<0007B5FC3900F803C09038 -7801E0EC00F04913F8A515F03801E001EC03E015C0EC0F809038FFFE009038E00F803903 -C003C0EC01E015F0A21400A2485A1401A215E01403EC07C0390F000F80EC3E00B512F01D -1F7E9E20>II<0007B57E3900F801E09038780070 -81497F151E150E150FA348481480A6484814005DA3151E153E4848133C5DA25D4A5A4A5A -260F000FC7FC143CB512F0211F7E9E23>I<0007B512FC3900F8007C0178131C150C5B15 -04A414043901E00800A31438EBFFF8EBE0383803C010A4EC00081510485AA21520A21560 -15C0380F00011407B612801E1F7E9E1F>I<0007B512F83900F800780178133815185B15 -08A53901E00800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D -1F7E9E1E>I<3807FF803800F8001378A25BA6485AA6485AA6485AA648C7FC7FEAFFF011 -1F7E9E10>73 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC14021408 -48485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E811407 -81140381380F00016D487E39FFF00FFE231F7E9E23>75 D<3807FFE0D800FCC7FC1378A2 -5BA6485AA6485AA41580EC0100EA0780A25C14021406140E380F001E147CB512FC191F7E -9E1C>I78 DI<0007B5FC3900F803C090387800F015785B157CA41578484813F815F0EC01 -E0EC03C0EC0F00EBFFFCD803C0C7FCA6485AA648C8FC7FEAFFF81E1F7E9E1F>I<3807FF -FE3900F8078090387801E0EC00F05B15F8A415F03801E00115E0EC03C0EC0780EC1E00EB -FFF03803C03880141E140EA2140F48485AA51502D80F001304EB800F39FFF00788C7EA01 -F01F207E9E21>82 DI<003FB512F0383C -078000301430126039400F0010A212C01280A3D8001E1300A65BA65BA65B7F383FFFE01C -1F7A9E21>I<39FFF00FF8391F0003E06CEB01801400001EEB0100A6481302A6485BA600 -705BA25CA200785B1238001813C06C48C7FCEA0706EA01F81D20799E22>I<3BFFF07FF8 -1FF03B1F000FC007C0001E903907800380001FED01006C1502140F5EEC17C002135B1423 -01805C000713435E14C3913883E0401481D981015B13C1D803C213E193C7FC13C415F2EB -C80015F4EA01F015F85B5D5B15605B000014402C207A9E2F>87 D97 D<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5B -EA70026C5AEA1C18EA07E011147D9314>99 D<13F8EA070EEA0E07121C38380380127812 -7012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18EA07E011147D9314>101 -DI<140EEB3E11EBE1A33801C1C2380381E0EA0780130112 -0FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C014E0381800F0481330 -5A5AA3006013606C13C0381C0700EA07FC181F809417>I105 -D<13E0120712011200A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338 -137C131C120E7FA2130F7F1480EA1C03381E07C038FF8FF016207E9F18>107 -D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C ->I<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5000E -EBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07 -A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319 ->I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0130300F0 -138038700700EA380E6C5AEA07E014147D9317>IIIII<1380EA01 -00A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I< -381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F801114 -7B9319>I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C -132E134E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>120 -D<390FF83F803901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339 -133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318> -I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmti10 10.95 8 -/Fd 8 117 df12 -D<127012F8A212F012E005057B840E>46 D103 D<13C0EA01E0A213C0C7FCA7120E12131223 -EA4380EA4700A21287120EA35AA3EA38401380A21270EA31001232121C0B1F7C9E0E> -105 D<381C0F80382630C0384740601380EB0070A2008E13E0120EA3381C01C0A3EB0384 -00381388A2EB0708EB031000701330383001C016147C931A>110 -D114 D<13FCEA0302EA0601EA0C03130713061300EA0F8013F0EA07F8EA03FCEA00 -3E130E1270EAF00CA2EAE008EA4010EA2060EA1F8010147D9313>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr8 8 26 -/Fe 26 118 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 DIIIII76 D80 D82 -DI<387FFFF8386038180040 -1308A200801304A300001300AF3803FF8016177F9619>I<12FCA212C0B3AB12FCA20621 -7D980A>91 D97 D99 D101 D<1203EA0780A2EA0300C7FCA5 -EA1F801203AF1243EAE30012E7127C091D82960B>106 D<12F81238A8133E1338133013 -4013801239EA3FC0EA39E0123813F01378133CA2EAFE7F10177F9613>I110 D112 D114 DI<1208A31218A21238EAFFC0EA3800A7 -1340A4EA1C80EA0F000A147F930E>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmsy9 9 2 -/Ff 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmsltt10 10.95 29 -/Fg 29 122 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<133E13FF000313803807C3 -C0EA0F01000E13E0EA1C00123C003813F014705AA34813E0A4EB01C0A2130300F01380EA -7007EB0F00EA781E6C5AEA1FF85BEA07C0141C7C9B18>48 D<13181338A2137813F81203 -120F137012041200A413E0A6EA01C0A6EA7FFE12FF127F0F1C7B9B18>I67 D<3807FFC014E014F03801C0F814 -78143C141CEA0380141EA2140EA33807001CA4143C1438120E147014F0EB01E0EB03C013 -07387FFF8038FFFE00EA7FF8171C7F9B18>I<0007B5FC5A7E3801C007A3140638038000 -A2EB818014C0A213FF481380A21303A2140090C7FC120E140C141CA4387FFFF8B5FC7E18 -1C7F9B18>I74 D76 D<3907E01F80000FEB3FC0000714803903 -B02E00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C6 -5AA638FE03F800FF7F00FE5B1A1C7F9B18>I<126012F0A37E1278A3127C123CA3123E12 -1EA3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<387FFFC0B512E0A26C13C013047E7F18>95 D97 D<127EA3120EA45A137CEA1DFF001F13801383381E01C0123CEB00E012 -38A4387801C0A2EB0380A2EB0F00EA7C1FEAFFFCEAEFF8EA63E0131C7C9B18>I100 D<13F8EA07FE487E381F -0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA213033870078038780F00EA3F -FE6C5AEA07F012147B9318>III<14C0EB01E013031301EB00C01400A4EBFFC0A31301A2EB0380A6 -EB0700A6130EA65BA2EA6038EAF078B45A5BEA3F8013277F9C18>106 -DII<13FCEA03FF000F1380 -EA1F07383C03C0EA7801007013E0EAE000A4EB01C0A2EB0380EAF007EB0F00EA7C3EEA3F -FC6C5AEA07E013147C9318>111 D113 D<381FE1F8EBE7FCEBEFFE3800FE1EEBFC0C3801F8005B5B5BA3485AA6EA -FFFC7F5B17147E9318>II<387E07E0EAFE0FEA7E07EA0E00A2381C01C0A638380380A41307131F383FFF -E06C13F03807E3E014147D9318>117 D<38FF87F8138F1387383800E0EB01C0A3148013 -E3EA39F31233EB7700A212371376EA3666136EEA3C7CA2EA383815147C9318>119 -D<381FE3FC13E713E33803C3C000011380EBE700EA00EE13FC137C1338137813FCEA01DC -EA038E12071307120E38FF1FE0EB9FF0EB1FE016147E9318>I<380FF1FE381FF9FF380F -F1FE3803807013C0000113E0A213C114C0A23800E380A2EBE700A213E6136E136C137C13 -78A21370A25BA2485A12F3EAF780B4C7FC5A1278181E7F9318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmcsc10 10.95 12 -/Fh 12 121 df<1318A2133CA3134EA213CF1387A238010380A2000313C0EA0201A23807 -FFE0EA0400A2481370A2001813380038137838FE01FF18177F961C>97 -D99 -D101 DII105 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C13 -0E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<13FE38038380380E00E0481370003C1378003813380078133C0070131C00F0131EA700 -70131C0078133C00381338003C1378001C13706C13E0380383803800FE0017177E961D> -II115 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D<38FF80FE381F0070000E13606C1340EB80803803C100EA01C3EA00E213F4137813387F -133E134E13C7EB8780380103C0EA0201380600E0000413F0000C1370003C137800FE13FF -18177F961C>120 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 17.28 18 -/Fi 18 117 df49 D<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB -079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607A248 -5A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D15 -0E0003161E6C6C151C6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7 -FCD9003F13F80203138031317CB03A>67 D69 -D76 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780 -A3481603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D97 DI100 DII<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>I105 D108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01E0FC02C09038 -8300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3B500C3B5380F -FFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1801FC03807F3 -0001F614E013FCA35BB3B500C3B5FCA328207D9F2D>II<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90 -C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA003F01001380143F0060131F00 -E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C07F8019207D9F20>115 -D<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7FCB0EC0380A712 -01EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsy10 10.95 1 -/Fj 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmbx12 14.4 39 -/Fk 39 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -DII<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I66 -D<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484814 -7F4848143F4848141F485A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E -6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE0090 -38007FF028297CA831>I69 DI73 -D76 DI82 -D<9038FF80600003EBF0E0000F13F8381F80FD383F001F003E1307481303A200FC1301A2 -14007EA26C140013C0EA7FFCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB -007FEC1FF0140F140700E01303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE00 -00E15B38C01FF01C297CA825>I85 D87 D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4 -EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F38 -03FC031E1B7E9A21>97 DIIIII<90 -38FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E13 -3E003F137E6C137C380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14 -C06C14E06C14F0121F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC0 -1F806CB5120038007FF01E287E9A22>II<1207EA0F80EA -1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12> -I108 D<26FFC07FEB1FC0903AC1FFC07FF0 -903AC307E0C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFF -FE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC807 -01D813F013D0A213E0B039FFFE3FFFA3201B7D9A25>II<38FFC1F0EBC7FC -EBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmtt10 10.95 77 -/Fl 77 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -DI -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<1238127CA2127E123E120EA3121CA2123812F8 -12F012C0070E789B18>39 D<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA4 -5AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012 -787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F0012 -1E5A5A5A12600C247C9F18>II<121C123E127E -127F123F121F1207120E121E127C12F81260080C788518>44 D<387FFFC0B512E0A26C13 -C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F14005B -131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A121E123E -123CA2127C127812F85AA2126011247D9F18>III<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C -0780383003C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFC -EA03F0131C7E9B18>53 D<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13 -F05BA2485AA3485AA448C7FCA7131D7E9C18>55 DI<1230127812 -FCA2127812301200A81230127812FCA2127812300614779318>58 -D<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C -7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303EB00C013187E9918>60 -D<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0130C7E9318>I<126012 -F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE0048 -5AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>II<137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C1 -12E1EAE380A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC0 -0001138038007E00131C7E9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>III -III<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5 -EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B -18>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8 -387F07F0151C7F9B18>II<387F07F038FF87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0 -121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0 -151C7F9B18>75 DI<38FC01F8EAFE -03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C -7F9B18>I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213 -311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>IIIII<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FE -C67EEB0F80EB03C01301EB00E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8 -131C7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF -83FEA3381C0070B36C13E0EA0F01380783C03803FF806C1300EA007C171C809B18>I<38 -FE03F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3 -EA00F8A21370A9EA01FC487E6C5A151C7F9B18>89 D91 D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F -12017F12007F1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I< -EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18> -95 D97 D<127E12FE127E120EA5133EEB -FF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380 -38063E00151C809B18>IIIII<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA -1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0 -EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF8000 -0F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>II<1338137CA31338 -1300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E -12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB03 -8014C0387FC7F812FF127F151C7F9B18>II< -38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E17148093 -18>IIII<3801F380EA07FBEA1FFFEA3E1FEA38 -0FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB -3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FC -A9EAFFFC7F5B14147E9318>II<48 -7E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F -9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714 -809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038E -A3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0A4381C01C013 -7113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF013 -9F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707 -000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F038 -0E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313 -F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB -078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318> -II<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005B -ABEA03C012FF90C7FC127C13247E9F18>125 DI E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmr10 10.95 71 -/Fm 71 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<127012F812FCA212741204A312 -08A21210A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5AA2123812 -30A212701260A412E0AC1260A412701230A212381218A27E120412067E7EEA008013400A -2E7BA112>I<7E12407E12307E1208120C7EA212077EA213801201A413C0AC1380A41203 -1300A25A1206A25A120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A3 -1210A31220A21240050E7C840D>44 DI<127012F8A312700505 -7C840D>I48 D<13801203120F12F31203B3A6 -EA07C0EAFFFE0F1E7C9D17>III<1306A2130EA2131E132EA2134E138EA2 -EA010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17 ->II<137C -EA0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406 -EAF807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D -17>I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E0 -5B1201A41203A76C5A131F7E9D17>III<127012F8A3 -12701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A2 -12781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB -2078A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14 -E039FF801FFE1F207F9F22>65 DI<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A -1510127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E0 -0300EB380CEB0FF01C217E9F21>IIII<90380FE0109038381C309038E002703803C00139078000F048C7127012 -1E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E39 -03C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780 -AD90B5FCEB0007AF39FFF07FF81D1F7E9E22>I -I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13C0EB -21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E9E23 ->75 D -IIIII< -B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143CA3 -143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<12FFA21203B3B3A512FFA2082D80A10D ->93 D<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -DI<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>IIII<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>IIII<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>III<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>II E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmbx12 20.736 19 -/Fn 19 122 df71 D73 -D76 D78 D82 -D85 D97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<903801FF -F0010F13FE013FEBFF809039FF801FC03901FE003F4848EB7FE0485A485A121F4848EB3F -C0ED1F80007FEC0F004990C7FCA212FFAA127F7FA2123F6D14F0121F6C6CEB01E012076C -6CEB03C06CB4EB0F806C9038C03F0090383FFFFE010F13F8010113C024267DA52B>II<49B47E01 -0F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0485A003F15 -F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F000F15F06C6C -13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013C025267DA5 -2C>II< -EA01E0EA07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512 -F0A4143D7DBC1A>105 D<13FE12FFA412071203B3B3AEB512F8A4153C7DBB1A>108 -D110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 659 a Fn(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p -75 709 1800 17 v 732 757 a Fm(Edition)16 b(4.2-b)q(eta,)e(for)h -Fl(Readline)f(Library)g Fm(V)l(ersion)i(4.2-b)q(eta.)1698 -811 y(F)l(eb)f(2001)75 2467 y Fk(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 217 a Fm(This)22 b(do)q(cumen)o(t)f(describ)q(es)i(the)f -(end)f(user)h(in)o(terface)f(of)g(the)g(GNU)g(Readline)j(Library)l(,)f -(a)e(utilit)o(y)75 271 y(whic)o(h)14 b(aids)f(in)g(the)g(consistency)h -(of)e(user)h(in)o(terface)g(across)f(discrete)h(programs)f(that)g(need) -h(to)f(pro)o(vide)75 326 y(a)j(command)g(line)i(in)o(terface.)75 -394 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 448 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -503 y(Boston,)d(MA)h(02111)f(USA)75 570 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 625 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 692 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 747 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 802 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -869 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 924 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 979 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fj(\015)i Fm(1988-2001)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 Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 149 y Fi(1)41 b(Command)28 b(Line)e(Editing)137 -271 y Fm(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fh(gnu)g Fm(command)g(line)i(editing)f(in)o(terface.)75 -403 y Fk(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -501 y Fm(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -569 y(The)h(text)f Fg(C-k)h Fm(is)g(read)g(as)f(`Con)o(trol-K')g(and)h -(describ)q(es)h(the)f(c)o(haracter)f(pro)q(duced)h(when)h(the)1831 -567 y Ff(h)p 1844 541 19 2 v 1844 569 a Fe(k)p 1844 577 -V 1860 567 a Ff(i)75 624 y Fm(k)o(ey)d(is)h(pressed)g(while)g(the)f -(Con)o(trol)g(k)o(ey)g(is)h(depressed.)137 693 y(The)g(text)g -Fg(M-k)f Fm(is)i(read)f(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)g(the)f(Meta)75 747 y(k)o(ey)e(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -745 y Ff(h)p 942 719 V 942 747 a Fe(k)p 942 755 V 958 -745 a Ff(i)987 747 y Fm(k)o(ey)g(is)h(pressed.)20 b(The)15 -b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 745 y Ff(h)p 1791 -719 72 2 v 1791 747 a Fe(AL)m(T)p 1791 755 V 1860 745 -a Ff(i)75 802 y Fm(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 800 y Ff(h)p 1225 774 V 1225 802 a Fe(AL)m(T)p 1225 -810 V 1294 800 a Ff(i)1322 802 y Fm(\(usually)i(to)e(either)i(side)g -(of)f(the)75 857 y(space)j(bar\),)f(the)388 855 y Ff(h)p -400 829 V 400 857 a Fe(AL)m(T)p 400 865 V 469 855 a Ff(i)499 -857 y Fm(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 855 y Ff(h)p -1709 829 V 1709 857 a Fe(AL)m(T)p 1709 865 V 1778 855 -a Ff(i)1808 857 y Fm(k)o(ey)75 912 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 967 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1035 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1033 y Ff(h)p 706 1007 V 706 1035 a Fe(AL)m(T)p 706 1043 -V 775 1033 a Ff(i)801 1035 y Fm(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1090 y(k)o(eystrok)o(e)f(can)i(b)q(e)g(generated)f(b)o(y)g(t)o(yping) -809 1088 y Ff(h)p 822 1062 70 2 v 822 1090 a Fe(ESC)p -822 1098 V 888 1088 a Ff(i)915 1090 y Fd(\014rst)p Fm(,)g(and)g(then)h -(t)o(yping)1339 1088 y Ff(h)p 1351 1062 19 2 v 1351 1090 -a Fe(k)p 1351 1098 V 1368 1088 a Ff(i)1383 1090 y Fm(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1145 y(as)j -Fc(metafying)k Fm(the)425 1143 y Ff(h)p 437 1117 V 437 -1145 a Fe(k)p 437 1153 V 454 1143 a Ff(i)484 1145 y Fm(k)o(ey)l(.)137 -1214 y(The)i(text)e Fg(M-C-k)h Fm(is)h(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q(duced)h(b)o(y)75 -1268 y Fc(metafying)e Fg(C-k)p Fm(.)137 1337 y(In)g(addition,)h(sev)o -(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1335 y Ff(h)p 1396 1309 -73 2 v 1396 1337 a Fe(DEL)p 1396 1345 V 1467 1335 a Ff(i)1482 -1337 y Fm(,)1514 1335 y Ff(h)p 1526 1309 70 2 v 1526 -1337 a Fe(ESC)p 1526 1345 V 1593 1335 a Ff(i)1608 1337 -y Fm(,)1640 1335 y Ff(h)p 1652 1309 72 2 v 1652 1337 -a Fe(LFD)p 1652 1345 V 1722 1335 a Ff(i)1737 1337 y Fm(,)1768 -1335 y Ff(h)p 1780 1309 70 2 v 1780 1337 a Fe(SPC)p 1780 -1345 V 1847 1335 a Ff(i)1862 1337 y Fm(,)75 1390 y Ff(h)p -87 1364 76 2 v 87 1392 a Fe(RET)p 87 1399 V 160 1390 -a Ff(i)175 1392 y Fm(,)23 b(and)306 1390 y Ff(h)p 318 -1364 74 2 v 318 1392 a Fe(T)m(AB)p 318 1399 V 390 1390 -a Ff(i)427 1392 y Fm(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1447 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1445 y Ff(h)p 1456 1419 72 2 v 1456 1447 a Fe(LFD)p 1456 -1454 V 1526 1445 a Ff(i)1560 1447 y Fm(k)o(ey)l(,)h(t)o(yping)1802 -1445 y Ff(h)p 1814 1419 49 2 v 1814 1447 a Fe(C-j)p 1814 -1454 V 1860 1445 a Ff(i)75 1501 y Fm(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1499 y Ff(h)p 886 1473 76 2 -v 886 1501 a Fe(RET)p 886 1509 V 959 1499 a Ff(i)989 -1501 y Fm(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1499 -y Ff(h)p 1397 1473 109 2 v 1397 1501 a Fe(Return)p 1397 -1509 V 1503 1499 a Ff(i)1533 1501 y Fm(or)1588 1499 y -Ff(h)p 1600 1473 86 2 v 1600 1501 a Fe(En)o(ter)p 1600 -1509 V 1684 1499 a Ff(i)1714 1501 y Fm(on)f(some)75 1556 -y(k)o(eyb)q(oards.)75 1688 y Fk(1.2)33 b(Readline)23 -b(In)n(teraction)137 1786 y Fm(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1841 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1896 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1950 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2005 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2060 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2058 y Ff(h)p 1172 2032 76 -2 v 1172 2060 a Fe(RET)p 1172 2068 V 1245 2058 a Ff(i)1260 -2060 y Fm(.)k(Y)l(ou)16 b(do)f(not)h(ha)o(v)o(e)f(to)g(b)q(e)h(at)f -(the)75 2115 y(end)k(of)e(the)h(line)i(to)d(press)563 -2113 y Ff(h)p 575 2087 V 575 2115 a Fe(RET)p 575 2122 -V 648 2113 a Ff(i)663 2115 y Fm(;)i(the)f(en)o(tire)h(line)g(is)g -(accepted)f(regardless)g(of)g(the)g(lo)q(cation)g(of)g(the)75 -2170 y(cursor)d(within)h(the)g(line.)75 2284 y Fb(1.2.1)30 -b(Readline)20 b(Bare)g(Essen)n(tials)137 2382 y Fm(In)12 -b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g(the)h(line,)h -(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 b(t)o(yp)q(ed)g(c)o(haracter)f -(app)q(ears)75 2437 y(where)16 b(the)h(cursor)f(w)o(as,)f(and)h(then)h -(the)f(cursor)g(mo)o(v)o(es)g(one)g(space)g(to)g(the)g(righ)o(t.)23 -b(If)17 b(y)o(ou)f(mist)o(yp)q(e)g(a)75 2492 y(c)o(haracter,)e(y)o(ou)h -(can)g(use)h(y)o(our)f(erase)g(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h -(delete)g(the)f(mist)o(yp)q(ed)h(c)o(haracter.)137 2560 -y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp)q(e)h(a)f(c)o(haracter,)f -(and)i(not)f(notice)h(the)f(error)g(un)o(til)i(y)o(ou)e(ha)o(v)o(e)g(t) -o(yp)q(ed)75 2615 y(sev)o(eral)g(other)f(c)o(haracters.)19 -b(In)c(that)e(case,)i(y)o(ou)f(can)g(t)o(yp)q(e)h Fg(C-b)f -Fm(to)g(mo)o(v)o(e)f(the)i(cursor)f(to)g(the)g(left,)h(and)75 -2670 y(then)h(correct)e(y)o(our)h(mistak)o(e.)20 b(Afterw)o(ards,)13 -b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g(to)g(the)g(righ)o(t)g -(with)g Fg(C-f)p Fm(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fm(2)1322 b(GNU)15 b(Readline)i(Library)137 -149 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -204 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 259 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 314 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -369 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 449 y Fg(C-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o -(haracter.)75 530 y Fg(C-f)168 b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h -(c)o(haracter.)75 608 y Ff(h)p 87 582 73 2 v 87 610 a -Fe(DEL)p 87 618 V 158 608 a Ff(i)188 610 y Fm(or)244 -608 y Ff(h)p 256 582 159 2 v 256 610 a Fe(Bac)o(kspace)p -256 618 V 412 608 a Ff(i)315 665 y Fm(Delete)h(the)f(c)o(haracter)g(to) -f(the)h(left)h(of)f(the)g(cursor.)75 745 y Fg(C-d)168 -b Fm(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -825 y(Prin)o(ting)h(c)o(haracters)315 880 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -961 y Fg(C-_)g Fm(or)f Fg(C-x)h(C-u)315 1015 y Fm(Undo)i(the)g(last)f -(editing)i(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o -(y)f(bac)o(k)h(to)f(an)g(empt)o(y)315 1070 y(line.)75 -1151 y(\(Dep)q(ending)i(on)f(y)o(our)g(con\014guration,)g(the)863 -1149 y Ff(h)p 875 1123 V 875 1151 a Fe(Bac)o(kspace)p -875 1159 V 1032 1149 a Ff(i)1063 1151 y Fm(k)o(ey)g(b)q(e)h(set)f(to)f -(delete)i(the)f(c)o(haracter)g(to)f(the)75 1206 y(left)h(of)f(the)h -(cursor)f(and)g(the)596 1204 y Ff(h)p 608 1178 73 2 v -608 1206 a Fe(DEL)p 608 1213 V 679 1204 a Ff(i)710 1206 -y Fm(k)o(ey)h(set)f(to)g(delete)h(the)g(c)o(haracter)f(underneath)h -(the)g(cursor,)f(lik)o(e)75 1260 y Fg(C-d)p Fm(,)e(rather)h(than)g(the) -g(c)o(haracter)g(to)f(the)i(left)f(of)g(the)g(cursor.\))75 -1374 y Fb(1.2.2)30 b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 -1471 y Fm(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1526 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1580 y(to)h Fg(C-b)p -Fm(,)h Fg(C-f)p Fm(,)f Fg(C-d)p Fm(,)g(and)522 1578 y -Ff(h)p 534 1552 V 534 1580 a Fe(DEL)p 534 1588 V 605 -1578 a Ff(i)619 1580 y Fm(.)23 b(Here)16 b(are)g(some)f(commands)h(for) -f(mo)o(ving)h(more)g(rapidly)h(ab)q(out)f(the)75 1635 -y(line.)75 1716 y Fg(C-a)168 b Fm(Mo)o(v)o(e)14 b(to)h(the)g(start)f -(of)h(the)g(line.)75 1796 y Fg(C-e)168 b Fm(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)75 1876 y Fg(M-f)168 -b Fm(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h -(is)h(comp)q(osed)f(of)g(letters)g(and)h(digits.)75 1957 -y Fg(M-b)168 b Fm(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2037 y Fg(C-l)168 b Fm(Clear)15 b(the)h(screen,)f(reprin)o(ting)h(the)f -(curren)o(t)g(line)i(at)e(the)g(top.)137 2118 y(Notice)e(ho)o(w)f -Fg(C-f)g Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(c)o(haracter,)g(while)i -Fg(M-f)e Fm(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)18 -b(It)13 b(is)g(a)f(lo)q(ose)75 2173 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2227 y(w)o(ords.)75 -2341 y Fb(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2438 y Fc(Killing)26 b Fm(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2493 y(usually)f(b)o(y)f Fc(y)o(anking)22 -b Fm(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2547 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 149 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fc(kill-ring)p Fm(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -204 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 259 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -314 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 380 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 458 y Fg(C-k)168 -b Fm(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 535 y -Fg(M-d)168 b Fm(Kill)15 b(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 590 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)f -Fg(M-f)p Fm(.)75 668 y Fg(M-)123 666 y Ff(h)p 135 640 -73 2 v 135 668 a Fe(DEL)p 135 675 V 206 666 a Ff(i)315 -668 y Fm(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h(the)g -(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f(to)315 -723 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 777 y Fg(M-b)p Fm(.)75 855 y Fg(C-w)168 b -Fm(Kill)18 b(from)d(the)g(cursor)h(to)f(the)g(previous)i(whitespace.)22 -b(This)16 b(is)g(di\013eren)o(t)g(than)f Fg(M-)1777 853 -y Ff(h)p 1789 827 V 1789 855 a Fe(DEL)p 1789 863 V 1860 -853 a Ff(i)315 910 y Fm(b)q(ecause)h(the)f(w)o(ord)g(b)q(oundaries)h -(di\013er.)137 987 y(Here)21 b(is)h(ho)o(w)e(to)g Fc(y)o(ank)j -Fm(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 b(Y)l(anking)21 -b(means)g(to)f(cop)o(y)h(the)g(most-)75 1042 y(recen)o(tly-killed)d -(text)d(from)f(the)i(kill)h(bu\013er.)75 1120 y Fg(C-y)168 -b Fm(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h(text)e(bac)o(k)g -(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)75 1198 -y Fg(M-y)168 b Fm(Rotate)17 b(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 1252 y(command)d(is)h Fg(C-y)f Fm(or)f Fg(M-y)p Fm(.)75 -1361 y Fb(1.2.4)30 b(Readline)20 b(Argumen)n(ts)137 1457 -y Fm(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i(argumen)o(ts)e(to)g -(Readline)i(commands.)k(Sometimes)15 b(the)g(argumen)o(t)e(acts)75 -1511 y(as)20 b(a)f(rep)q(eat)i(coun)o(t,)f(other)g(times)g(it)h(is)f -(the)g Fd(sign)j Fm(of)c(the)h(argumen)o(t)g(that)f(is)i(signi\014can)o -(t.)35 b(If)20 b(y)o(ou)75 1566 y(pass)d(a)f(negativ)o(e)h(argumen)o(t) -f(to)g(a)g(command)h(whic)o(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g -(direction,)i(that)75 1621 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o -(ard)g(direction.)28 b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o -(k)g(to)g(the)h(start)e(of)75 1676 y(the)f(line,)i(y)o(ou)e(migh)o(t)g -(t)o(yp)q(e)g(`)p Fl(M--)f(C-k)p Fm('.)137 1742 y(The)h(general)f(w)o -(a)o(y)f(to)h(pass)g(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is) -h(to)e(t)o(yp)q(e)h(meta)g(digits)h(b)q(efore)75 1797 -y(the)h(command.)k(If)c(the)f(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a) -g(min)o(us)g(sign)g(\(`)p Fl(-)p Fm('\),)d(then)j(the)f(sign)h(of)f -(the)h(argumen)o(t)75 1852 y(will)21 b(b)q(e)f(negativ)o(e.)31 -b(Once)20 b(y)o(ou)f(ha)o(v)o(e)g(t)o(yp)q(ed)g(one)g(meta)g(digit)h -(to)e(get)h(the)g(argumen)o(t)f(started,)h(y)o(ou)75 -1906 y(can)c(t)o(yp)q(e)f(the)h(remainder)g(of)f(the)g(digits,)h(and)g -(then)g(the)f(command.)20 b(F)l(or)13 b(example,)i(to)f(giv)o(e)h(the)f -Fg(C-d)75 1961 y Fm(command)19 b(an)f(argumen)o(t)g(of)g(10,)h(y)o(ou)f -(could)i(t)o(yp)q(e)f(`)p Fl(M-1)14 b(0)h(C-d)p Fm(',)k(whic)o(h)g -(will)h(delete)g(the)f(next)g(ten)75 2016 y(c)o(haracters)14 -b(on)i(the)f(input)h(line.)75 2125 y Fb(1.2.5)30 b(Searc)n(hing)21 -b(for)f(Commands)h(in)f(the)h(History)137 2220 y Fm(Readline)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 2275 y(taining)e(a)f(sp)q(eci\014ed)i -(string.)j(There)c(are)e(t)o(w)o(o)g(searc)o(h)h(mo)q(des:)20 -b Fc(incremen)o(tal)e Fm(and)e Fc(non-incremen)o(tal)p -Fm(.)137 2341 y(Incremen)o(tal)e(searc)o(hes)f(b)q(egin)h(b)q(efore)f -(the)g(user)g(has)g(\014nished)h(t)o(yping)f(the)g(searc)o(h)g(string.) -19 b(As)13 b(eac)o(h)75 2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g -(string)f(is)h(t)o(yp)q(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en) -o(try)f(from)g(the)h(history)75 2451 y(matc)o(hing)12 -b(the)g(string)g(t)o(yp)q(ed)g(so)g(far.)18 b(An)13 b(incremen)o(tal)g -(searc)o(h)f(requires)g(only)h(as)f(man)o(y)f(c)o(haracters)g(as)75 -2506 y(needed)16 b(to)d(\014nd)j(the)e(desired)i(history)e(en)o(try)l -(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o(ard)f(in)j(the)e(history)g(for)g -(a)g(particular)75 2560 y(string,)g(t)o(yp)q(e)h Fg(C-r)p -Fm(.)k(T)o(yping)d Fg(C-s)e Fm(searc)o(hes)h(forw)o(ard)e(through)h -(the)h(history)l(.)20 b(The)15 b(c)o(haracters)f(presen)o(t)75 -2615 y(in)20 b(the)f(v)m(alue)h(of)f(the)g Fl(isearch-terminators)d -Fm(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)31 b(If)19 b(that)f(v)m(ariable)i(has)f(not)f(b)q -(een)i(assigned)g(a)e(v)m(alue,)j(the)1289 2668 y Ff(h)p -1301 2642 70 2 v 1301 2670 a Fe(ESC)p 1301 2678 V 1368 -2668 a Ff(i)1402 2670 y Fm(and)e Fg(C-J)f Fm(c)o(haracters)g(will)p -eop -%%Page: 4 6 -4 5 bop 75 -58 a Fm(4)1322 b(GNU)15 b(Readline)i(Library)75 -149 y(terminate)k(an)g(incremen)o(tal)i(searc)o(h.)37 -b Fg(C-g)21 b Fm(will)i(ab)q(ort)e(an)g(incremen)o(tal)h(searc)o(h)f -(and)g(restore)g(the)75 204 y(original)16 b(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 259 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 334 y(T)l(o)g(\014nd)i -(other)e(matc)o(hing)g(en)o(tries)h(in)h(the)e(history)h(list,)g(t)o -(yp)q(e)f Fg(C-r)g Fm(or)g Fg(C-s)g Fm(as)h(appropriate.)k(This)75 -388 y(will)15 b(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i -(the)f(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g -(searc)o(h)g(string)75 443 y(t)o(yp)q(ed)19 b(so)g(far.)30 -b(An)o(y)19 b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline) -i(command)d(will)j(terminate)e(the)75 498 y(searc)o(h)10 -b(and)h(execute)g(that)f(command.)18 b(F)l(or)10 b(instance,)i(a)1063 -496 y Ff(h)p 1076 470 76 2 v 1076 498 a Fe(RET)p 1076 -506 V 1149 496 a Ff(i)1174 498 y Fm(will)g(terminate)f(the)g(searc)o(h) -f(and)h(accept)75 553 y(the)k(line,)h(thereb)o(y)f(executing)g(the)g -(command)g(from)f(the)g(history)h(list.)20 b(A)15 b(mo)o(v)o(emen)o(t)f -(command)g(will)75 608 y(terminate)h(the)g(searc)o(h,)g(mak)o(e)g(the)g -(last)g(line)i(found)f(the)f(curren)o(t)g(line,)h(and)g(b)q(egin)g -(editing.)137 682 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 737 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 792 y(con)o(ten)o(ts)15 -b(of)f(the)i(curren)o(t)f(line.)75 939 y Fk(1.3)33 b(Readline)23 -b(Init)h(File)137 1042 y Fm(Although)f(the)g(Readline)i(library)e -(comes)g(with)g(a)f(set)g(of)g(Emacs-lik)o(e)i(k)o(eybindings)g -(installed)75 1097 y(b)o(y)d(default,)h(it)f(is)h(p)q(ossible)g(to)e -(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.)39 -b(An)o(y)20 b(user)h(can)g(customize)75 1152 y(programs)15 -b(that)h(use)g(Readline)j(b)o(y)d(putting)g(commands)g(in)i(an)e -Fc(inputrc)k Fm(\014le,)d(con)o(v)o(en)o(tionally)g(in)g(his)75 -1207 y(home)g(directory)l(.)24 b(The)17 b(name)g(of)f(this)h(\014le)g -(is)g(tak)o(en)g(from)e(the)i(v)m(alue)h(of)e(the)h(en)o(vironmen)o(t)g -(v)m(ariable)75 1262 y Fl(INPUTRC)p Fm(.)i(If)c(that)g(v)m(ariable)h -(is)g(unset,)f(the)g(default)h(is)g(`)p Fl(~/.inputrc)p -Fm('.)137 1336 y(When)f(a)g(program)f(whic)o(h)h(uses)g(the)g(Readline) -i(library)f(starts)d(up,)i(the)g(init)h(\014le)g(is)f(read,)g(and)g -(the)75 1391 y(k)o(ey)g(bindings)i(are)e(set.)137 1465 -y(In)f(addition,)h(the)e Fl(C-x)i(C-r)e Fm(command)g(re-reads)h(this)g -(init)g(\014le,)h(th)o(us)e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 -1520 y(that)h(y)o(ou)h(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 -1647 y Fb(1.3.1)30 b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 -1751 y Fm(There)c(are)g(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w) -o(ed)i(in)f(the)g(Readline)i(init)f(\014le.)26 b(Blank)18 -b(lines)g(are)75 1805 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d -(a)h(`)p Fl(#)p Fm(')e(are)h(commen)o(ts.)35 b(Lines)22 -b(b)q(eginning)h(with)e(a)f(`)p Fl($)p Fm(')f(indicate)75 -1860 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 -1915 y(denote)h(v)m(ariable)i(settings)e(and)h(k)o(ey)f(bindings.)75 -2006 y(V)l(ariable)h(Settings)315 2060 y(Y)l(ou)k(can)h(mo)q(dify)g -(the)f(run-time)h(b)q(eha)o(vior)g(of)e(Readline)k(b)o(y)d(altering)h -(the)f(v)m(alues)h(of)315 2115 y(v)m(ariables)13 b(in)g(Readline)i -(using)d(the)g Fl(set)g Fm(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2170 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Fl(vi)g Fm(line)i(editing)g(commands:)435 2238 y Fl(set)23 -b(editing-mode)g(vi)315 2309 y Fm(A)15 b(great)g(deal)g(of)g(run-time)h -(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m -(ariables.)315 2396 y Fl(bell-style)555 2451 y Fm(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2506 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Fl(none)p Fm(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2560 y(`)p Fl(visible)p Fm(',)c(Readline)j(uses) -f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 2615 y(`)p Fl(audible)p Fm(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2670 y(b)q(ell.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 149 y Fl(comment-begin)555 204 y Fm(The)15 b(string)f(to)g -(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h(line)h(when)f(the)g -Fl(insert-)555 259 y(comment)f Fm(command)h(is)h(executed.)21 -b(The)15 b(default)h(v)m(alue)g(is)g Fl("#")p Fm(.)315 -338 y Fl(completion-ignore-case)555 393 y Fm(If)e(set)f(to)g(`)p -Fl(on)p Fm(',)g(Readline)j(p)q(erforms)d(\014lename)i(matc)o(hing)f -(and)g(completion)555 448 y(in)i(a)f(case-insensitiv)o(e)i(fashion.)k -(The)15 b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)315 -527 y Fl(completion-query-items)555 582 y Fm(The)d(n)o(um)o(b)q(er)h -(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g(the)f -(user)555 637 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d(to)i -(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 b(If)21 -b(the)555 691 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i(completions)f -(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -746 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f -(view)h(them;)f(otherwise,)555 801 y(they)f(are)g(simply)i(listed.)20 -b(This)13 b(v)m(ariable)g(m)o(ust)f(b)q(e)h(set)f(to)f(an)h(in)o(teger) -h(v)m(alue)555 856 y(greater)h(than)h(or)g(equal)h(to)f(0.)k(The)d -(default)f(limit)i(is)f Fl(100)p Fm(.)315 935 y Fl(convert-meta)555 -990 y Fm(If)11 b(set)g(to)g(`)p Fl(on)p Fm(',)f(Readline)j(will)g(con)o -(v)o(ert)d(c)o(haracters)h(with)g(the)g(eigh)o(th)h(bit)f(set)555 -1044 y(to)f(an)h Fh(asci)q(i)e Fm(k)o(ey)i(sequence)g(b)o(y)g -(stripping)h(the)e(eigh)o(th)h(bit)h(and)e(pre\014xing)i(an)555 -1097 y Ff(h)p 567 1071 70 2 v 567 1099 a Fe(ESC)p 567 -1107 V 634 1097 a Ff(i)666 1099 y Fm(c)o(haracter,)k(con)o(v)o(erting)h -(them)g(to)f(a)h(meta-pre\014xed)g(k)o(ey)g(sequence.)555 -1154 y(The)e(default)h(v)m(alue)h(is)e(`)p Fl(on)p Fm('.)315 -1233 y Fl(disable-completion)555 1288 y Fm(If)k(set)f(to)f(`)p -Fl(On)p Fm(',)h(Readline)j(will)f(inhibit)g(w)o(ord)e(completion.)30 -b(Completion)555 1343 y(c)o(haracters)12 b(will)j(b)q(e)f(inserted)g -(in)o(to)f(the)g(line)h(as)f(if)h(they)f(had)g(b)q(een)h(mapp)q(ed)555 -1398 y(to)h Fl(self-insert)p Fm(.)j(The)d(default)h(is)g(`)p -Fl(off)p Fm('.)315 1477 y Fl(editing-mode)555 1531 y -Fm(The)f Fl(editing-mode)d Fm(v)m(ariable)k(con)o(trols)e(whic)o(h)h -(default)g(set)f(of)g(k)o(ey)g(bind-)555 1586 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 1641 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 -1696 y(b)q(e)g(set)f(to)f(either)i(`)p Fl(emacs)p Fm(')e(or)h(`)p -Fl(vi)p Fm('.)315 1775 y Fl(enable-keypad)555 1830 y -Fm(When)d(set)f(to)h(`)p Fl(on)p Fm(',)e(Readline)k(will)g(try)d(to)g -(enable)i(the)f(application)h(k)o(eypad)555 1885 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 1939 y(The)j(default)h(is)g(`)p -Fl(off)p Fm('.)315 2019 y Fl(expand-tilde)555 2073 y -Fm(If)e(set)g(to)f(`)p Fl(on)p Fm(',)f(tilde)k(expansion)e(is)h(p)q -(erformed)f(when)g(Readline)i(attempts)555 2128 y(w)o(ord)f -(completion.)21 b(The)15 b(default)h(is)f(`)p Fl(off)p -Fm('.)315 2207 y Fl(horizontal-scroll-mode)555 2262 y -Fm(This)k(v)m(ariable)g(can)f(b)q(e)g(set)g(to)f(either)i(`)p -Fl(on)p Fm(')e(or)g(`)p Fl(off)p Fm('.)27 b(Setting)19 -b(it)f(to)f(`)p Fl(on)p Fm(')555 2317 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 -2372 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 2426 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 2481 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Fl(off)p Fm('.)315 2560 y Fl(input-meta)555 2615 y Fm(If)h(set)f(to)g -(`)p Fl(on)p Fm(',)f(Readline)k(will)g(enable)e(eigh)o(t-bit)h(input)f -(\(it)g(will)h(not)e(clear)555 2670 y(the)20 b(eigh)o(th)g(bit)g(in)h -(the)f(c)o(haracters)f(it)h(reads\),)g(regardless)g(of)g(what)f(the)p -eop -%%Page: 6 8 -6 7 bop 75 -58 a Fm(6)1322 b(GNU)15 b(Readline)i(Library)555 -149 y(terminal)k(claims)g(it)f(can)g(supp)q(ort.)34 b(The)20 -b(default)h(v)m(alue)g(is)g(`)p Fl(off)p Fm('.)33 b(The)555 -204 y(name)15 b Fl(meta-flag)f Fm(is)i(a)f(synon)o(ym)g(for)f(this)i(v) -m(ariable.)315 289 y Fl(isearch-terminators)555 344 y -Fm(The)26 b(string)g(of)f(c)o(haracters)g(that)g(should)i(terminate)f -(an)g(incremen)o(tal)555 399 y(searc)o(h)12 b(without)h(subsequen)o -(tly)g(executing)h(the)e(c)o(haracter)g(as)g(a)g(command)555 -454 y(\(see)22 b(Section)h(1.2.5)e([Searc)o(hing],)j(page)e(3\).)40 -b(If)23 b(this)g(v)m(ariable)g(has)f(not)555 509 y(b)q(een)17 -b(giv)o(en)f(a)g(v)m(alue,)g(the)g(c)o(haracters)1247 -507 y Ff(h)p 1259 481 70 2 v 1259 509 a Fe(ESC)p 1259 -516 V 1326 507 a Ff(i)1357 509 y Fm(and)g Fg(C-J)f Fm(will)i(terminate) -f(an)555 563 y(incremen)o(tal)g(searc)o(h.)315 649 y -Fl(keymap)96 b Fm(Sets)19 b(Readline's)j(idea)e(of)f(the)g(curren)o(t)h -(k)o(eymap)f(for)f(k)o(ey)i(binding)h(com-)555 703 y(mands.)41 -b(Acceptable)23 b Fl(keymap)f Fm(names)g(are)f Fl(emacs)p -Fm(,)i Fl(emacs-standard)p Fm(,)555 758 y Fl(emacs-meta)p -Fm(,)49 b Fl(emacs-ctlx)p Fm(,)g Fl(vi)p Fm(,)h Fl(vi-move)p -Fm(,)f Fl(vi-command)p Fm(,)g(and)555 813 y Fl(vi-insert)p -Fm(.)31 b Fl(vi)20 b Fm(is)g(equiv)m(alen)o(t)h(to)e -Fl(vi-command)p Fm(;)g Fl(emacs)g Fm(is)h(equiv)m(alen)o(t)555 -868 y(to)15 b Fl(emacs-standard)p Fm(.)20 b(The)d(default)f(v)m(alue)h -(is)g Fl(emacs)p Fm(.)k(The)16 b(v)m(alue)h(of)f(the)555 -923 y Fl(editing-mode)e Fm(v)m(ariable)i(also)f(a\013ects)g(the)g -(default)h(k)o(eymap.)315 1008 y Fl(mark-directories)555 -1063 y Fm(If)j(set)g(to)g(`)p Fl(on)p Fm(',)f(completed)i(directory)g -(names)f(ha)o(v)o(e)f(a)h(slash)h(app)q(ended.)555 1117 -y(The)15 b(default)h(is)g(`)p Fl(on)p Fm('.)315 1203 -y Fl(mark-modified-lines)555 1258 y Fm(This)j(v)m(ariable,)g(when)g -(set)e(to)h(`)p Fl(on)p Fm(',)f(causes)h(Readline)i(to)d(displa)o(y)i -(an)f(as-)555 1312 y(terisk)f(\(`)p Fl(*)p Fm('\))e(at)i(the)f(start)g -(of)h(history)f(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q -(di\014ed.)555 1367 y(This)e(v)m(ariable)g(is)g(`)p Fl(off)p -Fm(')e(b)o(y)h(default.)315 1452 y Fl(output-meta)555 -1507 y Fm(If)j(set)f(to)g(`)p Fl(on)p Fm(',)g(Readline)j(will)g(displa) -o(y)f(c)o(haracters)d(with)j(the)e(eigh)o(th)h(bit)555 -1562 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 1617 y(default)16 -b(is)f(`)p Fl(off)p Fm('.)315 1702 y Fl(print-completions-horizont)o -(ally)555 1757 y Fm(If)d(set)g(to)f(`)p Fl(on)p Fm(',)h(Readline)i -(will)f(displa)o(y)h(completions)f(with)f(matc)o(hes)f(sorted)555 -1812 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 1866 y(The)15 b(default)h(is)g(`)p -Fl(off)p Fm('.)315 1952 y Fl(show-all-if-ambiguous)555 -2006 y Fm(This)g(alters)e(the)i(default)f(b)q(eha)o(vior)h(of)e(the)h -(completion)h(functions.)21 b(If)15 b(set)555 2061 y(to)e(`)p -Fl(on)p Fm(',)g(w)o(ords)g(whic)o(h)h(ha)o(v)o(e)g(more)f(than)g(one)h -(p)q(ossible)i(completion)f(cause)555 2116 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 2171 y(The)c(default)h(v)m(alue)h(is)e(`)p -Fl(off)p Fm('.)315 2256 y Fl(visible-stats)555 2311 y -Fm(If)h(set)g(to)f(`)p Fl(on)p Fm(',)g(a)h(c)o(haracter)f(denoting)h(a) -g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555 -2366 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c -(default)g(is)f(`)p Fl(off)p Fm('.)75 2451 y(Key)h(Bindings)315 -2506 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h -(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20 -b(y)o(ou)315 2560 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f -(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 -b(The)14 b(follo)o(wing)315 2615 y(sections)k(con)o(tain)h(tables)f(of) -f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y) -l(,)315 2670 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 149 y(Once)19 b(y)o(ou)f(kno)o(w)f(the)h(name)g(of)g(the)g -(command,)g(simply)h(place)g(on)f(a)f(line)j(in)f(the)f(init)315 -204 y(\014le)g(the)f(name)g(of)f(the)h(k)o(ey)g(y)o(ou)f(wish)i(to)e -(bind)i(the)f(command)g(to,)f(a)g(colon,)i(and)f(then)315 -259 y(the)f(name)g(of)g(the)g(command.)22 b(The)16 b(name)g(of)g(the)g -(k)o(ey)f(can)i(b)q(e)f(expressed)h(in)g(di\013eren)o(t)315 -314 y(w)o(a)o(ys,)d(dep)q(ending)j(on)e(what)g(y)o(ou)g(\014nd)h(most)e -(comfortable.)315 392 y Fc(k)o(eyname)s Fm(:)19 b Fc(function-name)g -Fm(or)c Fc(macro)555 447 y(k)o(eyname)i Fm(is)e(the)f(name)h(of)f(a)g -(k)o(ey)g(sp)q(elled)j(out)d(in)h(English.)21 b(F)l(or)13 -b(example:)675 511 y Fl(Control-u:)22 b(universal-argument)675 -563 y(Meta-Rubout:)g(backward-kill-word)675 615 y(Control-o:)g(">)i -(output")555 682 y Fm(In)c(the)f(ab)q(o)o(v)o(e)g(example,)i -Fg(C-u)e Fm(is)h(b)q(ound)g(to)f(the)g(function)h Fl(universal-)555 -736 y(argument)p Fm(,)e Fg(M-DEL)h Fm(is)g(b)q(ound)h(to)e(the)h -(function)h Fl(backward-kill-word)p Fm(,)555 791 y(and)g -Fg(C-o)f Fm(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g(expressed)h(on)g -(the)f(righ)o(t)h(hand)555 846 y(side)c(\(that)e(is,)i(to)e(insert)i -(the)f(text)g(`)p Fl(>)f(output)p Fm(')g(in)o(to)i(the)f(line\).)555 -913 y(A)k(n)o(um)o(b)q(er)f(of)g(sym)o(b)q(olic)i(c)o(haracter)e(names) -g(are)g(recognized)i(while)g(pro-)555 968 y(cessing)13 -b(this)f(k)o(ey)g(binding)h(syn)o(tax:)18 b Fc(DEL)p -Fm(,)11 b Fc(ESC)p Fm(,)h Fc(ESCAPE)p Fm(,)f Fc(LFD)p -Fm(,)g Fc(NEW-)555 1022 y(LINE)p Fm(,)16 b Fc(RET)p Fm(,)f -Fc(RETURN)p Fm(,)g Fc(R)o(UBOUT)p Fm(,)h Fc(SP)l(A)o(CE)p -Fm(,)f Fc(SPC)p Fm(,)f(and)i Fc(T)l(AB)p Fm(.)315 1101 -y Fl(")p Fc(k)o(eyseq)q Fl(")p Fm(:)k Fc(function-name)e -Fm(or)d Fc(macro)555 1156 y(k)o(eyseq)i Fm(di\013ers)e(from)g -Fc(k)o(eyname)j Fm(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g -(an)f(en-)555 1211 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 -1265 y(double)e(quotes.)j(Some)c Fh(gnu)g Fm(Emacs)f(st)o(yle)h(k)o(ey) -g(escap)q(es)g(can)g(b)q(e)g(used,)g(as)555 1320 y(in)j(the)f(follo)o -(wing)g(example,)h(but)f(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are) -f(not)555 1375 y(recognized.)675 1439 y Fl("\\C-u":)23 -b(universal-argument)675 1491 y("\\C-x\\C-r":)f(re-read-init-file)675 -1543 y("\\e[11~":)h("Function)f(Key)i(1")555 1609 y Fm(In)33 -b(the)f(ab)q(o)o(v)o(e)g(example,)37 b Fg(C-u)32 b Fm(is)h(again)f(b)q -(ound)h(to)f(the)g(function)555 1664 y Fl(universal-argument)19 -b Fm(\(just)j(as)f(it)h(w)o(as)f(in)i(the)f(\014rst)f(example\),)j(`)p -Fg(C-x)555 1719 y(C-r)p Fm(')c(is)h(b)q(ound)g(to)f(the)h(function)g -Fl(re-read-init-file)p Fm(,)f(and)g(`)1731 1717 y Ff(h)p -1743 1691 70 2 v 1743 1719 a Fe(ESC)p 1743 1727 V 1810 -1717 a Ff(i)15 b(h)p 1852 1691 10 2 v 1852 1719 a Fe([)p -1852 1727 V 1860 1717 a Ff(i)555 1772 y(h)p 567 1746 -18 2 v 567 1774 a Fe(1)p 567 1781 V 583 1772 a Ff(i)g(h)p -625 1746 V 625 1774 a Fe(1)p 625 1781 V 640 1772 a Ff(i)g(h)p -683 1746 24 2 v 683 1774 a Fl(~)p 683 1781 V 704 1772 -a Ff(i)719 1774 y Fm(')g(is)h(b)q(ound)g(to)e(insert)i(the)f(text)g(`)p -Fl(Function)f(Key)g(1)p Fm('.)315 1852 y(The)h(follo)o(wing)h -Fh(gnu)e Fm(Emacs)h(st)o(yle)g(escap)q(e)h(sequences)g(are)e(a)o(v)m -(ailable)j(when)e(sp)q(ecifying)315 1907 y(k)o(ey)g(sequences:)315 -1986 y Fg(\\C-)168 b Fm(con)o(trol)15 b(pre\014x)315 -2064 y Fg(\\M-)168 b Fm(meta)15 b(pre\014x)315 2143 y -Fg(\\e)192 b Fm(an)15 b(escap)q(e)h(c)o(haracter)315 -2222 y Fg(\\\\)192 b Fm(bac)o(kslash)315 2301 y Fg(\\)p -Fl(")555 2299 y Ff(h)p 567 2272 V 567 2301 a Fl(")p 567 -2308 V 589 2299 a Ff(i)604 2301 y Fm(,)15 b(a)f(double)j(quotation)e -(mark)315 2379 y Fg(\\')555 2377 y Ff(h)p 567 2351 10 -2 v 567 2379 a Fe(')p 567 2387 V 575 2377 a Ff(i)590 -2379 y Fm(,)g(a)f(single)j(quote)e(or)g(ap)q(ostrophe)315 -2458 y(In)f(addition)h(to)f(the)f Fh(gnu)h Fm(Emacs)g(st)o(yle)f(escap) -q(e)i(sequences,)g(a)e(second)i(set)e(of)h(bac)o(kslash)315 -2513 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 2591 y -Fl(\\a)192 b Fm(alert)15 b(\(b)q(ell\))315 2670 y Fl(\\b)192 -b Fm(bac)o(kspace)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fm(8)1322 b(GNU)15 b(Readline)i(Library)315 -149 y Fl(\\d)192 b Fm(delete)315 224 y Fl(\\f)g Fm(form)14 -b(feed)315 298 y Fl(\\n)192 b Fm(newline)315 372 y Fl(\\r)g -Fm(carriage)15 b(return)315 447 y Fl(\\t)192 b Fm(horizon)o(tal)16 -b(tab)315 521 y Fl(\\v)192 b Fm(v)o(ertical)16 b(tab)315 -595 y Fl(\\)p Fc(nnn)141 b Fm(the)14 b(c)o(haracter)f(whose)h -Fh(asci)q(i)e Fm(co)q(de)j(is)f(the)g(o)q(ctal)g(v)m(alue)h -Fc(nnn)f Fm(\(one)g(to)f(three)555 650 y(digits\))315 -724 y Fl(\\x)p Fc(nnn)117 b Fm(the)16 b(c)o(haracter)f(whose)h -Fh(asci)q(i)f Fm(co)q(de)i(is)f(the)h(hexadecimal)g(v)m(alue)g -Fc(nnn)g Fm(\(one)555 779 y(to)e(three)g(digits\))315 -853 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 908 -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 963 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 1018 y(will)i(quote)d(an)o(y)h(other)g(c)o(haracter) -f(in)i(the)f(macro)f(text,)h(including)j(`)p Fl(")p Fm(')c(and)h(`)p -Fl(')p Fm('.)34 b(F)l(or)315 1073 y(example,)14 b(the)f(follo)o(wing)g -(binding)i(will)g(mak)o(e)d(`)p Fg(C-x)i Fl(\\)p Fm(')f(insert)g(a)g -(single)h(`)p Fl(\\)p Fm(')e(in)o(to)h(the)g(line:)435 -1134 y Fl("\\C-x\\\\":)23 b("\\\\")75 1238 y Fb(1.3.2)30 -b(Conditional)20 b(Init)g(Constructs)137 1332 y Fm(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 1387 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 1441 y(the)e(result)h -(of)f(tests.)k(There)c(are)g(four)g(parser)g(directiv)o(es)h(used.)75 -1516 y Fl($if)168 b Fm(The)16 b Fl($if)f Fm(construct)g(allo)o(ws)h -(bindings)i(to)d(b)q(e)h(made)g(based)g(on)f(the)h(editing)h(mo)q(de,)f -(the)315 1570 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 -1625 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 -1699 y Fl(mode)144 b Fm(The)11 b Fl(mode=)e Fm(form)h(of)g(the)h -Fl($if)f Fm(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline) -555 1754 y(is)k(in)h Fl(emacs)e Fm(or)g Fl(vi)g Fm(mo)q(de.)20 -b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555 -1809 y(`)p Fl(set)f(keymap)p Fm(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Fl(emacs-)555 1864 y(standard)d -Fm(and)i Fl(emacs-ctlx)e Fm(k)o(eymaps)h(only)i(if)f(Readline)h(is)f -(starting)f(out)555 1919 y(in)k Fl(emacs)f Fm(mo)q(de.)315 -1993 y Fl(term)144 b Fm(The)14 b Fl(term=)e Fm(form)h(ma)o(y)g(b)q(e)h -(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555 -2048 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 2103 y(function)13 -b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g -(the)g(`)p Fl(=)p Fm(')f(is)h(tested)g(against)555 2157 -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 2212 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Fl(-)p Fm('.)24 b(This)17 b(allo)o(ws)g -Fl(sun)f Fm(to)g(matc)o(h)h(b)q(oth)f Fl(sun)h Fm(and)555 -2267 y Fl(sun-cmd)p Fm(,)d(for)g(instance.)315 2341 y -Fl(application)555 2396 y Fm(The)d Fc(application)i Fm(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2451 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Fc(application)555 2506 y(name)p -Fm(,)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 -2560 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 2615 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 2670 y(previous)j(w)o(ord)e(in)i(Bash:)p -eop -%%Page: 9 11 -9 10 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)675 149 y Fl($if)23 b(Bash)675 201 y(#)h(Quote)f(the)g(current)g -(or)h(previous)f(word)675 253 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -305 y($endif)75 385 y($endif)96 b Fm(This)16 b(command,)e(as)h(seen)h -(in)g(the)f(previous)h(example,)g(terminates)f(an)g Fl($if)f -Fm(command.)75 465 y Fl($else)120 b Fm(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Fl($if)e Fm(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)75 544 y Fl($include)48 b Fm(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 599 y(bindings)j(from)e(that)f(\014le.)435 -663 y Fl($include)23 b(/etc/inputrc)75 775 y Fb(1.3.3)30 -b(Sample)20 b(Init)h(File)137 872 y Fm(Here)16 b(is)g(an)f(example)h -(of)f(an)g Fc(inputrc)k Fm(\014le.)i(This)16 b(illustrates)g(k)o(ey)f -(binding,)i(v)m(ariable)f(assignmen)o(t,)75 927 y(and)f(conditional)i -(syn)o(tax.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fm(10)1299 b(GNU)15 b(Readline)i(Library)195 -201 y Fl(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 253 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -305 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 357 -y(#)195 409 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 461 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 513 y(#)195 565 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -616 y(#)i(/etc/Inputrc)195 668 y($include)f(/etc/Inputrc)195 -772 y(#)195 824 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 928 y(set)g(editing-mode)g(emacs)195 1032 y($if)g(mode=emacs)195 -1135 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1145 21 38 v -195 1239 a(#)195 1291 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1343 y(#)195 1395 y(#"\\M-OD":)190 b(backward-char)195 -1447 y(#"\\M-OC":)g(forward-char)195 1499 y(#"\\M-OA":)g -(previous-history)195 1550 y(#"\\M-OB":)g(next-history)195 -1602 y(#)195 1654 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1706 y(#)195 1758 y("\\M-[D":)190 b(backward-char)195 -1810 y("\\M-[C":)g(forward-char)195 1862 y("\\M-[A":)g -(previous-history)195 1914 y("\\M-[B":)g(next-history)195 -1966 y(#)195 2017 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2069 y(#)195 2121 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2173 y(#"\\M-\\C-OC":)g(forward-char)195 2225 y(#"\\M-\\C-OA":)g -(previous-history)195 2277 y(#"\\M-\\C-OB":)g(next-history)195 -2329 y(#)195 2381 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2433 y(#)195 2484 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2536 y(#"\\M-\\C-[C":)g(forward-char)195 2588 y(#"\\M-\\C-[A":)g -(previous-history)195 2640 y(#"\\M-\\C-[B":)g(next-history)p -eop -%%Page: 11 13 -11 12 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 201 y Fl(C-q:)23 b(quoted-insert)195 305 y($endif)195 -409 y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h -(the)f(default.)195 461 y(TAB:)g(complete)195 565 y(#)h(Macros)f(that)g -(are)h(convenient)e(for)h(shell)h(interaction)195 616 -y($if)f(Bash)195 668 y(#)h(edit)f(the)g(path)195 720 -y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 -772 y(#)h(prepare)f(to)g(type)h(a)f(quoted)g(word)h(--)f(insert)g(open) -h(and)f(close)g(double)g(quotes)195 824 y(#)h(and)f(move)g(to)h(just)f -(after)h(the)f(open)g(quote)195 876 y("\\C-x\\"":)g("\\"\\"\\C-b")195 -928 y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f -(in)i(sequences)f(and)g(macros\))195 980 y("\\C-x\\\\":)g("\\\\")195 -1032 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1083 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1135 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1187 y("\\C-xr":)f(redraw-current-line)195 1239 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1291 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1343 y($endif)195 -1447 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1499 y(set)f(bell-style)g(visible)195 1602 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1654 -y(set)f(input-meta)g(on)195 1758 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1810 y(#)h(prefix-meta)e(sequences)195 1862 y(set)h(convert-meta)g(off) -195 1966 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2017 y(#)h(as)f(meta-prefixed)f -(characters)195 2069 y(set)h(output-meta)g(on)195 2173 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2225 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2277 y(set)g(completion-query-items)e -(150)195 2381 y(#)j(For)f(FTP)195 2433 y($if)g(Ftp)195 -2484 y("\\C-xg":)g("get)g(\\M-?")195 2536 y("\\C-xt":)g("put)g(\\M-?") -195 2588 y("\\M-.":)g(yank-last-arg)195 2640 y($endif)p -eop -%%Page: 12 14 -12 13 bop 75 -58 a Fm(12)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fk(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -247 y Fm(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -315 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g -(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29 -b(In)75 369 y(the)15 b(follo)o(wing)h(descriptions,)g -Fc(p)q(oin)o(t)h Fm(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Fc(mark)h Fm(refers)e(to)f(a)75 424 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Fl(set-mark)f Fm(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 479 y(referred)h(to)g(as)g(the)g -Fc(region)p Fm(.)75 593 y Fb(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 716 y Fl(beginning-of-line)13 -b(\(C-a\))315 771 y Fm(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 864 y Fl(end-of-line)f(\(C-e\))315 -919 y Fm(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1012 y Fl(forward-char)f(\(C-f\))315 1067 y Fm(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1160 y Fl(backward-char)e(\(C-b\))315 -1215 y Fm(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1309 y Fl(forward-word)f(\(M-f\))315 1363 y Fm(Mo)o(v)o(e)g(forw)o(ard) -g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q -(osed)i(of)f(letters)g(and)315 1418 y(digits.)75 1512 -y Fl(backward-word)e(\(M-b\))315 1566 y Fm(Mo)o(v)o(e)j(bac)o(k)g(to)h -(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24 -b(W)l(ords)16 b(are)h(comp)q(osed)315 1621 y(of)e(letters)g(and)g -(digits.)75 1715 y Fl(clear-screen)f(\(C-l\))315 1769 -y Fm(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,) -i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315 -1824 y(of)i(the)g(screen.)75 1918 y Fl(redraw-current-line)e(\(\))315 -1972 y Fm(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2086 y Fb(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2209 y Fl(accept-line)14 b(\(Newline)g(or)h(Return\))315 -2264 y Fm(Accept)j(the)g(line)h(regardless)f(of)f(where)h(the)g(cursor) -f(is.)27 b(If)18 b(this)g(line)h(is)g(non-empt)o(y)l(,)f(it)315 -2319 y(ma)o(y)d(b)q(e)i(added)f(to)g(the)g(history)g(list)g(for)g -(future)g(recall)h(with)f Fl(add_history\(\))p Fm(.)k(If)d(this)315 -2374 y(line)f(is)f(a)f(mo)q(di\014ed)i(history)f(line,)h(then)f -(restore)f(the)g(history)h(line)h(to)e(its)h(original)g(state.)75 -2467 y Fl(previous-history)e(\(C-p\))315 2522 y Fm(Mo)o(v)o(e)h(`up')h -(through)g(the)g(history)g(list.)75 2615 y Fl(next-history)f(\(C-n\)) -315 2670 y Fm(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.) -p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 149 y Fl(beginning-of-history)12 b(\(M-<\))315 -204 y Fm(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 307 y Fl(end-of-history)e(\(M->\))315 362 y Fm(Mo)o(v)o(e)h(to)h -(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i -(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 466 y Fl -(reverse-search-history)c(\(C-r\))315 520 y Fm(Searc)o(h)k(bac)o(kw)o -(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h -(`up')f(through)g(the)h(his-)315 575 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 678 -y Fl(forward-search-history)c(\(C-s\))315 733 y Fm(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 788 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 891 -y Fl(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -946 y Fm(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t) -f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -1001 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 1056 -y(user.)75 1159 y Fl(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1214 y Fm(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1268 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1323 y(user.)75 1427 y Fl(history-search-forward)f(\(\))315 -1481 y Fm(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1536 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1591 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1694 y Fl(history-search-backward)c(\(\))315 1749 y Fm(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1804 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -1859 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1962 y Fl(yank-nth-arg)e(\(M-C-y\))315 2017 y Fm(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 2071 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Fc(n)p Fm(,)i(insert)f(the)h -Fc(n)p Fm(th)f(w)o(ord)g(from)g(the)g(previous)315 2126 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -2181 y(argumen)o(t)g(inserts)i(the)f Fc(n)p Fm(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2284 y -Fl(yank-last-arg)d(\(M-.)i(or)g(M-_\))315 2339 y Fm(Insert)j(last)f -(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f -(of)g(the)g(previous)315 2394 y(history)e(en)o(try\).)20 -b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g -Fl(yank-nth-arg)p Fm(.)j(Succes-)315 2449 y(siv)o(e)f(calls)g(to)f -Fl(yank-last-arg)e Fm(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g -(list,)i(inserting)f(the)315 2503 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2630 y Fb(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fm(14)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fl(delete-char)d(\(C-d\))315 204 y Fm(Delete)j(the)f(c)o -(haracter)g(under)h(the)f(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e -(the)i(b)q(eginning)h(of)e(the)315 259 y(line,)j(there)e(are)g(no)g(c)o -(haracters)f(in)i(the)g(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o -(yp)q(ed)g(w)o(as)f(not)315 314 y(b)q(ound)g(to)f Fl(delete-char)p -Fm(,)e(then)j(return)f Fh(eof)p Fm(.)75 406 y Fl(backward-delete-char)d -(\(Rubout\))315 460 y Fm(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the) -f(cursor.)j(A)c(n)o(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 -515 y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -607 y Fl(forward-backward-delete-ch)o(ar)12 b(\(\))315 -662 y Fm(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h -(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315 -717 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 -771 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 863 -y Fl(quoted-insert)e(\(C-q)i(or)g(C-v\))315 918 y Fm(Add)j(the)f(next)g -(c)o(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26 -b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 973 -y(sequences)f(lik)o(e)h Fg(C-q)p Fm(,)d(for)h(example.)75 -1065 y Fl(tab-insert)f(\(M-)401 1063 y Ff(h)p 412 1037 -74 2 v 412 1065 a Fe(T)m(AB)p 412 1072 V 484 1063 a Ff(i)499 -1065 y Fl(\))315 1119 y Fm(Insert)h(a)g(tab)g(c)o(haracter.)75 -1211 y Fl(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...)o(\))315 -1266 y Fm(Insert)g(y)o(ourself.)75 1358 y Fl(transpose-chars)e(\(C-t\)) -315 1413 y Fm(Drag)i(the)h(c)o(haracter)f(b)q(efore)h(the)h(cursor)e -(forw)o(ard)g(o)o(v)o(er)g(the)h(c)o(haracter)f(at)h(the)g(cursor,)315 -1467 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 1522 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 1577 y(ha)o(v)o(e)k(no)g(e\013ect.)75 -1669 y Fl(transpose-words)e(\(M-t\))315 1724 y Fm(Drag)i(the)h(w)o(ord) -g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g(w)o(ord)f(after)h(p)q(oin)o -(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f(that)315 1778 -y(w)o(ord)f(as)f(w)o(ell.)75 1870 y Fl(upcase-word)g(\(M-u\))315 -1925 y Fm(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o(wing\))h(w)o -(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp)q(er-)315 -1980 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 2072 y Fl(downcase-word)d(\(M-l\))315 -2126 y Fm(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h -(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o -(ercase)315 2181 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 2273 y Fl(capitalize-word)e(\(M-c\))315 -2328 y Fm(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o -(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315 -2383 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 2494 y Fb(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2615 y Fl(kill-line)14 b(\(C-k\))315 2670 -y Fm(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 149 y Fl(backward-kill-line)13 b(\(C-x)h(Rubout\))315 -204 y Fm(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 295 y Fl(unix-line-discard)e(\(C-u\))315 349 -y Fm(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)75 440 y Fl(kill-whole-line)e -(\(\))315 495 y Fm(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o -(t)f(line,)j(no)e(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 -b(default,)h(this)f(is)315 549 y(un)o(b)q(ound.)75 640 -y Fl(kill-word)c(\(M-d\))315 695 y Fm(Kill)j(from)d(p)q(oin)o(t)h(to)f -(the)h(end)g(of)f(the)h(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o -(een)g(w)o(ords,)e(to)i(the)f(end)315 750 y(of)h(the)g(next)g(w)o(ord.) -20 b(W)l(ord)14 b(b)q(oundaries)j(are)e(the)g(same)g(as)g -Fl(forward-word)p Fm(.)75 840 y Fl(backward-kill-word)e(\(M-)592 -838 y Ff(h)p 603 812 73 2 v 603 840 a Fe(DEL)p 603 848 -V 674 838 a Ff(i)689 840 y Fl(\))315 895 y Fm(Kill)k(the)d(w)o(ord)g(b) -q(ehind)i(p)q(oin)o(t.)21 b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h -(same)f(as)g Fl(backward-word)p Fm(.)75 985 y Fl(unix-word-rubout)f -(\(C-w\))315 1040 y Fm(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o -(t,)e(using)h(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23 -b(The)16 b(killed)315 1095 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 1185 y Fl(delete-horizontal-space)c(\(\))315 -1240 y Fm(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k -(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1330 -y Fl(kill-region)e(\(\))315 1385 y Fm(Kill)j(the)f(text)e(in)i(the)g -(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un) -o(b)q(ound.)75 1476 y Fl(copy-region-as-kill)d(\(\))315 -1530 y Fm(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 1585 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1676 y Fl(copy-backward-word)d(\(\))315 1730 -y Fm(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -1785 y(same)c(as)g Fl(backward-word)p Fm(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 1876 y Fl(copy-forward-word)d(\(\)) -315 1930 y Fm(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f -(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e -(the)315 1985 y(same)g(as)g Fl(forward-word)p Fm(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 2076 y Fl(yank)f(\(C-y\))315 -2131 y Fm(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75 -2221 y Fl(yank-pop)f(\(M-y\))315 2276 y Fm(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 2331 y(command)d(is)h Fl(yank)e -Fm(or)h Fl(yank-pop)p Fm(.)75 2441 y Fb(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2560 y Fl(digit-argument)13 -b(\()p Fg(M-0)p Fl(,)i Fg(M-1)p Fl(,)f(...)h Fg(M--)p -Fl(\))315 2615 y Fm(Add)f(this)g(digit)g(to)f(the)h(argumen)o(t)e -(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new)h(argumen)o(t.)315 -2670 y Fg(M--)h Fm(starts)f(a)h(negativ)o(e)g(argumen)o(t.)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fm(16)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fl(universal-argument)c(\(\))315 204 y Fm(This)g(is)h(another)e -(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -259 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 314 -y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Fl(universal-argument)315 369 -y Fm(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h -(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -423 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 -478 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 -533 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 -588 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 -643 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 745 y Fb(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 857 y Fl(complete)14 b(\()305 855 y Ff(h)p 317 -828 74 2 v 317 857 a Fe(T)m(AB)p 317 864 V 389 855 a -Ff(i)404 857 y Fl(\))315 911 y Fm(A)o(ttempt)c(to)h(p)q(erform)g -(completion)i(on)e(the)g(text)g(b)q(efore)h(p)q(oin)o(t.)19 -b(The)11 b(actual)h(completion)315 966 y(p)q(erformed)j(is)h -(application-sp)q(eci\014)q(c.)23 b(The)15 b(default)h(is)g(\014lename) -g(completion.)75 1049 y Fl(possible-completions)c(\(M-?\))315 -1103 y Fm(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(the)f(cursor.)75 1186 y Fl(insert-completions)e(\(M-*\))315 -1241 y Fm(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) -q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -1295 y(b)o(y)f Fl(possible-completions)p Fm(.)75 1378 -y Fl(menu-complete)e(\(\))315 1433 y Fm(Similar)g(to)f -Fl(complete)p Fm(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 1487 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 Fl(menu-complete)315 1542 y Fm(steps)h(through)g -(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 1597 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 1652 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Fc(n)g Fm(mo)o(v)o(es)g Fc(n)g Fm(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1707 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 1761 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)1067 1759 y Ff(h)p 1079 1733 V -1079 1761 a Fe(T)m(AB)p 1079 1769 V 1150 1759 a Ff(i)1165 -1761 y Fm(,)f(but)h(is)f(un)o(b)q(ound)i(b)o(y)e(default.)75 -1844 y Fl(delete-char-or-list)e(\(\))315 1899 y Fm(Deletes)h(the)f(c)o -(haracter)g(under)h(the)g(cursor)f(if)h(not)f(at)g(the)g(b)q(eginning)j -(or)d(end)h(of)f(the)g(line)315 1954 y(\(lik)o(e)i Fl(delete-char)p -Fm(\).)j(If)d(at)f(the)h(end)g(of)f(the)g(line,)i(b)q(eha)o(v)o(es)f -(iden)o(tically)i(to)d Fl(possible-)315 2008 y(completions)p -Fm(.)k(This)e(command)f(is)h(un)o(b)q(ound)g(b)o(y)f(default.)75 -2111 y Fb(1.4.7)30 b(Keyb)r(oard)20 b(Macros)75 2222 -y Fl(start-kbd-macro)13 b(\(C-x)i(\(\))315 2277 y Fm(Begin)h(sa)o(ving) -f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o(to)f(the)g(curren)o(t)g(k)o -(eyb)q(oard)g(macro.)75 2360 y Fl(end-kbd-macro)e(\(C-x)i(\)\))315 -2414 y Fm(Stop)f(sa)o(ving)f(the)h(c)o(haracters)f(t)o(yp)q(ed)h(in)o -(to)f(the)h(curren)o(t)g(k)o(eyb)q(oard)f(macro)g(and)h(sa)o(v)o(e)f -(the)315 2469 y(de\014nition.)75 2552 y Fl(call-last-kbd-macro)g(\(C-x) -h(e\))315 2606 y Fm(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h -(macro)f(de\014ned,)i(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the) -315 2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k) -o(eyb)q(oard.)p eop -%%Page: 17 19 -17 18 bop 75 -58 a Fm(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 149 y Fb(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -265 y Fl(re-read-init-file)13 b(\(C-x)h(C-r\))315 320 -y Fm(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Fc(inputrc)k -Fm(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 374 y(assignmen)o(ts)k(found)h(there.)75 -461 y Fl(abort)e(\(C-g\))315 515 y Fm(Ab)q(ort)f(the)g(curren)o(t)h -(editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s -(ject)e(to)g(the)315 570 y(setting)i(of)g Fl(bell-style)p -Fm(\).)75 657 y Fl(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fc(x)p Fl(,)h(...\))315 711 y Fm(If)f(the)g(meta\014ed)g(c)o(haracter)f -Fc(x)k Fm(is)d(lo)o(w)o(ercase,)g(run)g(the)g(command)f(that)h(is)g(b)q -(ound)h(to)e(the)315 766 y(corresp)q(onding)j(upp)q(ercase)g(c)o -(haracter.)75 852 y Fl(prefix-meta)e(\()377 850 y Ff(h)p -389 824 70 2 v 389 852 a Fe(ESC)p 389 860 V 456 850 a -Ff(i)471 852 y Fl(\))315 907 y Fm(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 962 y(meta)d(k)o(ey)l(.)20 b(T)o(yping)15 -b(`)694 960 y Ff(h)p 706 934 V 706 962 a Fe(ESC)p 706 -970 V 773 960 a Ff(i)803 962 y Fl(f)p Fm(')g(is)g(equiv)m(alen)o(t)i -(to)e(t)o(yping)g Fg(M-f)p Fm(.)75 1048 y Fl(undo)g(\(C-_)f(or)h(C-x)g -(C-u\))315 1103 y Fm(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1189 y Fl(revert-line)f(\(M-r\))315 -1244 y Fm(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26 -b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Fl(undo)f -Fm(command)315 1299 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1385 y Fl(tilde-expand)f(\(M-~\))315 -1440 y Fm(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1526 y Fl(set-mark)f(\(C-@\))315 1581 y Fm(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 1636 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1722 y Fl(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1777 y Fm(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k -(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o -(v)o(ed)315 1832 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 1918 -y Fl(character-search)e(\(C-]\))315 1973 y Fm(A)f(c)o(haracter)g(is)h -(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q -(ccurrence)g(of)f(that)g(c)o(haracter.)315 2028 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2114 y Fl(character-search-backward)c(\(M-C-]\))315 2169 -y Fm(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v) -o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315 -2223 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 2310 y Fl(insert-comment)d(\(M-#\)) -315 2365 y Fm(The)19 b(v)m(alue)i(of)e(the)g Fl(comment-begin)e -Fm(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315 -2419 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 Fl(dump-functions)d(\(\))315 2560 y Fm(Prin)o(t)g(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)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 -Fc(inputrc)k Fm(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fm(18)1299 b(GNU)15 b(Readline)i(Library)75 -149 y Fl(dump-variables)c(\(\))315 204 y Fm(Prin)o(t)e(all)g(of)f(the)h -(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e(the)h -(Readline)i(output)d(stream.)315 259 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 314 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Fc(inputrc)k Fm(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 406 y Fl(dump-macros)f(\(\))315 -461 y Fm(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 -516 y(output.)26 b(If)18 b(a)f(n)o(umeric)h(argumen)o(t)f(is)h -(supplied,)i(the)d(output)g(is)h(formatted)e(in)j(suc)o(h)e(a)315 -570 y(w)o(a)o(y)d(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Fc(inputrc)k Fm(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 625 y(default.)75 754 y Fk(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 850 y Fm(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 Fl(vi)g -Fm(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75 -905 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 Fl(vi)e Fm(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g -(sp)q(eci\014ed)i(in)75 960 y(the)c Fh(posix)g Fm(1003.2)f(standard.) -137 1027 y(In)h(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o -(w)o(een)f Fl(emacs)e Fm(and)i Fl(vi)f Fm(editing)i(mo)q(des,)f(use)f -(the)h(command)75 1082 y Fg(M-C-j)f Fm(\(toggle-editing-mo)q(de\).)21 -b(The)16 b(Readline)h(default)f(is)g Fl(emacs)e Fm(mo)q(de.)137 -1149 y(When)i(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Fl(vi)g -Fm(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q -(de,)g(as)g(if)g(y)o(ou)75 1204 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Fl(i)p Fm('.)18 b(Pressing)608 1202 y Ff(h)p 620 1176 -70 2 v 620 1204 a Fe(ESC)p 620 1211 V 687 1202 a Ff(i)715 -1204 y Fm(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i -(where)f(y)o(ou)g(can)g(edit)h(the)75 1259 y(text)i(of)h(the)g(line)h -(with)g(the)f(standard)f Fl(vi)h Fm(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o -(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1313 -y(`)p Fl(k)p Fm(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Fl(j)p Fm(',)e(and)h(so)g(forth.)p eop -%%Page: -1 21 --1 20 bop 1862 -58 a Fm(i)75 149 y Fi(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 320 y Fk(1)67 b(Command)22 b(Line)i(Editing)d -Fa(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fk(1)224 389 y Fm(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fm(1)224 444 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fd(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fm(1)374 499 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fm(1)374 553 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fd(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fm(2)374 608 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fd(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fm(2)374 663 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fm(3)374 718 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fd(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fm(3)224 773 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fm(4)374 827 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fm(4)374 882 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fd(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fm(8)374 937 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fd(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fm(9)224 992 y(1.4)45 b(Bindable)17 b(Readline)h(Commands) -6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fm(12)374 -1046 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fm(12)374 1101 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fd(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fm(12)374 1156 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fd(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fm(13)374 1211 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fd(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fm(14)374 -1266 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fd(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fm(15)374 1320 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fd(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fm(16)374 1375 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fd(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fm(16)374 1430 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fd(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fm(17)224 1485 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fd(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fm(18)p eop -%%Page: -2 22 --2 21 bop 75 -58 a Fm(ii)1321 b(GNU)15 b(Readline)i(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/readline/examples/excallback.c b/readline/examples/excallback.c new file mode 100644 --- /dev/null +++ b/readline/examples/excallback.c @@ -0,0 +1,188 @@ +/* +From: Jeff Solomon +Date: Fri, 9 Apr 1999 10:13:27 -0700 (PDT) +To: chet@po.cwru.edu +Subject: new readline example +Message-ID: <14094.12094.527305.199695@mrclean.Stanford.EDU> + +Chet, + +I've been using readline 4.0. Specifically, I've been using the perl +version Term::ReadLine::Gnu. It works great. + +Anyway, I've been playing around the alternate interface and I wanted +to contribute a little C program, callback.c, to you that you could +use as an example of the alternate interface in the /examples +directory of the readline distribution. + +My example shows how, using the alternate interface, you can +interactively change the prompt (which is very nice imo). Also, I +point out that you must roll your own terminal setting when using the +alternate interface because readline depreps (using your parlance) the +terminal while in the user callback. I try to demostrate what I mean +with an example. I've included the program below. + +To compile, I just put the program in the examples directory and made +the appropriate changes to the EXECUTABLES and OBJECTS line and added +an additional target 'callback'. + +I compiled on my Sun Solaris2.6 box using Sun's cc. + +Let me know what you think. + +Jeff +*/ + +#if defined (HAVE_CONFIG_H) +#include +#endif + +#include +#include + +#ifdef HAVE_UNISTD_H +#include +#endif + +#include /* xxx - should make this more general */ + +#ifdef READLINE_LIBRARY +# include "readline.h" +#else +# include +#endif + +/* This little examples demonstrates the alternate interface to using readline. + * In the alternate interface, the user maintains control over program flow and + * only calls readline when STDIN is readable. Using the alternate interface, + * you can do anything else while still using readline (like talking to a + * network or another program) without blocking. + * + * Specifically, this program highlights two importants features of the + * alternate interface. The first is the ability to interactively change the + * prompt, which can't be done using the regular interface since rl_prompt is + * read-only. + * + * The second feature really highlights a subtle point when using the alternate + * interface. That is, readline will not alter the terminal when inside your + * callback handler. So let's so, your callback executes a user command that + * takes a non-trivial amount of time to complete (seconds). While your + * executing the command, the user continues to type keystrokes and expects them + * to be re-echoed on the new prompt when it returns. Unfortunately, the default + * terminal configuration doesn't do this. After the prompt returns, the user + * must hit one additional keystroke and then will see all of his previous + * keystrokes. To illustrate this, compile and run this program. Type "sleep" at + * the prompt and then type "bar" before the prompt returns (you have 3 + * seconds). Notice how "bar" is re-echoed on the prompt after the prompt + * returns? This is what you expect to happen. Now comment out the 4 lines below + * the line that says COMMENT LINE BELOW. Recompile and rerun the program and do + * the same thing. When the prompt returns, you should not see "bar". Now type + * "f", see how "barf" magically appears? This behavior is un-expected and not + * desired. + */ + +void process_line(char *line); +int change_prompt(void); +char *get_prompt(void); + +int prompt = 1; +char prompt_buf[40], line_buf[256]; +tcflag_t old_lflag; +cc_t old_vtime; +struct termios term; + +int +main() +{ + fd_set fds; + + /* Adjust the terminal slightly before the handler is installed. Disable + * canonical mode processing and set the input character time flag to be + * non-blocking. + */ + if( tcgetattr(STDIN_FILENO, &term) < 0 ) { + perror("tcgetattr"); + exit(1); + } + old_lflag = term.c_lflag; + old_vtime = term.c_cc[VTIME]; + term.c_lflag &= ~ICANON; + term.c_cc[VTIME] = 1; + /* COMMENT LINE BELOW - see above */ + if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { + perror("tcsetattr"); + exit(1); + } + + rl_add_defun("change-prompt", change_prompt, CTRL('t')); + rl_callback_handler_install(get_prompt(), process_line); + + while(1) { + FD_ZERO(&fds); + FD_SET(fileno(stdin), &fds); + + if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) < 0) { + perror("select"); + exit(1); + } + + if( FD_ISSET(fileno(stdin), &fds) ) { + rl_callback_read_char(); + } + } +} + +void +process_line(char *line) +{ + if( line == NULL ) { + fprintf(stderr, "\n", line); + + /* reset the old terminal setting before exiting */ + term.c_lflag = old_lflag; + term.c_cc[VTIME] = old_vtime; + if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { + perror("tcsetattr"); + exit(1); + } + exit(0); + } + + if( strcmp(line, "sleep") == 0 ) { + sleep(3); + } else { + fprintf(stderr, "|%s|\n", line); + } + + free (line); +} + +int +change_prompt(void) +{ + /* toggle the prompt variable */ + prompt = !prompt; + + /* save away the current contents of the line */ + strcpy(line_buf, rl_line_buffer); + + /* install a new handler which will change the prompt and erase the current line */ + rl_callback_handler_install(get_prompt(), process_line); + + /* insert the old text on the new line */ + rl_insert_text(line_buf); + + /* redraw the current line - this is an undocumented function. It invokes the + * redraw-current-line command. + */ + rl_refresh_line(0, 0); +} + +char * +get_prompt(void) +{ + /* The prompts can even be different lengths! */ + sprintf(prompt_buf, "%s", + prompt ? "Hit ctrl-t to toggle prompt> " : "Pretty cool huh?> "); + return prompt_buf; +} diff --git a/readline/examples/rlfe.c b/readline/examples/rlfe.c new file mode 100644 --- /dev/null +++ b/readline/examples/rlfe.c @@ -0,0 +1,1042 @@ +/* A front-end using readline to "cook" input lines for Kawa. + * + * Copyright (C) 1999 Per Bothner + * + * This front-end 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. + * + * Some code from Johnson & Troan: "Linux Application Development" + * (Addison-Wesley, 1998) was used directly or for inspiration. + */ + +/* PROBLEMS/TODO: + * + * Only tested under Linux; needs to be ported. + * + * When running mc -c under the Linux console, mc does not recognize + * mouse clicks, which mc does when not running under fep. + * + * Pasting selected text containing tabs is like hitting the tab character, + * which invokes readline completion. We don't want this. I don't know + * if this is fixable without integrating fep into a terminal emulator. + * + * Echo suppression is a kludge, but can only be avoided with better kernel + * support: We need a tty mode to disable "real" echoing, while still + * letting the inferior think its tty driver to doing echoing. + * Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE. + * + * The latest readline may have some hooks we can use to avoid having + * to back up the prompt. + * + * Desirable readline feature: When in cooked no-echo mode (e.g. password), + * echo characters are they are types with '*', but remove them when done. + * + * A synchronous output while we're editing an input line should be + * inserted in the output view *before* the input line, so that the + * lines being edited (with the prompt) float at the end of the input. + * + * A "page mode" option to emulate more/less behavior: At each page of + * output, pause for a user command. This required parsing the output + * to keep track of line lengths. It also requires remembering the + * output, if we want an option to scroll back, which suggests that + * this should be integrated with a terminal emulator like xterm. + */ + +#ifdef HAVE_CONFIG_H +# include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef READLINE_LIBRARY +# include "readline.h" +# include "history.h" +#else +# include +# include +#endif + +#ifndef COMMAND +#define COMMAND "/bin/sh" +#endif +#ifndef COMMAND_ARGS +#define COMMAND_ARGS COMMAND +#endif + +#ifndef HAVE_MEMMOVE +#ifndef memmove +# if __GNUC__ > 1 +# define memmove(d, s, n) __builtin_memcpy(d, s, n) +# else +# define memmove(d, s, n) memcpy(d, s, n) +# endif +#else +# define memmove(d, s, n) memcpy(d, s, n) +#endif +#endif + +#define APPLICATION_NAME "Rlfe" + +#ifndef errno +extern int errno; +#endif + +extern int optind; +extern char *optarg; + +static char *progname; +static char *progversion; + +static int in_from_inferior_fd; +static int out_to_inferior_fd; + +/* Unfortunately, we cannot safely display echo from the inferior process. + The reason is that the echo bit in the pty is "owned" by the inferior, + and if we try to turn it off, we could confuse the inferior. + Thus, when echoing, we get echo twice: First readline echoes while + we're actually editing. Then we send the line to the inferior, and the + terminal driver send back an extra echo. + The work-around is to remember the input lines, and when we see that + line come back, we supress the output. + A better solution (supposedly available on SVR4) would be a smarter + terminal driver, with more flags ... */ +#define ECHO_SUPPRESS_MAX 1024 +char echo_suppress_buffer[ECHO_SUPPRESS_MAX]; +int echo_suppress_start = 0; +int echo_suppress_limit = 0; + +/* #define DEBUG */ + +static FILE *logfile = NULL; + +#ifdef DEBUG +FILE *debugfile = NULL; +#define DPRINT0(FMT) (fprintf(debugfile, FMT), fflush(debugfile)) +#define DPRINT1(FMT, V1) (fprintf(debugfile, FMT, V1), fflush(debugfile)) +#define DPRINT2(FMT, V1, V2) (fprintf(debugfile, FMT, V1, V2), fflush(debugfile)) +#else +#define DPRINT0(FMT) /* Do nothing */ +#define DPRINT1(FMT, V1) /* Do nothing */ +#define DPRINT2(FMT, V1, V2) /* Do nothing */ +#endif + +struct termios orig_term; + +static int rlfe_directory_completion_hook __P((char **)); +static int rlfe_directory_rewrite_hook __P((char **)); +static char *rlfe_filename_completion_function __P((const char *, int)); + +/* Pid of child process. */ +static pid_t child = -1; + +static void +sig_child (int signo) +{ + int status; + wait (&status); + DPRINT0 ("(Child process died.)\n"); + tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); + exit (0); +} + +volatile int propagate_sigwinch = 0; + +/* sigwinch_handler + * propagate window size changes from input file descriptor to + * master side of pty. + */ +void sigwinch_handler(int signal) { + propagate_sigwinch = 1; +} + +/* get_master_pty() takes a double-indirect character pointer in which + * to put a slave name, and returns an integer file descriptor. + * If it returns < 0, an error has occurred. + * Otherwise, it has returned the master pty file descriptor, and fills + * in *name with the name of the corresponding slave pty. + * Once the slave pty has been opened, you are responsible to free *name. + */ + +int get_master_pty(char **name) { + int i, j; + /* default to returning error */ + int master = -1; + + /* create a dummy name to fill in */ + *name = strdup("/dev/ptyXX"); + + /* search for an unused pty */ + for (i=0; i<16 && master <= 0; i++) { + for (j=0; j<16 && master <= 0; j++) { + (*name)[5] = 'p'; + (*name)[8] = "pqrstuvwxyzPQRST"[i]; + (*name)[9] = "0123456789abcdef"[j]; + /* open the master pty */ + if ((master = open(*name, O_RDWR)) < 0) { + if (errno == ENOENT) { + /* we are out of pty devices */ + free (*name); + return (master); + } + } + else { + /* By substituting a letter, we change the master pty + * name into the slave pty name. + */ + (*name)[5] = 't'; + if (access(*name, R_OK|W_OK) != 0) + { + close(master); + master = -1; + } + } + } + } + if ((master < 0) && (i == 16) && (j == 16)) { + /* must have tried every pty unsuccessfully */ + free (*name); + return (master); + } + + (*name)[5] = 't'; + + return (master); +} + +/* get_slave_pty() returns an integer file descriptor. + * If it returns < 0, an error has occurred. + * Otherwise, it has returned the slave file descriptor. + */ + +int get_slave_pty(char *name) { + struct group *gptr; + gid_t gid; + int slave = -1; + + /* chown/chmod the corresponding pty, if possible. + * This will only work if the process has root permissions. + * Alternatively, write and exec a small setuid program that + * does just this. + */ + if ((gptr = getgrnam("tty")) != 0) { + gid = gptr->gr_gid; + } else { + /* if the tty group does not exist, don't change the + * group on the slave pty, only the owner + */ + gid = -1; + } + + /* Note that we do not check for errors here. If this is code + * where these actions are critical, check for errors! + */ + chown(name, getuid(), gid); + /* This code only makes the slave read/writeable for the user. + * If this is for an interactive shell that will want to + * receive "write" and "wall" messages, OR S_IWGRP into the + * second argument below. + */ + chmod(name, S_IRUSR|S_IWUSR); + + /* open the corresponding slave pty */ + slave = open(name, O_RDWR); + return (slave); +} + +/* Certain special characters, such as ctrl/C, we want to pass directly + to the inferior, rather than letting readline handle them. */ + +static char special_chars[20]; +static int special_chars_count; + +static void +add_special_char(int ch) +{ + if (ch != 0) + special_chars[special_chars_count++] = ch; +} + +static int eof_char; + +static int +is_special_char(int ch) +{ + int i; +#if 0 + if (ch == eof_char && rl_point == rl_end) + return 1; +#endif + for (i = special_chars_count; --i >= 0; ) + if (special_chars[i] == ch) + return 1; + return 0; +} + +static char buf[1024]; +/* buf[0 .. buf_count-1] is the what has been emitted on the current line. + It is used as the readline prompt. */ +static int buf_count = 0; + +int num_keys = 0; + +static void +null_prep_terminal (int meta) +{ +} + +static void +null_deprep_terminal () +{ +} + +char pending_special_char; + +static void +line_handler (char *line) +{ + if (line == NULL) + { + char buf[1]; + DPRINT0("saw eof!\n"); + buf[0] = '\004'; /* ctrl/d */ + write (out_to_inferior_fd, buf, 1); + } + else + { + static char enter[] = "\r"; + /* Send line to inferior: */ + int length = strlen (line); + if (length > ECHO_SUPPRESS_MAX-2) + { + echo_suppress_start = 0; + echo_suppress_limit = 0; + } + else + { + if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2) + { + if (echo_suppress_limit - echo_suppress_start + length + <= ECHO_SUPPRESS_MAX - 2) + { + memmove (echo_suppress_buffer, + echo_suppress_buffer + echo_suppress_start, + echo_suppress_limit - echo_suppress_start); + echo_suppress_limit -= echo_suppress_start; + echo_suppress_start = 0; + } + else + { + echo_suppress_limit = 0; + } + echo_suppress_start = 0; + } + memcpy (echo_suppress_buffer + echo_suppress_limit, + line, length); + echo_suppress_limit += length; + echo_suppress_buffer[echo_suppress_limit++] = '\r'; + echo_suppress_buffer[echo_suppress_limit++] = '\n'; + } + write (out_to_inferior_fd, line, length); + if (pending_special_char == 0) + { + write (out_to_inferior_fd, enter, sizeof(enter)-1); + if (*line) + add_history (line); + } + free (line); + } + rl_callback_handler_remove (); + buf_count = 0; + num_keys = 0; + if (pending_special_char != 0) + { + write (out_to_inferior_fd, &pending_special_char, 1); + pending_special_char = 0; + } +} + +/* Value of rl_getc_function. + Use this because readline should read from stdin, not rl_instream, + points to the pty (so readline has monitor its terminal modes). */ + +int +my_rl_getc (FILE *dummy) +{ + int ch = rl_getc (stdin); + if (is_special_char (ch)) + { + pending_special_char = ch; + return '\r'; + } + return ch; +} + +static void +usage() +{ + fprintf (stderr, "%s: usage: %s [-l filename] [-a] [-n appname] [-hv] [command [arguments...]]\n", + progname, progname); +} + +int +main(int argc, char** argv) +{ + char *path; + int i, append; + int master; + char *name, *logfname, *appname; + int in_from_tty_fd; + struct sigaction act; + struct winsize ws; + struct termios t; + int maxfd; + fd_set in_set; + static char empty_string[1] = ""; + char *prompt = empty_string; + int ioctl_err = 0; + + if ((progname = strrchr (argv[0], '/')) == 0) + progname = argv[0]; + else + progname++; + progversion = RL_LIBRARY_VERSION; + + append = 0; + appname = APPLICATION_NAME; + logfname = (char *)NULL; + + while ((i = getopt (argc, argv, "ahl:n:v")) != EOF) + { + switch (i) + { + case 'l': + logfname = optarg; + break; + case 'n': + appname = optarg; + break; + case 'a': + append = 1; + break; + case 'h': + usage (); + exit (0); + case 'v': + fprintf (stderr, "%s version %s\n", progname, progversion); + exit (0); + default: + usage (); + exit (2); + } + } + + argc -= optind; + argv += optind; + + if (logfname) + { + logfile = fopen (logfname, append ? "a" : "w"); + if (logfile == 0) + fprintf (stderr, "%s: warning: could not open log file %s: %s\n", + progname, logfname, strerror (errno)); + } + + rl_readline_name = appname; + +#ifdef DEBUG + debugfile = fopen("LOG", "w"); +#endif + + if ((master = get_master_pty(&name)) < 0) + { + perror("ptypair: could not open master pty"); + exit(1); + } + + DPRINT1("pty name: '%s'\n", name); + + /* set up SIGWINCH handler */ + act.sa_handler = sigwinch_handler; + sigemptyset(&(act.sa_mask)); + act.sa_flags = 0; + if (sigaction(SIGWINCH, &act, NULL) < 0) + { + perror("ptypair: could not handle SIGWINCH "); + exit(1); + } + + if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0) + { + perror("ptypair: could not get window size"); + exit(1); + } + + if ((child = fork()) < 0) + { + perror("cannot fork"); + exit(1); + } + + if (child == 0) + { + int slave; /* file descriptor for slave pty */ + + /* We are in the child process */ + close(master); + +#ifdef TIOCSCTTY + if ((slave = get_slave_pty(name)) < 0) + { + perror("ptypair: could not open slave pty"); + exit(1); + } + free(name); +#endif + + /* We need to make this process a session group leader, because + * it is on a new PTY, and things like job control simply will + * not work correctly unless there is a session group leader + * and process group leader (which a session group leader + * automatically is). This also disassociates us from our old + * controlling tty. + */ + if (setsid() < 0) + { + perror("could not set session leader"); + } + + /* Tie us to our new controlling tty. */ +#ifdef TIOCSCTTY + if (ioctl(slave, TIOCSCTTY, NULL)) + { + perror("could not set new controlling tty"); + } +#else + if ((slave = get_slave_pty(name)) < 0) + { + perror("ptypair: could not open slave pty"); + exit(1); + } + free(name); +#endif + + /* make slave pty be standard in, out, and error */ + dup2(slave, STDIN_FILENO); + dup2(slave, STDOUT_FILENO); + dup2(slave, STDERR_FILENO); + + /* at this point the slave pty should be standard input */ + if (slave > 2) + { + close(slave); + } + + /* Try to restore window size; failure isn't critical */ + if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0) + { + perror("could not restore window size"); + } + + /* now start the shell */ + { + static char* command_args[] = { COMMAND_ARGS, NULL }; + if (argc < 1) + execvp(COMMAND, command_args); + else + execvp(argv[0], &argv[0]); + } + + /* should never be reached */ + exit(1); + } + + /* parent */ + signal (SIGCHLD, sig_child); + free(name); + + /* Note that we only set termios settings for standard input; + * the master side of a pty is NOT a tty. + */ + tcgetattr(STDIN_FILENO, &orig_term); + + t = orig_term; + eof_char = t.c_cc[VEOF]; + /* add_special_char(t.c_cc[VEOF]);*/ + add_special_char(t.c_cc[VINTR]); + add_special_char(t.c_cc[VQUIT]); + add_special_char(t.c_cc[VSUSP]); +#if defined (VDISCARD) + add_special_char(t.c_cc[VDISCARD]); +#endif + +#if 0 + t.c_lflag |= (ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \ + ECHOK | ECHOKE | ECHONL | ECHOPRT ); +#else + t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \ + ECHOK | ECHOKE | ECHONL | ECHOPRT ); +#endif + t.c_iflag |= IGNBRK; + t.c_cc[VMIN] = 1; + t.c_cc[VTIME] = 0; + tcsetattr(STDIN_FILENO, TCSANOW, &t); + in_from_inferior_fd = master; + out_to_inferior_fd = master; + rl_instream = fdopen (master, "r"); + rl_getc_function = my_rl_getc; + + rl_prep_term_function = null_prep_terminal; + rl_deprep_term_function = null_deprep_terminal; + rl_callback_handler_install (prompt, line_handler); + +#if 1 + rl_directory_completion_hook = rlfe_directory_completion_hook; + rl_completion_entry_function = rlfe_filename_completion_function; +#else + rl_directory_rewrite_hook = rlfe_directory_rewrite_hook; +#endif + + in_from_tty_fd = STDIN_FILENO; + FD_ZERO (&in_set); + maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd + : in_from_tty_fd; + for (;;) + { + int num; + FD_SET (in_from_inferior_fd, &in_set); + FD_SET (in_from_tty_fd, &in_set); + + num = select(maxfd+1, &in_set, NULL, NULL, NULL); + + if (propagate_sigwinch) + { + struct winsize ws; + if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0) + { + ioctl (master, TIOCSWINSZ, &ws); + } + propagate_sigwinch = 0; + continue; + } + + if (num <= 0) + { + perror ("select"); + exit (-1); + } + if (FD_ISSET (in_from_tty_fd, &in_set)) + { + extern int readline_echoing_p; + struct termios term_master; + int do_canon = 1; + int ioctl_ret; + + DPRINT1("[tty avail num_keys:%d]\n", num_keys); + + /* If we can't get tty modes for the master side of the pty, we + can't handle non-canonical-mode programs. Always assume the + master is in canonical echo mode if we can't tell. */ + ioctl_ret = tcgetattr(master, &term_master); + + if (ioctl_ret >= 0) + { + DPRINT2 ("echo:%d, canon:%d\n", + (term_master.c_lflag & ECHO) != 0, + (term_master.c_lflag & ICANON) != 0); + do_canon = (term_master.c_lflag & ICANON) != 0; + readline_echoing_p = (term_master.c_lflag & ECHO) != 0; + } + else + { + if (ioctl_err == 0) + DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno); + ioctl_err = 1; + } + + if (do_canon == 0 && num_keys == 0) + { + char ch[10]; + int count = read (STDIN_FILENO, ch, sizeof(ch)); + write (out_to_inferior_fd, ch, count); + } + else + { + if (num_keys == 0) + { + int i; + /* Re-install callback handler for new prompt. */ + if (prompt != empty_string) + free (prompt); + prompt = malloc (buf_count + 1); + if (prompt == NULL) + prompt = empty_string; + else + { + memcpy (prompt, buf, buf_count); + prompt[buf_count] = '\0'; + DPRINT1("New prompt '%s'\n", prompt); +#if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED -- doesn't work */ + rl_already_prompted = buf_count > 0; +#else + if (buf_count > 0) + write (1, "\r", 1); +#endif + } + rl_callback_handler_install (prompt, line_handler); + } + num_keys++; + rl_callback_read_char (); + } + } + else /* input from inferior. */ + { + int i; + int count; + int old_count; + if (buf_count > (sizeof(buf) >> 2)) + buf_count = 0; + count = read (in_from_inferior_fd, buf+buf_count, + sizeof(buf) - buf_count); + if (count <= 0) + { + DPRINT0 ("(Connection closed by foreign host.)\n"); + tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); + exit (0); + } + old_count = buf_count; + + /* Do some minimal carriage return translation and backspace + processing before logging the input line. */ + if (logfile) + { +#ifndef __GNUC__ + char *b; +#else + char b[count + 1]; +#endif + int i, j; + +#ifndef __GNUC__ + b = malloc (count + 1); + if (b) { +#endif + for (i = 0; i < count; i++) + b[i] = buf[buf_count + i]; + b[i] = '\0'; + for (i = j = 0; i <= count; i++) + { + if (b[i] == '\r') + { + if (b[i+1] != '\n') + b[j++] = '\n'; + } + else if (b[i] == '\b') + { + if (i) + j--; + } + else + b[j++] = b[i]; + } + fprintf (logfile, "%s", b); + +#ifndef __GNUC__ + free (b); + } +#endif + } + + /* Look for any pending echo that we need to suppress. */ + while (echo_suppress_start < echo_suppress_limit + && count > 0 + && buf[buf_count] == echo_suppress_buffer[echo_suppress_start]) + { + count--; + buf_count++; + echo_suppress_start++; + } + + /* Write to the terminal anything that was not suppressed. */ + if (count > 0) + write (1, buf + buf_count, count); + + /* Finally, look for a prompt candidate. + * When we get around to going input (from the keyboard), + * we will consider the prompt to be anything since the last + * line terminator. So we need to save that text in the + * initial part of buf. However, anything before the + * most recent end-of-line is not interesting. */ + buf_count += count; +#if 1 + for (i = buf_count; --i >= old_count; ) +#else + for (i = buf_count - 1; i-- >= buf_count - count; ) +#endif + { + if (buf[i] == '\n' || buf[i] == '\r') + { + i++; + memmove (buf, buf+i, buf_count - i); + buf_count -= i; + break; + } + } + DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count); + } + } +} + +/* + * + * FILENAME COMPLETION FOR RLFE + * + */ + +#ifndef PATH_MAX +# define PATH_MAX 1024 +#endif + +#define DIRSEP '/' +#define ISDIRSEP(x) ((x) == '/') +#define PATHSEP(x) (ISDIRSEP(x) || (x) == 0) + +#define DOT_OR_DOTDOT(x) \ + ((x)[0] == '.' && (PATHSEP((x)[1]) || \ + ((x)[1] == '.' && PATHSEP((x)[2])))) + +#define FREE(x) if (x) free(x) + +#define STRDUP(s, x) do { \ + s = strdup (x);\ + if (s == 0) \ + return ((char *)NULL); \ + } while (0) + +static int +get_inferior_cwd (path, psize) + char *path; + size_t psize; +{ + int n; + static char procfsbuf[PATH_MAX] = { '\0' }; + + if (procfsbuf[0] == '\0') + sprintf (procfsbuf, "/proc/%d/cwd", (int)child); + n = readlink (procfsbuf, path, psize); + if (n < 0) + return n; + if (n > psize) + return -1; + path[n] = '\0'; + return n; +} + +static int +rlfe_directory_rewrite_hook (dirnamep) + char **dirnamep; +{ + char *ldirname, cwd[PATH_MAX], *retdir, *ld; + int n, ldlen; + + ldirname = *dirnamep; + + if (*ldirname == '/') + return 0; + + n = get_inferior_cwd (cwd, sizeof(cwd) - 1); + if (n < 0) + return 0; + if (n == 0) /* current directory */ + { + cwd[0] = '.'; + cwd[1] = '\0'; + n = 1; + } + + /* Minimally canonicalize ldirname by removing leading `./' */ + for (ld = ldirname; *ld; ) + { + if (ISDIRSEP (ld[0])) + ld++; + else if (ld[0] == '.' && PATHSEP(ld[1])) + ld++; + else + break; + } + ldlen = (ld && *ld) ? strlen (ld) : 0; + + retdir = (char *)malloc (n + ldlen + 3); + if (retdir == 0) + return 0; + if (ldlen) + sprintf (retdir, "%s/%s", cwd, ld); + else + strcpy (retdir, cwd); + free (ldirname); + + *dirnamep = retdir; + + DPRINT1("rl_directory_rewrite_hook returns %s\n", retdir); + return 1; +} + +/* Translate *DIRNAMEP to be relative to the inferior's CWD. Leave a trailing + slash on the result. */ +static int +rlfe_directory_completion_hook (dirnamep) + char **dirnamep; +{ + char *ldirname, *retdir; + int n, ldlen; + + ldirname = *dirnamep; + + if (*ldirname == '/') + return 0; + + n = rlfe_directory_rewrite_hook (dirnamep); + if (n == 0) + return 0; + + ldirname = *dirnamep; + ldlen = (ldirname && *ldirname) ? strlen (ldirname) : 0; + + if (ldlen == 0 || ldirname[ldlen - 1] != '/') + { + retdir = (char *)malloc (ldlen + 3); + if (retdir == 0) + return 0; + if (ldlen) + strcpy (retdir, ldirname); + else + retdir[ldlen++] = '.'; + retdir[ldlen] = '/'; + retdir[ldlen+1] = '\0'; + free (ldirname); + + *dirnamep = retdir; + } + + DPRINT1("rl_directory_completion_hook returns %s\n", retdir); + return 1; +} + +static char * +rlfe_filename_completion_function (text, state) + const char *text; + int state; +{ + static DIR *directory; + static char *filename = (char *)NULL; + static char *dirname = (char *)NULL, *ud = (char *)NULL; + static int flen, udlen; + char *temp; + struct dirent *dentry; + + if (state == 0) + { + if (directory) + { + closedir (directory); + directory = 0; + } + FREE (dirname); + FREE (filename); + FREE (ud); + + if (text && *text) + STRDUP (filename, text); + else + { + filename = malloc(1); + if (filename == 0) + return ((char *)NULL); + filename[0] = '\0'; + } + dirname = (text && *text) ? strdup (text) : strdup ("."); + if (dirname == 0) + return ((char *)NULL); + + temp = strrchr (dirname, '/'); + if (temp) + { + strcpy (filename, ++temp); + *temp = '\0'; + } + else + { + dirname[0] = '.'; + dirname[1] = '\0'; + } + + STRDUP (ud, dirname); + udlen = strlen (ud); + + rlfe_directory_completion_hook (&dirname); + + directory = opendir (dirname); + flen = strlen (filename); + + rl_filename_completion_desired = 1; + } + + dentry = 0; + while (directory && (dentry = readdir (directory))) + { + if (flen == 0) + { + if (DOT_OR_DOTDOT(dentry->d_name) == 0) + break; + } + else + { + if ((dentry->d_name[0] == filename[0]) && + (strlen (dentry->d_name) >= flen) && + (strncmp (filename, dentry->d_name, flen) == 0)) + break; + } + } + + if (dentry == 0) + { + if (directory) + { + closedir (directory); + directory = 0; + } + FREE (dirname); + FREE (filename); + FREE (ud); + dirname = filename = ud = 0; + return ((char *)NULL); + } + + if (ud == 0 || (ud[0] == '.' && ud[1] == '\0')) + temp = strdup (dentry->d_name); + else + { + temp = malloc (1 + udlen + strlen (dentry->d_name)); + strcpy (temp, ud); + strcpy (temp + udlen, dentry->d_name); + } + return (temp); +} diff --git a/readline/examples/rlversion.c b/readline/examples/rlversion.c new file mode 100644 --- /dev/null +++ b/readline/examples/rlversion.c @@ -0,0 +1,23 @@ +/* + * rlversion -- print out readline's version number + */ + +#if defined (HAVE_CONFIG_H) +# include +#endif + +#include +#include +#include "posixstat.h" + +#ifdef READLINE_LIBRARY +# include "readline.h" +#else +# include +#endif + +main() +{ + printf ("%s\n", rl_library_version ? rl_library_version : "unknown"); + exit (0); +}