diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2001-03-18 17:37:42 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2001-03-18 17:37:42 +0000 |
commit | 9ca529ac8301462ea57921434e101b21597674c2 (patch) | |
tree | f316a17ef772f9e4a49b8c35d4ce461b46c552f3 /gnu/lib | |
parent | e6502418f71f98344bccae45cc3caccf2a541877 (diff) |
Add BSD Makefiles, shlib_version and a pre-generated config.h for
standard OpenBSD library building.
Also remove generated doc files and texinfo bits we have in the tree.
Diffstat (limited to 'gnu/lib')
20 files changed, 215 insertions, 28621 deletions
diff --git a/gnu/lib/libreadline/Makefile b/gnu/lib/libreadline/Makefile new file mode 100644 index 00000000000..4b1c907464c --- /dev/null +++ b/gnu/lib/libreadline/Makefile @@ -0,0 +1,21 @@ +# $OpenBSD: Makefile,v 1.1 2001/03/18 17:37:35 millert Exp $ + +LIB= readline +SRCS= readline.c funmap.c keymaps.c vi_mode.c parens.c rltty.c complete.c \ + bind.c isearch.c display.c signals.c util.c kill.c undo.c macro.c \ + input.c callback.c terminal.c xmalloc.c history.c histsearch.c \ + histexpand.c histfile.c nls.c search.c shell.c savestring.c tilde.c +HDRS= readline.h chardefs.h keymaps.h history.h tilde.h rlstdc.h rlconf.h +CPPFLAGS+=-DHAVE_CONFIG_H -I${.CURDIR} +SUBDIRS= doc + +includes: + @cd ${.CURDIR}; for i in $(HDRS); do \ + j="cmp -s $$i ${DESTDIR}/usr/include/readline/$$i || \ + ${INSTALL} ${INSTALL_COPY} -o ${BINOWN} -g ${BINGRP} -m 444 $$i \ + ${DESTDIR}/usr/include/readline"; \ + echo $$j; \ + eval "$$j"; \ + done + +.include <bsd.lib.mk> diff --git a/gnu/lib/libreadline/config.h b/gnu/lib/libreadline/config.h new file mode 100644 index 00000000000..4cce5702f5b --- /dev/null +++ b/gnu/lib/libreadline/config.h @@ -0,0 +1,149 @@ +/* config.h. Generated automatically by configure. */ +/* config.h.in. Generated automatically from configure.in by autoheader. */ + +/* Define if on MINIX. */ +/* #undef _MINIX */ + +/* Define as the return type of signal handlers (int or void). */ +#define RETSIGTYPE void + +/* Define if the `S_IS*' macros in <sys/stat.h> do not work properly. */ +/* #undef STAT_MACROS_BROKEN */ + +#define VOID_SIGHANDLER 1 + +/* Define if you have the lstat function. */ +#define HAVE_LSTAT 1 + +/* Define if you have the memmove function. */ +#define HAVE_MEMMOVE 1 + +/* Define if you have the putenv function. */ +#define HAVE_PUTENV 1 + +/* Define if you have the select function. */ +#define HAVE_SELECT 1 + +/* Define if you have the setenv function. */ +#define HAVE_SETENV 1 + +/* Define if you have the strcasecmp function. */ +#define HAVE_STRCASECMP 1 + +/* Define if you have the setlocale function. */ +#define HAVE_SETLOCALE 1 + +/* Define if you have the tcgetattr function. */ +#define HAVE_TCGETATTR 1 + +/* Define if you have the strcoll function. */ +#define HAVE_STRCOLL 1 + +/* #undef STRCOLL_BROKEN */ + +/* Define if you have the <dirent.h> header file. */ +#define HAVE_DIRENT_H 1 + +/* Define if you have the <ndir.h> header file. */ +/* #undef HAVE_NDIR_H */ + +/* Define if you have the <stdlib.h> header file. */ +#define HAVE_STDLIB_H 1 + +/* Define if you have the <string.h> header file. */ +#define HAVE_STRING_H 1 + +/* Define if you have the <sys/dir.h> header file. */ +/* #undef HAVE_SYS_DIR_H */ + +/* Define if you have the <sys/file.h> header file. */ +#define HAVE_SYS_FILE_H 1 + +/* Define if you have the <sys/ndir.h> header file. */ +/* #undef HAVE_SYS_NDIR_H */ + +/* Define if you have the <sys/pte.h> header file. */ +/* #undef HAVE_SYS_PTE_H */ + +/* Define if you have the <sys/ptem.h> header file. */ +/* #undef HAVE_SYS_PTEM_H */ + +/* Define if you have the <sys/select.h> header file. */ +#define HAVE_SYS_SELECT_H 1 + +/* Define if you have the <sys/stream.h> header file. */ +/* #undef HAVE_SYS_STREAM_H */ + +/* Define if you have the <termcap.h> header file. */ +#define HAVE_TERMCAP_H 1 + +/* Define if you have the <termio.h> header file. */ +/* #undef HAVE_TERMIO_H */ + +/* Define if you have the <termios.h> header file. */ +#define HAVE_TERMIOS_H 1 + +/* Define if you have the <unistd.h> header file. */ +#define HAVE_UNISTD_H 1 + +/* Define if you have the <varargs.h> header file. */ +#define HAVE_VARARGS_H 1 + +/* Define if you have the <stdarg.h> header file. */ +#define HAVE_STDARG_H 1 + +#define HAVE_LOCALE_H 1 + +/* Definitions pulled in from aclocal.m4. */ +#define VOID_SIGHANDLER 1 + +#define GWINSZ_IN_SYS_IOCTL 1 + +#define STRUCT_WINSIZE_IN_SYS_IOCTL 1 + +/* #undef STRUCT_WINSIZE_IN_TERMIOS */ + +#define TIOCSTAT_IN_SYS_IOCTL 1 + +#define FIONREAD_IN_SYS_IOCTL 1 + +/* #undef SPEED_T_IN_SYS_TYPES */ + +/* #undef HAVE_GETPW_DECLS */ + +#define STRUCT_DIRENT_HAS_D_INO 1 + +#define STRUCT_DIRENT_HAS_D_FILENO 1 + +/* #undef HAVE_BSD_SIGNALS */ + +#define HAVE_POSIX_SIGNALS 1 + +/* #undef HAVE_USG_SIGHOLD */ + +/* #undef MUST_REINSTALL_SIGHANDLERS */ + +#define HAVE_POSIX_SIGSETJMP 1 + +/* config.h.bot */ +/* modify settings or make new ones based on what autoconf tells us. */ + +/* Ultrix botches type-ahead when switching from canonical to + non-canonical mode, at least through version 4.3 */ +#if !defined (HAVE_TERMIOS_H) || !defined (HAVE_TCGETATTR) || defined (ultrix) +# define TERMIOS_MISSING +#endif + +#if defined (STRCOLL_BROKEN) +# define HAVE_STRCOLL 1 +#endif + +#if defined (__STDC__) && defined (HAVE_STDARG_H) +# define PREFER_STDARG +# define USE_VARARGS +#else +# if defined (HAVE_VARARGS_H) +# define PREFER_VARARGS +# define USE_VARARGS +# endif +#endif diff --git a/gnu/lib/libreadline/doc/Makefile b/gnu/lib/libreadline/doc/Makefile new file mode 100644 index 00000000000..9ee263140fc --- /dev/null +++ b/gnu/lib/libreadline/doc/Makefile @@ -0,0 +1,43 @@ +# $OpenBSD: Makefile,v 1.1 2001/03/18 17:37:36 millert Exp $ + +INFO= readline.info history.info rluserman.info +RLSRC = rlman.texinfo rluser.texinfo rltech.texinfo manvers.texinfo \ + rluserman.texinfo +HISTSRC = hist.texinfo hsuser.texinfo hstech.texinfo manvers.texinfo +MAN+= readline.3 + +all: ${INFO} + +readline.info: ${RLSRC} + -makeinfo --no-split -I ${.CURDIR} -o ${.TARGET} $(.CURDIR)/rlman.texinfo + +rluserman.info: ${RLSRC} + -makeinfo --no-split -I ${.CURDIR} -o ${.TARGET} ${.CURDIR}/rluserman.texinfo + +history.info: ${HISTSRC} + -makeinfo --no-split -I ${.CURDIR} -o ${.TARGET} ${.CURDIR}/hist.texinfo + +.ifdef NOMAN +maninstall: + @echo NOMAN is set +.endif + +install: ${INFO} maninstall + @-for i in ${INFO}; do \ + echo ${INSTALL} ${INSTALL_COPY} -o ${DOCOWN} -g ${DOCGRP} \ + -m ${DOCMODE} $$i ${DESTDIR}${SHAREDIR}/info/$$i; \ + ${INSTALL} ${INSTALL_COPY} -o ${DOCOWN} -g ${DOCGRP} \ + -m ${DOCMODE} $$i ${DESTDIR}${SHAREDIR}/info/$$i; \ + done + install-info --info-dir=${DESTDIR}${SHAREDIR}/info readline.info + +cleandir: + -rm -f ${INFO} + +.include <bsd.own.mk> +.if !defined(NOMAN) +.include <bsd.man.mk> +.endif +.include <bsd.obj.mk> +.include <bsd.subdir.mk> +.include <bsd.sys.mk> diff --git a/gnu/lib/libreadline/doc/history.dvi b/gnu/lib/libreadline/doc/history.dvi Binary files differdeleted file mode 100644 index a8b30bf92be..00000000000 --- a/gnu/lib/libreadline/doc/history.dvi +++ /dev/null diff --git a/gnu/lib/libreadline/doc/history.html b/gnu/lib/libreadline/doc/history.html deleted file mode 100644 index d380ff4c96c..00000000000 --- a/gnu/lib/libreadline/doc/history.html +++ /dev/null @@ -1,1195 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 19 January 2000 --> - -<TITLE>GNU History Library</TITLE> -</HEAD> -<BODY> -<H1>GNU History Library</H1> -<H2>Edition 4.1, for <CODE>History Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="history.html#SEC1">Using History Interactively</A> -<UL> -<LI><A NAME="TOC2" HREF="history.html#SEC2">History Expansion</A> -<UL> -<LI><A NAME="TOC3" HREF="history.html#SEC3">Event Designators</A> -<LI><A NAME="TOC4" HREF="history.html#SEC4">Word Designators</A> -<LI><A NAME="TOC5" HREF="history.html#SEC5">Modifiers</A> -</UL> -</UL> -<LI><A NAME="TOC6" HREF="history.html#SEC6">Programming with GNU History</A> -<UL> -<LI><A NAME="TOC7" HREF="history.html#SEC7">Introduction to History</A> -<LI><A NAME="TOC8" HREF="history.html#SEC8">History Storage</A> -<LI><A NAME="TOC9" HREF="history.html#SEC9">History Functions</A> -<UL> -<LI><A NAME="TOC10" HREF="history.html#SEC10">Initializing History and State Management</A> -<LI><A NAME="TOC11" HREF="history.html#SEC11">History List Management</A> -<LI><A NAME="TOC12" HREF="history.html#SEC12">Information About the History List</A> -<LI><A NAME="TOC13" HREF="history.html#SEC13">Moving Around the History List</A> -<LI><A NAME="TOC14" HREF="history.html#SEC14">Searching the History List</A> -<LI><A NAME="TOC15" HREF="history.html#SEC15">Managing the History File</A> -<LI><A NAME="TOC16" HREF="history.html#SEC16">History Expansion</A> -</UL> -<LI><A NAME="TOC17" HREF="history.html#SEC17">History Variables</A> -<LI><A NAME="TOC18" HREF="history.html#SEC18">History Programming Example</A> -</UL> -<LI><A NAME="TOC19" HREF="history.html#SEC19">Concept Index</A> -<LI><A NAME="TOC20" HREF="history.html#SEC20">Function and Variable Index</A> -</UL> -<P><HR><P> - -<P> -This document describes the GNU History library, a programming tool that -provides a consistent user interface for recalling lines of previously -typed input. - -</P> -<P> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -</P> -<P> -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -</P> -<P> -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="history.html#TOC1">Using History Interactively</A></H1> - -<P> -This chapter describes how to use the GNU History Library interactively, -from a user's standpoint. It should be considered a user's guide. For -information on using the GNU History Library in your own programs, -see section <A HREF="history.html#SEC6">Programming with GNU History</A>. - -</P> - -<UL> -<LI><A HREF="history.html#SEC2">History Interaction</A>: What it feels like using History as a user. -</UL> - - - -<H2><A NAME="SEC2" HREF="history.html#TOC2">History Expansion</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<P> -The History library provides a history expansion feature that is similar -to the history expansion provided by <CODE>csh</CODE>. This section -describes the syntax used to manipulate the history information. - -</P> -<P> -History expansions introduce words from the history list into -the input stream, making it easy to repeat commands, insert the -arguments to a previous command into the current input line, or -fix errors in previous commands quickly. - -</P> -<P> -History expansion takes place in two parts. The first is to determine -which line from the history list should be used during substitution. -The second is to select portions of that line for inclusion into the -current one. The line selected from the history is called the -<EM>event</EM>, and the portions of that line that are acted upon are -called <EM>words</EM>. Various <EM>modifiers</EM> are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several words -surrounded by quotes are considered one word. -History expansions are introduced by the appearance of the -history expansion character, which is <SAMP>`!'</SAMP> by default. - -</P> - - -<UL> -<LI><A HREF="history.html#SEC3">Event Designators</A>: How to specify which history line to use. -<LI><A HREF="history.html#SEC4">Word Designators</A>: Specifying which words are of interest. -<LI><A HREF="history.html#SEC5">Modifiers</A>: Modifying the results of substitution. -</UL> - - - -<H3><A NAME="SEC3" HREF="history.html#TOC3">Event Designators</A></H3> -<P> -<A NAME="IDX2"></A> - -</P> -<P> -An event designator is a reference to a command line entry in the -history list. -<A NAME="IDX3"></A> - -</P> -<DL COMPACT> - -<DT><CODE>!</CODE> -<DD> -Start a history substitution, except when followed by a space, tab, -the end of the line, <SAMP>`='</SAMP> or <SAMP>`('</SAMP>. - -<DT><CODE>!<VAR>n</VAR></CODE> -<DD> -Refer to command line <VAR>n</VAR>. - -<DT><CODE>!-<VAR>n</VAR></CODE> -<DD> -Refer to the command <VAR>n</VAR> lines back. - -<DT><CODE>!!</CODE> -<DD> -Refer to the previous command. This is a synonym for <SAMP>`!-1'</SAMP>. - -<DT><CODE>!<VAR>string</VAR></CODE> -<DD> -Refer to the most recent command starting with <VAR>string</VAR>. - -<DT><CODE>!?<VAR>string</VAR>[?]</CODE> -<DD> -Refer to the most recent command containing <VAR>string</VAR>. The trailing -<SAMP>`?'</SAMP> may be omitted if the <VAR>string</VAR> is followed immediately by -a newline. - -<DT><CODE>^<VAR>string1</VAR>^<VAR>string2</VAR>^</CODE> -<DD> -Quick Substitution. Repeat the last command, replacing <VAR>string1</VAR> -with <VAR>string2</VAR>. Equivalent to -<CODE>!!:s/<VAR>string1</VAR>/<VAR>string2</VAR>/</CODE>. - -<DT><CODE>!#</CODE> -<DD> -The entire command line typed so far. - -</DL> - - - -<H3><A NAME="SEC4" HREF="history.html#TOC4">Word Designators</A></H3> - -<P> -Word designators are used to select desired words from the event. -A <SAMP>`:'</SAMP> separates the event specification from the word designator. It -may be omitted if the word designator begins with a <SAMP>`^'</SAMP>, <SAMP>`$'</SAMP>, -<SAMP>`*'</SAMP>, <SAMP>`-'</SAMP>, or <SAMP>`%'</SAMP>. Words are numbered from the beginning -of the line, with the first word being denoted by 0 (zero). Words are -inserted into the current line separated by single spaces. - -</P> -<P> -For example, - -</P> -<DL COMPACT> - -<DT><CODE>!!</CODE> -<DD> -designates the preceding command. When you type this, the preceding -command is repeated in toto. - -<DT><CODE>!!:$</CODE> -<DD> -designates the last argument of the preceding command. This may be -shortened to <CODE>!$</CODE>. - -<DT><CODE>!fi:2</CODE> -<DD> -designates the second argument of the most recent command starting with -the letters <CODE>fi</CODE>. -</DL> - -<P> -Here are the word designators: - -<DL COMPACT> - -<DT><CODE>0 (zero)</CODE> -<DD> -The <CODE>0</CODE>th word. For many applications, this is the command word. - -<DT><CODE><VAR>n</VAR></CODE> -<DD> -The <VAR>n</VAR>th word. - -<DT><CODE>^</CODE> -<DD> -The first argument; that is, word 1. - -<DT><CODE>$</CODE> -<DD> -The last argument. - -<DT><CODE>%</CODE> -<DD> -The word matched by the most recent <SAMP>`?<VAR>string</VAR>?'</SAMP> search. - -<DT><CODE><VAR>x</VAR>-<VAR>y</VAR></CODE> -<DD> -A range of words; <SAMP>`-<VAR>y</VAR>'</SAMP> abbreviates <SAMP>`0-<VAR>y</VAR>'</SAMP>. - -<DT><CODE>*</CODE> -<DD> -All of the words, except the <CODE>0</CODE>th. This is a synonym for <SAMP>`1-$'</SAMP>. -It is not an error to use <SAMP>`*'</SAMP> if there is just one word in the event; -the empty string is returned in that case. - -<DT><CODE><VAR>x</VAR>*</CODE> -<DD> -Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> - -<DT><CODE><VAR>x</VAR>-</CODE> -<DD> -Abbreviates <SAMP>`<VAR>x</VAR>-$'</SAMP> like <SAMP>`<VAR>x</VAR>*'</SAMP>, but omits the last word. - -</DL> - -<P> -If a word designator is supplied without an event specification, the -previous command is used as the event. - -</P> - - -<H3><A NAME="SEC5" HREF="history.html#TOC5">Modifiers</A></H3> - -<P> -After the optional word designator, you can add a sequence of one or more -of the following modifiers, each preceded by a <SAMP>`:'</SAMP>. - -</P> -<DL COMPACT> - -<DT><CODE>h</CODE> -<DD> -Remove a trailing pathname component, leaving only the head. - -<DT><CODE>t</CODE> -<DD> -Remove all leading pathname components, leaving the tail. - -<DT><CODE>r</CODE> -<DD> -Remove a trailing suffix of the form <SAMP>`.<VAR>suffix</VAR>'</SAMP>, leaving -the basename. - -<DT><CODE>e</CODE> -<DD> -Remove all but the trailing suffix. - -<DT><CODE>p</CODE> -<DD> -Print the new command but do not execute it. - -<DT><CODE>s/<VAR>old</VAR>/<VAR>new</VAR>/</CODE> -<DD> -Substitute <VAR>new</VAR> for the first occurrence of <VAR>old</VAR> in the -event line. Any delimiter may be used in place of <SAMP>`/'</SAMP>. -The delimiter may be quoted in <VAR>old</VAR> and <VAR>new</VAR> -with a single backslash. If <SAMP>`&'</SAMP> appears in <VAR>new</VAR>, -it is replaced by <VAR>old</VAR>. A single backslash will quote -the <SAMP>`&'</SAMP>. The final delimiter is optional if it is the last -character on the input line. - -<DT><CODE>&</CODE> -<DD> -Repeat the previous substitution. - -<DT><CODE>g</CODE> -<DD> -Cause changes to be applied over the entire event line. Used in -conjunction with <SAMP>`s'</SAMP>, as in <CODE>gs/<VAR>old</VAR>/<VAR>new</VAR>/</CODE>, -or with <SAMP>`&'</SAMP>. - -</DL> - - - -<H1><A NAME="SEC6" HREF="history.html#TOC6">Programming with GNU History</A></H1> - -<P> -This chapter describes how to interface programs that you write -with the GNU History Library. -It should be considered a technical guide. -For information on the interactive use of GNU History, see section <A HREF="history.html#SEC1">Using History Interactively</A>. - -</P> - -<UL> -<LI><A HREF="history.html#SEC7">Introduction to History</A>: What is the GNU History library for? -<LI><A HREF="history.html#SEC8">History Storage</A>: How information is stored. -<LI><A HREF="history.html#SEC9">History Functions</A>: Functions that you can use. -<LI><A HREF="history.html#SEC17">History Variables</A>: Variables that control behaviour. -<LI><A HREF="history.html#SEC18">History Programming Example</A>: Example of using the GNU History Library. -</UL> - - - -<H2><A NAME="SEC7" HREF="history.html#TOC7">Introduction to History</A></H2> - -<P> -Many programs read input from the user a line at a time. The GNU History -library is able to keep track of those lines, associate arbitrary data with -each line, and utilize information from previous lines in composing new -ones. - -</P> -<P> -The programmer using the History library has available functions -for remembering lines on a history list, associating arbitrary data -with a line, removing lines from the list, searching through the list -for a line containing an arbitrary text string, and referencing any line -in the list directly. In addition, a history <EM>expansion</EM> function -is available which provides for a consistent user interface across -different programs. - -</P> -<P> -The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by <CODE>csh</CODE>. - -</P> -<P> -If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - -</P> -<P> -Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file <CODE><readline/history.h></CODE> in any file that uses the -History library's features. It supplies extern declarations for all -of the library's public functions and variables, and declares all of -the public data structures. - -</P> - - -<H2><A NAME="SEC8" HREF="history.html#TOC8">History Storage</A></H2> - -<P> -The history list is an array of history entries. A history entry is -declared as follows: - -</P> - -<PRE> -typedef struct _hist_entry { - char *line; - char *data; -} HIST_ENTRY; -</PRE> - -<P> -The history list itself might therefore be declared as - -</P> - -<PRE> -HIST_ENTRY **the_history_list; -</PRE> - -<P> -The state of the History library is encapsulated into a single structure: - -</P> - -<PRE> -/* A structure used to pass the current state of the history stuff around. */ -typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; -} HISTORY_STATE; -</PRE> - -<P> -If the flags member includes <CODE>HS_STIFLED</CODE>, the history has been -stifled. - -</P> - - -<H2><A NAME="SEC9" HREF="history.html#TOC9">History Functions</A></H2> - -<P> -This section describes the calling sequence for the various functions -present in GNU History. - -</P> - -<UL> -<LI><A HREF="history.html#SEC10">Initializing History and State Management</A>: Functions to call when you - want to use history in a - program. -<LI><A HREF="history.html#SEC11">History List Management</A>: Functions used to manage the list - of history entries. -<LI><A HREF="history.html#SEC12">Information About the History List</A>: Functions returning information about - the history list. -<LI><A HREF="history.html#SEC13">Moving Around the History List</A>: Functions used to change the position - in the history list. -<LI><A HREF="history.html#SEC14">Searching the History List</A>: Functions to search the history list - for entries containing a string. -<LI><A HREF="history.html#SEC15">Managing the History File</A>: Functions that read and write a file - containing the history list. -<LI><A HREF="history.html#SEC16">History Expansion</A>: Functions to perform csh-like history - expansion. -</UL> - - - -<H3><A NAME="SEC10" HREF="history.html#TOC10">Initializing History and State Management</A></H3> - -<P> -This section describes functions used to initialize and manage -the state of the History library when you want to use the history -functions in your program. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>using_history</B> <I>()</I> -<DD><A NAME="IDX4"></A> -Begin a session in which the history functions might be used. This -initializes the interactive variables. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HISTORY_STATE * <B>history_get_history_state</B> <I>()</I> -<DD><A NAME="IDX5"></A> -Return a structure describing the current state of the input history. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>history_set_history_state</B> <I>(HISTORY_STATE *state)</I> -<DD><A NAME="IDX6"></A> -Set the state of the history list according to <VAR>state</VAR>. -</DL> - -</P> - - -<H3><A NAME="SEC11" HREF="history.html#TOC11">History List Management</A></H3> - -<P> -These functions manage individual entries on the history list, or set -parameters managing the list itself. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>add_history</B> <I>(char *string)</I> -<DD><A NAME="IDX7"></A> -Place <VAR>string</VAR> at the end of the history list. The associated data -field (if any) is set to <CODE>NULL</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>remove_history</B> <I>(int which)</I> -<DD><A NAME="IDX8"></A> -Remove history entry at offset <VAR>which</VAR> from the history. The -removed element is returned so you can free the line, data, -and containing structure. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>replace_history_entry</B> <I>(int which, char *line, char *data)</I> -<DD><A NAME="IDX9"></A> -Make the history entry at offset <VAR>which</VAR> have <VAR>line</VAR> and <VAR>data</VAR>. -This returns the old entry so you can dispose of the data. In the case -of an invalid <VAR>which</VAR>, a <CODE>NULL</CODE> pointer is returned. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>clear_history</B> <I>()</I> -<DD><A NAME="IDX10"></A> -Clear the history list by deleting all the entries. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>stifle_history</B> <I>(int max)</I> -<DD><A NAME="IDX11"></A> -Stifle the history list, remembering only the last <VAR>max</VAR> entries. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>unstifle_history</B> <I>()</I> -<DD><A NAME="IDX12"></A> -Stop stifling the history. This returns the previous amount the -history was stifled. The value is positive if the history was -stifled, negative if it wasn't. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_is_stifled</B> <I>()</I> -<DD><A NAME="IDX13"></A> -Returns non-zero if the history is stifled, zero if it is not. -</DL> - -</P> - - -<H3><A NAME="SEC12" HREF="history.html#TOC12">Information About the History List</A></H3> - -<P> -These functions return information about the entire history list or -individual list entries. - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY ** <B>history_list</B> <I>()</I> -<DD><A NAME="IDX14"></A> -Return a <CODE>NULL</CODE> terminated array of <CODE>HIST_ENTRY</CODE> which is the -current input history. Element 0 of this list is the beginning of time. -If there is no history, return <CODE>NULL</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>where_history</B> <I>()</I> -<DD><A NAME="IDX15"></A> -Returns the offset of the current history element. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>current_history</B> <I>()</I> -<DD><A NAME="IDX16"></A> -Return the history entry at the current position, as determined by -<CODE>where_history ()</CODE>. If there is no entry there, return a <CODE>NULL</CODE> -pointer. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>history_get</B> <I>(int offset)</I> -<DD><A NAME="IDX17"></A> -Return the history entry at position <VAR>offset</VAR>, starting from -<CODE>history_base</CODE>. If there is no entry there, or if <VAR>offset</VAR> -is greater than the history length, return a <CODE>NULL</CODE> pointer. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_total_bytes</B> <I>()</I> -<DD><A NAME="IDX18"></A> -Return the number of bytes that the primary history entries are using. -This function returns the sum of the lengths of all the lines in the -history. -</DL> - -</P> - - -<H3><A NAME="SEC13" HREF="history.html#TOC13">Moving Around the History List</A></H3> - -<P> -These functions allow the current index into the history list to be -set or changed. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_set_pos</B> <I>(int pos)</I> -<DD><A NAME="IDX19"></A> -Set the position in the history list to <VAR>pos</VAR>, an absolute index -into the list. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>previous_history</B> <I>()</I> -<DD><A NAME="IDX20"></A> -Back up the current history offset to the previous history entry, and -return a pointer to that entry. If there is no previous entry, return -a <CODE>NULL</CODE> pointer. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> HIST_ENTRY * <B>next_history</B> <I>()</I> -<DD><A NAME="IDX21"></A> -Move the current history offset forward to the next history entry, and -return the a pointer to that entry. If there is no next entry, return -a <CODE>NULL</CODE> pointer. -</DL> - -</P> - - -<H3><A NAME="SEC14" HREF="history.html#TOC14">Searching the History List</A></H3> -<P> -<A NAME="IDX22"></A> - -</P> -<P> -These functions allow searching of the history list for entries containing -a specific string. Searching may be performed both forward and backward -from the current history position. The search may be <EM>anchored</EM>, -meaning that the string must match at the beginning of the history entry. -<A NAME="IDX23"></A> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_search</B> <I>(char *string, int direction)</I> -<DD><A NAME="IDX24"></A> -Search the history for <VAR>string</VAR>, starting at the current history -offset. If <VAR>direction</VAR> < 0, then the search is through previous entries, -else through subsequent. If <VAR>string</VAR> is found, then -the current history index is set to that history entry, and the value -returned is the offset in the line of the entry where -<VAR>string</VAR> was found. Otherwise, nothing is changed, and a -1 is -returned. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_search_prefix</B> <I>(char *string, int direction)</I> -<DD><A NAME="IDX25"></A> -Search the history for <VAR>string</VAR>, starting at the current history -offset. The search is anchored: matching lines must begin with -<VAR>string</VAR>. If <VAR>direction</VAR> < 0, then the search is through previous -entries, else through subsequent. If <VAR>string</VAR> is found, then the -current history index is set to that entry, and the return value is 0. -Otherwise, nothing is changed, and a -1 is returned. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_search_pos</B> <I>(char *string, int direction, int pos)</I> -<DD><A NAME="IDX26"></A> -Search for <VAR>string</VAR> in the history list, starting at <VAR>pos</VAR>, an -absolute index into the list. If <VAR>direction</VAR> is negative, the search -proceeds backward from <VAR>pos</VAR>, otherwise forward. Returns the absolute -index of the history element where <VAR>string</VAR> was found, or -1 otherwise. -</DL> - -</P> - - -<H3><A NAME="SEC15" HREF="history.html#TOC15">Managing the History File</A></H3> - -<P> -The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>read_history</B> <I>(char *filename)</I> -<DD><A NAME="IDX27"></A> -Add the contents of <VAR>filename</VAR> to the history list, a line at a -time. If <VAR>filename</VAR> is <CODE>NULL</CODE>, then read from -<TT>`~/.history'</TT>. Returns 0 if successful, or errno if not. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>read_history_range</B> <I>(char *filename, int from, int to)</I> -<DD><A NAME="IDX28"></A> -Read a range of lines from <VAR>filename</VAR>, adding them to the history list. -Start reading at line <VAR>from</VAR> and end at <VAR>to</VAR>. If -<VAR>from</VAR> is zero, start at the beginning. If <VAR>to</VAR> is less than -<VAR>from</VAR>, then read until the end of the file. If <VAR>filename</VAR> is -<CODE>NULL</CODE>, then read from <TT>`~/.history'</TT>. Returns 0 if successful, -or <CODE>errno</CODE> if not. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>write_history</B> <I>(char *filename)</I> -<DD><A NAME="IDX29"></A> -Write the current history to <VAR>filename</VAR>, overwriting <VAR>filename</VAR> -if necessary. If <VAR>filename</VAR> is -<CODE>NULL</CODE>, then write the history list to <TT>`~/.history'</TT>. Values -returned are as in <CODE>read_history ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>append_history</B> <I>(int nelements, char *filename)</I> -<DD><A NAME="IDX30"></A> -Append the last <VAR>nelements</VAR> of the history list to <VAR>filename</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_truncate_file</B> <I>(char *filename, int nlines)</I> -<DD><A NAME="IDX31"></A> -Truncate the history file <VAR>filename</VAR>, leaving only the last -<VAR>nlines</VAR> lines. -</DL> - -</P> - - -<H3><A NAME="SEC16" HREF="history.html#TOC16">History Expansion</A></H3> - -<P> -These functions implement <CODE>csh</CODE>-like history expansion. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>history_expand</B> <I>(char *string, char **output)</I> -<DD><A NAME="IDX32"></A> -Expand <VAR>string</VAR>, placing the result into <VAR>output</VAR>, a pointer -to a string (see section <A HREF="history.html#SEC2">History Expansion</A>). Returns: -<DL COMPACT> - -<DT><CODE>0</CODE> -<DD> -If no expansions took place (or, if the only change in -the text was the de-slashifying of the history expansion -character); -<DT><CODE>1</CODE> -<DD> -if expansions did take place; -<DT><CODE>-1</CODE> -<DD> -if there was an error in expansion; -<DT><CODE>2</CODE> -<DD> -if the returned line should be displayed, but not executed, -as with the <CODE>:p</CODE> modifier (see section <A HREF="history.html#SEC5">Modifiers</A>). -</DL> - -<P> -If an error ocurred in expansion, then <VAR>output</VAR> contains a descriptive -error message. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>history_arg_extract</B> <I>(int first, int last, char *string)</I> -<DD><A NAME="IDX33"></A> -Extract a string segment consisting of the <VAR>first</VAR> through <VAR>last</VAR> -arguments present in <VAR>string</VAR>. Arguments are broken up as in Bash. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>get_history_event</B> <I>(char *string, int *cindex, int qchar)</I> -<DD><A NAME="IDX34"></A> -Returns the text of the history event beginning at <VAR>string</VAR> + -<VAR>*cindex</VAR>. <VAR>*cindex</VAR> is modified to point to after the event -specifier. At function entry, <VAR>cindex</VAR> points to the index into -<VAR>string</VAR> where the history event specification begins. <VAR>qchar</VAR> -is a character that is allowed to end the event specification in addition -to the "normal" terminating characters. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>history_tokenize</B> <I>(char *string)</I> -<DD><A NAME="IDX35"></A> -Return an array of tokens parsed out of <VAR>string</VAR>, much as the -shell might. The tokens are split on white space and on the -characters <CODE>()<>;&|$</CODE>, and shell quoting conventions are -obeyed. -</DL> - -</P> - - -<H2><A NAME="SEC17" HREF="history.html#TOC17">History Variables</A></H2> - -<P> -This section describes the externally visible variables exported by -the GNU History Library. - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_base</B> -<DD><A NAME="IDX36"></A> -The logical offset of the first entry in the history list. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_length</B> -<DD><A NAME="IDX37"></A> -The number of entries currently stored in the history list. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>max_input_history</B> -<DD><A NAME="IDX38"></A> -The maximum number of history entries. This must be changed using -<CODE>stifle_history ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_expansion_char</B> -<DD><A NAME="IDX39"></A> -The character that starts a history event. The default is <SAMP>`!'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_subst_char</B> -<DD><A NAME="IDX40"></A> -The character that invokes word substitution if found at the start of -a line. The default is <SAMP>`^'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char <B>history_comment_char</B> -<DD><A NAME="IDX41"></A> -During tokenization, if this character is seen as the first character -of a word, then it and all subsequent characters up to a newline are -ignored, suppressing history expansion for the remainder of the line. -This is disabled by default. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>history_no_expand_chars</B> -<DD><A NAME="IDX42"></A> -The list of characters which inhibit history expansion if found immediately -following <VAR>history_expansion_char</VAR>. The default is whitespace and -<SAMP>`='</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>history_search_delimiter_chars</B> -<DD><A NAME="IDX43"></A> -The list of additional characters which can delimit a history search -string, in addition to whitespace, <SAMP>`:'</SAMP> and <SAMP>`?'</SAMP> in the case of -a substring search. The default is empty. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>history_quotes_inhibit_expansion</B> -<DD><A NAME="IDX44"></A> -If non-zero, single-quoted words are not scanned for the history expansion -character. The default value is 0. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>history_inhibit_expansion_function</B> -<DD><A NAME="IDX45"></A> -This should be set to the address of a function that takes two arguments: -a <CODE>char *</CODE> (<VAR>string</VAR>) and an integer index into that string (<VAR>i</VAR>). -It should return a non-zero value if the history expansion starting at -<VAR>string[i]</VAR> should not be performed; zero if the expansion should -be done. -It is intended for use by applications like Bash that use the history -expansion character for additional purposes. -By default, this variable is set to NULL. -</DL> - -</P> - - -<H2><A NAME="SEC18" HREF="history.html#TOC18">History Programming Example</A></H2> - -<P> -The following program demonstrates simple use of the GNU History Library. - -</P> - -<PRE> -main () -{ - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } -} -</PRE> - - - -<H1><A NAME="SEC19" HREF="history.html#TOC19">Concept Index</A></H1> -<P> -Jump to: -<A HREF="#cindex_a">a</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_h">h</A> -<P> -<H2><A NAME="cindex_a">a</A></H2> -<DIR> -<LI><A HREF="history.html#IDX23">anchored search</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="history.html#IDX2">event designators</A> -</DIR> -<H2><A NAME="cindex_h">h</A></H2> -<DIR> -<LI><A HREF="history.html#IDX3">history events</A> -<LI><A HREF="history.html#IDX1">history expansion</A> -<LI><A HREF="history.html#IDX22">History Searching</A> -</DIR> - -</P> - - -<H1><A NAME="SEC20" HREF="history.html#TOC20">Function and Variable Index</A></H1> -<P> -Jump to: -<A HREF="#vindex_a">a</A> -- -<A HREF="#vindex_c">c</A> -- -<A HREF="#vindex_g">g</A> -- -<A HREF="#vindex_h">h</A> -- -<A HREF="#vindex_m">m</A> -- -<A HREF="#vindex_n">n</A> -- -<A HREF="#vindex_p">p</A> -- -<A HREF="#vindex_r">r</A> -- -<A HREF="#vindex_s">s</A> -- -<A HREF="#vindex_u">u</A> -- -<A HREF="#vindex_w">w</A> -<P> -<H2><A NAME="vindex_a">a</A></H2> -<DIR> -<LI><A HREF="history.html#IDX7">add_history</A> -<LI><A HREF="history.html#IDX30">append_history</A> -</DIR> -<H2><A NAME="vindex_c">c</A></H2> -<DIR> -<LI><A HREF="history.html#IDX10">clear_history</A> -<LI><A HREF="history.html#IDX16">current_history</A> -</DIR> -<H2><A NAME="vindex_g">g</A></H2> -<DIR> -<LI><A HREF="history.html#IDX34">get_history_event</A> -</DIR> -<H2><A NAME="vindex_h">h</A></H2> -<DIR> -<LI><A HREF="history.html#IDX33">history_arg_extract</A> -<LI><A HREF="history.html#IDX36">history_base</A> -<LI><A HREF="history.html#IDX41">history_comment_char</A> -<LI><A HREF="history.html#IDX32">history_expand</A> -<LI><A HREF="history.html#IDX39">history_expansion_char</A> -<LI><A HREF="history.html#IDX17">history_get</A> -<LI><A HREF="history.html#IDX5">history_get_history_state</A> -<LI><A HREF="history.html#IDX45">history_inhibit_expansion_function</A> -<LI><A HREF="history.html#IDX13">history_is_stifled</A> -<LI><A HREF="history.html#IDX37">history_length</A> -<LI><A HREF="history.html#IDX14">history_list</A> -<LI><A HREF="history.html#IDX42">history_no_expand_chars</A> -<LI><A HREF="history.html#IDX44">history_quotes_inhibit_expansion</A> -<LI><A HREF="history.html#IDX24">history_search</A> -<LI><A HREF="history.html#IDX43">history_search_delimiter_chars</A> -<LI><A HREF="history.html#IDX26">history_search_pos</A> -<LI><A HREF="history.html#IDX25">history_search_prefix</A> -<LI><A HREF="history.html#IDX6">history_set_history_state</A> -<LI><A HREF="history.html#IDX19">history_set_pos</A> -<LI><A HREF="history.html#IDX40">history_subst_char</A> -<LI><A HREF="history.html#IDX35">history_tokenize</A> -<LI><A HREF="history.html#IDX18">history_total_bytes</A> -<LI><A HREF="history.html#IDX31">history_truncate_file</A> -</DIR> -<H2><A NAME="vindex_m">m</A></H2> -<DIR> -<LI><A HREF="history.html#IDX38">max_input_history</A> -</DIR> -<H2><A NAME="vindex_n">n</A></H2> -<DIR> -<LI><A HREF="history.html#IDX21">next_history</A> -</DIR> -<H2><A NAME="vindex_p">p</A></H2> -<DIR> -<LI><A HREF="history.html#IDX20">previous_history</A> -</DIR> -<H2><A NAME="vindex_r">r</A></H2> -<DIR> -<LI><A HREF="history.html#IDX27">read_history</A> -<LI><A HREF="history.html#IDX28">read_history_range</A> -<LI><A HREF="history.html#IDX8">remove_history</A> -<LI><A HREF="history.html#IDX9">replace_history_entry</A> -</DIR> -<H2><A NAME="vindex_s">s</A></H2> -<DIR> -<LI><A HREF="history.html#IDX11">stifle_history</A> -</DIR> -<H2><A NAME="vindex_u">u</A></H2> -<DIR> -<LI><A HREF="history.html#IDX12">unstifle_history</A> -<LI><A HREF="history.html#IDX4">using_history</A> -</DIR> -<H2><A NAME="vindex_w">w</A></H2> -<DIR> -<LI><A HREF="history.html#IDX15">where_history</A> -<LI><A HREF="history.html#IDX29">write_history</A> -</DIR> - -</P> -<P><HR><P> -This document was generated on 19 January 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/gnu/lib/libreadline/doc/history.info b/gnu/lib/libreadline/doc/history.info deleted file mode 100644 index e73cd631cca..00000000000 --- a/gnu/lib/libreadline/doc/history.info +++ /dev/null @@ -1,811 +0,0 @@ -This is Info file history.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* History: (history). The GNU history library API -END-INFO-DIR-ENTRY - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - - Copyright (C) 1988-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: history.info, Node: Top, Next: Using History Interactively, Up: (dir) - -GNU History Library -******************* - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - -* Menu: - -* Using History Interactively:: GNU History User's Manual. -* Programming with GNU History:: GNU History Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top - -Using History Interactively -*************************** - - This chapter describes how to use the GNU History Library -interactively, from a user's standpoint. It should be considered a -user's guide. For information on using the GNU History Library in your -own programs, *note Programming with GNU History::.. - -* Menu: - -* History Interaction:: What it feels like using History as a user. - - -File: history.info, Node: History Interaction, Up: Using History Interactively - -History Expansion -================= - - The History library provides a history expansion feature that is -similar to the history expansion provided by `csh'. This section -describes the syntax used to manipulate the history information. - - History expansions introduce words from the history list into the -input stream, making it easy to repeat commands, insert the arguments -to a previous command into the current input line, or fix errors in -previous commands quickly. - - History expansion takes place in two parts. The first is to -determine which line from the history list should be used during -substitution. The second is to select portions of that line for -inclusion into the current one. The line selected from the history is -called the "event", and the portions of that line that are acted upon -are called "words". Various "modifiers" are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several words surrounded by quotes are -considered one word. History expansions are introduced by the -appearance of the history expansion character, which is `!' by default. - -* Menu: - -* Event Designators:: How to specify which history line to use. -* Word Designators:: Specifying which words are of interest. -* Modifiers:: Modifying the results of substitution. - - -File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction - -Event Designators ------------------ - - An event designator is a reference to a command line entry in the -history list. - -`!' - Start a history substitution, except when followed by a space, tab, - the end of the line, `=' or `('. - -`!N' - Refer to command line N. - -`!-N' - Refer to the command N lines back. - -`!!' - Refer to the previous command. This is a synonym for `!-1'. - -`!STRING' - Refer to the most recent command starting with STRING. - -`!?STRING[?]' - Refer to the most recent command containing STRING. The trailing - `?' may be omitted if the STRING is followed immediately by a - newline. - -`^STRING1^STRING2^' - Quick Substitution. Repeat the last command, replacing STRING1 - with STRING2. Equivalent to `!!:s/STRING1/STRING2/'. - -`!#' - The entire command line typed so far. - - -File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction - -Word Designators ----------------- - - Word designators are used to select desired words from the event. A -`:' separates the event specification from the word designator. It may -be omitted if the word designator begins with a `^', `$', `*', `-', or -`%'. Words are numbered from the beginning of the line, with the first -word being denoted by 0 (zero). Words are inserted into the current -line separated by single spaces. - - For example, - -`!!' - designates the preceding command. When you type this, the - preceding command is repeated in toto. - -`!!:$' - designates the last argument of the preceding command. This may be - shortened to `!$'. - -`!fi:2' - designates the second argument of the most recent command starting - with the letters `fi'. - - Here are the word designators: - -`0 (zero)' - The `0'th word. For many applications, this is the command word. - -`N' - The Nth word. - -`^' - The first argument; that is, word 1. - -`$' - The last argument. - -`%' - The word matched by the most recent `?STRING?' search. - -`X-Y' - A range of words; `-Y' abbreviates `0-Y'. - -`*' - All of the words, except the `0'th. This is a synonym for `1-$'. - It is not an error to use `*' if there is just one word in the - event; the empty string is returned in that case. - -`X*' - Abbreviates `X-$' - -`X-' - Abbreviates `X-$' like `X*', but omits the last word. - - If a word designator is supplied without an event specification, the -previous command is used as the event. - - -File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction - -Modifiers ---------- - - After the optional word designator, you can add a sequence of one or -more of the following modifiers, each preceded by a `:'. - -`h' - Remove a trailing pathname component, leaving only the head. - -`t' - Remove all leading pathname components, leaving the tail. - -`r' - Remove a trailing suffix of the form `.SUFFIX', leaving the - basename. - -`e' - Remove all but the trailing suffix. - -`p' - Print the new command but do not execute it. - -`s/OLD/NEW/' - Substitute NEW for the first occurrence of OLD in the event line. - Any delimiter may be used in place of `/'. The delimiter may be - quoted in OLD and NEW with a single backslash. If `&' appears in - NEW, it is replaced by OLD. A single backslash will quote the - `&'. The final delimiter is optional if it is the last character - on the input line. - -`&' - Repeat the previous substitution. - -`g' - Cause changes to be applied over the entire event line. Used in - conjunction with `s', as in `gs/OLD/NEW/', or with `&'. - - -File: history.info, Node: Programming with GNU History, Next: Concept Index, Prev: Using History Interactively, Up: Top - -Programming with GNU History -**************************** - - This chapter describes how to interface programs that you write with -the GNU History Library. It should be considered a technical guide. -For information on the interactive use of GNU History, *note Using -History Interactively::.. - -* Menu: - -* Introduction to History:: What is the GNU History library for? -* History Storage:: How information is stored. -* History Functions:: Functions that you can use. -* History Variables:: Variables that control behaviour. -* History Programming Example:: Example of using the GNU History Library. - - -File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History - -Introduction to History -======================= - - Many programs read input from the user a line at a time. The GNU -History library is able to keep track of those lines, associate -arbitrary data with each line, and utilize information from previous -lines in composing new ones. - - The programmer using the History library has available functions for -remembering lines on a history list, associating arbitrary data with a -line, removing lines from the list, searching through the list for a -line containing an arbitrary text string, and referencing any line in -the list directly. In addition, a history "expansion" function is -available which provides for a consistent user interface across -different programs. - - The user using programs written with the History library has the -benefit of a consistent user interface with a set of well-known -commands for manipulating the text of previous lines and using that text -in new commands. The basic history manipulation commands are similar to -the history substitution provided by `csh'. - - If the programmer desires, he can use the Readline library, which -includes some history manipulation by default, and has the added -advantage of command line editing. - - Before declaring any functions using any functionality the History -library provides in other code, an application writer should include -the file `<readline/history.h>' in any file that uses the History -library's features. It supplies extern declarations for all of the -library's public functions and variables, and declares all of the -public data structures. - - -File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History - -History Storage -=============== - - The history list is an array of history entries. A history entry is -declared as follows: - - typedef struct _hist_entry { - char *line; - char *data; - } HIST_ENTRY; - - The history list itself might therefore be declared as - - HIST_ENTRY **the_history_list; - - The state of the History library is encapsulated into a single -structure: - - /* A structure used to pass the current state of the history stuff around. */ - typedef struct _hist_state { - HIST_ENTRY **entries; /* Pointer to the entries themselves. */ - int offset; /* The location pointer within this array. */ - int length; /* Number of elements within this array. */ - int size; /* Number of slots allocated to this array. */ - int flags; - } HISTORY_STATE; - - If the flags member includes `HS_STIFLED', the history has been -stifled. - - -File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History - -History Functions -================= - - This section describes the calling sequence for the various functions -present in GNU History. - -* Menu: - -* Initializing History and State Management:: Functions to call when you - want to use history in a - program. -* History List Management:: Functions used to manage the list - of history entries. -* Information About the History List:: Functions returning information about - the history list. -* Moving Around the History List:: Functions used to change the position - in the history list. -* Searching the History List:: Functions to search the history list - for entries containing a string. -* Managing the History File:: Functions that read and write a file - containing the history list. -* History Expansion:: Functions to perform csh-like history - expansion. - - -File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions - -Initializing History and State Management ------------------------------------------ - - This section describes functions used to initialize and manage the -state of the History library when you want to use the history functions -in your program. - - - Function: void using_history () - Begin a session in which the history functions might be used. This - initializes the interactive variables. - - - Function: HISTORY_STATE * history_get_history_state () - Return a structure describing the current state of the input - history. - - - Function: void history_set_history_state (HISTORY_STATE *state) - Set the state of the history list according to STATE. - - -File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions - -History List Management ------------------------ - - These functions manage individual entries on the history list, or set -parameters managing the list itself. - - - Function: void add_history (char *string) - Place STRING at the end of the history list. The associated data - field (if any) is set to `NULL'. - - - Function: HIST_ENTRY * remove_history (int which) - Remove history entry at offset WHICH from the history. The - removed element is returned so you can free the line, data, and - containing structure. - - - Function: HIST_ENTRY * replace_history_entry (int which, char *line, - char *data) - Make the history entry at offset WHICH have LINE and DATA. This - returns the old entry so you can dispose of the data. In the case - of an invalid WHICH, a `NULL' pointer is returned. - - - Function: void clear_history () - Clear the history list by deleting all the entries. - - - Function: void stifle_history (int max) - Stifle the history list, remembering only the last MAX entries. - - - Function: int unstifle_history () - Stop stifling the history. This returns the previous amount the - history was stifled. The value is positive if the history was - stifled, negative if it wasn't. - - - Function: int history_is_stifled () - Returns non-zero if the history is stifled, zero if it is not. - - -File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions - -Information About the History List ----------------------------------- - - These functions return information about the entire history list or -individual list entries. - - - Function: HIST_ENTRY ** history_list () - Return a `NULL' terminated array of `HIST_ENTRY' which is the - current input history. Element 0 of this list is the beginning of - time. If there is no history, return `NULL'. - - - Function: int where_history () - Returns the offset of the current history element. - - - Function: HIST_ENTRY * current_history () - Return the history entry at the current position, as determined by - `where_history ()'. If there is no entry there, return a `NULL' - pointer. - - - Function: HIST_ENTRY * history_get (int offset) - Return the history entry at position OFFSET, starting from - `history_base'. If there is no entry there, or if OFFSET is - greater than the history length, return a `NULL' pointer. - - - Function: int history_total_bytes () - Return the number of bytes that the primary history entries are - using. This function returns the sum of the lengths of all the - lines in the history. - - -File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions - -Moving Around the History List ------------------------------- - - These functions allow the current index into the history list to be -set or changed. - - - Function: int history_set_pos (int pos) - Set the position in the history list to POS, an absolute index - into the list. - - - Function: HIST_ENTRY * previous_history () - Back up the current history offset to the previous history entry, - and return a pointer to that entry. If there is no previous - entry, return a `NULL' pointer. - - - Function: HIST_ENTRY * next_history () - Move the current history offset forward to the next history entry, - and return the a pointer to that entry. If there is no next - entry, return a `NULL' pointer. - - -File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions - -Searching the History List --------------------------- - - These functions allow searching of the history list for entries -containing a specific string. Searching may be performed both forward -and backward from the current history position. The search may be -"anchored", meaning that the string must match at the beginning of the -history entry. - - - Function: int history_search (char *string, int direction) - Search the history for STRING, starting at the current history - offset. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that history entry, and the value - returned is the offset in the line of the entry where STRING was - found. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_prefix (char *string, int direction) - Search the history for STRING, starting at the current history - offset. The search is anchored: matching lines must begin with - STRING. If DIRECTION < 0, then the search is through previous - entries, else through subsequent. If STRING is found, then the - current history index is set to that entry, and the return value - is 0. Otherwise, nothing is changed, and a -1 is returned. - - - Function: int history_search_pos (char *string, int direction, int - pos) - Search for STRING in the history list, starting at POS, an - absolute index into the list. If DIRECTION is negative, the search - proceeds backward from POS, otherwise forward. Returns the - absolute index of the history element where STRING was found, or - -1 otherwise. - - -File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions - -Managing the History File -------------------------- - - The History library can read the history from and write it to a file. -This section documents the functions for managing a history file. - - - Function: int read_history (char *filename) - Add the contents of FILENAME to the history list, a line at a - time. If FILENAME is `NULL', then read from `~/.history'. - Returns 0 if successful, or errno if not. - - - Function: int read_history_range (char *filename, int from, int to) - Read a range of lines from FILENAME, adding them to the history - list. Start reading at line FROM and end at TO. If FROM is zero, - start at the beginning. If TO is less than FROM, then read until - the end of the file. If FILENAME is `NULL', then read from - `~/.history'. Returns 0 if successful, or `errno' if not. - - - Function: int write_history (char *filename) - Write the current history to FILENAME, overwriting FILENAME if - necessary. If FILENAME is `NULL', then write the history list to - `~/.history'. Values returned are as in `read_history ()'. - - - Function: int append_history (int nelements, char *filename) - Append the last NELEMENTS of the history list to FILENAME. - - - Function: int history_truncate_file (char *filename, int nlines) - Truncate the history file FILENAME, leaving only the last NLINES - lines. - - -File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions - -History Expansion ------------------ - - These functions implement `csh'-like history expansion. - - - Function: int history_expand (char *string, char **output) - Expand STRING, placing the result into OUTPUT, a pointer to a - string (*note History Interaction::.). Returns: - `0' - If no expansions took place (or, if the only change in the - text was the de-slashifying of the history expansion - character); - - `1' - if expansions did take place; - - `-1' - if there was an error in expansion; - - `2' - if the returned line should be displayed, but not executed, - as with the `:p' modifier (*note Modifiers::.). - - If an error ocurred in expansion, then OUTPUT contains a - descriptive error message. - - - Function: char * history_arg_extract (int first, int last, char - *string) - Extract a string segment consisting of the FIRST through LAST - arguments present in STRING. Arguments are broken up as in Bash. - - - Function: char * get_history_event (char *string, int *cindex, int - qchar) - Returns the text of the history event beginning at STRING + - *CINDEX. *CINDEX is modified to point to after the event - specifier. At function entry, CINDEX points to the index into - STRING where the history event specification begins. QCHAR is a - character that is allowed to end the event specification in - addition to the "normal" terminating characters. - - - Function: char ** history_tokenize (char *string) - Return an array of tokens parsed out of STRING, much as the shell - might. The tokens are split on white space and on the characters - `()<>;&|$', and shell quoting conventions are obeyed. - - -File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History - -History Variables -================= - - This section describes the externally visible variables exported by -the GNU History Library. - - - Variable: int history_base - The logical offset of the first entry in the history list. - - - Variable: int history_length - The number of entries currently stored in the history list. - - - Variable: int max_input_history - The maximum number of history entries. This must be changed using - `stifle_history ()'. - - - Variable: char history_expansion_char - The character that starts a history event. The default is `!'. - - - Variable: char history_subst_char - The character that invokes word substitution if found at the start - of a line. The default is `^'. - - - Variable: char history_comment_char - During tokenization, if this character is seen as the first - character of a word, then it and all subsequent characters up to a - newline are ignored, suppressing history expansion for the - remainder of the line. This is disabled by default. - - - Variable: char * history_no_expand_chars - The list of characters which inhibit history expansion if found - immediately following HISTORY_EXPANSION_CHAR. The default is - whitespace and `='. - - - Variable: char * history_search_delimiter_chars - The list of additional characters which can delimit a history - search string, in addition to whitespace, `:' and `?' in the case - of a substring search. The default is empty. - - - Variable: int history_quotes_inhibit_expansion - If non-zero, single-quoted words are not scanned for the history - expansion character. The default value is 0. - - - Variable: Function * history_inhibit_expansion_function - This should be set to the address of a function that takes two - arguments: a `char *' (STRING) and an integer index into that - string (I). It should return a non-zero value if the history - expansion starting at STRING[I] should not be performed; zero if - the expansion should be done. It is intended for use by - applications like Bash that use the history expansion character - for additional purposes. By default, this variable is set to NULL. - - -File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History - -History Programming Example -=========================== - - The following program demonstrates simple use of the GNU History -Library. - - main () - { - char line[1024], *t; - int len, done = 0; - - line[0] = 0; - - using_history (); - while (!done) - { - printf ("history$ "); - fflush (stdout); - t = fgets (line, sizeof (line) - 1, stdin); - if (t && *t) - { - len = strlen (t); - if (t[len - 1] == '\n') - t[len - 1] = '\0'; - } - - if (!t) - strcpy (line, "quit"); - - if (line[0]) - { - char *expansion; - int result; - - result = history_expand (line, &expansion); - if (result) - fprintf (stderr, "%s\n", expansion); - - if (result < 0 || result == 2) - { - free (expansion); - continue; - } - - add_history (expansion); - strncpy (line, expansion, sizeof (line) - 1); - free (expansion); - } - - if (strcmp (line, "quit") == 0) - done = 1; - else if (strcmp (line, "save") == 0) - write_history ("history_file"); - else if (strcmp (line, "read") == 0) - read_history ("history_file"); - else if (strcmp (line, "list") == 0) - { - register HIST_ENTRY **the_list; - register int i; - - the_list = history_list (); - if (the_list) - for (i = 0; the_list[i]; i++) - printf ("%d: %s\n", i + history_base, the_list[i]->line); - } - else if (strncmp (line, "delete", 6) == 0) - { - int which; - if ((sscanf (line + 6, "%d", &which)) == 1) - { - HIST_ENTRY *entry = remove_history (which); - if (!entry) - fprintf (stderr, "No such entry %d\n", which); - else - { - free (entry->line); - free (entry); - } - } - else - { - fprintf (stderr, "non-numeric arg given to `delete'\n"); - } - } - } - } - - -File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU History, Up: Top - -Concept Index -************* - -* Menu: - -* anchored search: Searching the History List. -* event designators: Event Designators. -* history events: Event Designators. -* history expansion: History Interaction. -* History Searching: Searching the History List. - - -File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* add_history: History List Management. -* append_history: Managing the History File. -* clear_history: History List Management. -* current_history: Information About the History List. -* get_history_event: History Expansion. -* history_arg_extract: History Expansion. -* history_base: History Variables. -* history_comment_char: History Variables. -* history_expand: History Expansion. -* history_expansion_char: History Variables. -* history_get: Information About the History List. -* history_get_history_state: Initializing History and State Management. -* history_inhibit_expansion_function: History Variables. -* history_is_stifled: History List Management. -* history_length: History Variables. -* history_list: Information About the History List. -* history_no_expand_chars: History Variables. -* history_quotes_inhibit_expansion: History Variables. -* history_search: Searching the History List. -* history_search_delimiter_chars: History Variables. -* history_search_pos: Searching the History List. -* history_search_prefix: Searching the History List. -* history_set_history_state: Initializing History and State Management. -* history_set_pos: Moving Around the History List. -* history_subst_char: History Variables. -* history_tokenize: History Expansion. -* history_total_bytes: Information About the History List. -* history_truncate_file: Managing the History File. -* max_input_history: History Variables. -* next_history: Moving Around the History List. -* previous_history: Moving Around the History List. -* read_history: Managing the History File. -* read_history_range: Managing the History File. -* remove_history: History List Management. -* replace_history_entry: History List Management. -* stifle_history: History List Management. -* unstifle_history: History List Management. -* using_history: Initializing History and State Management. -* where_history: Information About the History List. -* write_history: Managing the History File. - - - -Tag Table: -Node: Top1162 -Node: Using History Interactively1742 -Node: History Interaction2250 -Node: Event Designators3669 -Node: Word Designators4596 -Node: Modifiers6225 -Node: Programming with GNU History7363 -Node: Introduction to History8089 -Node: History Storage9774 -Node: History Functions10867 -Node: Initializing History and State Management11838 -Node: History List Management12630 -Node: Information About the History List14151 -Node: Moving Around the History List15457 -Node: Searching the History List16342 -Node: Managing the History File18174 -Node: History Expansion19680 -Node: History Variables21519 -Node: History Programming Example23837 -Node: Concept Index26441 -Node: Function and Variable Index26927 - -End Tag Table diff --git a/gnu/lib/libreadline/doc/history.ps b/gnu/lib/libreadline/doc/history.ps deleted file mode 100644 index abd781068ef..00000000000 --- a/gnu/lib/libreadline/doc/history.ps +++ /dev/null @@ -1,1636 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: history.dvi -%%Pages: 20 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o history.ps history.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2000.01.19:1217 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (history.dvi) -@start -%DVIPSBitmapFont: Fa cmti10 10.95 1 -/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbxti10 14.4 1 -/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmtt9 9 26 -/Fc 26 123 df<EAFFFEA30F037E7E14>95 D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA -07FC121FEA3C1C127012E0A3EA707C383FFF80EA0F8F11107E8F14>97 -D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0E -EA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804EA7000126012E0A4126012 -70EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130EA5EA07CEEA0FFEEA1C3EEA -301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF12177F9614>I<EA07E0EA0FF0 -EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA380EEA1C1EEA0FFCEA03F0 -0F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12FFEA0700ACEAFFF8A20F17 -7F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA3018EA3838EA3FF0EA37C000 -70C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C1EEA1FFCEA07F011197F8F -14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF8FE0A21317809614>I<1206 -120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I<12FCA2121CA5EBFF80A2EB -1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF1F80A21117809614>107 -D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF383CF380A2EA38E3AA38FE -FBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA38FF8FE0A21310808F14> -I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA3C78EA1FF0EA07C00F107E -8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB0380001E1300EA1F0EEA1D -FCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA1C1FEA300F1270487EA6EA -700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F14>I<EAFE1FEB7F80EA0E -E3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8EA3FF8EA603812C0A2EA -F000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFFF8EACFE00F107E8F14> -I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F00F157F9414>I<EAFC3F -A2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A2383C1E00EA1C1CA36C5A -A3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700EA380EA3EA39CEA3EA -1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA0E78EA07705B12036C -5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38FE3F80A2381C0E005B -A2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7FC127E123C11187F8F -14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA0700120EEA1C07123812 -70B5FCA210107F8F14>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmsl9 9 1 -/Fd 1 47 df<1270A212F0126004047D830B>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmr9 9 24 -/Fe 24 122 df<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA6006A2EA70 -0EEA300CEA381CEA1C38EA07E010187F9713>48 D<12035AB4FC1207B3A2EA7FF80D187D -9713>I<EA01F8EA0704EA0C06EA180E123013001270126012E0EAE3E0EAE418EAE80CEA -F00EEAE0061307A31260A2EA7006EA300EEA180CEA0C38EA07E010187F9713>54 -D<1240EA7FFF13FEA2EA4004EA80081310A2EA00201340A21380120113005AA25A1206A2 -120EA5120410197E9813>I<EA07E0EA1818EA300CEA20061260A21270EA780CEA3E18EA -1F30EA07C0EA03E0EA0CF8EA307CEA601E130FEAC0071303A3EA6002EA2004EA1818EA07 -E010187F9713>I<EA07E0EA1C30EA3018EA700CEA600EEAE006A21307A31260EA700FEA -3017EA1827EA07C7EA00071306130E130C12701318EA6030EA3060EA0F8010187F9713> -I<39FFE1FFC0390E001C00AB380FFFFC380E001CAC39FFE1FFC01A1A7F991D>72 -D<EA0FC2EA1836EA200EEA600612C01302A3EAE0001270127EEA3FE0EA1FF8EA03FCEA00 -7E130E130713031280A3EAC0021306EAE004EAD818EA87E0101A7E9915>83 -D<EA1FC0EA38707FEA101C1200A2EA03FCEA1E1C1238127012E01480A2133CEA705F381F -8F0011107F8F13>97 D<EA07F8EA1C1C1238EA700813005AA612701304EA3808EA1C18EA -07E00E107F8F11>99 D<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C -5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA600C12E0EAFFFCEAE0 -00A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA0FCF3818718038303000EA70 -38A4EA30306C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA6006EA38 -1CEA07E011187F8F13>103 D<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF014 -1A809915>I<1218123CA212181200A612FC121CAE12FF081A80990A>I<EAFC7CEA1D8738 -1E0380A2121CAB38FF9FF01410808F15>110 D<EA07E0EA1C38EA300CEA700EEA6006EA -E007A6EA6006EA700EEA381CEA1C38EA07E010107F8F13>I<EAFCFCEA1D07381E038038 -1C01C0A2EB00E0A6EB01C01480381E0300EA1D06EA1CF890C7FCA6B47E1317808F15>I< -EAFC78EA1D9CEA1E1C1308EA1C00ABEAFF800E10808F0F>114 D<EA1F20EA60E0EA4020 -12C0A2EAF000127FEA3FC0EA1FE0EA00F0EA8070133012C01320EAF040EA8F800C107F8F -0F>I<1208A41218A21238EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38 -FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14> -118 D<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA -181CEA381E38FC3FC012107F8F14>120 D<38FF0F80383C0700EA1C061304A26C5AA26C -5AA3EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmss10 10.95 2 -/Ff 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmbx10 12 27 -/Fg 27 123 df<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2 -ECFF80B6FCA2380FC01FB2397FF8FFF0A21C237FA220>12 D<90380FFF80137F3801FC1F -3803F03FEA07E0EA0FC0141FA7B6FCA2380FC01FB2397FF8FFF0A21C237FA220>I<EA07 -FE381FFF80383F07E06D7E130180121E1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA -7C02EA7E0C391FF87F803807E03F19167E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF0 -3EEBC01F9038800F8015C0140715E0A715C0A2140F15809038C01F00381E707E381C3FFC -38180FE01B237EA220>I<EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC -12FCA6127C127EA2003E13186C1330380FC0603807FFC0C6130015167E9519>I<49B4FC -A2EB003FAB13FE3807FFBF380FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C -5B380F81FF3907FF3FE0EA01FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E -00F0127E007C13F8147812FCB512F8A200FCC7FCA3127CA26C1318A26C1330380F80E038 -03FFC0C6130015167E951A>I<EB1F80EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC0 -00A6EAFFFEA2EA0FC0B2EA7FFCA214237EA212>I<9038FE0F803903FF9FC0380F83E338 -1F01F3391E00F000003E7FA5001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2 -121C381FFFE014FC6C13FF7E001F1480397C001FC00078130F00F81307A3007CEB0F806C -EB1F00381F807E6CB45A000113E01A217F951D>I<B47EA2121FABEB83F0EB8FFCEB987E -EBA03EEBC03FA21380AE39FFF1FFE0A21B237DA220>I<121E123FEA7F80A4EA3F00121E -C7FCA6EAFF80A2121FB2EAFFF0A20C247EA30F>I<B47EA2121FABECFF80A2EC3C001430 -14E0EB81C00183C7FC1386139E13BE13FFEBDF80EB8FC01307806D7E6D7E130080147E39 -FFE1FFC0A21A237EA21E>107 D<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F8 -03F890390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FF -F0FFF0A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FF -E0A21B167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7 -007C133E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87 -F0EBBFFC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EB -F07EEBBFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>I<EBFE033807FF07380FC1CF38 -1F00DF48137F007E7FA2127C12FCA7127EA2003E5B6C5BEA0FC13807FF3FEA00FC1300A8 -903801FFE0A21B207E951E>I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000AD -EAFFF8A214167E9518>I<3807F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA -7FFE6C7E6C1380120738003FC0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812 -167E9517>I<487EA41203A21207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3 -EA07FEEA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01 -FC1B167D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA2 -6C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3 -FF83FCA23A1F807C00E0D80FC014C08001E013010007017F1380A2D803F0EB0300ECCF83 -01F81387D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118 -136026167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD8013 -7F91C7FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48487E000E137F39FF81FF -E0A21B167F951E>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035B -A26C6C5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC38 -13305BEA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F -00E0138038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB -00E0EA7E03B5FCA214167E9519>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmtt10 12 24 -/Fh 24 119 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<1338137CA2136C13EEA313 -C6A2EA01C7A438038380A4380701C0A213FFA24813E0EA0E00A4481370387F01FC38FF83 -FE387F01FC171E7F9D1A>65 D<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0EA3 -90C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E001CA51400A2EB03 -80A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<38FF83FEA3381C00 -70AA381FFFF0A3381C0070AB38FF83FEA3171E7F9D1A>72 D<B51280A33801C000B3A6B5 -1280A3111E7C9D1A>I<38FE03FE12FFA2381D8070A213C0121CA213E0A213601370A213 -301338A21318131CA2130C130EA21306A213071303A238FF81F0A21380171E7F9D1A>78 -D<EA0FFE383FFF804813C0EA7C07EA700100F013E0EAE000B1EAF001A2007013C0EA7C07 -EA7FFF6C1380380FFE00131E7D9D1A>I<EAFFFC13FF1480381C07C0EB01E0EB00F01470 -A414F0EB01E0EB07C0381FFF8014001480381C07C01301EB00E0A514E214E7A338FF807E -A21438181E7F9D1A>82 D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12 -701278123FEA1FF0EA07FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF001 -38FC03C0B5128000EF1300EAE3FC141E7D9D1A>I<387FFFFEB5FCA238E0380EA5000013 -00B33803FF80A3171E7F9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003 -138013C700011300A2EA00EEA2137CA21338AA48B4FCA3171E7F9D1A>89 -D<387FFFC0B512E0A26C13C013047D7E1A>95 D<EA1FF0EA3FFC487EEA780FEA30073800 -0380A2137FEA07FF121FEA3F83EA7803127012E0A3EA7007EA780F383FFFFCEA1FFDEA07 -F016157D941A>97 D<EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA512 -70A2007813707E381F01F0380FFFE0000313C03800FE0014157D941A>99 -D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2 -EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<12FEA3120EA6133EEBFF80000F -13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I< -EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>110 -D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0 -EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<387F81F838FF8FFC38 -7F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114 -D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F -9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C -A2133817157F941A>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmbx12 13.14 41 -/Fi 41 123 df<EB07FCEB3FFF9038FE0780D803F013C03807E00FA2EA0FC0A3EC030091 -C7FCA3EC7FE0B6FCA2380FC007B3A239FFFC7FFEA21F267FA522>12 -D<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA21200B3AA387FFF -FCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC387C00FE12FE14 -FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B1370 -EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F>I<48 -B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB03F8 -EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FEA214 -FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A214F8 -1301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A12185A12 -705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEBFFF8 -14F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FCC712 -7EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE0018 -237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F005AA2007E13 -3C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4003E137E123F -6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C003FB512C0A2 -15804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133CA25B -A213F8A41201A66C5A13601A257DA41F>I<141CA2143EA3147FA24A7EA39038019FC0A2 -9038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FCA290 -39E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229257E -A42E>65 D<B612E015FC3903F800FFED1FC0ED07E06F7E6F7E82150082A2167FA31780AA -1700A316FEA24B5A5E4B5A4B5AED1FC0EDFF80B648C7FC15E029257EA42F>68 -D<B7FCA23903F8007FED0F8015071503A21501A3ED00C01406A21600A2140E141EEBFFFE -A2EBF81E140E1406A21660A291C7FC16C0A415011503A2ED0F80153FB7FCA223257EA428 ->I<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C5C90B5FCA2EBF80F -8080A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F80003F800AF90B6FC -A29038F80003B0B500E0B512E0A22B257EA430>72 D<B512E0A23803F800B3AFB512E0A2 -13257EA417>I<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E157CEC03FC -B6FCA220257EA425>76 D<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D1406A26D6C -130CA26D6C1318A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A291387E0300A3 -EC3F06A2EC1F8CA2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A235257EA43A> -I<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>83 -D<B53B81FFFE01FFF0A23D07F0001FC0000F007013066C6C010F5CA26F7E6C6C5EA26D49 -6C1338000017304B7E017F01195CA291388030FE013F5E829139C0607F01011F5E03E013 -8190280FE0C03F83C7FCA29139F1801FC3010715C617E69139FB000FEE010315EC02FF14 -FC6D486D5AA24A130301005DA24A130102785CA202306D5A3C257FA43F>87 -D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1FFE3803FE7EEA0FC0EA1F -00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B187E971E>97 -D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2EC01F8A215FC -A815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E267FA522>I<EB -7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F6C130CEA1F80 -EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC137F3803FFCF38 -0FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380FC0EF3903FFCF -FC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400A7B5FCA2EA0F -C0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0FC013D89038D0 -07E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FB3B0EAFFFCA20E26 -7EA511>108 D<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E8 -03F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80 -390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F803803 -FFF03807C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F00A238 -1F807E6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC09038F0 -07E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038 -CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC -13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA70 -01EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212 -E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F -121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39 -FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I< -39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC0000 -5B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A239 -0FC00F003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F8 -1361EBE0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I<387FFFF8A2387C03F0EA700738600FE000 -E013C0EB1F80EAC03F1400137EEA00FE5B485A0003130C13F0EA07E0120FEBC01C381F80 -18003F1338387F0078387E01F8B5FCA216187E971B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmsl10 10.95 30 -/Fj 30 122 df<903803F07C90381E0DC69038380F0FEB701E01E0130EEC0C003801C01C -A548485A007FB512C03903803800A448485AA6000E5BA648485A001E7F38FF8FFC20207E -9F1B>11 D<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF038038070A4 -380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>I<903803F03F9039 -1E09E0809039380F80C09039701F01E0EBE03E021E13C02601C01CC7FCA548485A007FB6 -12803903803803A43A0700700700A6000EEBE00EA64848485A001EEBE01E3AFF8FF8FFC0 -23207E9F26>14 D<13201360A4383061C0383C4380380E4E00EA0778EA01E0A2EA07B8EA -1C9CEA708FEAE083EA0180A490C7FC12147AA117>42 D<13181338EA01F8EA0E701200A5 -13E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B9D17>49 D<EB3F80EBC1E0380100 -70000213785AA2000F137C1380A2EB00781206C712F814F0EB01E014C0EB0380EB070013 -0E5B5B13605B485A380300201206000813405A383FFFC0481380B5FC161E7E9D17>I<13 -FFEA01FE1380A5EA0300A61206A65AA65AA65AA65AA6B4FCA2102D7EA10D>91 -D<13FFEA01FEEA0006A5130CA61318A61330A61360A613C0A6EA0180A6EAFF00A2102D82 -A10D>93 D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F0 -1310A3131EEB2E2038784F40381F878014147D9317>97 D<13FEEA0383380E0780121C00 -38130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99 -D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA -0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FCA6EA03 -80121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712011200 -A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>108 -D<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5000EEB -E00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A0 -3803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E9319> -I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C0130300F013 -8038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383801F01C6C487E140F -48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120E -A4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C003813C0127812 -F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0 -131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120EA65A121EEA -FFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA -01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<1380EA0100 -A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<38 -1C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011147B -9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA0390 -13A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C030060148015 -401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C48 -5A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0C0EBE180EB -73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07FC -18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B143014205C13705CA2 -0171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278 -191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmbx12 17.28 36 -/Fk 36 122 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF000 -7CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215 -F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49 -131C485A48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28>I<1578A215FCA34A7E -A24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F02787FEC700FA202E07F1507 -010180ECC003A249486C7EA201078191C7FC498191B6FCA24981011CC7123F013C810138 -141FA24981160F01F081491407A2484881486C1403B549B512FCA336317DB03D>65 -D<B712C016FC16FFD801FEC77FEE7FE0707E161F707EA2831607A4160FA25FA24C5A4C5A -4C5A4B485ADB1FFEC7FC90B65AEEFF8049C7EA3FE0EE0FF0EE07FCA2707E83821880A718 -005E5F16074C5A4C5AEEFFF0B812C094C7FC16F831317DB039>I<913A03FF800180023F -EBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C8127F -4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127FA2 -7FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93FC0 -5CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A>I< -B812E0A3C6903880007FEE0FF016031601A21600A21770A31738A21507A21700A35D5D5D -91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>70 D<DA03FF1303027FEBF0 -0749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03FF49487F4848C87E485A0007 -824848815B001F82A2484881A2127FA24992C7FC12FFAA0307B512F8127F7FDB00011300 -123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8497ED907FFEB3E3F01019038 -FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B6D8807FB512C0A3C60180C7387FC000 -B391B7FCA30280C7127FB3A3B6D8807FB512C0A33A317EB03F>I<B61280A3C6EB8000B3 -B3A7B61280A319317EB01E>I<B56C49B512C08080C66D90390003E0006E6E5AEBEFFC13 -E780EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E16806E13C0ED7FE0ED3F -F0151F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1EE1FF9EE0FFD160717FF -828282177F173FA2171F170F486C1507B500E014031701A23A317EB03F>78 -D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FFA717FEA2EE -07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB037>80 -D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3481603 -A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<B6D88003B51280A3C60180C73807C000 -715AB3AE137F4DC7FC80013F150EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF801FC002 -3FB55A020F49C8FC020013E039317EB03E>I<B500FC91B5FCA3000390C8EA03C06C1780 -6E14076C170080017F150EA26E141E013F151C6E143C011F153880010F5D8001075DA26E -130101035D6E13036D5D15806D4AC7FCA26F5A027F130EEDE01E023F131CEDF03C021F13 -3815F8020F5BA2EDFCF002075B15FF6E5BA26E5BA26E90C8FCA3157EA2153CA238317EB0 -3D>I<EBFFF0000313FF390F803F809038C00FE0486C6C7EA26E7ED80FC07FEA0780C7FC -A414FF131FEBFFE33803FC03EA0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F800D39 -3FC01DFE3A1FE078FFF03907FFE07FC6EB803F24207E9F27>97 D<EA01F812FFA3120F12 -07ADEC3FE0ECFFFC9038FBE07F9039FF001F8049EB0FC04914E049EB07F016F8A2ED03FC -A316FEA816FCA3ED07F8A216F06DEB0FE06D14C001E7EB3F809039C3C0FE00903880FFF8 -9038003FC027327EB12D>I<EB0FFF017F13C03901FC01F03803F0033907E007F8120FEA -1FC0003FEB03F0EC01E04848C7FCA312FFA8127FA36C6C131CA2001F14386C7E00071470 -3903F001E03901FC07C039007FFF00EB0FF81E207D9F24>I<ED0FC0EC07FFA3EC007F15 -3FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F4848133F123FA2485AA312 -FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01FC0F3FFE38007FFEEB0F -F027327DB12D>I<EB0FFC90387FFF803901FC0FC03903F003E03907E001F0000F14F839 -1FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7FCA4127FA36C6C130712 -1F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807FE0020207E9F25>I<EB -01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC1203EC07E0EC018091C7 -FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90391FF007C09039FFFE3F -E03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF000A2003F80A5001F5CA2 -000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC121EA2121F7F90B57E6C -14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C140F00FC1407A4007EEC -0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0D8001F90C7FC242F7E9F -28>I<EA01F812FFA3120F1207ADEC07F8EC3FFEEC783F02C013809039F9801FC0EBFB00 -01FE14E05BA35BB3B500C3B5FCA328327DB12D>I<EA03C0487E487E487EA46C5A6C5A6C -5AC8FCA9EA01F8127FA31207B3A7B51280A311337DB217>I<EA01F812FFA3120F1207B3 -B3A6B512C0A312327DB117>108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01 -E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3 -B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1 -801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F2D>I<EB07FC90387FFF -C03901FC07F03903F001F848486C7E4848137E001F147F003F158049133F007F15C0A300 -FF15E0A8007F15C0A36C6CEB7F80A2001F15006C6C13FE00075C3903F803F83901FE0FF0 -39007FFFC0D907FCC7FC23207E9F28>I<3901F83FE000FFEBFFFC9038FBE07F9039FF00 -3F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216FEA816FC1507A216F8A2 -ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3FC091C8FCABB512C0A3 -272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30FF0EA07F6A29038FC07 -E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 D<3801FF86000713FEEA1F00003C -133E48131E140E12F8A36C90C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA00 -3F01001380143F0060131F00E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C0 -7F8019207D9F20>I<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FC -C7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I<D801F8EB07 -E000FFEB03FFA3000FEB003F0007141FB3153FA20003147FA26C6CEBDFF03A00FE039FFF -90387FFF1FEB0FFC28207D9F2D>I<B5EB1FFCA3D80FF8EB03C0000715806D1307000315 -007F0001140E7F6C5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B14F1010F5B14 -F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478A226207E9F2B>I<B53A1FFFE03F -F8A33C0FF000FE0007806D150300076EEB0700816D5D00039138FF800EA26C6C486D5A15 -DF01FF153C6C9039038FE038A2D97F876D5A150702C714F0D93FCF6D5AECCE03D91FFEEB -F9C09138FC01FD16FF010F5D4A7EA26D486DC7FCA20103147E4A133EA26D48131C35207E -9F3A>I<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B90 -381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF081 -90380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FCA3 -28207F9F2B>I<B5EB1FFCA3D80FF8EB03C0000715806D1307000315007F0001140E7F6C -5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B14F1010F5B14F9903807FB80A214 -FF6D90C7FCA26D5AA26D5AA21478A21470A214F05C1301007C5BEAFE035C49C8FC5BEAFC -1EEA787CEA3FF0EA0FC0262E7E9F2B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmsy10 10.95 1 -/Fl 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmbx12 14.4 45 -/Fm 45 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F14 -80A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F080491303 -000181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8 -001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EA -FE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1F -F8B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>I<B712E0A33903FC001FED -07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC0F1403A202 -01130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297EA82C>69 -D<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403A2140F -90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003903907 -FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880485A82 -485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E6C7E6C -B45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F00FB5FC -A3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I<B512F0 -A33803FC00B3B1B512F0A314297EA819>I<D8FFFE92383FFF80A26D5D0003EFE000A2D9 -BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC13 -1CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700 -A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>77 -D<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180 -1380147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1F -F1150F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA8 -35>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC150316F8ED -07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>80 -D<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC0 -90B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA21503923801FC1CB538F0 -00FEEE7FF8EE0FE02F297EA832>82 D<9038FF80600003EBF0E0000F13F8381F80FD383F -001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFCEBFFE06C13F86C13FE -80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E01303A46C14E0A26C1307 -6C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825>I<B500F0EBFFFEA3 -D803FCC7EA0380B3AA0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB5 -5A01001480DA1FFCC7FC2F297EA834>85 D<B500F0EB7FFFA3D803FEC7EA01C00001ED03 -80A26D14076C16006E5B017F140E80013F5CA26E133C011F14386E1378010F1470800107 -5CA26D6C485AA2ECFE0301015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA2 -6E5AA36E5AA26E5AA230297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000 -A26D6D7E000160A26D6E13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2 -913AE00E1FE00F011F160E17F09126F01C0F131E010F161C033C13F8902707F838075BA2 -037813FC902703FC70035BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA3 -6EC76CC8FCA2023E80021E141EA242297FA845>I<3803FF80000F13F0381F01FC383F80 -FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E -13DF393F839FFC381FFE0F3803FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EF -FF809038FE07E09038F803F09038F001F89038E000FCA2157EA2157FA8157EA315FCA290 -38F001F89038F803F090389C0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801 -FFFC3803F03E380FC07FEA1F80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB -03801380001FEB0700380FE00E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A3 -1407ACEB3F873801FFF73807F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27E -A2381F800F380FC01F3907E07FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF0 -3803E07C380F803E001F7F130048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127E -A2127F6CEB01C07E390F8003803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I< -EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207143E1400A7B512C0A33807F000B3A338 -7FFF80A3182A7EA915>I<9038FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003E -EB3E10007EEB3F00A6003E133E003F137E6C137C380FC1F8380BFFE00018138090C8FC12 -38A2123C383FFFF814FF6C14C06C14E06C14F0121F383C0007007CEB01F8481300A4007C -EB01F0A2003FEB07E0390FC01F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC -147E9038E1FF809038E30FC001E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA320 -2A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120F -B3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108 -D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D80FC49038F101FC9039C803F200 -01D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1 -FF809038C30FC0D80FC413E0EBC80701D813F013D0A213E0B039FFFE3FFFA3201B7D9A25 ->I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0393F0007E0A2007EEB03F0A300 -FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F803907F07F003801FFFC38003F -E01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE0390FF803F09038F001F801E013FC -140015FEA2157FA8157E15FEA215FC140101F013F89038F807F09038FC0FE09038EFFF80 -9038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FFC1F0EBC7FCEBC63E380FCC7F13 -D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 D<3803FE30380FFFF0EA3E03EA78 -00127000F01370A27E00FE1300EAFFE06CB4FC14C06C13E06C13F0000713F8C6FCEB07FC -130000E0137C143C7E14387E6C137038FF01E038E7FFC000C11300161B7E9A1B>I<13E0 -A41201A31203A21207120F381FFFE0B5FCA2380FE000AD1470A73807F0E0000313C03801 -FF8038007F0014267FA51A>I<39FFE07FF0A3000F1307B2140FA2000713173903F067FF -3801FFC738007F87201B7D9A25>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0 -A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5A -A26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE00FE001C02607F007EB0380A201F8 -EBF00700031600EC0FF801FC5C0001150EEC1FFC2600FE1C5B15FE9039FF387E3C017F14 -38EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2EC800701075CA22E1B7F9A31>I< -39FFFC1FFEA33907F003803803F8079038FC0F003801FE1E00005BEB7F3814F86D5A6D5A -130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F803901E01FC0D803C013E0EB800F -39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF000F0000714E07F0003EB01C0A2EB -FC0300011480EBFE070000140013FFEB7F0EA2149EEB3F9C14FC6D5AA26D5AA36D5AA26D -5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5BEA74F0EA3FE0EA0F8020277F9A23 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmtt10 10.95 75 -/Fn 75 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<EA3803387C0780A2EAEE0F1400A25B131EA213 -3EEA7C3CA2EA387CEA0078A213F85B12015BA212035BA21207EB8380EB87C0120FEB0EE0 -A2121F121EA2123E383C07C0A23818038013247E9F18>I<EA01C0EA07E0487EEA0E7048 -7EA4EB73F813F313E3380FC1C0EBC38013831303381F0700EA3F87EA7B8EEA71CEEAE1FC -12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C7F9B18>I<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EA -FDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A41114 -7D9718>I<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C -0738380380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C07 -00EA1F1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12 -431203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003 -C0EAE00138F000E0A21260C7FCA2EB01C0A21303EB0780EB0F00131E5B5B5B485AEA07C0 -485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC -38FE078038F803C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5A -EA01F8131C7E9B18>54 D<1230127812FCA2127812301200A81230127812FCA212781230 -0614779318>58 D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E12 -1C123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07 -F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E013 -03EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0 -130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2 -EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0F -F0EA3FFC48B4FCEA700F38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5 -EA0380487EA36C5A111C7D9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 -D<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114 -C01303EB0F80387FFF00485AEA7FF8141C7F9B18>68 D<B512F0A3381C0070A41400A213 -0EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F8A3381C0038 -A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<387F07F038FF -8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18 ->72 D<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<EAFFC0 -A3001CC7FCB114E0A5B5FCA3131C7E9B18>76 D<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>78 D<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000B0EAF00100 -7013C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01 -E013001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I< -EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB -0380A5149CA3387F01F8EAFF81387F00F0161C7F9B18>82 D<3803F1C0EA1FFF5AEA7C0F -EA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2 -126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA2 -38E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F -01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03381C01C0 -EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC487E6C -5A151C7F9B18>89 D<EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8A3EA00 -38B3ACEAFFF8A30D247F9F18>I<EA0180EA07C0EA1FF0EA7EFCEAF83EEAE00E0F067C9B -18>I<387FFFC0B512E0A26C13C013047E7F18>I<1206121E123E12381270A212E0A312F8 -12FC127CA21238070E789E18>I<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF12 -07121FEA7F03127812E0A3EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>I<127E -12FE127E120EA5133EEBFF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80 -E013C1EBFFC0000E138038063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838 -030048C7FCA25AA61270EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I< -EB1F80133F131F1303A5EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007 -A2EA380FEA3C1F381FFFF0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA -3E0F38380780EA7003A238E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF80 -00071300EA01F812147D9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0 -B5FCA23801C000AEEA7FFFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00 -487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F03870 -0070481338A4007813F0EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE12 -7E120EA5133EEBFF80000F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC17 -1C809B18>I<EA0380EA07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C -18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>108 D<38F9C1C038FFF7F013FF383E3E -38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF80007F13 -C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA01F0EA0F -FE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C0780EA3E -0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E01380EB00 -70120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7FC0487E6C -5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6EA7007A2 -EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E9318>I<38 -FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E9318>I< -EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F38600780EAE0 -03A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5FCA23803 -8000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EAFE0FEA7E -07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF000FF13F8 -007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A213701514 -7F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD000D1380 -A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA078EEA039E -EA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000FF13F800 -7F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207EB0700A2 -EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F806CC7FC -121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B13F8485A -EA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB780013E0 -AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18>I<126012 -F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0 -005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA -60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmr10 10.95 75 -/Fo 75 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07 -00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I<EA7038 -EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008A2EA2010EA40200F0E7F9F17>34 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<EA03F0EA0E1C487EEA1806 -EA380738700380A400F013C0AD00701380A3EA780700381300EA1806EA1C0E6C5AEA03F0 -121F7E9D17>48 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C9D17>I<EA03F0 -EA0C1CEA100E487E00401380128000F013C0EAF803A3EA200712001480A2EB0F00130E5B -5B5B13605B485A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E9D17>I<EA03F0 -EA0C1CEA100EEA200F007813801307A2EA380F12001400A2131E131C1370EA07F0EA003C -130E130FEB0780A214C0122012F8A300F013801240EB0F00EA200EEA183CEA07F0121F7E -9D17>I<1306A2130EA2131E132EA2134E138EA2EA010E1202A212041208A212101220A2 -124012C0B512F038000E00A7EBFFE0141E7F9D17>I<EA1803EA1FFE5B5B13E00010C7FC -A6EA11F0EA161CEA180EEA10071480EA0003A214C0A3127012F0A200E013801240EB0700 -EA20066C5AEA0838EA07E0121F7E9D17>I<137CEA0182EA0701380E0380EA0C07121838 -38030090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F013C0A51270A214 -801238EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE014C0A238400080 -38800100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A131F7E9D17>I< -EA03F0EA0C0CEA1006EA3003382001801260A3127038780300123EEA3F06EA1FC8EA0FF0 -EA03F8487EEA0C7EEA103F38300F80EA6007EB01C012C01300A31480EA600100201300EA -1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18487E487E13071270EB038012F0A214 -C0A5EA7007A21238EA180BEA0E13EA03E338000380A3EB07001230EA7806130EEA700CEA -2018EA1070EA0FC0121F7E9D17>I<127012F8A312701200AA127012F8A3127005147C93 -0D>I<127012F8A312701200AA127012F012F8A212781208A31210A31220A21240051D7C -930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03EEB801EA248B5FC -EB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F9F22>65 -D<B512E0380F0078141EA2801580A515005C141E147CEBFFF0EB007C141FEC0F80EC07C0 -140315E0A515C014071580EC0F00143EB512F01B1F7E9E20>I<90380FE0109038381C30 -9038E002703803C00139078000F048C71270121E15305A1510127C127800F81400A91278 -007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C217E9F21 ->I<B512F83807801EEC0780EC03C0EC01E0EC00F015701578A2153CA3153EA8153CA215 -7C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F9E23>I<B61280380F000F14 -031401140015C01540A314401500A214C0130113FF130113001440A3EC0020A31540A315 -C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780071401A2140015C01540A4EC20 -00A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<90380FE01090 -38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814 -00A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E002309038380C -1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39FFF07FF8 -1D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<3807FFC038003E00131EB3A3 -122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E17>I<EAFFF8EA0F8090C7FC -B21402A414061404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0A2 -D805C0130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3EB -0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F8003 -E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F014 -78A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB703838 -01C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F814 -7CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C1480390380070038 -01E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A41580 -A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E48 -487E39070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F8147C -A900781478007C14F8A2003C14F0383E0781391E0841E0390F1023C00007148039039017 -003801D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E297E -9F23>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A2 -80143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F040 -380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC0007 -1380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA -81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C0143000801410 -A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46CEB -01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F8000 -F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804A2 -6D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF03B -1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F014 -10D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D00 -0F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0B3 -B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB85CEAFC -7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<12081210 -1220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 D<EA1FE0EA3030EA781813 -1CEA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83C0 -14147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478A6 -147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA1C -0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F811147F -9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270A2 -1238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB03 -8012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I<13 -7CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E03803 -E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2EA -3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC0014 -1F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E9F -19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3EA -00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E>I< -121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C38133C -131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F9F -0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF8021 -147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01F8 -EA070E381C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C0380 -38070E00EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F014701478 -A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<3801 -F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA07 -09EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEAFF -C00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8EA -003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A2120E -A2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1FEA -1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C1380 -A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39FF -9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A23903886100 -1471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E03 -C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202EA -060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C13 -C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EAF0 -80A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA00 -E0120113C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314> -I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmbx12 20.736 13 -/Fp 13 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B6D8F803B612E0A426007FF0C70001EBC000B3A491B8FCA402F0C71201B3A7 -B6D8F803B612E0A4433B7CBA4C>I<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3 -170FA3171FA2173F177F17FF5E04071300163FB9FCA4323B7DBA3A>76 -D<B500F00207B512E0808080D8007F92390007E0006E6F5A81017B7F81137901787F6E7E -6E7E81141F6E7E6E7F6E7F82806E7F6F7E6F7E826F7E816F13806F13C017E06F13F081EE -7FF8EE3FFC17FEEE1FFF827013837013C318E37013F382EF7FFBEF3FFFA283838383A283 -83187F183FA201FC161FB500FC150F18071803A2433B7CBA4C>78 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<EA01E0EA -07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512F0A4143D -7DBC1A>105 D<903801FFC0010F13F8017F13FFD9FF807F3A03FE003FE0D807F8EB0FF0 -48486D7EA248486D7E003F81A248486D7EA400FF1680A9007F1600A36C6C495AA2001F5D -6D1307000F5D6C6C495AD803FEEB3FE03A00FF80FF806DB5C7FC010F13F8010113C02926 -7DA530>111 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000 -035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E13 -7C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391 -C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C14 -1E0008133E007F133C147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA -1FFCEA07F02E377EA533>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 693 a Fp(GNU)33 b(History)f(Library)p 75 743 -1800 17 v 960 791 a Fo(Edition)16 b(4.1,)e(for)h Fn(History)f(Library)g -Fo(V)l(ersion)i(4.1.)1609 845 y(Jan)o(uary)f(2000)75 -2467 y Fm(Brian)23 b(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 -b(Soft)n(w)n(are)f(F)-6 b(oundation)75 2534 y(Chet)22 -b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 b(Reserv)n(e)f(Univ)n -(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 250 a Fo(This)21 b(do)q(cumen)o(t)g(describ)q(es)h(the)f -(GNU)f(History)g(library)l(,)j(a)d(programming)g(to)q(ol)g(that)g(pro)o -(vides)h(a)75 305 y(consisten)o(t)15 b(user)h(in)o(terface)f(for)g -(recalling)i(lines)f(of)f(previously)i(t)o(yp)q(ed)e(input.)75 -373 y(Published)i(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 427 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -482 y(Boston,)d(MA)h(02111)f(USA)75 549 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 604 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fl(\015)i Fo(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(1)75 183 y Fk(1)41 b(Using)26 b(History)h(In)n(teractiv)n -(ely)137 317 y Fo(This)16 b(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h -(use)g(the)g(GNU)g(History)g(Library)h(in)o(teractiv)o(ely)l(,)g(from)e -(a)h(user's)75 372 y(standp)q(oin)o(t.)35 b(It)20 b(should)g(b)q(e)h -(considered)h(a)d(user's)h(guide.)35 b(F)l(or)19 b(information)h(on)g -(using)h(the)f(GNU)75 427 y(History)d(Library)h(in)h(y)o(our)e(o)o(wn)g -(programs,)f(see)i(Chapter)f(2)h([Programming)e(with)i(GNU)f(History],) -75 482 y(page)e(5.)75 625 y Fm(1.1)33 b(History)22 b(Expansion)137 -727 y Fo(The)c(History)g(library)h(pro)o(vides)f(a)f(history)h -(expansion)h(feature)e(that)h(is)g(similar)h(to)e(the)h(history)75 -782 y(expansion)12 b(pro)o(vided)g(b)o(y)f Fn(csh)p Fo(.)18 -b(This)11 b(section)h(describ)q(es)g(the)g(syn)o(tax)e(used)h(to)g -(manipulate)h(the)f(history)75 836 y(information.)137 -909 y(History)k(expansions)h(in)o(tro)q(duce)h(w)o(ords)d(from)g(the)i -(history)f(list)h(in)o(to)f(the)h(input)g(stream,)e(making)75 -964 y(it)h(easy)g(to)g(rep)q(eat)g(commands,)g(insert)h(the)f(argumen)o -(ts)f(to)h(a)g(previous)h(command)f(in)o(to)g(the)g(curren)o(t)75 -1019 y(input)h(line,)h(or)d(\014x)i(errors)e(in)i(previous)g(commands)f -(quic)o(kly)l(.)137 1092 y(History)j(expansion)i(tak)o(es)d(place)i(in) -h(t)o(w)o(o)d(parts.)28 b(The)19 b(\014rst)f(is)g(to)g(determine)i -(whic)o(h)f(line)h(from)75 1147 y(the)h(history)f(list)i(should)g(b)q -(e)f(used)g(during)h(substitution.)37 b(The)21 b(second)g(is)g(to)f -(select)i(p)q(ortions)e(of)75 1202 y(that)15 b(line)i(for)d(inclusion)k -(in)o(to)d(the)h(curren)o(t)f(one.)20 b(The)c(line)g(selected)h(from)e -(the)g(history)g(is)h(called)h(the)75 1256 y Fj(ev)o(en)o(t)p -Fo(,)c(and)h(the)g(p)q(ortions)g(of)f(that)g(line)i(that)e(are)g(acted) -h(up)q(on)g(are)f(called)j Fj(w)o(ords)p Fo(.)i(V)l(arious)c -Fj(mo)q(di\014ers)75 1311 y Fo(are)i(a)o(v)m(ailable)i(to)e(manipulate) -i(the)e(selected)i(w)o(ords.)23 b(The)17 b(line)h(is)f(brok)o(en)f(in)o -(to)h(w)o(ords)e(in)j(the)e(same)75 1366 y(fashion)c(that)e(Bash)i(do)q -(es,)g(so)f(that)g(sev)o(eral)g(w)o(ords)g(surrounded)h(b)o(y)f(quotes) -h(are)f(considered)h(one)g(w)o(ord.)75 1421 y(History)18 -b(expansions)h(are)g(in)o(tro)q(duced)g(b)o(y)f(the)h(app)q(earance)g -(of)f(the)g(history)h(expansion)g(c)o(haracter,)75 1475 -y(whic)o(h)d(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)75 -1599 y Fi(1.1.1)30 b(Ev)n(en)n(t)21 b(Designators)137 -1701 y Fo(An)16 b(ev)o(en)o(t)f(designator)g(is)g(a)g(reference)h(to)f -(a)g(command)g(line)i(en)o(try)d(in)i(the)g(history)f(list.)75 -1789 y Fn(!)216 b Fo(Start)16 b(a)g(history)h(substitution,)g(except)h -(when)f(follo)o(w)o(ed)g(b)o(y)f(a)h(space,)g(tab,)f(the)h(end)g(of)315 -1844 y(the)e(line,)i(`)p Fn(=)p Fo(')d(or)h(`)p Fn(\()p -Fo('.)75 1929 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i -Fj(n)p Fo(.)75 2015 y Fn(!-)p Fj(n)167 b Fo(Refer)16 -b(to)e(the)i(command)f Fj(n)g Fo(lines)i(bac)o(k.)75 -2100 y Fn(!!)192 b Fo(Refer)16 b(to)e(the)i(previous)f(command.)20 -b(This)c(is)g(a)f(synon)o(ym)g(for)f(`)p Fn(!-1)p Fo('.)75 -2186 y Fn(!)p Fj(string)102 b Fo(Refer)16 b(to)e(the)i(most)e(recen)o -(t)h(command)g(starting)g(with)g Fj(string)p Fo(.)75 -2271 y Fn(!?)p Fj(string)t Fn([?])315 2326 y Fo(Refer)i(to)f(the)h -(most)f(recen)o(t)h(command)g(con)o(taining)g Fj(string)p -Fo(.)25 b(The)17 b(trailing)g(`)p Fn(?)p Fo(')f(ma)o(y)g(b)q(e)315 -2381 y(omitted)f(if)h(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f -(immediately)i(b)o(y)e(a)g(newline.)75 2466 y Fn(^)p -Fj(string1)t Fn(^)p Fj(string2)t Fn(^)315 2521 y Fo(Quic)o(k)i -(Substitution.)23 b(Rep)q(eat)17 b(the)f(last)f(command,)h(replacing)h -Fj(string1)i Fo(with)e Fj(string2)p Fo(.)315 2576 y(Equiv)m(alen)o(t)g -(to)d Fn(!!:s/)p Fj(string1)t Fn(/)p Fj(string2)t Fn(/)p -Fo(.)75 2661 y Fn(!#)192 b Fo(The)15 b(en)o(tire)h(command)f(line)i(t)o -(yp)q(ed)f(so)e(far.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fo(2)1347 b(GNU)15 b(History)g(Library)75 -183 y Fi(1.1.2)30 b(W)-5 b(ord)20 b(Designators)137 279 -y Fo(W)l(ord)d(designators)g(are)g(used)h(to)f(select)h(desired)h(w)o -(ords)d(from)h(the)g(ev)o(en)o(t.)26 b(A)18 b(`)p Fn(:)p -Fo(')e(separates)h(the)75 334 y(ev)o(en)o(t)j(sp)q(eci\014cation)h -(from)e(the)h(w)o(ord)f(designator.)34 b(It)20 b(ma)o(y)f(b)q(e)h -(omitted)g(if)g(the)g(w)o(ord)f(designator)75 389 y(b)q(egins)f(with)g -(a)e(`)p Fn(^)p Fo(',)h(`)p Fn($)p Fo(',)f(`)p Fn(*)p -Fo(',)g(`)p Fn(-)p Fo(',)g(or)h(`)p Fn(\045)p Fo('.)24 -b(W)l(ords)17 b(are)g(n)o(um)o(b)q(ered)g(from)g(the)g(b)q(eginning)i -(of)e(the)g(line,)75 444 y(with)j(the)g(\014rst)f(w)o(ord)h(b)q(eing)h -(denoted)f(b)o(y)g(0)f(\(zero\).)33 b(W)l(ords)20 b(are)f(inserted)i -(in)o(to)f(the)g(curren)o(t)f(line)75 498 y(separated)c(b)o(y)g(single) -i(spaces.)137 574 y(F)l(or)e(example,)75 653 y Fn(!!)192 -b Fo(designates)18 b(the)g(preceding)i(command.)28 b(When)18 -b(y)o(ou)g(t)o(yp)q(e)g(this,)h(the)f(preceding)h(com-)315 -708 y(mand)c(is)h(rep)q(eated)g(in)g(toto.)75 787 y Fn(!!:$)144 -b Fo(designates)12 b(the)f(last)g(argumen)o(t)f(of)h(the)g(preceding)i -(command.)19 b(This)11 b(ma)o(y)g(b)q(e)h(shortened)315 -842 y(to)j Fn(!$)p Fo(.)75 921 y Fn(!fi:2)120 b Fo(designates)15 -b(the)g(second)g(argumen)o(t)f(of)g(the)h(most)f(recen)o(t)g(command)h -(starting)f(with)h(the)315 976 y(letters)g Fn(fi)p Fo(.)137 -1055 y(Here)h(are)f(the)g(w)o(ord)f(designators:)75 1134 -y Fn(0)h(\(zero\))57 b Fo(The)15 b Fn(0)p Fo(th)g(w)o(ord.)20 -b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g(the)f(command)g(w)o -(ord.)75 1214 y Fj(n)215 b Fo(The)15 b Fj(n)p Fo(th)h(w)o(ord.)75 -1293 y Fn(^)216 b Fo(The)15 b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o -(ord)g(1.)75 1372 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)75 -1451 y Fn(\045)216 b Fo(The)15 b(w)o(ord)g(matc)o(hed)g(b)o(y)g(the)g -(most)g(recen)o(t)g(`)p Fn(?)p Fj(string)t Fn(?)p Fo(')f(searc)o(h.)75 -1530 y Fj(x)p Fn(-)p Fj(y)168 b Fo(A)15 b(range)g(of)g(w)o(ords;)f(`)p -Fn(-)p Fj(y)t Fo(')g(abbreviates)i(`)p Fn(0-)p Fj(y)t -Fo('.)75 1610 y Fn(*)216 b Fo(All)15 b(of)f(the)f(w)o(ords,)g(except)i -(the)f Fn(0)p Fo(th.)19 b(This)14 b(is)h(a)e(synon)o(ym)h(for)f(`)p -Fn(1-$)p Fo('.)18 b(It)c(is)g(not)g(an)g(error)315 1664 -y(to)g(use)h(`)p Fn(*)p Fo(')f(if)i(there)e(is)i(just)e(one)h(w)o(ord)f -(in)i(the)f(ev)o(en)o(t;)f(the)h(empt)o(y)g(string)g(is)g(returned)g -(in)315 1719 y(that)f(case.)75 1798 y Fj(x)s Fn(*)189 -b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p Fo(')75 1878 -y Fj(x)p Fn(-)192 b Fo(Abbreviates)16 b(`)p Fj(x)p Fn(-$)p -Fo(')e(lik)o(e)i(`)p Fj(x)s Fn(*)p Fo(',)e(but)i(omits)f(the)g(last)g -(w)o(ord.)137 1957 y(If)i(a)g(w)o(ord)f(designator)h(is)h(supplied)h -(without)e(an)g(ev)o(en)o(t)f(sp)q(eci\014cation,)j(the)e(previous)h -(command)75 2012 y(is)e(used)f(as)g(the)h(ev)o(en)o(t.)75 -2123 y Fi(1.1.3)30 b(Mo)r(di\014ers)137 2219 y Fo(After)10 -b(the)h(optional)g(w)o(ord)e(designator,)i(y)o(ou)f(can)h(add)f(a)g -(sequence)i(of)e(one)g(or)g(more)g(of)g(the)g(follo)o(wing)75 -2274 y(mo)q(di\014ers,)16 b(eac)o(h)f(preceded)i(b)o(y)e(a)g(`)p -Fn(:)p Fo('.)75 2353 y Fn(h)216 b Fo(Remo)o(v)o(e)15 -b(a)g(trailing)h(pathname)f(comp)q(onen)o(t,)g(lea)o(ving)h(only)g(the) -f(head.)75 2432 y Fn(t)216 b Fo(Remo)o(v)o(e)15 b(all)h(leading)h -(pathname)e(comp)q(onen)o(ts,)g(lea)o(ving)h(the)f(tail.)75 -2512 y Fn(r)216 b Fo(Remo)o(v)o(e)15 b(a)g(trailing)h(su\016x)f(of)g -(the)g(form)g(`)p Fn(.)p Fj(su\016x)s Fo(',)f(lea)o(ving)i(the)f -(basename.)75 2591 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f -(trailing)h(su\016x.)75 2670 y Fn(p)216 b Fo(Prin)o(t)15 -b(the)g(new)h(command)f(but)g(do)g(not)g(execute)h(it.)p -eop -%%Page: 3 5 -3 4 bop 75 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1007 b(3)75 183 y Fn(s/)p Fj(old)r Fn(/)p Fj(new)t -Fn(/)315 238 y Fo(Substitute)17 b Fj(new)j Fo(for)c(the)h(\014rst)e(o)q -(ccurrence)j(of)e Fj(old)i Fo(in)f(the)g(ev)o(en)o(t)f(line.)25 -b(An)o(y)16 b(delimiter)315 293 y(ma)o(y)c(b)q(e)h(used)g(in)g(place)g -(of)f(`)p Fn(/)p Fo('.)18 b(The)13 b(delimiter)h(ma)o(y)e(b)q(e)h -(quoted)f(in)i Fj(old)g Fo(and)f Fj(new)k Fo(with)12 -b(a)315 348 y(single)j(bac)o(kslash.)20 b(If)15 b(`)p -Fn(&)p Fo(')e(app)q(ears)h(in)h Fj(new)p Fo(,)f(it)g(is)h(replaced)g(b) -o(y)f Fj(old)p Fo(.)20 b(A)14 b(single)i(bac)o(kslash)315 -402 y(will)j(quote)e(the)h(`)p Fn(&)p Fo('.)25 b(The)17 -b(\014nal)i(delimiter)g(is)f(optional)g(if)f(it)h(is)g(the)f(last)g(c)o -(haracter)g(on)315 457 y(the)e(input)h(line.)75 537 y -Fn(&)216 b Fo(Rep)q(eat)16 b(the)f(previous)h(substitution.)75 -617 y Fn(g)216 b Fo(Cause)19 b(c)o(hanges)h(to)e(b)q(e)i(applied)h(o)o -(v)o(er)e(the)g(en)o(tire)h(ev)o(en)o(t)f(line.)34 b(Used)20 -b(in)g(conjunction)315 671 y(with)c(`)p Fn(s)p Fo(',)d(as)i(in)h -Fn(gs/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)p Fo(,)f(or)g(with)g(`)p -Fn(&)p Fo('.)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fo(4)1347 b(GNU)15 b(History)g(Library)p -eop -%%Page: 5 7 -5 6 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(5)75 183 y Fk(2)41 b(Programming)28 b(with)e(GNU)i -(History)137 282 y Fo(This)16 b(c)o(hapter)e(describ)q(es)j(ho)o(w)d -(to)g(in)o(terface)h(programs)e(that)h(y)o(ou)h(write)g(with)g(the)g -(GNU)f(History)75 337 y(Library)l(.)24 b(It)17 b(should)g(b)q(e)g -(considered)h(a)e(tec)o(hnical)i(guide.)25 b(F)l(or)15 -b(information)i(on)f(the)h(in)o(teractiv)o(e)g(use)75 -391 y(of)e(GNU)g(History)l(,)g(see)g(Chapter)g(1)g([Using)g(History)g -(In)o(teractiv)o(ely],)h(page)f(1.)75 509 y Fm(2.1)33 -b(In)n(tro)r(duction)24 b(to)e(History)137 602 y Fo(Man)o(y)c(programs) -g(read)h(input)g(from)f(the)h(user)g(a)f(line)j(at)d(a)g(time.)31 -b(The)19 b(GNU)g(History)f(library)75 656 y(is)k(able)g(to)e(k)o(eep)i -(trac)o(k)e(of)h(those)g(lines,)j(asso)q(ciate)d(arbitrary)g(data)f -(with)i(eac)o(h)f(line,)j(and)e(utilize)75 711 y(information)15 -b(from)g(previous)h(lines)h(in)f(comp)q(osing)f(new)h(ones.)137 -775 y(The)e(programmer)f(using)h(the)g(History)g(library)g(has)g(a)o(v) -m(ailable)h(functions)g(for)e(remem)o(b)q(ering)h(lines)75 -830 y(on)c(a)g(history)h(list,)g(asso)q(ciating)g(arbitrary)f(data)f -(with)i(a)f(line,)j(remo)o(ving)d(lines)i(from)d(the)i(list,)h(searc)o -(hing)75 884 y(through)17 b(the)h(list)g(for)f(a)h(line)h(con)o -(taining)f(an)g(arbitrary)f(text)g(string,)h(and)g(referencing)h(an)o -(y)e(line)i(in)75 939 y(the)c(list)i(directly)l(.)22 -b(In)16 b(addition,)g(a)f(history)g Fj(expansion)h Fo(function)h(is)e -(a)o(v)m(ailable)i(whic)o(h)g(pro)o(vides)f(for)e(a)75 -994 y(consisten)o(t)h(user)h(in)o(terface)f(across)g(di\013eren)o(t)g -(programs.)137 1058 y(The)f(user)h(using)f(programs)f(written)h(with)g -(the)g(History)g(library)h(has)f(the)g(b)q(ene\014t)h(of)e(a)h -(consisten)o(t)75 1112 y(user)20 b(in)o(terface)f(with)h(a)f(set)h(of)f -(w)o(ell-kno)o(wn)h(commands)g(for)e(manipulating)k(the)d(text)g(of)g -(previous)75 1167 y(lines)c(and)f(using)h(that)e(text)g(in)i(new)f -(commands.)19 b(The)14 b(basic)h(history)e(manipulation)j(commands)d -(are)75 1222 y(similar)j(to)f(the)g(history)g(substitution)h(pro)o -(vided)g(b)o(y)g Fn(csh)p Fo(.)137 1286 y(If)f(the)g(programmer)f -(desires,)h(he)g(can)g(use)g(the)g(Readline)i(library)l(,)f(whic)o(h)f -(includes)j(some)c(history)75 1340 y(manipulation)j(b)o(y)e(default,)g -(and)h(has)f(the)g(added)h(adv)m(an)o(tage)f(of)f(command)h(line)i -(editing.)137 1404 y(Before)i(declaring)i(an)o(y)d(functions)i(using)g -(an)o(y)f(functionalit)o(y)h(the)f(History)g(library)h(pro)o(vides)f -(in)75 1459 y(other)14 b(co)q(de,)h(an)f(application)i(writer)e(should) -i(include)g(the)f(\014le)g Fn(<readline/history.h>)d -Fo(in)j(an)o(y)f(\014le)75 1513 y(that)d(uses)h(the)h(History)e -(library's)i(features.)18 b(It)12 b(supplies)i(extern)e(declarations)h -(for)e(all)i(of)f(the)g(library's)75 1568 y(public)17 -b(functions)f(and)g(v)m(ariables,)g(and)f(declares)h(all)g(of)f(the)h -(public)h(data)d(structures.)75 1686 y Fm(2.2)33 b(History)22 -b(Storage)137 1778 y Fo(The)16 b(history)f(list)h(is)g(an)f(arra)o(y)f -(of)g(history)i(en)o(tries.)k(A)15 b(history)g(en)o(try)g(is)h -(declared)g(as)f(follo)o(ws:)195 1839 y Fn(typedef)23 -b(struct)g(_hist_entry)f({)243 1891 y(char)h(*line;)243 -1943 y(char)g(*data;)195 1995 y(})h(HIST_ENTRY;)137 2058 -y Fo(The)16 b(history)f(list)h(itself)g(migh)o(t)f(therefore)g(b)q(e)h -(declared)g(as)195 2119 y Fn(HIST_ENTRY)22 b(**the_history_list;)137 -2183 y Fo(The)16 b(state)e(of)h(the)g(History)g(library)h(is)g -(encapsulated)g(in)o(to)f(a)g(single)i(structure:)195 -2243 y Fn(/*)24 b(A)f(structure)g(used)g(to)h(pass)f(the)h(current)f -(state)g(of)g(the)h(history)f(stuff)g(around.)g(*/)p -2033 2253 21 42 v 195 2295 a(typedef)g(struct)g(_hist_state)f({)243 -2347 y(HIST_ENTRY)g(**entries;)214 b(/*)23 b(Pointer)g(to)h(the)f -(entries)g(themselves.)f(*/)243 2399 y(int)h(offset;)453 -b(/*)23 b(The)h(location)e(pointer)h(within)g(this)h(array.)f(*/)p -2033 2409 V 243 2451 a(int)g(length;)453 b(/*)23 b(Number)g(of)h -(elements)f(within)g(this)g(array.)g(*/)p 1985 2461 V -243 2503 a(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f(allocated)g -(to)g(this)h(array.)f(*/)p 2057 2513 V 243 2555 a(int)g(flags;)195 -2606 y(})h(HISTORY_STATE;)137 2670 y Fo(If)16 b(the)f(\015ags)g(mem)o -(b)q(er)g(includes)j Fn(HS_STIFLED)p Fo(,)13 b(the)i(history)h(has)f(b) -q(een)h(sti\015ed.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fo(6)1347 b(GNU)15 b(History)g(Library)75 -183 y Fm(2.3)33 b(History)22 b(F)-6 b(unctions)137 278 -y Fo(This)21 b(section)g(describ)q(es)h(the)f(calling)h(sequence)g(for) -e(the)g(v)m(arious)h(functions)g(presen)o(t)g(in)g(GNU)75 -333 y(History)l(.)75 441 y Fi(2.3.1)30 b(Initializing)20 -b(History)h(and)f(State)g(Managemen)n(t)137 536 y Fo(This)e(section)g -(describ)q(es)h(functions)f(used)g(to)e(initialize)21 -b(and)c(manage)g(the)g(state)g(of)g(the)g(History)75 -591 y(library)f(when)g(y)o(ou)f(w)o(an)o(t)f(to)g(use)i(the)f(history)g -(functions)h(in)g(y)o(our)f(program.)1650 679 y(F)l(unction)-1749 -b Fh(void)20 b Fg(using)p 333 679 18 3 v 20 w(history)j -Ff(\(\))195 734 y Fo(Begin)18 b(a)f(session)h(in)g(whic)o(h)g(the)g -(history)f(functions)h(migh)o(t)f(b)q(e)h(used.)27 b(This)18 -b(initializes)195 788 y(the)d(in)o(teractiv)o(e)h(v)m(ariables.)1650 -877 y(F)l(unction)-1749 b Fh(HISTORY_STATE)21 b(*)e Fg(history)p -657 877 V 21 w(get)p 755 877 V 21 w(history)p 951 877 -V 21 w(state)j Ff(\(\))195 931 y Fo(Return)16 b(a)f(structure)g -(describing)i(the)e(curren)o(t)g(state)f(of)h(the)g(input)i(history)l -(.)1650 1019 y(F)l(unction)-1749 b Fh(void)20 b Fg(history)p -377 1019 V 20 w(set)p 468 1019 V 21 w(history)p 664 1019 -V 21 w(state)j Ff(\()p Fn(HISTORY_STATE)13 b(*state)p -Ff(\))195 1074 y Fo(Set)i(the)h(state)e(of)h(the)g(history)g(list)h -(according)g(to)e Fj(state)p Fo(.)75 1182 y Fi(2.3.2)30 -b(History)20 b(List)h(Managemen)n(t)137 1277 y Fo(These)11 -b(functions)h(manage)e(individual)k(en)o(tries)d(on)g(the)g(history)f -(list,)i(or)f(set)f(parameters)g(managing)75 1332 y(the)15 -b(list)h(itself.)1650 1420 y(F)l(unction)-1749 b Fh(void)20 -b Fg(add)p 294 1420 V 20 w(history)j Ff(\()p Fn(char)14 -b(*string)p Ff(\))195 1475 y Fo(Place)i Fj(string)j Fo(at)c(the)g(end)i -(of)d(the)i(history)f(list.)22 b(The)15 b(asso)q(ciated)h(data)f -(\014eld)h(\(if)g(an)o(y\))e(is)195 1530 y(set)h(to)g -Fn(NULL)p Fo(.)1650 1618 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(remo)n(v)n(e)p 584 1618 V 20 w(history)k Ff(\()p -Fn(int)14 b(which)p Ff(\))195 1673 y Fo(Remo)o(v)o(e)g(history)g(en)o -(try)f(at)h(o\013set)f Fj(whic)o(h)h Fo(from)g(the)g(history)l(.)19 -b(The)14 b(remo)o(v)o(ed)g(elemen)o(t)g(is)195 1727 y(returned)i(so)e -(y)o(ou)h(can)h(free)f(the)g(line,)i(data,)d(and)h(con)o(taining)h -(structure.)1650 1816 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(replace)p 580 1816 V 22 w(history)p 777 1816 -V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)283 -1870 y(*line,)g(char)g(*data)p Ff(\))195 1925 y Fo(Mak)o(e)f(the)h -(history)f(en)o(try)g(at)g(o\013set)g Fj(whic)o(h)h Fo(ha)o(v)o(e)g -Fj(line)k Fo(and)13 b Fj(data)p Fo(.)19 b(This)14 b(returns)g(the)f -(old)195 1980 y(en)o(try)k(so)g(y)o(ou)g(can)g(disp)q(ose)i(of)d(the)i -(data.)25 b(In)18 b(the)f(case)h(of)f(an)g(in)o(v)m(alid)i -Fj(whic)o(h)p Fo(,)g(a)e Fn(NULL)195 2035 y Fo(p)q(oin)o(ter)f(is)f -(returned.)1650 2123 y(F)l(unction)-1749 b Fh(void)20 -b Fg(clear)p 320 2123 V 21 w(history)j Ff(\(\))195 2178 -y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)1650 2266 y(F)l(unction)-1749 b Fh(void)20 -b Fg(sti\015e)p 320 2266 V 21 w(history)j Ff(\()p Fn(int)14 -b(max)p Ff(\))195 2321 y Fo(Sti\015e)i(the)f(history)h(list,)f(remem)o -(b)q(ering)h(only)g(the)f(last)g Fj(max)j Fo(en)o(tries.)1650 -2409 y(F)l(unction)-1749 b Fh(int)20 b Fg(unsti\015e)p -358 2409 V 21 w(history)i Ff(\(\))195 2463 y Fo(Stop)e(sti\015ing)i -(the)f(history)l(.)36 b(This)21 b(returns)g(the)f(previous)i(amoun)o(t) -e(the)g(history)h(w)o(as)195 2518 y(sti\015ed.)g(The)15 -b(v)m(alue)i(is)e(p)q(ositiv)o(e)i(if)e(the)g(history)h(w)o(as)e -(sti\015ed,)i(negativ)o(e)f(if)h(it)f(w)o(asn't.)1650 -2606 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351 -2606 V 20 w(is)p 409 2606 V 21 w(sti\015ed)k Ff(\(\))195 -2661 y Fo(Returns)16 b(non-zero)f(if)h(the)f(history)g(is)h(sti\015ed,) -g(zero)f(if)g(it)h(is)g(not.)p eop -%%Page: 7 9 -7 8 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(7)75 183 y Fi(2.3.3)30 b(Information)19 -b(Ab)r(out)i(the)f(History)h(List)137 279 y Fo(These)13 -b(functions)h(return)f(information)g(ab)q(out)f(the)h(en)o(tire)h -(history)e(list)i(or)e(individual)k(list)e(en)o(tries.)1650 -371 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p -605 371 18 3 v 21 w(list)24 b Ff(\(\))195 426 y Fo(Return)f(a)g -Fn(NULL)f Fo(terminated)g(arra)o(y)g(of)g Fn(HIST_ENTRY)f -Fo(whic)o(h)j(is)f(the)f(curren)o(t)h(input)195 481 y(history)l(.)j -(Elemen)o(t)18 b(0)e(of)h(this)h(list)g(is)f(the)h(b)q(eginning)h(of)e -(time.)26 b(If)17 b(there)g(is)h(no)f(history)l(,)195 -535 y(return)e Fn(NULL)p Fo(.)1650 627 y(F)l(unction)-1749 -b Fh(int)20 b Fg(where)p 325 627 V 20 w(history)j Ff(\(\))195 -682 y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history) -g(elemen)o(t.)1650 773 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 -b(*)e Fg(curren)n(t)p 587 773 V 21 w(history)k Ff(\(\))195 -828 y Fo(Return)g(the)f(history)g(en)o(try)g(at)f(the)h(curren)o(t)g(p) -q(osition,)j(as)c(determined)j(b)o(y)e Fn(where_)195 -883 y(history)14 b(\(\))p Fo(.)20 b(If)15 b(there)g(is)h(no)f(en)o(try) -g(there,)g(return)g(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)1650 -975 y(F)l(unction)-1749 b Fh(HIST_ENTRY)21 b(*)e Fg(history)p -579 975 V 21 w(get)j Ff(\()p Fn(int)15 b(offset)p Ff(\))195 -1029 y Fo(Return)21 b(the)g(history)g(en)o(try)f(at)g(p)q(osition)i -Fj(o\013set)p Fo(,)e(starting)g(from)g Fn(history_base)p -Fo(.)35 b(If)195 1084 y(there)16 b(is)h(no)g(en)o(try)f(there,)g(or)g -(if)g Fj(o\013set)h Fo(is)g(greater)e(than)h(the)h(history)f(length,)h -(return)f(a)195 1139 y Fn(NULL)f Fo(p)q(oin)o(ter.)1650 -1231 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p 351 -1231 V 20 w(total)p 487 1231 V 22 w(b)n(ytes)j Ff(\(\))195 -1285 y Fo(Return)c(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h -(primary)h(history)f(en)o(tries)g(are)g(using.)29 b(This)195 -1340 y(function)16 b(returns)f(the)g(sum)h(of)e(the)i(lengths)f(of)g -(all)h(the)g(lines)g(in)g(the)g(history)l(.)75 1452 y -Fi(2.3.4)30 b(Mo)n(ving)21 b(Around)f(the)h(History)g(List)137 -1548 y Fo(These)16 b(functions)g(allo)o(w)f(the)g(curren)o(t)h(index)g -(in)o(to)f(the)h(history)f(list)h(to)e(b)q(e)i(set)f(or)g(c)o(hanged.) -1650 1640 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p -351 1640 V 20 w(set)p 442 1640 V 21 w(p)r(os)h Ff(\()p -Fn(int)15 b(pos)p Ff(\))195 1694 y Fo(Set)g(the)h(p)q(osition)g(in)g -(the)f(history)g(list)h(to)f Fj(p)q(os)p Fo(,)g(an)g(absolute)g(index)i -(in)o(to)e(the)g(list.)1650 1786 y(F)l(unction)-1749 -b Fh(HIST_ENTRY)21 b(*)e Fg(previous)p 615 1786 V 20 -w(history)k Ff(\(\))195 1841 y Fo(Bac)o(k)17 b(up)h(the)f(curren)o(t)g -(history)g(o\013set)f(to)h(the)g(previous)h(history)f(en)o(try)l(,)g -(and)g(return)g(a)195 1896 y(p)q(oin)o(ter)f(to)e(that)h(en)o(try)l(.)k -(If)d(there)f(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fn(NULL)f Fo(p)q(oin)o(ter.)1650 1987 y(F)l(unction)-1749 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 514 1987 V 21 w(history)k -Ff(\(\))195 2042 y Fo(Mo)o(v)o(e)17 b(the)h(curren)o(t)g(history)f -(o\013set)g(forw)o(ard)g(to)g(the)h(next)g(history)g(en)o(try)l(,)g -(and)g(return)195 2097 y(the)d(a)g(p)q(oin)o(ter)h(to)e(that)h(en)o -(try)l(.)20 b(If)15 b(there)g(is)h(no)f(next)g(en)o(try)l(,)g(return)g -(a)g Fn(NULL)g Fo(p)q(oin)o(ter.)75 2208 y Fi(2.3.5)30 -b(Searc)n(hing)21 b(the)f(History)h(List)137 2304 y Fo(These)14 -b(functions)g(allo)o(w)g(searc)o(hing)g(of)e(the)i(history)f(list)h -(for)f(en)o(tries)h(con)o(taining)g(a)f(sp)q(eci\014c)i(string.)75 -2359 y(Searc)o(hing)f(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o -(ard)e(and)i(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)g(history)f(p)q -(osition.)75 2414 y(The)j(searc)o(h)f(ma)o(y)g(b)q(e)i -Fj(anc)o(hored)p Fo(,)e(meaning)h(that)f(the)h(string)g(m)o(ust)f(matc) -o(h)g(at)g(the)h(b)q(eginning)i(of)d(the)75 2469 y(history)g(en)o(try)l -(.)1650 2560 y(F)l(unction)-1749 b Fh(int)20 b Fg(history)p -351 2560 V 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h -(direction)p Ff(\))195 2615 y Fo(Searc)o(h)g(the)h(history)f(for)f -Fj(string)p Fo(,)h(starting)f(at)h(the)g(curren)o(t)g(history)g -(o\013set.)k(If)d Fj(direction)195 2670 y Fn(<)j Fo(0,)g(then)g(the)h -(searc)o(h)e(is)i(through)e(previous)i(en)o(tries,)g(else)g(through)f -(subsequen)o(t.)32 b(If)p eop -%%Page: 8 10 -8 9 bop 75 -58 a Fo(8)1347 b(GNU)15 b(History)g(Library)195 -183 y Fj(string)k Fo(is)d(found,)f(then)h(the)f(curren)o(t)g(history)g -(index)i(is)f(set)f(to)f(that)h(history)g(en)o(try)l(,)g(and)195 -238 y(the)g(v)m(alue)h(returned)f(is)g(the)g(o\013set)f(in)h(the)g -(line)h(of)e(the)h(en)o(try)g(where)g Fj(string)j Fo(w)o(as)c(found.) -195 293 y(Otherwise,)i(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h -(returned.)1650 396 y(F)l(unction)-1749 b Fh(int)20 b -Fg(history)p 351 396 18 3 v 20 w(searc)n(h)p 527 396 -V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g(direction)p -Ff(\))195 451 y Fo(Searc)o(h)i(the)f(history)g(for)g -Fj(string)p Fo(,)g(starting)g(at)g(the)g(curren)o(t)h(history)f -(o\013set.)k(The)d(searc)o(h)195 506 y(is)h(anc)o(hored:)23 -b(matc)o(hing)17 b(lines)h(m)o(ust)e(b)q(egin)i(with)f -Fj(string)p Fo(.)25 b(If)17 b Fj(direction)h Fn(<)e Fo(0,)h(then)g(the) -195 560 y(searc)o(h)f(is)g(through)f(previous)i(en)o(tries,)f(else)g -(through)g(subsequen)o(t.)22 b(If)16 b Fj(string)k Fo(is)c(found,)195 -615 y(then)i(the)g(curren)o(t)g(history)g(index)h(is)g(set)e(to)h(that) -f(en)o(try)l(,)h(and)g(the)g(return)g(v)m(alue)h(is)g(0.)195 -670 y(Otherwise,)d(nothing)f(is)h(c)o(hanged,)f(and)h(a)e(-1)h(is)h -(returned.)1650 773 y(F)l(unction)-1749 b Fh(int)20 b -Fg(history)p 351 773 V 20 w(searc)n(h)p 527 773 V 21 -w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g(direction,)g(int)283 -828 y(pos)p Ff(\))195 883 y Fo(Searc)o(h)h(for)g Fj(string)k -Fo(in)d(the)f(history)g(list,)g(starting)g(at)f Fj(p)q(os)p -Fo(,)h(an)g(absolute)g(index)i(in)o(to)e(the)195 937 -y(list.)21 b(If)15 b Fj(direction)h Fo(is)g(negativ)o(e,)f(the)g(searc) -o(h)g(pro)q(ceeds)g(bac)o(kw)o(ard)g(from)f Fj(p)q(os)p -Fo(,)h(otherwise)195 992 y(forw)o(ard.)27 b(Returns)18 -b(the)g(absolute)g(index)h(of)f(the)g(history)f(elemen)o(t)i(where)f -Fj(string)k Fo(w)o(as)195 1047 y(found,)15 b(or)g(-1)g(otherwise.)75 -1170 y Fi(2.3.6)30 b(Managing)20 b(the)g(History)h(File)137 -1272 y Fo(The)16 b(History)g(library)h(can)e(read)h(the)g(history)g -(from)f(and)h(write)g(it)g(to)f(a)h(\014le.)22 b(This)17 -b(section)f(do)q(cu-)75 1327 y(men)o(ts)f(the)g(functions)h(for)f -(managing)g(a)g(history)g(\014le.)1650 1430 y(F)l(unction)-1749 -b Fh(int)20 b Fg(read)p 286 1430 V 20 w(history)i Ff(\()p -Fn(char)15 b(*filename)p Ff(\))195 1485 y Fo(Add)h(the)f(con)o(ten)o -(ts)f(of)h Fj(\014lename)j Fo(to)d(the)g(history)g(list,)g(a)g(line)h -(at)f(a)f(time.)21 b(If)15 b Fj(\014lename)j Fo(is)195 -1539 y Fn(NULL)p Fo(,)c(then)i(read)f(from)f(`)p Fn(~/.history)p -Fo('.)k(Returns)e(0)f(if)g(successful,)i(or)d(errno)h(if)h(not.)1650 -1643 y(F)l(unction)-1749 b Fh(int)20 b Fg(read)p 286 -1643 V 20 w(history)p 481 1643 V 20 w(range)i Ff(\()p -Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))195 -1697 y Fo(Read)21 b(a)f(range)g(of)g(lines)i(from)e Fj(\014lename)p -Fo(,)i(adding)f(them)g(to)f(the)g(history)h(list.)36 -b(Start)195 1752 y(reading)15 b(at)e(line)j Fj(from)e -Fo(and)g(end)h(at)e Fj(to)p Fo(.)19 b(If)c Fj(from)e -Fo(is)i(zero,)f(start)f(at)g(the)h(b)q(eginning.)22 b(If)15 -b Fj(to)195 1807 y Fo(is)i(less)g(than)f Fj(from)p Fo(,)g(then)h(read)f -(un)o(til)i(the)e(end)h(of)f(the)h(\014le.)24 b(If)17 -b Fj(\014lename)j Fo(is)d Fn(NULL)p Fo(,)f(then)195 1862 -y(read)f(from)g(`)p Fn(~/.history)p Fo('.)i(Returns)f(0)f(if)h -(successful,)g(or)e Fn(errno)h Fo(if)h(not.)1650 1965 -y(F)l(unction)-1749 b Fh(int)20 b Fg(write)p 304 1965 -V 22 w(history)i Ff(\()p Fn(char)15 b(*filename)p Ff(\))195 -2020 y Fo(W)l(rite)23 b(the)f(curren)o(t)g(history)h(to)f -Fj(\014lename)p Fo(,)j(o)o(v)o(erwriting)d Fj(\014lename)k -Fo(if)d(necessary)l(.)42 b(If)195 2074 y Fj(\014lename)20 -b Fo(is)d Fn(NULL)p Fo(,)f(then)g(write)h(the)f(history)h(list)g(to)f -(`)p Fn(~/.history)p Fo('.)21 b(V)l(alues)d(returned)195 -2129 y(are)d(as)g(in)h Fn(read_history)d(\(\))p Fo(.)1650 -2232 y(F)l(unction)-1749 b Fh(int)20 b Fg(app)r(end)p -360 2232 V 19 w(history)j Ff(\()p Fn(int)14 b(nelements,)g(char)h -(*filename)p Ff(\))195 2287 y Fo(App)q(end)i(the)e(last)g -Fj(nelemen)o(ts)j Fo(of)d(the)g(history)g(list)h(to)f -Fj(\014lename)p Fo(.)1650 2390 y(F)l(unction)-1749 b -Fh(int)20 b Fg(history)p 351 2390 V 20 w(truncate)p 582 -2390 V 21 w(\014le)k Ff(\()p Fn(char)14 b(*filename,)g(int)h(nlines)p -Ff(\))195 2445 y Fo(T)l(runcate)g(the)h(history)f(\014le)h -Fj(\014lename)p Fo(,)g(lea)o(ving)g(only)g(the)f(last)g -Fj(nlines)k Fo(lines.)75 2568 y Fi(2.3.7)30 b(History)20 -b(Expansion)137 2670 y Fo(These)c(functions)g(implemen)o(t)g -Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)889 b(9)1650 183 y(F)l(unction)-1749 b Fh(int)20 -b Fg(history)p 351 183 18 3 v 20 w(expand)j Ff(\()p Fn(char)14 -b(*string,)g(char)h(**output)p Ff(\))195 238 y Fo(Expand)k -Fj(string)p Fo(,)g(placing)h(the)e(result)h(in)o(to)g -Fj(output)p Fo(,)g(a)f(p)q(oin)o(ter)h(to)f(a)g(string)h(\(see)f(Sec-) -195 293 y(tion)d(1.1)g([History)f(In)o(teraction],)h(page)g(1\).)k -(Returns:)195 370 y Fn(0)216 b Fo(If)16 b(no)g(expansions)h(to)q(ok)e -(place)i(\(or,)d(if)j(the)f(only)g(c)o(hange)g(in)h(the)e(text)h(w)o -(as)435 425 y(the)f(de-slashifying)j(of)c(the)i(history)f(expansion)h -(c)o(haracter\);)195 502 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g -(tak)o(e)e(place;)195 580 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an) -h(error)g(in)h(expansion;)195 657 y Fn(2)216 b Fo(if)16 -b(the)g(returned)f(line)j(should)e(b)q(e)g(displa)o(y)o(ed,)h(but)e -(not)g(executed,)i(as)e(with)435 712 y(the)g Fn(:p)g -Fo(mo)q(di\014er)h(\(see)f(Section)i(1.1.3)c([Mo)q(di\014ers],)i(page)g -(2\).)195 789 y(If)g(an)g(error)f(o)q(curred)i(in)g(expansion,)f(then)h -Fj(output)f Fo(con)o(tains)g(a)g(descriptiv)o(e)i(error)d(mes-)195 -844 y(sage.)1650 932 y(F)l(unction)-1749 b Fh(char)20 -b(*)f Fg(history)p 422 932 V 21 w(arg)p 524 932 V 19 -w(extract)24 b Ff(\()p Fn(int)14 b(first,)h(int)g(last,)f(char)283 -987 y(*string)p Ff(\))195 1042 y Fo(Extract)g(a)g(string)g(segmen)o(t)g -(consisting)i(of)e(the)g Fj(\014rst)i Fo(through)e Fj(last)h -Fo(argumen)o(ts)f(presen)o(t)195 1097 y(in)i Fj(string)p -Fo(.)k(Argumen)o(ts)15 b(are)f(brok)o(en)i(up)f(as)g(in)h(Bash.)1650 -1185 y(F)l(unction)-1749 b Fh(char)20 b(*)f Fg(get)p -324 1185 V 21 w(history)p 520 1185 V 20 w(ev)n(en)n(t)25 -b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,)f(int)283 -1240 y(qchar)p Ff(\))195 1295 y Fo(Returns)h(the)g(text)f(of)g(the)h -(history)g(ev)o(en)o(t)f(b)q(eginning)j(at)d Fj(string)k -Fn(+)d Fj(*cindex)p Fo(.)20 b Fj(*cindex)f Fo(is)195 -1350 y(mo)q(di\014ed)e(to)e(p)q(oin)o(t)h(to)f(after)g(the)h(ev)o(en)o -(t)f(sp)q(eci\014er.)23 b(A)o(t)16 b(function)g(en)o(try)l(,)f -Fj(cindex)21 b Fo(p)q(oin)o(ts)195 1404 y(to)16 b(the)h(index)h(in)o -(to)e Fj(string)21 b Fo(where)c(the)g(history)f(ev)o(en)o(t)h(sp)q -(eci\014cation)h(b)q(egins.)26 b Fj(qc)o(har)19 b Fo(is)195 -1459 y(a)h(c)o(haracter)g(that)g(is)h(allo)o(w)o(ed)f(to)g(end)h(the)g -(ev)o(en)o(t)f(sp)q(eci\014cation)i(in)g(addition)f(to)f(the)195 -1514 y(\\normal")15 b(terminating)g(c)o(haracters.)1650 -1602 y(F)l(unction)-1749 b Fh(char)20 b(**)f Fg(history)p -448 1602 V 21 w(tok)n(enize)25 b Ff(\()p Fn(char)14 b(*string)p -Ff(\))195 1657 y Fo(Return)j(an)g(arra)o(y)f(of)g(tok)o(ens)g(parsed)h -(out)g(of)f Fj(string)p Fo(,)h(m)o(uc)o(h)g(as)f(the)h(shell)h(migh)o -(t.)25 b(The)195 1712 y(tok)o(ens)d(are)g(split)i(on)f(white)g(space)g -(and)f(on)h(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)h(and)f(shell) -195 1767 y(quoting)15 b(con)o(v)o(en)o(tions)h(are)e(ob)q(ey)o(ed.)75 -1892 y Fm(2.4)33 b(History)22 b(V)-6 b(ariables)137 1987 -y Fo(This)23 b(section)f(describ)q(es)h(the)f(externally)h(visible)h(v) -m(ariables)f(exp)q(orted)f(b)o(y)g(the)g(GNU)f(History)75 -2042 y(Library)l(.)1661 2130 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(history)p 351 2130 V 20 w(base)195 2185 y Fo(The)15 -b(logical)i(o\013set)d(of)h(the)g(\014rst)g(en)o(try)g(in)h(the)f -(history)g(list.)1661 2274 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(history)p 351 2274 V 20 w(length)195 2329 y Fo(The)15 -b(n)o(um)o(b)q(er)h(of)f(en)o(tries)g(curren)o(tly)h(stored)f(in)h(the) -f(history)g(list.)1661 2417 y(V)l(ariable)-1749 b Fh(int)20 -b Fg(max)p 283 2417 V 19 w(input)p 435 2417 V 21 w(history)195 -2472 y Fo(The)14 b(maxim)o(um)f(n)o(um)o(b)q(er)h(of)e(history)i(en)o -(tries.)19 b(This)14 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)g -Fn(stifle_)195 2527 y(history)g(\(\))p Fo(.)1661 2615 -y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 2615 -V 20 w(expansion)p 644 2615 V 21 w(c)n(har)195 2670 y -Fo(The)15 b(c)o(haracter)g(that)f(starts)g(a)h(history)g(ev)o(en)o(t.) -20 b(The)15 b(default)h(is)g(`)p Fn(!)p Fo('.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fo(10)1324 b(GNU)15 b(History)g(Library)1661 -183 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 -183 18 3 v 20 w(subst)p 529 183 V 20 w(c)n(har)195 238 -y Fo(The)13 b(c)o(haracter)e(that)h(in)o(v)o(ok)o(es)g(w)o(ord)g -(substitution)h(if)g(found)g(at)e(the)i(start)e(of)h(a)g(line.)21 -b(The)195 293 y(default)16 b(is)f(`)p Fn(^)p Fo('.)1661 -388 y(V)l(ariable)-1749 b Fh(char)20 b Fg(history)p 377 -388 V 20 w(commen)n(t)p 627 388 V 19 w(c)n(har)195 443 -y Fo(During)e(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is)i(seen)f -(as)g(the)g(\014rst)g(c)o(haracter)f(of)g(a)h(w)o(ord,)195 -498 y(then)e(it)g(and)g(all)h(subsequen)o(t)g(c)o(haracters)e(up)h(to)g -(a)f(newline)j(are)e(ignored,)g(suppressing)195 553 y(history)f -(expansion)h(for)f(the)g(remainder)h(of)f(the)g(line.)22 -b(This)15 b(is)h(disabled)h(b)o(y)e(default.)1661 648 -y(V)l(ariable)-1749 b Fh(char)20 b(*)f Fg(history)p 422 -648 V 21 w(no)p 504 648 V 20 w(expand)p 704 648 V 20 -w(c)n(hars)195 703 y Fo(The)j(list)h(of)f(c)o(haracters)f(whic)o(h)i -(inhibit)h(history)e(expansion)h(if)g(found)f(immediately)195 -758 y(follo)o(wing)16 b Fj(history)p 528 758 14 2 v 16 -w(expansion)p 739 758 V 18 w(c)o(har)p Fo(.)j(The)d(default)f(is)h -(whitespace)g(and)g(`)p Fn(=)p Fo('.)1661 853 y(V)l(ariable)-1749 -b Fh(char)20 b(*)f Fg(history)p 422 853 18 3 v 21 w(searc)n(h)p -599 853 V 20 w(delimiter)p 843 853 V 23 w(c)n(hars)195 -908 y Fo(The)f(list)h(of)e(additional)i(c)o(haracters)e(whic)o(h)i(can) -f(delimit)h(a)f(history)g(searc)o(h)f(string,)h(in)195 -963 y(addition)c(to)d(whitespace,)j(`)p Fn(:)p Fo(')d(and)i(`)p -Fn(?)p Fo(')f(in)h(the)f(case)h(of)f(a)g(substring)h(searc)o(h.)19 -b(The)12 b(default)195 1018 y(is)k(empt)o(y)l(.)1661 -1113 y(V)l(ariable)-1749 b Fh(int)20 b Fg(history)p 351 -1113 V 20 w(quotes)p 533 1113 V 21 w(inhibit)p 717 1113 -V 23 w(expansion)195 1168 y Fo(If)13 b(non-zero,)f(single-quoted)i(w)o -(ords)e(are)g(not)g(scanned)h(for)f(the)g(history)h(expansion)g(c)o -(har-)195 1223 y(acter.)19 b(The)d(default)g(v)m(alue)g(is)g(0.)1661 -1318 y(V)l(ariable)-1749 b Fh(Function)20 b(*)g Fg(history)p -527 1318 V 20 w(inhibit)p 710 1318 V 23 w(expansion)p -980 1318 V 21 w(function)195 1373 y Fo(This)12 b(should)g(b)q(e)g(set)f -(to)f(the)i(address)f(of)g(a)g(function)h(that)e(tak)o(es)h(t)o(w)o(o)f -(argumen)o(ts:)17 b(a)11 b Fn(char)195 1428 y(*)j Fo(\()p -Fj(string)t Fo(\))f(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g -(string)g(\()p Fj(i)r Fo(\).)20 b(It)14 b(should)h(return)f(a)g -(non-zero)195 1482 y(v)m(alue)g(if)e(the)h(history)f(expansion)h -(starting)f(at)g Fj(string[i])i Fo(should)f(not)f(b)q(e)h(p)q -(erformed;)g(zero)195 1537 y(if)g(the)h(expansion)f(should)h(b)q(e)g -(done.)20 b(It)13 b(is)g(in)o(tended)i(for)d(use)h(b)o(y)g -(applications)i(lik)o(e)f(Bash)195 1592 y(that)j(use)h(the)g(history)f -(expansion)i(c)o(haracter)e(for)g(additional)i(purp)q(oses.)28 -b(By)18 b(default,)195 1647 y(this)e(v)m(ariable)g(is)g(set)f(to)f -(NULL.)75 1780 y Fm(2.5)33 b(History)22 b(Programming)h(Example)137 -1878 y Fo(The)16 b(follo)o(wing)g(program)e(demonstrates)g(simple)j -(use)e(of)g(the)g(GNU)g(History)g(Library)l(.)195 1944 -y Fn(main)23 b(\(\))195 1995 y({)243 2047 y(char)g(line[1024],)f(*t;) -243 2099 y(int)h(len,)g(done)h(=)g(0;)243 2203 y(line[0])f(=)g(0;)243 -2307 y(using_history)f(\(\);)243 2359 y(while)h(\(!done\))290 -2411 y({)338 2462 y(printf)g(\("history$)g("\);)338 2514 -y(fflush)g(\(stdout\);)338 2566 y(t)h(=)g(fgets)f(\(line,)g(sizeof)g -(\(line\))g(-)h(1,)f(stdin\);)338 2618 y(if)h(\(t)f(&&)h(*t\))386 -2670 y({)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)867 b(11)434 183 y Fn(len)23 b(=)h(strlen)f(\(t\);)434 -235 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))481 287 y(t[len)h(-)f(1])h -(=)g('\\0';)386 339 y(})338 443 y(if)g(\(!t\))386 495 -y(strcpy)f(\(line,)g("quit"\);)338 598 y(if)h(\(line[0]\))386 -650 y({)434 702 y(char)f(*expansion;)434 754 y(int)g(result;)434 -858 y(result)g(=)g(history_expand)f(\(line,)h(&expansion\);)434 -910 y(if)g(\(result\))481 962 y(fprintf)g(\(stderr,)g("\045s\\n",)g -(expansion\);)434 1065 y(if)g(\(result)g(<)h(0)g(||)f(result)g(==)h -(2\))481 1117 y({)529 1169 y(free)f(\(expansion\);)529 -1221 y(continue;)481 1273 y(})434 1377 y(add_history)f(\(expansion\);) -434 1429 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h -(1\);)434 1480 y(free)f(\(expansion\);)386 1532 y(})338 -1636 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))386 -1688 y(done)g(=)h(1;)338 1740 y(else)f(if)h(\(strcmp)f(\(line,)g -("save"\))g(==)h(0\))386 1792 y(write_history)e(\("history_file"\);)338 -1844 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))386 -1896 y(read_history)e(\("history_file"\);)338 1947 y(else)h(if)h -(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))386 1999 y({)434 -2051 y(register)e(HIST_ENTRY)h(**the_list;)434 2103 y(register)f(int)i -(i;)434 2207 y(the_list)e(=)i(history_list)e(\(\);)434 -2259 y(if)h(\(the_list\))481 2311 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e -(i++\))529 2363 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g -(history_base,)e(the_list[i]->line\);)386 2414 y(})338 -2466 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))386 -2518 y({)434 2570 y(int)f(which;)434 2622 y(if)g(\(\(sscanf)g(\(line)g -(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))p eop -%%Page: 12 14 -12 13 bop 75 -58 a Fo(12)1324 b(GNU)15 b(History)g(Library)481 -183 y Fn({)529 235 y(HIST_ENTRY)23 b(*entry)g(=)g(remove_history)f -(\(which\);)529 287 y(if)i(\(!entry\))577 339 y(fprintf)f(\(stderr,)f -("No)i(such)f(entry)g(\045d\\n",)g(which\);)529 391 y(else)577 -443 y({)625 495 y(free)g(\(entry->line\);)625 546 y(free)g(\(entry\);) -577 598 y(})481 650 y(})434 702 y(else)481 754 y({)529 -806 y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)481 858 y(})386 910 y(})290 962 y(})195 -1013 y(})p eop -%%Page: 13 15 -13 14 bop 75 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1196 -b(13)75 183 y Fk(App)r(endix)25 b(A)41 b(Concept)27 b(Index)75 -359 y Fm(A)75 417 y Fe(anc)o(hored)14 b(searc)o(h)s Fd(.)7 -b(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Fe(7)75 517 y Fm(E)75 575 y Fe(ev)o(en)o(t)d(designators)c -Fd(.)g(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 -b Fe(1)1012 359 y Fm(H)1012 417 y Fe(history)15 b(ev)o(en)o(ts)s -Fd(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)16 b Fe(1)1012 467 y(history)f(expansion)6 b Fd(.)j(.)d(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fe(1)1012 517 y(History)14 -b(Searc)o(hing)5 b Fd(.)j(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)18 b Fe(7)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fo(14)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: 15 17 -15 16 bop 75 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)919 b(15)75 183 y Fk(App)r(endix)25 -b(B)41 b(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 359 y Fm(A)75 417 y Fc(add)p 137 417 12 2 -v 13 w(history)6 b Fd(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(6)75 467 y Fc(append)p -197 467 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Fe(8)75 567 y Fm(C)75 625 y Fc(clear)p -177 625 V 12 w(history)s Fd(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(6)75 675 y Fc(current)p -217 675 V 11 w(history)7 b Fd(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)22 b Fe(7)75 774 y Fm(G)75 832 y Fc(get)p -137 832 V 13 w(history)p 290 832 V 11 w(event)8 b Fd(.)e(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(9)75 932 y Fm(H)75 -990 y Fc(history)p 217 990 V 11 w(arg)p 288 990 V 13 -w(extract)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Fe(9)75 1040 y Fc(history)p 217 1040 V 11 w(base)f -Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 -b Fe(9)75 1090 y Fc(history_co)o(mm)o(ent)o(_c)o(har)g -Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(10)75 1139 y Fc(history)p -217 1139 V 11 w(expand)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Fe(9)75 1189 y Fc(history)p 217 -1189 V 11 w(expansion)p 408 1189 V 11 w(char)17 b Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)18 b Fe(9)75 1239 y Fc(history)p 217 -1239 V 11 w(get)6 b Fd(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)18 b Fe(7)75 1289 y Fc(history)p -217 1289 V 11 w(get)p 288 1289 V 13 w(history)p 441 1289 -V 12 w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1339 y Fc(history_in)o(hi)o -(bit)o(_e)o(xpa)o(nsi)o(on)o(_fu)o(nc)o(tio)o(n)c Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)22 b Fe(10)75 1389 y Fc(history)p -217 1389 V 11 w(is)p 268 1389 V 14 w(stifled)8 b Fd(.)s(.)f(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)21 b Fe(6)75 1438 y Fc(history)p -217 1438 V 11 w(length)15 b Fd(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)17 b Fe(9)75 1488 y Fc(history)p 217 -1488 V 11 w(list)5 b Fd(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)17 b Fe(7)75 1538 y Fc(history_no)o(_e)o(xpa)o(nd)o -(_ch)o(ars)e Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(10)75 1588 y Fc(history_qu)o(ot)o -(es_)o(in)o(hib)o(it_)o(ex)o(pan)o(si)o(on)13 b Fd(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(10)75 1638 -y Fc(history)p 217 1638 V 11 w(search)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(7)75 1687 y Fc(history_se)o(ar)o -(ch_)o(de)o(lim)o(ite)o(r_)o(cha)o(rs)15 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)18 b Fe(10)75 1737 y Fc(history)p -217 1737 V 11 w(search)p 348 1737 V 12 w(pos)8 b Fd(.)d(.)i(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)21 b Fe(8)75 1787 y Fc(history)p -217 1787 V 11 w(search)p 348 1787 V 12 w(prefix)5 b Fd(.)t(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)17 b Fe(8)75 1837 y Fc(history)p 217 1837 -V 11 w(set)p 288 1837 V 13 w(history)p 441 1837 V 12 -w(state)9 b Fd(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)23 b Fe(6)75 1887 y Fc(history)p -217 1887 V 11 w(set)p 288 1887 V 13 w(pos)t Fd(.)5 b(.)h(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Fe(7)1012 359 -y Fc(history_sub)o(st)o(_ch)o(ar)d Fd(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -17 b Fe(10)1012 409 y Fc(history)p 1154 409 V 12 w(tokenize)8 -b Fd(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fe(9)1012 459 y Fc(history)p 1154 459 V 12 w(total)p -1266 459 V 12 w(bytes)7 b Fd(.)t(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 -b Fe(7)1012 509 y Fc(history)p 1154 509 V 12 w(truncate)p -1326 509 V 11 w(file)5 b Fd(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Fe(8)1012 612 y Fm(M)1012 670 y Fc(max)p 1074 670 V -13 w(input)p 1187 670 V 13 w(history)13 b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)16 b Fe(9)1012 773 y Fm(N)1012 831 -y Fc(next)p 1094 831 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(7)1012 -934 y Fm(P)1012 992 y Fc(previous)p 1174 992 V 11 w(history)8 -b Fd(.)t(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Fe(7)1012 1096 y Fm(R)1012 1154 y Fc(read)p 1094 1154 -V 13 w(history)5 b Fd(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)18 b Fe(8)1012 1204 y Fc(read)p 1094 -1204 V 13 w(history)p 1247 1204 V 11 w(range)8 b Fd(.)d(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)21 b Fe(8)1012 1253 y Fc(remove)p -1134 1253 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Fe(6)1012 1303 y Fc(replace)p 1154 -1303 V 12 w(history)p 1306 1303 V 11 w(entry)5 b Fd(.)t(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Fe(6)1012 1406 y Fm(S)1012 1464 y Fc(stifle)p -1134 1464 V 12 w(history)8 b Fd(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Fe(6)1012 1568 y Fm(U)1012 1626 -y Fc(unstifle)p 1174 1626 V 11 w(history)8 b Fd(.)t(.)e(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(6)1012 1676 y Fc(using)p -1114 1676 V 13 w(history)s Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(6)1012 1779 y Fm(W)1012 -1837 y Fc(where)p 1114 1837 V 13 w(history)s Fd(.)s(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(7)1012 1887 y Fc(write)p 1114 1887 V 13 w(history)s -Fd(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(8)p eop -%%Page: 16 18 -16 17 bop 75 -58 a Fo(16)1324 b(GNU)15 b(History)g(Library)p -eop -%%Page: -1 19 --1 18 bop 1862 -58 a Fo(i)75 183 y Fk(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fm(1)67 b(Using)22 b(History)h(In)n -(teractiv)n(ely)9 b Fb(.)k(.)d(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)h(.)31 b Fm(1)224 423 y Fo(1.1)45 b(History)15 -b(Expansion)5 b Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fo(1)374 478 y(1.1.1)44 -b(Ev)o(en)o(t)14 b(Designators)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)26 b Fo(1)374 532 y(1.1.2)44 b(W)l(ord)15 -b(Designators)5 b Fa(.)h(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)19 b Fo(2)374 587 y(1.1.3)44 b(Mo)q(di\014ers)t Fa(.)8 -b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)19 b Fo(2)75 708 y Fm(2)67 b(Programming)23 -b(with)g(GNU)f(History)16 b Fb(.)10 b(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f -(.)g(.)38 b Fm(5)224 777 y Fo(2.1)45 b(In)o(tro)q(duction)16 -b(to)f(History)10 b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)24 b Fo(5)224 832 y(2.2)45 b(History)15 -b(Storage)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 b Fo(5)224 886 -y(2.3)45 b(History)15 b(F)l(unctions)d Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)26 -b Fo(6)374 941 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e -(Managemen)o(t)g Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)29 b -Fo(6)374 996 y(2.3.2)44 b(History)15 b(List)h(Managemen)o(t)d -Fa(.)7 b(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)29 b Fo(6)374 1051 y(2.3.3)44 -b(Information)15 b(Ab)q(out)g(the)h(History)f(List)c -Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fo(7)374 1106 y(2.3.4)44 b(Mo)o(ving)15 b(Around)g(the)g(History)g -(List)c Fa(.)d(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)25 b Fo(7)374 1160 y(2.3.5)44 b(Searc)o(hing)16 -b(the)f(History)g(List)7 b Fa(.)h(.)g(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fo(7)374 1215 y(2.3.6)44 b(Managing)15 b(the)g(History)g(File)6 -b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)20 b Fo(8)374 1270 y(2.3.7)44 -b(History)15 b(Expansion)9 b Fa(.)f(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)24 b Fo(8)224 1325 y(2.4)45 b(History)15 b(V)l(ariables)6 -b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)21 b Fo(9)224 1380 y(2.5)45 b(History)15 -b(Programming)f(Example)7 b Fa(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fo(10)75 1501 y Fm(App)r(endix)i(A)67 b(Concept)22 -b(Index)17 b Fb(.)10 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)h(.)f(.)g(.)38 b Fm(13)75 1636 y(App)r(endix)24 b(B)67 -b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 b(Index)16 -b Fb(.)10 b(.)g(.)g(.)38 b Fm(15)p eop -%%Page: -2 20 --2 19 bop 75 -58 a Fo(ii)1346 b(GNU)15 b(History)g(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/gnu/lib/libreadline/doc/readline.0 b/gnu/lib/libreadline/doc/readline.0 deleted file mode 100644 index 8d453cd098f..00000000000 --- a/gnu/lib/libreadline/doc/readline.0 +++ /dev/null @@ -1,1188 +0,0 @@ - - - -READLINE(3) READLINE(3) - - -NNAAMMEE - readline - get a line from a user with editing - -SSYYNNOOPPSSIISS - ##iinncclluuddee <<ssttddiioo..hh>> - ##iinncclluuddee <<rreeaaddlliinnee..hh>> - ##iinncclluuddee <<hhiissttoorryy..hh>> - - cchhaarr **rreeaaddlliinnee ((pprroommpptt)) - cchhaarr **pprroommpptt;; - -CCOOPPYYRRIIGGHHTT - Readline is Copyright (C) 1989, 1991, 1993, 1995, 1996 by - the Free Software Foundation, Inc. - -DDEESSCCRRIIPPTTIIOONN - rreeaaddlliinnee will read a line from the terminal and return it, - using pprroommpptt as a prompt. If pprroommpptt is null, no prompt is - issued. The line returned is allocated with _m_a_l_l_o_c(3), so - the caller must free it when finished. The line returned - has the final newline removed, so only the text of the - line remains. - - rreeaaddlliinnee offers editing capabilities while the user is - entering the line. By default, the line editing commands - are similar to those of emacs. A vi-style line editing - interface is also available. - -RREETTUURRNN VVAALLUUEE - rreeaaddlliinnee returns the text of the line read. A blank line - returns the empty string. If EEOOFF is encountered while - reading a line, and the line is empty, NNUULLLL is returned. - If an EEOOFF is read with a non-empty line, it is treated as - a newline. - -NNOOTTAATTIIOONN - An emacs-style notation is used to denote keystrokes. - Control keys are denoted by C-_k_e_y, e.g., C-n means Con- - trol-N. Similarly, _m_e_t_a keys are denoted by M-_k_e_y, so M-x - means Meta-X. (On keyboards without a _m_e_t_a key, M-_x means - ESC _x, i.e., press the Escape key then the _x key. This - makes ESC the _m_e_t_a _p_r_e_f_i_x. The combination M-C-_x means - ESC-Control-_x, or press the Escape key then hold the Con- - trol key while pressing the _x key.) - - Readline commands may be given numeric _a_r_g_u_m_e_n_t_s, which - normally act as a repeat count. Sometimes, however, it is - the sign of the argument that is significant. Passing a - negative argument to a command that acts in the forward - direction (e.g., kkiillll--lliinnee) causes that command to act in - a backward direction. Commands whose behavior with argu- - ments deviates from this are noted. - - When a command is described as _k_i_l_l_i_n_g text, the text - - - -GNU 1999 Jun 1 1 - - - - - -READLINE(3) READLINE(3) - - - deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). - The killed text is saved in a _k_i_l_l _r_i_n_g. Consecutive - kills cause the text to be accumulated into one unit, - which can be yanked all at once. Commands which do not - kill text separate the chunks of text on the kill ring. - -IINNIITTIIAALLIIZZAATTIIOONN FFIILLEE - Readline is customized by putting commands in an initial- - ization file (the _i_n_p_u_t_r_c file). The name of this file is - taken from the value of the IINNPPUUTTRRCC environment variable. - If that variable is unset, the default is _~_/_._i_n_p_u_t_r_c. - When a program which uses the readline library starts up, - the init file is read, and the key bindings and variables - are set. There are only a few basic constructs allowed in - the readline init file. Blank lines are ignored. Lines - beginning with a ## are comments. Lines beginning with a $$ - indicate conditional constructs. Other lines denote key - bindings and variable settings. Each program using this - library may add its own commands and bindings. - - For example, placing - - M-Control-u: universal-argument - or - C-Meta-u: universal-argument - into the _i_n_p_u_t_r_c would make M-C-u execute the readline - command _u_n_i_v_e_r_s_a_l_-_a_r_g_u_m_e_n_t. - - The following symbolic character names are recognized - while processing key bindings: _R_U_B_O_U_T, _D_E_L, _E_S_C, _L_F_D, _N_E_W_- - _L_I_N_E, _R_E_T, _R_E_T_U_R_N, _S_P_C, _S_P_A_C_E, and _T_A_B. - - In addition to command names, readline allows keys to be - bound to a string that is inserted when the key is pressed - (a _m_a_c_r_o). - - - KKeeyy BBiinnddiinnggss - The syntax for controlling key bindings in the _i_n_p_u_t_r_c - file is simple. All that is required is the name of the - command or the text of a macro and a key sequence to which - it should be bound. The name may be specified in one of - two ways: as a symbolic key name, possibly with _M_e_t_a_- or - _C_o_n_t_r_o_l_- prefixes, or as a key sequence. When using the - form kkeeyynnaammee:_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, _k_e_y_n_a_m_e is the name - of a key spelled out in English. For example: - - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: ">&output" - - In the above example, _C_-_u is bound to the function uunniivveerr-- - ssaall--aarrgguummeenntt, _M_-_D_E_L is bound to the function bbaacckk-- - wwaarrdd--kkiillll--wwoorrdd, and _C_-_o is bound to run the macro - - - -GNU 1999 Jun 1 2 - - - - - -READLINE(3) READLINE(3) - - - expressed on the right hand side (that is, to insert the - text _>_&_o_u_t_p_u_t into the line). - - In the second form, ""kkeeyysseeqq"":_f_u_n_c_t_i_o_n_-_n_a_m_e or _m_a_c_r_o, kkeeyy-- - sseeqq differs from kkeeyynnaammee above in that strings denoting an - entire key sequence may be specified by placing the - sequence within double quotes. Some GNU Emacs style key - escapes can be used, as in the following example. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In this example, _C_-_u is again bound to the function uunnii-- - vveerrssaall--aarrgguummeenntt. _C_-_x _C_-_r is bound to the function - rree--rreeaadd--iinniitt--ffiillee, and _E_S_C _[ _1 _1 _~ is bound to insert the - text FFuunnccttiioonn KKeeyy 11. The full set of GNU Emacs style - escape sequences is - \\CC-- control prefix - \\MM-- meta prefix - \\ee an escape character - \\\\ backslash - \\"" literal " - \\'' literal ' - - In addition to the GNU Emacs style escape sequences, a - second set of backslash escapes is available: - \\aa alert (bell) - \\bb backspace - \\dd delete - \\ff form feed - \\nn newline - \\rr carriage return - \\tt horizontal tab - \\vv vertical tab - \\_n_n_n the character whose ASCII code is the octal - value _n_n_n (one to three digits) - \\xx_n_n_n the character whose ASCII code is the hex- - adecimal value _n_n_n (one to three digits) - - When entering the text of a macro, single or double quotes - should be used to indicate a macro definition. Unquoted - text is assumed to be a function name. In the macro body, - the backslash escapes described above are expanded. Back- - slash will quote any other character in the macro text, - including " and '. - - BBaasshh allows the current readline key bindings to be dis- - played or modified with the bbiinndd builtin command. The - editing mode may be switched during interactive use by - using the --oo option to the sseett builtin command. Other - programs using this library provide similar mechanisms. - The _i_n_p_u_t_r_c file may be edited and re-read if a program - does not provide any other means to incorporate new - - - -GNU 1999 Jun 1 3 - - - - - -READLINE(3) READLINE(3) - - - bindings. - - VVaarriiaabblleess - Readline has variables that can be used to further cus- - tomize its behavior. A variable may be set in the _i_n_p_u_t_r_c - file with a statement of the form - - sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e - - Except where noted, readline variables can take the values - OOnn or OOffff. The variables and their default values are: - - bbeellll--ssttyyllee ((aauuddiibbllee)) - Controls what happens when readline wants to ring - the terminal bell. If set to nnoonnee, readline never - rings the bell. If set to vviissiibbllee, readline uses a - visible bell if one is available. If set to aauuddii-- - bbllee, readline attempts to ring the terminal's bell. - ccoommmmeenntt--bbeeggiinn ((````##'''')) - The string that is inserted in vvii mode when the - iinnsseerrtt--ccoommmmeenntt command is executed. This command - is bound to MM--## in emacs mode and to ## in vi com- - mand mode. - ccoommpplleettiioonn--iiggnnoorree--ccaassee ((OOffff)) - If set to OOnn, readline performs filename matching - and completion in a case-insensitive fashion. - ccoommpplleettiioonn--qquueerryy--iitteemmss ((110000)) - This determines when the user is queried about - viewing the number of possible completions gener- - ated by the ppoossssiibbllee--ccoommpplleettiioonnss command. It may - be set to any integer value greater than or equal - to zero. If the number of possible completions is - greater than or equal to the value of this vari- - able, the user is asked whether or not he wishes to - view them; otherwise they are simply listed on the - terminal. - ccoonnvveerrtt--mmeettaa ((OOnn)) - If set to OOnn, readline will convert characters with - the eighth bit set to an ASCII key sequence by - stripping the eighth bit and prepending an escape - character (in effect, using escape as the _m_e_t_a _p_r_e_- - _f_i_x). - ddiissaabbllee--ccoommpplleettiioonn ((OOffff)) - If set to OOnn, readline will inhibit word comple- - tion. Completion characters will be inserted into - the line as if they had been mapped to sseellff--iinnsseerrtt. - eeddiittiinngg--mmooddee ((eemmaaccss)) - Controls whether readline begins with a set of key - bindings similar to _e_m_a_c_s or _v_i. eeddiittiinngg--mmooddee can - be set to either eemmaaccss or vvii. - eennaabbllee--kkeeyyppaadd ((OOffff)) - When set to OOnn, readline will try to enable the - application keypad when it is called. Some systems - need this to enable the arrow keys. - - - -GNU 1999 Jun 1 4 - - - - - -READLINE(3) READLINE(3) - - - eexxppaanndd--ttiillddee ((OOffff)) - If set to oonn, tilde expansion is performed when - readline attempts word completion. - hhoorriizzoonnttaall--ssccrroollll--mmooddee ((OOffff)) - When set to OOnn, makes readline use a single line - for display, scrolling the input horizontally on a - single screen line when it becomes longer than the - screen width rather than wrapping to a new line. - iinnppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will enable eight-bit input - (that is, it will not strip the high bit from the - characters it reads), regardless of what the termi- - nal claims it can support. The name mmeettaa--ffllaagg is a - synonym for this variable. - iisseeaarrcchh--tteerrmmiinnaattoorrss ((````CC--[[CC--JJ'''')) - The string of characters that should terminate an - incremental search without subsequently executing - the character as a command. If this variable has - not been given a value, the characters _E_S_C and _C_-_J - will terminate an incremental search. - kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of legal - keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, - _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. - _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent - to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the - value of eeddiittiinngg--mmooddee also affects the default - keymap. - mmaarrkk--ddiirreeccttoorriieess ((OOnn)) - If set to OOnn, complete<d directory names have a - slash appended. - mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified - are displayed with a preceding asterisk (**). - oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with - the eighth bit set directly rather than as a meta- - prefixed escape sequence. - pprriinntt--ccoommpplleettiioonnss--hhoorriizzoonnttaallllyy ((OOffff)) - If set to OOnn, readline will display completions - with matches sorted horizontally in alphabetical - order, rather than down the screen. - sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion - functions. If set to oonn, words which have more - than one possible completion cause the matches to - be listed immediately instead of ringing the bell. - vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as - reported by ssttaatt(2) is appended to the filename - when listing possible completions. - - CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the - - - -GNU 1999 Jun 1 5 - - - - - -READLINE(3) READLINE(3) - - - conditional compilation features of the C preprocessor - which allows key bindings and variable settings to be per- - formed as the result of tests. There are four parser - directives used. - - $$iiff The $$iiff construct allows bindings to be made based - on the editing mode, the terminal being used, or - the application using readline. The text of the - test extends to the end of the line; no characters - are required to isolate it. - - mmooddee The mmooddee== form of the $$iiff directive is used - to test whether readline is in emacs or vi - mode. This may be used in conjunction with - the sseett kkeeyymmaapp command, for instance, to set - bindings in the _e_m_a_c_s_-_s_t_a_n_d_a_r_d and _e_m_a_c_s_- - _c_t_l_x keymaps only if readline is starting - out in emacs mode. - - tteerrmm The tteerrmm== form may be used to include termi- - nal-specific key bindings, perhaps to bind - the key sequences output by the terminal's - function keys. The word on the right side - of the == is tested against the full name of - the terminal and the portion of the terminal - name before the first --. This allows _s_u_n to - match both _s_u_n and _s_u_n_-_c_m_d, for instance. - - aapppplliiccaattiioonn - The aapppplliiccaattiioonn construct is used to include - application-specific settings. Each program - using the readline library sets the _a_p_p_l_i_c_a_- - _t_i_o_n _n_a_m_e, and an initialization file can - test for a particular value. This could be - used to bind key sequences to functions use- - ful for a specific program. For instance, - the following command adds a key sequence - that quotes the current or previous word in - Bash: - - $$iiff bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $$eennddiiff - - $$eennddiiff This command, as seen in the previous example, ter- - minates an $$iiff command. - - $$eellssee Commands in this branch of the $$iiff directive are - executed if the test fails. - - $$iinncclluuddee - This directive takes a single filename as an argu- - ment and reads commands and bindings from that - - - -GNU 1999 Jun 1 6 - - - - - -READLINE(3) READLINE(3) - - - file. For example, the following directive would - read _/_e_t_c_/_i_n_p_u_t_r_c: - - $$iinncclluuddee _/_e_t_c_/_i_n_p_u_t_r_c - -SSEEAARRCCHHIINNGG - Readline provides commands for searching through the com- - mand history for lines containing a specified string. - There are two search modes: _i_n_c_r_e_m_e_n_t_a_l and _n_o_n_-_i_n_c_r_e_m_e_n_- - _t_a_l. - - Incremental searches begin before the user has finished - typing the search string. As each character of the search - string is typed, readline displays the next entry from the - history matching the string typed so far. An incremental - search requires only as many characters as needed to find - the desired history entry. The characters present in the - value of the _i_s_e_a_r_c_h_-_t_e_r_m_i_n_a_t_o_r_s variable are used to ter- - minate an incremental search. If that variable has not - been assigned a value the Escape and Control-J characters - will terminate an incremental search. Control-G will - abort an incremental search and restore the original line. - When the search is terminated, the history entry contain- - ing the search string becomes the current line. To find - other matching entries in the history list, type Control-S - or Control-R as appropriate. This will search backward or - forward in the history for the next line matching the - search string typed so far. Any other key sequence bound - to a readline command will terminate the search and exe- - cute that command. For instance, a _n_e_w_l_i_n_e will terminate - the search and accept the line, thereby executing the com- - mand from the history list. - - Non-incremental searches read the entire search string - before starting to search for matching history lines. The - search string may be typed by the user or be part of the - contents of the current line. - -EEDDIITTIINNGG CCOOMMMMAANNDDSS - The following is a list of the names of the commands and - the default key sequences to which they are bound. Com- - mand names without an accompanying key sequence are - unbound by default. - - CCoommmmaannddss ffoorr MMoovviinngg - bbeeggiinnnniinngg--ooff--lliinnee ((CC--aa)) - Move to the start of the current line. - eenndd--ooff--lliinnee ((CC--ee)) - Move to the end of the line. - ffoorrwwaarrdd--cchhaarr ((CC--ff)) - Move forward a character. - bbaacckkwwaarrdd--cchhaarr ((CC--bb)) - Move back a character. - - - - -GNU 1999 Jun 1 7 - - - - - -READLINE(3) READLINE(3) - - - ffoorrwwaarrdd--wwoorrdd ((MM--ff)) - Move forward to the end of the next word. Words - are composed of alphanumeric characters (letters - and digits). - bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of the current or previous - word. Words are composed of alphanumeric charac- - ters (letters and digits). - cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen leaving the current line at the - top of the screen. With an argument, refresh the - current line without clearing the screen. - rreeddrraaww--ccuurrrreenntt--lliinnee - Refresh the current line. - - CCoommmmaannddss ffoorr MMaanniippuullaattiinngg tthhee HHiissttoorryy - aacccceepptt--lliinnee ((NNeewwlliinnee,, RReettuurrnn)) - Accept the line regardless of where the cursor is. - If this line is non-empty, add it to the history - list. If the line is a modified history line, then - restore the history line to its original state. - pprreevviioouuss--hhiissttoorryy ((CC--pp)) - Fetch the previous command from the history list, - moving back in the list. - nneexxtt--hhiissttoorryy ((CC--nn)) - Fetch the next command from the history list, mov- - ing forward in the list. - bbeeggiinnnniinngg--ooff--hhiissttoorryy ((MM--<<)) - Move to the first line in the history. - eenndd--ooff--hhiissttoorryy ((MM-->>)) - Move to the end of the input history, i.e., the - line currently being entered. - rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((CC--rr)) - Search backward starting at the current line and - moving `up' through the history as necessary. This - is an incremental search. - ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((CC--ss)) - Search forward starting at the current line and - moving `down' through the history as necessary. - This is an incremental search. - nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) - Search backward through the history starting at the - current line using a non-incremental search for a - string supplied by the user. - nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) - Search forward through the history using a non- - incremental search for a string supplied by the - user. - hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd - Search forward through the history for the string - of characters between the start of the current line - and the current cursor position (the _p_o_i_n_t). This - is a non-incremental search. - - - - -GNU 1999 Jun 1 8 - - - - - -READLINE(3) READLINE(3) - - - hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd - Search backward through the history for the string - of characters between the start of the current line - and the point. This is a non-incremental search. - yyaannkk--nntthh--aarrgg ((MM--CC--yy)) - Insert the first argument to the previous command - (usually the second word on the previous line) at - point (the current cursor position). With an argu- - ment _n, insert the _nth word from the previous com- - mand (the words in the previous command begin with - word 0). A negative argument inserts the _nth word - from the end of the previous command. - yyaannkk--llaasstt--aarrgg ((MM--..,, MM--__)) - Insert the last argument to the previous command - (the last word of the previous history entry). - With an argument, behave exactly like yyaannkk--nntthh--aarrgg. - Successive calls to yyaannkk--llaasstt--aarrgg move back through - the history list, inserting the last argument of - each line in turn. - - CCoommmmaannddss ffoorr CChhaannggiinngg TTeexxtt - ddeelleettee--cchhaarr ((CC--dd)) - Delete the character under the cursor. If point is - at the beginning of the line, there are no charac- - ters in the line, and the last character typed was - not bound to BBddeelleettee--cchhaarr, then return EEOOFF. - bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given - a numeric argument, save the deleted text on the - kill ring. - ffoorrwwaarrdd--bbaacckkwwaarrdd--ddeelleettee--cchhaarr - Delete the character under the cursor, unless the - cursor is at the end of the line, in which case the - character behind the cursor is deleted. By - default, this is not bound to a key. - qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character that you type to the line - verbatim. This is how to insert characters like - CC--qq, for example. - ttaabb--iinnsseerrtt ((MM--TTAABB)) - Insert a tab character. - sseellff--iinnsseerrtt ((aa,, bb,, AA,, 11,, !!,, ......)) - Insert the character typed. - ttrraannssppoossee--cchhaarrss ((CC--tt)) - Drag the character before point forward over the - character at point. Point moves forward as well. - If point is at the end of the line, then transpose - the two characters before point. Negative argu- - ments don't work. - ttrraannssppoossee--wwoorrddss ((MM--tt)) - Drag the word behind the cursor past the word in - front of the cursor moving the cursor over that - word as well. - - - - -GNU 1999 Jun 1 9 - - - - - -READLINE(3) READLINE(3) - - - uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a - negative argument, uppercase the previous word, but - do not move point. - ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a - negative argument, lowercase the previous word, but - do not move point. - ccaappiittaalliizzee--wwoorrdd ((MM--cc)) - Capitalize the current (or following) word. With a - negative argument, capitalize the previous word, - but do not move point. - - KKiilllliinngg aanndd YYaannkkiinngg - kkiillll--lliinnee ((CC--kk)) - Kill the text from the current cursor position to - the end of the line. - bbaacckkwwaarrdd--kkiillll--lliinnee ((CC--xx RRuubboouutt)) - Kill backward to the beginning of the line. - uunniixx--lliinnee--ddiissccaarrdd ((CC--uu)) - Kill backward from point to the beginning of the - line. The killed text is saved on the kill-ring. - kkiillll--wwhhoollee--lliinnee - Kill all characters on the current line, no matter - where the cursor is. - kkiillll--wwoorrdd ((MM--dd)) - Kill from the cursor to the end of the current - word, or if between words, to the end of the next - word. Word boundaries are the same as those used - by ffoorrwwaarrdd--wwoorrdd. - bbaacckkwwaarrdd--kkiillll--wwoorrdd ((MM--RRuubboouutt)) - Kill the word behind the cursor. Word boundaries - are the same as those used by bbaacckkwwaarrdd--wwoorrdd. - uunniixx--wwoorrdd--rruubboouutt ((CC--ww)) - Kill the word behind the cursor, using white space - as a word boundary. The word boundaries are dif- - ferent from bbaacckkwwaarrdd--kkiillll--wwoorrdd. - ddeelleettee--hhoorriizzoonnttaall--ssppaaccee ((MM--\\)) - Delete all spaces and tabs around point. - kkiillll--rreeggiioonn - Kill the text between the point and _m_a_r_k (saved - cursor position). This text is referred to as the - _r_e_g_i_o_n. - ccooppyy--rreeggiioonn--aass--kkiillll - Copy the text in the region to the kill buffer. - ccooppyy--bbaacckkwwaarrdd--wwoorrdd - Copy the word before point to the kill buffer. The - word boundaries are the same as bbaacckkwwaarrdd--wwoorrdd. - ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. - The word boundaries are the same as ffoorrwwaarrdd--wwoorrdd. - yyaannkk ((CC--yy)) - Yank the top of the kill ring into the buffer at - the cursor. - - - -GNU 1999 Jun 1 10 - - - - - -READLINE(3) READLINE(3) - - - yyaannkk--ppoopp ((MM--yy)) - Rotate the kill ring, and yank the new top. Only - works following yyaannkk or yyaannkk--ppoopp. - - NNuummeerriicc AArrgguummeennttss - ddiiggiitt--aarrgguummeenntt ((MM--00,, MM--11,, ......,, MM----)) - Add this digit to the argument already accumulat- - ing, or start a new argument. M-- starts a nega- - tive argument. - uunniivveerrssaall--aarrgguummeenntt - This is another way to specify an argument. If - this command is followed by one or more digits, - optionally with a leading minus sign, those digits - define the argument. If the command is followed by - digits, executing uunniivveerrssaall--aarrgguummeenntt again ends the - numeric argument, but is otherwise ignored. As a - special case, if this command is immediately fol- - lowed by a character that is neither a digit or - minus sign, the argument count for the next command - is multiplied by four. The argument count is ini- - tially one, so executing this function the first - time makes the argument count four, a second time - makes the argument count sixteen, and so on. - - CCoommpplleettiinngg - ccoommpplleettee ((TTAABB)) - Attempt to perform completion on the text before - point. The actual completion performed is applica- - tion-specific. BBaasshh, for instance, attempts com- - pletion treating the text as a variable (if the - text begins with $$), username (if the text begins - with ~~), hostname (if the text begins with @@), or - command (including aliases and functions) in turn. - If none of these produces a match, filename comple- - tion is attempted. GGddbb, on the other hand, allows - completion of program functions and variables, and - only attempts filename completion under certain - circumstances. - ppoossssiibbllee--ccoommpplleettiioonnss ((MM--??)) - List the possible completions of the text before - point. - iinnsseerrtt--ccoommpplleettiioonnss ((MM--**)) - Insert all completions of the text before point - that would have been generated by ppoossssiibbllee--ccoommppllee-- - ttiioonnss. - mmeennuu--ccoommpplleettee - Similar to ccoommpplleettee, but replaces the word to be - completed with a single match from the list of pos- - sible completions. Repeated execution of mmeennuu--ccoomm-- - pplleettee steps through the list of possible comple- - tions, inserting each match in turn. At the end of - the list of completions, the bell is rung and the - original text is restored. An argument of _n moves - _n positions forward in the list of matches; a - - - -GNU 1999 Jun 1 11 - - - - - -READLINE(3) READLINE(3) - - - negative argument may be used to move backward - through the list. This command is intended to be - bound to TTAABB, but is unbound by default. - ddeelleettee--cchhaarr--oorr--lliisstt - Deletes the character under the cursor if not at - the beginning or end of the line (like ddeelleettee-- - cchhaarr). If at the end of the line, behaves identi- - cally to ppoossssiibbllee--ccoommpplleettiioonnss. This command is - unbound by default. - - KKeeyybbooaarrdd MMaaccrrooss - ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current - keyboard macro. - eenndd--kkbbdd--mmaaccrroo ((CC--xx )))) - Stop saving the characters typed into the current - keyboard macro and store the definition. - ccaallll--llaasstt--kkbbdd--mmaaccrroo ((CC--xx ee)) - Re-execute the last keyboard macro defined, by mak- - ing the characters in the macro appear as if typed - at the keyboard. - - MMiisscceellllaanneeoouuss - rree--rreeaadd--iinniitt--ffiillee ((CC--xx CC--rr)) - Read in the contents of the _i_n_p_u_t_r_c file, and - incorporate any bindings or variable assignments - found there. - aabboorrtt ((CC--gg)) - Abort the current editing command and ring the ter- - minal's bell (subject to the setting of - bbeellll--ssttyyllee). - ddoo--uuppppeerrccaassee--vveerrssiioonn ((MM--aa,, MM--bb,, MM--_x,, ......)) - If the metafied character _x is lowercase, run the - command that is bound to the corresponding upper- - case character. - pprreeffiixx--mmeettaa ((EESSCC)) - Metafy the next character typed. EESSCC ff is equiva- - lent to MMeettaa--ff. - uunnddoo ((CC--__,, CC--xx CC--uu)) - Incremental undo, separately remembered for each - line. - rreevveerrtt--lliinnee ((MM--rr)) - Undo all changes made to this line. This is like - executing the uunnddoo command enough times to return - the line to its initial state. - ttiillddee--eexxppaanndd ((MM--&&)) - Perform tilde expansion on the current word. - sseett--mmaarrkk ((CC--@@,, MM--<<ssppaaccee>>)) - Set the mark to the current point. If a numeric - argument is supplied, the mark is set to that posi- - tion. - eexxcchhaannggee--ppooiinntt--aanndd--mmaarrkk ((CC--xx CC--xx)) - Swap the point with the mark. The current cursor - position is set to the saved position, and the old - - - -GNU 1999 Jun 1 12 - - - - - -READLINE(3) READLINE(3) - - - cursor position is saved as the mark. - cchhaarraacctteerr--sseeaarrcchh ((CC--]])) - A character is read and point is moved to the next - occurrence of that character. A negative count - searches for previous occurrences. - cchhaarraacctteerr--sseeaarrcchh--bbaacckkwwaarrdd ((MM--CC--]])) - A character is read and point is moved to the pre- - vious occurrence of that character. A negative - count searches for subsequent occurrences. - iinnsseerrtt--ccoommmmeenntt ((MM--##)) - The value of the readline ccoommmmeenntt--bbeeggiinn variable is - inserted at the beginning of the current line, and - the line is accepted as if a newline had been - typed. This makes the current line a shell com- - ment. - dduummpp--ffuunnccttiioonnss - Print all of the functions and their key bindings - to the readline output stream. If a numeric argu- - ment is supplied, the output is formatted in such a - way that it can be made part of an _i_n_p_u_t_r_c file. - dduummpp--vvaarriiaabblleess - Print all of the settable variables and their val- - ues to the readline output stream. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - dduummpp--mmaaccrrooss - Print all of the readline key sequences bound to - macros and the strings they ouput. If a numeric - argument is supplied, the output is formatted in - such a way that it can be made part of an _i_n_p_u_t_r_c - file. - eemmaaccss--eeddiittiinngg--mmooddee ((CC--ee)) - When in vvii editing mode, this causes a switch to - eemmaaccss editing mode. - vvii--eeddiittiinngg--mmooddee ((MM--CC--jj)) - When in eemmaaccss editing mode, this causes a switch to - vvii editing mode. - -DDEEFFAAUULLTT KKEEYY BBIINNDDIINNGGSS - The following is a list of the default emacs and vi bind- - ings. Characters with the 8th bit set are written as - M-<character>, and are referred to as _m_e_t_a_f_i_e_d characters. - The printable ASCII characters not mentioned in the list - of emacs standard bindings are bound to the _s_e_l_f_-_i_n_s_e_r_t - function, which just inserts the given character into the - input line. In vi insertion mode, all characters not - specifically mentioned are bound to _s_e_l_f_-_i_n_s_e_r_t. Charac- - ters assigned to signal generation by _s_t_t_y(1) or the ter- - minal driver, such as C-Z or C-C, retain that function. - Upper and lower case _m_e_t_a_f_i_e_d characters are bound to the - same function in the emacs mode meta keymap. The remain- - ing characters are unbound, which causes readline to ring - the bell (subject to the setting of the bbeellll--ssttyyllee - - - -GNU 1999 Jun 1 13 - - - - - -READLINE(3) READLINE(3) - - - variable). - - EEmmaaccss MMooddee - Emacs Standard bindings - - "C-@" set-mark - "C-A" beginning-of-line - "C-B" backward-char - "C-D" delete-char - "C-E" end-of-line - "C-F" forward-char - "C-G" abort - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-]" character-search - "C-_" undo - " " to "/" self-insert - "0" to "9" self-insert - ":" to "~" self-insert - "C-?" backward-delete-char - - Emacs Meta bindings - - "M-C-G" abort - "M-C-H" backward-kill-word - "M-C-I" tab-insert - "M-C-J" vi-editing-mode - "M-C-M" vi-editing-mode - "M-C-R" revert-line - "M-C-Y" yank-nth-arg - "M-C-[" complete - "M-C-]" character-search-backward - "M-space" set-mark - "M-#" insert-comment - "M-&" tilde-expand - "M-*" insert-completions - "M--" digit-argument - "M-." yank-last-arg - "M-0" digit-argument - "M-1" digit-argument - - - -GNU 1999 Jun 1 14 - - - - - -READLINE(3) READLINE(3) - - - "M-2" digit-argument - "M-3" digit-argument - "M-4" digit-argument - "M-5" digit-argument - "M-6" digit-argument - "M-7" digit-argument - "M-8" digit-argument - "M-9" digit-argument - "M-<" beginning-of-history - "M-=" possible-completions - "M->" end-of-history - "M-?" possible-completions - "M-B" backward-word - "M-C" capitalize-word - "M-D" kill-word - "M-F" forward-word - "M-L" downcase-word - "M-N" non-incremental-forward-search-history - "M-P" non-incremental-reverse-search-history - "M-R" revert-line - "M-T" transpose-words - "M-U" upcase-word - "M-Y" yank-pop - "M-\" delete-horizontal-space - "M-~" tilde-expand - "M-C-?" backward-delete-word - "M-_" yank-last-arg - - Emacs Control-X bindings - - "C-XC-G" abort - "C-XC-R" re-read-init-file - "C-XC-U" undo - "C-XC-X" exchange-point-and-mark - "C-X(" start-kbd-macro - "C-X)" end-kbd-macro - "C-XE" call-last-kbd-macro - "C-XC-?" backward-kill-line - - - VVII MMooddee bbiinnddiinnggss - VI Insert Mode functions - - "C-D" vi-eof-maybe - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-M" accept-line - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - - - -GNU 1999 Jun 1 15 - - - - - -READLINE(3) READLINE(3) - - - "C-Y" yank - "C-[" vi-movement-mode - "C-_" undo - " " to "~" self-insert - "C-?" backward-delete-char - - VI Command Mode functions - - "C-D" vi-eof-maybe - "C-E" emacs-editing-mode - "C-G" abort - "C-H" backward-char - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - " " forward-char - "#" insert-comment - "$" end-of-line - "%" vi-match - "&" vi-tilde-expand - "*" vi-complete - "+" next-history - "," vi-char-search - "-" previous-history - "." vi-redo - "/" vi-search - "0" beginning-of-line - "1" to "9" vi-arg-digit - ";" vi-char-search - "=" vi-complete - "?" vi-search - "A" vi-append-eol - "B" vi-prev-word - "C" vi-change-to - "D" vi-delete-to - "E" vi-end-word - "F" vi-char-search - "G" vi-fetch-history - "I" vi-insert-beg - "N" vi-search-again - "P" vi-put - "R" vi-replace - "S" vi-subst - - - -GNU 1999 Jun 1 16 - - - - - -READLINE(3) READLINE(3) - - - "T" vi-char-search - "U" revert-line - "W" vi-next-word - "X" backward-delete-char - "Y" vi-yank-to - "\" vi-complete - "^" vi-first-print - "_" vi-yank-arg - "`" vi-goto-mark - "a" vi-append-mode - "b" vi-prev-word - "c" vi-change-to - "d" vi-delete-to - "e" vi-end-word - "f" vi-char-search - "h" backward-char - "i" vi-insertion-mode - "j" next-history - "k" prev-history - "l" forward-char - "m" vi-set-mark - "n" vi-search-again - "p" vi-put - "r" vi-change-char - "s" vi-subst - "t" vi-char-search - "u" undo - "w" vi-next-word - "x" vi-delete - "y" vi-yank-to - "|" vi-column - "~" vi-change-case - -SSEEEE AALLSSOO - _T_h_e _G_n_u _R_e_a_d_l_i_n_e _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _T_h_e _G_n_u _H_i_s_t_o_r_y _L_i_b_r_a_r_y, Brian Fox and Chet Ramey - _b_a_s_h(1) - -FFIILLEESS - _~_/_._i_n_p_u_t_r_c - Individual rreeaaddlliinnee initialization file - -AAUUTTHHOORRSS - Brian Fox, Free Software Foundation - bfox@gnu.org - - Chet Ramey, Case Western Reserve University - chet@ins.CWRU.Edu - -BBUUGG RREEPPOORRTTSS - If you find a bug in rreeaaddlliinnee,, you should report it. But - first, you should make sure that it really is a bug, and - that it appears in the latest version of the rreeaaddlliinnee - library that you have. - - - -GNU 1999 Jun 1 17 - - - - - -READLINE(3) READLINE(3) - - - Once you have determined that a bug actually exists, mail - a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_g_n_u_._o_r_g. If you have a fix, - you are welcome to mail that as well! Suggestions and - `philosophical' bug reports may be mailed to _b_u_g_-_r_e_a_d_- - _l_i_n_e@_g_n_u_._o_r_g or posted to the Usenet newsgroup - ggnnuu..bbaasshh..bbuugg. - - Comments and bug reports concerning this manual page - should be directed to _c_h_e_t_@_i_n_s_._C_W_R_U_._E_d_u. - -BBUUGGSS - It's too big and too slow. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GNU 1999 Jun 1 18 - - diff --git a/gnu/lib/libreadline/doc/readline.dvi b/gnu/lib/libreadline/doc/readline.dvi Binary files differdeleted file mode 100644 index 5d859d82c66..00000000000 --- a/gnu/lib/libreadline/doc/readline.dvi +++ /dev/null diff --git a/gnu/lib/libreadline/doc/readline.html b/gnu/lib/libreadline/doc/readline.html deleted file mode 100644 index d8a2edaf7d4..00000000000 --- a/gnu/lib/libreadline/doc/readline.html +++ /dev/null @@ -1,4327 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo on 1 March 2000 --> - -<TITLE>GNU Readline Library</TITLE> -</HEAD> -<BODY> -<H1>GNU Readline Library</H1> -<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="readline.html#SEC1">Command Line Editing</A> -<UL> -<LI><A NAME="TOC2" HREF="readline.html#SEC2">Introduction to Line Editing</A> -<LI><A NAME="TOC3" HREF="readline.html#SEC3">Readline Interaction</A> -<UL> -<LI><A NAME="TOC4" HREF="readline.html#SEC4">Readline Bare Essentials</A> -<LI><A NAME="TOC5" HREF="readline.html#SEC5">Readline Movement Commands</A> -<LI><A NAME="TOC6" HREF="readline.html#SEC6">Readline Killing Commands</A> -<LI><A NAME="TOC7" HREF="readline.html#SEC7">Readline Arguments</A> -<LI><A NAME="TOC8" HREF="readline.html#SEC8">Searching for Commands in the History</A> -</UL> -<LI><A NAME="TOC9" HREF="readline.html#SEC9">Readline Init File</A> -<UL> -<LI><A NAME="TOC10" HREF="readline.html#SEC10">Readline Init File Syntax</A> -<LI><A NAME="TOC11" HREF="readline.html#SEC11">Conditional Init Constructs</A> -<LI><A NAME="TOC12" HREF="readline.html#SEC12">Sample Init File</A> -</UL> -<LI><A NAME="TOC13" HREF="readline.html#SEC13">Bindable Readline Commands</A> -<UL> -<LI><A NAME="TOC14" HREF="readline.html#SEC14">Commands For Moving</A> -<LI><A NAME="TOC15" HREF="readline.html#SEC15">Commands For Manipulating The History</A> -<LI><A NAME="TOC16" HREF="readline.html#SEC16">Commands For Changing Text</A> -<LI><A NAME="TOC17" HREF="readline.html#SEC17">Killing And Yanking</A> -<LI><A NAME="TOC18" HREF="readline.html#SEC18">Specifying Numeric Arguments</A> -<LI><A NAME="TOC19" HREF="readline.html#SEC19">Letting Readline Type For You</A> -<LI><A NAME="TOC20" HREF="readline.html#SEC20">Keyboard Macros</A> -<LI><A NAME="TOC21" HREF="readline.html#SEC21">Some Miscellaneous Commands</A> -</UL> -<LI><A NAME="TOC22" HREF="readline.html#SEC22">Readline vi Mode</A> -</UL> -<LI><A NAME="TOC23" HREF="readline.html#SEC23">Programming with GNU Readline</A> -<UL> -<LI><A NAME="TOC24" HREF="readline.html#SEC24">Basic Behavior</A> -<LI><A NAME="TOC25" HREF="readline.html#SEC25">Custom Functions</A> -<UL> -<LI><A NAME="TOC26" HREF="readline.html#SEC26">The Function Type</A> -<LI><A NAME="TOC27" HREF="readline.html#SEC27">Writing a New Function</A> -</UL> -<LI><A NAME="TOC28" HREF="readline.html#SEC28">Readline Variables</A> -<LI><A NAME="TOC29" HREF="readline.html#SEC29">Readline Convenience Functions</A> -<UL> -<LI><A NAME="TOC30" HREF="readline.html#SEC30">Naming a Function</A> -<LI><A NAME="TOC31" HREF="readline.html#SEC31">Selecting a Keymap</A> -<LI><A NAME="TOC32" HREF="readline.html#SEC32">Binding Keys</A> -<LI><A NAME="TOC33" HREF="readline.html#SEC33">Associating Function Names and Bindings</A> -<LI><A NAME="TOC34" HREF="readline.html#SEC34">Allowing Undoing</A> -<LI><A NAME="TOC35" HREF="readline.html#SEC35">Redisplay</A> -<LI><A NAME="TOC36" HREF="readline.html#SEC36">Modifying Text</A> -<LI><A NAME="TOC37" HREF="readline.html#SEC37">Utility Functions</A> -<LI><A NAME="TOC38" HREF="readline.html#SEC38">Alternate Interface</A> -<LI><A NAME="TOC39" HREF="readline.html#SEC39">An Example</A> -</UL> -<LI><A NAME="TOC40" HREF="readline.html#SEC40">Readline Signal Handling</A> -<LI><A NAME="TOC41" HREF="readline.html#SEC41">Custom Completers</A> -<UL> -<LI><A NAME="TOC42" HREF="readline.html#SEC42">How Completing Works</A> -<LI><A NAME="TOC43" HREF="readline.html#SEC43">Completion Functions</A> -<LI><A NAME="TOC44" HREF="readline.html#SEC44">Completion Variables</A> -<LI><A NAME="TOC45" HREF="readline.html#SEC45">A Short Completion Example</A> -</UL> -</UL> -<LI><A NAME="TOC46" HREF="readline.html#SEC46">Concept Index</A> -<LI><A NAME="TOC47" HREF="readline.html#SEC47">Function and Variable Index</A> -</UL> -<P><HR><P> - -<P> -This document describes the GNU Readline Library, a utility which aids -in the consistency of user interface across discrete programs that need -to provide a command line interface. - -</P> -<P> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -</P> -<P> -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -</P> -<P> -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="readline.html#TOC1">Command Line Editing</A></H1> - -<P> -This chapter describes the basic features of the GNU -command line editing interface. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC2">Introduction and Notation</A>: Notation used in this text. -<LI><A HREF="readline.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line. -<LI><A HREF="readline.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view. -<LI><A HREF="readline.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands - available for binding -<LI><A HREF="readline.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline - behave like the vi editor. -</UL> - - - -<H2><A NAME="SEC2" HREF="readline.html#TOC2">Introduction to Line Editing</A></H2> - -<P> -The following paragraphs describe the notation used to represent -keystrokes. - -</P> -<P> -The text <KBD>C-k</KBD> is read as `Control-K' and describes the character -produced when the <KBD>k</KBD> key is pressed while the Control key -is depressed. - -</P> -<P> -The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD> -key is pressed. -The Meta key is labeled <KBD>ALT</KBD> on many keyboards. -On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of -the space bar), the <KBD>ALT</KBD> on the left side is generally set to -work as a Meta key. -The <KBD>ALT</KBD> key on the right may also be configured to work as a -Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - -</P> -<P> -If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as -a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> -<I>first</I>, and then typing <KBD>k</KBD>. -Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key. - -</P> -<P> -The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the -character produced by <EM>metafying</EM> <KBD>C-k</KBD>. - -</P> -<P> -In addition, several keys have their own names. Specifically, -<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all -stand for themselves when seen in this text, or in an init file -(see section <A HREF="readline.html#SEC9">Readline Init File</A>). -If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will -produce the desired character. -The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on -some keyboards. - -</P> - - -<H2><A NAME="SEC3" HREF="readline.html#TOC3">Readline Interaction</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<P> -Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <KBD>RETURN</KBD>. You do not have to be at the -end of the line to press <KBD>RETURN</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline. -<LI><A HREF="readline.html#SEC5">Readline Movement Commands</A>: Moving about the input line. -<LI><A HREF="readline.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back! -<LI><A HREF="readline.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands. -<LI><A HREF="readline.html#SEC8">Searching</A>: Searching through previous lines. -</UL> - - - -<H3><A NAME="SEC4" HREF="readline.html#TOC4">Readline Bare Essentials</A></H3> -<P> -<A NAME="IDX2"></A> -<A NAME="IDX3"></A> -<A NAME="IDX4"></A> - -</P> -<P> -In order to enter characters into the line, simply type them. The typed -character appears where the cursor was, and then the cursor moves one -space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - -</P> -<P> -Sometimes you may mistype a character, and -not notice the error until you have typed several other characters. In -that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then -correct your mistake. Afterwards, you can move the cursor to the right -with <KBD>C-f</KBD>. - -</P> -<P> -When you add text in the middle of a line, you will notice that characters -to the right of the cursor are `pushed over' to make room for the text -that you have inserted. Likewise, when you delete text behind the cursor, -characters to the right of the cursor are `pulled back' to fill in the -blank space created by the removal of the text. A list of the bare -essentials for editing the text of an input line follows. - -</P> -<DL COMPACT> - -<DT><KBD>C-b</KBD> -<DD> -Move back one character. -<DT><KBD>C-f</KBD> -<DD> -Move forward one character. -<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD> -<DD> -Delete the character to the left of the cursor. -<DT><KBD>C-d</KBD> -<DD> -Delete the character underneath the cursor. -<DT>Printing characters -<DD> -Insert the character into the line at the cursor. -<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD> -<DD> -Undo the last editing command. You can undo all the way back to an -empty line. -</DL> - -<P> -(Depending on your configuration, the <KBD>Backspace</KBD> key be set to -delete the character to the left of the cursor and the <KBD>DEL</KBD> key set -to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather -than the character to the left of the cursor.) - -</P> - - -<H3><A NAME="SEC5" HREF="readline.html#TOC5">Readline Movement Commands</A></H3> - -<P> -The above table describes the most basic keystrokes that you need -in order to do editing of the input line. For your convenience, many -other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>, -<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly -about the line. - -</P> -<DL COMPACT> - -<DT><KBD>C-a</KBD> -<DD> -Move to the start of the line. -<DT><KBD>C-e</KBD> -<DD> -Move to the end of the line. -<DT><KBD>M-f</KBD> -<DD> -Move forward a word, where a word is composed of letters and digits. -<DT><KBD>M-b</KBD> -<DD> -Move backward a word. -<DT><KBD>C-l</KBD> -<DD> -Clear the screen, reprinting the current line at the top. -</DL> - -<P> -Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - -</P> - - -<H3><A NAME="SEC6" HREF="readline.html#TOC6">Readline Killing Commands</A></H3> - -<P> -<A NAME="IDX5"></A> -<A NAME="IDX6"></A> - -</P> -<P> -<EM>Killing</EM> text means to delete the text from the line, but to save -it away for later use, usually by <EM>yanking</EM> (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) - -</P> -<P> -If the description for a command says that it `kills' text, then you can -be sure that you can get the text back in a different (or the same) -place later. - -</P> -<P> -When you use a kill command, the text is saved in a <EM>kill-ring</EM>. -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill -ring is not line specific; the text that you killed on a previously -typed line is available to be yanked back later, when you are typing -another line. -<A NAME="IDX7"></A> - -</P> -<P> -Here is the list of commands for killing text. - -</P> -<DL COMPACT> - -<DT><KBD>C-k</KBD> -<DD> -Kill the text from the current cursor position to the end of the line. - -<DT><KBD>M-d</KBD> -<DD> -Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by <KBD>M-f</KBD>. - -<DT><KBD>M-DEL</KBD> -<DD> -Kill from the cursor the start of the previous word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by <KBD>M-b</KBD>. - -<DT><KBD>C-w</KBD> -<DD> -Kill from the cursor to the previous whitespace. This is different than -<KBD>M-DEL</KBD> because the word boundaries differ. - -</DL> - -<P> -Here is how to <EM>yank</EM> the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -</P> -<DL COMPACT> - -<DT><KBD>C-y</KBD> -<DD> -Yank the most recently killed text back into the buffer at the cursor. - -<DT><KBD>M-y</KBD> -<DD> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>. -</DL> - - - -<H3><A NAME="SEC7" HREF="readline.html#TOC7">Readline Arguments</A></H3> - -<P> -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the <I>sign</I> of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type <SAMP>`M-- C-k'</SAMP>. - -</P> -<P> -The general way to pass numeric arguments to a command is to type meta -digits before the command. If the first `digit' typed is a minus -sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative. Once -you have typed one meta digit to get the argument started, you can type -the remainder of the digits, and then the command. For example, to give -the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>. - -</P> - - -<H3><A NAME="SEC8" HREF="readline.html#TOC8">Searching for Commands in the History</A></H3> - -<P> -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <VAR>incremental</VAR> and <VAR>non-incremental</VAR>. - -</P> -<P> -Incremental searches begin before the user has finished typing the -search string. -As each character of the search string is typed, Readline displays -the next entry from the history matching the string typed so far. -An incremental search requires only as many characters as needed to -find the desired history entry. -To search backward in the history for a particular string, type -<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. -The characters present in the value of the <CODE>isearch-terminators</CODE> variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the <KBD>ESC</KBD> and -<KBD>C-J</KBD> characters will terminate an incremental search. -<KBD>C-g</KBD> will abort an incremental search and restore the original line. -When the search is terminated, the history entry containing the -search string becomes the current line. - -</P> -<P> -To find other matching entries in the history list, type <KBD>C-r</KBD> or -<KBD>C-s</KBD> as appropriate. -This will search backward or forward in the history for the next -entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate -the search and execute that command. -For instance, a <KBD>RET</KBD> will terminate the search and accept -the line, thereby executing the command from the history list. - -</P> -<P> -Non-incremental searches read the entire search string before starting -to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - -</P> - - -<H2><A NAME="SEC9" HREF="readline.html#TOC9">Readline Init File</A></H2> -<P> -<A NAME="IDX8"></A> - -</P> -<P> -Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. -Any user can customize programs that use Readline by putting -commands in an <EM>inputrc</EM> file, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If -that variable is unset, the default is <TT>`~/.inputrc'</TT>. - -</P> -<P> -When a program which uses the Readline library starts up, the -init file is read, and the key bindings are set. - -</P> -<P> -In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus -incorporating any changes that you might have made to it. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file. - -<LI><A HREF="readline.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file. - -<LI><A HREF="readline.html#SEC12">Sample Init File</A>: An example inputrc file. -</UL> - - - -<H3><A NAME="SEC10" HREF="readline.html#TOC10">Readline Init File Syntax</A></H3> - -<P> -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a <SAMP>`#'</SAMP> are comments. -Lines beginning with a <SAMP>`$'</SAMP> indicate conditional -constructs (see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. - -</P> -<DL COMPACT> - -<DT>Variable Settings -<DD> -You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the <CODE>set</CODE> command within the init file. Here is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: - - -<PRE> -set editing-mode vi -</PRE> - -A great deal of run-time behavior is changeable with the following -variables. - -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD> -<A NAME="IDX9"></A> -Controls what happens when Readline wants to ring the terminal bell. -If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to -<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available. -If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring -the terminal's bell. - -<DT><CODE>comment-begin</CODE> -<DD> -<A NAME="IDX10"></A> -The string to insert at the beginning of the line when the -<CODE>insert-comment</CODE> command is executed. The default value -is <CODE>"#"</CODE>. - -<DT><CODE>completion-ignore-case</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is <SAMP>`off'</SAMP>. - -<DT><CODE>completion-query-items</CODE> -<DD> -<A NAME="IDX11"></A> -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. The default limit is -<CODE>100</CODE>. - -<DT><CODE>convert-meta</CODE> -<DD> -<A NAME="IDX12"></A> -If set to <SAMP>`on'</SAMP>, Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an <KBD>ESC</KBD> character, converting them to a -meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. - -<DT><CODE>disable-completion</CODE> -<DD> -<A NAME="IDX13"></A> -If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>editing-mode</CODE> -<DD> -<A NAME="IDX14"></A> -The <CODE>editing-mode</CODE> variable controls which default set of -key bindings is used. By default, Readline starts up in Emacs editing -mode, where the keystrokes are most similar to Emacs. This variable can be -set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>. - -<DT><CODE>enable-keypad</CODE> -<DD> -<A NAME="IDX15"></A> -When set to <SAMP>`on'</SAMP>, Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>expand-tilde</CODE> -<DD> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD> -<A NAME="IDX17"></A> -This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it -to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to <SAMP>`off'</SAMP>. - -<DT><CODE>input-meta</CODE> -<DD> -<A NAME="IDX18"></A> -<A NAME="IDX19"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not strip the eighth bit from the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. - -<DT><CODE>isearch-terminators</CODE> -<DD> -<A NAME="IDX20"></A> -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see section <A HREF="readline.html#SEC8">Searching for Commands in the History</A>). -If this variable has not been given a value, the characters <KBD>ESC</KBD> and -<KBD>C-J</KBD> will terminate an incremental search. - -<DT><CODE>keymap</CODE> -<DD> -<A NAME="IDX21"></A> -Sets Readline's idea of the current keymap for key binding commands. -Acceptable <CODE>keymap</CODE> names are -<CODE>emacs</CODE>, -<CODE>emacs-standard</CODE>, -<CODE>emacs-meta</CODE>, -<CODE>emacs-ctlx</CODE>, -<CODE>vi</CODE>, -<CODE>vi-command</CODE>, and -<CODE>vi-insert</CODE>. -<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is -equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>. -The value of the <CODE>editing-mode</CODE> variable also affects the -default keymap. - -<DT><CODE>mark-directories</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, completed directory names have a slash -appended. The default is <SAMP>`on'</SAMP>. - -<DT><CODE>mark-modified-lines</CODE> -<DD> -<A NAME="IDX22"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an -asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified. -This variable is <SAMP>`off'</SAMP> by default. - -<DT><CODE>output-meta</CODE> -<DD> -<A NAME="IDX23"></A> -If set to <SAMP>`on'</SAMP>, Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>print-completions-horizontally</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is <SAMP>`off'</SAMP>. - -<DT><CODE>show-all-if-ambiguous</CODE> -<DD> -<A NAME="IDX24"></A> -This alters the default behavior of the completion functions. If -set to <SAMP>`on'</SAMP>, -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is <SAMP>`off'</SAMP>. - -<DT><CODE>visible-stats</CODE> -<DD> -<A NAME="IDX25"></A> -If set to <SAMP>`on'</SAMP>, a character denoting a file's type -is appended to the filename when listing possible -completions. The default is <SAMP>`off'</SAMP>. - -</DL> - -<DT>Key Bindings -<DD> -The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. - -Once you know the name of the command, simply place the name of the key -you wish to bind the command to, a colon, and then the name of the -command on a line in the init file. The name of the key -can be expressed in different ways, depending on which is most -comfortable for you. - -<DL COMPACT> - -<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD> -<VAR>keyname</VAR> is the name of a key spelled out in English. For example: - -<PRE> -Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro -expressed on the right hand side (that is, to insert the text -<SAMP>`> output'</SAMP> into the line). - -<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD> -<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - - -<PRE> -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE> (just as it was in the first example), -<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>, -and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert -the text <SAMP>`Function Key 1'</SAMP>. - -</DL> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -<DL COMPACT> - -<DT><CODE><KBD>\C-</KBD></CODE> -<DD> -control prefix -<DT><CODE><KBD>\M-</KBD></CODE> -<DD> -meta prefix -<DT><CODE><KBD>\e</KBD></CODE> -<DD> -an escape character -<DT><CODE><KBD>\\</KBD></CODE> -<DD> -backslash -<DT><CODE><KBD>\"</KBD></CODE> -<DD> -<KBD>"</KBD>, a double quotation mark -<DT><CODE><KBD>\'</KBD></CODE> -<DD> -<KBD>'</KBD>, a single quote or apostrophe -</DL> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -<DL COMPACT> - -<DT><CODE>\a</CODE> -<DD> -alert (bell) -<DT><CODE>\b</CODE> -<DD> -backspace -<DT><CODE>\d</CODE> -<DD> -delete -<DT><CODE>\f</CODE> -<DD> -form feed -<DT><CODE>\n</CODE> -<DD> -newline -<DT><CODE>\r</CODE> -<DD> -carriage return -<DT><CODE>\t</CODE> -<DD> -horizontal tab -<DT><CODE>\v</CODE> -<DD> -vertical tab -<DT><CODE>\<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR> -(one to three digits) -</DL> - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>. -For example, the following binding will make <SAMP>`C-x \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: - -<PRE> -"\C-x\\": "\\" -</PRE> - -</DL> - - - -<H3><A NAME="SEC11" HREF="readline.html#TOC11">Conditional Init Constructs</A></H3> - -<P> -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are four parser directives used. - -</P> -<DL COMPACT> - -<DT><CODE>$if</CODE> -<DD> -The <CODE>$if</CODE> construct allows bindings to be made based on the -editing mode, the terminal being used, or the application using -Readline. The text of the test extends to the end of the line; -no characters are required to isolate it. - -<DL COMPACT> - -<DT><CODE>mode</CODE> -<DD> -The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test -whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode. -This may be used in conjunction -with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in -the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if -Readline is starting out in <CODE>emacs</CODE> mode. - -<DT><CODE>term</CODE> -<DD> -The <CODE>term=</CODE> form may be used to include terminal-specific -key bindings, perhaps to bind the key sequences output by the -terminal's function keys. The word on the right side of the -<SAMP>`='</SAMP> is tested against both the full name of the terminal and -the portion of the terminal name before the first <SAMP>`-'</SAMP>. This -allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>, -for instance. - -<DT><CODE>application</CODE> -<DD> -The <VAR>application</VAR> construct is used to include -application-specific settings. Each program using the Readline -library sets the <VAR>application name</VAR>, and you can test for it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -<PRE> -$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</PRE> - -</DL> - -<DT><CODE>$endif</CODE> -<DD> -This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. - -<DT><CODE>$else</CODE> -<DD> -Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. - -<DT><CODE>$include</CODE> -<DD> -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -<PRE> -$include /etc/inputrc -</PRE> - -</DL> - - - -<H3><A NAME="SEC12" HREF="readline.html#TOC12">Sample Init File</A></H3> - -<P> -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -</P> - -<PRE> -# This file controls the behaviour of line input editing for -# programs that use the Gnu Readline library. Existing programs -# include FTP, Bash, and Gdb. -# -# You can re-read the inputrc file with C-x C-r. -# Lines beginning with '#' are comments. -# -# First, include any systemwide bindings and variable assignments from -# /etc/Inputrc -$include /etc/Inputrc - -# -# Set various bindings for emacs mode. - -set editing-mode emacs - -$if mode=emacs - -Meta-Control-h: backward-kill-word Text after the function name is ignored - -# -# Arrow keys in keypad mode -# -#"\M-OD": backward-char -#"\M-OC": forward-char -#"\M-OA": previous-history -#"\M-OB": next-history -# -# Arrow keys in ANSI mode -# -"\M-[D": backward-char -"\M-[C": forward-char -"\M-[A": previous-history -"\M-[B": next-history -# -# Arrow keys in 8 bit keypad mode -# -#"\M-\C-OD": backward-char -#"\M-\C-OC": forward-char -#"\M-\C-OA": previous-history -#"\M-\C-OB": next-history -# -# Arrow keys in 8 bit ANSI mode -# -#"\M-\C-[D": backward-char -#"\M-\C-[C": forward-char -#"\M-\C-[A": previous-history -#"\M-\C-[B": next-history - -C-q: quoted-insert - -$endif - -# An old-style binding. This happens to be the default. -TAB: complete - -# Macros that are convenient for shell interaction -$if Bash -# edit the path -"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" -# prepare to type a quoted word -- insert open and close double quotes -# and move to just after the open quote -"\C-x\"": "\"\"\C-b" -# insert a backslash (testing backslash escapes in sequences and macros) -"\C-x\\": "\\" -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -# Add a binding to refresh the line, which is unbound -"\C-xr": redraw-current-line -# Edit variable on current line. -"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" -$endif - -# use a visible bell if one is available -set bell-style visible - -# don't strip characters to 7 bits when reading -set input-meta on - -# allow iso-latin1 characters to be inserted rather than converted to -# prefix-meta sequences -set convert-meta off - -# display characters with the eighth bit set directly rather than -# as meta-prefixed characters -set output-meta on - -# if there are more than 150 possible completions for a word, ask the -# user if he wants to see all of them -set completion-query-items 150 - -# For FTP -$if Ftp -"\C-xg": "get \M-?" -"\C-xt": "put \M-?" -"\M-.": yank-last-arg -$endif -</PRE> - - - -<H2><A NAME="SEC13" HREF="readline.html#TOC13">Bindable Readline Commands</A></H2> - - -<UL> -<LI><A HREF="readline.html#SEC14">Commands For Moving</A>: Moving about the line. -<LI><A HREF="readline.html#SEC15">Commands For History</A>: Getting at previous lines. -<LI><A HREF="readline.html#SEC16">Commands For Text</A>: Commands for changing text. -<LI><A HREF="readline.html#SEC17">Commands For Killing</A>: Commands for killing and yanking. -<LI><A HREF="readline.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts. -<LI><A HREF="readline.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you. -<LI><A HREF="readline.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters -<LI><A HREF="readline.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands. -</UL> - -<P> -This section describes Readline commands that may be bound to key -sequences. - -</P> -<P> -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, <VAR>point</VAR> refers to the current cursor -position, and <VAR>mark</VAR> refers to a cursor position saved by the -<CODE>set-mark</CODE> command. -The text between the point and mark is referred to as the <VAR>region</VAR>. - -</P> - - -<H3><A NAME="SEC14" HREF="readline.html#TOC14">Commands For Moving</A></H3> -<DL COMPACT> - -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD> -<A NAME="IDX26"></A> -Move to the start of the current line. - -<DT><CODE>end-of-line (C-e)</CODE> -<DD> -<A NAME="IDX27"></A> -Move to the end of the line. - -<DT><CODE>forward-char (C-f)</CODE> -<DD> -<A NAME="IDX28"></A> -Move forward a character. - -<DT><CODE>backward-char (C-b)</CODE> -<DD> -<A NAME="IDX29"></A> -Move back a character. - -<DT><CODE>forward-word (M-f)</CODE> -<DD> -<A NAME="IDX30"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. - -<DT><CODE>backward-word (M-b)</CODE> -<DD> -<A NAME="IDX31"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -<DT><CODE>clear-screen (C-l)</CODE> -<DD> -<A NAME="IDX32"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -<DT><CODE>redraw-current-line ()</CODE> -<DD> -<A NAME="IDX33"></A> -Refresh the current line. By default, this is unbound. - -</DL> - - - -<H3><A NAME="SEC15" HREF="readline.html#TOC15">Commands For Manipulating The History</A></H3> - -<DL COMPACT> - -<DT><CODE>accept-line (Newline, Return)</CODE> -<DD> -<A NAME="IDX34"></A> -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -<DT><CODE>previous-history (C-p)</CODE> -<DD> -<A NAME="IDX35"></A> -Move `up' through the history list. - -<DT><CODE>next-history (C-n)</CODE> -<DD> -<A NAME="IDX36"></A> -Move `down' through the history list. - -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD> -<A NAME="IDX37"></A> -Move to the first line in the history. - -<DT><CODE>end-of-history (M->)</CODE> -<DD> -<A NAME="IDX38"></A> -Move to the end of the input history, i.e., the line currently -being entered. - -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD> -<A NAME="IDX39"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -<DT><CODE>forward-search-history (C-s)</CODE> -<DD> -<A NAME="IDX40"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD> -<A NAME="IDX41"></A> -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD> -<A NAME="IDX42"></A> -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -<DT><CODE>history-search-forward ()</CODE> -<DD> -<A NAME="IDX43"></A> -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. - -<DT><CODE>history-search-backward ()</CODE> -<DD> -<A NAME="IDX44"></A> -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD> -<A NAME="IDX45"></A> -Insert the first argument to the previous command (usually -the second word on the previous line). With an argument <VAR>n</VAR>, -insert the <VAR>n</VAR>th word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the <VAR>n</VAR>th word from the end of the previous command. - -<DT><CODE>yank-last-arg (M-., M-_)</CODE> -<DD> -<A NAME="IDX46"></A> -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like <CODE>yank-nth-arg</CODE>. -Successive calls to <CODE>yank-last-arg</CODE> move back through the history -list, inserting the last argument of each line in turn. - -</DL> - - - -<H3><A NAME="SEC16" HREF="readline.html#TOC16">Commands For Changing Text</A></H3> - -<DL COMPACT> - -<DT><CODE>delete-char (C-d)</CODE> -<DD> -<A NAME="IDX47"></A> -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return <CODE>EOF</CODE>. - -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD> -<A NAME="IDX48"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD> -<A NAME="IDX49"></A> -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. - -<DT><CODE>quoted-insert (C-q, C-v)</CODE> -<DD> -<A NAME="IDX50"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. - -<DT><CODE>tab-insert (M-TAB)</CODE> -<DD> -<A NAME="IDX51"></A> -Insert a tab character. - -<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE> -<DD> -<A NAME="IDX52"></A> -Insert yourself. - -<DT><CODE>transpose-chars (C-t)</CODE> -<DD> -<A NAME="IDX53"></A> -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. - -<DT><CODE>transpose-words (M-t)</CODE> -<DD> -<A NAME="IDX54"></A> -Drag the word before point past the word after point, -moving point past that word as well. - -<DT><CODE>upcase-word (M-u)</CODE> -<DD> -<A NAME="IDX55"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -<DT><CODE>downcase-word (M-l)</CODE> -<DD> -<A NAME="IDX56"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -<DT><CODE>capitalize-word (M-c)</CODE> -<DD> -<A NAME="IDX57"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -</DL> - - - -<H3><A NAME="SEC17" HREF="readline.html#TOC17">Killing And Yanking</A></H3> - -<DL COMPACT> - -<DT><CODE>kill-line (C-k)</CODE> -<DD> -<A NAME="IDX58"></A> -Kill the text from point to the end of the line. - -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD> -<A NAME="IDX59"></A> -Kill backward to the beginning of the line. - -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD> -<A NAME="IDX60"></A> -Kill backward from the cursor to the beginning of the current line. - -<DT><CODE>kill-whole-line ()</CODE> -<DD> -<A NAME="IDX61"></A> -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -<DT><CODE>kill-word (M-d)</CODE> -<DD> -<A NAME="IDX62"></A> -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as <CODE>forward-word</CODE>. - -<DT><CODE>backward-kill-word (M-DEL)</CODE> -<DD> -<A NAME="IDX63"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. - -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD> -<A NAME="IDX64"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -<DT><CODE>delete-horizontal-space ()</CODE> -<DD> -<A NAME="IDX65"></A> -Delete all spaces and tabs around point. By default, this is unbound. - -<DT><CODE>kill-region ()</CODE> -<DD> -<A NAME="IDX66"></A> -Kill the text in the current region. -By default, this command is unbound. - -<DT><CODE>copy-region-as-kill ()</CODE> -<DD> -<A NAME="IDX67"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -<DT><CODE>copy-backward-word ()</CODE> -<DD> -<A NAME="IDX68"></A> -Copy the word before point to the kill buffer. -The word boundaries are the same as <CODE>backward-word</CODE>. -By default, this command is unbound. - -<DT><CODE>copy-forward-word ()</CODE> -<DD> -<A NAME="IDX69"></A> -Copy the word following point to the kill buffer. -The word boundaries are the same as <CODE>forward-word</CODE>. -By default, this command is unbound. - -<DT><CODE>yank (C-y)</CODE> -<DD> -<A NAME="IDX70"></A> -Yank the top of the kill ring into the buffer at the current -cursor position. - -<DT><CODE>yank-pop (M-y)</CODE> -<DD> -<A NAME="IDX71"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -</DL> - - - -<H3><A NAME="SEC18" HREF="readline.html#TOC18">Specifying Numeric Arguments</A></H3> -<DL COMPACT> - -<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE> -<DD> -<A NAME="IDX72"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. - -<DT><CODE>universal-argument ()</CODE> -<DD> -<A NAME="IDX73"></A> -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing <CODE>universal-argument</CODE> -again ends the numeric argument, but is otherwise ignored. -As a special case, if this command is immediately followed by a -character that is neither a digit or minus sign, the argument count -for the next command is multiplied by four. -The argument count is initially one, so executing this function the -first time makes the argument count four, a second time makes the -argument count sixteen, and so on. -By default, this is not bound to a key. -</DL> - - - -<H3><A NAME="SEC19" HREF="readline.html#TOC19">Letting Readline Type For You</A></H3> - -<DL COMPACT> - -<DT><CODE>complete (TAB)</CODE> -<DD> -<A NAME="IDX74"></A> -Attempt to do completion on the text before the cursor. This is -application-specific. Generally, if you are typing a filename -argument, you can do filename completion; if you are typing a command, -you can do command completion; if you are typing in a symbol to GDB, you -can do symbol name completion; if you are typing in a variable to Bash, -you can do variable name completion, and so on. - -<DT><CODE>possible-completions (M-?)</CODE> -<DD> -<A NAME="IDX75"></A> -List the possible completions of the text before the cursor. - -<DT><CODE>insert-completions (M-*)</CODE> -<DD> -<A NAME="IDX76"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. - -<DT><CODE>menu-complete ()</CODE> -<DD> -<A NAME="IDX77"></A> -Similar to <CODE>complete</CODE>, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of <CODE>menu-complete</CODE> steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung and the -original text is restored. -An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list -of matches; a negative argument may be used to move backward -through the list. -This command is intended to be bound to <CODE>TAB</CODE>, but is unbound -by default. - -<DT><CODE>delete-char-or-list ()</CODE> -<DD> -<A NAME="IDX78"></A> -Deletes the character under the cursor if not at the beginning or -end of the line (like <CODE>delete-char</CODE>). -If at the end of the line, behaves identically to -<CODE>possible-completions</CODE>. -This command is unbound by default. - -</DL> - - - -<H3><A NAME="SEC20" HREF="readline.html#TOC20">Keyboard Macros</A></H3> -<DL COMPACT> - -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD> -<A NAME="IDX79"></A> -Begin saving the characters typed into the current keyboard macro. - -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD> -<A NAME="IDX80"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. - -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD> -<A NAME="IDX81"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -</DL> - - - -<H3><A NAME="SEC21" HREF="readline.html#TOC21">Some Miscellaneous Commands</A></H3> -<DL COMPACT> - -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD> -<A NAME="IDX82"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. - -<DT><CODE>abort (C-g)</CODE> -<DD> -<A NAME="IDX83"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). - -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE> -<DD> -<A NAME="IDX84"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. - -<DT><CODE>prefix-meta (ESC)</CODE> -<DD> -<A NAME="IDX85"></A> -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing <SAMP>`ESC f'</SAMP> is equivalent to typing -<SAMP>`M-f'</SAMP>. - -<DT><CODE>undo (C-_, C-x C-u)</CODE> -<DD> -<A NAME="IDX86"></A> -Incremental undo, separately remembered for each line. - -<DT><CODE>revert-line (M-r)</CODE> -<DD> -<A NAME="IDX87"></A> -Undo all changes made to this line. This is like executing the <CODE>undo</CODE> -command enough times to get back to the beginning. - -<DT><CODE>tilde-expand (M-~)</CODE> -<DD> -<A NAME="IDX88"></A> -Perform tilde expansion on the current word. - -<DT><CODE>set-mark (C-@)</CODE> -<DD> -<A NAME="IDX89"></A> -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD> -<A NAME="IDX90"></A> -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -<DT><CODE>character-search (C-])</CODE> -<DD> -<A NAME="IDX91"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD> -<A NAME="IDX92"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -<DT><CODE>insert-comment (M-#)</CODE> -<DD> -<A NAME="IDX93"></A> -The value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -<DT><CODE>dump-functions ()</CODE> -<DD> -<A NAME="IDX94"></A> -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -<DT><CODE>dump-variables ()</CODE> -<DD> -<A NAME="IDX95"></A> -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -<DT><CODE>dump-macros ()</CODE> -<DD> -<A NAME="IDX96"></A> -Print all of the Readline key sequences bound to macros and the -strings they ouput. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -</DL> - - - -<H2><A NAME="SEC22" HREF="readline.html#TOC22">Readline vi Mode</A></H2> - -<P> -While the Readline library does not have a full set of <CODE>vi</CODE> -editing functions, it does contain enough to allow simple editing -of the line. The Readline <CODE>vi</CODE> mode behaves as specified in -the POSIX 1003.2 standard. - -</P> -<P> -In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> -editing modes, use the command M-C-j (toggle-editing-mode). -The Readline default is <CODE>emacs</CODE> mode. - -</P> -<P> -When you enter a line in <CODE>vi</CODE> mode, you are already placed in -`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD> -switches you into `command' mode, where you can edit the text of the -line with the standard <CODE>vi</CODE> movement keys, move to previous -history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and -so forth. - -</P> - - - -<H1><A NAME="SEC23" HREF="readline.html#TOC23">Programming with GNU Readline</A></H1> - -<P> -This chapter describes the interface between the GNU Readline Library and -other programs. If you are a programmer, and you wish to include the -features found in GNU Readline -such as completion, line editing, and interactive history manipulation -in your own programs, this section is for you. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC24">Basic Behavior</A>: Using the default behavior of Readline. -<LI><A HREF="readline.html#SEC25">Custom Functions</A>: Adding your own functions to Readline. -<LI><A HREF="readline.html#SEC28">Readline Variables</A>: Variables accessible to custom - functions. -<LI><A HREF="readline.html#SEC29">Readline Convenience Functions</A>: Functions which Readline supplies to - aid in writing your own custom - functions. -<LI><A HREF="readline.html#SEC40">Readline Signal Handling</A>: How Readline behaves when it receives signals. -<LI><A HREF="readline.html#SEC41">Custom Completers</A>: Supplanting or supplementing Readline's - completion functions. -</UL> - - - -<H2><A NAME="SEC24" HREF="readline.html#TOC24">Basic Behavior</A></H2> - -<P> -Many programs provide a command line interface, such as <CODE>mail</CODE>, -<CODE>ftp</CODE>, and <CODE>sh</CODE>. For such programs, the default behaviour of -Readline is sufficient. This section describes how to use Readline in -the simplest way possible, perhaps to replace calls in your code to -<CODE>gets()</CODE> or <CODE>fgets ()</CODE>. - -</P> -<P> -<A NAME="IDX97"></A> -<A NAME="IDX98"></A> -The function <CODE>readline ()</CODE> prints a prompt and then reads and returns -a single line of text from the user. The line <CODE>readline</CODE> -returns is allocated with <CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> -the line when you are done with it. The declaration for <CODE>readline</CODE> -in ANSI C is - -</P> - -<PRE> -<CODE>char *readline (char *<VAR>prompt</VAR>);</CODE> -</PRE> - -<P> -So, one might say - -<PRE> -<CODE>char *line = readline ("Enter a line: ");</CODE> -</PRE> - -<P> -in order to read a line of text from the user. -The line returned has the final newline removed, so only the -text remains. - -</P> -<P> -If <CODE>readline</CODE> encounters an <CODE>EOF</CODE> while reading the line, and the -line is empty at that point, then <CODE>(char *)NULL</CODE> is returned. -Otherwise, the line is ended just as if a newline had been typed. - -</P> -<P> -If you want the user to be able to get at the line later, (with -<KBD>C-p</KBD> for example), you must call <CODE>add_history ()</CODE> to save the -line away in a <EM>history</EM> list of such lines. - -</P> - -<PRE> -<CODE>add_history (line)</CODE>; -</PRE> - -<P> -For full details on the GNU History Library, see the associated manual. - -</P> -<P> -It is preferable to avoid saving empty lines on the history list, since -users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard <CODE>gets ()</CODE> library -function, and has the advantage of no static buffer to overflow: - -</P> - -<PRE> -/* A static variable for holding the line. */ -static char *line_read = (char *)NULL; - -/* Read a string, and return a pointer to it. Returns NULL on EOF. */ -char * -rl_gets () -{ - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - free (line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); -} -</PRE> - -<P> -This function gives the user the default behaviour of <KBD>TAB</KBD> -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the <KBD>TAB</KBD> key -with <CODE>rl_bind_key ()</CODE>. - -</P> - -<PRE> -<CODE>int rl_bind_key (int <VAR>key</VAR>, int (*<VAR>function</VAR>)());</CODE> -</PRE> - -<P> -<CODE>rl_bind_key ()</CODE> takes two arguments: <VAR>key</VAR> is the character that -you want to bind, and <VAR>function</VAR> is the address of the function to -call when <VAR>key</VAR> is pressed. Binding <KBD>TAB</KBD> to <CODE>rl_insert ()</CODE> -makes <KBD>TAB</KBD> insert itself. -<CODE>rl_bind_key ()</CODE> returns non-zero if <VAR>key</VAR> is not a valid -ASCII character code (between 0 and 255). - -</P> -<P> -Thus, to disable the default <KBD>TAB</KBD> behavior, the following suffices: - -<PRE> -<CODE>rl_bind_key ('\t', rl_insert);</CODE> -</PRE> - -<P> -This code should be executed once at the start of your program; you -might write a function called <CODE>initialize_readline ()</CODE> which -performs this and other desired initializations, such as installing -custom completers (see section <A HREF="readline.html#SEC41">Custom Completers</A>). - -</P> - - -<H2><A NAME="SEC25" HREF="readline.html#TOC25">Custom Functions</A></H2> - -<P> -Readline provides many functions for manipulating the text of -the line, but it isn't possible to anticipate the needs of all -programs. This section describes the various functions and variables -defined within the Readline library which allow a user program to add -customized functionality to Readline. - -</P> -<P> -Before declaring any functions that customize Readline's behavior, or -using any functionality Readline provides in other code, an -application writer should include the file <CODE><readline/readline.h></CODE> -in any file that uses Readline's features. Since some of the definitions -in <CODE>readline.h</CODE> use the <CODE>stdio</CODE> library, the file -<CODE><stdio.h></CODE> should be included before <CODE>readline.h</CODE>. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC26">The Function Type</A>: C declarations to make code readable. -<LI><A HREF="readline.html#SEC27">Function Writing</A>: Variables and calling conventions. -</UL> - - - -<H3><A NAME="SEC26" HREF="readline.html#TOC26">The Function Type</A></H3> - -<P> -For readabilty, we declare a new type of object, called -<EM>Function</EM>. A <CODE>Function</CODE> is a C function which -returns an <CODE>int</CODE>. The type declaration for <CODE>Function</CODE> is: - -</P> -<P> -<CODE>typedef int Function ();</CODE> - -</P> -<P> -The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called <VAR>func</VAR> which was a pointer to a function. Instead of the -classic C declaration - -</P> -<P> -<CODE>int (*)()func;</CODE> - -</P> -<P> -we may write - -</P> -<P> -<CODE>Function *func;</CODE> - -</P> -<P> -Similarly, there are - -</P> - -<PRE> -typedef void VFunction (); -typedef char *CPFunction (); and -typedef char **CPPFunction (); -</PRE> - -<P> -for functions returning no value, <CODE>pointer to char</CODE>, and -<CODE>pointer to pointer to char</CODE>, respectively. - -</P> - - -<H3><A NAME="SEC27" HREF="readline.html#TOC27">Writing a New Function</A></H3> - -<P> -In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - -</P> -<P> -The calling sequence for a command <CODE>foo</CODE> looks like - -</P> - -<PRE> -<CODE>foo (int count, int key)</CODE> -</PRE> - -<P> -where <VAR>count</VAR> is the numeric argument (or 1 if defaulted) and -<VAR>key</VAR> is the key that invoked this function. - -</P> -<P> -It is completely up to the function as to what should be done with the -numeric argument. Some functions use it as a repeat count, some -as a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a -function uses the numeric argument as a repeat count, it should be able -to do something useful with both negative and positive arguments. -At the very least, it should be aware that it can be passed a -negative argument. - -</P> - - -<H2><A NAME="SEC28" HREF="readline.html#TOC28">Readline Variables</A></H2> - -<P> -These variables are available to function writers. - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_line_buffer</B> -<DD><A NAME="IDX99"></A> -This is the line gathered so far. You are welcome to modify the -contents of the line, but see section <A HREF="readline.html#SEC34">Allowing Undoing</A>. The -function <CODE>rl_extend_line_buffer</CODE> is available to increase -the memory allocated to <CODE>rl_line_buffer</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_point</B> -<DD><A NAME="IDX100"></A> -The offset of the current cursor position in <CODE>rl_line_buffer</CODE> -(the <EM>point</EM>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_end</B> -<DD><A NAME="IDX101"></A> -The number of characters present in <CODE>rl_line_buffer</CODE>. When -<CODE>rl_point</CODE> is at the end of the line, <CODE>rl_point</CODE> and -<CODE>rl_end</CODE> are equal. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_mark</B> -<DD><A NAME="IDX102"></A> -The mark (saved position) in the current line. If set, the mark -and point define a <EM>region</EM>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_done</B> -<DD><A NAME="IDX103"></A> -Setting this to a non-zero value causes Readline to return the current -line immediately. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_pending_input</B> -<DD><A NAME="IDX104"></A> -Setting this to a value makes it the next keystroke read. This is a -way to stuff a single character into the input stream. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_erase_empty_line</B> -<DD><A NAME="IDX105"></A> -Setting this to a non-zero value causes Readline to completely erase -the current line, including any prompt, any time a newline is typed as -the only character on an otherwise-empty line. The cursor is moved to -the beginning of the newly-blank line. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_prompt</B> -<DD><A NAME="IDX106"></A> -The prompt Readline uses. This is set from the argument to -<CODE>readline ()</CODE>, and should not be assigned to directly. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_already_prompted</B> -<DD><A NAME="IDX107"></A> -If an application wishes to display the prompt itself, rather than have -Readline do it the first time <CODE>readline()</CODE> is called, it should set -this variable to a non-zero value after displaying the prompt. -The prompt must also be passed as the argument to <CODE>readline()</CODE> so -the redisplay functions can update the display properly. -The calling application is responsible for managing the value; Readline -never sets it. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_library_version</B> -<DD><A NAME="IDX108"></A> -The version number of this revision of the library. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_terminal_name</B> -<DD><A NAME="IDX109"></A> -The terminal type, used for initialization. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_readline_name</B> -<DD><A NAME="IDX110"></A> -This variable is set to a unique name by each application using Readline. -The value allows conditional parsing of the inputrc file -(see section <A HREF="readline.html#SEC11">Conditional Init Constructs</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_instream</B> -<DD><A NAME="IDX111"></A> -The stdio stream from which Readline reads input. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_outstream</B> -<DD><A NAME="IDX112"></A> -The stdio stream to which Readline performs output. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_startup_hook</B> -<DD><A NAME="IDX113"></A> -If non-zero, this is the address of a function to call just -before <CODE>readline</CODE> prints the first prompt. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_pre_input_hook</B> -<DD><A NAME="IDX114"></A> -If non-zero, this is the address of a function to call after -the first prompt has been printed and just before <CODE>readline</CODE> -starts reading input characters. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_event_hook</B> -<DD><A NAME="IDX115"></A> -If non-zero, this is the address of a function to call periodically -when readline is waiting for terminal input. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_getc_function</B> -<DD><A NAME="IDX116"></A> -If non-zero, <CODE>readline</CODE> will call indirectly through this pointer -to get a character from the input stream. By default, it is set to -<CODE>rl_getc</CODE>, the default <CODE>readline</CODE> character input function -(see section <A HREF="readline.html#SEC37">Utility Functions</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> VFunction * <B>rl_redisplay_function</B> -<DD><A NAME="IDX117"></A> -If non-zero, <CODE>readline</CODE> will call indirectly through this pointer -to update the display with the current contents of the editing buffer. -By default, it is set to <CODE>rl_redisplay</CODE>, the default <CODE>readline</CODE> -redisplay function (see section <A HREF="readline.html#SEC35">Redisplay</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> -<DD><A NAME="IDX118"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the -currently executing readline function was found. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B> -<DD><A NAME="IDX119"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC31">Selecting a Keymap</A>) in which the -last key binding occurred. -</DL> - -</P> - - -<H2><A NAME="SEC29" HREF="readline.html#TOC29">Readline Convenience Functions</A></H2> - - -<UL> -<LI><A HREF="readline.html#SEC30">Function Naming</A>: How to give a function you write a name. -<LI><A HREF="readline.html#SEC31">Keymaps</A>: Making keymaps. -<LI><A HREF="readline.html#SEC32">Binding Keys</A>: Changing Keymaps. -<LI><A HREF="readline.html#SEC33">Associating Function Names and Bindings</A>: Translate function names to - key sequences. -<LI><A HREF="readline.html#SEC34">Allowing Undoing</A>: How to make your functions undoable. -<LI><A HREF="readline.html#SEC35">Redisplay</A>: Functions to control line display. -<LI><A HREF="readline.html#SEC36">Modifying Text</A>: Functions to modify <CODE>rl_line_buffer</CODE>. -<LI><A HREF="readline.html#SEC37">Utility Functions</A>: Generally useful functions and hooks. -<LI><A HREF="readline.html#SEC38">Alternate Interface</A>: Using Readline in a `callback' fashion. -</UL> - - - -<H3><A NAME="SEC30" HREF="readline.html#TOC30">Naming a Function</A></H3> - -<P> -The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - -</P> - -<PRE> -Meta-Rubout: backward-kill-word -</PRE> - -<P> -This binds the keystroke <KBD>Meta-Rubout</KBD> to the function -<EM>descriptively</EM> named <CODE>backward-kill-word</CODE>. You, as the -programmer, should bind the functions you write to descriptive names as -well. Readline provides a function for doing that: - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_add_defun</B> <I>(char *name, Function *function, int key)</I> -<DD><A NAME="IDX120"></A> -Add <VAR>name</VAR> to the list of named functions. Make <VAR>function</VAR> be -the function that gets called. If <VAR>key</VAR> is not -1, then bind it to -<VAR>function</VAR> using <CODE>rl_bind_key ()</CODE>. -</DL> - -</P> -<P> -Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other -than adding a function to Readline, you may need to use the -underlying functions described below. - -</P> - - -<H3><A NAME="SEC31" HREF="readline.html#TOC31">Selecting a Keymap</A></H3> - -<P> -Key bindings take place on a <EM>keymap</EM>. The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>()</I> -<DD><A NAME="IDX121"></A> -Returns a new, empty keymap. The space for the keymap is allocated with -<CODE>malloc ()</CODE>; you should <CODE>free ()</CODE> it when you are done. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I> -<DD><A NAME="IDX122"></A> -Return a new keymap which is a copy of <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>()</I> -<DD><A NAME="IDX123"></A> -Return a new keymap with the printing characters bound to rl_insert, -the lowercase Meta characters bound to run their equivalents, and -the Meta digits bound to produce numeric arguments. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX124"></A> -Free the storage associated with <VAR>keymap</VAR>. -</DL> - -</P> -<P> -Readline has several internal keymaps. These functions allow you to -change which keymap is active. - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>()</I> -<DD><A NAME="IDX125"></A> -Returns the currently active keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX126"></A> -Makes <VAR>keymap</VAR> the currently active keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(char *name)</I> -<DD><A NAME="IDX127"></A> -Return the keymap matching <VAR>name</VAR>. <VAR>name</VAR> is one which would -be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX128"></A> -Return the name matching <VAR>keymap</VAR>. <VAR>name</VAR> is one which would -be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="readline.html#SEC9">Readline Init File</A>). -</DL> - -</P> - - -<H3><A NAME="SEC32" HREF="readline.html#TOC32">Binding Keys</A></H3> - -<P> -You associate keys with functions through the keymap. Readline has -several internal keymaps: <CODE>emacs_standard_keymap</CODE>, -<CODE>emacs_meta_keymap</CODE>, <CODE>emacs_ctlx_keymap</CODE>, -<CODE>vi_movement_keymap</CODE>, and <CODE>vi_insertion_keymap</CODE>. -<CODE>emacs_standard_keymap</CODE> is the default, and the examples in -this manual assume that. - -</P> -<P> -Since <CODE>readline</CODE> installs a set of default key bindings the first -time it is called, there is always the danger that a custom binding -installed before the first call to <CODE>readline</CODE> will be overridden. -An alternate mechanism is to install custom key bindings in an -initialization function assigned to the <CODE>rl_startup_hook</CODE> variable -(see section <A HREF="readline.html#SEC28">Readline Variables</A>). - -</P> -<P> -These functions manage key bindings. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, Function *function)</I> -<DD><A NAME="IDX129"></A> -Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap. -Returns non-zero in the case of an invalid <VAR>key</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, Function *function, Keymap map)</I> -<DD><A NAME="IDX130"></A> -Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>. Returns non-zero in the case -of an invalid <VAR>key</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I> -<DD><A NAME="IDX131"></A> -Bind <VAR>key</VAR> to the null function in the currently active keymap. -Returns non-zero in case of error. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I> -<DD><A NAME="IDX132"></A> -Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>. -Returns non-zero in case of error. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(Function *function, Keymap map)</I> -<DD><A NAME="IDX133"></A> -Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(char *command, Keymap map)</I> -<DD><A NAME="IDX134"></A> -Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, char *keyseq, char *data, Keymap map)</I> -<DD><A NAME="IDX135"></A> -Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary -pointer <VAR>data</VAR>. <VAR>type</VAR> says what kind of data is pointed to by -<VAR>data</VAR>; this can be a function (<CODE>ISFUNC</CODE>), a macro -(<CODE>ISMACR</CODE>), or a keymap (<CODE>ISKMAP</CODE>). This makes new keymaps as -necessary. The initial keymap in which to do bindings is <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I> -<DD><A NAME="IDX136"></A> -Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and -perform any key bindings and variable assignments found -(see section <A HREF="readline.html#SEC9">Readline Init File</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(char *filename)</I> -<DD><A NAME="IDX137"></A> -Read keybindings and variable assignments from <VAR>filename</VAR> -(see section <A HREF="readline.html#SEC9">Readline Init File</A>). -</DL> - -</P> - - -<H3><A NAME="SEC33" HREF="readline.html#TOC33">Associating Function Names and Bindings</A></H3> - -<P> -These functions allow you to find out what keys invoke named functions -and the functions invoked by a particular key sequence. - -</P> -<P> -<DL> -<DT><U>Function:</U> Function * <B>rl_named_function</B> <I>(char *name)</I> -<DD><A NAME="IDX138"></A> -Return the function with name <VAR>name</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> Function * <B>rl_function_of_keyseq</B> <I>(char *keyseq, Keymap map, int *type)</I> -<DD><A NAME="IDX139"></A> -Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>. -If <VAR>map</VAR> is NULL, the current keymap is used. If <VAR>type</VAR> is -not NULL, the type of the object is returned in it (one of <CODE>ISFUNC</CODE>, -<CODE>ISKMAP</CODE>, or <CODE>ISMACR</CODE>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(Function *function)</I> -<DD><A NAME="IDX140"></A> -Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the current keymap. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(Function *function, Keymap map)</I> -<DD><A NAME="IDX141"></A> -Return an array of strings representing the key sequences used to -invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I> -<DD><A NAME="IDX142"></A> -Print the readline function names and the key sequences currently -bound to them to <CODE>rl_outstream</CODE>. If <VAR>readable</VAR> is non-zero, -the list is formatted in such a way that it can be made part of an -<CODE>inputrc</CODE> file and re-read. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>()</I> -<DD><A NAME="IDX143"></A> -Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>rl_funmap_names</B> <I>()</I> -<DD><A NAME="IDX144"></A> -Return a NULL terminated array of known function names. The array is -sorted. The array itself is allocated, but not the strings inside. You -should free () the array when you done, but not the pointrs. -</DL> - -</P> - - -<H3><A NAME="SEC34" HREF="readline.html#TOC34">Allowing Undoing</A></H3> - -<P> -Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try -something if you know you can undo it. I could use an undo function for -the stock market. - -</P> -<P> -If your function simply inserts text once, or deletes text once, and -uses <CODE>rl_insert_text ()</CODE> or <CODE>rl_delete_text ()</CODE> to do it, then -undoing is already done for you automatically. - -</P> -<P> -If you do multiple insertions or multiple deletions, or any combination -of these operations, you should group them together into one operation. -This is done with <CODE>rl_begin_undo_group ()</CODE> and -<CODE>rl_end_undo_group ()</CODE>. - -</P> -<P> -The types of events that can be undone are: - -</P> - -<PRE> -enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; -</PRE> - -<P> -Notice that <CODE>UNDO_DELETE</CODE> means to insert some text, and -<CODE>UNDO_INSERT</CODE> means to delete some text. That is, the undo code -tells undo what to undo, not how to undo it. <CODE>UNDO_BEGIN</CODE> and -<CODE>UNDO_END</CODE> are tags added by <CODE>rl_begin_undo_group ()</CODE> and -<CODE>rl_end_undo_group ()</CODE>. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>()</I> -<DD><A NAME="IDX145"></A> -Begins saving undo information in a group construct. The undo -information usually comes from calls to <CODE>rl_insert_text ()</CODE> and -<CODE>rl_delete_text ()</CODE>, but could be the result of calls to -<CODE>rl_add_undo ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>()</I> -<DD><A NAME="IDX146"></A> -Closes the current undo group started with <CODE>rl_begin_undo_group -()</CODE>. There should be one call to <CODE>rl_end_undo_group ()</CODE> -for each call to <CODE>rl_begin_undo_group ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I> -<DD><A NAME="IDX147"></A> -Remember how to undo an event (according to <VAR>what</VAR>). The affected -text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>free_undo_list</B> <I>()</I> -<DD><A NAME="IDX148"></A> -Free the existing undo list. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_do_undo</B> <I>()</I> -<DD><A NAME="IDX149"></A> -Undo the first thing on the undo list. Returns <CODE>0</CODE> if there was -nothing to undo, non-zero if something was undone. -</DL> - -</P> -<P> -Finally, if you neither insert nor delete text, but directly modify the -existing text (e.g., change its case), call <CODE>rl_modifying ()</CODE> -once, just before you modify the text. You must supply the indices of -the text range that you are going to modify. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I> -<DD><A NAME="IDX150"></A> -Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a -single undo unit. It is assumed that you will subsequently modify -that text. -</DL> - -</P> - - -<H3><A NAME="SEC35" HREF="readline.html#TOC35">Redisplay</A></H3> - -<P> -<DL> -<DT><U>Function:</U> void <B>rl_redisplay</B> <I>()</I> -<DD><A NAME="IDX151"></A> -Change what's displayed on the screen to reflect the current contents -of <CODE>rl_line_buffer</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>()</I> -<DD><A NAME="IDX152"></A> -Force the line to be updated and redisplayed, whether or not -Readline thinks the screen display is correct. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line</B> <I>()</I> -<DD><A NAME="IDX153"></A> -Tell the update functions that we have moved onto a new (empty) line, -usually after ouputting a newline. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>()</I> -<DD><A NAME="IDX154"></A> -Tell the update functions that we have moved onto a new line, with -<VAR>rl_prompt</VAR> already displayed. -This could be used by applications that want to output the prompt string -themselves, but still need Readline to know the prompt string length for -redisplay. -It should be used after setting <VAR>rl_already_prompted</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>()</I> -<DD><A NAME="IDX155"></A> -Reset the display state to a clean state and redisplay the current line -starting on a new line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_message</B> <I>(va_alist)</I> -<DD><A NAME="IDX156"></A> -The arguments are a string as would be supplied to <CODE>printf</CODE>. The -resulting string is displayed in the <EM>echo area</EM>. The echo area -is also used to display numeric arguments and search strings. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_clear_message</B> <I>()</I> -<DD><A NAME="IDX157"></A> -Clear the message in the echo area. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_save_prompt</B> <I>()</I> -<DD><A NAME="IDX158"></A> -Save the local Readline prompt display state in preparation for -displaying a new message in the message area with <CODE>rl_message</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>()</I> -<DD><A NAME="IDX159"></A> -Restore the local Readline prompt display state saved by the most -recent call to <CODE>rl_save_prompt</CODE>. -</DL> - -</P> - - -<H3><A NAME="SEC36" HREF="readline.html#TOC36">Modifying Text</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(char *text)</I> -<DD><A NAME="IDX160"></A> -Insert <VAR>text</VAR> into the line at the current cursor position. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX161"></A> -Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX162"></A> -Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in -the current line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I> -<DD><A NAME="IDX163"></A> -Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line -to the kill ring, appending or prepending to the last kill if the -last command was a kill command. The text is deleted. -If <VAR>start</VAR> is less than <VAR>end</VAR>, -the text is appended, otherwise prepended. If the last command was -not a kill, a new kill ring slot is used. -</DL> - -</P> - - -<H3><A NAME="SEC37" HREF="readline.html#TOC37">Utility Functions</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_key</B> <I>()</I> -<DD><A NAME="IDX164"></A> -Return the next character available. This handles input inserted into -the input stream via <VAR>pending input</VAR> (see section <A HREF="readline.html#SEC28">Readline Variables</A>) -and <CODE>rl_stuff_char ()</CODE>, macros, and characters read from the keyboard. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *)</I> -<DD><A NAME="IDX165"></A> -Return the next character available from the keyboard. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I> -<DD><A NAME="IDX166"></A> -Insert <VAR>c</VAR> into the Readline input stream. It will be "read" -before Readline attempts to read characters from the terminal with -<CODE>rl_read_key ()</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I> -<DD><A NAME="IDX167"></A> -Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR> -characters, possibly reallocating it if necessary. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_initialize</B> <I>()</I> -<DD><A NAME="IDX168"></A> -Initialize or re-initialize Readline's internal state. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(char *terminal_name)</I> -<DD><A NAME="IDX169"></A> -Reinitialize Readline's idea of the terminal settings using -<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>). -If <VAR>terminal_name</VAR> is NULL, the value of the <CODE>TERM</CODE> -environment variable is used. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>alphabetic</B> <I>(int c)</I> -<DD><A NAME="IDX170"></A> -Return 1 if <VAR>c</VAR> is an alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>numeric</B> <I>(int c)</I> -<DD><A NAME="IDX171"></A> -Return 1 if <VAR>c</VAR> is a numeric character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>ding</B> <I>()</I> -<DD><A NAME="IDX172"></A> -Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I> -<DD><A NAME="IDX173"></A> -A convenience function for displaying a list of strings in -columnar format on Readline's output stream. <CODE>matches</CODE> is the list -of strings, in argv format, such as a list of completion matches. -<CODE>len</CODE> is the number of strings in <CODE>matches</CODE>, and <CODE>max</CODE> -is the length of the longest string in <CODE>matches</CODE>. This function uses -the setting of <CODE>print-completions-horizontally</CODE> to select how the -matches are displayed (see section <A HREF="readline.html#SEC10">Readline Init File Syntax</A>). -</DL> - -</P> -<P> -The following are implemented as macros, defined in <CODE>chartypes.h</CODE>. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>uppercase_p</B> <I>(int c)</I> -<DD><A NAME="IDX174"></A> -Return 1 if <VAR>c</VAR> is an uppercase alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>lowercase_p</B> <I>(int c)</I> -<DD><A NAME="IDX175"></A> -Return 1 if <VAR>c</VAR> is a lowercase alphabetic character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>digit_p</B> <I>(int c)</I> -<DD><A NAME="IDX176"></A> -Return 1 if <VAR>c</VAR> is a numeric character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>to_upper</B> <I>(int c)</I> -<DD><A NAME="IDX177"></A> -If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding -uppercase character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>to_lower</B> <I>(int c)</I> -<DD><A NAME="IDX178"></A> -If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding -lowercase character. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>digit_value</B> <I>(int c)</I> -<DD><A NAME="IDX179"></A> -If <VAR>c</VAR> is a number, return the value it represents. -</DL> - -</P> - - -<H3><A NAME="SEC38" HREF="readline.html#TOC38">Alternate Interface</A></H3> - -<P> -An alternate interface is available to plain <CODE>readline()</CODE>. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to <CODE>select()</CODE> -on various file descriptors. To accomodate this need, readline can -also be invoked as a `callback' function from an event loop. There -are functions available to make this easy. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(char *prompt, Vfunction *lhandler)</I> -<DD><A NAME="IDX180"></A> -Set up the terminal for readline I/O and display the initial -expanded value of <VAR>prompt</VAR>. Save the value of <VAR>lhandler</VAR> to -use as a callback when a complete line of input has been entered. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>()</I> -<DD><A NAME="IDX181"></A> -Whenever an application determines that keyboard input is available, it -should call <CODE>rl_callback_read_char()</CODE>, which will read the next -character from the current input source. If that character completes the -line, <CODE>rl_callback_read_char</CODE> will invoke the <VAR>lhandler</VAR> -function saved by <CODE>rl_callback_handler_install</CODE> to process the -line. <CODE>EOF</CODE> is indicated by calling <VAR>lhandler</VAR> with a -<CODE>NULL</CODE> line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>()</I> -<DD><A NAME="IDX182"></A> -Restore the terminal to its initial state and remove the line handler. -This may be called from within a callback as well as independently. -</DL> - -</P> - - -<H3><A NAME="SEC39" HREF="readline.html#TOC39">An Example</A></H3> - -<P> -Here is a function which changes lowercase characters to their uppercase -equivalents, and uppercase characters to lowercase. If -this function was bound to <SAMP>`M-c'</SAMP>, then typing <SAMP>`M-c'</SAMP> would -change the case of the character under point. Typing <SAMP>`M-1 0 M-c'</SAMP> -would change the case of the following 10 characters, leaving the cursor on -the last character changed. - -</P> - -<PRE> -/* Invert the case of the COUNT following characters. */ -int -invert_case_line (count, key) - int count, key; -{ - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, so it will save - the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_lower (rl_line_buffer[i]); - else if (lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); -} -</PRE> - - - -<H2><A NAME="SEC40" HREF="readline.html#TOC40">Readline Signal Handling</A></H2> - -<P> -Signals are asynchronous events sent to a process by the Unix kernel, -sometimes on behalf of another process. They are intended to indicate -exceptional events, like a user pressing the interrupt key on his -terminal, or a network connection being broken. There is a class of -signals that can be sent to the process currently reading input from -the keyboard. Since Readline changes the terminal attributes when it -is called, it needs to perform special processing when a signal is -received to restore the terminal to a sane state, or provide application -writers with functions to do so manually. - -</P> -<P> -Readline contains an internal signal handler that is installed for a -number of signals (<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, -<CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>). -When one of these signals is received, the signal handler -will reset the terminal attributes to those that were in effect before -<CODE>readline ()</CODE> was called, reset the signal handling to what it was -before <CODE>readline ()</CODE> was called, and resend the signal to the calling -application. -If and when the calling application's signal handler returns, Readline -will reinitialize the terminal and continue to accept input. -When a <CODE>SIGINT</CODE> is received, the Readline signal handler performs -some additional work, which will cause any partially-entered line to be -aborted (see the description of <CODE>rl_free_line_state ()</CODE>). - -</P> -<P> -There is an additional Readline signal handler, for <CODE>SIGWINCH</CODE>, which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an <CODE>xterm</CODE>). The Readline <CODE>SIGWINCH</CODE> -handler updates Readline's internal screen size state, and then calls any -<CODE>SIGWINCH</CODE> signal handler the calling application has installed. -Readline calls the application's <CODE>SIGWINCH</CODE> signal handler without -resetting the terminal to its original state. If the application's signal -handler does more than update its idea of the terminal size and return (for -example, a <CODE>longjmp</CODE> back to a main processing loop), it <EM>must</EM> -call <CODE>rl_cleanup_after_signal ()</CODE> (described below), to restore the -terminal state. - -</P> -<P> -Readline provides two variables that allow application writers to -control whether or not it will catch certain signals and act on them -when they are received. It is important that applications change the -values of these variables only when calling <CODE>readline ()</CODE>, not in -a signal handler, so Readline's internal signal state is not corrupted. - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_signals</B> -<DD><A NAME="IDX183"></A> -If this variable is non-zero, Readline will install signal handlers for -<CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, <CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, -<CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, and <CODE>SIGTTOU</CODE>. - -</P> -<P> -The default value of <CODE>rl_catch_signals</CODE> is 1. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_catch_sigwinch</B> -<DD><A NAME="IDX184"></A> -If this variable is non-zero, Readline will install a signal handler for -<CODE>SIGWINCH</CODE>. - -</P> -<P> -The default value of <CODE>rl_catch_sigwinch</CODE> is 1. -</DL> - -</P> -<P> -If an application does not wish to have Readline catch any signals, or -to handle signals other than those Readline catches (<CODE>SIGHUP</CODE>, -for example), -Readline provides convenience functions to do the necessary terminal -and internal state cleanup upon receipt of a signal. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I> -<DD><A NAME="IDX185"></A> -This function will reset the state of the terminal to what it was before -<CODE>readline ()</CODE> was called, and remove the Readline signal handlers for -all signals, depending on the values of <CODE>rl_catch_signals</CODE> and -<CODE>rl_catch_sigwinch</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I> -<DD><A NAME="IDX186"></A> -This will free any partial state associated with the current input line -(undo information, any partial history entry, any partially-entered -keyboard macro, and any partially-entered numeric argument). This -should be called before <CODE>rl_cleanup_after_signal ()</CODE>. The -Readline signal handler for <CODE>SIGINT</CODE> calls this to abort the -current input line. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I> -<DD><A NAME="IDX187"></A> -This will reinitialize the terminal and reinstall any Readline signal -handlers, depending on the values of <CODE>rl_catch_signals</CODE> and -<CODE>rl_catch_sigwinch</CODE>. -</DL> - -</P> -<P> -If an application does not wish Readline to catch <CODE>SIGWINCH</CODE>, it may -call <CODE>rl_resize_terminal ()</CODE> to force Readline to update its idea of -the terminal size when a <CODE>SIGWINCH</CODE> is received. - -</P> -<P> -<DL> -<DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I> -<DD><A NAME="IDX188"></A> -Update Readline's internal screen size. -</DL> - -</P> -<P> -The following functions install and remove Readline's signal handlers. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I> -<DD><A NAME="IDX189"></A> -Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>, -<CODE>SIGTERM</CODE>, <CODE>SIGALRM</CODE>, <CODE>SIGTSTP</CODE>, <CODE>SIGTTIN</CODE>, -<CODE>SIGTTOU</CODE>, and <CODE>SIGWINCH</CODE>, depending on the values of -<CODE>rl_catch_signals</CODE> and <CODE>rl_catch_sigwinch</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I> -<DD><A NAME="IDX190"></A> -Remove all of the Readline signal handlers installed by -<CODE>rl_set_signals ()</CODE>. -</DL> - -</P> - - -<H2><A NAME="SEC41" HREF="readline.html#TOC41">Custom Completers</A></H2> - -<P> -Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. -The following sections describe how your program and Readline -cooperate to provide this service. - -</P> - -<UL> -<LI><A HREF="readline.html#SEC42">How Completing Works</A>: The logic used to do completion. -<LI><A HREF="readline.html#SEC43">Completion Functions</A>: Functions provided by Readline. -<LI><A HREF="readline.html#SEC44">Completion Variables</A>: Variables which control completion. -<LI><A HREF="readline.html#SEC45">A Short Completion Example</A>: An example of writing completer subroutines. -</UL> - - - -<H3><A NAME="SEC42" HREF="readline.html#TOC42">How Completing Works</A></H3> - -<P> -In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately -expand a partial word without knowing all of the possible words -which make sense in that context. The Readline library provides -the user interface to completion, and two of the most common -completion functions: filename and username. For completing other types -of text, you must write your own completion function. This section -describes exactly what such functions must do, and provides an example. - -</P> -<P> -There are three major functions used to perform completion: - -</P> - -<OL> -<LI> - -The user-interface function <CODE>rl_complete ()</CODE>. This function is -called with the same arguments as other Readline -functions intended for interactive use: <VAR>count</VAR> and -<VAR>invoking_key</VAR>. It isolates the word to be completed and calls -<CODE>completion_matches ()</CODE> to generate a list of possible completions. -It then either lists the possible completions, inserts the possible -completions, or actually performs the -completion, depending on which behavior is desired. - -<LI> - -The internal function <CODE>completion_matches ()</CODE> uses your -<EM>generator</EM> function to generate the list of possible matches, and -then returns the array of these matches. You should place the address -of your generator function in <CODE>rl_completion_entry_function</CODE>. - -<LI> - -The generator function is called repeatedly from -<CODE>completion_matches ()</CODE>, returning a string each time. The -arguments to the generator function are <VAR>text</VAR> and <VAR>state</VAR>. -<VAR>text</VAR> is the partial word to be completed. <VAR>state</VAR> is zero the -first time the function is called, allowing the generator to perform -any necessary initialization, and a positive non-zero integer for -each subsequent call. When the generator function returns -<CODE>(char *)NULL</CODE> this signals <CODE>completion_matches ()</CODE> that there are -no more possibilities left. Usually the generator function computes the -list of possible completions when <VAR>state</VAR> is zero, and returns them -one at a time on subsequent calls. Each string the generator function -returns as a match must be allocated with <CODE>malloc()</CODE>; Readline -frees the strings when it has finished with them. - -</OL> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD><A NAME="IDX191"></A> -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>completion_matches ()</CODE>). The default is to do filename completion. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B> -<DD><A NAME="IDX192"></A> -This is a pointer to the generator function for <CODE>completion_matches -()</CODE>. If the value of <CODE>rl_completion_entry_function</CODE> is -<CODE>(Function *)NULL</CODE> then the default filename generator function, -<CODE>filename_completion_function ()</CODE>, is used. -</DL> - -</P> - - -<H3><A NAME="SEC43" HREF="readline.html#TOC43">Completion Functions</A></H3> - -<P> -Here is the complete list of callable completion functions present in -Readline. - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I> -<DD><A NAME="IDX193"></A> -Complete the word at or before point. <VAR>what_to_do</VAR> says what to do -with the completion. A value of <SAMP>`?'</SAMP> means list the possible -completions. <SAMP>`TAB'</SAMP> means do standard completion. <SAMP>`*'</SAMP> means -insert all of the possible completions. <SAMP>`!'</SAMP> means to display -all of the possible completions, if there is more than one, as well as -performing partial completion. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I> -<DD><A NAME="IDX194"></A> -Complete the word at or before point. You have supplied the function -that does the initial simple matching selection algorithm (see -<CODE>completion_matches ()</CODE> and <CODE>rl_completion_entry_function</CODE>). -The default is to do filename -completion. This calls <CODE>rl_complete_internal ()</CODE> with an -argument depending on <VAR>invoking_key</VAR>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key))</I> -<DD><A NAME="IDX195"></A> -List the possible completions. See description of <CODE>rl_complete -()</CODE>. This calls <CODE>rl_complete_internal ()</CODE> with an argument of -<SAMP>`?'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key))</I> -<DD><A NAME="IDX196"></A> -Insert the list of possible completions into the line, deleting the -partially-completed word. See description of <CODE>rl_complete ()</CODE>. -This calls <CODE>rl_complete_internal ()</CODE> with an argument of <SAMP>`*'</SAMP>. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char ** <B>completion_matches</B> <I>(char *text, CPFunction *entry_func)</I> -<DD><A NAME="IDX197"></A> -Returns an array of <CODE>(char *)</CODE> which is a list of completions for -<VAR>text</VAR>. If there are no completions, returns <CODE>(char **)NULL</CODE>. -The first entry in the returned array is the substitution for <VAR>text</VAR>. -The remaining entries are the possible completions. The array is -terminated with a <CODE>NULL</CODE> pointer. - -</P> -<P> -<VAR>entry_func</VAR> is a function of two args, and returns a -<CODE>(char *)</CODE>. The first argument is <VAR>text</VAR>. The second is a -state argument; it is zero on the first call, and non-zero on subsequent -calls. <VAR>entry_func</VAR> returns a <CODE>NULL</CODE> pointer to the caller -when there are no more matches. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>filename_completion_function</B> <I>(char *text, int state)</I> -<DD><A NAME="IDX198"></A> -A generator function for filename completion in the general case. Note -that completion in Bash is a little different because of all -the pathnames that must be followed when looking up completions for a -command. The Bash source is a useful reference for writing custom -completion functions. -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>username_completion_function</B> <I>(char *text, int state)</I> -<DD><A NAME="IDX199"></A> -A completion generator for usernames. <VAR>text</VAR> contains a partial -username preceded by a random character (usually <SAMP>`~'</SAMP>). As with all -completion generators, <VAR>state</VAR> is zero on the first call and non-zero -for subsequent calls. -</DL> - -</P> - - -<H3><A NAME="SEC44" HREF="readline.html#TOC44">Completion Variables</A></H3> - -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B> -<DD><A NAME="IDX200"></A> -A pointer to the generator function for <CODE>completion_matches ()</CODE>. -<CODE>NULL</CODE> means to use <CODE>filename_completion_function ()</CODE>, the default -filename completer. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPPFunction * <B>rl_attempted_completion_function</B> -<DD><A NAME="IDX201"></A> -A pointer to an alternative function to create matches. -The function is called with <VAR>text</VAR>, <VAR>start</VAR>, and <VAR>end</VAR>. -<VAR>start</VAR> and <VAR>end</VAR> are indices in <CODE>rl_line_buffer</CODE> saying -what the boundaries of <VAR>text</VAR> are. If this function exists and -returns <CODE>NULL</CODE>, or if this variable is set to <CODE>NULL</CODE>, then -<CODE>rl_complete ()</CODE> will call the value of -<CODE>rl_completion_entry_function</CODE> to generate matches, otherwise the -array of strings returned will be used. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPFunction * <B>rl_filename_quoting_function</B> -<DD><A NAME="IDX202"></A> -A pointer to a function that will quote a filename in an application- -specific fashion. This is called if filename completion is being -attempted and one of the characters in <CODE>rl_filename_quote_characters</CODE> -appears in a completed filename. The function is called with -<VAR>text</VAR>, <VAR>match_type</VAR>, and <VAR>quote_pointer</VAR>. The <VAR>text</VAR> -is the filename to be quoted. The <VAR>match_type</VAR> is either -<CODE>SINGLE_MATCH</CODE>, if there is only one completion match, or -<CODE>MULT_MATCH</CODE>. Some functions use this to decide whether or not to -insert a closing quote character. The <VAR>quote_pointer</VAR> is a pointer -to any opening quote character the user typed. Some functions choose -to reset this character. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPFunction * <B>rl_filename_dequoting_function</B> -<DD><A NAME="IDX203"></A> -A pointer to a function that will remove application-specific quoting -characters from a filename before completion is attempted, so those -characters do not interfere with matching the text against names in -the filesystem. It is called with <VAR>text</VAR>, the text of the word -to be dequoted, and <VAR>quote_char</VAR>, which is the quoting character -that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>). If -<VAR>quote_char</VAR> is zero, the filename was not in an embedded string. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_char_is_quoted_p</B> -<DD><A NAME="IDX204"></A> -A pointer to a function to call that determines whether or not a specific -character in the line buffer is quoted, according to whatever quoting -mechanism the program calling readline uses. The function is called with -two arguments: <VAR>text</VAR>, the text of the line, and <VAR>index</VAR>, the -index of the character in the line. It is used to decide whether a -character found in <CODE>rl_completer_word_break_characters</CODE> should be -used to break words for the completer. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_query_items</B> -<DD><A NAME="IDX205"></A> -Up to this many items will be displayed in response to a -possible-completions call. After that, we ask the user if she is sure -she wants to see them all. The default value is 100. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_basic_word_break_characters</B> -<DD><A NAME="IDX206"></A> -The basic list of characters that signal a break between words for the -completer routine. The default value of this variable is the characters -which break words for completion in Bash, i.e., -<CODE>" \t\n\"\\'`@$><=;|&{("</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_basic_quote_characters</B> -<DD><A NAME="IDX207"></A> -List of quote characters which can cause a word break. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_completer_word_break_characters</B> -<DD><A NAME="IDX208"></A> -The list of characters that signal a break between words for -<CODE>rl_complete_internal ()</CODE>. The default list is the value of -<CODE>rl_basic_word_break_characters</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_completer_quote_characters</B> -<DD><A NAME="IDX209"></A> -List of characters which can be used to quote a substring of the line. -Completion occurs on the entire substring, and within the substring -<CODE>rl_completer_word_break_characters</CODE> are treated as any other character, -unless they also appear within this list. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_filename_quote_characters</B> -<DD><A NAME="IDX210"></A> -A list of characters that cause a filename to be quoted by the completer -when they appear in a completed filename. The default is the null string. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_special_prefixes</B> -<DD><A NAME="IDX211"></A> -The list of characters that are word break characters, but should be -left in <VAR>text</VAR> when it is passed to the completion function. -Programs can use this to help determine what kind of completing to do. -For instance, Bash sets this variable to "$@" so that it can complete -shell variables and hostnames. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_completion_append_character</B> -<DD><A NAME="IDX212"></A> -When a single completion alternative matches at the end of the command -line, this character is appended to the inserted completion text. The -default is a space character (<SAMP>` '</SAMP>). Setting this to the null -character (<SAMP>`\0'</SAMP>) prevents anything being appended automatically. -This can be changed in custom completion functions to -provide the "most sensible word separator character" according to -an application-specific command line syntax specification. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B> -<DD><A NAME="IDX213"></A> -If non-zero, then disallow duplicates in the matches. Default is 1. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_completion_desired</B> -<DD><A NAME="IDX214"></A> -Non-zero means that the results of the matches are to be treated as -filenames. This is <EM>always</EM> zero on entry, and can only be changed -within a completion entry generator function. If it is set to a non-zero -value, directory names have a slash appended and Readline attempts to -quote completed filenames if they contain any embedded word break -characters. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B> -<DD><A NAME="IDX215"></A> -Non-zero means that the results of the matches are to be quoted using -double quotes (or an application-specific quoting mechanism) if the -completed filename contains any characters in -<CODE>rl_filename_quote_chars</CODE>. This is <EM>always</EM> non-zero -on entry, and can only be changed within a completion entry generator -function. The quoting is effected via a call to the function pointed to -by <CODE>rl_filename_quoting_function</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_inhibit_completion</B> -<DD><A NAME="IDX216"></A> -If this variable is non-zero, completion is inhibit<ed. The completion -character will be inserted as any other bound to <CODE>self-insert</CODE>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_ignore_some_completions_function</B> -<DD><A NAME="IDX217"></A> -This function, if defined, is called by the completer when real filename -completion is done, after all the matching names have been generated. -It is passed a <CODE>NULL</CODE> terminated array of matches. -The first element (<CODE>matches[0]</CODE>) is the -maximal substring common to all matches. This function can -re-arrange the list of matches as required, but each element deleted -from the array must be freed. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_directory_completion_hook</B> -<DD><A NAME="IDX218"></A> -This function, if defined, is allowed to modify the directory portion -of filenames Readline completes. It is called with the address of a -string (the current directory name) as an argument. It could be used -to expand symbolic links or shell variables in pathnames. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> VFunction * <B>rl_completion_display_matches_hook</B> -<DD><A NAME="IDX219"></A> -If non-zero, then this is the address of a function to call when -completing a word would normally display the list of possible matches. -This function is called in lieu of Readline displaying the list. -It takes three arguments: -(<CODE>char **</CODE><VAR>matches</VAR>, <CODE>int</CODE> <VAR>num_matches</VAR>, <CODE>int</CODE> <VAR>max_length</VAR>) -where <VAR>matches</VAR> is the array of matching strings, -<VAR>num_matches</VAR> is the number of strings in that array, and -<VAR>max_length</VAR> is the length of the longest string in that array. -Readline provides a convenience function, <CODE>rl_display_match_list</CODE>, -that takes care of doing the display to Readline's output stream. That -function may be called from this hook. -</DL> - -</P> - - -<H3><A NAME="SEC45" HREF="readline.html#TOC45">A Short Completion Example</A></H3> - -<P> -Here is a small application demonstrating the use of the GNU Readline -library. It is called <CODE>fileman</CODE>, and the source code resides in -<TT>`examples/fileman.c'</TT>. This sample application provides -completion of command names, line editing features, and access to the -history list. - -</P> - -<PRE> -/* fileman.c -- A tiny application which demonstrates how to use the - GNU Readline library. This application interactively allows users - to manipulate files and their modes. */ - -#include <stdio.h> -#include <sys/types.h> -#include <sys/file.h> -#include <sys/stat.h> -#include <sys/errno.h> - -#include <readline/readline.h> -#include <readline/history.h> - -extern char *getwd (); -extern char *xmalloc (); - -/* The names of functions that actually do the manipulation. */ -int com_list (), com_view (), com_rename (), com_stat (), com_pwd (); -int com_delete (), com_help (), com_cd (), com_quit (); - -/* A structure which contains information on the commands this program - can understand. */ - -typedef struct { - char *name; /* User printable name of the function. */ - Function *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ -} COMMAND; - -COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (Function *)NULL, (char *)NULL } -}; - -/* Forward declarations. */ -char *stripwhite (); -COMMAND *find_command (); - -/* The name of this program, as taken from argv[0]. */ -char *progname; - -/* When non-zero, this global means the user is done using this program. */ -int done; - -char * -dupstr (s) - int s; -{ - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); -} - -main (argc, argv) - int argc; - char **argv; -{ - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); -} - -/* Execute a command line. */ -int -execute_line (line) - char *line; -{ - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); -} - -/* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ -COMMAND * -find_command (name) - char *name; -{ - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); -} - -/* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ -char * -stripwhite (string) - char *string; -{ - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; -} - -/* **************************************************************** */ -/* */ -/* Interface to Readline Completion */ -/* */ -/* **************************************************************** */ - -char *command_generator (); -char **fileman_completion (); - -/* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ -initialize_readline () -{ - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *)fileman_completion; -} - -/* Attempt to complete on the contents of TEXT. START and END bound the - region of rl_line_buffer that contains the word to complete. TEXT is - the word to complete. We can use the entire contents of rl_line_buffer - in case we want to do some simple parsing. Return the array of matches, - or NULL if there aren't any. */ -char ** -fileman_completion (text, start, end) - char *text; - int start, end; -{ - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = completion_matches (text, command_generator); - - return (matches); -} - -/* Generator function for command completion. STATE lets us know whether - to start from scratch; without any state (i.e. STATE == 0), then we - start at the top of the list. */ -char * -command_generator (text, state) - char *text; - int state; -{ - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This includes - saving the length of TEXT for efficiency, and initializing the index - variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); -} - -/* **************************************************************** */ -/* */ -/* FileMan Commands */ -/* */ -/* **************************************************************** */ - -/* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ -static char syscom[1024]; - -/* List the file(s) named in arg. */ -com_list (arg) - char *arg; -{ - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); -} - -com_view (arg) - char *arg; -{ - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); -} - -com_rename (arg) - char *arg; -{ - too_dangerous ("rename"); - return (1); -} - -com_stat (arg) - char *arg; -{ - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); -} - -com_delete (arg) - char *arg; -{ - too_dangerous ("delete"); - return (1); -} - -/* Print out help for ARG, or for all of the commands if ARG is - not present. */ -com_help (arg) - char *arg; -{ - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); -} - -/* Change to the directory ARG. */ -com_cd (arg) - char *arg; -{ - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); -} - -/* Print out the current working directory. */ -com_pwd (ignore) - char *ignore; -{ - char dir[1024], *s; - - s = getwd (dir); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; -} - -/* The user wishes to quit using this program. Just set DONE non-zero. */ -com_quit (arg) - char *arg; -{ - done = 1; - return (0); -} - -/* Function which tells you that you can't do this. */ -too_dangerous (caller) - char *caller; -{ - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); -} - -/* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ -int -valid_argument (caller, arg) - char *caller, *arg; -{ - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); -} -</PRE> - - - -<H1><A NAME="SEC46" HREF="readline.html#TOC46">Concept Index</A></H1> -<P> -Jump to: -<A HREF="#cindex_c">c</A> -- -<A HREF="#cindex_e">e</A> -- -<A HREF="#cindex_i">i</A> -- -<A HREF="#cindex_k">k</A> -- -<A HREF="#cindex_n">n</A> -- -<A HREF="#cindex_r">r</A> -- -<A HREF="#cindex_y">y</A> -<P> -<H2><A NAME="cindex_c">c</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX3">command editing</A> -</DIR> -<H2><A NAME="cindex_e">e</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX4">editing command lines</A> -</DIR> -<H2><A NAME="cindex_i">i</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX8">initialization file, readline</A> -<LI><A HREF="readline.html#IDX1">interaction, readline</A> -</DIR> -<H2><A NAME="cindex_k">k</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX7">kill ring</A> -<LI><A HREF="readline.html#IDX5">killing text</A> -</DIR> -<H2><A NAME="cindex_n">n</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX2">notation, readline</A> -</DIR> -<H2><A NAME="cindex_r">r</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX98">readline, function</A> -</DIR> -<H2><A NAME="cindex_y">y</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX6">yanking text</A> -</DIR> - -</P> - - -<H1><A NAME="SEC47" HREF="readline.html#TOC47">Function and Variable Index</A></H1> -<P> -Jump to: -<A HREF="#findex_a">a</A> -- -<A HREF="#findex_b">b</A> -- -<A HREF="#findex_c">c</A> -- -<A HREF="#findex_d">d</A> -- -<A HREF="#findex_e">e</A> -- -<A HREF="#findex_f">f</A> -- -<A HREF="#findex_h">h</A> -- -<A HREF="#findex_i">i</A> -- -<A HREF="#findex_k">k</A> -- -<A HREF="#findex_l">l</A> -- -<A HREF="#findex_m">m</A> -- -<A HREF="#findex_n">n</A> -- -<A HREF="#findex_o">o</A> -- -<A HREF="#findex_p">p</A> -- -<A HREF="#findex_q">q</A> -- -<A HREF="#findex_r">r</A> -- -<A HREF="#findex_s">s</A> -- -<A HREF="#findex_t">t</A> -- -<A HREF="#findex_u">u</A> -- -<A HREF="#findex_v">v</A> -- -<A HREF="#findex_y">y</A> -<P> -<H2><A NAME="findex_a">a</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX83">abort (C-g)</A> -<LI><A HREF="readline.html#IDX34">accept-line (Newline, Return)</A> -<LI><A HREF="readline.html#IDX170">alphabetic</A> -</DIR> -<H2><A NAME="findex_b">b</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX29">backward-char (C-b)</A> -<LI><A HREF="readline.html#IDX48">backward-delete-char (Rubout)</A> -<LI><A HREF="readline.html#IDX59">backward-kill-line (C-x Rubout)</A> -<LI><A HREF="readline.html#IDX63">backward-kill-word (M-DEL)</A> -<LI><A HREF="readline.html#IDX31">backward-word (M-b)</A> -<LI><A HREF="readline.html#IDX37">beginning-of-history (M-&#60;)</A> -<LI><A HREF="readline.html#IDX26">beginning-of-line (C-a)</A> -<LI><A HREF="readline.html#IDX9">bell-style</A> -</DIR> -<H2><A NAME="findex_c">c</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX81">call-last-kbd-macro (C-x e)</A> -<LI><A HREF="readline.html#IDX57">capitalize-word (M-c)</A> -<LI><A HREF="readline.html#IDX91">character-search (C-])</A> -<LI><A HREF="readline.html#IDX92">character-search-backward (M-C-])</A> -<LI><A HREF="readline.html#IDX32">clear-screen (C-l)</A> -<LI><A HREF="readline.html#IDX10">comment-begin</A> -<LI><A HREF="readline.html#IDX74">complete (TAB)</A> -<LI><A HREF="readline.html#IDX11">completion-query-items</A> -<LI><A HREF="readline.html#IDX197">completion_matches</A> -<LI><A HREF="readline.html#IDX12">convert-meta</A> -<LI><A HREF="readline.html#IDX68">copy-backward-word ()</A> -<LI><A HREF="readline.html#IDX69">copy-forward-word ()</A> -<LI><A HREF="readline.html#IDX67">copy-region-as-kill ()</A> -</DIR> -<H2><A NAME="findex_d">d</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX47">delete-char (C-d)</A> -<LI><A HREF="readline.html#IDX78">delete-char-or-list ()</A> -<LI><A HREF="readline.html#IDX65">delete-horizontal-space ()</A> -<LI><A HREF="readline.html#IDX72">digit-argument (M-0, M-1, ... M--)</A> -<LI><A HREF="readline.html#IDX176">digit_p</A> -<LI><A HREF="readline.html#IDX179">digit_value</A> -<LI><A HREF="readline.html#IDX172">ding</A> -<LI><A HREF="readline.html#IDX13">disable-completion</A> -<LI><A HREF="readline.html#IDX84">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A> -<LI><A HREF="readline.html#IDX56">downcase-word (M-l)</A> -<LI><A HREF="readline.html#IDX94">dump-functions ()</A> -<LI><A HREF="readline.html#IDX96">dump-macros ()</A> -<LI><A HREF="readline.html#IDX95">dump-variables ()</A> -</DIR> -<H2><A NAME="findex_e">e</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX14">editing-mode</A> -<LI><A HREF="readline.html#IDX15">enable-keypad</A> -<LI><A HREF="readline.html#IDX80">end-kbd-macro (C-x ))</A> -<LI><A HREF="readline.html#IDX38">end-of-history (M-&#62;)</A> -<LI><A HREF="readline.html#IDX27">end-of-line (C-e)</A> -<LI><A HREF="readline.html#IDX90">exchange-point-and-mark (C-x C-x)</A> -<LI><A HREF="readline.html#IDX16">expand-tilde</A> -</DIR> -<H2><A NAME="findex_f">f</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX198">filename_completion_function</A> -<LI><A HREF="readline.html#IDX49">forward-backward-delete-char ()</A> -<LI><A HREF="readline.html#IDX28">forward-char (C-f)</A> -<LI><A HREF="readline.html#IDX40">forward-search-history (C-s)</A> -<LI><A HREF="readline.html#IDX30">forward-word (M-f)</A> -<LI><A HREF="readline.html#IDX148">free_undo_list</A> -</DIR> -<H2><A NAME="findex_h">h</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX44">history-search-backward ()</A> -<LI><A HREF="readline.html#IDX43">history-search-forward ()</A> -<LI><A HREF="readline.html#IDX17">horizontal-scroll-mode</A> -</DIR> -<H2><A NAME="findex_i">i</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX18">input-meta</A> -<LI><A HREF="readline.html#IDX93">insert-comment (M-#)</A> -<LI><A HREF="readline.html#IDX76">insert-completions (M-*)</A> -<LI><A HREF="readline.html#IDX20">isearch-terminators</A> -</DIR> -<H2><A NAME="findex_k">k</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX21">keymap</A> -<LI><A HREF="readline.html#IDX58">kill-line (C-k)</A> -<LI><A HREF="readline.html#IDX66">kill-region ()</A> -<LI><A HREF="readline.html#IDX61">kill-whole-line ()</A> -<LI><A HREF="readline.html#IDX62">kill-word (M-d)</A> -</DIR> -<H2><A NAME="findex_l">l</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX175">lowercase_p</A> -</DIR> -<H2><A NAME="findex_m">m</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX22">mark-modified-lines</A> -<LI><A HREF="readline.html#IDX77">menu-complete ()</A> -<LI><A HREF="readline.html#IDX19">meta-flag</A> -</DIR> -<H2><A NAME="findex_n">n</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX36">next-history (C-n)</A> -<LI><A HREF="readline.html#IDX42">non-incremental-forward-search-history (M-n)</A> -<LI><A HREF="readline.html#IDX41">non-incremental-reverse-search-history (M-p)</A> -<LI><A HREF="readline.html#IDX171">numeric</A> -</DIR> -<H2><A NAME="findex_o">o</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX23">output-meta</A> -</DIR> -<H2><A NAME="findex_p">p</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX75">possible-completions (M-?)</A> -<LI><A HREF="readline.html#IDX85">prefix-meta (ESC)</A> -<LI><A HREF="readline.html#IDX35">previous-history (C-p)</A> -</DIR> -<H2><A NAME="findex_q">q</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX50">quoted-insert (C-q, C-v)</A> -</DIR> -<H2><A NAME="findex_r">r</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX82">re-read-init-file (C-x C-r)</A> -<LI><A HREF="readline.html#IDX97">readline</A> -<LI><A HREF="readline.html#IDX33">redraw-current-line ()</A> -<LI><A HREF="readline.html#IDX39">reverse-search-history (C-r)</A> -<LI><A HREF="readline.html#IDX87">revert-line (M-r)</A> -<LI><A HREF="readline.html#IDX120">rl_add_defun</A> -<LI><A HREF="readline.html#IDX147">rl_add_undo</A> -<LI><A HREF="readline.html#IDX107">rl_already_prompted</A> -<LI><A HREF="readline.html#IDX201">rl_attempted_completion_function</A> -<LI><A HREF="readline.html#IDX207">rl_basic_quote_characters</A> -<LI><A HREF="readline.html#IDX206">rl_basic_word_break_characters</A> -<LI><A HREF="readline.html#IDX145">rl_begin_undo_group</A> -<LI><A HREF="readline.html#IDX129">rl_bind_key</A> -<LI><A HREF="readline.html#IDX130">rl_bind_key_in_map</A> -<LI><A HREF="readline.html#IDX119">rl_binding_keymap</A> -<LI><A HREF="readline.html#IDX180">rl_callback_handler_install</A> -<LI><A HREF="readline.html#IDX182">rl_callback_handler_remove</A> -<LI><A HREF="readline.html#IDX181">rl_callback_read_char</A> -<LI><A HREF="readline.html#IDX183">rl_catch_signals</A> -<LI><A HREF="readline.html#IDX184">rl_catch_sigwinch</A> -<LI><A HREF="readline.html#IDX204">rl_char_is_quoted_p</A> -<LI><A HREF="readline.html#IDX185">rl_cleanup_after_signal</A> -<LI><A HREF="readline.html#IDX157">rl_clear_message</A> -<LI><A HREF="readline.html#IDX190">rl_clear_signals</A> -<LI><A HREF="readline.html#IDX191">rl_complete</A>, <A HREF="readline.html#IDX194">rl_complete</A> -<LI><A HREF="readline.html#IDX193">rl_complete_internal</A> -<LI><A HREF="readline.html#IDX209">rl_completer_quote_characters</A> -<LI><A HREF="readline.html#IDX208">rl_completer_word_break_characters</A> -<LI><A HREF="readline.html#IDX212">rl_completion_append_character</A> -<LI><A HREF="readline.html#IDX219">rl_completion_display_matches_hook</A> -<LI><A HREF="readline.html#IDX192">rl_completion_entry_function</A>, <A HREF="readline.html#IDX200">rl_completion_entry_function</A> -<LI><A HREF="readline.html#IDX205">rl_completion_query_items</A> -<LI><A HREF="readline.html#IDX122">rl_copy_keymap</A> -<LI><A HREF="readline.html#IDX162">rl_copy_text</A> -<LI><A HREF="readline.html#IDX161">rl_delete_text</A> -<LI><A HREF="readline.html#IDX218">rl_directory_completion_hook</A> -<LI><A HREF="readline.html#IDX124">rl_discard_keymap</A> -<LI><A HREF="readline.html#IDX173">rl_display_match_list</A> -<LI><A HREF="readline.html#IDX149">rl_do_undo</A> -<LI><A HREF="readline.html#IDX103">rl_done</A> -<LI><A HREF="readline.html#IDX101">rl_end</A> -<LI><A HREF="readline.html#IDX146">rl_end_undo_group</A> -<LI><A HREF="readline.html#IDX105">rl_erase_empty_line</A> -<LI><A HREF="readline.html#IDX115">rl_event_hook</A> -<LI><A HREF="readline.html#IDX118">rl_executing_keymap</A> -<LI><A HREF="readline.html#IDX167">rl_extend_line_buffer</A> -<LI><A HREF="readline.html#IDX214">rl_filename_completion_desired</A> -<LI><A HREF="readline.html#IDX203">rl_filename_dequoting_function</A> -<LI><A HREF="readline.html#IDX210">rl_filename_quote_characters</A> -<LI><A HREF="readline.html#IDX215">rl_filename_quoting_desired</A> -<LI><A HREF="readline.html#IDX202">rl_filename_quoting_function</A> -<LI><A HREF="readline.html#IDX152">rl_forced_update_display</A> -<LI><A HREF="readline.html#IDX186">rl_free_line_state</A> -<LI><A HREF="readline.html#IDX142">rl_function_dumper</A> -<LI><A HREF="readline.html#IDX139">rl_function_of_keyseq</A> -<LI><A HREF="readline.html#IDX144">rl_funmap_names</A> -<LI><A HREF="readline.html#IDX135">rl_generic_bind</A> -<LI><A HREF="readline.html#IDX125">rl_get_keymap</A> -<LI><A HREF="readline.html#IDX127">rl_get_keymap_by_name</A> -<LI><A HREF="readline.html#IDX128">rl_get_keymap_name</A> -<LI><A HREF="readline.html#IDX165">rl_getc</A> -<LI><A HREF="readline.html#IDX116">rl_getc_function</A> -<LI><A HREF="readline.html#IDX213">rl_ignore_completion_duplicates</A> -<LI><A HREF="readline.html#IDX217">rl_ignore_some_completions_function</A> -<LI><A HREF="readline.html#IDX216">rl_inhibit_completion</A> -<LI><A HREF="readline.html#IDX168">rl_initialize</A> -<LI><A HREF="readline.html#IDX196">rl_insert_completions</A> -<LI><A HREF="readline.html#IDX160">rl_insert_text</A> -<LI><A HREF="readline.html#IDX111">rl_instream</A> -<LI><A HREF="readline.html#IDX140">rl_invoking_keyseqs</A> -<LI><A HREF="readline.html#IDX141">rl_invoking_keyseqs_in_map</A> -<LI><A HREF="readline.html#IDX163">rl_kill_text</A> -<LI><A HREF="readline.html#IDX108">rl_library_version</A> -<LI><A HREF="readline.html#IDX99">rl_line_buffer</A> -<LI><A HREF="readline.html#IDX143">rl_list_funmap_names</A> -<LI><A HREF="readline.html#IDX121">rl_make_bare_keymap</A> -<LI><A HREF="readline.html#IDX123">rl_make_keymap</A> -<LI><A HREF="readline.html#IDX102">rl_mark</A> -<LI><A HREF="readline.html#IDX156">rl_message</A> -<LI><A HREF="readline.html#IDX150">rl_modifying</A> -<LI><A HREF="readline.html#IDX138">rl_named_function</A> -<LI><A HREF="readline.html#IDX153">rl_on_new_line</A> -<LI><A HREF="readline.html#IDX154">rl_on_new_line_with_prompt</A> -<LI><A HREF="readline.html#IDX112">rl_outstream</A> -<LI><A HREF="readline.html#IDX136">rl_parse_and_bind</A> -<LI><A HREF="readline.html#IDX104">rl_pending_input</A> -<LI><A HREF="readline.html#IDX100">rl_point</A> -<LI><A HREF="readline.html#IDX195">rl_possible_completions</A> -<LI><A HREF="readline.html#IDX114">rl_pre_input_hook</A> -<LI><A HREF="readline.html#IDX106">rl_prompt</A> -<LI><A HREF="readline.html#IDX137">rl_read_init_file</A> -<LI><A HREF="readline.html#IDX164">rl_read_key</A> -<LI><A HREF="readline.html#IDX110">rl_readline_name</A> -<LI><A HREF="readline.html#IDX151">rl_redisplay</A> -<LI><A HREF="readline.html#IDX117">rl_redisplay_function</A> -<LI><A HREF="readline.html#IDX187">rl_reset_after_signal</A> -<LI><A HREF="readline.html#IDX155">rl_reset_line_state</A> -<LI><A HREF="readline.html#IDX169">rl_reset_terminal</A> -<LI><A HREF="readline.html#IDX188">rl_resize_terminal</A> -<LI><A HREF="readline.html#IDX159">rl_restore_prompt</A> -<LI><A HREF="readline.html#IDX158">rl_save_prompt</A> -<LI><A HREF="readline.html#IDX126">rl_set_keymap</A> -<LI><A HREF="readline.html#IDX189">rl_set_signals</A> -<LI><A HREF="readline.html#IDX211">rl_special_prefixes</A> -<LI><A HREF="readline.html#IDX113">rl_startup_hook</A> -<LI><A HREF="readline.html#IDX166">rl_stuff_char</A> -<LI><A HREF="readline.html#IDX109">rl_terminal_name</A> -<LI><A HREF="readline.html#IDX134">rl_unbind_command_in_map</A> -<LI><A HREF="readline.html#IDX133">rl_unbind_function_in_map</A> -<LI><A HREF="readline.html#IDX131">rl_unbind_key</A> -<LI><A HREF="readline.html#IDX132">rl_unbind_key_in_map</A> -</DIR> -<H2><A NAME="findex_s">s</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX52">self-insert (a, b, A, 1, !, ...)</A> -<LI><A HREF="readline.html#IDX89">set-mark (C-@)</A> -<LI><A HREF="readline.html#IDX24">show-all-if-ambiguous</A> -<LI><A HREF="readline.html#IDX79">start-kbd-macro (C-x ()</A> -</DIR> -<H2><A NAME="findex_t">t</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX51">tab-insert (M-TAB)</A> -<LI><A HREF="readline.html#IDX88">tilde-expand (M-~)</A> -<LI><A HREF="readline.html#IDX178">to_lower</A> -<LI><A HREF="readline.html#IDX177">to_upper</A> -<LI><A HREF="readline.html#IDX53">transpose-chars (C-t)</A> -<LI><A HREF="readline.html#IDX54">transpose-words (M-t)</A> -</DIR> -<H2><A NAME="findex_u">u</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX86">undo (C-_, C-x C-u)</A> -<LI><A HREF="readline.html#IDX73">universal-argument ()</A> -<LI><A HREF="readline.html#IDX60">unix-line-discard (C-u)</A> -<LI><A HREF="readline.html#IDX64">unix-word-rubout (C-w)</A> -<LI><A HREF="readline.html#IDX55">upcase-word (M-u)</A> -<LI><A HREF="readline.html#IDX174">uppercase_p</A> -<LI><A HREF="readline.html#IDX199">username_completion_function</A> -</DIR> -<H2><A NAME="findex_v">v</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX25">visible-stats</A> -</DIR> -<H2><A NAME="findex_y">y</A></H2> -<DIR> -<LI><A HREF="readline.html#IDX70">yank (C-y)</A> -<LI><A HREF="readline.html#IDX46">yank-last-arg (M-., M-_)</A> -<LI><A HREF="readline.html#IDX45">yank-nth-arg (M-C-y)</A> -<LI><A HREF="readline.html#IDX71">yank-pop (M-y)</A> -</DIR> - -</P> -<P><HR><P> -This document was generated on 1 March 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/gnu/lib/libreadline/doc/readline.info b/gnu/lib/libreadline/doc/readline.info deleted file mode 100644 index ae6767fa19c..00000000000 --- a/gnu/lib/libreadline/doc/readline.info +++ /dev/null @@ -1,3107 +0,0 @@ -This is Info file readline.info, produced by Makeinfo version 1.68 from -the input file /usr/homes/chet/src/bash/readline-src/doc/rlman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -END-INFO-DIR-ENTRY - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - - Copyright (C) 1988-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: readline.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. -* Programming with GNU Readline:: GNU Readline Programmer's Manual. -* Concept Index:: Index of concepts described in this manual. -* Function and Variable Index:: Index of externally visible functions - and variables. - - -File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text <C-k> is read as `Control-K' and describes the character -produced when the <k> key is pressed while the Control key is depressed. - - The text <M-k> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <k> -key is pressed. The Meta key is labeled <ALT> on many keyboards. On -keyboards with two keys labeled <ALT> (usually to either side of the -space bar), the <ALT> on the left side is generally set to work as a -Meta key. The <ALT> key on the right may also be configured to work as -a Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - - If you do not have a Meta or <ALT> key, or another key working as a -Meta key, the identical keystroke can be generated by typing <ESC> -first, and then typing <k>. Either process is known as "metafying" the -<k> key. - - The text <M-C-k> is read as `Meta-Control-k' and describes the -character produced by "metafying" <C-k>. - - In addition, several keys have their own names. Specifically, -<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves -when seen in this text, or in an init file (*note Readline Init -File::.). If your keyboard lacks a <LFD> key, typing <C-j> will -produce the desired character. The <RET> key may be labeled <Return> -or <Enter> on some keyboards. - - -File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <RETURN>. You do not have to be at the end -of the line to press <RETURN>; the entire line is accepted regardless -of the location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may mistype a character, and not notice the error -until you have typed several other characters. In that case, you can -type <C-b> to move the cursor to the left, and then correct your -mistake. Afterwards, you can move the cursor to the right with <C-f>. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the bare essentials for editing the text of an input line -follows. - -<C-b> - Move back one character. - -<C-f> - Move forward one character. - -<DEL> or <Backspace> - Delete the character to the left of the cursor. - -<C-d> - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -<C-_> or <C-x C-u> - Undo the last editing command. You can undo all the way back to an - empty line. - -(Depending on your configuration, the <Backspace> key be set to delete -the character to the left of the cursor and the <DEL> key set to delete -the character underneath the cursor, like <C-d>, rather than the -character to the left of the cursor.) - - -File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to <C-b>, <C-f>, <C-d>, and -<DEL>. Here are some commands for moving more rapidly about the line. - -<C-a> - Move to the start of the line. - -<C-e> - Move to the end of the line. - -<M-f> - Move forward a word, where a word is composed of letters and - digits. - -<M-b> - Move backward a word. - -<C-l> - Clear the screen, reprinting the current line at the top. - - Notice how <C-f> moves forward a character, while <M-f> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`Cut' and `paste' are more recent jargon for `kill' and -`yank'.) - - If the description for a command says that it `kills' text, then you -can be sure that you can get the text back in a different (or the same) -place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -<C-k> - Kill the text from the current cursor position to the end of the - line. - -<M-d> - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by <M-f>. - -<M-DEL> - Kill from the cursor the start of the previous word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by <M-b>. - -<C-w> - Kill from the cursor to the previous whitespace. This is - different than <M-DEL> because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -<C-y> - Yank the most recently killed text back into the buffer at the - cursor. - -<M-y> - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is <C-y> or <M-y>. - - -File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once you -have typed one meta digit to get the argument started, you can type the -remainder of the digits, and then the command. For example, to give -the <C-d> command an argument of 10, you could type `M-1 0 C-d'. - - -File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -INCREMENTAL and NON-INCREMENTAL. - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. To search backward in the -history for a particular string, type <C-r>. Typing <C-s> searches -forward through the history. The characters present in the value of -the `isearch-terminators' variable are used to terminate an incremental -search. If that variable has not been assigned a value, the <ESC> and -<C-J> characters will terminate an incremental search. <C-g> will -abort an incremental search and restore the original line. When the -search is terminated, the history entry containing the search string -becomes the current line. - - To find other matching entries in the history list, type <C-r> or -<C-s> as appropriate. This will search backward or forward in the -history for the next entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate the -search and execute that command. For instance, a <RET> will terminate -the search and accept the line, thereby executing the command from the -history list. - - Non-incremental searches read the entire search string before -starting to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - - -File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home -directory. The name of this file is taken from the value of the -environment variable `INPUTRC'. If that variable is unset, the default -is `~/.inputrc'. - - When a program which uses the Readline library starts up, the init -file is read, and the key bindings are set. - - In addition, the `C-x C-r' command re-reads this init file, thus -incorporating any changes that you might have made to it. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::.). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an <ESC> character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which default set of key - bindings is used. By default, Readline starts up in Emacs - editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either `emacs' or `vi'. - - `enable-keypad' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::.). If this variable has not been - given a value, the characters <ESC> and <C-J> will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place the name of - the key you wish to bind the command to, a colon, and then the - name of the command on a line in the init file. The name of the - key can be expressed in different ways, depending on which is most - comfortable for you. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, <C-u> is bound to the function - `universal-argument', and <C-o> is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, <C-u> is bound to the function - `universal-argument' (just as it was in the first example), - `<C-x> <C-r>' is bound to the function `re-read-init-file', - and `<ESC> <[> <1> <1> <~>' is bound to insert the text - `Function Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the character whose `ASCII' code is the octal value NNN (one - to three digits) - - `\xNNN' - the character whose `ASCII' code is the hexadecimal value NNN - (one to three digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against both the full name of the terminal and - the portion of the terminal name before the first `-'. This - allows `sun' to match both `sun' and `sun-cmd', for instance. - - `application' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. - $include /etc/inputrc - - -File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the Gnu Readline library. Existing programs - # include FTP, Bash, and Gdb. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # First, include any systemwide bindings and variable assignments from - # /etc/Inputrc - $include /etc/Inputrc - - # - # Set various bindings for emacs mode. - - set editing-mode emacs - - $if mode=emacs - - Meta-Control-h: backward-kill-word Text after the function name is ignored - - # - # Arrow keys in keypad mode - # - #"\M-OD": backward-char - #"\M-OC": forward-char - #"\M-OA": previous-history - #"\M-OB": next-history - # - # Arrow keys in ANSI mode - # - "\M-[D": backward-char - "\M-[C": forward-char - "\M-[A": previous-history - "\M-[B": next-history - # - # Arrow keys in 8 bit keypad mode - # - #"\M-\C-OD": backward-char - #"\M-\C-OC": forward-char - #"\M-\C-OA": previous-history - #"\M-\C-OB": next-history - # - # Arrow keys in 8 bit ANSI mode - # - #"\M-\C-[D": backward-char - #"\M-\C-[C": forward-char - #"\M-\C-[A": previous-history - #"\M-\C-[B": next-history - - C-q: quoted-insert - - $endif - - # An old-style binding. This happens to be the default. - TAB: complete - - # Macros that are convenient for shell interaction - $if Bash - # edit the path - "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" - # prepare to type a quoted word -- insert open and close double quotes - # and move to just after the open quote - "\C-x\"": "\"\"\C-b" - # insert a backslash (testing backslash escapes in sequences and macros) - "\C-x\\": "\\" - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - # Add a binding to refresh the line, which is unbound - "\C-xr": redraw-current-line - # Edit variable on current line. - "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" - $endif - - # use a visible bell if one is available - set bell-style visible - - # don't strip characters to 7 bits when reading - set input-meta on - - # allow iso-latin1 characters to be inserted rather than converted to - # prefix-meta sequences - set convert-meta off - - # display characters with the eighth bit set directly rather than - # as meta-prefixed characters - set output-meta on - - # if there are more than 150 possible completions for a word, ask the - # user if he wants to see all of them - set completion-query-items 150 - - # For FTP - $if Ftp - "\C-xg": "get \M-?" - "\C-xt": "put \M-?" - "\M-.": yank-last-arg - $endif - - -File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. - - Command names without an accompanying key sequence are unbound by -default. In the following descriptions, POINT refers to the current -cursor position, and MARK refers to a cursor position saved by the -`set-mark' command. The text between the point and mark is referred to -as the REGION. - - -File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline, Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list. If this line was a history - line, then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-., M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not bound to `delete-char', then - return `EOF'. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q, C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like <C-q>, for example. - -`tab-insert (M-TAB)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - - -File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter point is. By - default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-DEL)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is yank or yank-pop. - - -File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. <M-> starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (TAB)' - Attempt to do completion on the text before the cursor. This is - application-specific. Generally, if you are typing a filename - argument, you can do filename completion; if you are typing a - command, you can do command completion; if you are typing in a - symbol to GDB, you can do symbol name completion; if you are - typing in a variable to Bash, you can do variable name completion, - and so on. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `complete', but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of `menu-complete' steps through the list of possible - completions, inserting each match in turn. At the end of the list - of completions, the bell is rung and the original text is restored. - An argument of N moves N positions forward in the list of matches; - a negative argument may be used to move backward through the list. - This command is intended to be bound to `TAB', but is unbound by - default. - -`delete-char-or-list ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta (ESC)' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing `ESC f' is equivalent to typing `M-f'. - -`undo (C-_, C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they ouput. If a numeric argument is supplied, the output - is formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - - -File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command M-C-j (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - This document describes the GNU Readline Library, a utility for -aiding in the consitency of user interface across discrete programs -that need to provide a command line interface. - - Copyright (C) 1988, 1994, 1996, 1998, 1999 Free Software Foundation, -Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Foundation. - - -File: readline.info, Node: Programming with GNU Readline, Next: Concept Index, Prev: Command Line Editing, Up: Top - -Programming with GNU Readline -***************************** - - This chapter describes the interface between the GNU Readline -Library and other programs. If you are a programmer, and you wish to -include the features found in GNU Readline such as completion, line -editing, and interactive history manipulation in your own programs, -this section is for you. - -* Menu: - -* Basic Behavior:: Using the default behavior of Readline. -* Custom Functions:: Adding your own functions to Readline. -* Readline Variables:: Variables accessible to custom - functions. -* Readline Convenience Functions:: Functions which Readline supplies to - aid in writing your own custom - functions. -* Readline Signal Handling:: How Readline behaves when it receives signals. -* Custom Completers:: Supplanting or supplementing Readline's - completion functions. - - -File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline - -Basic Behavior -============== - - Many programs provide a command line interface, such as `mail', -`ftp', and `sh'. For such programs, the default behaviour of Readline -is sufficient. This section describes how to use Readline in the -simplest way possible, perhaps to replace calls in your code to -`gets()' or `fgets ()'. - - The function `readline ()' prints a prompt and then reads and returns -a single line of text from the user. The line `readline' returns is -allocated with `malloc ()'; you should `free ()' the line when you are -done with it. The declaration for `readline' in ANSI C is - - `char *readline (char *PROMPT);' - -So, one might say - `char *line = readline ("Enter a line: ");' - -in order to read a line of text from the user. The line returned has -the final newline removed, so only the text remains. - - If `readline' encounters an `EOF' while reading the line, and the -line is empty at that point, then `(char *)NULL' is returned. -Otherwise, the line is ended just as if a newline had been typed. - - If you want the user to be able to get at the line later, (with -<C-p> for example), you must call `add_history ()' to save the line -away in a "history" list of such lines. - - `add_history (line)'; - -For full details on the GNU History Library, see the associated manual. - - It is preferable to avoid saving empty lines on the history list, -since users rarely have a burning need to reuse a blank line. Here is -a function which usefully replaces the standard `gets ()' library -function, and has the advantage of no static buffer to overflow: - - /* A static variable for holding the line. */ - static char *line_read = (char *)NULL; - - /* Read a string, and return a pointer to it. Returns NULL on EOF. */ - char * - rl_gets () - { - /* If the buffer has already been allocated, return the memory - to the free pool. */ - if (line_read) - { - free (line_read); - line_read = (char *)NULL; - } - - /* Get a line from the user. */ - line_read = readline (""); - - /* If the line has any text in it, save it on the history. */ - if (line_read && *line_read) - add_history (line_read); - - return (line_read); - } - - This function gives the user the default behaviour of <TAB> -completion: completion on file names. If you do not want Readline to -complete on filenames, you can change the binding of the <TAB> key with -`rl_bind_key ()'. - - `int rl_bind_key (int KEY, int (*FUNCTION)());' - - `rl_bind_key ()' takes two arguments: KEY is the character that you -want to bind, and FUNCTION is the address of the function to call when -KEY is pressed. Binding <TAB> to `rl_insert ()' makes <TAB> insert -itself. `rl_bind_key ()' returns non-zero if KEY is not a valid ASCII -character code (between 0 and 255). - - Thus, to disable the default <TAB> behavior, the following suffices: - `rl_bind_key ('\t', rl_insert);' - - This code should be executed once at the start of your program; you -might write a function called `initialize_readline ()' which performs -this and other desired initializations, such as installing custom -completers (*note Custom Completers::.). - - -File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline - -Custom Functions -================ - - Readline provides many functions for manipulating the text of the -line, but it isn't possible to anticipate the needs of all programs. -This section describes the various functions and variables defined -within the Readline library which allow a user program to add -customized functionality to Readline. - - Before declaring any functions that customize Readline's behavior, or -using any functionality Readline provides in other code, an application -writer should include the file `<readline/readline.h>' in any file that -uses Readline's features. Since some of the definitions in -`readline.h' use the `stdio' library, the file `<stdio.h>' should be -included before `readline.h'. - -* Menu: - -* The Function Type:: C declarations to make code readable. -* Function Writing:: Variables and calling conventions. - - -File: readline.info, Node: The Function Type, Next: Function Writing, Up: Custom Functions - -The Function Type ------------------ - - For readabilty, we declare a new type of object, called "Function". -A `Function' is a C function which returns an `int'. The type -declaration for `Function' is: - -`typedef int Function ();' - - The reason for declaring this new type is to make it easier to write -code describing pointers to C functions. Let us say we had a variable -called FUNC which was a pointer to a function. Instead of the classic -C declaration - - `int (*)()func;' - -we may write - - `Function *func;' - -Similarly, there are - - typedef void VFunction (); - typedef char *CPFunction (); and - typedef char **CPPFunction (); - -for functions returning no value, `pointer to char', and `pointer to -pointer to char', respectively. - - -File: readline.info, Node: Function Writing, Prev: The Function Type, Up: Custom Functions - -Writing a New Function ----------------------- - - In order to write new functions for Readline, you need to know the -calling conventions for keyboard-invoked functions, and the names of the -variables that describe the current state of the line read so far. - - The calling sequence for a command `foo' looks like - - `foo (int count, int key)' - -where COUNT is the numeric argument (or 1 if defaulted) and KEY is the -key that invoked this function. - - It is completely up to the function as to what should be done with -the numeric argument. Some functions use it as a repeat count, some as -a flag, and others to choose alternate behavior (refreshing the current -line as opposed to refreshing the screen, for example). Some choose to -ignore it. In general, if a function uses the numeric argument as a -repeat count, it should be able to do something useful with both -negative and positive arguments. At the very least, it should be aware -that it can be passed a negative argument. - - -File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline - -Readline Variables -================== - - These variables are available to function writers. - - - Variable: char * rl_line_buffer - This is the line gathered so far. You are welcome to modify the - contents of the line, but see *Note Allowing Undoing::. The - function `rl_extend_line_buffer' is available to increase the - memory allocated to `rl_line_buffer'. - - - Variable: int rl_point - The offset of the current cursor position in `rl_line_buffer' (the - *point*). - - - Variable: int rl_end - The number of characters present in `rl_line_buffer'. When - `rl_point' is at the end of the line, `rl_point' and `rl_end' are - equal. - - - Variable: int rl_mark - The mark (saved position) in the current line. If set, the mark - and point define a *region*. - - - Variable: int rl_done - Setting this to a non-zero value causes Readline to return the - current line immediately. - - - Variable: int rl_pending_input - Setting this to a value makes it the next keystroke read. This is - a way to stuff a single character into the input stream. - - - Variable: int rl_erase_empty_line - Setting this to a non-zero value causes Readline to completely - erase the current line, including any prompt, any time a newline - is typed as the only character on an otherwise-empty line. The - cursor is moved to the beginning of the newly-blank line. - - - Variable: char * rl_prompt - The prompt Readline uses. This is set from the argument to - `readline ()', and should not be assigned to directly. - - - Variable: int rl_already_prompted - If an application wishes to display the prompt itself, rather than - have Readline do it the first time `readline()' is called, it - should set this variable to a non-zero value after displaying the - prompt. The prompt must also be passed as the argument to - `readline()' so the redisplay functions can update the display - properly. The calling application is responsible for managing the - value; Readline never sets it. - - - Variable: char * rl_library_version - The version number of this revision of the library. - - - Variable: char * rl_terminal_name - The terminal type, used for initialization. - - - Variable: char * rl_readline_name - This variable is set to a unique name by each application using - Readline. The value allows conditional parsing of the inputrc file - (*note Conditional Init Constructs::.). - - - Variable: FILE * rl_instream - The stdio stream from which Readline reads input. - - - Variable: FILE * rl_outstream - The stdio stream to which Readline performs output. - - - Variable: Function * rl_startup_hook - If non-zero, this is the address of a function to call just before - `readline' prints the first prompt. - - - Variable: Function * rl_pre_input_hook - If non-zero, this is the address of a function to call after the - first prompt has been printed and just before `readline' starts - reading input characters. - - - Variable: Function * rl_event_hook - If non-zero, this is the address of a function to call periodically - when readline is waiting for terminal input. - - - Variable: Function * rl_getc_function - If non-zero, `readline' will call indirectly through this pointer - to get a character from the input stream. By default, it is set to - `rl_getc', the default `readline' character input function (*note - Utility Functions::.). - - - Variable: VFunction * rl_redisplay_function - If non-zero, `readline' will call indirectly through this pointer - to update the display with the current contents of the editing - buffer. By default, it is set to `rl_redisplay', the default - `readline' redisplay function (*note Redisplay::.). - - - Variable: Keymap rl_executing_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - currently executing readline function was found. - - - Variable: Keymap rl_binding_keymap - This variable is set to the keymap (*note Keymaps::.) in which the - last key binding occurred. - - -File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline - -Readline Convenience Functions -============================== - -* Menu: - -* Function Naming:: How to give a function you write a name. -* Keymaps:: Making keymaps. -* Binding Keys:: Changing Keymaps. -* Associating Function Names and Bindings:: Translate function names to - key sequences. -* Allowing Undoing:: How to make your functions undoable. -* Redisplay:: Functions to control line display. -* Modifying Text:: Functions to modify `rl_line_buffer'. -* Utility Functions:: Generally useful functions and hooks. -* Alternate Interface:: Using Readline in a `callback' fashion. - - -File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions - -Naming a Function ------------------ - - The user can dynamically change the bindings of keys while using -Readline. This is done by representing the function with a descriptive -name. The user is able to type the descriptive name when referring to -the function. Thus, in an init file, one might find - - Meta-Rubout: backward-kill-word - - This binds the keystroke <Meta-Rubout> to the function -*descriptively* named `backward-kill-word'. You, as the programmer, -should bind the functions you write to descriptive names as well. -Readline provides a function for doing that: - - - Function: int rl_add_defun (char *name, Function *function, int key) - Add NAME to the list of named functions. Make FUNCTION be the - function that gets called. If KEY is not -1, then bind it to - FUNCTION using `rl_bind_key ()'. - - Using this function alone is sufficient for most applications. It is -the recommended way to add a few functions to the default functions that -Readline has built in. If you need to do something other than adding a -function to Readline, you may need to use the underlying functions -described below. - - -File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions - -Selecting a Keymap ------------------- - - Key bindings take place on a "keymap". The keymap is the -association between the keys that the user types and the functions that -get run. You can make your own keymaps, copy existing keymaps, and tell -Readline which keymap to use. - - - Function: Keymap rl_make_bare_keymap () - Returns a new, empty keymap. The space for the keymap is - allocated with `malloc ()'; you should `free ()' it when you are - done. - - - Function: Keymap rl_copy_keymap (Keymap map) - Return a new keymap which is a copy of MAP. - - - Function: Keymap rl_make_keymap () - Return a new keymap with the printing characters bound to - rl_insert, the lowercase Meta characters bound to run their - equivalents, and the Meta digits bound to produce numeric - arguments. - - - Function: void rl_discard_keymap (Keymap keymap) - Free the storage associated with KEYMAP. - - Readline has several internal keymaps. These functions allow you to -change which keymap is active. - - - Function: Keymap rl_get_keymap () - Returns the currently active keymap. - - - Function: void rl_set_keymap (Keymap keymap) - Makes KEYMAP the currently active keymap. - - - Function: Keymap rl_get_keymap_by_name (char *name) - Return the keymap matching NAME. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - - Function: char * rl_get_keymap_name (Keymap keymap) - Return the name matching KEYMAP. NAME is one which would be - supplied in a `set keymap' inputrc line (*note Readline Init - File::.). - - -File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions - -Binding Keys ------------- - - You associate keys with functions through the keymap. Readline has -several internal keymaps: `emacs_standard_keymap', `emacs_meta_keymap', -`emacs_ctlx_keymap', `vi_movement_keymap', and `vi_insertion_keymap'. -`emacs_standard_keymap' is the default, and the examples in this manual -assume that. - - Since `readline' installs a set of default key bindings the first -time it is called, there is always the danger that a custom binding -installed before the first call to `readline' will be overridden. An -alternate mechanism is to install custom key bindings in an -initialization function assigned to the `rl_startup_hook' variable -(*note Readline Variables::.). - - These functions manage key bindings. - - - Function: int rl_bind_key (int key, Function *function) - Binds KEY to FUNCTION in the currently active keymap. Returns - non-zero in the case of an invalid KEY. - - - Function: int rl_bind_key_in_map (int key, Function *function, - Keymap map) - Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an - invalid KEY. - - - Function: int rl_unbind_key (int key) - Bind KEY to the null function in the currently active keymap. - Returns non-zero in case of error. - - - Function: int rl_unbind_key_in_map (int key, Keymap map) - Bind KEY to the null function in MAP. Returns non-zero in case of - error. - - - Function: int rl_unbind_function_in_map (Function *function, Keymap - map) - Unbind all keys that execute FUNCTION in MAP. - - - Function: int rl_unbind_command_in_map (char *command, Keymap map) - Unbind all keys that are bound to COMMAND in MAP. - - - Function: int rl_generic_bind (int type, char *keyseq, char *data, - Keymap map) - Bind the key sequence represented by the string KEYSEQ to the - arbitrary pointer DATA. TYPE says what kind of data is pointed to - by DATA; this can be a function (`ISFUNC'), a macro (`ISMACR'), or - a keymap (`ISKMAP'). This makes new keymaps as necessary. The - initial keymap in which to do bindings is MAP. - - - Function: int rl_parse_and_bind (char *line) - Parse LINE as if it had been read from the `inputrc' file and - perform any key bindings and variable assignments found (*note - Readline Init File::.). - - - Function: int rl_read_init_file (char *filename) - Read keybindings and variable assignments from FILENAME (*note - Readline Init File::.). - - -File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions - -Associating Function Names and Bindings ---------------------------------------- - - These functions allow you to find out what keys invoke named -functions and the functions invoked by a particular key sequence. - - - Function: Function * rl_named_function (char *name) - Return the function with name NAME. - - - Function: Function * rl_function_of_keyseq (char *keyseq, Keymap - map, int *type) - Return the function invoked by KEYSEQ in keymap MAP. If MAP is - NULL, the current keymap is used. If TYPE is not NULL, the type - of the object is returned in it (one of `ISFUNC', `ISKMAP', or - `ISMACR'). - - - Function: char ** rl_invoking_keyseqs (Function *function) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the current keymap. - - - Function: char ** rl_invoking_keyseqs_in_map (Function *function, - Keymap map) - Return an array of strings representing the key sequences used to - invoke FUNCTION in the keymap MAP. - - - Function: void rl_function_dumper (int readable) - Print the readline function names and the key sequences currently - bound to them to `rl_outstream'. If READABLE is non-zero, the - list is formatted in such a way that it can be made part of an - `inputrc' file and re-read. - - - Function: void rl_list_funmap_names () - Print the names of all bindable Readline functions to - `rl_outstream'. - - - Function: char ** rl_funmap_names () - Return a NULL terminated array of known function names. The array - is sorted. The array itself is allocated, but not the strings - inside. You should free () the array when you done, but not the - pointrs. - - -File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions - -Allowing Undoing ----------------- - - Supporting the undo command is a painless thing, and makes your -functions much more useful. It is certainly easy to try something if -you know you can undo it. I could use an undo function for the stock -market. - - If your function simply inserts text once, or deletes text once, and -uses `rl_insert_text ()' or `rl_delete_text ()' to do it, then undoing -is already done for you automatically. - - If you do multiple insertions or multiple deletions, or any -combination of these operations, you should group them together into -one operation. This is done with `rl_begin_undo_group ()' and -`rl_end_undo_group ()'. - - The types of events that can be undone are: - - enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; - - Notice that `UNDO_DELETE' means to insert some text, and -`UNDO_INSERT' means to delete some text. That is, the undo code tells -undo what to undo, not how to undo it. `UNDO_BEGIN' and `UNDO_END' are -tags added by `rl_begin_undo_group ()' and `rl_end_undo_group ()'. - - - Function: int rl_begin_undo_group () - Begins saving undo information in a group construct. The undo - information usually comes from calls to `rl_insert_text ()' and - `rl_delete_text ()', but could be the result of calls to - `rl_add_undo ()'. - - - Function: int rl_end_undo_group () - Closes the current undo group started with `rl_begin_undo_group - ()'. There should be one call to `rl_end_undo_group ()' for each - call to `rl_begin_undo_group ()'. - - - Function: void rl_add_undo (enum undo_code what, int start, int end, - char *text) - Remember how to undo an event (according to WHAT). The affected - text runs from START to END, and encompasses TEXT. - - - Function: void free_undo_list () - Free the existing undo list. - - - Function: int rl_do_undo () - Undo the first thing on the undo list. Returns `0' if there was - nothing to undo, non-zero if something was undone. - - Finally, if you neither insert nor delete text, but directly modify -the existing text (e.g., change its case), call `rl_modifying ()' once, -just before you modify the text. You must supply the indices of the -text range that you are going to modify. - - - Function: int rl_modifying (int start, int end) - Tell Readline to save the text between START and END as a single - undo unit. It is assumed that you will subsequently modify that - text. - - -File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions - -Redisplay ---------- - - - Function: void rl_redisplay () - Change what's displayed on the screen to reflect the current - contents of `rl_line_buffer'. - - - Function: int rl_forced_update_display () - Force the line to be updated and redisplayed, whether or not - Readline thinks the screen display is correct. - - - Function: int rl_on_new_line () - Tell the update functions that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - Function: int rl_on_new_line_with_prompt () - Tell the update functions that we have moved onto a new line, with - RL_PROMPT already displayed. This could be used by applications - that want to output the prompt string themselves, but still need - Readline to know the prompt string length for redisplay. It - should be used after setting RL_ALREADY_PROMPTED. - - - Function: int rl_reset_line_state () - Reset the display state to a clean state and redisplay the current - line starting on a new line. - - - Function: int rl_message (va_alist) - The arguments are a string as would be supplied to `printf'. The - resulting string is displayed in the "echo area". The echo area - is also used to display numeric arguments and search strings. - - - Function: int rl_clear_message () - Clear the message in the echo area. - - - Function: void rl_save_prompt () - Save the local Readline prompt display state in preparation for - displaying a new message in the message area with `rl_message'. - - - Function: void rl_restore_prompt () - Restore the local Readline prompt display state saved by the most - recent call to `rl_save_prompt'. - - -File: readline.info, Node: Modifying Text, Next: Utility Functions, Prev: Redisplay, Up: Readline Convenience Functions - -Modifying Text --------------- - - - Function: int rl_insert_text (char *text) - Insert TEXT into the line at the current cursor position. - - - Function: int rl_delete_text (int start, int end) - Delete the text between START and END in the current line. - - - Function: char * rl_copy_text (int start, int end) - Return a copy of the text between START and END in the current - line. - - - Function: int rl_kill_text (int start, int end) - Copy the text between START and END in the current line to the - kill ring, appending or prepending to the last kill if the last - command was a kill command. The text is deleted. If START is - less than END, the text is appended, otherwise prepended. If the - last command was not a kill, a new kill ring slot is used. - - -File: readline.info, Node: Utility Functions, Next: Alternate Interface, Prev: Modifying Text, Up: Readline Convenience Functions - -Utility Functions ------------------ - - - Function: int rl_read_key () - Return the next character available. This handles input inserted - into the input stream via PENDING INPUT (*note Readline - Variables::.) and `rl_stuff_char ()', macros, and characters read - from the keyboard. - - - Function: int rl_getc (FILE *) - Return the next character available from the keyboard. - - - Function: int rl_stuff_char (int c) - Insert C into the Readline input stream. It will be "read" before - Readline attempts to read characters from the terminal with - `rl_read_key ()'. - - - Function: int rl_extend_line_buffer (int len) - Ensure that `rl_line_buffer' has enough space to hold LEN - characters, possibly reallocating it if necessary. - - - Function: int rl_initialize () - Initialize or re-initialize Readline's internal state. - - - Function: int rl_reset_terminal (char *terminal_name) - Reinitialize Readline's idea of the terminal settings using - TERMINAL_NAME as the terminal type (e.g., `vt100'). If - TERMINAL_NAME is NULL, the value of the `TERM' environment - variable is used. - - - Function: int alphabetic (int c) - Return 1 if C is an alphabetic character. - - - Function: int numeric (int c) - Return 1 if C is a numeric character. - - - Function: int ding () - Ring the terminal bell, obeying the setting of `bell-style'. - - - Function: void rl_display_match_list (char **matches, int len, int - max) - A convenience function for displaying a list of strings in - columnar format on Readline's output stream. `matches' is the list - of strings, in argv format, such as a list of completion matches. - `len' is the number of strings in `matches', and `max' is the - length of the longest string in `matches'. This function uses the - setting of `print-completions-horizontally' to select how the - matches are displayed (*note Readline Init File Syntax::.). - - The following are implemented as macros, defined in `chartypes.h'. - - - Function: int uppercase_p (int c) - Return 1 if C is an uppercase alphabetic character. - - - Function: int lowercase_p (int c) - Return 1 if C is a lowercase alphabetic character. - - - Function: int digit_p (int c) - Return 1 if C is a numeric character. - - - Function: int to_upper (int c) - If C is a lowercase alphabetic character, return the corresponding - uppercase character. - - - Function: int to_lower (int c) - If C is an uppercase alphabetic character, return the corresponding - lowercase character. - - - Function: int digit_value (int c) - If C is a number, return the value it represents. - - -File: readline.info, Node: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions - -Alternate Interface -------------------- - - An alternate interface is available to plain `readline()'. Some -applications need to interleave keyboard I/O with file, device, or -window system I/O, typically by using a main loop to `select()' on -various file descriptors. To accomodate this need, readline can also -be invoked as a `callback' function from an event loop. There are -functions available to make this easy. - - - Function: void rl_callback_handler_install (char *prompt, Vfunction - *lhandler) - Set up the terminal for readline I/O and display the initial - expanded value of PROMPT. Save the value of LHANDLER to use as a - callback when a complete line of input has been entered. - - - Function: void rl_callback_read_char () - Whenever an application determines that keyboard input is - available, it should call `rl_callback_read_char()', which will - read the next character from the current input source. If that - character completes the line, `rl_callback_read_char' will invoke - the LHANDLER function saved by `rl_callback_handler_install' to - process the line. `EOF' is indicated by calling LHANDLER with a - `NULL' line. - - - Function: void rl_callback_handler_remove () - Restore the terminal to its initial state and remove the line - handler. This may be called from within a callback as well as - independently. - -An Example ----------- - - Here is a function which changes lowercase characters to their -uppercase equivalents, and uppercase characters to lowercase. If this -function was bound to `M-c', then typing `M-c' would change the case of -the character under point. Typing `M-1 0 M-c' would change the case of -the following 10 characters, leaving the cursor on the last character -changed. - - /* Invert the case of the COUNT following characters. */ - int - invert_case_line (count, key) - int count, key; - { - register int start, end, i; - - start = rl_point; - - if (rl_point >= rl_end) - return (0); - - if (count < 0) - { - direction = -1; - count = -count; - } - else - direction = 1; - - /* Find the end of the range to modify. */ - end = start + (count * direction); - - /* Force it to be within range. */ - if (end > rl_end) - end = rl_end; - else if (end < 0) - end = 0; - - if (start == end) - return (0); - - if (start > end) - { - int temp = start; - start = end; - end = temp; - } - - /* Tell readline that we are modifying the line, so it will save - the undo information. */ - rl_modifying (start, end); - - for (i = start; i != end; i++) - { - if (uppercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_lower (rl_line_buffer[i]); - else if (lowercase_p (rl_line_buffer[i])) - rl_line_buffer[i] = to_upper (rl_line_buffer[i]); - } - /* Move point to on top of the last character changed. */ - rl_point = (direction == 1) ? end - 1 : start; - return (0); - } - - -File: readline.info, Node: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline - -Readline Signal Handling -======================== - - Signals are asynchronous events sent to a process by the Unix kernel, -sometimes on behalf of another process. They are intended to indicate -exceptional events, like a user pressing the interrupt key on his -terminal, or a network connection being broken. There is a class of -signals that can be sent to the process currently reading input from -the keyboard. Since Readline changes the terminal attributes when it -is called, it needs to perform special processing when a signal is -received to restore the terminal to a sane state, or provide application -writers with functions to do so manually. - - Readline contains an internal signal handler that is installed for a -number of signals (`SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', -`SIGTSTP', `SIGTTIN', and `SIGTTOU'). When one of these signals is -received, the signal handler will reset the terminal attributes to -those that were in effect before `readline ()' was called, reset the -signal handling to what it was before `readline ()' was called, and -resend the signal to the calling application. If and when the calling -application's signal handler returns, Readline will reinitialize the -terminal and continue to accept input. When a `SIGINT' is received, -the Readline signal handler performs some additional work, which will -cause any partially-entered line to be aborted (see the description of -`rl_free_line_state ()'). - - There is an additional Readline signal handler, for `SIGWINCH', which -the kernel sends to a process whenever the terminal's size changes (for -example, if a user resizes an `xterm'). The Readline `SIGWINCH' -handler updates Readline's internal screen size state, and then calls -any `SIGWINCH' signal handler the calling application has installed. -Readline calls the application's `SIGWINCH' signal handler without -resetting the terminal to its original state. If the application's -signal handler does more than update its idea of the terminal size and -return (for example, a `longjmp' back to a main processing loop), it -*must* call `rl_cleanup_after_signal ()' (described below), to restore -the terminal state. - - Readline provides two variables that allow application writers to -control whether or not it will catch certain signals and act on them -when they are received. It is important that applications change the -values of these variables only when calling `readline ()', not in a -signal handler, so Readline's internal signal state is not corrupted. - - - Variable: int rl_catch_signals - If this variable is non-zero, Readline will install signal - handlers for `SIGINT', `SIGQUIT', `SIGTERM', `SIGALRM', `SIGTSTP', - `SIGTTIN', and `SIGTTOU'. - - The default value of `rl_catch_signals' is 1. - - - Variable: int rl_catch_sigwinch - If this variable is non-zero, Readline will install a signal - handler for `SIGWINCH'. - - The default value of `rl_catch_sigwinch' is 1. - - If an application does not wish to have Readline catch any signals, -or to handle signals other than those Readline catches (`SIGHUP', for -example), Readline provides convenience functions to do the necessary -terminal and internal state cleanup upon receipt of a signal. - - - Function: void rl_cleanup_after_signal (void) - This function will reset the state of the terminal to what it was - before `readline ()' was called, and remove the Readline signal - handlers for all signals, depending on the values of - `rl_catch_signals' and `rl_catch_sigwinch'. - - - Function: void rl_free_line_state (void) - This will free any partial state associated with the current input - line (undo information, any partial history entry, any - partially-entered keyboard macro, and any partially-entered - numeric argument). This should be called before - `rl_cleanup_after_signal ()'. The Readline signal handler for - `SIGINT' calls this to abort the current input line. - - - Function: void rl_reset_after_signal (void) - This will reinitialize the terminal and reinstall any Readline - signal handlers, depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - If an application does not wish Readline to catch `SIGWINCH', it may -call `rl_resize_terminal ()' to force Readline to update its idea of -the terminal size when a `SIGWINCH' is received. - - - Function: void rl_resize_terminal (void) - Update Readline's internal screen size. - - The following functions install and remove Readline's signal -handlers. - - - Function: int rl_set_signals (void) - Install Readline's signal handler for `SIGINT', `SIGQUIT', - `SIGTERM', `SIGALRM', `SIGTSTP', `SIGTTIN', `SIGTTOU', and - `SIGWINCH', depending on the values of `rl_catch_signals' and - `rl_catch_sigwinch'. - - - Function: int rl_clear_signals (void) - Remove all of the Readline signal handlers installed by - `rl_set_signals ()'. - - -File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, Up: Programming with GNU Readline - -Custom Completers -================= - - Typically, a program that reads commands from the user has a way of -disambiguating commands and data. If your program is one of these, then -it can provide completion for commands, data, or both. The following -sections describe how your program and Readline cooperate to provide -this service. - -* Menu: - -* How Completing Works:: The logic used to do completion. -* Completion Functions:: Functions provided by Readline. -* Completion Variables:: Variables which control completion. -* A Short Completion Example:: An example of writing completer subroutines. - - -File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers - -How Completing Works --------------------- - - In order to complete some text, the full list of possible completions -must be available. That is, it is not possible to accurately expand a -partial word without knowing all of the possible words which make sense -in that context. The Readline library provides the user interface to -completion, and two of the most common completion functions: filename -and username. For completing other types of text, you must write your -own completion function. This section describes exactly what such -functions must do, and provides an example. - - There are three major functions used to perform completion: - - 1. The user-interface function `rl_complete ()'. This function is - called with the same arguments as other Readline functions - intended for interactive use: COUNT and INVOKING_KEY. It - isolates the word to be completed and calls `completion_matches - ()' to generate a list of possible completions. It then either - lists the possible completions, inserts the possible completions, - or actually performs the completion, depending on which behavior - is desired. - - 2. The internal function `completion_matches ()' uses your - "generator" function to generate the list of possible matches, and - then returns the array of these matches. You should place the - address of your generator function in - `rl_completion_entry_function'. - - 3. The generator function is called repeatedly from - `completion_matches ()', returning a string each time. The - arguments to the generator function are TEXT and STATE. TEXT is - the partial word to be completed. STATE is zero the first time - the function is called, allowing the generator to perform any - necessary initialization, and a positive non-zero integer for each - subsequent call. When the generator function returns `(char - *)NULL' this signals `completion_matches ()' that there are no - more possibilities left. Usually the generator function computes - the list of possible completions when STATE is zero, and returns - them one at a time on subsequent calls. Each string the generator - function returns as a match must be allocated with `malloc()'; - Readline frees the strings when it has finished with them. - - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()'). The default is to do filename - completion. - - - Variable: Function * rl_completion_entry_function - This is a pointer to the generator function for `completion_matches - ()'. If the value of `rl_completion_entry_function' is `(Function - *)NULL' then the default filename generator function, - `filename_completion_function ()', is used. - - -File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers - -Completion Functions --------------------- - - Here is the complete list of callable completion functions present in -Readline. - - - Function: int rl_complete_internal (int what_to_do) - Complete the word at or before point. WHAT_TO_DO says what to do - with the completion. A value of `?' means list the possible - completions. `TAB' means do standard completion. `*' means - insert all of the possible completions. `!' means to display all - of the possible completions, if there is more than one, as well as - performing partial completion. - - - Function: int rl_complete (int ignore, int invoking_key) - Complete the word at or before point. You have supplied the - function that does the initial simple matching selection algorithm - (see `completion_matches ()' and `rl_completion_entry_function'). - The default is to do filename completion. This calls - `rl_complete_internal ()' with an argument depending on - INVOKING_KEY. - - - Function: int rl_possible_completions (int count, int invoking_key)) - List the possible completions. See description of `rl_complete - ()'. This calls `rl_complete_internal ()' with an argument of `?'. - - - Function: int rl_insert_completions (int count, int invoking_key)) - Insert the list of possible completions into the line, deleting the - partially-completed word. See description of `rl_complete ()'. - This calls `rl_complete_internal ()' with an argument of `*'. - - - Function: char ** completion_matches (char *text, CPFunction - *entry_func) - Returns an array of `(char *)' which is a list of completions for - TEXT. If there are no completions, returns `(char **)NULL'. The - first entry in the returned array is the substitution for TEXT. - The remaining entries are the possible completions. The array is - terminated with a `NULL' pointer. - - ENTRY_FUNC is a function of two args, and returns a `(char *)'. - The first argument is TEXT. The second is a state argument; it is - zero on the first call, and non-zero on subsequent calls. - ENTRY_FUNC returns a `NULL' pointer to the caller when there are - no more matches. - - - Function: char * filename_completion_function (char *text, int state) - A generator function for filename completion in the general case. - Note that completion in Bash is a little different because of all - the pathnames that must be followed when looking up completions - for a command. The Bash source is a useful reference for writing - custom completion functions. - - - Function: char * username_completion_function (char *text, int state) - A completion generator for usernames. TEXT contains a partial - username preceded by a random character (usually `~'). As with all - completion generators, STATE is zero on the first call and non-zero - for subsequent calls. - - -File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers - -Completion Variables --------------------- - - - Variable: Function * rl_completion_entry_function - A pointer to the generator function for `completion_matches ()'. - `NULL' means to use `filename_completion_function ()', the default - filename completer. - - - Variable: CPPFunction * rl_attempted_completion_function - A pointer to an alternative function to create matches. The - function is called with TEXT, START, and END. START and END are - indices in `rl_line_buffer' saying what the boundaries of TEXT - are. If this function exists and returns `NULL', or if this - variable is set to `NULL', then `rl_complete ()' will call the - value of `rl_completion_entry_function' to generate matches, - otherwise the array of strings returned will be used. - - - Variable: CPFunction * rl_filename_quoting_function - A pointer to a function that will quote a filename in an - application- specific fashion. This is called if filename - completion is being attempted and one of the characters in - `rl_filename_quote_characters' appears in a completed filename. - The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. - The TEXT is the filename to be quoted. The MATCH_TYPE is either - `SINGLE_MATCH', if there is only one completion match, or - `MULT_MATCH'. Some functions use this to decide whether or not to - insert a closing quote character. The QUOTE_POINTER is a pointer - to any opening quote character the user typed. Some functions - choose to reset this character. - - - Variable: CPFunction * rl_filename_dequoting_function - A pointer to a function that will remove application-specific - quoting characters from a filename before completion is attempted, - so those characters do not interfere with matching the text - against names in the filesystem. It is called with TEXT, the text - of the word to be dequoted, and QUOTE_CHAR, which is the quoting - character that delimits the filename (usually `'' or `"'). If - QUOTE_CHAR is zero, the filename was not in an embedded string. - - - Variable: Function * rl_char_is_quoted_p - A pointer to a function to call that determines whether or not a - specific character in the line buffer is quoted, according to - whatever quoting mechanism the program calling readline uses. The - function is called with two arguments: TEXT, the text of the line, - and INDEX, the index of the character in the line. It is used to - decide whether a character found in - `rl_completer_word_break_characters' should be used to break words - for the completer. - - - Variable: int rl_completion_query_items - Up to this many items will be displayed in response to a - possible-completions call. After that, we ask the user if she is - sure she wants to see them all. The default value is 100. - - - Variable: char * rl_basic_word_break_characters - The basic list of characters that signal a break between words for - the completer routine. The default value of this variable is the - characters which break words for completion in Bash, i.e., `" - \t\n\"\\'`@$><=;|&{("'. - - - Variable: char * rl_basic_quote_characters - List of quote characters which can cause a word break. - - - Variable: char * rl_completer_word_break_characters - The list of characters that signal a break between words for - `rl_complete_internal ()'. The default list is the value of - `rl_basic_word_break_characters'. - - - Variable: char * rl_completer_quote_characters - List of characters which can be used to quote a substring of the - line. Completion occurs on the entire substring, and within the - substring `rl_completer_word_break_characters' are treated as any - other character, unless they also appear within this list. - - - Variable: char * rl_filename_quote_characters - A list of characters that cause a filename to be quoted by the - completer when they appear in a completed filename. The default - is the null string. - - - Variable: char * rl_special_prefixes - The list of characters that are word break characters, but should - be left in TEXT when it is passed to the completion function. - Programs can use this to help determine what kind of completing to - do. For instance, Bash sets this variable to "$@" so that it can - complete shell variables and hostnames. - - - Variable: int rl_completion_append_character - When a single completion alternative matches at the end of the - command line, this character is appended to the inserted - completion text. The default is a space character (` '). Setting - this to the null character (`\0') prevents anything being appended - automatically. This can be changed in custom completion functions - to provide the "most sensible word separator character" according - to an application-specific command line syntax specification. - - - Variable: int rl_ignore_completion_duplicates - If non-zero, then disallow duplicates in the matches. Default is - 1. - - - Variable: int rl_filename_completion_desired - Non-zero means that the results of the matches are to be treated as - filenames. This is *always* zero on entry, and can only be changed - within a completion entry generator function. If it is set to a - non-zero value, directory names have a slash appended and Readline - attempts to quote completed filenames if they contain any embedded - word break characters. - - - Variable: int rl_filename_quoting_desired - Non-zero means that the results of the matches are to be quoted - using double quotes (or an application-specific quoting mechanism) - if the completed filename contains any characters in - `rl_filename_quote_chars'. This is *always* non-zero on entry, - and can only be changed within a completion entry generator - function. The quoting is effected via a call to the function - pointed to by `rl_filename_quoting_function'. - - - Variable: int rl_inhibit_completion - If this variable is non-zero, completion is inhibit<ed. The - completion character will be inserted as any other bound to - `self-insert'. - - - Variable: Function * rl_ignore_some_completions_function - This function, if defined, is called by the completer when real - filename completion is done, after all the matching names have - been generated. It is passed a `NULL' terminated array of matches. - The first element (`matches[0]') is the maximal substring common - to all matches. This function can re-arrange the list of matches - as required, but each element deleted from the array must be freed. - - - Variable: Function * rl_directory_completion_hook - This function, if defined, is allowed to modify the directory - portion of filenames Readline completes. It is called with the - address of a string (the current directory name) as an argument. - It could be used to expand symbolic links or shell variables in - pathnames. - - - Variable: VFunction * rl_completion_display_matches_hook - If non-zero, then this is the address of a function to call when - completing a word would normally display the list of possible - matches. This function is called in lieu of Readline displaying - the list. It takes three arguments: (`char **'MATCHES, `int' - NUM_MATCHES, `int' MAX_LENGTH) where MATCHES is the array of - matching strings, NUM_MATCHES is the number of strings in that - array, and MAX_LENGTH is the length of the longest string in that - array. Readline provides a convenience function, - `rl_display_match_list', that takes care of doing the display to - Readline's output stream. That function may be called from this - hook. - - -File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers - -A Short Completion Example --------------------------- - - Here is a small application demonstrating the use of the GNU Readline -library. It is called `fileman', and the source code resides in -`examples/fileman.c'. This sample application provides completion of -command names, line editing features, and access to the history list. - - /* fileman.c -- A tiny application which demonstrates how to use the - GNU Readline library. This application interactively allows users - to manipulate files and their modes. */ - - #include <stdio.h> - #include <sys/types.h> - #include <sys/file.h> - #include <sys/stat.h> - #include <sys/errno.h> - - #include <readline/readline.h> - #include <readline/history.h> - - extern char *getwd (); - extern char *xmalloc (); - - /* The names of functions that actually do the manipulation. */ - int com_list (), com_view (), com_rename (), com_stat (), com_pwd (); - int com_delete (), com_help (), com_cd (), com_quit (); - - /* A structure which contains information on the commands this program - can understand. */ - - typedef struct { - char *name; /* User printable name of the function. */ - Function *func; /* Function to call to do the job. */ - char *doc; /* Documentation for this function. */ - } COMMAND; - - COMMAND commands[] = { - { "cd", com_cd, "Change to directory DIR" }, - { "delete", com_delete, "Delete FILE" }, - { "help", com_help, "Display this text" }, - { "?", com_help, "Synonym for `help'" }, - { "list", com_list, "List files in DIR" }, - { "ls", com_list, "Synonym for `list'" }, - { "pwd", com_pwd, "Print the current working directory" }, - { "quit", com_quit, "Quit using Fileman" }, - { "rename", com_rename, "Rename FILE to NEWNAME" }, - { "stat", com_stat, "Print out statistics on FILE" }, - { "view", com_view, "View the contents of FILE" }, - { (char *)NULL, (Function *)NULL, (char *)NULL } - }; - - /* Forward declarations. */ - char *stripwhite (); - COMMAND *find_command (); - - /* The name of this program, as taken from argv[0]. */ - char *progname; - - /* When non-zero, this global means the user is done using this program. */ - int done; - - char * - dupstr (s) - int s; - { - char *r; - - r = xmalloc (strlen (s) + 1); - strcpy (r, s); - return (r); - } - - main (argc, argv) - int argc; - char **argv; - { - char *line, *s; - - progname = argv[0]; - - initialize_readline (); /* Bind our completer. */ - - /* Loop reading and executing lines until the user quits. */ - for ( ; done == 0; ) - { - line = readline ("FileMan: "); - - if (!line) - break; - - /* Remove leading and trailing whitespace from the line. - Then, if there is anything left, add it to the history list - and execute it. */ - s = stripwhite (line); - - if (*s) - { - add_history (s); - execute_line (s); - } - - free (line); - } - exit (0); - } - - /* Execute a command line. */ - int - execute_line (line) - char *line; - { - register int i; - COMMAND *command; - char *word; - - /* Isolate the command word. */ - i = 0; - while (line[i] && whitespace (line[i])) - i++; - word = line + i; - - while (line[i] && !whitespace (line[i])) - i++; - - if (line[i]) - line[i++] = '\0'; - - command = find_command (word); - - if (!command) - { - fprintf (stderr, "%s: No such command for FileMan.\n", word); - return (-1); - } - - /* Get argument to command, if any. */ - while (whitespace (line[i])) - i++; - - word = line + i; - - /* Call the function. */ - return ((*(command->func)) (word)); - } - - /* Look up NAME as the name of a command, and return a pointer to that - command. Return a NULL pointer if NAME isn't a command name. */ - COMMAND * - find_command (name) - char *name; - { - register int i; - - for (i = 0; commands[i].name; i++) - if (strcmp (name, commands[i].name) == 0) - return (&commands[i]); - - return ((COMMAND *)NULL); - } - - /* Strip whitespace from the start and end of STRING. Return a pointer - into STRING. */ - char * - stripwhite (string) - char *string; - { - register char *s, *t; - - for (s = string; whitespace (*s); s++) - ; - - if (*s == 0) - return (s); - - t = s + strlen (s) - 1; - while (t > s && whitespace (*t)) - t--; - *++t = '\0'; - - return s; - } - - /* **************************************************************** */ - /* */ - /* Interface to Readline Completion */ - /* */ - /* **************************************************************** */ - - char *command_generator (); - char **fileman_completion (); - - /* Tell the GNU Readline library how to complete. We want to try to complete - on command names if this is the first word in the line, or on filenames - if not. */ - initialize_readline () - { - /* Allow conditional parsing of the ~/.inputrc file. */ - rl_readline_name = "FileMan"; - - /* Tell the completer that we want a crack first. */ - rl_attempted_completion_function = (CPPFunction *)fileman_completion; - } - - /* Attempt to complete on the contents of TEXT. START and END bound the - region of rl_line_buffer that contains the word to complete. TEXT is - the word to complete. We can use the entire contents of rl_line_buffer - in case we want to do some simple parsing. Return the array of matches, - or NULL if there aren't any. */ - char ** - fileman_completion (text, start, end) - char *text; - int start, end; - { - char **matches; - - matches = (char **)NULL; - - /* If this word is at the start of the line, then it is a command - to complete. Otherwise it is the name of a file in the current - directory. */ - if (start == 0) - matches = completion_matches (text, command_generator); - - return (matches); - } - - /* Generator function for command completion. STATE lets us know whether - to start from scratch; without any state (i.e. STATE == 0), then we - start at the top of the list. */ - char * - command_generator (text, state) - char *text; - int state; - { - static int list_index, len; - char *name; - - /* If this is a new word to complete, initialize now. This includes - saving the length of TEXT for efficiency, and initializing the index - variable to 0. */ - if (!state) - { - list_index = 0; - len = strlen (text); - } - - /* Return the next name which partially matches from the command list. */ - while (name = commands[list_index].name) - { - list_index++; - - if (strncmp (name, text, len) == 0) - return (dupstr(name)); - } - - /* If no names matched, then return NULL. */ - return ((char *)NULL); - } - - /* **************************************************************** */ - /* */ - /* FileMan Commands */ - /* */ - /* **************************************************************** */ - - /* String to pass to system (). This is for the LIST, VIEW and RENAME - commands. */ - static char syscom[1024]; - - /* List the file(s) named in arg. */ - com_list (arg) - char *arg; - { - if (!arg) - arg = ""; - - sprintf (syscom, "ls -FClg %s", arg); - return (system (syscom)); - } - - com_view (arg) - char *arg; - { - if (!valid_argument ("view", arg)) - return 1; - - sprintf (syscom, "more %s", arg); - return (system (syscom)); - } - - com_rename (arg) - char *arg; - { - too_dangerous ("rename"); - return (1); - } - - com_stat (arg) - char *arg; - { - struct stat finfo; - - if (!valid_argument ("stat", arg)) - return (1); - - if (stat (arg, &finfo) == -1) - { - perror (arg); - return (1); - } - - printf ("Statistics for `%s':\n", arg); - - printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, - finfo.st_nlink, - (finfo.st_nlink == 1) ? "" : "s", - finfo.st_size, - (finfo.st_size == 1) ? "" : "s"); - printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); - printf (" Last access at: %s", ctime (&finfo.st_atime)); - printf (" Last modified at: %s", ctime (&finfo.st_mtime)); - return (0); - } - - com_delete (arg) - char *arg; - { - too_dangerous ("delete"); - return (1); - } - - /* Print out help for ARG, or for all of the commands if ARG is - not present. */ - com_help (arg) - char *arg; - { - register int i; - int printed = 0; - - for (i = 0; commands[i].name; i++) - { - if (!*arg || (strcmp (arg, commands[i].name) == 0)) - { - printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); - printed++; - } - } - - if (!printed) - { - printf ("No commands match `%s'. Possibilties are:\n", arg); - - for (i = 0; commands[i].name; i++) - { - /* Print in six columns. */ - if (printed == 6) - { - printed = 0; - printf ("\n"); - } - - printf ("%s\t", commands[i].name); - printed++; - } - - if (printed) - printf ("\n"); - } - return (0); - } - - /* Change to the directory ARG. */ - com_cd (arg) - char *arg; - { - if (chdir (arg) == -1) - { - perror (arg); - return 1; - } - - com_pwd (""); - return (0); - } - - /* Print out the current working directory. */ - com_pwd (ignore) - char *ignore; - { - char dir[1024], *s; - - s = getwd (dir); - if (s == 0) - { - printf ("Error getting pwd: %s\n", dir); - return 1; - } - - printf ("Current directory is %s\n", dir); - return 0; - } - - /* The user wishes to quit using this program. Just set DONE non-zero. */ - com_quit (arg) - char *arg; - { - done = 1; - return (0); - } - - /* Function which tells you that you can't do this. */ - too_dangerous (caller) - char *caller; - { - fprintf (stderr, - "%s: Too dangerous for me to distribute. Write it yourself.\n", - caller); - } - - /* Return non-zero if ARG is a valid argument for CALLER, else print - an error message and return zero. */ - int - valid_argument (caller, arg) - char *caller, *arg; - { - if (!arg || !*arg) - { - fprintf (stderr, "%s: Argument required.\n", caller); - return (0); - } - - return (1); - } - - -File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: Programming with GNU Readline, Up: Top - -Concept Index -************* - -* Menu: - -* command editing: Readline Bare Essentials. -* editing command lines: Readline Bare Essentials. -* initialization file, readline: Readline Init File. -* interaction, readline: Readline Interaction. -* kill ring: Readline Killing Commands. -* killing text: Readline Killing Commands. -* notation, readline: Readline Bare Essentials. -* readline, function: Basic Behavior. -* yanking text: Readline Killing Commands. - - -File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top - -Function and Variable Index -*************************** - -* Menu: - -* abort (C-g): Miscellaneous Commands. -* accept-line (Newline, Return): Commands For History. -* alphabetic: Utility Functions. -* backward-char (C-b): Commands For Moving. -* backward-delete-char (Rubout): Commands For Text. -* backward-kill-line (C-x Rubout): Commands For Killing. -* backward-kill-word (M-DEL): Commands For Killing. -* backward-word (M-b): Commands For Moving. -* beginning-of-history (M-<): Commands For History. -* beginning-of-line (C-a): Commands For Moving. -* bell-style: Readline Init File Syntax. -* call-last-kbd-macro (C-x e): Keyboard Macros. -* capitalize-word (M-c): Commands For Text. -* character-search (C-]): Miscellaneous Commands. -* character-search-backward (M-C-]): Miscellaneous Commands. -* clear-screen (C-l): Commands For Moving. -* comment-begin: Readline Init File Syntax. -* complete (TAB): Commands For Completion. -* completion-query-items: Readline Init File Syntax. -* completion_matches: Completion Functions. -* convert-meta: Readline Init File Syntax. -* copy-backward-word (): Commands For Killing. -* copy-forward-word (): Commands For Killing. -* copy-region-as-kill (): Commands For Killing. -* delete-char (C-d): Commands For Text. -* delete-char-or-list (): Commands For Completion. -* delete-horizontal-space (): Commands For Killing. -* digit-argument (M-0, M-1, ... M--): Numeric Arguments. -* digit_p: Utility Functions. -* digit_value: Utility Functions. -* ding: Utility Functions. -* disable-completion: Readline Init File Syntax. -* do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. -* downcase-word (M-l): Commands For Text. -* dump-functions (): Miscellaneous Commands. -* dump-macros (): Miscellaneous Commands. -* dump-variables (): Miscellaneous Commands. -* editing-mode: Readline Init File Syntax. -* enable-keypad: Readline Init File Syntax. -* end-kbd-macro (C-x )): Keyboard Macros. -* end-of-history (M->): Commands For History. -* end-of-line (C-e): Commands For Moving. -* exchange-point-and-mark (C-x C-x): Miscellaneous Commands. -* expand-tilde: Readline Init File Syntax. -* filename_completion_function: Completion Functions. -* forward-backward-delete-char (): Commands For Text. -* forward-char (C-f): Commands For Moving. -* forward-search-history (C-s): Commands For History. -* forward-word (M-f): Commands For Moving. -* free_undo_list: Allowing Undoing. -* history-search-backward (): Commands For History. -* history-search-forward (): Commands For History. -* horizontal-scroll-mode: Readline Init File Syntax. -* input-meta: Readline Init File Syntax. -* insert-comment (M-#): Miscellaneous Commands. -* insert-completions (M-*): Commands For Completion. -* isearch-terminators: Readline Init File Syntax. -* keymap: Readline Init File Syntax. -* kill-line (C-k): Commands For Killing. -* kill-region (): Commands For Killing. -* kill-whole-line (): Commands For Killing. -* kill-word (M-d): Commands For Killing. -* lowercase_p: Utility Functions. -* mark-modified-lines: Readline Init File Syntax. -* menu-complete (): Commands For Completion. -* meta-flag: Readline Init File Syntax. -* next-history (C-n): Commands For History. -* non-incremental-forward-search-history (M-n): Commands For History. -* non-incremental-reverse-search-history (M-p): Commands For History. -* numeric: Utility Functions. -* output-meta: Readline Init File Syntax. -* possible-completions (M-?): Commands For Completion. -* prefix-meta (ESC): Miscellaneous Commands. -* previous-history (C-p): Commands For History. -* quoted-insert (C-q, C-v): Commands For Text. -* re-read-init-file (C-x C-r): Miscellaneous Commands. -* readline: Basic Behavior. -* redraw-current-line (): Commands For Moving. -* reverse-search-history (C-r): Commands For History. -* revert-line (M-r): Miscellaneous Commands. -* rl_add_defun: Function Naming. -* rl_add_undo: Allowing Undoing. -* rl_already_prompted: Readline Variables. -* rl_attempted_completion_function: Completion Variables. -* rl_basic_quote_characters: Completion Variables. -* rl_basic_word_break_characters: Completion Variables. -* rl_begin_undo_group: Allowing Undoing. -* rl_bind_key: Binding Keys. -* rl_bind_key_in_map: Binding Keys. -* rl_binding_keymap: Readline Variables. -* rl_callback_handler_install: Alternate Interface. -* rl_callback_handler_remove: Alternate Interface. -* rl_callback_read_char: Alternate Interface. -* rl_catch_signals: Readline Signal Handling. -* rl_catch_sigwinch: Readline Signal Handling. -* rl_char_is_quoted_p: Completion Variables. -* rl_cleanup_after_signal: Readline Signal Handling. -* rl_clear_message: Redisplay. -* rl_clear_signals: Readline Signal Handling. -* rl_complete <1>: Completion Functions. -* rl_complete: How Completing Works. -* rl_complete_internal: Completion Functions. -* rl_completer_quote_characters: Completion Variables. -* rl_completer_word_break_characters: Completion Variables. -* rl_completion_append_character: Completion Variables. -* rl_completion_display_matches_hook: Completion Variables. -* rl_completion_entry_function <1>: Completion Variables. -* rl_completion_entry_function: How Completing Works. -* rl_completion_query_items: Completion Variables. -* rl_copy_keymap: Keymaps. -* rl_copy_text: Modifying Text. -* rl_delete_text: Modifying Text. -* rl_directory_completion_hook: Completion Variables. -* rl_discard_keymap: Keymaps. -* rl_display_match_list: Utility Functions. -* rl_do_undo: Allowing Undoing. -* rl_done: Readline Variables. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_erase_empty_line: Readline Variables. -* rl_event_hook: Readline Variables. -* rl_executing_keymap: Readline Variables. -* rl_extend_line_buffer: Utility Functions. -* rl_filename_completion_desired: Completion Variables. -* rl_filename_dequoting_function: Completion Variables. -* rl_filename_quote_characters: Completion Variables. -* rl_filename_quoting_desired: Completion Variables. -* rl_filename_quoting_function: Completion Variables. -* rl_forced_update_display: Redisplay. -* rl_free_line_state: Readline Signal Handling. -* rl_function_dumper: Associating Function Names and Bindings. -* rl_function_of_keyseq: Associating Function Names and Bindings. -* rl_funmap_names: Associating Function Names and Bindings. -* rl_generic_bind: Binding Keys. -* rl_get_keymap: Keymaps. -* rl_get_keymap_by_name: Keymaps. -* rl_get_keymap_name: Keymaps. -* rl_getc: Utility Functions. -* rl_getc_function: Readline Variables. -* rl_ignore_completion_duplicates: Completion Variables. -* rl_ignore_some_completions_function: Completion Variables. -* rl_inhibit_completion: Completion Variables. -* rl_initialize: Utility Functions. -* rl_insert_completions: Completion Functions. -* rl_insert_text: Modifying Text. -* rl_instream: Readline Variables. -* rl_invoking_keyseqs: Associating Function Names and Bindings. -* rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. -* rl_kill_text: Modifying Text. -* rl_library_version: Readline Variables. -* rl_line_buffer: Readline Variables. -* rl_list_funmap_names: Associating Function Names and Bindings. -* rl_make_bare_keymap: Keymaps. -* rl_make_keymap: Keymaps. -* rl_mark: Readline Variables. -* rl_message: Redisplay. -* rl_modifying: Allowing Undoing. -* rl_named_function: Associating Function Names and Bindings. -* rl_on_new_line: Redisplay. -* rl_on_new_line_with_prompt: Redisplay. -* rl_outstream: Readline Variables. -* rl_parse_and_bind: Binding Keys. -* rl_pending_input: Readline Variables. -* rl_point: Readline Variables. -* rl_possible_completions: Completion Functions. -* rl_pre_input_hook: Readline Variables. -* rl_prompt: Readline Variables. -* rl_read_init_file: Binding Keys. -* rl_read_key: Utility Functions. -* rl_readline_name: Readline Variables. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_reset_after_signal: Readline Signal Handling. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Utility Functions. -* rl_resize_terminal: Readline Signal Handling. -* rl_restore_prompt: Redisplay. -* rl_save_prompt: Redisplay. -* rl_set_keymap: Keymaps. -* rl_set_signals: Readline Signal Handling. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Utility Functions. -* rl_terminal_name: Readline Variables. -* rl_unbind_command_in_map: Binding Keys. -* rl_unbind_function_in_map: Binding Keys. -* rl_unbind_key: Binding Keys. -* rl_unbind_key_in_map: Binding Keys. -* self-insert (a, b, A, 1, !, ...): Commands For Text. -* set-mark (C-@): Miscellaneous Commands. -* show-all-if-ambiguous: Readline Init File Syntax. -* start-kbd-macro (C-x (): Keyboard Macros. -* to_lower: Utility Functions. -* to_upper: Utility Functions. -* transpose-chars (C-t): Commands For Text. -* transpose-words (M-t): Commands For Text. -* undo (C-_, C-x C-u): Miscellaneous Commands. -* universal-argument (): Numeric Arguments. -* unix-line-discard (C-u): Commands For Killing. -* unix-word-rubout (C-w): Commands For Killing. -* upcase-word (M-u): Commands For Text. -* uppercase_p: Utility Functions. -* username_completion_function: Completion Functions. -* visible-stats: Readline Init File Syntax. -* yank (C-y): Commands For Killing. -* yank-last-arg (M-., M-_): Commands For History. -* yank-nth-arg (M-C-y): Commands For History. -* yank-pop (M-y): Commands For Killing. - - - -Tag Table: -Node: Top1190 -Node: Command Line Editing1789 -Node: Introduction and Notation2440 -Node: Readline Interaction4058 -Node: Readline Bare Essentials5251 -Node: Readline Movement Commands7032 -Node: Readline Killing Commands7989 -Node: Readline Arguments9895 -Node: Searching10870 -Node: Readline Init File12713 -Node: Readline Init File Syntax13774 -Node: Conditional Init Constructs23039 -Node: Sample Init File25478 -Node: Bindable Readline Commands28648 -Node: Commands For Moving29692 -Node: Commands For History30541 -Node: Commands For Text33258 -Node: Commands For Killing35261 -Node: Numeric Arguments37228 -Node: Commands For Completion38355 -Node: Keyboard Macros40103 -Node: Miscellaneous Commands40662 -Node: Readline vi Mode43466 -Node: Programming with GNU Readline45236 -Node: Basic Behavior46204 -Node: Custom Functions49530 -Node: The Function Type50508 -Node: Function Writing51353 -Node: Readline Variables52437 -Node: Readline Convenience Functions56649 -Node: Function Naming57387 -Node: Keymaps58615 -Node: Binding Keys60329 -Node: Associating Function Names and Bindings62903 -Node: Allowing Undoing64746 -Node: Redisplay67331 -Node: Modifying Text69108 -Node: Utility Functions70019 -Node: Alternate Interface72799 -Node: Readline Signal Handling76093 -Node: Custom Completers81139 -Node: How Completing Works81854 -Node: Completion Functions84850 -Node: Completion Variables87865 -Node: A Short Completion Example95768 -Node: Concept Index108074 -Node: Function and Variable Index108828 - -End Tag Table diff --git a/gnu/lib/libreadline/doc/readline.ps b/gnu/lib/libreadline/doc/readline.ps deleted file mode 100644 index c16dca605bd..00000000000 --- a/gnu/lib/libreadline/doc/readline.ps +++ /dev/null @@ -1,4570 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: readline.dvi -%%Pages: 56 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o readline.ps readline.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2000.03.01:1453 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi) -@start -%DVIPSBitmapFont: Fa cmti10 10.95 1 -/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbxti10 14.4 1 -/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmmi9 9 1 -/Fc 1 59 df<126012F0A2126004047D830B>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmtt9 9 53 -/Fd 53 127 df<126012F0AD12601200A4126012F0A212600417789614>33 -D<EA071CA5B51280A27E380E3800A7387FFF80B5FCA2381C7000A511177F9614>35 -D<EA01801203EA06005A121C121812385AA35AA91270A37E1218121C120C7EEA03801201 -091D799914>40 D<128012C01260123012381218121C120EA31207A9120EA3121C121812 -381230126012C01280081D7C9914>I<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2 -EA3FF8EA7FFCEAF39EEA638CEA0380A30F107E9214>I<127012F812FCA2127C120C1218 -123012E012C0060A798414>44 D<EAFFFEA30F037E8C14>I<127012F8A3127005057984 -14>I<EA07C0EA0FE0EA1C70EA3838EA3018EA701CA2EAE00EA9EA701CA2EA3838A2EA1C -70EA0FE0EA07C00F177E9614>48 D<1203A25A5A123F12F712471207AEEA7FF0A20C177C -9614>I<1306131E133E13F8EA01F0EA03C0EA0F80EA1F00123C12F85A7E123C121FEA0F -80EA03C0EA01F0EA00F8133E131E13060F157E9514>60 D<12C012F07E123E7EEA0780EA -03E0EA01F0EA0078133E131E133E1378EA01F0EA03E0EA0780EA1F00123E12F85A12C00F -157E9514>62 D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A4 -1300C7FCA41203EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC -1271EA731E1277EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F -177E9614>I<EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2 -487EA238FE3F80A211177F9614>I<EAFFF013FCEA381E130E1307A4130E131EEA3FFCA2 -EA381E130E1307A5130E131EEAFFFC13F810177F9614>I<3801F180EA07FFEA0E1FEA1C -071238EA7003A348C7FCA738700380A338380700121CEA0E0EEA07FCEA01F011177F9614 ->I<EAFFE013F8EA383C7F130E7FA3EB0380A8EB0700A2130E131E5BEAFFF813E011177F -9614>I<B5FCA2EA3807A490C7FCA21338A2EA3FF8A2EA3838A290C7FCA3EB0380A4B5FC -A211177F9614>I<B4FCA21238AF1307A4B5FCA210177E9614>76 -D<38FC1F80A2007C1300EA7637A4EA7777A2EA7367A313E7EA71C7A2EA7007A638F80F80 -A211177F9614>I<38FE3F80A2383E0E00123BA4138E1239A213CEA31238A213EE136EA4 -133E12FEA211177F9614>I<EAFFE013F8EA383C131C7FA45B133CEA3FF85BEA38387FA5 -1480EB1DC0A238FE0F80EB070012177F9614>82 D<EA0FCCEA1FFCEA307CEA603CEAE01C -A313001270127EEA3FE0EA0FF0EA01F8EA001C131E130E126012E0A2EAF01CEAF838EAFF -F0EAC7E00F177E9614>I<387FFF80B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I< -EAFFE0A21200B3A712FFA20B1D7F9914>93 D<EAFFFEA30F037E7E14>95 -D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3EA707C383FFF -80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C1380EB01C0 -A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C0EEA3804 -EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<137EA2130E -A5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA07CF1217 -7F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012601270EA -380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300A3EA7FFE12 -FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA701CA3EA30 -18EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A438700700EA3C -1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E07121CAA38FF -8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D187C9714>I< -12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C131C7F38FF -1F80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB8EEAFFDF38 -3CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA1E07121CAA -38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA701CEA783CEA -3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380EB01C0A6EB -0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03E7EA0FF7EA -1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0A213187F8F -14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F14>I<EA0FD8 -EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012F0EAF81CEAFF -F8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131CEA07F8EA01F0 -0F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I<38FE3F80A238 -3C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F80A238700700 -EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E3FA2EA1E3CEA -0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A211107F8F14>I<38 -FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA3485A12730077C7 -FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0EA01C0EA0380EA07 -00120EEA1C0712381270B5FCA210107F8F14>I<EA1C10EA3F38EAE7E0EA41C00D047D96 -14>126 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmsl9 9 2 -/Fe 2 121 df<1270A212F0126004047D830B>46 D<383FC7E038078380EB0200EA0384 -13C8EA01D8EA00F05B7F120113381202487EEA081E123838FC3FC013107F8F14>120 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmr9 9 39 -/Ff 39 123 df<13FEEA038138060180EA0E03381C010090C7FCA5B51280EA1C03AE38FF -8FF0141A809915>12 D<EBFF80EA0383EA0603120E121CA6B5FCEA1C03AE38FF9FF0141A -809915>I<126012F0A212701210A31220A21240A2040B7D830B>44 -D<EAFFC0A20A0280880D>I<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA -6006A2EA700EEA300CEA381CEA1C38EA07E010187F9713>48 D<12035AB4FC1207B3A2EA -7FF80D187D9713>I<EA0F80EA1060EA2030EA4038EA803CEAC01C12E01240EA003C1338 -A21370136013C0EA018013001202EA040412081210EA3008EA3FF8127F12FF0E187E9713 ->I<EA07E0EA1838EA201CEA601EEA700EEA201E1200131CA213381370EA07E0EA003813 -1C130E130FA212E0A212C0EA400EEA601CEA1838EA07E010187F9713>I<1318A2133813 -7813F813B8EA01381202A212041208121812101220124012C0B5FCEA0038A6EA03FF1018 -7F9713>I<EA3018EA3FF013E01380EA2000A5EA2FC0EA3060EA2030EA00381318131CA2 -124012E0A2EA8018EA40381330EA30E0EA0F800E187E9713>I<EA01F8EA0704EA0C06EA -180E123013001270126012E0EAE3E0EAE418EAE80CEAF00EEAE0061307A31260A2EA7006 -EA300EEA180CEA0C38EA07E010187F9713>I<1240EA7FFF13FEA2EA4004EA80081310A2 -EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>I<EA07E0EA1818 -EA300CEA20061260A21270EA780CEA3E18EA1F30EA07C0EA03E0EA0CF8EA307CEA601E13 -0FEAC0071303A3EA6002EA2004EA1818EA07E010187F9713>I<EA07E0EA1C30EA3018EA -700CEA600EEAE006A21307A31260EA700FEA3017EA1827EA07C7EA00071306130E130C12 -701318EA6030EA3060EA0F8010187F9713>I<EA1FC0EA38707FEA101C1200A2EA03FCEA -1E1C1238127012E01480A2133CEA705F381F8F0011107F8F13>97 -D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C01480381E0300EA1906 -EA10F8131A809915>I<EA07F8EA1C1C1238EA700813005AA612701304EA3808EA1C18EA -07E00E107F8F11>I<133F1307A9EA03E7EA0C17EA180F487E127012E0A6126012706C5A -EA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA600C12E0EAFFFCEAE000 -A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA01F0EA0718EA0E38EA1C101300 -A6EAFFC0EA1C00AEEAFF800D1A80990C>I<EA0FCF3818718038303000EA7038A4EA3030 -6C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA6006EA381CEA07E011 -187F8F13>I<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I<1218 -123CA212181200A612FC121CAE12FF081A80990A>I<12FC121CA9EB1FC0EB0F00130C5B -13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A809914>107 -D<12FC121CB3A6EAFF80091A80990A>I<38FC7C1F391D8E6380391E0781C0A2001C1301 -AB39FF9FE7F81D107F8F20>I<EAFC7CEA1D87381E0380A2121CAB38FF9FF01410808F15> -I<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA700EEA381CEA1C38EA07E010 -107F8F13>I<EAFCFCEA1D07381E0380381C01C0A2EB00E0A6EB01C01480381E0300EA1D -06EA1CF890C7FCA6B47E1317808F15>I<EA03E1EA0C13EA180BEA300FEA700712E0A612 -70A26C5AEA1C37EA07C7EA0007A6EB3FE013177F8F14>I<EAFC78EA1D9CEA1E1C1308EA -1C00ABEAFF800E10808F0F>I<EA1F20EA60E0EA402012C0A2EAF000127FEA3FC0EA1FE0 -EA00F0EA8070133012C01320EAF040EA8F800C107F8F0F>I<1208A41218A21238EAFFC0 -EA3800A81320A41218EA1C40EA07800B177F960F>I<38FC1F80EA1C03AB1307120CEA0E -0B3803F3F01410808F15>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2 -EA01C0A36C5A11107F8F14>I<39FE7F1F8039381C0700003C1306381C0C04130E380E16 -081317A238072310149013A33803C1A014E0380180C0A319107F8F1C>I<38FE3F80383C -1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181CEA381E38FC3FC0 -12107F8F14>I<38FF0F80383C0700EA1C061304A26C5AA26C5AA3EA03A0A2EA01C0A36C -5AA248C7FCA212E112E212E4127811177F8F14>I<EAFFF8EAE07012C0EA80E0EA81C0A2 -EA0380EA0700A2EA0E04121CA2EA380812701338EAFFF80E107F8F11>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmss10 10.95 2 -/Fg 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012F0 -AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmbx10 12 27 -/Fh 27 123 df<90380FF83F90397FFDFFC03A01FC1FE3E03903F03FC7EA07E0D80FC013 -87ED83C091381F8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 -D<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2ECFF80B6FCA2 -380FC01FB2397FF8FFF0A21C237FA220>I<EA07FE381FFF80383F07E06D7E130180121E -1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA7C02EA7E0C391FF87F803807E03F1916 -7E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF03EEBC01F9038800F8015C0140715E0A7 -15C0A2140F15809038C01F00381E707E381C3FFC38180FE01B237EA220>I<EBFF800007 -13E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6127C127EA2003E13186C133038 -0FC0603807FFC0C6130015167E9519>I<49B4FCA2EB003FAB13FE3807FFBF380FC1FF48 -C67E003E7F127E127CA212FCA7127C127E123E6C5B380F81FF3907FF3FE0EA01FC1B237E -A220>I<13FE3807FF80380F83C0381E01E0383E00F0127E007C13F8147812FCB512F8A2 -00FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0C6130015167E951A>I<EB1F80 -EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC000A6EAFFFEA2EA0FC0B2EA7FFCA21423 -7EA212>I<9038FE0F803903FF9FC0380F83E3381F01F3391E00F000003E7FA5001E5BEA -1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C381FFFE014FC6C13FF7E001F1480 -397C001FC00078130F00F81307A3007CEB0F806CEB1F00381F807E6CB45A000113E01A21 -7F951D>I<B47EA2121FABEB83F0EB8FFCEB987EEBA03EEBC03FA21380AE39FFF1FFE0A2 -1B237DA220>I<121E123FEA7F80A4EA3F00121EC7FCA6EAFF80A2121FB2EAFFF0A20C24 -7EA30F>I<B47EA2121FABECFF80A2EC3C00143014E0EB81C00183C7FC1386139E13BE13 -FFEBDF80EB8FC01307806D7E6D7E130080147E39FFE1FFC0A21A237EA21E>107 -D<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F803F890390FFE0FFE3A1F183F -183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0A22C167D9531>I<38 -FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B167D9520>I<13FF00 -0713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C133E007E137E003E137C -6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBFFC381FF07EEBC01F90 -38800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEBBFFCEB8FE00180C7FC -A8EAFFF0A21B207E9520>I<EBFE033807FF07380FC1CF381F00DF48137F007E7FA2127C -12FCA7127EA2003E5B6C5BEA0FC13807FF3FEA00FC1300A8903801FFE0A21B207E951E> -I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8A214167E9518>I<38 -07F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C7E6C1380120738003F -C0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E9517>I<487EA41203A2 -1207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FEEA01F811207F9F16> -I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B167D9520>I<39FFF01F -E0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0EB -7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FCA23A1F807C00E0D80F -C014C08001E013010007017F1380A2D803F0EB0300ECCF8301F81387D801F913C61487D8 -00FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026167F9529>I<39FFF0 -7FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7FC7F6D7E497EEB37E0 -EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B167F951E>I<39FFF0 -1FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5AA26C6C5AA2EBFEE0 -EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305BEA69C0EA7F80001FC8 -FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E0138038C03F005B137EC6 -5A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA7E03B5FCA214167E95 -19>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmtt10 12 24 -/Fi 24 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA07FCEA1F -FF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 D<EB7C38EA01FF000713F8EA -0F83EA1E00001C13785A14385AA214005AA812701438A27EA26C1370001E13F0380F83E0 -3807FFC00001138038007C00151E7E9D1A>67 D<B512F8A3381C0038A51400A2130EA3EA -1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69 D<387FFFFCB5FC7E380E00 -1CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012FF127F161E7F9D1A>I<B5 -1280A33801C000B3A6B51280A3111E7C9D1A>73 D<387F03F838FF87FC387F03F8381C01 -E0EB03C01480EB07005B131E131C5B13785B7F121DEA1FDC139C130EEA1E0F7F001C1380 -1303EB01C0A2EB00E0A21470007F13FC38FF81FE387F00FC171E7F9D1A>75 -D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E161E7F9D1A>I<EAFFFEEBFF80 -14C0381C03E0EB00F0147014781438A41478147014F0EB03E0381FFFC01480EBFE00001C -C7FCA9B47EA3151E7E9D1A>80 D<38FF01FEA3381C0070A3001E13F0000E13E0A3380701 -C0A438038380A43801C700A4EA00C613EEA3136C137CA21338171E7F9D1A>86 -D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803127012 -E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 D<EBFF80000313C0000F13 -E0EA1F01383C00C04813001270A25AA51270A2007813707E381F01F0380FFFE0000313C0 -3800FE0014157D941A>99 D<EB1FC0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA78 -03EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<EA01 -F8EA07FF481380381E07C0EA3C01387800E01270481370A2B512F0A300E0C7FC1270A200 -7813707E381F01F0380FFFE0000313803800FE0014157D941A>I<12FEA3120EA6133EEB -FF80000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I< -387CE0E038FFFBF8EA7FFF381F1F1CEA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F -00191580941A>109 D<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FFE3FE13E7 -13E317157F941A>I<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA700138E000E0 -A6EAF001007013C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F013157D941A>I<EA -FE3EEBFF80B512E0380FC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EB -FFC0000E1380EB3E0090C7FCA8EAFFE0A316207F941A>I<387F81F838FF8FFC387F9FFE -3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC7E17157F941A>114 -D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF6C1380EB3F00141C7F -9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00FC17157F941A>I<387F -C7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A33801C700A3EA00EEA3137C -A2133817157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A27EEB01C013811203EB -8380EA01C3A2EBC700EA00E7A213E61366136E133CA31338A3137813701230EA78E01271 -EA7FC06C5A001EC7FC17207F941A>121 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmmi10 10.95 1 -/Fj 1 59 df<127012F8A3127005057C840D>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmsltt10 10.95 6 -/Fk 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07 -C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C -0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E -00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6 -38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E -A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303 -3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 13.14 52 -/Fl 52 122 df<123C127E12FFA4127E123C08087C8711>46 D<EB7F803803FFF03807E1 -F8380F807C48487E48133F003E7F007E1480A400FE14C0AD007E1480A46CEB3F00A26C13 -3E6C6C5A3807E1F86CB45A38007F801A237EA21F>48 D<131C133C13FC12FFA21200B3AA -387FFFFCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12 -FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B -1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F> -I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB -03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FE -A214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A2 -14F81301130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A1218 -5A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEB -FFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FC -C7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE -0018237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F005AA200 -7E133C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4003E137E -123F6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C003FB512 -C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133C -A25BA213F8A41201A66C5A13601A257DA41F>I<EBFF80000313E0380F01F8381C007C48 -133C141E1278A2127C127E387F803C13E0383FF878381FFDF0EBFFC07E000313E014F800 -0F13FCEA1E1F383C07FEEA7803EB00FF48133F141F140FA3140E1278141C6C1338381F80 -F03807FFE00001130018237DA21F>I<13FF000313C0380F83E0381F00F04813F8007E13 -7CA2147E12FEA3147FA4127E14FF123EEA3F01001F137FEA0FFEEA03FCC7FC147EA2123C -007E13FCA214F814F0EA7C01383003E0381C0F80380FFF00EA03F818237DA21F>I<141C -A2143EA3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F140301 -1C7FEB1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C712 -0FA2486E7ED8FFF090B51280A229257EA42E>65 D<B612E015FC3903F0007FED3F80ED1F -C0ED0FE0A216F0A21507150FA216E0151F16C0ED7F80913801FE0090B512F815FF9039F0 -003FC0ED0FE0ED07F016F8150316FCA616F81507ED0FF0ED1FE0ED7FC0B7120015F82625 -7EA42C>I<9138FF8008010FEBF01890393FC03C789039FE0006F8D801F8130348481301 -4848130048481478121F48481438A2007F151890C8FCA2481500A97E16187F123FA26C6C -1430120F6C6C14606C6C14C06C6CEB0180D800FEEB070090383FC01E90380FFFF8010013 -C025257DA42C>I<B7FCA23903F8007FED0F8015071503A21501A3ED00C01406A21600A2 -140E141EEBFFFEA2EBF81E140E1406A21660A291C7FC16C0A415011503A2ED0F80153FB7 -FCA223257EA428>69 D<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C -5C90B5FCA2EBF80F8080A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F8 -0003F800AF90B6FCA29038F80003B0B500E0B512E0A22B257EA430>72 -D<B512E0A23803F800B3AFB512E0A213257EA417>I<B539E007FF80A2D803F8C7EA7800 -16605E4B5A0307C7FC150E15185D5D5DEC03804AC8FC140E141F4A7E147FECDFC09038FB -8FE09038FF0FF0EBFC07496C7E816E7E1400157F82153F6F7E6F7E8215076F7E82B539E0 -3FFFC0A22A257EA430>75 D<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E -157CEC03FCB6FCA220257EA425>I<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D14 -06A26D6C130CA26D6C1318A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A29138 -7E0300A3EC3F06A2EC1F8CA2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A23525 -7EA43A>I<D8FFF8903807FFE07FD803FE9038003C006D14187F6D7E6D7E806D7E6D7E13 -036D7E6D7E80EC7F80EC3FC0141FEC0FE015F0EC07F8EC03FC1401EC00FE157F1698ED3F -D8ED1FF8150F15071503A2150115001678486C1438D8FFFC1418A22B257EA430>I<B67E -15F83903F801FEEC007F6F7E6F7EA282A55EA24B5A4BC7FCEC01FE90B512F815C09038F8 -03F06E7E6E7E157EA2157FA482A31760ED3FC017C0ED1FE1B539E00FFF80923801FE002B -257EA42E>82 D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A2 -7E91C7FCB4FCEA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC -0FE01407A200C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B -257DA422>I<007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C16 -0C5AA4C71400B3A390B512FEA226247EA32B>I<B539E00FFFC0A2D803F8C7EA78001630 -B3A700015D7F00005D137C6D495A6D0107C7FC90380FE03E903803FFF89038007FC02A25 -7EA42F>I<B5398001FFE0A2D807F8C7EA1C0000031518A26D1438000115306D14700000 -15607F6D5C80013F495AA2ECC003011F91C7FC6E5A010F130614F001075BA26D6C5AA2EC -FC3801011330ECFE700100136014FF6E5AA26E5AA36EC8FCA2140EA22B257FA42E>I<B5 -3B81FFFE01FFF0A23D07F0001FC0000F007013066C6C010F5CA26F7E6C6C5EA26D496C13 -38000017304B7E017F01195CA291388030FE013F5E829139C0607F01011F5E03E0138190 -280FE0C03F83C7FCA29139F1801FC3010715C617E69139FB000FEE010315EC02FF14FC6D -486D5AA24A130301005DA24A130102785CA202306D5A3C257FA43F>I<B539C001FFE0A2 -D807F8C7EA1C006C6C141816386C6C14306C6C5C16E06D6C5B6D6C485A1503D91FE090C7 -FC90380FF006150E903807F80C6D6C5A15386D6C5A903800FF6015E06E5A6E5AAE90380F -FFFCA22B257FA42E>89 D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1F -FE3803FE7EEA0FC0EA1F00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B -187E971E>97 D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2 -EC01F8A215FCA815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E26 -7FA522>I<EB7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F -6C130CEA1F80EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC13 -7F3803FFCF380FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380F -C0EF3903FFCFFC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048 -137C127E147E12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803 -FFE038007F8017187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400 -A7B5FCA2EA0FC0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F -01393E00F800007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA2123812 -3C383FFFE06C13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00 -381F807E3807FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0F -C013D89038D007E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4 -EA1F80EA0F00C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FACEC -1FF0A2EC0780EC0E005C14305CEBC1C0EBC38013C713DFEBFFC0EBE7E0EBC3F0138180EB -80FC147E80A2EC1F80EC0FC039FFF83FF8A21D267FA520>107 D<EAFFC0A2120FB3B0EA -FFFCA20E267EA511>I<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A -9007E803F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE9038 -83FF80390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F -803803FFF03807C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F -00A2381F807E6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC0 -9038F007E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F -809038CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7C -EB90FC13B013A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C -07EA7001EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC0 -01A212E014C0EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A3120312 -07120F121FB512C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218 ->I<39FFC07FE0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E97 -22>I<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13 -FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<3BFFF9FF -E0FF80A23B1FC03F001C00000F6D13181580D807E05CA29039F03FC07000030137136015 -E02601F8635BA29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA201 -1E133CA3010C131829187F972C>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C -6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F39 -07003F8048131F39FFC07FF8A21D187F9720>I<39FFF80FF8A2390FC001C015803907E0 -0300A26D5A00031306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D -5AA26DC7FCA21306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720 ->I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmsl10 10.95 28 -/Fm 28 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380 -70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12 -D<EAFFF0A20C027E8A0F>45 D<0007B512F83900F800780178133815185B1508A53901E0 -0800A314181438EBFFF83803C0301410A491C7FC485AA648C8FC7FEAFFFC1D1F7E9E1E> -70 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4AC7FC1402140848485A5C -146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F48487E81140781140381 -380F00016D487E39FFF00FFE231F7E9E23>75 D<EA07F8EA0C0CEA1E061307121C1200A3 -13FFEA07C7EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F878014147D9317 ->97 D<1207123F120F7EA2120EA65A137CEA1D83381E0180001C13C0EB00E05A14F0A538 -7001E0A214C013031480EB0700EAE80EEACC38EA83E014207B9F19>I<13FEEA0383380E -0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314> -I<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121CEA3C00383801C01278 -12F0A438E00380A412F0EA700738380F00381C37803807C7E015207D9F19>I<13F8EA07 -0EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA3004EA1C18 -EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC0001201A5485AEA3FFCEA -0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EBE1A33801C1C238 -0381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218121CEA0FFF14C0 -14E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F809417>I<13E012 -0712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713E01300A5380E01C0A6 -381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213C0EA0180C7FCA6EA03 -80121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C>I<13E0120712011200 -A2485AA6485AEB81FCEB80F014C0EB81801400EA07045B13181338137C131C120E7FA213 -0F7F1480EA1C03381E07C038FF8FF016207E9F18>107 D<13E0120712011200A2EA01C0 -A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C>I<390387C07C391F98618639 -07A072073903C03403EB80380007EB7807EB0070A5000EEBE00EA64848485A001EEBE01E -3AFFCFFCFFC022147E9326>I<38038F80381F90E0EA07A03803C0601380000713E01300 -A5380E01C0A6381C0380001E13C038FF8FF014147E9319>I<13FCEA0387380E0180381C -00C04813E0A24813F012F0A438E001E0A214C0130300F0138038700700EA380E6C5AEA07 -E014147D9317>I<EBE3E03807EC383801F01C6C487E140F48487E1580A53903800F00A2 -140E141E141C5C38074070EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319> -I<EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0A21307 -127038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381F -B380EA07C71203EB8300EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9 -EA0607EA080312181301EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212 -601306EAF004EAC818EA87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00 -A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03 -A238380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E0 -001C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC15 -147C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D810013 -09EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321 ->I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E13 -4E1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F80 -3901E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C -133813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmr8 8 41 -/Fn 41 124 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0 -381FFF8014C0381C00E0147014301438A4147014E0EB01C0B5120015177F9619>I<EBFC -1038038330380E00B0481370481330123000701310126012E01400A51410126012700030 -132012386C13406C138038038300EA00FC14177E9619>I<B5FC381C01C0EB00E0143014 -381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512 -E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214 -3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C -0C1304A390C7FCA6EAFFC014177F9617>I<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F -000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616 ->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3 -EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13 -101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0 -14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0 -EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470 -A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96 -1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC -EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038 -1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814 -10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206 -217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379 -EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400 -5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA -70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012 -E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA -E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670 -120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70 -70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838 -EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712 -7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813 -F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C -EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5 -EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400 -5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12 -6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A -70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80 -EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0 -EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80 -110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700 -0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07 -4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE -1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212 -A4127810147F8D13>I<B512801101808812>123 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmsy9 9 2 -/Fo 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fp cmcsc10 10.95 8 -/Fp 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E -48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900 -781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E -38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4 -15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038 -0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713 -80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB -F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB -087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A -FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813 -08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E -961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C -130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fq cmbx12 17.28 34 -/Fq 34 121 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C0391E003FE00038EB1FF000 -7CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307C7FC15FCA2EC0FF8A215 -F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC011E130E5B133849131E49 -131C485A48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28>I<913A03FF80018002 -3FEBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9FF807F4848C812 -7F4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7FCA212FFA9127F -A27FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C6C6C6C1478D93F -C05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F80203138031317CB03A> -67 D<B812F0A3C6903880003FEE07F816031600A21778A21738A3171C1507A31700A25D -5D5D91B5FCA3EC803F818181A21707A392C7120EA4171EA2173CA2177C17FC1601160716 -3FB812F8A330317EB035>69 D<B812E0A3C6903880007FEE0FF016031601A21600A21770 -A31738A21507A21700A35D5D5D91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB0 -33>I<DA03FF1303027FEBF00749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03 -FF49487F4848C87E485A0007824848815B001F82A2484881A2127FA24992C7FC12FFAA03 -07B512F8127F7FDB00011300123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8 -497ED907FFEB3E3F01019038FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B61280A3 -C6EB8000B3B3A7B61280A319317EB01E>73 D<B67EA3000190C9FCB3A9EE0380A4160717 -00A25EA35E5E5E5E4B5A150FB7FCA329317DB030>76 D<B56C49B512C08080C66D903900 -03E0006E6E5AEBEFFC13E780EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E -16806E13C0ED7FE0ED3FF0151F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1 -EE1FF9EE0FFD160717FF828282177F173FA2171F170F486C1507B500E014031701A23A31 -7EB03F>78 D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FF -A717FEA2EE07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB0 -37>80 D<B77E16F816FEC690398003FF809238007FE0EE1FF0707EA283160783A65F160F -5F4C5A4C5A4C5ADB03FFC8FC91B512F816E091388007F8ED01FC6F7E167F83707EA283A5 -83A4F0038017F8161F1900706C5AB6398003FE0E933801FFFC9338001FF039317EB03C> -82 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A348 -1603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<B6D88003B51280A3C60180C73807 -C000715AB3AE137F4DC7FC80013F150EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF801F -C0023FB55A020F49C8FC020013E039317EB03E>I<B500FC91B5FCA3000390C8EA03C06C -17806E14076C170080017F150EA26E141E013F151C6E143C011F153880010F5D8001075D -A26E130101035D6E13036D5D15806D4AC7FCA26F5A027F130EEDE01E023F131CEDF03C02 -1F133815F8020F5BA2EDFCF002075B15FF6E5BA26E5BA26E90C8FCA3157EA2153CA23831 -7EB03D>I<EBFFF0000313FF390F803F809038C00FE0486C6C7EA26E7ED80FC07FEA0780 -C7FCA414FF131FEBFFE33803FC03EA0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F80 -0D393FC01DFE3A1FE078FFF03907FFE07FC6EB803F24207E9F27>97 -D<EA01F812FFA3120F1207ADEC3FE0ECFFFC9038FBE07F9039FF001F8049EB0FC04914E0 -49EB07F016F8A2ED03FCA316FEA816FCA3ED07F8A216F06DEB0FE06D14C001E7EB3F8090 -39C3C0FE00903880FFF89038003FC027327EB12D>I<EB0FFF017F13C03901FC01F03803 -F0033907E007F8120FEA1FC0003FEB03F0EC01E04848C7FCA312FFA8127FA36C6C131CA2 -001F14386C7E000714703903F001E03901FC07C039007FFF00EB0FF81E207D9F24>I<ED -0FC0EC07FFA3EC007F153FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F48 -48133F123FA2485AA312FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01 -FC0F3FFE38007FFEEB0FF027327DB12D>I<EB0FFC90387FFF803901FC0FC03903F003E0 -3907E001F0000F14F8391FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7 -FCA4127FA36C6C1307121F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807 -FE0020207E9F25>I<EB01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC -1203EC07E0EC018091C7FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>I<EA01F812FFA3120F1207ADEC07F8EC3FFEEC783F02C013 -809039F9801FC0EBFB0001FE14E05BA35BB3B500C3B5FCA328327DB12D>I<EA03C0487E -487E487EA46C5A6C5A6C5AC8FCA9EA01F8127FA31207B3A7B51280A311337DB217>I<EA -01F812FFA3120F1207B3B3A6B512C0A312327DB117>108 D<2703F007F8EB1FE000FFD9 -3FFEEBFFF8913A783F01E0FC02C090388300FE280FF1801FC6137F2607F30013CC01F602 -F8148001FC5CA3495CB3B500C3B5380FFFFCA33E207D9F43>I<3903F007F800FFEB3FFE -EC783F02C013803A0FF1801FC03807F30001F614E013FCA35BB3B500C3B5FCA328207D9F -2D>I<EB07FC90387FFFC03901FC07F03903F001F848486C7E4848137E001F147F003F15 -8049133F007F15C0A300FF15E0A8007F15C0A36C6CEB7F80A2001F15006C6C13FE00075C -3903F803F83901FE0FF039007FFFC0D907FCC7FC23207E9F28>I<3901F83FE000FFEBFF -FC9038FBE07F9039FF003F80D80FFEEB1FC06C48EB0FE04914F0ED07F8A216FC1503A216 -FEA816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC -3FC091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF3 -0FF0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 -D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0 -6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13 -1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201 -12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB -07F0192E7FAD1F>I<D801F8EB07E000FFEB03FFA3000FEB003F0007141FB3153FA20003 -147FA26C6CEBDFF03A00FE039FFF90387FFF1FEB0FFC28207D9F2D>I<B53A1FFFE03FF8 -A33C0FF000FE0007806D150300076EEB0700816D5D00039138FF800EA26C6C486D5A15DF -01FF153C6C9039038FE038A2D97F876D5A150702C714F0D93FCF6D5AECCE03D91FFEEBF9 -C09138FC01FD16FF010F5D4A7EA26D486DC7FCA20103147E4A133EA26D48131C35207E9F -3A>119 D<3A7FFF807FFCA33A03FC000F006C6C131E6C6C5BEC803890387FC078013F5B -90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E81815B903803DFE09038078FF0 -8190380F07FC90381E03FEEB3C01496C7E4914804848EB7FC00003EC3FE026FFFC01B5FC -A328207F9F2B>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fr cmsy10 10.95 1 -/Fr 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fs cmbx12 14.4 55 -/Fs 55 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<EB07F8EB3FFE90B5FC3901FC07803903F00FC03807C01FEA0F80121F130048EB0F -8091C7FC127EA3EAFE02EB1FF0EB3FFCEB603EEB801F00FF14809038000FC0A24814E0A4 -127EA4123E003F14C07EEC1F80D80F8013003807E07E6CB45A6C5B38003FC01B277DA622 ->I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5CC6485AA249 -5A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297CA822>I<EB -7F803801FFF000077F380FC0FC381F803E48487E007E1480A2140F00FE14C0A315E0A500 -7E131FA26C133F6C132F380F80CF3807FF8F0001130FEA0008010013C0A3EC1F80123E12 -7FEC3F00143E147E007E5B383E03F8381FFFE06C1380D801FEC7FC1B277DA622>57 -D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F1480A2 -49486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F0804913030001 -81491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8001F -E0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EAFE00 -EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1FF8B7 -12E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F -9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290C9FC -5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF0 -07C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03FC00 -1FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0A217 -C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0A339 -03FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3EBFC -0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327297E -A82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A316001403 -A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387FE003 -903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484880484880484880 -485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E6C7E -6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5D8F0 -0FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835>I< -B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F0016 -1E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFDE7 -9038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F80 -B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A215 -07A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D00 -03EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F813 -0EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE380 -A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8FF -FCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF0180138014 -7F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF1150F -16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835>I< -ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F8148 -486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C6C -14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC01 -0013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA7 -16FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I<EC -FFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E4848 -6D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C6C -14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC090 -263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F5A -6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A65E -4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170EA2 -1503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E000 -0F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7FFC -EBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E013 -03A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA825 ->I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A2481501 -A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA00 -01ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC -2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B01 -7F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE0301 -015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA23029 -7FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13 -016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E -17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035B -A2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E -141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D6C -130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7FC -6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>89 -D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4EB3FFF3801FC3FEA -0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F3803FC031E1B7E9A21 ->97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F09038F001F89038E0 -00FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C0FE090380FFF8039 -0E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F80EA3F00A248133E -007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE00E3803F83C3801FF -F838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807F03F380FC00F381F -8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E07FFF3801FFE73800 -7F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F130048EB0F80127E15 -C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003803907C007003803 -F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC7FEA03F813F01207 -143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<9038FF80F00003EBE3 -F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E133E003F137E6C137C -380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14C06C14E06C14F012 -1F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC01F806CB512003800 -7FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC001E413E0EBE80701 -F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA1FC0EA3FE0A3EA1F -C0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12>I<EAFFE0A3120FB3 -B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0903AC307E0C1F8D8 -0FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFFFE3FFF8FFFE0A333 -1B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC80701D813F013D0A213 -E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390FC01F80391F800FC0 -393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A2391F800FC0390FC01F -803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFE1FE9038EFFF809038FE0FE039 -0FF803F09038F001F801E013FC140015FEA2157FA8157E15FEA215FC140101F013F89038 -F807F09038FC0FE09038EFFF809038E1FC0001E0C7FCA9EAFFFEA320277E9A25>I<38FF -C1F0EBC7FCEBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ft cmtt10 10.95 90 -/Ft 90 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<EA3803387C0780A2EAEE0F1400A25B131EA213 -3EEA7C3CA2EA387CEA0078A213F85B12015BA212035BA21207EB8380EB87C0120FEB0EE0 -A2121F121EA2123E383C07C0A23818038013247E9F18>I<EA01C0EA07E0487EEA0E7048 -7EA4EB73F813F313E3380FC1C0EBC38013831303381F0700EA3F87EA7B8EEA71CEEAE1FC -12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C7F9B18>I<1238127CA2127E -123E120EA3121CA2123812F812F012C0070E789B18>I<137013F0EA01E0EA03C0EA0780 -EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C -24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01 -C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EA -FDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A41114 -7D9718>I<136013F0A7387FFFC0B512E0A26C13C03800F000A7136013147E9718>I<121C -123E127E127F123F121F1207120E121E127C12F81260080C788518>I<387FFFC0B512E0 -A26C13C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F -14005B131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A12 -1E123E123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C -0738380380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C07 -00EA1F1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12 -431203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA03F0EA0FFEEA3FFF387C0F80387003 -C0EAE00138F000E0A21260C7FCA2EB01C0A21303EB0780EB0F00131E5B5B5B485AEA07C0 -485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<131F5B1377A213E7120113C7EA038712 -071307120E121E123C1238127812F0B512F8A338000700A6EB7FF0A3151C7F9B18>52 -D<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003C0EA0001EB00E0A2126012 -F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C7E9B18>I<137E48B4FC00 -071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EAE7FEB5FC38FE078038F803 -C0EAF001EB00E05AA21270A3383801C0EA3C03381E0780380FFF006C5AEA01F8131C7E9B -18>I<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13F05BA2485AA3485A -A448C7FCA7131D7E9C18>I<EA03F8EA0FFE487E383E0F80EA3803387001C0A438380380 -EA3C07381FFF00EA07FC487EEA1F1F383C0780387001C000F013E0EAE000A4387001C0EA -7803383E0F80381FFF006C5AEA03F8131C7E9B18>I<1230127812FCA2127812301200A8 -1230127812FCA2127812300614779318>58 D<1218123C127EA2123C12181200A8121812 -3C127EA2123E121E120E121C123C127812F01260071A789318>I<14C0EB03E01307EB1F -C0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E01303EB00C013187E9918>I<387FFFC0B512E0A26C13C0C8FCA4 -387FFFC0B512E0A26C13C0130C7E9318>I<126012F87E127F6C7EEA0FE06C7EEA01FC6C -7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FC5A -126013187E9918>I<EA0FF0EA3FFC48B4FCEA700F38F00380A2EA600738000F00133E5B -EA01F05B485AA55BC8FCA5EA0380487EA36C5A111C7D9B18>I<137CEA01FEEA07FF380F -8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1EAE380A638E1C1C0127113E338 -70FF8038387F00EA3C1C381E00E0EA0F833807FFC00001138038007E00131C7E9B18>I< -137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E03381C01C0A338 -7F07F000FF13F8007F13F0151C7F9B18>I<EA7FFCB5FC6C1380381C03C01301EB00E0A4 -130114C01307381FFF80140014C0EA1C03EB00E014F01470A414F014E01303387FFFC0B5 -1280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07FFEA0F07EA1E03EA3C01EA38005AA2 -14005AA8127014E0A27E123C381E01C0EA0F073807FF803803FE00EA00F8131C7E9B18> -I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114 -C01303EB0F80387FFF00485AEA7FF8141C7F9B18>I<B512F0A3381C0070A41400A2130E -A3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18>I<B512F8A3381C0038A4 -1400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<3801F1C0EA03FD -EA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F130F387001C0A2130312 -38A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F07F038FF8FF8387F07F0 -381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>I<EA7FFFB5 -12806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<3801FFC0A338000E00B3 -12F0A2133CEA7FFCEA3FF0EA0FC0121C7D9B18>I<387F07F038FF87F8387F07F0381C03 -C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380 -A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>I<EAFFC0A3001CC7FCB114E0A5B5 -FCA3131C7E9B18>I<38FC01F8EAFE03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A2 -13F81370A21300A638FE03F8A3151C7F9B18>I<387E07F038FF0FF8387F07F0381D81C0 -A313C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03 -151C7F9B18>I<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000B0EAF0010070 -13C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E0 -13001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA -0FFE383FFF804813C0EA7803EA700100F013E0EAE000AE1370A2EAF079387039C0EA783F -EA7FFF6C1380380FFE00EA000FEB0780A2EB03C01301A213227E9B18>I<EA7FF8EAFFFE -6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB0380A5149CA3 -387F01F8EAFF81387F00F0161C7F9B18>I<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A3 -90C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A2126012E0130100 -F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E07038A40000 -1300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F01380783C03803 -FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03383C01E0001C13C0A3EA1E -03000E1380A438070700A4EA038EA4EA018C13DCA3EA00D813F8A21370151C7F9B18>I< -38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2001913C0A3138CA2EA1D8DA31305 -000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0139F130F380E0700120FEA070E13 -8EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138EEA070F7F000E138013 -03001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03F8EAFF07EAFE03381C -01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC48 -7E6C5A151C7F9B18>I<EAFFF8A3EAE000B3ACEAFFF8A30D24779F18>91 -D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F12007F -1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8A3EA00 -38B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18>95 -D<1206121E123E12381270A212E0A312F812FC127CA21238070E789E18>I<EA0FF0EA1F -FC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3EAF007EA780F383F -FFF8EA1FFDEA07F015147E9318>I<127E12FE127E120EA5133EEBFF80000F13C0EBC1E0 -1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E138038063E00151C809B18 ->I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270EB01C01238EA3E0338 -1FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5EA03E3EA0FFBEA1FFF -EA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFFF0380FFBF83803E3F0 -151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A238E001C0A2B5FCA300 -E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D9318>I<EB1F80EB7F -C0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7FFFA3131C7F9B18>I< -3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA1FFC5BEA39E00038C7 -FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0EA7E03381FFFC06C13 -803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF80000F13C013C1EB80E013 -00120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA07C0A3EA0380C7FCA4 -EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA313381300A4EA0FFCA3EA00 -1CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E12FE127E120EA5EB3F -F0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB038014C0387FC7F812FF -127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I<38F9C1C038FFF7F013 -FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E1714809318>I<EA7E3E38FEFF -80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC1714809318>I<EA -01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001007013C0EA7803383C -0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF80007F13C0380FC1E0 -1380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380EB3E0090C7FCA7EA7F -C0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA380FEA7007A2EAE003A6 -EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB3FF8EB1FF0151E7E93 -18>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FCA9EAFFFC7F5B14147E -9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1FFCEA03FEEA001F3860 -0780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<487E1203A4387FFFC0B5 -FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F9818>I<387E07E0EA -FE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714809318>I<387F8FF0 -00FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038EA3EA01DCA3EA00F8A2 -137015147F9318>I<38FF07F8138F1307383800E0A4381C01C0137113F9A213D9EA1DDD -000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF0139F138F380F0700EA07 -8EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707000E1380387F8FF000 -FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F0380E01C0EB0380A21207 -EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313F05B1279EA7BC0EA7F -806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB078038000F00131E5B -13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318>I<EB07E0131F137FEB -780013E0AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE0131F130713247E9F18> -I<126012F0B3B012600424769F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB -7FC0EBF0005BABEA03C012FF90C7FC127C13247E9F18>I<EA060CEA1F1EEA3FBEEAFBF8 -EAF1F0EA60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fu cmr10 10.95 78 -/Fu 78 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<EB3FE013E0EA01C1EA0381EA07 -00A8B5FCEA0700B2383FE7FC1620809F19>I<90381F81F89038F04F043901C07C063903 -80F80FEB00F05A0270C7FCA6B7FC3907007007B23A3FE3FE3FE02320809F26>I<EA7038 -EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008A2EA2010EA40200F0E7F9F17>34 -D<1340A2EA03F0EA0C4EEA10413820408012600040134038C041C01343A238E04180EB40 -001270127CEA3FC0EA1FF86C7EEA03FEEA007FEB4F801343EB41C0A2EAF040A312801480 -EA404100201300EA3042EA0C4CEA03F0EA0040A312257EA117>36 -D<127012F812FCA212741204A31208A21210A212201240060E7C9F0D>39 -D<13401380EA01005A12061204120C5AA212381230A212701260A412E0AC1260A4127012 -30A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12407E12307E120812 -0C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A120812185A12205A -5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240050E7C840D>44 -D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<144014C0EB0180A3EB0300 -A31306A25BA35BA35BA25BA35BA3485AA348C7FCA21206A35AA35AA25AA35AA35AA2122D -7EA117>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78 -0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>I<13801203120F12F31203B3A6EA -07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF803 -A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380EA -3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F1200 -1400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F013801240 -EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E138EA2EA -010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17> -I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003A214C0 -A3127012F0A200E013801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<137CEA -0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EA -F807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17 ->I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B -1201A41203A76C5A131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260A31270 -38780300123EEA3F06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007EB01C0 -12C01300A31480EA600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18 -487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E338000380 -A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012F8A312 -701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A212 -781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB20 -78A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E0 -39FF801FFE1F207F9F22>65 D<B512E0380F0078141EA2801580A515005C141E147CEBFF -F0EB007C141FEC0F80EC07C0140315E0A515C014071580EC0F00143EB512F01B1F7E9E20 ->I<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A15 -10127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E003 -00EB380CEB0FF01C217E9F21>I<B512F83807801EEC0780EC03C0EC01E0EC00F0157015 -78A2153CA3153EA8153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F -9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF130113 -001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B6128038078007 -1401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE1A -1F7F9E1E>I<90380FE0109038381C309038E002703803C00139078000F048C71270121E -15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903 -C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD -90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I< -3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F9E -17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB13 -C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F7E -9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E1C> -I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A2 -90380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E -2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2 -EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D1F7E -9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0A200 -7C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB -03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C14 -1E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I< -B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A280143CA3 -143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA80 -40A3EAB85CEAFC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80 -A10D>I<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706 -EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38 -FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600 -7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01 -8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7 -FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD -18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0 -00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14 -7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12 -60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70 -06130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fv cmbx12 20.736 14 -/Fv 14 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3170FA3171FA2173F177F -17FF5E04071300163FB9FCA4323B7DBA3A>76 D<B500F00207B512E0808080D8007F9239 -0007E0006E6F5A81017B7F81137901787F6E7E6E7E81141F6E7E6E7F6E7F82806E7F6F7E -6F7E826F7E816F13806F13C017E06F13F081EE7FF8EE3FFC17FEEE1FFF827013837013C3 -18E37013F382EF7FFBEF3FFFA283838383A28383187F183FA201FC161FB500FC150F1807 -1803A2433B7CBA4C>78 D<B712F8EEFFC017F817FE3B007FF0001FFF040313C004007F71 -7E717EA284171FA284A660A2173F604D5A604C485A4C5BDC1FFEC8FC91B612F817C0A291 -39F0007FF0EE1FF8707E707E707E8482A284A584A5F101E0A27013F0A2F103C0EF7FF8B6 -00F890393FFC078094381FFE0F0507B51200050113FCCBEA1FF0433C7CBA48>82 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<EE3F80ED -3FFFA4150181B0ECFF80010F13F0013F13FC9038FFC03F3901FE000F4848130348487F48 -487F121F485AA2127F5BA312FFA9127FA36C7EA2121F6C6C5B6C6C5B00035CD801FE011F -13C02700FF807E13FE90387FFFF8010F13E0010113002F3C7DBB36>100 -D<49B47E010F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0 -485A003F15F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F00 -0F15F06C6C13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013 -C025267DA52C>I<EA01E0EA07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA4 -12071203B3AAB512F0A4143D7DBC1A>105 D<13FE12FFA412071203B3B3AEB512F8A415 -3C7DBB1A>108 D<D801FCEBFF8000FF010313F0020F7F91381E03FC91383801FE000701 -607F0003497E01FD15805C01FFC7FCA35BB3A4B5D8F83F13FEA42F267CA536>110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E137C017F14786E13F801 -3F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391C7FC6E5A6D131E15BE -6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C141E0008133E007F133C -147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA1FFCEA07F02E377EA5 -33>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 693 a Fv(GNU)33 b(Readline)h(Library)p 75 -743 1800 17 v 936 791 a Fu(Edition)17 b(4.1,)c(for)i -Ft(Readline)f(Library)g Fu(V)l(ersion)i(4.1.)1609 845 -y(Jan)o(uary)f(2000)75 2467 y Fs(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 250 a Fu(This)14 b(do)q(cumen)o(t)h(describ)q(es)g(the)f -(GNU)g(Readline)i(Library)l(,)e(a)g(utilit)o(y)h(whic)o(h)f(aids)g(in)h -(the)f(consistency)75 305 y(of)h(user)g(in)o(terface)h(across)e -(discrete)i(programs)e(that)h(need)h(to)e(pro)o(vide)i(a)f(command)g -(line)i(in)o(terface.)75 373 y(Published)g(b)o(y)f(the)f(F)l(ree)g -(Soft)o(w)o(are)f(F)l(oundation)75 427 y(59)h(T)l(emple)h(Place,)f -(Suite)i(330,)75 482 y(Boston,)d(MA)h(02111)f(USA)75 -549 y(P)o(ermission)j(is)f(gran)o(ted)g(to)f(mak)o(e)h(and)g -(distribute)i(v)o(erbatim)d(copies)i(of)f(this)h(man)o(ual)f(pro)o -(vided)h(the)75 604 y(cop)o(yrigh)o(t)e(notice)h(and)f(this)h(p)q -(ermission)g(notice)g(are)f(preserv)o(ed)h(on)f(all)h(copies.)75 -671 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g(cop)o(y)h(and)g -(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h(man)o(ual)g -(under)h(the)f(con-)75 726 y(ditions)k(for)e(v)o(erbatim)h(cop)o(ying,) -g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g(deriv)o(ed)g(w)o -(ork)e(is)h(distributed)75 781 y(under)h(the)f(terms)g(of)g(a)f(p)q -(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -848 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 903 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 958 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fr(\015)i Fu(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 183 y Fq(1)41 b(Command)28 b(Line)e(Editing)137 -299 y Fu(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fp(gnu)g Fu(command)g(line)i(editing)f(in)o(terface.)75 -426 y Fs(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -522 y Fu(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -589 y(The)h(text)327 587 y Fo(h)p 339 561 56 2 v 339 -589 a Fn(C-k)p 339 597 V 393 587 a Fo(i)424 589 y Fu(is)f(read)g(as)g -(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q -(duced)h(when)f(the)1831 587 y Fo(h)p 1844 561 19 2 v -1844 589 a Fn(k)p 1844 597 V 1860 587 a Fo(i)75 644 y -Fu(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h -(depressed.)137 711 y(The)f(text)325 709 y Fo(h)p 337 -683 63 2 v 337 711 a Fn(M-k)p 337 719 V 397 709 a Fo(i)427 -711 y Fu(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -764 y Fo(h)p 942 738 19 2 v 942 766 a Fn(k)p 942 774 -V 958 764 a Fo(i)987 766 y Fu(k)o(ey)g(is)h(pressed.)20 -b(The)15 b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 764 y -Fo(h)p 1791 738 72 2 v 1791 766 a Fn(AL)m(T)p 1791 774 -V 1860 764 a Fo(i)75 821 y Fu(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 819 y Fo(h)p 1225 793 V 1225 821 a Fn(AL)m(T)p 1225 -828 V 1294 819 a Fo(i)1322 821 y Fu(\(usually)i(to)e(either)i(side)g -(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fo(h)p -400 847 V 400 876 a Fn(AL)m(T)p 400 883 V 469 874 a Fo(i)499 -876 y Fu(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 874 y Fo(h)p -1709 847 V 1709 876 a Fn(AL)m(T)p 1709 883 V 1778 874 -a Fo(i)1808 876 y Fu(k)o(ey)75 930 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 985 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1052 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1050 y Fo(h)p 706 1024 V 706 1052 a Fn(AL)m(T)p 706 1060 -V 775 1050 a Fo(i)801 1052 y Fu(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping) -809 1105 y Fo(h)p 821 1079 70 2 v 821 1107 a Fn(ESC)p -821 1115 V 888 1105 a Fo(i)915 1107 y Fm(\014rst)p Fu(,)g(and)g(then)h -(t)o(yping)1339 1105 y Fo(h)p 1351 1079 19 2 v 1351 1107 -a Fn(k)p 1351 1115 V 1368 1105 a Fo(i)1383 1107 y Fu(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j -Fm(metafying)k Fu(the)425 1160 y Fo(h)p 437 1134 V 437 -1162 a Fn(k)p 437 1169 V 454 1160 a Fo(i)484 1162 y Fu(k)o(ey)l(.)137 -1229 y(The)h(text)334 1227 y Fo(h)p 347 1201 100 2 v -347 1229 a Fn(M-C-k)p 347 1236 V 444 1227 a Fo(i)479 -1229 y Fu(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h -(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Fm(metafying)291 -1281 y Fo(h)p 303 1255 56 2 v 303 1283 a Fn(C-k)p 303 -1291 V 357 1281 a Fo(i)372 1283 y Fu(.)137 1350 y(In)e(addition,)h(sev) -o(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1348 y Fo(h)p 1396 1322 -73 2 v 1396 1350 a Fn(DEL)p 1396 1358 V 1467 1348 a Fo(i)1482 -1350 y Fu(,)1514 1348 y Fo(h)p 1526 1322 70 2 v 1526 -1350 a Fn(ESC)p 1526 1358 V 1593 1348 a Fo(i)1608 1350 -y Fu(,)1640 1348 y Fo(h)p 1652 1322 72 2 v 1652 1350 -a Fn(LFD)p 1652 1358 V 1722 1348 a Fo(i)1737 1350 y Fu(,)1768 -1348 y Fo(h)p 1780 1322 70 2 v 1780 1350 a Fn(SPC)p 1780 -1358 V 1847 1348 a Fo(i)1862 1350 y Fu(,)75 1403 y Fo(h)p -87 1377 76 2 v 87 1405 a Fn(RET)p 87 1413 V 160 1403 -a Fo(i)175 1405 y Fu(,)23 b(and)306 1403 y Fo(h)p 318 -1377 74 2 v 318 1405 a Fn(T)m(AB)p 318 1413 V 390 1403 -a Fo(i)427 1405 y Fu(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1460 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1458 y Fo(h)p 1456 1432 72 2 v 1456 1460 a Fn(LFD)p 1456 -1468 V 1526 1458 a Fo(i)1560 1460 y Fu(k)o(ey)l(,)h(t)o(yping)1802 -1458 y Fo(h)p 1814 1432 49 2 v 1814 1460 a Fn(C-j)p 1814 -1468 V 1860 1458 a Fo(i)75 1515 y Fu(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1513 y Fo(h)p 886 1487 76 2 -v 886 1515 a Fn(RET)p 886 1522 V 959 1513 a Fo(i)989 -1515 y Fu(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513 -y Fo(h)p 1397 1487 109 2 v 1397 1515 a Fn(Return)p 1397 -1522 V 1503 1513 a Fo(i)1533 1515 y Fu(or)1588 1513 y -Fo(h)p 1600 1487 86 2 v 1600 1515 a Fn(En)o(ter)p 1600 -1522 V 1684 1513 a Fo(i)1714 1515 y Fu(on)f(some)75 1569 -y(k)o(eyb)q(oards.)75 1697 y Fs(1.2)33 b(Readline)23 -b(In)n(teraction)137 1793 y Fu(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1848 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1903 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1958 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2012 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2067 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2065 y Fo(h)p 1172 2039 155 -2 v 1172 2067 a Fn(RETURN)p 1172 2075 V 1324 2065 a Fo(i)1339 -2067 y Fu(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75 -2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120 -y Fo(h)p 646 2094 V 646 2122 a Fn(RETURN)p 646 2130 V -798 2120 a Fo(i)813 2122 y Fu(;)g(the)h(en)o(tire)g(line)h(is)f -(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177 -y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y -Fl(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137 -2384 y Fu(In)12 b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g -(the)h(line,)h(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 -b(t)o(yp)q(ed)g(c)o(haracter)f(app)q(ears)75 2439 y(where)16 -b(the)h(cursor)f(w)o(as,)f(and)h(then)h(the)f(cursor)g(mo)o(v)o(es)g -(one)g(space)g(to)g(the)g(righ)o(t.)23 b(If)17 b(y)o(ou)f(mist)o(yp)q -(e)g(a)75 2493 y(c)o(haracter,)e(y)o(ou)h(can)g(use)h(y)o(our)f(erase)g -(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h(delete)g(the)f(mist)o(yp)q -(ed)h(c)o(haracter.)137 2560 y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp) -q(e)h(a)f(c)o(haracter,)f(and)i(not)f(notice)h(the)f(error)g(un)o(til)i -(y)o(ou)e(ha)o(v)o(e)g(t)o(yp)q(ed)75 2615 y(sev)o(eral)f(other)f(c)o -(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102 -2613 y Fo(h)p 1114 2587 57 2 v 1114 2615 a Fn(C-b)p 1114 -2623 V 1168 2613 a Fo(i)1197 2615 y Fu(to)f(mo)o(v)o(e)g(the)h(cursor)g -(to)f(the)h(left,)g(and)75 2670 y(then)i(correct)e(y)o(our)h(mistak)o -(e.)20 b(Afterw)o(ards,)13 b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g -(to)g(the)g(righ)o(t)g(with)1714 2668 y Fo(h)p 1727 2642 -49 2 v 1727 2670 a Fn(C-f)p 1727 2678 V 1772 2668 a Fo(i)1787 -2670 y Fu(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fu(2)1322 b(GNU)15 b(Readline)i(Library)137 -183 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -238 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 293 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 348 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 479 y Fo(h)p 87 453 57 2 v 87 481 a Fn(C-b)p -87 489 V 142 479 a Fo(i)315 481 y Fu(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o -(haracter.)75 558 y Fo(h)p 87 532 49 2 v 87 560 a Fn(C-f)p -87 567 V 133 558 a Fo(i)315 560 y Fu(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c) -o(haracter.)75 636 y Fo(h)p 87 610 73 2 v 87 638 a Fn(DEL)p -87 646 V 158 636 a Fo(i)188 638 y Fu(or)244 636 y Fo(h)p -256 610 159 2 v 256 638 a Fn(Bac)o(kspace)p 256 646 V -412 636 a Fo(i)315 693 y Fu(Delete)h(the)f(c)o(haracter)g(to)f(the)h -(left)h(of)f(the)g(cursor.)75 770 y Fo(h)p 87 744 57 -2 v 87 772 a Fn(C-d)p 87 779 V 142 770 a Fo(i)315 772 -y Fu(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -981 y Fo(h)p 87 955 50 2 v 87 983 a Fn(C-)p 126 983 11 -2 v 87 991 50 2 v 135 981 a Fo(i)165 983 y Fu(or)221 -981 y Fo(h)p 233 955 125 2 v 233 983 a Fn(C-x)c(C-u)p -233 991 V 355 981 a Fo(i)315 1038 y Fu(Undo)17 b(the)g(last)f(editing)i -(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o(y)f(bac)o -(k)h(to)f(an)g(empt)o(y)315 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on) -f(y)o(our)g(con\014guration,)g(the)863 1170 y Fo(h)p -875 1144 159 2 v 875 1172 a Fn(Bac)o(kspace)p 875 1179 -V 1032 1170 a Fo(i)1063 1172 y Fu(k)o(ey)g(b)q(e)h(set)f(to)f(delete)i -(the)f(c)o(haracter)g(to)f(the)75 1226 y(left)h(of)f(the)h(cursor)f -(and)g(the)596 1224 y Fo(h)p 608 1198 73 2 v 608 1226 -a Fn(DEL)p 608 1234 V 679 1224 a Fo(i)710 1226 y Fu(k)o(ey)h(set)f(to)g -(delete)h(the)g(c)o(haracter)f(underneath)h(the)g(cursor,)f(lik)o(e)75 -1279 y Fo(h)p 87 1253 57 2 v 87 1281 a Fn(C-d)p 87 1289 -V 142 1279 a Fo(i)157 1281 y Fu(,)f(rather)f(than)h(the)h(c)o(haracter) -e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fl(1.2.2)30 -b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487 -y Fu(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1542 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1597 y(to)130 -1595 y Fo(h)p 142 1569 V 142 1597 a Fn(C-b)p 142 1605 -V 197 1595 a Fo(i)212 1597 y Fu(,)239 1595 y Fo(h)p 251 -1569 49 2 v 251 1597 a Fn(C-f)p 251 1605 V 297 1595 a -Fo(i)312 1597 y Fu(,)339 1595 y Fo(h)p 351 1569 57 2 -v 351 1597 a Fn(C-d)p 351 1605 V 406 1595 a Fo(i)421 -1597 y Fu(,)g(and)536 1595 y Fo(h)p 548 1569 73 2 v 548 -1597 a Fn(DEL)p 548 1605 V 619 1595 a Fo(i)634 1597 y -Fu(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h -(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fo(h)p -87 1702 55 2 v 87 1730 a Fn(C-a)p 87 1738 V 140 1728 -a Fo(i)315 1730 y Fu(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.) -75 1807 y Fo(h)p 87 1781 53 2 v 87 1809 a Fn(C-e)p 87 -1817 V 138 1807 a Fo(i)315 1809 y Fu(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f -(the)g(line.)75 1885 y Fo(h)p 87 1859 55 2 v 87 1887 -a Fn(M-f)p 87 1895 V 140 1885 a Fo(i)315 1887 y Fu(Mo)o(v)o(e)f(forw)o -(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h(is)h(comp)q(osed)f(of)g -(letters)g(and)h(digits.)75 1964 y Fo(h)p 87 1938 64 -2 v 87 1966 a Fn(M-b)p 87 1974 V 149 1964 a Fo(i)315 -1966 y Fu(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2043 y Fo(h)p 87 2017 48 2 v 87 2045 a Fn(C-l)p 87 2052 -V 132 2043 a Fo(i)315 2045 y Fu(Clear)g(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w) -368 2121 y Fo(h)p 380 2095 49 2 v 380 2123 a Fn(C-f)p -380 2131 V 426 2121 a Fo(i)452 2123 y Fu(mo)o(v)o(es)f(forw)o(ard)f(a)i -(c)o(haracter,)f(while)1105 2121 y Fo(h)p 1117 2095 55 -2 v 1117 2123 a Fn(M-f)p 1117 2131 V 1170 2121 a Fo(i)1197 -2123 y Fu(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18 -b(It)12 b(is)g(a)g(lo)q(ose)75 2178 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2233 y(w)o(ords.)75 -2343 y Fl(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2439 y Fm(Killing)26 b Fu(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2494 y(usually)f(b)o(y)f Fm(y)o(anking)22 -b Fu(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2549 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 183 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Fm(kill-ring)p Fu(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -238 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 293 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -348 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 415 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 492 y Fo(h)p -87 466 56 2 v 87 494 a Fn(C-k)p 87 502 V 141 492 a Fo(i)315 -494 y Fu(Kill)f(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 571 y -Fo(h)p 87 545 64 2 v 87 573 a Fn(M-d)p 87 581 V 149 571 -a Fo(i)315 573 y Fu(Kill)g(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 628 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)1728 -626 y Fo(h)p 1740 600 55 2 v 1740 628 a Fn(M-f)p 1740 -636 V 1793 626 a Fo(i)1808 628 y Fu(.)75 705 y Fo(h)p -87 679 118 2 v 87 707 a Fn(M-DEL)p 87 715 V 202 705 a -Fo(i)315 707 y Fu(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h -(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f -(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 815 y Fo(h)p 327 789 64 2 v 327 817 a Fn(M-b)p -327 825 V 389 815 a Fo(i)404 817 y Fu(.)75 894 y Fo(h)p -87 868 63 2 v 87 896 a Fn(C-w)p 87 904 V 148 894 a Fo(i)315 -896 y Fu(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h -(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733 -894 y Fo(h)p 1745 868 118 2 v 1745 896 a Fn(M-DEL)p 1745 -904 V 1860 894 a Fo(i)315 951 y Fu(b)q(ecause)g(the)f(w)o(ord)g(b)q -(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g -Fm(y)o(ank)j Fu(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 -b(Y)l(anking)21 b(means)g(to)f(cop)o(y)h(the)g(most-)75 -1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75 -1163 y Fo(h)p 87 1137 56 2 v 87 1165 a Fn(C-y)p 87 1172 -V 141 1163 a Fo(i)315 1165 y Fu(Y)l(ank)e(the)h(most)e(recen)o(tly)i -(killed)h(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i -(cursor.)75 1242 y Fo(h)p 87 1216 63 2 v 87 1244 a Fn(M-y)p -87 1252 V 148 1242 a Fo(i)315 1244 y Fu(Rotate)h(the)g(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 1299 y(command)d(is)568 -1297 y Fo(h)p 580 1271 56 2 v 580 1299 a Fn(C-y)p 580 -1306 V 634 1297 a Fo(i)664 1299 y Fu(or)719 1297 y Fo(h)p -732 1271 63 2 v 732 1299 a Fn(M-y)p 732 1306 V 792 1297 -a Fo(i)807 1299 y Fu(.)75 1410 y Fl(1.2.4)30 b(Readline)20 -b(Argumen)n(ts)137 1506 y Fu(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i -(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15 -b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,) -h(other)f(times)g(it)h(is)g(the)f Fm(sign)h Fu(of)f(the)g(argumen)o(t)f -(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75 -1616 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)f(to)g(a)g(command)h(whic)o -(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g(direction,)i(that)75 -1671 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o(ard)g(direction.)28 -b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o(k)g(to)g(the)h(start) -e(of)75 1726 y(the)f(line,)i(y)o(ou)e(migh)o(t)g(t)o(yp)q(e)g(`)p -Ft(M--)f(C-k)p Fu('.)137 1793 y(The)h(general)f(w)o(a)o(y)f(to)h(pass)g -(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)h(to)e(t)o(yp)q(e)h -(meta)g(digits)h(b)q(efore)75 1847 y(the)h(command.)k(If)c(the)f -(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)g(min)o(us)g(sign)g(\(`)p -Ft(-)p Fu('\),)d(then)j(the)f(sign)h(of)f(the)h(argumen)o(t)75 -1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o -(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g -(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g -(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30 -b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955 -y Fo(h)p 1805 1929 57 2 v 1805 1957 a Fn(C-d)p 1805 1965 -V 1860 1955 a Fo(i)75 2012 y Fu(command)c(an)g(argumen)o(t)g(of)f(10,)h -(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Ft(M-1)f(0)h(C-d)p -Fu('.)75 2123 y Fl(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f -(the)h(History)137 2219 y Fu(Readline)e(pro)o(vides)d(commands)g(for)g -(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-) -75 2274 y(taining)e(a)f(sp)q(eci\014ed)i(string.)j(There)c(are)e(t)o(w) -o(o)g(searc)o(h)h(mo)q(des:)20 b Fm(incremen)o(tal)e -Fu(and)e Fm(non-incremen)o(tal)p Fu(.)137 2341 y(Incremen)o(tal)e -(searc)o(hes)f(b)q(egin)h(b)q(efore)f(the)g(user)g(has)g(\014nished)h -(t)o(yping)f(the)g(searc)o(h)g(string.)19 b(As)13 b(eac)o(h)75 -2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g(string)f(is)h(t)o(yp)q -(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en)o(try)f(from)g(the)h -(history)75 2451 y(matc)o(hing)12 b(the)g(string)g(t)o(yp)q(ed)g(so)g -(far.)18 b(An)13 b(incremen)o(tal)g(searc)o(h)f(requires)g(only)h(as)f -(man)o(y)f(c)o(haracters)g(as)75 2506 y(needed)16 b(to)d(\014nd)j(the)e -(desired)i(history)e(en)o(try)l(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o -(ard)f(in)j(the)e(history)g(for)g(a)g(particular)75 2560 -y(string,)g(t)o(yp)q(e)317 2558 y Fo(h)p 329 2532 51 -2 v 329 2560 a Fn(C-r)p 329 2568 V 378 2558 a Fo(i)393 -2560 y Fu(.)19 b(T)o(yping)580 2558 y Fo(h)p 592 2532 -52 2 v 592 2560 a Fn(C-s)p 592 2568 V 641 2558 a Fo(i)670 -2560 y Fu(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20 -b(The)14 b(c)o(haracters)f(presen)o(t)75 2615 y(in)20 -b(the)f(v)m(alue)h(of)f(the)g Ft(isearch-terminators)d -Fu(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q -(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fo(h)p -1294 2642 70 2 v 1294 2670 a Fn(ESC)p 1294 2678 V 1361 -2668 a Fo(i)1395 2670 y Fu(and)1486 2668 y Fo(h)p 1498 -2642 56 2 v 1498 2670 a Fn(C-J)p 1498 2678 V 1551 2668 -a Fo(i)1585 2670 y Fu(c)o(haracters)d(will)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fu(4)1322 b(GNU)15 b(Readline)i(Library)75 -183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780 -181 y Fo(h)p 792 155 55 2 v 792 183 a Fn(C-g)p 792 191 -V 845 181 a Fo(i)880 183 y Fu(will)g(ab)q(ort)e(an)h(incremen)o(tal)h -(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 293 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h -(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o -(yp)q(e)1231 355 y Fo(h)p 1243 329 51 2 v 1243 357 a -Fn(C-r)p 1243 364 V 1292 355 a Fo(i)1322 357 y Fu(or)1377 -355 y Fo(h)p 1389 329 52 2 v 1389 357 a Fn(C-s)p 1389 -364 V 1438 355 a Fo(i)1468 357 y Fu(as)f(appropriate.)k(This)75 -412 y(will)c(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i(the)f -(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g(searc)o(h) -g(string)75 466 y(t)o(yp)q(ed)19 b(so)g(far.)30 b(An)o(y)19 -b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)i(command)d -(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f -(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fo(h)p -1163 493 76 2 v 1163 521 a Fn(RET)p 1163 529 V 1236 519 -a Fo(i)1271 521 y Fu(will)g(terminate)f(the)f(searc)o(h)h(and)75 -576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command) -g(from)g(the)g(history)g(list.)137 640 y(Non-incremen)o(tal)25 -b(searc)o(hes)e(read)h(the)f(en)o(tire)h(searc)o(h)f(string)g(b)q -(efore)h(starting)f(to)f(searc)o(h)i(for)75 695 y(matc)o(hing)d -(history)h(lines.)39 b(The)22 b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h -(t)o(yp)q(ed)f(b)o(y)h(the)f(user)h(or)e(b)q(e)i(part)f(of)g(the)75 -750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75 -868 y Fs(1.3)33 b(Readline)23 b(Init)h(File)137 961 y -Fu(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g -(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 y(b)o(y)d(default,) -h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k) -o(eybindings.)39 b(An)o(y)20 b(user)h(can)g(customize)75 -1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g -(commands)g(in)i(an)e Fm(inputrc)k Fu(\014le,)d(con)o(v)o(en)o -(tionally)g(in)g(his)75 1126 y(home)g(directory)l(.)24 -b(The)17 b(name)g(of)f(this)h(\014le)g(is)g(tak)o(en)g(from)e(the)i(v)m -(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m(ariable)75 -1181 y Ft(INPUTRC)p Fu(.)i(If)c(that)g(v)m(ariable)h(is)g(unset,)f(the) -g(default)h(is)g(`)p Ft(~/.inputrc)p Fu('.)137 1244 y(When)f(a)g -(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i -(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299 -y(k)o(ey)g(bindings)i(are)e(set.)137 1363 y(In)f(addition,)h(the)e -Ft(C-x)i(C-r)e Fu(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us) -e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1418 y(that)h(y)o(ou)h -(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fl(1.3.1)30 -b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 y Fu(There)c(are)g -(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g -(Readline)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75 -1668 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p -Ft(#)p Fu(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e -(a)f(`)p Ft($)p Fu(')f(indicate)75 1723 y(conditional)c(constructs)f -(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h -(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h -(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315 -1906 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of) -e(Readline)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315 -1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g -Ft(set)g Fu(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Ft(vi)g Fu(line)i(editing)g(commands:)435 2076 y Ft(set)23 -b(editing-mode)g(vi)315 2140 y Fu(A)15 b(great)g(deal)g(of)g(run-time)h -(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m -(ariables.)315 2213 y Ft(bell-style)555 2268 y Fu(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Ft(none)p Fu(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2378 y(`)p Ft(visible)p Fu(',)c(Readline)j(uses) -f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 2432 y(`)p Ft(audible)p Fu(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2487 y(b)q(ell.)315 2560 y Ft(comment-begin)555 2615 -y Fu(The)c(string)f(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h -(line)h(when)f(the)g Ft(insert-)555 2670 y(comment)f -Fu(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g -Ft("#")p Fu(.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 183 y Ft(completion-ignore-case)555 238 y Fu(If)14 -b(set)f(to)g(`)p Ft(on)p Fu(',)g(Readline)j(p)q(erforms)d(\014lename)i -(matc)o(hing)f(and)g(completion)555 293 y(in)i(a)f(case-insensitiv)o(e) -i(fashion.)k(The)15 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p -Fu('.)315 384 y Ft(completion-query-items)555 439 y Fu(The)d(n)o(um)o -(b)q(er)h(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g -(the)f(user)555 494 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d -(to)i(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 -b(If)21 b(the)555 549 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i -(completions)f(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -604 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f -(view)h(them;)f(otherwise,)555 658 y(they)i(are)g(simply)i(listed.)k -(The)15 b(default)h(limit)h(is)e Ft(100)p Fu(.)315 750 -y Ft(convert-meta)555 805 y Fu(If)i(set)g(to)g(`)p Ft(on)p -Fu(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f -(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f -(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555 -915 y(\014xing)i(an)749 913 y Fo(h)p 761 887 70 2 v 761 -915 a Fn(ESC)p 761 922 V 828 913 a Fo(i)861 915 y Fu(c)o(haracter,)f -(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555 -969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p -Ft(on)p Fu('.)315 1061 y Ft(disable-completion)555 1116 -y Fu(If)k(set)f(to)f(`)p Ft(On)p Fu(',)h(Readline)j(will)f(inhibit)g(w) -o(ord)e(completion.)30 b(Completion)555 1171 y(c)o(haracters)12 -b(will)j(b)q(e)f(inserted)g(in)o(to)f(the)g(line)h(as)f(if)h(they)f -(had)g(b)q(een)h(mapp)q(ed)555 1225 y(to)h Ft(self-insert)p -Fu(.)j(The)d(default)h(is)g(`)p Ft(off)p Fu('.)315 1317 -y Ft(editing-mode)555 1372 y Fu(The)f Ft(editing-mode)d -Fu(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g -(bind-)555 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g -(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481 -y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g(similar)i(to)d(Emacs.) -20 b(This)15 b(v)m(ariable)h(can)555 1536 y(b)q(e)g(set)f(to)f(either)i -(`)p Ft(emacs)p Fu(')e(or)h(`)p Ft(vi)p Fu('.)315 1628 -y Ft(enable-keypad)555 1683 y Fu(When)d(set)f(to)h(`)p -Ft(on)p Fu(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f -(application)h(k)o(eypad)555 1737 y(when)h(it)f(is)h(called.)21 -b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g(arro)o(w)e(k)o -(eys.)555 1792 y(The)j(default)h(is)g(`)p Ft(off)p Fu('.)315 -1884 y Ft(expand-tilde)555 1939 y Fu(If)e(set)g(to)f(`)p -Ft(on)p Fu(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g -(Readline)i(attempts)555 1994 y(w)o(ord)f(completion.)21 -b(The)15 b(default)h(is)f(`)p Ft(off)p Fu('.)315 2085 -y Ft(horizontal-scroll-mode)555 2140 y Fu(This)k(v)m(ariable)g(can)f(b) -q(e)g(set)g(to)f(either)i(`)p Ft(on)p Fu(')e(or)g(`)p -Ft(off)p Fu('.)27 b(Setting)19 b(it)f(to)f(`)p Ft(on)p -Fu(')555 2195 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q -(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555 -2250 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h -(than)g(the)g(width)g(of)g(the)555 2304 y(screen,)e(instead)f(of)g -(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13 -b(default,)h(this)555 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Ft(off)p Fu('.)315 2451 y Ft(input-meta)555 2506 y Fu(If)h(set)g(to)f -(`)p Ft(on)p Fu(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h -(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e -(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555 -2615 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34 -b(The)20 b(default)h(v)m(alue)g(is)g(`)p Ft(off)p Fu('.)33 -b(The)555 2670 y(name)15 b Ft(meta-flag)f Fu(is)i(a)f(synon)o(ym)g(for) -f(this)i(v)m(ariable.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fu(6)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Ft(isearch-terminators)555 238 y Fu(The)26 b(string)g(of)f(c)o -(haracters)g(that)g(should)i(terminate)f(an)g(incremen)o(tal)555 -293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o -(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d -([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has) -555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o -(haracters)1312 400 y Fo(h)p 1324 374 70 2 v 1324 402 -a Fn(ESC)p 1324 410 V 1391 400 a Fo(i)1419 402 y Fu(and)1505 -400 y Fo(h)p 1518 374 56 2 v 1518 402 a Fn(C-J)p 1518 -410 V 1571 400 a Fo(i)1599 402 y Fu(will)i(terminate)555 -457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Ft(keymap)114 -b Fu(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f -(for)g(k)o(ey)g(binding)j(com-)555 595 y(mands.)41 b(Acceptable)23 -b Ft(keymap)f Fu(names)g(are)f Ft(emacs)p Fu(,)i Ft(emacs-standard)p -Fu(,)555 650 y Ft(emacs-meta)p Fu(,)15 b Ft(emacs-ctlx)p -Fu(,)h Ft(vi)p Fu(,)g Ft(vi-command)p Fu(,)g(and)h Ft(vi-insert)p -Fu(.)23 b Ft(vi)16 b Fu(is)555 705 y(equiv)m(alen)o(t)e(to)f -Ft(vi-command)p Fu(;)e Ft(emacs)h Fu(is)i(equiv)m(alen)o(t)g(to)e -Ft(emacs-standard)p Fu(.)555 759 y(The)f(default)h(v)m(alue)g(is)f -Ft(emacs)p Fu(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Ft(editing-mode)f -Fu(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o -(eymap.)315 897 y Ft(mark-directories)555 952 y Fu(If)j(set)g(to)g(`)p -Ft(on)p Fu(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h(slash) -h(app)q(ended.)555 1007 y(The)15 b(default)h(is)g(`)p -Ft(on)p Fu('.)315 1090 y Ft(mark-modified-lines)555 1145 -y Fu(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Ft(on)p -Fu(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555 -1200 y(terisk)f(\(`)p Ft(*)p Fu('\))e(at)i(the)f(start)g(of)h(history)f -(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q(di\014ed.)555 -1254 y(This)e(v)m(ariable)g(is)g(`)p Ft(off)p Fu(')e(b)o(y)h(default.) -315 1337 y Ft(output-meta)555 1392 y Fu(If)j(set)f(to)g(`)p -Ft(on)p Fu(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 1447 y(set)g(directly)i(rather)d(than)h(as)g -(a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555 -1502 y(default)16 b(is)f(`)p Ft(off)p Fu('.)315 1585 -y Ft(print-completions-horizont)o(ally)555 1640 y Fu(If)d(set)g(to)f(`) -p Ft(on)p Fu(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f -(matc)o(hes)f(sorted)555 1694 y(horizon)o(tally)23 b(in)f(alphab)q -(etical)i(order,)f(rather)e(than)g(do)o(wn)h(the)g(screen.)555 -1749 y(The)15 b(default)h(is)g(`)p Ft(off)p Fu('.)315 -1832 y Ft(show-all-if-ambiguous)555 1887 y Fu(This)g(alters)e(the)i -(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h(functions.)21 -b(If)15 b(set)555 1942 y(to)e(`)p Ft(on)p Fu(',)g(w)o(ords)g(whic)o(h)h -(ha)o(v)o(e)g(more)f(than)g(one)h(p)q(ossible)i(completion)f(cause)555 -1997 y(the)20 b(matc)o(hes)f(to)f(b)q(e)j(listed)f(immediately)h -(instead)f(of)f(ringing)i(the)e(b)q(ell.)555 2051 y(The)c(default)h(v)m -(alue)h(is)e(`)p Ft(off)p Fu('.)315 2134 y Ft(visible-stats)555 -2189 y Fu(If)h(set)g(to)f(`)p Ft(on)p Fu(',)g(a)h(c)o(haracter)f -(denoting)h(a)g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555 -2244 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c -(default)g(is)f(`)p Ft(off)p Fu('.)75 2327 y(Key)h(Bindings)315 -2382 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h -(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20 -b(y)o(ou)315 2437 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f -(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 -b(The)14 b(follo)o(wing)315 2491 y(sections)k(con)o(tain)h(tables)f(of) -f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y) -l(,)315 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f -(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey) -315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g -(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)p -eop -%%Page: 7 9 -7 8 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34 -b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g -(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o -(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316 -y Fm(k)o(eyname)s Fu(:)k Fm(function-name)g Fu(or)c Fm(macro)555 -371 y(k)o(eyname)i Fu(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j -(out)d(in)h(English.)21 b(F)l(or)13 b(example:)675 435 -y Ft(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g -(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555 -605 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023 -603 y Fo(h)p 1035 577 57 2 v 1035 605 a Fn(C-u)p 1035 -613 V 1090 603 a Fo(i)1123 605 y Fu(is)h(b)q(ound)g(to)f(the)g -(function)h Ft(universal-)555 660 y(argument)p Fu(,)g(and)872 -658 y Fo(h)p 884 632 55 2 v 884 660 a Fn(C-o)p 884 667 -V 937 658 a Fo(i)971 660 y Fu(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g -(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e -(is,)h(to)f(insert)h(the)g(text)f(`)p Ft(>)h(output)p -Fu(')f(in)o(to)g(the)h(line\).)315 793 y Ft(")p Fm(k)o(eyseq)q -Ft(")p Fu(:)20 b Fm(function-name)e Fu(or)d Fm(macro)555 -848 y(k)o(eyseq)i Fu(di\013ers)e(from)g Fm(k)o(eyname)j -Fu(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555 -902 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q(eci\014ed,)i(b)o(y) -e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 957 y(double)e(quotes.)j -(Some)c Fp(gnu)g Fu(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es)g(can)g(b)q -(e)g(used,)g(as)555 1012 y(in)j(the)f(follo)o(wing)g(example,)h(but)f -(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)f(not)555 -1067 y(recognized.)675 1130 y Ft("\\C-u":)23 b(universal-argument)675 -1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h -("Function)f(Key)i(1")555 1301 y Fu(In)19 b(the)f(ab)q(o)o(v)o(e)g -(example,)1023 1299 y Fo(h)p 1035 1273 57 2 v 1035 1301 -a Fn(C-u)p 1035 1308 V 1090 1299 a Fo(i)1123 1301 y Fu(is)h(b)q(ound)g -(to)f(the)g(function)h Ft(universal-)555 1355 y(argument)9 -b Fu(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`) -1463 1353 y Fo(h)p 1475 1327 56 2 v 1475 1355 a Fn(C-x)p -1475 1363 V 1529 1353 a Fo(i)k(h)p 1571 1327 51 2 v 1571 -1355 a Fn(C-r)p 1571 1363 V 1620 1353 a Fo(i)1635 1355 -y Fu(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i -Ft(re-read-init-file)p Fu(,)c(and)i(`)1351 1408 y Fo(h)p -1363 1382 70 2 v 1363 1410 a Fn(ESC)p 1363 1418 V 1430 -1408 a Fo(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fn([)p -1472 1419 V 1480 1408 a Fo(i)g(h)p 1522 1382 18 2 v 1522 -1410 a Fn(1)p 1522 1418 V 1538 1408 a Fo(i)g(h)p 1580 -1382 V 1580 1410 a Fn(1)p 1580 1418 V 1595 1408 a Fo(i)g(h)p -1637 1382 24 2 v 1637 1410 a Ft(~)p 1637 1418 V 1659 -1408 a Fo(i)1674 1410 y Fu(')h(is)h(b)q(ound)555 1465 -y(to)e(insert)g(the)g(text)g(`)p Ft(Function)f(Key)h(1)p -Fu('.)315 1543 y(The)g(follo)o(wing)h Fp(gnu)e Fu(Emacs)h(st)o(yle)g -(escap)q(e)h(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying) -315 1598 y(k)o(ey)g(sequences:)315 1676 y Fk(\\C-)168 -b Fu(con)o(trol)15 b(pre\014x)315 1755 y Fk(\\M-)168 -b Fu(meta)15 b(pre\014x)315 1833 y Fk(\\e)192 b Fu(an)15 -b(escap)q(e)h(c)o(haracter)315 1911 y Fk(\\\\)192 b Fu(bac)o(kslash)315 -1989 y Fk(\\)p Ft(")555 1987 y Fo(h)p 567 1961 V 567 -1989 a Ft(")p 567 1997 V 589 1987 a Fo(i)604 1989 y Fu(,)15 -b(a)f(double)j(quotation)e(mark)315 2068 y Fk(\\')555 -2066 y Fo(h)p 567 2040 10 2 v 567 2068 a Fn(')p 567 2075 -V 575 2066 a Fo(i)590 2068 y Fu(,)g(a)f(single)j(quote)e(or)g(ap)q -(ostrophe)315 2146 y(In)f(addition)h(to)f(the)f Fp(gnu)h -Fu(Emacs)g(st)o(yle)f(escap)q(e)i(sequences,)g(a)e(second)i(set)e(of)h -(bac)o(kslash)315 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 -2279 y Ft(\\a)192 b Fu(alert)15 b(\(b)q(ell\))315 2357 -y Ft(\\b)192 b Fu(bac)o(kspace)315 2435 y Ft(\\d)g Fu(delete)315 -2514 y Ft(\\f)g Fu(form)14 b(feed)315 2592 y Ft(\\n)192 -b Fu(newline)315 2670 y Ft(\\r)g Fu(carriage)15 b(return)p -eop -%%Page: 8 10 -8 9 bop 75 -58 a Fu(8)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Ft(\\t)192 b Fu(horizon)o(tal)16 b(tab)315 262 -y Ft(\\v)192 b Fu(v)o(ertical)16 b(tab)315 340 y Ft(\\)p -Fm(nnn)141 b Fu(the)13 b(c)o(haracter)e(whose)i Ft(ASCII)e -Fu(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Fm(nnn)f -Fu(\(one)f(to)g(three)555 395 y(digits\))315 473 y Ft(\\x)p -Fm(nnn)117 b Fu(the)15 b(c)o(haracter)e(whose)i Ft(ASCII)e -Fu(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Fm(nnn)f -Fu(\(one)555 528 y(to)g(three)g(digits\))315 607 y(When)k(en)o(tering)g -(the)g(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o -(ust)f(b)q(e)h(used)h(to)315 662 y(indicate)12 b(a)f(macro)f -(de\014nition.)20 b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a) -f(function)i(name.)18 b(In)315 716 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i -(the)f(bac)o(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are) -g(expanded.)20 b(Bac)o(kslash)315 771 y(will)i(quote)d(an)o(y)h(other)g -(c)o(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p -Ft(")p Fu(')c(and)h(`)p Ft(')p Fu('.)34 b(F)l(or)315 -826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p -Ft(C-x)i(\\)p Fu(')f(insert)g(a)g(single)h(`)p Ft(\\)p -Fu(')e(in)o(to)h(the)g(line:)435 890 y Ft("\\C-x\\\\":)23 -b("\\\\")75 1000 y Fl(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -1096 y Fu(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -1150 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g -(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f -(as)75 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser) -g(directiv)o(es)h(used.)75 1284 y Ft($if)168 b Fu(The)16 -b Ft($if)f Fu(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g -(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 1338 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393 -y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f -(are)h(required)i(to)d(isolate)i(it.)315 1472 y Ft(mode)144 -b Fu(The)11 b Ft(mode=)e Fu(form)h(of)g(the)h Ft($if)f -Fu(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555 -1527 y(is)k(in)h Ft(emacs)e Fu(or)g Ft(vi)g Fu(mo)q(de.)20 -b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555 -1581 y(`)p Ft(set)f(keymap)p Fu(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Ft(emacs-)555 1636 y(standard)d -Fu(and)i Ft(emacs-ctlx)e Fu(k)o(eymaps)h(only)i(if)f(Readline)h(is)f -(starting)f(out)555 1691 y(in)k Ft(emacs)f Fu(mo)q(de.)315 -1769 y Ft(term)144 b Fu(The)14 b Ft(term=)e Fu(form)h(ma)o(y)g(b)q(e)h -(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555 -1824 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j -(output)e(b)o(y)g(the)g(terminal's)555 1879 y(function)13 -b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g -(the)g(`)p Ft(=)p Fu(')f(is)h(tested)g(against)555 1934 -y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q -(ortion)h(of)e(the)h(terminal)555 1989 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Ft(-)p Fu('.)24 b(This)17 b(allo)o(ws)g -Ft(sun)f Fu(to)g(matc)o(h)h(b)q(oth)f Ft(sun)h Fu(and)555 -2043 y Ft(sun-cmd)p Fu(,)d(for)g(instance.)315 2122 y -Ft(application)555 2177 y Fu(The)d Fm(application)i Fu(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Fm(application)555 2286 y(name)p -Fu(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18 -b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555 -2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i -(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i -(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren) -o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675 -2514 y Ft($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h -(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -2670 y($endif)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)75 183 y Ft($endif)96 b Fu(This)16 b(command,)e(as)h(seen)h(in)g -(the)f(previous)h(example,)g(terminates)f(an)g Ft($if)f -Fu(command.)75 263 y Ft($else)120 b Fu(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Ft($if)e Fu(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)75 343 y Ft($include)48 b Fu(This)14 b(directiv)o(e)i -(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h -(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435 -462 y Ft($include)23 b(/etc/inputrc)75 574 y Fl(1.3.3)30 -b(Sample)20 b(Init)h(File)137 670 y Fu(Here)16 b(is)g(an)f(example)h -(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g -(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 y(and)f(conditional)i -(syn)o(tax.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fu(10)1299 b(GNU)15 b(Readline)i(Library)195 -235 y Ft(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391 -y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195 -806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195 -1169 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1179 21 38 v -195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195 -1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g -(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195 -1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195 -1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g -(previous-history)195 1947 y("\\M-[B":)g(next-history)195 -1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g -(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195 -2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g -(previous-history)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 183 y Ft(#"\\M-\\C-[B":)165 b(next-history)195 -287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495 -y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the) -f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are) -h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195 -754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g -("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g -(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g -(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g -(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013 -y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i -(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195 -1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195 -1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740 -y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off) -195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f -(characters)195 2155 y(set)h(output-meta)g(on)195 2259 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e -(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195 -2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p -eop -%%Page: 12 14 -12 13 bop 75 -58 a Fu(12)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Ft("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75 -359 y Fs(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -453 y Fu(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -519 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g -(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29 -b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g -Fm(p)q(oin)o(t)h Fu(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Fm(mark)h Fu(refers)e(to)f(a)75 628 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Ft(set-mark)f Fu(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g -Fm(region)p Fu(.)75 790 y Fl(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 895 y Ft(beginning-of-line)13 -b(\(C-a\))315 950 y Fu(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 1026 y Ft(end-of-line)f(\(C-e\))315 -1081 y Fu(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1157 y Ft(forward-char)f(\(C-f\))315 1212 y Fu(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1288 y Ft(backward-char)e(\(C-b\))315 -1343 y Fu(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1419 y Ft(forward-word)f(\(M-f\))315 1474 y Fu(Mo)o(v)o(e)g(forw)o(ard) -g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q -(osed)i(of)f(letters)g(and)315 1529 y(digits.)75 1605 -y Ft(backward-word)e(\(M-b\))315 1660 y Fu(Mo)o(v)o(e)j(bac)o(k)g(to)h -(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24 -b(W)l(ords)16 b(are)h(comp)q(osed)315 1715 y(of)e(letters)g(and)g -(digits.)75 1791 y Ft(clear-screen)f(\(C-l\))315 1846 -y Fu(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,) -i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315 -1900 y(of)i(the)g(screen.)75 1977 y Ft(redraw-current-line)e(\(\))315 -2031 y Fu(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fl(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2244 y Ft(accept-line)14 b(\(Newline,)g(Return\))315 -2298 y Fu(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor) -f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315 -2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o -(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315 -2408 y(to)h(its)g(original)h(state.)75 2484 y Ft(previous-history)d -(\(C-p\))315 2539 y Fu(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g -(list.)75 2615 y Ft(next-history)f(\(C-n\))315 2670 y -Fu(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)p -eop -%%Page: 13 15 -13 14 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 183 y Ft(beginning-of-history)12 b(\(M-<\))315 -238 y Fu(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 314 y Ft(end-of-history)e(\(M->\))315 369 y Fu(Mo)o(v)o(e)h(to)h -(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i -(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 445 y Ft -(reverse-search-history)c(\(C-r\))315 500 y Fu(Searc)o(h)k(bac)o(kw)o -(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h -(`up')f(through)g(the)h(his-)315 555 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631 -y Ft(forward-search-history)c(\(C-s\))315 686 y Fu(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 741 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817 -y Ft(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -872 y Fu(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t) -f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -926 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 981 -y(user.)75 1057 y Ft(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1112 y Fu(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1167 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1222 y(user.)75 1298 y Ft(history-search-forward)f(\(\))315 -1353 y Fu(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1407 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1538 y Ft(history-search-backward)c(\(\))315 1593 y Fu(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1648 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1779 y Ft(yank-nth-arg)e(\(M-C-y\))315 1834 y Fu(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 1889 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Fm(n)p Fu(,)i(insert)f(the)h -Fm(n)p Fu(th)f(w)o(ord)g(from)g(the)g(previous)315 1943 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -1998 y(argumen)o(t)g(inserts)i(the)f Fm(n)p Fu(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y -Ft(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 y Fu(Insert)j(last)f -(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f -(of)g(the)g(previous)315 2184 y(history)e(en)o(try\).)20 -b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g -Ft(yank-nth-arg)p Fu(.)j(Succes-)315 2239 y(siv)o(e)f(calls)g(to)f -Ft(yank-last-arg)e Fu(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g -(list,)i(inserting)f(the)315 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2400 y Fl(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Ft(delete-char)14 -b(\(C-d\))315 2560 y Fu(Delete)j(the)f(c)o(haracter)g(under)h(the)f -(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of) -e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g -(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not) -315 2670 y(b)q(ound)g(to)f Ft(delete-char)p Fu(,)e(then)j(return)f -Ft(EOF)p Fu(.)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fu(14)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Ft(backward-delete-char)12 b(\(Rubout\))315 238 -y Fu(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c(n)o -(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 293 -y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -378 y Ft(forward-backward-delete-ch)o(ar)12 b(\(\))315 -432 y Fu(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h -(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315 -487 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h -(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315 -542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627 -y Ft(quoted-insert)e(\(C-q,)i(C-v\))315 682 y Fu(Add)j(the)f(next)g(c)o -(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26 -b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 736 -y(sequences)f(lik)o(e)605 734 y Fo(h)p 617 708 56 2 v -617 736 a Fn(C-q)p 617 744 V 671 734 a Fo(i)685 736 y -Fu(,)f(for)g(example.)75 821 y Ft(tab-insert)f(\(M-TAB\))315 -876 y Fu(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Ft(self-insert)f -(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fu(Insert)g(y)o(ourself.) -75 1100 y Ft(transpose-chars)e(\(C-t\))315 1155 y Fu(Drag)i(the)h(c)o -(haracter)f(b)q(efore)h(the)h(cursor)e(forw)o(ard)g(o)o(v)o(er)g(the)h -(c)o(haracter)f(at)h(the)g(cursor,)315 1210 y(mo)o(ving)i(the)f(cursor) -h(forw)o(ard)e(as)i(w)o(ell.)28 b(If)18 b(the)g(insertion)h(p)q(oin)o -(t)f(is)g(at)f(the)h(end)h(of)e(the)315 1265 y(line,)c(then)e(this)h -(transp)q(oses)e(the)h(last)g(t)o(w)o(o)f(c)o(haracters)g(of)h(the)g -(line.)20 b(Negativ)o(e)11 b(argumen)o(ts)315 1320 y(ha)o(v)o(e)k(no)g -(e\013ect.)75 1404 y Ft(transpose-words)e(\(M-t\))315 -1459 y Fu(Drag)i(the)h(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g -(w)o(ord)f(after)h(p)q(oin)o(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f -(that)315 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Ft(upcase-word)g -(\(M-u\))315 1654 y Fu(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o -(wing\))h(w)o(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp) -q(er-)315 1708 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g -(mo)o(v)o(e)f(the)i(cursor.)75 1793 y Ft(downcase-word)d(\(M-l\))315 -1848 y Fu(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h -(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o -(ercase)315 1903 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o -(v)o(e)f(the)h(cursor.)75 1988 y Ft(capitalize-word)e(\(M-c\))315 -2042 y Fu(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o -(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315 -2097 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)75 2220 y Fl(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2336 y Ft(kill-line)14 b(\(C-k\))315 2391 -y Fu(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 2476 y Ft(backward-kill-line)e(\(C-x)h(Rubout\))315 -2530 y Fu(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 2615 y Ft(unix-line-discard)e(\(C-u\))315 2670 -y Fu(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 183 y Ft(kill-whole-line)13 b(\(\))315 238 y -Fu(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e -(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315 -293 y(un)o(b)q(ound.)75 374 y Ft(kill-word)c(\(M-d\))315 -429 y Fu(Kill)j(from)d(p)q(oin)o(t)h(to)f(the)h(end)g(of)f(the)h -(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o(een)g(w)o(ords,)e(to)i -(the)f(end)315 483 y(of)h(the)g(next)g(w)o(ord.)20 b(W)l(ord)14 -b(b)q(oundaries)j(are)e(the)g(same)g(as)g Ft(forward-word)p -Fu(.)75 564 y Ft(backward-kill-word)e(\(M-DEL\))315 619 -y Fu(Kill)k(the)d(w)o(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 -b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h(same)f(as)g -Ft(backward-word)p Fu(.)75 700 y Ft(unix-word-rubout)f(\(C-w\))315 -755 y Fu(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o(t,)e(using)h -(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23 -b(The)16 b(killed)315 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 891 y Ft(delete-horizontal-space)c(\(\))315 -946 y Fu(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k -(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1027 -y Ft(kill-region)e(\(\))315 1082 y Fu(Kill)j(the)f(text)e(in)i(the)g -(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un) -o(b)q(ound.)75 1163 y Ft(copy-region-as-kill)d(\(\))315 -1217 y Fu(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1353 y Ft(copy-backward-word)d(\(\))315 1408 -y Fu(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -1463 y(same)c(as)g Ft(backward-word)p Fu(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 1544 y Ft(copy-forward-word)d(\(\)) -315 1599 y Fu(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f -(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e -(the)315 1653 y(same)g(as)g Ft(forward-word)p Fu(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 1734 y Ft(yank)f(\(C-y\))315 -1789 y Fu(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75 -1870 y Ft(yank-pop)f(\(M-y\))315 1925 y Fu(Rotate)j(the)g(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o -(ank-p)q(op.)75 2095 y Fl(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2205 y Ft(digit-argument)13 -b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 y Fu(Add)f(this)g(digit)g(to)f -(the)h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new) -h(argumen)o(t.)315 2313 y Fo(h)p 327 2287 50 2 v 327 -2315 a Fn(M{)p 327 2323 V 375 2313 a Fo(i)405 2315 y -Fu(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y -Ft(universal-argument)e(\(\))315 2451 y Fu(This)g(is)h(another)e(w)o(a) -o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -2506 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o -(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 -2560 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Ft(universal-argument)315 2615 -y Fu(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h -(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -2670 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) -f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fu(16)1299 b(GNU)15 b(Readline)i(Library)315 -183 y(or)c(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the) -g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -238 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f -(executing)i(this)f(function)h(the)e(\014rst)h(time)315 -293 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g -(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -348 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 472 y Fl(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 590 y Ft(complete)14 b(\(TAB\))315 644 y Fu(A)o(ttempt)j(to)g -(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27 -b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,) -15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y) -o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are) -g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;) -h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e -(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315 -864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g -(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315 -918 y(so)g(on.)75 1004 y Ft(possible-completions)d(\(M-?\))315 -1059 y Fu(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(the)f(cursor.)75 1145 y Ft(insert-completions)e(\(M-*\))315 -1199 y Fu(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) -q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -1254 y(b)o(y)f Ft(possible-completions)p Fu(.)75 1340 -y Ft(menu-complete)e(\(\))315 1395 y Fu(Similar)g(to)f -Ft(complete)p Fu(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 1450 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20 -b(execution)g(of)f Ft(menu-complete)315 1504 y Fu(steps)h(through)g -(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i -(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Fm(n)g Fu(mo)o(v)o(es)g Fm(n)g Fu(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f -(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g -(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)f Ft(TAB)p Fu(,)f(but)h(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1809 y Ft(delete-char-or-list)e(\(\))315 -1864 y Fu(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h -(not)f(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315 -1919 y(\(lik)o(e)i Ft(delete-char)p Fu(\).)j(If)d(at)f(the)h(end)g(of)f -(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d -Ft(possible-)315 1974 y(completions)p Fu(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 2098 y Fl(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 2216 y Ft(start-kbd-macro)13 b(\(C-x)i(\(\))315 -2270 y Fu(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o -(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 2356 -y Ft(end-kbd-macro)e(\(C-x)i(\)\))315 2411 y Fu(Stop)f(sa)o(ving)f(the) -h(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q -(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 2466 y(de\014nition.)75 -2552 y Ft(call-last-kbd-macro)g(\(C-x)h(e\))315 2606 -y Fu(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i -(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 -2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o -(eyb)q(oard.)p eop -%%Page: 17 19 -17 18 bop 75 -58 a Fu(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 183 y Fl(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -298 y Ft(re-read-init-file)13 b(\(C-x)h(C-r\))315 353 -y Fu(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Fm(inputrc)k -Fu(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75 -491 y Ft(abort)e(\(C-g\))315 546 y Fu(Ab)q(ort)f(the)g(curren)o(t)h -(editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s -(ject)e(to)g(the)315 600 y(setting)i(of)g Ft(bell-style)p -Fu(\).)75 684 y Ft(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Fm(x)p Ft(,)h Fj(:)8 b(:)g(:)n Ft(\))315 739 y Fu(If)14 -b(the)g(meta\014ed)g(c)o(haracter)f Fm(x)k Fu(is)d(lo)o(w)o(ercase,)g -(run)g(the)g(command)f(that)h(is)g(b)q(ound)h(to)e(the)315 -794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75 -877 y Ft(prefix-meta)e(\(ESC\))315 932 y Fu(Mak)o(e)j(the)i(next)f(c)o -(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19 -b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.) -20 b(T)o(yping)15 b(`)p Ft(ESC)g(f)p Fu(')f(is)i(equiv)m(alen)o(t)h(to) -d(t)o(yping)i(`)p Ft(M-f)p Fu('.)75 1070 y Ft(undo)f(\(C-_,)f(C-x)h -(C-u\))315 1125 y Fu(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1209 y Ft(revert-line)f(\(M-r\))315 -1263 y Fu(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26 -b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Ft(undo)f -Fu(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1402 y Ft(tilde-expand)f(\(M-~\))315 -1456 y Fu(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1540 y Ft(set-mark)f(\(C-@\))315 1595 y Fu(Set)g(the)f(mark)g -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1733 y Ft(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1788 y Fu(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k -(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o -(v)o(ed)315 1843 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q -(osition)h(is)g(sa)o(v)o(ed)f(as)g(the)g(mark.)75 1926 -y Ft(character-search)e(\(C-]\))315 1981 y Fu(A)f(c)o(haracter)g(is)h -(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q -(ccurrence)g(of)f(that)g(c)o(haracter.)315 2036 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2119 y Ft(character-search-backward)c(\(M-C-]\))315 2174 -y Fu(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v) -o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315 -2229 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f -(subsequen)o(t)i(o)q(ccurrences.)75 2312 y Ft(insert-comment)d(\(M-#\)) -315 2367 y Fu(The)19 b(v)m(alue)i(of)e(the)g Ft(comment-begin)e -Fu(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315 -2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if) -i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506 -y Ft(dump-functions)d(\(\))315 2560 y Fu(Prin)o(t)g(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)h -(output)e(stream.)315 2615 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i -(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o -(y)f(that)315 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fu(18)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Ft(dump-variables)c(\(\))315 238 y Fu(Prin)o(t)e(all)g(of)f(the)h -(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e(the)h -(Readline)i(output)d(stream.)315 293 y(If)16 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)i(supplied,)h(the)e(output)f(is)i(formatted)d(in)j -(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 348 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Fm(inputrc)k Fu(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Ft(dump-macros)f(\(\))315 -482 y Fu(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b) -q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315 -537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i -(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315 -592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Fm(inputrc)k Fu(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 647 y(default.)75 775 y Fs(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 871 y Fu(While)13 b(the)f(Readline)j(library)d(do)q -(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Ft(vi)g -Fu(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75 -926 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h(of)d(the)i(line.) -27 b(The)17 b(Readline)i Ft(vi)e Fu(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g -(sp)q(eci\014ed)i(in)75 981 y(the)c Fp(POSIX)h Fu(1003.2)d(standard.) -137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o -(w)o(een)f Ft(emacs)e Fu(and)i Ft(vi)f Fu(editing)i(mo)q(des,)f(use)f -(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21 -b(The)15 b(Readline)j(default)d(is)h Ft(emacs)f Fu(mo)q(de.)137 -1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Ft(vi)g -Fu(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q -(de,)g(as)g(if)g(y)o(ou)75 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Ft(i)p Fu('.)18 b(Pressing)608 1223 y Fo(h)p 620 1197 -70 2 v 620 1225 a Fn(ESC)p 620 1233 V 687 1223 a Fo(i)715 -1225 y Fu(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i -(where)f(y)o(ou)g(can)g(edit)h(the)75 1280 y(text)i(of)h(the)g(line)h -(with)g(the)f(standard)f Ft(vi)h Fu(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o -(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1335 -y(`)p Ft(k)p Fu(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Ft(j)p Fu(',)e(and)h(so)g(forth.)p eop -%%Page: 19 21 -19 20 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(19)75 183 y Fq(2)41 b(Programming)28 -b(with)e(GNU)i(Readline)137 305 y Fu(This)16 b(c)o(hapter)f(describ)q -(es)i(the)f(in)o(terface)g(b)q(et)o(w)o(een)f(the)h(GNU)f(Readline)j -(Library)e(and)f(other)g(pro-)75 360 y(grams.)38 b(If)22 -b(y)o(ou)f(are)g(a)g(programmer,)h(and)f(y)o(ou)g(wish)i(to)d(include)k -(the)e(features)f(found)h(in)g(GNU)75 414 y(Readline)16 -b(suc)o(h)e(as)f(completion,)h(line)h(editing,)g(and)f(in)o(teractiv)o -(e)g(history)f(manipulation)i(in)g(y)o(our)d(o)o(wn)75 -469 y(programs,)i(this)h(section)h(is)g(for)e(y)o(ou.)75 -602 y Fs(2.1)33 b(Basic)22 b(Beha)n(vior)137 700 y Fu(Man)o(y)15 -b(programs)f(pro)o(vide)i(a)f(command)g(line)i(in)o(terface,)e(suc)o(h) -h(as)f Ft(mail)p Fu(,)f Ft(ftp)p Fu(,)h(and)g Ft(sh)p -Fu(.)20 b(F)l(or)15 b(suc)o(h)75 754 y(programs,)e(the)h(default)h(b)q -(eha)o(viour)g(of)f(Readline)j(is)d(su\016cien)o(t.)21 -b(This)14 b(section)h(describ)q(es)h(ho)o(w)e(to)g(use)75 -809 y(Readline)19 b(in)g(the)e(simplest)h(w)o(a)o(y)e(p)q(ossible,)j(p) -q(erhaps)f(to)f(replace)h(calls)g(in)g(y)o(our)f(co)q(de)h(to)e -Ft(gets\(\))g Fu(or)75 864 y Ft(fgets)e(\(\))p Fu(.)137 -933 y(The)j(function)h Ft(readline)c(\(\))j Fu(prin)o(ts)g(a)g(prompt)f -(and)h(then)g(reads)g(and)g(returns)g(a)g(single)h(line)g(of)75 -988 y(text)12 b(from)f(the)i(user.)19 b(The)12 b(line)i -Ft(readline)d Fu(returns)h(is)h(allo)q(cated)g(with)g -Ft(malloc)h(\(\))p Fu(;)e(y)o(ou)g(should)i Ft(free)75 -1042 y(\(\))h Fu(the)g(line)i(when)f(y)o(ou)f(are)f(done)i(with)g(it.)k -(The)15 b(declaration)h(for)f Ft(readline)f Fu(in)i(ANSI)g(C)f(is)195 -1108 y Ft(char)23 b(*readline)g(\(char)g(*)p Fm(prompt)q -Ft(\);)75 1177 y Fu(So,)15 b(one)g(migh)o(t)g(sa)o(y)195 -1243 y Ft(char)23 b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);) -75 1312 y Fu(in)12 b(order)f(to)g(read)h(a)f(line)i(of)e(text)g(from)f -(the)i(user.)19 b(The)11 b(line)j(returned)d(has)h(the)f(\014nal)h -(newline)i(remo)o(v)o(ed,)75 1366 y(so)h(only)h(the)f(text)g(remains.) -137 1435 y(If)21 b Ft(readline)e Fu(encoun)o(ters)h(an)g -Ft(EOF)g Fu(while)i(reading)f(the)f(line,)j(and)d(the)h(line)g(is)g -(empt)o(y)f(at)g(that)75 1490 y(p)q(oin)o(t,)15 b(then)g -Ft(\(char)f(*\)NULL)g Fu(is)h(returned.)21 b(Otherwise,)15 -b(the)g(line)h(is)f(ended)h(just)e(as)h(if)g(a)f(newline)j(had)75 -1545 y(b)q(een)f(t)o(yp)q(ed.)137 1614 y(If)d(y)o(ou)g(w)o(an)o(t)f -(the)h(user)g(to)f(b)q(e)i(able)g(to)e(get)g(at)h(the)g(line)h(later,)f -(\(with)1325 1612 y Fo(h)p 1338 1586 57 2 v 1338 1614 -a Fn(C-p)p 1338 1621 V 1392 1612 a Fo(i)1420 1614 y Fu(for)f -(example\),)i(y)o(ou)f(m)o(ust)75 1668 y(call)j Ft(add_history)e(\(\))h -Fu(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)d(in)i(a)f -Fm(history)k Fu(list)d(of)e(suc)o(h)i(lines.)195 1734 -y Ft(add_history)22 b(\(line\);)75 1803 y Fu(F)l(or)15 -b(full)h(details)g(on)f(the)h(GNU)f(History)g(Library)l(,)g(see)h(the)f -(asso)q(ciated)g(man)o(ual.)137 1872 y(It)h(is)g(preferable)h(to)e(a)o -(v)o(oid)g(sa)o(ving)h(empt)o(y)f(lines)i(on)f(the)g(history)f(list,)i -(since)f(users)g(rarely)g(ha)o(v)o(e)f(a)75 1927 y(burning)h(need)g(to) -e(reuse)h(a)g(blank)g(line.)22 b(Here)15 b(is)g(a)g(function)g(whic)o -(h)h(usefully)h(replaces)e(the)g(standard)75 1981 y Ft(gets)g(\(\))f -Fu(library)i(function,)g(and)g(has)f(the)g(adv)m(an)o(tage)f(of)h(no)g -(static)g(bu\013er)h(to)e(o)o(v)o(er\015o)o(w:)195 2047 -y Ft(/*)24 b(A)f(static)g(variable)g(for)h(holding)e(the)i(line.)f(*/) -195 2099 y(static)g(char)g(*line_read)g(=)h(\(char)f(*\)NULL;)195 -2203 y(/*)h(Read)f(a)h(string,)f(and)g(return)g(a)h(pointer)f(to)g(it.) -48 b(Returns)22 b(NULL)i(on)f(EOF.)h(*/)195 2255 y(char)f(*)195 -2307 y(rl_gets)g(\(\))195 2359 y({)243 2411 y(/*)g(If)h(the)f(buffer)g -(has)h(already)f(been)g(allocated,)g(return)g(the)g(memory)314 -2462 y(to)h(the)f(free)h(pool.)f(*/)243 2514 y(if)g(\(line_read\))290 -2566 y({)338 2618 y(free)g(\(line_read\);)338 2670 y(line_read)g(=)h -(\(char)f(*\)NULL;)p eop -%%Page: 20 22 -20 21 bop 75 -58 a Fu(20)1299 b(GNU)15 b(Readline)i(Library)290 -183 y Ft(})243 287 y(/*)23 b(Get)h(a)f(line)h(from)f(the)h(user.)f(*/) -243 339 y(line_read)f(=)i(readline)f(\(""\);)243 443 -y(/*)g(If)h(the)f(line)h(has)f(any)h(text)f(in)g(it,)h(save)f(it)h(on)f -(the)h(history.)f(*/)243 495 y(if)g(\(line_read)g(&&)g(*line_read\))290 -546 y(add_history)g(\(line_read\);)243 650 y(return)g(\(line_read\);) -195 702 y(})137 770 y Fu(This)13 b(function)f(giv)o(es)h(the)e(user)h -(the)g(default)h(b)q(eha)o(viour)g(of)1169 768 y Fo(h)p -1181 742 74 2 v 1181 770 a Fn(T)m(AB)p 1181 777 V 1253 -768 a Fo(i)1280 770 y Fu(completion:)19 b(completion)13 -b(on)f(\014le)75 824 y(names.)20 b(If)c(y)o(ou)f(do)g(not)g(w)o(an)o(t) -f(Readline)k(to)c(complete)j(on)e(\014lenames,)h(y)o(ou)f(can)g(c)o -(hange)h(the)f(binding)75 879 y(of)g(the)205 877 y Fo(h)p -217 851 V 217 879 a Fn(T)m(AB)p 217 887 V 289 877 a Fo(i)319 -879 y Fu(k)o(ey)g(with)h Ft(rl_bind_key)d(\(\))p Fu(.)195 -944 y Ft(int)23 b(rl_bind_key)g(\(int)g Fm(k)o(ey)p Ft(,)h(int)f(\(*)p -Fm(function)p Ft(\)\(\)\);)137 1011 y(rl_bind_key)14 -b(\(\))h Fu(tak)o(es)g(t)o(w)o(o)g(argumen)o(ts:)20 b -Fm(k)o(ey)f Fu(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)g -(to)g(bind,)i(and)75 1066 y Fm(function)i Fu(is)f(the)g(address)g(of)g -(the)g(function)g(to)g(call)h(when)f Fm(k)o(ey)k Fu(is)c(pressed.)29 -b(Binding)1628 1064 y Fo(h)p 1641 1038 V 1641 1066 a -Fn(T)m(AB)p 1641 1074 V 1712 1064 a Fo(i)1745 1066 y -Fu(to)17 b Ft(rl_)75 1121 y(insert)d(\(\))i Fu(mak)o(es)433 -1119 y Fo(h)p 446 1093 V 446 1121 a Fn(T)m(AB)p 446 1129 -V 517 1119 a Fo(i)548 1121 y Fu(insert)g(itself.)22 b -Ft(rl_bind_key)13 b(\(\))i Fu(returns)h(non-zero)g(if)g -Fm(k)o(ey)j Fu(is)d(not)f(a)g(v)m(alid)75 1176 y(ASCI)q(I)h(c)o -(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)f(0)g(and)g(255\).)137 -1243 y(Th)o(us,)g(to)g(disable)h(the)g(default)703 1241 -y Fo(h)p 716 1215 V 716 1243 a Fn(T)m(AB)p 716 1251 V -787 1241 a Fo(i)817 1243 y Fu(b)q(eha)o(vior,)g(the)f(follo)o(wing)h -(su\016ces:)195 1308 y Ft(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)137 -1375 y Fu(This)14 b(co)q(de)g(should)g(b)q(e)g(executed)g(once)g(at)e -(the)h(start)f(of)h(y)o(our)g(program;)f(y)o(ou)h(migh)o(t)g(write)g(a) -g(func-)75 1430 y(tion)i(called)h Ft(initialize_readline)d(\(\))h -Fu(whic)o(h)i(p)q(erforms)e(this)h(and)g(other)g(desired)g -(initializations,)75 1485 y(suc)o(h)h(as)e(installing)k(custom)c -(completers)i(\(see)f(Section)h(2.6)f([Custom)f(Completers],)g(page)h -(33\).)75 1614 y Fs(2.2)33 b(Custom)21 b(F)-6 b(unctions)137 -1711 y Fu(Readline)15 b(pro)o(vides)e(man)o(y)e(functions)i(for)f -(manipulating)i(the)e(text)g(of)g(the)g(line,)i(but)e(it)h(isn't)f(p)q -(ossi-)75 1765 y(ble)i(to)f(an)o(ticipate)h(the)f(needs)h(of)f(all)h -(programs.)k(This)13 b(section)h(describ)q(es)h(the)e(v)m(arious)h -(functions)g(and)75 1820 y(v)m(ariables)g(de\014ned)h(within)f(the)f -(Readline)j(library)d(whic)o(h)h(allo)o(w)g(a)e(user)h(program)f(to)h -(add)g(customized)75 1875 y(functionalit)o(y)j(to)f(Readline.)137 -1942 y(Before)j(declaring)i(an)o(y)e(functions)h(that)f(customize)g -(Readline's)i(b)q(eha)o(vior,)g(or)d(using)i(an)o(y)f(func-)75 -1997 y(tionalit)o(y)23 b(Readline)i(pro)o(vides)f(in)f(other)g(co)q -(de,)h(an)f(application)i(writer)d(should)i(include)h(the)e(\014le)75 -2052 y Ft(<readline/readline.h>)14 b Fu(in)j(an)o(y)g(\014le)h(that)e -(uses)h(Readline's)h(features.)24 b(Since)19 b(some)d(of)g(the)h -(de\014-)75 2107 y(nitions)g(in)f Ft(readline.h)e Fu(use)i(the)g -Ft(stdio)f Fu(library)l(,)h(the)g(\014le)g Ft(<stdio.h>)f -Fu(should)h(b)q(e)g(included)j(b)q(efore)75 2162 y Ft(readline.h)p -Fu(.)75 2274 y Fl(2.2.1)30 b(The)20 b(F)-5 b(unction)20 -b(T)n(yp)r(e)137 2371 y Fu(F)l(or)f(readabilt)o(y)l(,)h(w)o(e)f -(declare)h(a)f(new)g(t)o(yp)q(e)g(of)g(ob)s(ject,)g(called)i -Fm(F)l(unction)p Fu(.)32 b(A)19 b Ft(Function)f Fu(is)h(a)g(C)75 -2425 y(function)d(whic)o(h)g(returns)f(an)g Ft(int)p -Fu(.)20 b(The)15 b(t)o(yp)q(e)g(declaration)h(for)f Ft(Function)f -Fu(is:)75 2493 y Ft(typedef)g(int)h(Function)f(\(\);)137 -2560 y Fu(The)21 b(reason)g(for)f(declaring)i(this)g(new)f(t)o(yp)q(e)g -(is)g(to)g(mak)o(e)f(it)h(easier)g(to)g(write)g(co)q(de)g(describing)75 -2615 y(p)q(oin)o(ters)16 b(to)f(C)g(functions.)21 b(Let)16 -b(us)f(sa)o(y)g(w)o(e)g(had)h(a)f(v)m(ariable)i(called)g -Fm(func)i Fu(whic)o(h)d(w)o(as)e(a)i(p)q(oin)o(ter)f(to)g(a)75 -2670 y(function.)21 b(Instead)15 b(of)g(the)g(classic)i(C)e -(declaration)p eop -%%Page: 21 23 -21 22 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(21)137 183 y Ft(int)15 b(\(*\)\(\)func;)75 -250 y Fu(w)o(e)g(ma)o(y)f(write)137 317 y Ft(Function)g(*func;)75 -384 y Fu(Similarly)l(,)j(there)e(are)195 449 y Ft(typedef)23 -b(void)g(VFunction)g(\(\);)195 501 y(typedef)g(char)g(*CPFunction)g -(\(\);)g Fu(and)195 552 y Ft(typedef)g(char)g(**CPPFunction)f(\(\);)75 -620 y Fu(for)17 b(functions)h(returning)g(no)f(v)m(alue,)h -Ft(pointer)d(to)g(char)p Fu(,)h(and)i Ft(pointer)c(to)h(pointer)f(to)h -(char)p Fu(,)i(re-)75 674 y(sp)q(ectiv)o(ely)l(.)75 786 -y Fl(2.2.2)30 b(W)-5 b(riting)20 b(a)h(New)f(F)-5 b(unction)137 -882 y Fu(In)17 b(order)f(to)f(write)h(new)h(functions)g(for)e -(Readline,)j(y)o(ou)e(need)h(to)e(kno)o(w)h(the)g(calling)i(con)o(v)o -(en)o(tions)75 937 y(for)g(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)h -(functions,)g(and)g(the)f(names)h(of)f(the)g(v)m(ariables)i(that)d -(describ)q(e)k(the)d(curren)o(t)75 992 y(state)c(of)h(the)g(line)i -(read)e(so)g(far.)137 1059 y(The)h(calling)h(sequence)f(for)f(a)f -(command)i Ft(foo)e Fu(lo)q(oks)i(lik)o(e)195 1123 y -Ft(foo)23 b(\(int)h(count,)f(int)g(key\))75 1190 y Fu(where)18 -b Fm(coun)o(t)h Fu(is)f(the)g(n)o(umeric)h(argumen)o(t)e(\(or)h(1)f(if) -i(defaulted\))f(and)g Fm(k)o(ey)k Fu(is)d(the)f(k)o(ey)g(that)f(in)o(v) -o(ok)o(ed)75 1245 y(this)f(function.)137 1312 y(It)c(is)g(completely)h -(up)f(to)f(the)g(function)i(as)e(to)g(what)g(should)h(b)q(e)g(done)g -(with)g(the)g(n)o(umeric)g(argumen)o(t.)75 1367 y(Some)20 -b(functions)h(use)f(it)g(as)g(a)g(rep)q(eat)g(coun)o(t,)g(some)g(as)g -(a)f(\015ag,)i(and)f(others)g(to)f(c)o(ho)q(ose)h(alternate)75 -1421 y(b)q(eha)o(vior)i(\(refreshing)g(the)g(curren)o(t)f(line)j(as)d -(opp)q(osed)h(to)f(refreshing)i(the)e(screen,)j(for)d(example\).)75 -1476 y(Some)c(c)o(ho)q(ose)f(to)g(ignore)h(it.)24 b(In)18 -b(general,)f(if)g(a)f(function)h(uses)g(the)g(n)o(umeric)h(argumen)o(t) -d(as)i(a)f(rep)q(eat)75 1531 y(coun)o(t,)e(it)g(should)h(b)q(e)f(able)h -(to)e(do)h(something)h(useful)g(with)f(b)q(oth)g(negativ)o(e)g(and)g(p) -q(ositiv)o(e)h(argumen)o(ts.)75 1586 y(A)o(t)g(the)g(v)o(ery)g(least,)g -(it)g(should)h(b)q(e)g(a)o(w)o(are)e(that)h(it)g(can)g(b)q(e)h(passed)g -(a)f(negativ)o(e)g(argumen)o(t.)75 1714 y Fs(2.3)33 b(Readline)23 -b(V)-6 b(ariables)137 1810 y Fu(These)16 b(v)m(ariables)g(are)f(a)o(v)m -(ailable)i(to)e(function)h(writers.)1661 1902 y(V)l(ariable)-1749 -b Fi(char)20 b(*)f Fh(rl)p 286 1902 18 3 v 21 w(line)p -395 1902 V 23 w(bu\013er)195 1957 y Fu(This)h(is)f(the)h(line)h -(gathered)e(so)f(far.)31 b(Y)l(ou)20 b(are)f(w)o(elcome)g(to)g(mo)q -(dify)h(the)f(con)o(ten)o(ts)f(of)195 2011 y(the)f(line,)h(but)f(see)g -(Section)g(2.4.5)e([Allo)o(wing)j(Undoing],)f(page)f(26.)24 -b(The)17 b(function)g Ft(rl_)195 2066 y(extend_line_buffer)8 -b Fu(is)k(a)o(v)m(ailable)g(to)f(increase)h(the)f(memory)f(allo)q -(cated)i(to)e Ft(rl_line_)195 2121 y(buffer)p Fu(.)1661 -2213 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2213 -V 21 w(p)r(oin)n(t)195 2267 y Fu(The)15 b(o\013set)g(of)f(the)i(curren) -o(t)f(cursor)g(p)q(osition)h(in)g Ft(rl_line_buffer)d -Fu(\(the)i Fm(p)q(oin)o(t)q Fu(\).)1661 2359 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 2359 V 21 w(end)195 2414 y -Fu(The)e(n)o(um)o(b)q(er)g(of)f(c)o(haracters)g(presen)o(t)h(in)g -Ft(rl_line_buffer)p Fu(.)26 b(When)18 b Ft(rl_point)e -Fu(is)j(at)195 2469 y(the)c(end)h(of)f(the)g(line,)i -Ft(rl_point)d Fu(and)h Ft(rl_end)f Fu(are)h(equal.)1661 -2560 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 2560 -V 21 w(mark)195 2615 y Fu(The)14 b(mark)e(\(sa)o(v)o(ed)h(p)q -(osition\))h(in)g(the)g(curren)o(t)f(line.)21 b(If)14 -b(set,)f(the)h(mark)e(and)i(p)q(oin)o(t)g(de\014ne)195 -2670 y(a)h Fm(region)p Fu(.)p eop -%%Page: 22 24 -22 23 bop 75 -58 a Fu(22)1299 b(GNU)15 b(Readline)i(Library)1661 -183 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(done)195 238 y Fu(Setting)j(this)g(to)f(a)h(non-zero)g(v)m -(alue)h(causes)f(Readline)i(to)d(return)h(the)g(curren)o(t)f(line)195 -293 y(immediately)l(.)1661 384 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 384 V 21 w(p)r(ending)p 436 384 -V 20 w(input)195 439 y Fu(Setting)15 b(this)h(to)f(a)f(v)m(alue)j(mak)o -(es)d(it)i(the)f(next)g(k)o(eystrok)o(e)f(read.)20 b(This)c(is)f(a)g(w) -o(a)o(y)f(to)h(stu\013)195 494 y(a)g(single)h(c)o(haracter)f(in)o(to)g -(the)g(input)i(stream.)1661 586 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 586 V 21 w(erase)p 363 586 V -20 w(empt)n(y)p 540 586 V 20 w(line)195 640 y Fu(Setting)13 -b(this)h(to)e(a)h(non-zero)g(v)m(alue)h(causes)f(Readline)j(to)c -(completely)i(erase)f(the)g(curren)o(t)195 695 y(line,)19 -b(including)g(an)o(y)e(prompt,)f(an)o(y)h(time)g(a)f(newline)j(is)f(t)o -(yp)q(ed)f(as)f(the)h(only)h(c)o(haracter)195 750 y(on)13 -b(an)f(otherwise-empt)o(y)h(line.)20 b(The)13 b(cursor)g(is)g(mo)o(v)o -(ed)f(to)g(the)g(b)q(eginning)j(of)d(the)h(newly-)195 -805 y(blank)j(line.)1661 896 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 896 V 21 w(prompt)195 951 y Fu(The)14 -b(prompt)f(Readline)j(uses.)k(This)14 b(is)g(set)g(from)f(the)g -(argumen)o(t)g(to)g Ft(readline)h(\(\))p Fu(,)g(and)195 -1006 y(should)i(not)f(b)q(e)h(assigned)g(to)e(directly)l(.)1661 -1097 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 1097 -V 21 w(already)p 419 1097 V 21 w(prompted)195 1152 y -Fu(If)14 b(an)g(application)h(wishes)f(to)f(displa)o(y)i(the)f(prompt)f -(itself,)i(rather)e(than)g(ha)o(v)o(e)h(Readline)195 -1207 y(do)j(it)h(the)f(\014rst)g(time)h Ft(readline\(\))e -Fu(is)i(called,)h(it)f(should)g(set)f(this)h(v)m(ariable)h(to)e(a)g -(non-)195 1262 y(zero)i(v)m(alue)i(after)e(displa)o(ying)i(the)f -(prompt.)32 b(The)20 b(prompt)f(m)o(ust)g(also)g(b)q(e)i(passed)e(as) -195 1317 y(the)c(argumen)o(t)e(to)h Ft(readline\(\))g -Fu(so)g(the)g(redispla)o(y)i(functions)f(can)g(up)q(date)g(the)g -(displa)o(y)195 1371 y(prop)q(erly)l(.)k(The)11 b(calling)h -(application)f(is)g(resp)q(onsible)h(for)e(managing)g(the)g(v)m(alue;)j -(Readline)195 1426 y(nev)o(er)i(sets)g(it.)1661 1518 -y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 1518 -V 21 w(library)p 475 1518 V 22 w(v)n(ersion)195 1573 -y Fu(The)c(v)o(ersion)h(n)o(um)o(b)q(er)f(of)g(this)h(revision)g(of)f -(the)g(library)l(.)1661 1664 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1664 V 21 w(terminal)p 518 1664 V 21 -w(name)195 1719 y Fu(The)c(terminal)h(t)o(yp)q(e,)f(used)h(for)f -(initialization.)1661 1811 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1811 V 21 w(readline)p 505 1811 V 22 -w(name)195 1865 y Fu(This)d(v)m(ariable)h(is)f(set)f(to)g(a)g(unique)i -(name)f(b)o(y)f(eac)o(h)g(application)j(using)e(Readline.)23 -b(The)195 1920 y(v)m(alue)12 b(allo)o(ws)e(conditional)i(parsing)f(of)f -(the)g(inputrc)h(\014le)h(\(see)e(Section)h(1.3.2)e([Conditional)195 -1975 y(Init)16 b(Constructs],)e(page)h(8\).)1661 2067 -y(V)l(ariable)-1749 b Fi(FILE)20 b(*)f Fh(rl)p 286 2067 -V 21 w(instream)195 2121 y Fu(The)c(stdio)h(stream)e(from)h(whic)o(h)h -(Readline)h(reads)e(input.)1661 2213 y(V)l(ariable)-1749 -b Fi(FILE)20 b(*)f Fh(rl)p 286 2213 V 21 w(outstream)195 -2268 y Fu(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q -(erforms)e(output.)1661 2359 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 2359 V 21 w(startup)p 595 2359 V 20 -w(ho)r(ok)195 2414 y Fu(If)15 b(non-zero,)f(this)h(is)g(the)f(address)h -(of)e(a)h(function)i(to)d(call)j(just)e(b)q(efore)h Ft(readline)e -Fu(prin)o(ts)195 2469 y(the)i(\014rst)g(prompt.)1661 -2560 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p -391 2560 V 21 w(pre)p 494 2560 V 20 w(input)p 647 2560 -V 21 w(ho)r(ok)195 2615 y Fu(If)d(non-zero,)h(this)f(is)h(the)f -(address)g(of)g(a)g(function)h(to)e(call)i(after)f(the)g(\014rst)f -(prompt)h(has)195 2670 y(b)q(een)f(prin)o(ted)g(and)g(just)f(b)q(efore) -g Ft(readline)f Fu(starts)g(reading)i(input)g(c)o(haracters.)p -eop -%%Page: 23 25 -23 24 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(23)1661 183 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 183 18 3 v 21 w(ev)n(en)n(t)p 544 183 -V 22 w(ho)r(ok)195 238 y Fu(If)d(non-zero,)f(this)h(is)f(the)h(address) -f(of)g(a)g(function)h(to)f(call)h(p)q(erio)q(dically)j(when)c(readline) -195 293 y(is)g(w)o(aiting)f(for)g(terminal)h(input.)1661 -409 y(V)l(ariable)-1749 b Fi(Function)20 b(*)g Fh(rl)p -391 409 V 21 w(getc)p 514 409 V 21 w(function)195 463 -y Fu(If)13 b(non-zero,)g Ft(readline)e Fu(will)k(call)e(indirectly)i -(through)d(this)h(p)q(oin)o(ter)g(to)f(get)g(a)h(c)o(haracter)195 -518 y(from)i(the)i(input)g(stream.)22 b(By)16 b(default,)h(it)f(is)h -(set)f(to)f Ft(rl_getc)p Fu(,)g(the)h(default)h Ft(readline)195 -573 y Fu(c)o(haracter)d(input)j(function)f(\(see)f(Section)h(2.4.8)e -([Utilit)o(y)h(F)l(unctions],)h(page)f(28\).)1661 689 -y(V)l(ariable)-1749 b Fi(VFunction)20 b(*)g Fh(rl)p 417 -689 V 21 w(redispla)n(y)p 661 689 V 22 w(function)195 -744 y Fu(If)g(non-zero,)h Ft(readline)d Fu(will)j(call)g(indirectly)h -(through)d(this)h(p)q(oin)o(ter)h(to)e(up)q(date)h(the)195 -798 y(displa)o(y)h(with)f(the)g(curren)o(t)g(con)o(ten)o(ts)g(of)f(the) -h(editing)i(bu\013er.)34 b(By)20 b(default,)h(it)g(is)f(set)195 -853 y(to)f Ft(rl_redisplay)p Fu(,)f(the)i(default)g Ft(readline)e -Fu(redispla)o(y)j(function)f(\(see)f(Section)i(2.4.6)195 -908 y([Redispla)o(y],)16 b(page)f(27\).)1661 1024 y(V)l(ariable)-1749 -b Fi(Keymap)20 b Fh(rl)p 293 1024 V 21 w(executing)p -551 1024 V 22 w(k)n(eymap)195 1079 y Fu(This)g(v)m(ariable)g(is)f(set)g -(to)f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g -(24\))f(in)195 1133 y(whic)o(h)e(the)f(curren)o(tly)h(executing)g -(readline)h(function)f(w)o(as)f(found.)1661 1249 y(V)l(ariable)-1749 -b Fi(Keymap)20 b Fh(rl)p 293 1249 V 21 w(binding)p 501 -1249 V 22 w(k)n(eymap)195 1304 y Fu(This)g(v)m(ariable)g(is)f(set)g(to) -f(the)h(k)o(eymap)g(\(see)g(Section)h(2.4.2)d([Keymaps],)i(page)g(24\)) -f(in)195 1359 y(whic)o(h)e(the)f(last)g(k)o(ey)h(binding)h(o)q -(ccurred.)75 1517 y Fs(2.4)33 b(Readline)23 b(Con)n(v)n(enience)g(F)-6 -b(unctions)75 1682 y Fl(2.4.1)30 b(Naming)20 b(a)g(F)-5 -b(unction)137 1790 y Fu(The)20 b(user)g(can)g(dynamically)i(c)o(hange)e -(the)g(bindings)i(of)d(k)o(eys)h(while)h(using)g(Readline.)36 -b(This)20 b(is)75 1845 y(done)f(b)o(y)f(represen)o(ting)h(the)g -(function)g(with)g(a)f(descriptiv)o(e)i(name.)29 b(The)19 -b(user)f(is)h(able)h(to)d(t)o(yp)q(e)i(the)75 1900 y(descriptiv)o(e)e -(name)e(when)h(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14 -b(in)i(an)f(init)i(\014le,)f(one)f(migh)o(t)g(\014nd)195 -1976 y Ft(Meta-Rubout:)46 b(backward-kill-word)137 2055 -y Fu(This)20 b(binds)h(the)f(k)o(eystrok)o(e)659 2053 -y Fo(h)p 671 2027 209 2 v 671 2055 a Fn(Meta-Rub)q(out)p -671 2062 V 878 2053 a Fo(i)912 2055 y Fu(to)f(the)h(function)g -Fm(descriptiv)o(ely)25 b Fu(named)20 b Ft(backward-)75 -2110 y(kill-word)p Fu(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f -(should)i(bind)f(the)g(functions)h(y)o(ou)e(write)h(to)e(descriptiv)o -(e)75 2164 y(names)e(as)g(w)o(ell.)21 b(Readline)c(pro)o(vides)f(a)f -(function)h(for)e(doing)i(that:)1650 2280 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 2280 18 3 v 21 w(add)p 328 -2280 V 20 w(defun)i Fg(\()p Ft(char)14 b(*name,)g(Function)g -(*function,)g(int)h(key)p Fg(\))195 2335 y Fu(Add)i Fm(name)h -Fu(to)e(the)g(list)h(of)e(named)i(functions.)23 b(Mak)o(e)15 -b Fm(function)i Fu(b)q(e)g(the)f(function)h(that)195 -2390 y(gets)e(called.)21 b(If)16 b Fm(k)o(ey)j Fu(is)c(not)g(-1,)g -(then)g(bind)i(it)e(to)g Fm(function)h Fu(using)g Ft(rl_bind_key)d -(\(\))p Fu(.)137 2506 y(Using)j(this)f(function)h(alone)g(is)f -(su\016cien)o(t)h(for)f(most)f(applications.)21 b(It)15 -b(is)h(the)f(recommended)h(w)o(a)o(y)75 2560 y(to)d(add)h(a)f(few)g -(functions)h(to)f(the)h(default)g(functions)g(that)f(Readline)j(has)d -(built)i(in.)20 b(If)14 b(y)o(ou)f(need)h(to)f(do)75 -2615 y(something)k(other)g(than)f(adding)i(a)e(function)i(to)e -(Readline,)j(y)o(ou)e(ma)o(y)f(need)i(to)e(use)h(the)g(underlying)75 -2670 y(functions)f(describ)q(ed)h(b)q(elo)o(w.)p eop -%%Page: 24 26 -24 25 bop 75 -58 a Fu(24)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fl(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 278 -y Fu(Key)16 b(bindings)i(tak)o(e)c(place)j(on)e(a)g Fm(k)o(eymap)p -Fu(.)21 b(The)15 b(k)o(eymap)h(is)f(the)h(asso)q(ciation)g(b)q(et)o(w)o -(een)g(the)f(k)o(eys)75 333 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h -(the)f(functions)h(that)f(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o -(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 388 y(existing)i(k)o(eymaps,)f -(and)g(tell)h(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1650 -476 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -476 18 3 v 21 w(mak)n(e)p 445 476 V 20 w(bare)p 575 476 -V 20 w(k)n(eymap)j Fg(\(\))195 531 y Fu(Returns)d(a)f(new,)i(empt)o(y)e -(k)o(eymap.)32 b(The)20 b(space)g(for)e(the)i(k)o(eymap)f(is)h(allo)q -(cated)h(with)195 586 y Ft(malloc)14 b(\(\))p Fu(;)h(y)o(ou)g(should)h -Ft(free)e(\(\))h Fu(it)h(when)g(y)o(ou)e(are)h(done.)1650 -674 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -674 V 21 w(cop)n(y)p 428 674 V 21 w(k)n(eymap)j Fg(\()p -Ft(Keymap)14 b(map)p Fg(\))195 729 y Fu(Return)i(a)f(new)g(k)o(eymap)g -(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fm(map)p Fu(.)1650 -818 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 -818 V 21 w(mak)n(e)p 445 818 V 20 w(k)n(eymap)j Fg(\(\))195 -872 y Fu(Return)15 b(a)f(new)h(k)o(eymap)f(with)h(the)g(prin)o(ting)h -(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1443 872 14 2 v -17 w(insert,)g(the)h(lo)o(w-)195 927 y(ercase)21 b(Meta)f(c)o -(haracters)g(b)q(ound)i(to)f(run)g(their)g(equiv)m(alen)o(ts,)j(and)d -(the)g(Meta)f(digits)195 982 y(b)q(ound)c(to)f(pro)q(duce)h(n)o(umeric) -g(argumen)o(ts.)1650 1070 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 1070 18 3 v 21 w(discard)p 441 1070 V 21 -w(k)n(eymap)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 -1125 y Fu(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fm(k)o(eymap)p Fu(.)137 1214 y(Readline)25 b(has)e(sev)o(eral)g(in)o -(ternal)g(k)o(eymaps.)42 b(These)23 b(functions)g(allo)o(w)g(y)o(ou)f -(to)g(c)o(hange)h(whic)o(h)75 1268 y(k)o(eymap)15 b(is)h(activ)o(e.) -1650 1357 y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p -293 1357 V 21 w(get)p 391 1357 V 21 w(k)n(eymap)i Fg(\(\))195 -1412 y Fu(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650 -1500 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1500 -V 21 w(set)p 333 1500 V 21 w(k)n(eymap)i Fg(\()p Ft(Keymap)14 -b(keymap)p Fg(\))195 1555 y Fu(Mak)o(es)g Fm(k)o(eymap)j -Fu(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1650 1643 -y(F)l(unction)-1749 b Fi(Keymap)20 b Fh(rl)p 293 1643 -V 21 w(get)p 391 1643 V 21 w(k)n(eymap)p 605 1643 V 20 -w(b)n(y)p 685 1643 V 21 w(name)i Fg(\()p Ft(char)14 b(*name)p -Fg(\))195 1698 y Fu(Return)h(the)f(k)o(eymap)g(matc)o(hing)h -Fm(name)p Fu(.)k Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h -(supplied)i(in)e(a)195 1753 y Ft(set)g(keymap)f Fu(inputrc)i(line)h -(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)1650 -1841 y(F)l(unction)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1841 V 21 w(get)p 384 1841 V 21 w(k)n(eymap)p 598 1841 -V 20 w(name)i Fg(\()p Ft(Keymap)14 b(keymap)p Fg(\))195 -1896 y Fu(Return)h(the)f(name)h(matc)o(hing)f Fm(k)o(eymap)p -Fu(.)19 b Fm(name)e Fu(is)e(one)g(whic)o(h)g(w)o(ould)f(b)q(e)h -(supplied)i(in)e(a)195 1951 y Ft(set)g(keymap)f Fu(inputrc)i(line)h -(\(see)e(Section)h(1.3)f([Readline)i(Init)f(File],)f(page)g(4\).)75 -2059 y Fl(2.4.3)30 b(Binding)20 b(Keys)137 2154 y Fu(Y)l(ou)j(asso)q -(ciate)f(k)o(eys)g(with)h(functions)g(through)f(the)g(k)o(eymap.)41 -b(Readline)25 b(has)d(sev)o(eral)h(in)o(ter-)75 2209 -y(nal)h(k)o(eymaps:)35 b Ft(emacs_standard_keymap)p Fu(,)22 -b Ft(emacs_meta_keymap)p Fu(,)g Ft(emacs_ctlx_keymap)p -Fu(,)g Ft(vi_)75 2264 y(movement_keymap)p Fu(,)e(and)i -Ft(vi_insertion_keymap)p Fu(.)35 b Ft(emacs_standard_keymap)18 -b Fu(is)k(the)f(default,)75 2319 y(and)15 b(the)h(examples)g(in)g(this) -f(man)o(ual)h(assume)f(that.)137 2385 y(Since)k Ft(readline)c -Fu(installs)j(a)f(set)f(of)h(default)g(k)o(ey)g(bindings)h(the)f -(\014rst)g(time)g(it)g(is)g(called,)i(there)d(is)75 2440 -y(alw)o(a)o(ys)f(the)g(danger)g(that)g(a)g(custom)g(binding)i -(installed)g(b)q(efore)f(the)f(\014rst)g(call)h(to)f -Ft(readline)f Fu(will)j(b)q(e)75 2494 y(o)o(v)o(erridden.)28 -b(An)17 b(alternate)h(mec)o(hanism)g(is)g(to)f(install)i(custom)e(k)o -(ey)h(bindings)h(in)f(an)g(initialization)75 2549 y(function)h -(assigned)h(to)d(the)i Ft(rl_startup_hook)e Fu(v)m(ariable)j(\(see)e -(Section)h(2.3)f([Readline)j(V)l(ariables],)75 2604 y(page)15 -b(21\).)137 2670 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)p -eop -%%Page: 25 27 -25 26 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(25)1650 183 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(bind)p 347 183 V 21 w(k)n(ey)k -Fg(\()p Ft(int)14 b(key,)h(Function)f(*function)p Fg(\))195 -238 y Fu(Binds)i Fm(k)o(ey)j Fu(to)14 b Fm(function)h -Fu(in)h(the)f(curren)o(tly)g(activ)o(e)g(k)o(eymap.)20 -b(Returns)15 b(non-zero)g(in)h(the)195 293 y(case)f(of)g(an)g(in)o(v)m -(alid)j Fm(k)o(ey)p Fu(.)1650 374 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 374 V 21 w(bind)p 347 374 V -21 w(k)n(ey)p 452 374 V 21 w(in)p 520 374 V 22 w(map)h -Fg(\()p Ft(int)14 b(key,)h(Function)f(*function,)283 -429 y(Keymap)g(map)p Fg(\))195 484 y Fu(Bind)i Fm(k)o(ey)j -Fu(to)c Fm(function)h Fu(in)g Fm(map)p Fu(.)k(Returns)15 -b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j -Fm(k)o(ey)p Fu(.)1650 565 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 565 V 21 w(un)n(bind)p 409 565 V 21 w(k)n(ey)k -Fg(\()p Ft(int)14 b(key)p Fg(\))195 620 y Fu(Bind)g Fm(k)o(ey)j -Fu(to)c(the)g(n)o(ull)i(function)f(in)g(the)f(curren)o(tly)h(activ)o(e) -f(k)o(eymap.)19 b(Returns)14 b(non-zero)195 675 y(in)i(case)f(of)g -(error.)1650 756 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 756 V 21 w(un)n(bind)p 409 756 V 21 w(k)n(ey)p 514 -756 V 21 w(in)p 582 756 V 22 w(map)h Fg(\()p Ft(int)14 -b(key,)h(Keymap)f(map)p Fg(\))195 811 y Fu(Bind)i Fm(k)o(ey)j -Fu(to)c(the)g(n)o(ull)i(function)f(in)g Fm(map)p Fu(.)k(Returns)15 -b(non-zero)h(in)g(case)f(of)g(error.)1650 892 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 892 V 21 w(un)n(bind)p 409 -892 V 21 w(function)p 635 892 V 21 w(in)p 703 892 V 21 -w(map)h Fg(\()p Ft(Function)14 b(*function,)283 947 y(Keymap)g(map)p -Fg(\))195 1002 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f(execute)i -Fm(function)g Fu(in)g Fm(map)p Fu(.)1650 1083 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1083 V 21 w(un)n(bind)p 409 -1083 V 21 w(command)p 674 1083 V 17 w(in)p 738 1083 V -22 w(map)h Fg(\()p Ft(char)14 b(*command,)g(Keymap)283 -1138 y(map)p Fg(\))195 1193 y Fu(Un)o(bind)j(all)f(k)o(eys)f(that)f -(are)h(b)q(ound)h(to)f Fm(command)i Fu(in)f Fm(map)p -Fu(.)1650 1274 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 1274 V 21 w(generic)p 413 1274 V 21 w(bind)j Fg(\()p -Ft(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)283 -1329 y(Keymap)f(map)p Fg(\))195 1384 y Fu(Bind)g(the)f(k)o(ey)g -(sequence)i(represen)o(ted)e(b)o(y)g(the)g(string)g Fm(k)o(eyseq)h -Fu(to)f(the)g(arbitrary)f(p)q(oin)o(ter)195 1438 y Fm(data)p -Fu(.)19 b Fm(t)o(yp)q(e)e Fu(sa)o(ys)c(what)h(kind)i(of)e(data)f(is)i -(p)q(oin)o(ted)g(to)f(b)o(y)g Fm(data)p Fu(;)g(this)h(can)f(b)q(e)h(a)f -(function)195 1493 y(\()p Ft(ISFUNC)p Fu(\),)f(a)h(macro)g(\()p -Ft(ISMACR)p Fu(\),)f(or)i(a)f(k)o(eymap)h(\()p Ft(ISKMAP)p -Fu(\).)j(This)d(mak)o(es)f(new)h(k)o(eymaps)195 1548 -y(as)g(necessary)l(.)20 b(The)c(initial)h(k)o(eymap)e(in)h(whic)o(h)g -(to)e(do)i(bindings)h(is)e Fm(map)p Fu(.)1650 1629 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1629 V 21 w(parse)p 369 1629 -V 19 w(and)p 480 1629 V 21 w(bind)j Fg(\()p Ft(char)14 -b(*line)p Fg(\))195 1684 y Fu(P)o(arse)k Fm(line)23 b -Fu(as)c(if)g(it)g(had)g(b)q(een)h(read)e(from)h(the)f -Ft(inputrc)g Fu(\014le)i(and)f(p)q(erform)g(an)o(y)f(k)o(ey)195 -1739 y(bindings)i(and)e(v)m(ariable)i(assignmen)o(ts)d(found)i(\(see)f -(Section)h(1.3)e([Readline)j(Init)f(File],)195 1794 y(page)c(4\).)1650 -1875 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1875 -V 21 w(read)p 346 1875 V 20 w(init)p 450 1875 V 22 w(\014le)k -Fg(\()p Ft(char)14 b(*filename)p Fg(\))195 1930 y Fu(Read)25 -b(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)e(from)g -Fm(\014lename)29 b Fu(\(see)24 b(Section)i(1.3)195 1985 -y([Readline)17 b(Init)f(File],)g(page)f(4\).)75 2086 -y Fl(2.4.4)30 b(Asso)r(ciating)20 b(F)-5 b(unction)20 -b(Names)h(and)f(Bindings)137 2179 y Fu(These)11 b(functions)h(allo)o(w) -e(y)o(ou)h(to)f(\014nd)h(out)f(what)g(k)o(eys)h(in)o(v)o(ok)o(e)f -(named)h(functions)h(and)e(the)h(functions)75 2233 y(in)o(v)o(ok)o(ed)k -(b)o(y)h(a)e(particular)i(k)o(ey)f(sequence.)1650 2315 -y(F)l(unction)-1749 b Fi(Function)20 b(*)g Fh(rl)p 391 -2315 V 21 w(named)p 579 2315 V 19 w(function)j Fg(\()p -Ft(char)14 b(*name)p Fg(\))195 2369 y Fu(Return)i(the)f(function)h -(with)g(name)f Fm(name)p Fu(.)1650 2451 y(F)l(unction)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 2451 V 21 w(function)p -617 2451 V 21 w(of)p 685 2451 V 19 w(k)n(eyseq)k Fg(\()p -Ft(char)15 b(*keyseq,)f(Keymap)283 2506 y(map,)g(int)h(*type)p -Fg(\))195 2560 y Fu(Return)j(the)f(function)g(in)o(v)o(ok)o(ed)g(b)o(y) -g Fm(k)o(eyseq)h Fu(in)g(k)o(eymap)f Fm(map)p Fu(.)25 -b(If)17 b Fm(map)h Fu(is)f(NULL,)h(the)195 2615 y(curren)o(t)13 -b(k)o(eymap)g(is)h(used.)20 b(If)14 b Fm(t)o(yp)q(e)i -Fu(is)e(not)f(NULL,)h(the)f(t)o(yp)q(e)g(of)g(the)h(ob)s(ject)f(is)h -(returned)195 2670 y(in)i(it)f(\(one)g(of)g Ft(ISFUNC)p -Fu(,)f Ft(ISKMAP)p Fu(,)g(or)h Ft(ISMACR)p Fu(\).)p eop -%%Page: 26 28 -26 27 bop 75 -58 a Fu(26)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312 -183 18 3 v 21 w(in)n(v)n(oking)p 541 183 V 23 w(k)n(eyseqs)k -Fg(\()p Ft(Function)14 b(*function)p Fg(\))195 238 y -Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o -(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195 -293 y(tion)g Fu(in)h(the)g(curren)o(t)f(k)o(eymap.)1650 -387 y(F)l(unction)-1749 b Fi(char)20 b(**)f Fh(rl)p 312 -387 V 21 w(in)n(v)n(oking)p 541 387 V 23 w(k)n(eyseqs)p -750 387 V 21 w(in)p 818 387 V 22 w(map)i Fg(\()p Ft(Function)14 -b(*function,)283 442 y(Keymap)g(map)p Fg(\))195 497 y -Fu(Return)i(an)f(arra)o(y)f(of)h(strings)g(represen)o(ting)h(the)g(k)o -(ey)f(sequences)h(used)g(to)f(in)o(v)o(ok)o(e)g Fm(func-)195 -552 y(tion)g Fu(in)h(the)g(k)o(eymap)f Fm(map)p Fu(.)1650 -646 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 646 -V 21 w(function)p 467 646 V 21 w(dump)r(er)g Fg(\()p -Ft(int)15 b(readable)p Fg(\))195 701 y Fu(Prin)o(t)k(the)h(readline)g -(function)g(names)g(and)f(the)g(k)o(ey)g(sequences)i(curren)o(tly)e(b)q -(ound)i(to)195 756 y(them)16 b(to)f Ft(rl_outstream)p -Fu(.)k(If)d Fm(readable)j Fu(is)d(non-zero,)g(the)g(list)g(is)g -(formatted)f(in)h(suc)o(h)g(a)195 810 y(w)o(a)o(y)e(that)h(it)g(can)g -(b)q(e)h(made)g(part)e(of)h(an)g Ft(inputrc)f Fu(\014le)i(and)g -(re-read.)1650 905 y(F)l(unction)-1749 b Fi(void)20 b -Fh(rl)p 241 905 V 21 w(list)p 337 905 V 22 w(funmap)p -550 905 V 18 w(names)h Fg(\(\))195 960 y Fu(Prin)o(t)15 -b(the)g(names)h(of)e(all)j(bindable)g(Readline)g(functions)f(to)f -Ft(rl_outstream)p Fu(.)1650 1054 y(F)l(unction)-1749 -b Fi(char)20 b(**)f Fh(rl)p 312 1054 V 21 w(funmap)p -524 1054 V 18 w(names)i Fg(\(\))195 1109 y Fu(Return)12 -b(a)e(NULL)i(terminated)g(arra)o(y)d(of)i(kno)o(wn)g(function)h(names.) -18 b(The)11 b(arra)o(y)f(is)i(sorted.)195 1163 y(The)k(arra)o(y)f -(itself)i(is)f(allo)q(cated,)h(but)f(not)f(the)h(strings)g(inside.)24 -b(Y)l(ou)16 b(should)h(free)f(\(\))f(the)195 1218 y(arra)o(y)f(when)i -(y)o(ou)e(done,)i(but)f(not)g(the)g(p)q(oin)o(trs.)75 -1333 y Fl(2.4.5)30 b(Allo)n(wing)21 b(Undoing)137 1430 -y Fu(Supp)q(orting)14 b(the)g(undo)f(command)g(is)h(a)f(painless)h -(thing,)g(and)f(mak)o(es)g(y)o(our)f(functions)i(m)o(uc)o(h)f(more)75 -1485 y(useful.)28 b(It)17 b(is)h(certainly)h(easy)e(to)g(try)g -(something)g(if)h(y)o(ou)f(kno)o(w)g(y)o(ou)h(can)f(undo)h(it.)27 -b(I)18 b(could)g(use)g(an)75 1540 y(undo)e(function)g(for)e(the)i(sto)q -(c)o(k)e(mark)o(et.)137 1608 y(If)g(y)o(our)e(function)i(simply)h -(inserts)f(text)e(once,)i(or)e(deletes)j(text)d(once,)i(and)f(uses)h -Ft(rl_insert_text)75 1663 y(\(\))h Fu(or)g Ft(rl_delete_text)e(\(\))i -Fu(to)f(do)h(it,)g(then)h(undoing)g(is)g(already)f(done)h(for)f(y)o(ou) -f(automatically)l(.)137 1731 y(If)d(y)o(ou)f(do)g(m)o(ultiple)i -(insertions)f(or)f(m)o(ultiple)i(deletions,)g(or)e(an)o(y)g(com)o -(bination)h(of)f(these)g(op)q(erations,)75 1786 y(y)o(ou)19 -b(should)h(group)e(them)h(together)g(in)o(to)g(one)g(op)q(eration.)31 -b(This)20 b(is)f(done)h(with)f Ft(rl_begin_undo_)75 1841 -y(group)14 b(\(\))h Fu(and)h Ft(rl_end_undo_group)d(\(\))p -Fu(.)137 1909 y(The)j(t)o(yp)q(es)f(of)g(ev)o(en)o(ts)g(that)f(can)h(b) -q(e)h(undone)g(are:)195 1975 y Ft(enum)23 b(undo_code)g({)h -(UNDO_DELETE,)e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)137 -2043 y Fu(Notice)16 b(that)e Ft(UNDO_DELETE)g Fu(means)h(to)g(insert)g -(some)g(text,)f(and)i Ft(UNDO_INSERT)d Fu(means)i(to)g(delete)75 -2098 y(some)d(text.)18 b(That)12 b(is,)h(the)f(undo)g(co)q(de)h(tells)g -(undo)g(what)e(to)h(undo,)h(not)f(ho)o(w)f(to)h(undo)g(it.)19 -b Ft(UNDO_BEGIN)75 2152 y Fu(and)c Ft(UNDO_END)f Fu(are)h(tags)g(added) -g(b)o(y)h Ft(rl_begin_undo_group)c(\(\))j Fu(and)g Ft -(rl_end_undo_group)e(\(\))p Fu(.)1650 2247 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 2247 V 21 w(b)r(egin)p 372 -2247 V 20 w(undo)p 517 2247 V 20 w(group)h Fg(\(\))195 -2302 y Fu(Begins)e(sa)o(ving)g(undo)g(information)f(in)i(a)e(group)g -(construct.)29 b(The)19 b(undo)g(information)195 2356 -y(usually)f(comes)f(from)f(calls)h(to)g Ft(rl_insert_text)c(\(\))j -Fu(and)h Ft(rl_delete_text)c(\(\))p Fu(,)k(but)195 2411 -y(could)f(b)q(e)g(the)f(result)h(of)f(calls)h(to)f Ft(rl_add_undo)e -(\(\))p Fu(.)1650 2506 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 2506 V 21 w(end)p 326 2506 V 20 w(undo)p -471 2506 V 20 w(group)h Fg(\(\))195 2560 y Fu(Closes)c(the)g(curren)o -(t)g(undo)h(group)e(started)h(with)g Ft(rl_begin_undo_group)c(\(\))p -Fu(.)25 b(There)195 2615 y(should)17 b(b)q(e)f(one)f(call)i(to)e -Ft(rl_end_undo_group)e(\(\))i Fu(for)g(eac)o(h)g(call)i(to)e -Ft(rl_begin_undo_)195 2670 y(group)f(\(\))p Fu(.)p eop -%%Page: 27 29 -27 28 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(27)1650 183 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 183 18 3 v 21 w(add)p 354 183 V 20 w(undo)i -Fg(\()p Ft(enum)14 b(undo_code)g(what,)g(int)h(start,)g(int)f(end,)283 -238 y(char)g(*text)p Fg(\))195 293 y Fu(Remem)o(b)q(er)j(ho)o(w)f(to)f -(undo)i(an)f(ev)o(en)o(t)g(\(according)h(to)e Fm(what)q -Fu(\).)23 b(The)16 b(a\013ected)g(text)g(runs)195 348 -y(from)e Fm(start)h Fu(to)g Fm(end)p Fu(,)g(and)h(encompasses)f -Fm(text)p Fu(.)1650 445 y(F)l(unction)-1749 b Fi(void)20 -b Fh(free)p 296 445 V 20 w(undo)p 441 445 V 20 w(list)k -Fg(\(\))195 500 y Fu(F)l(ree)15 b(the)h(existing)g(undo)f(list.)1650 -597 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 597 -V 21 w(do)p 297 597 V 20 w(undo)i Fg(\(\))195 651 y Fu(Undo)16 -b(the)g(\014rst)f(thing)h(on)g(the)f(undo)h(list.)22 -b(Returns)17 b Ft(0)e Fu(if)h(there)g(w)o(as)f(nothing)h(to)f(undo,)195 -706 y(non-zero)g(if)h(something)g(w)o(as)e(undone.)137 -803 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i -(text,)e(but)g(directly)i(mo)q(dify)f(the)g(existing)g(text)g(\(e.g.,) -75 858 y(c)o(hange)i(its)h(case\),)g(call)g Ft(rl_modifying)14 -b(\(\))k Fu(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)f -(text.)29 b(Y)l(ou)19 b(m)o(ust)75 913 y(supply)d(the)g(indices)h(of)e -(the)g(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q(dify)l(.) -1650 1010 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 -1010 V 21 w(mo)r(difying)h Fg(\()p Ft(int)15 b(start,)f(int)h(end)p -Fg(\))195 1065 y Fu(T)l(ell)i(Readline)i(to)c(sa)o(v)o(e)g(the)i(text)e -(b)q(et)o(w)o(een)h Fm(start)g Fu(and)g Fm(end)j Fu(as)c(a)h(single)h -(undo)g(unit.)23 b(It)195 1120 y(is)16 b(assumed)f(that)g(y)o(ou)f -(will)j(subsequen)o(tly)g(mo)q(dify)e(that)g(text.)75 -1237 y Fl(2.4.6)30 b(Redispla)n(y)1650 1363 y Fu(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 1363 V 21 w(redispla)n(y)k -Fg(\(\))195 1417 y Fu(Change)19 b(what's)f(displa)o(y)o(ed)i(on)f(the)f -(screen)i(to)e(re\015ect)h(the)g(curren)o(t)g(con)o(ten)o(ts)f(of)g -Ft(rl_)195 1472 y(line_buffer)p Fu(.)1650 1569 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 1569 V 21 w(forced)p 390 1569 -V 20 w(up)r(date)p 584 1569 V 20 w(displa)n(y)k Fg(\(\))195 -1624 y Fu(F)l(orce)17 b(the)f(line)j(to)d(b)q(e)i(up)q(dated)f(and)g -(redispla)o(y)o(ed,)h(whether)f(or)g(not)f(Readline)j(thinks)195 -1679 y(the)c(screen)h(displa)o(y)g(is)g(correct.)1650 -1776 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1776 -V 21 w(on)p 297 1776 V 20 w(new)p 416 1776 V 21 w(line)k -Fg(\(\))195 1831 y Fu(T)l(ell)15 b(the)f(up)q(date)h(functions)g(that)e -(w)o(e)g(ha)o(v)o(e)h(mo)o(v)o(ed)f(on)o(to)g(a)h(new)g(\(empt)o(y\))f -(line,)j(usually)195 1886 y(after)e(ouputting)i(a)f(newline.)1650 -1983 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1983 -V 21 w(on)p 297 1983 V 20 w(new)p 416 1983 V 21 w(line)p -525 1983 V 22 w(with)p 657 1983 V 22 w(prompt)h Fg(\(\))195 -2037 y Fu(T)l(ell)c(the)e(up)q(date)h(functions)g(that)f(w)o(e)g(ha)o -(v)o(e)g(mo)o(v)o(ed)f(on)o(to)h(a)g(new)g(line,)i(with)f -Fm(rl)p 1595 2037 14 2 v 16 w(prompt)195 2092 y Fu(already)f(displa)o -(y)o(ed.)22 b(This)15 b(could)h(b)q(e)g(used)g(b)o(y)f(applications)i -(that)d(w)o(an)o(t)g(to)h(output)g(the)195 2147 y(prompt)j(string)g -(themselv)o(es,)h(but)g(still)h(need)f(Readline)h(to)e(kno)o(w)g(the)g -(prompt)g(string)195 2202 y(length)e(for)e(redispla)o(y)l(.)22 -b(It)15 b(should)h(b)q(e)g(used)g(after)e(setting)h Fm(rl)p -1258 2202 V 17 w(already)p 1420 2202 V 17 w(prompted)p -Fu(.)1650 2299 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 2299 18 3 v 21 w(reset)p 357 2299 V 20 w(line)p 465 -2299 V 23 w(state)j Fg(\(\))195 2354 y Fu(Reset)17 b(the)f(displa)o(y)h -(state)f(to)f(a)h(clean)h(state)f(and)g(redispla)o(y)h(the)g(curren)o -(t)f(line)i(starting)195 2409 y(on)d(a)g(new)g(line.)1650 -2506 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2506 -V 21 w(message)g Fg(\()p Ft(va_alist)p Fg(\))195 2560 -y Fu(The)h(argumen)o(ts)f(are)g(a)g(string)h(as)f(w)o(ould)h(b)q(e)g -(supplied)i(to)d Ft(printf)p Fu(.)35 b(The)21 b(resulting)195 -2615 y(string)h(is)g(displa)o(y)o(ed)h(in)g(the)f Fm(ec)o(ho)g(area)p -Fu(.)39 b(The)23 b(ec)o(ho)f(area)f(is)h(also)g(used)h(to)e(displa)o(y) -195 2670 y(n)o(umeric)16 b(argumen)o(ts)e(and)i(searc)o(h)f(strings.)p -eop -%%Page: 28 30 -28 29 bop 75 -58 a Fu(28)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(clear)p 354 183 V 21 w(message)h Fg(\(\))195 -238 y Fu(Clear)15 b(the)h(message)e(in)i(the)g(ec)o(ho)f(area.)1650 -333 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 333 -V 21 w(sa)n(v)n(e)p 365 333 V 21 w(prompt)h Fg(\(\))195 -388 y Fu(Sa)o(v)o(e)e(the)h(lo)q(cal)h(Readline)h(prompt)d(displa)o(y)i -(state)e(in)h(preparation)g(for)f(displa)o(ying)i(a)195 -443 y(new)15 b(message)g(in)h(the)f(message)g(area)g(with)g -Ft(rl_message)p Fu(.)1650 538 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 538 V 21 w(restore)p 436 538 V 20 w(prompt)g -Fg(\(\))195 593 y Fu(Restore)c(the)h(lo)q(cal)h(Readline)g(prompt)e -(displa)o(y)i(state)e(sa)o(v)o(ed)g(b)o(y)g(the)h(most)e(recen)o(t)i -(call)195 648 y(to)e Ft(rl_save_prompt)p Fu(.)75 763 -y Fl(2.4.7)30 b(Mo)r(difying)20 b(T)-5 b(ext)1650 887 -y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 887 -V 21 w(insert)p 378 887 V 21 w(text)k Fg(\()p Ft(char)14 -b(*text)p Fg(\))195 942 y Fu(Insert)h Fm(text)h Fu(in)o(to)f(the)h -(line)g(at)f(the)g(curren)o(t)g(cursor)g(p)q(osition.)1650 -1037 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1037 -V 21 w(delete)p 383 1037 V 22 w(text)k Fg(\()p Ft(int)14 -b(start,)h(int)f(end)p Fg(\))195 1092 y Fu(Delete)i(the)f(text)g(b)q -(et)o(w)o(een)g Fm(start)g Fu(and)h Fm(end)h Fu(in)f(the)g(curren)o(t)f -(line.)1650 1187 y(F)l(unction)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 1187 V 21 w(cop)n(y)p 421 1187 V 21 w(text)24 -b Fg(\()p Ft(int)14 b(start,)h(int)g(end)p Fg(\))195 -1242 y Fu(Return)h(a)f(cop)o(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i -Fm(start)f Fu(and)g Fm(end)j Fu(in)e(the)f(curren)o(t)g(line.)1650 -1337 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1337 -V 21 w(kill)p 311 1337 V 23 w(text)k Fg(\()p Ft(int)14 -b(start,)h(int)g(end)p Fg(\))195 1392 y Fu(Cop)o(y)j(the)h(text)f(b)q -(et)o(w)o(een)h Fm(start)f Fu(and)h Fm(end)i Fu(in)e(the)g(curren)o(t)f -(line)i(to)e(the)h(kill)h(ring,)g(ap-)195 1447 y(p)q(ending)15 -b(or)f(prep)q(ending)h(to)e(the)h(last)f(kill)j(if)e(the)g(last)f -(command)h(w)o(as)f(a)g(kill)i(command.)195 1502 y(The)j(text)f(is)h -(deleted.)28 b(If)18 b Fm(start)f Fu(is)h(less)g(than)f -Fm(end)p Fu(,)i(the)e(text)g(is)h(app)q(ended,)i(otherwise)195 -1556 y(prep)q(ended.)i(If)15 b(the)g(last)h(command)f(w)o(as)f(not)h(a) -g(kill,)h(a)f(new)h(kill)h(ring)e(slot)g(is)h(used.)75 -1672 y Fl(2.4.8)30 b(Utilit)n(y)21 b(F)-5 b(unctions)1650 -1796 y Fu(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 -1796 V 21 w(read)p 346 1796 V 20 w(k)n(ey)k Fg(\(\))195 -1851 y Fu(Return)14 b(the)g(next)g(c)o(haracter)e(a)o(v)m(ailable.)22 -b(This)14 b(handles)h(input)f(inserted)h(in)o(to)e(the)h(input)195 -1905 y(stream)k(via)g Fm(p)q(ending)j(input)f Fu(\(see)f(Section)g(2.3) -f([Readline)i(V)l(ariables],)g(page)e(21\))g(and)195 -1960 y Ft(rl_stuff_char)13 b(\(\))p Fu(,)i(macros,)f(and)h(c)o -(haracters)g(read)g(from)f(the)i(k)o(eyb)q(oard.)1650 -2056 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2056 -V 21 w(getc)j Fg(\()p Ft(FILE)14 b(*)p Fg(\))195 2110 -y Fu(Return)i(the)f(next)g(c)o(haracter)g(a)o(v)m(ailable)i(from)d(the) -h(k)o(eyb)q(oard.)1650 2206 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 2206 V 21 w(stu\013)p 346 2206 V 20 w(c)n(har)j -Fg(\()p Ft(int)15 b(c)p Fg(\))195 2260 y Fu(Insert)22 -b Fm(c)i Fu(in)o(to)e(the)g(Readline)i(input)f(stream.)38 -b(It)22 b(will)h(b)q(e)f Ft(")p Fu(read)p Ft(")g Fu(b)q(efore)g -(Readline)195 2315 y(attempts)14 b(to)h(read)g(c)o(haracters)f(from)h -(the)g(terminal)h(with)f Ft(rl_read_key)f(\(\))p Fu(.)1650 -2410 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2410 -V 21 w(extend)p 404 2410 V 21 w(line)p 513 2410 V 22 -w(bu\013er)j Fg(\()p Ft(int)15 b(len)p Fg(\))195 2465 -y Fu(Ensure)f(that)e Ft(rl_line_buffer)g Fu(has)h(enough)h(space)f(to)g -(hold)h Fm(len)h Fu(c)o(haracters,)d(p)q(ossibly)195 -2520 y(reallo)q(cating)k(it)g(if)f(necessary)l(.)1650 -2615 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 2615 -V 21 w(initiali)q(z)q(e)26 b Fg(\(\))195 2670 y Fu(Initialize)18 -b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)p -eop -%%Page: 29 31 -29 30 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(29)1650 183 y(F)l(unction)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(reset)p 357 183 V 20 w(terminal)j -Fg(\()p Ft(char)15 b(*terminal_name)p Fg(\))195 238 y -Fu(Reinitializ)q(e)h(Readline's)g(idea)e(of)f(the)h(terminal)g -(settings)g(using)g Fm(terminal)p 1501 238 14 2 v 17 -w(name)j Fu(as)c(the)195 293 y(terminal)k(t)o(yp)q(e)g(\(e.g.,)e -Ft(vt100)p Fu(\).)24 b(If)16 b Fm(terminal)p 987 293 -V 18 w(name)j Fu(is)e(NULL,)g(the)g(v)m(alue)h(of)e(the)h -Ft(TERM)195 348 y Fu(en)o(vironmen)o(t)e(v)m(ariable)i(is)f(used.)1650 -431 y(F)l(unction)-1749 b Fi(int)20 b Fh(alphab)r(etic)k -Fg(\()p Ft(int)14 b(c)p Fg(\))195 486 y Fu(Return)i(1)f(if)g -Fm(c)j Fu(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1650 -570 y(F)l(unction)-1749 b Fi(int)20 b Fh(n)n(umeric)i -Fg(\()p Ft(int)15 b(c)p Fg(\))195 624 y Fu(Return)h(1)f(if)g -Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 708 -y(F)l(unction)-1749 b Fi(int)20 b Fh(ding)i Fg(\(\))195 -763 y Fu(Ring)16 b(the)f(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g -(setting)f(of)g Ft(bell-style)p Fu(.)1650 847 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 847 18 3 v 21 w(displa)n(y)p -435 847 V 22 w(matc)n(h)p 611 847 V 20 w(list)25 b Fg(\()p -Ft(char)14 b(**matches,)g(int)g(len,)h(int)283 901 y(max)p -Fg(\))195 956 y Fu(A)j(con)o(v)o(enience)i(function)g(for)d(displa)o -(ying)j(a)e(list)i(of)e(strings)g(in)h(columnar)g(format)e(on)195 -1011 y(Readline's)e(output)e(stream.)18 b Ft(matches)12 -b Fu(is)h(the)g(list)h(of)f(strings,)f(in)i(argv)e(format,)g(suc)o(h)h -(as)195 1066 y(a)h(list)h(of)e(completion)j(matc)o(hes.)j -Ft(len)13 b Fu(is)i(the)f(n)o(um)o(b)q(er)h(of)e(strings)h(in)h -Ft(matches)p Fu(,)e(and)h Ft(max)195 1120 y Fu(is)k(the)g(length)h(of)e -(the)h(longest)g(string)g(in)h Ft(matches)p Fu(.)27 b(This)18 -b(function)h(uses)f(the)g(setting)195 1175 y(of)13 b -Ft(print-completions-horizontally)d Fu(to)k(select)g(ho)o(w)g(the)g -(matc)o(hes)f(are)h(displa)o(y)o(ed)195 1230 y(\(see)h(Section)h(1.3.1) -e([Readline)j(Init)f(File)g(Syn)o(tax],)e(page)h(4\).)137 -1314 y(The)h(follo)o(wing)g(are)f(implemen)o(ted)h(as)f(macros,)f -(de\014ned)j(in)f Ft(chartypes.h)p Fu(.)1650 1397 y(F)l(unction)-1749 -b Fi(int)20 b Fh(upp)r(ercase)p 426 1397 V 19 w(p)j Fg(\()p -Ft(int)14 b(c)p Fg(\))195 1452 y Fu(Return)i(1)f(if)g -Fm(c)j Fu(is)e(an)f(upp)q(ercase)i(alphab)q(etic)f(c)o(haracter.)1650 -1536 y(F)l(unction)-1749 b Fi(int)20 b Fh(lo)n(w)n(ercase)p -409 1536 V 22 w(p)i Fg(\()p Ft(int)15 b(c)p Fg(\))195 -1591 y Fu(Return)h(1)f(if)g Fm(c)j Fu(is)e(a)f(lo)o(w)o(ercase)g -(alphab)q(etic)i(c)o(haracter.)1650 1674 y(F)l(unction)-1749 -b Fi(int)20 b Fh(digit)p 289 1674 V 22 w(p)i Fg(\()p -Ft(int)15 b(c)p Fg(\))195 1729 y Fu(Return)h(1)f(if)g -Fm(c)j Fu(is)e(a)f(n)o(umeric)h(c)o(haracter.)1650 1813 -y(F)l(unction)-1749 b Fi(int)20 b Fh(to)p 227 1813 V -20 w(upp)r(er)i Fg(\()p Ft(int)14 b(c)p Fg(\))195 1867 -y Fu(If)21 b Fm(c)i Fu(is)e(a)g(lo)o(w)o(ercase)f(alphab)q(etic)i(c)o -(haracter,)f(return)g(the)f(corresp)q(onding)i(upp)q(ercase)195 -1922 y(c)o(haracter.)1650 2006 y(F)l(unction)-1749 b -Fi(int)20 b Fh(to)p 227 2006 V 20 w(lo)n(w)n(er)k Fg(\()p -Ft(int)15 b(c)p Fg(\))195 2061 y Fu(If)j Fm(c)j Fu(is)e(an)f(upp)q -(ercase)h(alphab)q(etic)h(c)o(haracter,)e(return)g(the)g(corresp)q -(onding)h(lo)o(w)o(ercase)195 2115 y(c)o(haracter.)1650 -2199 y(F)l(unction)-1749 b Fi(int)20 b Fh(digit)p 289 -2199 V 22 w(v)m(alue)j Fg(\()p Ft(int)15 b(c)p Fg(\))195 -2254 y Fu(If)g Fm(c)k Fu(is)c(a)g(n)o(um)o(b)q(er,)g(return)g(the)h(v)m -(alue)g(it)g(represen)o(ts.)75 2357 y Fl(2.4.9)30 b(Alternate)20 -b(In)n(terface)137 2451 y Fu(An)j(alternate)f(in)o(terface)h(is)g(a)o -(v)m(ailable)h(to)d(plain)j Ft(readline\(\))p Fu(.)40 -b(Some)22 b(applications)i(need)g(to)75 2506 y(in)o(terlea)o(v)o(e)15 -b(k)o(eyb)q(oard)f(I/O)h(with)g(\014le,)h(device,)f(or)f(windo)o(w)h -(system)f(I/O,)h(t)o(ypically)h(b)o(y)e(using)h(a)g(main)75 -2560 y(lo)q(op)f(to)g Ft(select\(\))e Fu(on)i(v)m(arious)g(\014le)h -(descriptors.)20 b(T)l(o)14 b(accomo)q(date)f(this)h(need,)h(readline)g -(can)f(also)g(b)q(e)75 2615 y(in)o(v)o(ok)o(ed)i(as)f(a)g(`callbac)o -(k')h(function)h(from)d(an)i(ev)o(en)o(t)f(lo)q(op.)22 -b(There)16 b(are)f(functions)h(a)o(v)m(ailable)i(to)c(mak)o(e)75 -2670 y(this)i(easy)l(.)p eop -%%Page: 30 32 -30 31 bop 75 -58 a Fu(30)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 183 -18 3 v 21 w(callbac)n(k)p 458 183 V 23 w(handler)p 670 -183 V 21 w(install)25 b Fg(\()p Ft(char)14 b(*prompt,)g(Vfunction)283 -238 y(*lhandler)p Fg(\))195 293 y Fu(Set)i(up)h(the)g(terminal)g(for)f -(readline)i(I/O)e(and)h(displa)o(y)g(the)g(initial)h(expanded)g(v)m -(alue)f(of)195 348 y Fm(prompt)p Fu(.)24 b(Sa)o(v)o(e)17 -b(the)g(v)m(alue)h(of)e Fm(lhandler)22 b Fu(to)17 b(use)g(as)f(a)h -(callbac)o(k)h(when)f(a)g(complete)g(line)195 402 y(of)e(input)h(has)f -(b)q(een)h(en)o(tered.)1650 498 y(F)l(unction)-1749 b -Fi(void)20 b Fh(rl)p 241 498 V 21 w(callbac)n(k)p 458 -498 V 23 w(read)p 591 498 V 20 w(c)n(har)j Fg(\(\))195 -553 y Fu(Whenev)o(er)14 b(an)f(application)i(determines)f(that)f(k)o -(eyb)q(oard)g(input)h(is)g(a)o(v)m(ailable,)h(it)f(should)195 -608 y(call)20 b Ft(rl_callback_read_char\(\))p Fu(,)c(whic)o(h)k(will)g -(read)f(the)g(next)g(c)o(haracter)f(from)g(the)195 663 -y(curren)o(t)25 b(input)h(source.)48 b(If)25 b(that)g(c)o(haracter)f -(completes)h(the)g(line,)k Ft(rl_callback_)195 717 y(read_char)14 -b Fu(will)k(in)o(v)o(ok)o(e)e(the)f Fm(lhandler)21 b -Fu(function)c(sa)o(v)o(ed)e(b)o(y)h Ft(rl_callback_handler_)195 -772 y(install)g Fu(to)h(pro)q(cess)g(the)g(line.)27 b -Ft(EOF)17 b Fu(is)h(indicated)g(b)o(y)f(calling)i Fm(lhandler)j -Fu(with)c(a)f Ft(NULL)195 827 y Fu(line.)1650 923 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 923 V 21 w(callbac)n(k)p 458 -923 V 23 w(handler)p 670 923 V 21 w(remo)n(v)n(e)i Fg(\(\))195 -977 y Fu(Restore)15 b(the)g(terminal)g(to)g(its)g(initial)i(state)d -(and)h(remo)o(v)o(e)f(the)h(line)h(handler.)21 b(This)16 -b(ma)o(y)195 1032 y(b)q(e)g(called)h(from)d(within)j(a)d(callbac)o(k)j -(as)d(w)o(ell)j(as)d(indep)q(enden)o(tly)m(.)75 1148 -y Fl(2.4.10)29 b(An)21 b(Example)137 1246 y Fu(Here)f(is)g(a)f -(function)i(whic)o(h)f(c)o(hanges)f(lo)o(w)o(ercase)h(c)o(haracters)e -(to)h(their)h(upp)q(ercase)h(equiv)m(alen)o(ts,)75 1301 -y(and)e(upp)q(ercase)i(c)o(haracters)d(to)h(lo)o(w)o(ercase.)31 -b(If)20 b(this)f(function)h(w)o(as)f(b)q(ound)h(to)f(`)p -Ft(M-c)p Fu(',)f(then)i(t)o(yping)75 1356 y(`)p Ft(M-c)p -Fu(')12 b(w)o(ould)h(c)o(hange)h(the)f(case)g(of)g(the)g(c)o(haracter)g -(under)g(p)q(oin)o(t.)20 b(T)o(yping)14 b(`)p Ft(M-1)g(0)h(M-c)p -Fu(')d(w)o(ould)i(c)o(hange)75 1410 y(the)h(case)g(of)g(the)h(follo)o -(wing)f(10)g(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)h -(last)f(c)o(haracter)f(c)o(hanged.)195 1477 y Ft(/*)24 -b(Invert)f(the)g(case)g(of)h(the)f(COUNT)h(following)e(characters.)h -(*/)195 1528 y(int)195 1580 y(invert_case_line)f(\(count,)h(key\))314 -1632 y(int)h(count,)f(key;)195 1684 y({)243 1736 y(register)f(int)i -(start,)f(end,)g(i;)243 1840 y(start)g(=)h(rl_point;)243 -1944 y(if)f(\(rl_point)g(>=)h(rl_end\))290 1995 y(return)f(\(0\);)243 -2099 y(if)g(\(count)g(<)h(0\))290 2151 y({)338 2203 y(direction)f(=)h -(-1;)338 2255 y(count)f(=)h(-count;)290 2307 y(})243 -2359 y(else)290 2411 y(direction)f(=)h(1;)243 2514 y(/*)f(Find)h(the)f -(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)243 2566 -y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)243 -2670 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)p -eop -%%Page: 31 33 -31 32 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(31)243 183 y Ft(if)23 b(\(end)h(>)f(rl_end\))290 -235 y(end)h(=)g(rl_end;)243 287 y(else)f(if)h(\(end)f(<)h(0\))290 -339 y(end)g(=)g(0;)243 443 y(if)f(\(start)g(==)h(end\))290 -495 y(return)f(\(0\);)243 598 y(if)g(\(start)g(>)h(end\))290 -650 y({)338 702 y(int)g(temp)f(=)h(start;)338 754 y(start)f(=)h(end;) -338 806 y(end)g(=)f(temp;)290 858 y(})243 962 y(/*)g(Tell)h(readline)e -(that)i(we)f(are)h(modifying)e(the)i(line,)f(so)h(it)f(will)h(save)314 -1013 y(the)g(undo)f(information.)f(*/)243 1065 y(rl_modifying)g -(\(start,)h(end\);)243 1169 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f -(i++\))290 1221 y({)338 1273 y(if)h(\(uppercase_p)e -(\(rl_line_buffer[i]\)\))386 1325 y(rl_line_buffer[i])f(=)j(to_lower)f -(\(rl_line_buffer[i]\);)338 1377 y(else)g(if)h(\(lowercase_p)e -(\(rl_line_buffer[i]\)\))386 1429 y(rl_line_buffer[i])f(=)j(to_upper)f -(\(rl_line_buffer[i]\);)290 1480 y(})243 1532 y(/*)g(Move)h(point)f(to) -g(on)h(top)f(of)h(the)f(last)h(character)e(changed.)h(*/)243 -1584 y(rl_point)f(=)i(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f -(start;)243 1636 y(return)g(\(0\);)195 1688 y(})75 1835 -y Fs(2.5)33 b(Readline)23 b(Signal)h(Handling)137 1938 -y Fu(Signals)e(are)f(async)o(hronous)f(ev)o(en)o(ts)h(sen)o(t)f(to)h(a) -f(pro)q(cess)h(b)o(y)g(the)g(Unix)h(k)o(ernel,)g(sometimes)f(on)75 -1993 y(b)q(ehalf)g(of)e(another)h(pro)q(cess.)34 b(They)20 -b(are)g(in)o(tended)h(to)e(indicate)j(exceptional)f(ev)o(en)o(ts,)f -(lik)o(e)h(a)f(user)75 2048 y(pressing)c(the)f(in)o(terrupt)g(k)o(ey)g -(on)g(his)h(terminal,)f(or)g(a)f(net)o(w)o(ork)g(connection)i(b)q(eing) -g(brok)o(en.)k(There)15 b(is)75 2102 y(a)e(class)g(of)g(signals)h(that) -f(can)g(b)q(e)h(sen)o(t)f(to)f(the)i(pro)q(cess)f(curren)o(tly)h -(reading)f(input)i(from)d(the)h(k)o(eyb)q(oard.)75 2157 -y(Since)i(Readline)g(c)o(hanges)f(the)f(terminal)h(attributes)f(when)h -(it)g(is)g(called,)h(it)e(needs)h(to)f(p)q(erform)g(sp)q(ecial)75 -2212 y(pro)q(cessing)22 b(when)f(a)g(signal)h(is)g(receiv)o(ed)g(to)e -(restore)g(the)i(terminal)f(to)g(a)g(sane)g(state,)g(or)f(pro)o(vide)75 -2267 y(application)d(writers)e(with)g(functions)h(to)f(do)g(so)g(man)o -(ually)l(.)137 2341 y(Readline)23 b(con)o(tains)d(an)g(in)o(ternal)h -(signal)g(handler)g(that)f(is)h(installed)h(for)d(a)h(n)o(um)o(b)q(er)g -(of)g(signals)75 2396 y(\()p Ft(SIGINT)p Fu(,)h Ft(SIGQUIT)p -Fu(,)g Ft(SIGTERM)p Fu(,)g Ft(SIGALRM)p Fu(,)g Ft(SIGTSTP)p -Fu(,)g Ft(SIGTTIN)p Fu(,)h(and)f Ft(SIGTTOU)p Fu(\).)36 -b(When)21 b(one)g(of)75 2451 y(these)16 b(signals)h(is)f(receiv)o(ed,)h -(the)f(signal)h(handler)f(will)i(reset)e(the)g(terminal)g(attributes)g -(to)f(those)h(that)75 2506 y(w)o(ere)22 b(in)h(e\013ect)f(b)q(efore)g -Ft(readline)14 b(\(\))22 b Fu(w)o(as)f(called,)k(reset)d(the)g(signal)h -(handling)h(to)d(what)g(it)i(w)o(as)75 2560 y(b)q(efore)e -Ft(readline)14 b(\(\))20 b Fu(w)o(as)f(called,)k(and)e(resend)g(the)f -(signal)i(to)d(the)i(calling)h(application.)37 b(If)21 -b(and)75 2615 y(when)15 b(the)f(calling)i(application's)g(signal)f -(handler)g(returns,)f(Readline)j(will)e(reinitialize)j(the)c(terminal) -75 2670 y(and)21 b(con)o(tin)o(ue)h(to)e(accept)h(input.)39 -b(When)21 b(a)g Ft(SIGINT)f Fu(is)h(receiv)o(ed,)j(the)d(Readline)i -(signal)f(handler)p eop -%%Page: 32 34 -32 33 bop 75 -58 a Fu(32)1299 b(GNU)15 b(Readline)i(Library)75 -183 y(p)q(erforms)h(some)f(additional)j(w)o(ork,)d(whic)o(h)i(will)h -(cause)e(an)o(y)g(partially-en)o(tered)h(line)h(to)d(b)q(e)i(ab)q -(orted)75 238 y(\(see)c(the)g(description)i(of)e Ft(rl_free_line_state) -e(\(\))p Fu(\).)137 307 y(There)i(is)h(an)f(additional)h(Readline)h -(signal)f(handler,)g(for)e Ft(SIGWINCH)p Fu(,)g(whic)o(h)h(the)g(k)o -(ernel)h(sends)g(to)75 362 y(a)i(pro)q(cess)h(whenev)o(er)h(the)e -(terminal's)h(size)h(c)o(hanges)f(\(for)f(example,)i(if)f(a)f(user)h -(resizes)h(an)e Ft(xterm)p Fu(\).)75 417 y(The)k(Readline)h -Ft(SIGWINCH)d Fu(handler)j(up)q(dates)e(Readline's)i(in)o(ternal)g -(screen)e(size)i(state,)e(and)h(then)75 472 y(calls)c(an)o(y)f -Ft(SIGWINCH)e Fu(signal)j(handler)g(the)f(calling)i(application)f(has)f -(installed.)27 b(Readline)19 b(calls)f(the)75 527 y(application's)h -Ft(SIGWINCH)d Fu(signal)j(handler)f(without)g(resetting)g(the)f -(terminal)i(to)e(its)g(original)i(state.)75 581 y(If)d(the)g -(application's)h(signal)g(handler)g(do)q(es)g(more)e(than)h(up)q(date)h -(its)f(idea)h(of)e(the)h(terminal)h(size)g(and)75 636 -y(return)e(\(for)f(example,)h(a)g Ft(longjmp)f Fu(bac)o(k)g(to)h(a)f -(main)h(pro)q(cessing)h(lo)q(op\),)f(it)g Fm(m)o(ust)g -Fu(call)i Ft(rl_cleanup_)75 691 y(after_signal)d(\(\))g -Fu(\(describ)q(ed)j(b)q(elo)o(w\),)e(to)g(restore)f(the)i(terminal)g -(state.)137 760 y(Readline)h(pro)o(vides)e(t)o(w)o(o)e(v)m(ariables)i -(that)f(allo)o(w)g(application)i(writers)e(to)g(con)o(trol)g(whether)h -(or)e(not)75 815 y(it)k(will)h(catc)o(h)e(certain)h(signals)h(and)f -(act)f(on)g(them)h(when)g(they)f(are)h(receiv)o(ed.)25 -b(It)16 b(is)i(imp)q(ortan)o(t)e(that)75 870 y(applications)j(c)o -(hange)e(the)g(v)m(alues)i(of)d(these)i(v)m(ariables)g(only)g(when)g -(calling)g Ft(readline)d(\(\))p Fu(,)h(not)h(in)h(a)75 -925 y(signal)e(handler,)g(so)f(Readline's)i(in)o(ternal)f(signal)g -(state)e(is)i(not)f(corrupted.)1661 1021 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 1021 18 3 v 21 w(catc)n(h)p -366 1021 V 22 w(signals)195 1076 y Fu(If)h(this)h(v)m(ariable)g(is)g -(non-zero,)g(Readline)i(will)e(install)h(signal)f(handlers)g(for)e -Ft(SIGINT)p Fu(,)195 1131 y Ft(SIGQUIT)p Fu(,)14 b Ft(SIGTERM)p -Fu(,)g Ft(SIGALRM)p Fu(,)f Ft(SIGTSTP)p Fu(,)h Ft(SIGTTIN)p -Fu(,)g(and)h Ft(SIGTTOU)p Fu(.)195 1200 y(The)g(default)h(v)m(alue)h -(of)d Ft(rl_catch_signals)f Fu(is)j(1.)1661 1297 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 1297 V 21 w(catc)n(h)p 366 -1297 V 22 w(sigwinc)n(h)195 1351 y Fu(If)15 b(this)h(v)m(ariable)g(is)g -(non-zero,)f(Readline)i(will)g(install)f(a)f(signal)h(handler)g(for)e -Ft(SIGWINCH)p Fu(.)195 1421 y(The)h(default)h(v)m(alue)h(of)d -Ft(rl_catch_sigwinch)f Fu(is)j(1.)137 1517 y(If)g(an)f(application)j -(do)q(es)d(not)g(wish)i(to)d(ha)o(v)o(e)h(Readline)j(catc)o(h)e(an)o(y) -f(signals,)h(or)f(to)f(handle)j(signals)75 1572 y(other)i(than)g(those) -g(Readline)j(catc)o(hes)d(\()p Ft(SIGHUP)p Fu(,)g(for)g(example\),)h -(Readline)i(pro)o(vides)d(con)o(v)o(enience)75 1627 y(functions)d(to)f -(do)g(the)g(necessary)g(terminal)h(and)g(in)o(ternal)g(state)e(clean)o -(up)i(up)q(on)g(receipt)g(of)f(a)g(signal.)1650 1723 -y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p 241 1723 V -21 w(clean)n(up)p 450 1723 V 22 w(after)p 590 1723 V -20 w(signal)j Fg(\()p Ft(void)p Fg(\))195 1778 y Fu(This)12 -b(function)h(will)g(reset)f(the)g(state)f(of)g(the)h(terminal)h(to)e -(what)g(it)h(w)o(as)f(b)q(efore)h Ft(readline)195 1833 -y(\(\))f Fu(w)o(as)f(called,)j(and)e(remo)o(v)o(e)g(the)g(Readline)i -(signal)f(handlers)g(for)e(all)i(signals,)h(dep)q(ending)195 -1888 y(on)i(the)g(v)m(alues)i(of)e Ft(rl_catch_signals)d -Fu(and)k Ft(rl_catch_sigwinch)p Fu(.)1650 1984 y(F)l(unction)-1749 -b Fi(void)20 b Fh(rl)p 241 1984 V 21 w(free)p 356 1984 -V 20 w(line)p 464 1984 V 23 w(state)j Fg(\()p Ft(void)p -Fg(\))195 2039 y Fu(This)e(will)h(free)e(an)o(y)g(partial)g(state)g -(asso)q(ciated)g(with)g(the)h(curren)o(t)f(input)h(line)h(\(undo)195 -2094 y(information,)d(an)o(y)f(partial)h(history)f(en)o(try)l(,)h(an)o -(y)f(partially-en)o(tered)i(k)o(eyb)q(oard)e(macro,)195 -2148 y(and)c(an)o(y)f(partially-en)o(tered)i(n)o(umeric)f(argumen)o -(t\).)k(This)c(should)h(b)q(e)f(called)h(b)q(efore)e -Ft(rl_)195 2203 y(cleanup_after_signal)f(\(\))p Fu(.)23 -b(The)16 b(Readline)j(signal)e(handler)g(for)f Ft(SIGINT)f -Fu(calls)j(this)195 2258 y(to)d(ab)q(ort)f(the)h(curren)o(t)h(input)g -(line.)1650 2354 y(F)l(unction)-1749 b Fi(void)20 b Fh(rl)p -241 2354 V 21 w(reset)p 383 2354 V 20 w(after)p 521 2354 -V 21 w(signal)j Fg(\()p Ft(void)p Fg(\))195 2409 y Fu(This)d(will)h -(reinitialize)i(the)c(terminal)i(and)e(reinstall)i(an)o(y)e(Readline)j -(signal)e(handlers,)195 2464 y(dep)q(ending)d(on)f(the)f(v)m(alues)h -(of)f Ft(rl_catch_signals)e Fu(and)i Ft(rl_catch_sigwinch)p -Fu(.)137 2560 y(If)20 b(an)g(application)h(do)q(es)f(not)g(wish)g -(Readline)i(to)d(catc)o(h)g Ft(SIGWINCH)p Fu(,)h(it)g(ma)o(y)f(call)h -Ft(rl_resize_)75 2615 y(terminal)14 b(\(\))i Fu(to)g(force)g(Readline)j -(to)d(up)q(date)h(its)g(idea)g(of)f(the)g(terminal)i(size)f(when)g(a)f -Ft(SIGWINCH)f Fu(is)75 2670 y(receiv)o(ed.)p eop -%%Page: 33 35 -33 34 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(33)1650 183 y(F)l(unction)-1749 b Fi(void)20 -b Fh(rl)p 241 183 18 3 v 21 w(resize)p 401 183 V 22 w(terminal)j -Fg(\()p Ft(void)p Fg(\))195 238 y Fu(Up)q(date)16 b(Readline's)h(in)o -(ternal)f(screen)f(size.)137 319 y(The)h(follo)o(wing)g(functions)g -(install)g(and)g(remo)o(v)o(e)e(Readline's)j(signal)f(handlers.)1650 -399 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 399 -V 21 w(set)p 307 399 V 20 w(signals)j Fg(\()p Ft(void)p -Fg(\))195 454 y Fu(Install)28 b(Readline's)g(signal)f(handler)h(for)e -Ft(SIGINT)p Fu(,)i Ft(SIGQUIT)p Fu(,)f Ft(SIGTERM)p Fu(,)h -Ft(SIGALRM)p Fu(,)195 509 y Ft(SIGTSTP)p Fu(,)19 b Ft(SIGTTIN)p -Fu(,)h Ft(SIGTTOU)p Fu(,)f(and)h Ft(SIGWINCH)p Fu(,)g(dep)q(ending)i -(on)d(the)h(v)m(alues)h(of)e Ft(rl_)195 564 y(catch_signals)13 -b Fu(and)j Ft(rl_catch_sigwinch)p Fu(.)1650 644 y(F)l(unction)-1749 -b Fi(int)20 b Fh(rl)p 215 644 V 21 w(clear)p 354 644 -V 21 w(signals)j Fg(\()p Ft(void)p Fg(\))195 699 y Fu(Remo)o(v)o(e)15 -b(all)h(of)f(the)g(Readline)j(signal)e(handlers)g(installed)h(b)o(y)e -Ft(rl_set_signals)e(\(\))p Fu(.)75 816 y Fs(2.6)33 b(Custom)21 -b(Completers)137 908 y Fu(T)o(ypically)l(,)e(a)d(program)f(that)h -(reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g -(disam)o(biguating)75 963 y(commands)i(and)f(data.)27 -b(If)18 b(y)o(our)f(program)g(is)h(one)g(of)f(these,)i(then)f(it)g(can) -f(pro)o(vide)i(completion)g(for)75 1018 y(commands,)14 -b(data,)g(or)g(b)q(oth.)20 b(The)15 b(follo)o(wing)g(sections)g -(describ)q(e)h(ho)o(w)e(y)o(our)g(program)g(and)h(Readline)75 -1073 y(co)q(op)q(erate)g(to)g(pro)o(vide)g(this)h(service.)75 -1173 y Fl(2.6.1)30 b(Ho)n(w)21 b(Completing)f(W)-5 b(orks)137 -1266 y Fu(In)18 b(order)f(to)f(complete)i(some)f(text,)g(the)g(full)i -(list)e(of)g(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o(v)m -(ailable.)75 1321 y(That)e(is,)i(it)f(is)h(not)f(p)q(ossible)h(to)f -(accurately)g(expand)h(a)e(partial)i(w)o(ord)e(without)h(kno)o(wing)g -(all)h(of)f(the)75 1375 y(p)q(ossible)i(w)o(ords)e(whic)o(h)h(mak)o(e)f -(sense)h(in)h(that)d(con)o(text.)26 b(The)18 b(Readline)i(library)e -(pro)o(vides)g(the)g(user)75 1430 y(in)o(terface)f(to)f(completion,)i -(and)e(t)o(w)o(o)g(of)g(the)h(most)f(common)g(completion)i(functions:) -23 b(\014lename)18 b(and)75 1485 y(username.)h(F)l(or)10 -b(completing)i(other)e(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f -(write)h(y)o(our)f(o)o(wn)h(completion)g(function.)75 -1540 y(This)16 b(section)g(describ)q(es)g(exactly)g(what)f(suc)o(h)g -(functions)h(m)o(ust)f(do,)f(and)i(pro)o(vides)f(an)h(example.)137 -1603 y(There)g(are)f(three)g(ma)s(jor)f(functions)i(used)f(to)g(p)q -(erform)g(completion:)100 1667 y(1.)29 b(The)21 b(user-in)o(terface)g -(function)g Ft(rl_complete)14 b(\(\))p Fu(.)35 b(This)21 -b(function)g(is)g(called)h(with)f(the)f(same)165 1721 -y(argumen)o(ts)c(as)g(other)h(Readline)i(functions)f(in)o(tended)g(for) -e(in)o(teractiv)o(e)i(use:)23 b Fm(coun)o(t)18 b Fu(and)f -Fm(in)o(v)o(ok-)165 1776 y(ing)p 228 1776 14 2 v 17 w(k)o(ey)p -Fu(.)34 b(It)20 b(isolates)g(the)g(w)o(ord)f(to)h(b)q(e)g(completed)h -(and)f(calls)h Ft(completion_matches)13 b(\(\))20 b Fu(to)165 -1831 y(generate)f(a)f(list)i(of)e(p)q(ossible)j(completions.)32 -b(It)18 b(then)i(either)f(lists)h(the)f(p)q(ossible)h(completions,)165 -1886 y(inserts)g(the)f(p)q(ossible)j(completions,)f(or)e(actually)h(p)q -(erforms)f(the)h(completion,)h(dep)q(ending)h(on)165 -1940 y(whic)o(h)16 b(b)q(eha)o(vior)g(is)f(desired.)100 -2004 y(2.)29 b(The)11 b(in)o(ternal)g(function)g Ft(completion_matches) -i(\(\))d Fu(uses)h(y)o(our)e Fm(generator)k Fu(function)e(to)f -(generate)165 2059 y(the)16 b(list)h(of)f(p)q(ossible)i(matc)o(hes,)d -(and)h(then)h(returns)f(the)g(arra)o(y)f(of)g(these)i(matc)o(hes.)22 -b(Y)l(ou)16 b(should)165 2113 y(place)g(the)f(address)h(of)e(y)o(our)h -(generator)f(function)i(in)g Ft(rl_completion_entry_function)p -Fu(.)100 2177 y(3.)29 b(The)19 b(generator)e(function)j(is)f(called)h -(rep)q(eatedly)f(from)f Ft(completion_matches)13 b(\(\))p -Fu(,)18 b(returning)165 2232 y(a)e(string)g(eac)o(h)h(time.)24 -b(The)17 b(argumen)o(ts)e(to)h(the)g(generator)g(function)h(are)f -Fm(text)h Fu(and)g Fm(state)p Fu(.)22 b Fm(text)165 2286 -y Fu(is)17 b(the)f(partial)g(w)o(ord)f(to)h(b)q(e)h(completed.)23 -b Fm(state)18 b Fu(is)e(zero)g(the)g(\014rst)g(time)g(the)g(function)h -(is)g(called,)165 2341 y(allo)o(wing)f(the)e(generator)g(to)g(p)q -(erform)h(an)o(y)f(necessary)h(initialization,)j(and)d(a)f(p)q(ositiv)o -(e)i(non-zero)165 2396 y(in)o(teger)i(for)f(eac)o(h)g(subsequen)o(t)h -(call.)28 b(When)18 b(the)g(generator)f(function)h(returns)f -Ft(\(char)e(*\)NULL)165 2451 y Fu(this)h(signals)h Ft -(completion_matches)c(\(\))i Fu(that)g(there)h(are)g(no)g(more)f(p)q -(ossibilitie)q(s)j(left.)23 b(Usually)165 2506 y(the)c(generator)g -(function)h(computes)g(the)f(list)h(of)f(p)q(ossible)i(completions)g -(when)e Fm(state)j Fu(is)d(zero,)165 2560 y(and)13 b(returns)g(them)f -(one)h(at)f(a)h(time)g(on)g(subsequen)o(t)g(calls.)20 -b(Eac)o(h)13 b(string)f(the)h(generator)f(function)165 -2615 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)h(b)q(e)g(allo)q(cated)h -(with)g Ft(malloc\(\))p Fu(;)d(Readline)19 b(frees)d(the)g(strings)f -(when)165 2670 y(it)g(has)h(\014nished)g(with)g(them.)p -eop -%%Page: 34 36 -34 35 bop 75 -58 a Fu(34)1299 b(GNU)15 b(Readline)i(Library)1650 -183 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 183 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 238 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g -(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j -(the)e(function)h(that)195 293 y(do)q(es)15 b(the)g(initial)h(simple)h -(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches) -195 348 y(\(\))p Fu(\).)19 b(The)d(default)f(is)h(to)f(do)g(\014lename) -h(completion.)1661 448 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 448 V 21 w(completion)p 686 448 V 21 -w(en)n(try)p 839 448 V 21 w(function)195 503 y Fu(This)c(is)f(a)g(p)q -(oin)o(ter)g(to)g(the)g(generator)f(function)i(for)e -Ft(completion_matches)f(\(\))p Fu(.)20 b(If)15 b(the)195 -558 y(v)m(alue)21 b(of)e Ft(rl_completion_entry_functio)o(n)e -Fu(is)j Ft(\(Function)14 b(*\)NULL)19 b Fu(then)h(the)f(de-)195 -613 y(fault)11 b(\014lename)h(generator)d(function,)j -Ft(filename_completion_function)g(\(\))p Fu(,)f(is)g(used.)75 -734 y Fl(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137 -834 y Fu(Here)16 b(is)f(the)h(complete)g(list)g(of)e(callable)k -(completion)e(functions)g(presen)o(t)f(in)h(Readline.)1650 -935 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 935 -V 21 w(complete)p 460 935 V 21 w(in)n(ternal)k Fg(\()p -Ft(int)15 b(what_to_do)p Fg(\))195 990 y Fu(Complete)k(the)f(w)o(ord)g -(at)g(or)g(b)q(efore)g(p)q(oin)o(t.)30 b Fm(what)p 1105 -990 14 2 v 16 w(to)p 1162 990 V 16 w(do)21 b Fu(sa)o(ys)c(what)h(to)g -(do)g(with)h(the)195 1045 y(completion.)33 b(A)19 b(v)m(alue)h(of)f(`)p -Ft(?)p Fu(')f(means)h(list)h(the)f(p)q(ossible)i(completions.)33 -b(`)p Ft(TAB)p Fu(')18 b(means)195 1099 y(do)g(standard)g(completion.) -30 b(`)p Ft(*)p Fu(')18 b(means)g(insert)g(all)i(of)d(the)i(p)q -(ossible)h(completions.)30 b(`)p Ft(!)p Fu(')195 1154 -y(means)17 b(to)f(displa)o(y)i(all)g(of)e(the)h(p)q(ossible)i -(completions,)f(if)f(there)g(is)g(more)g(than)f(one,)h(as)195 -1209 y(w)o(ell)f(as)f(p)q(erforming)h(partial)f(completion.)1650 -1310 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p 215 1310 -18 3 v 21 w(complete)j Fg(\()p Ft(int)14 b(ignore,)g(int)h -(invoking_key)p Fg(\))195 1365 y Fu(Complete)20 b(the)g(w)o(ord)f(at)g -(or)g(b)q(efore)h(p)q(oin)o(t.)34 b(Y)l(ou)20 b(ha)o(v)o(e)f(supplied)j -(the)e(function)h(that)195 1419 y(do)q(es)15 b(the)g(initial)h(simple)h -(matc)o(hing)d(selection)i(algorithm)f(\(see)f Ft(completion_matches) -195 1474 y(\(\))h Fu(and)h Ft(rl_completion_entry_functi)o(on)p -Fu(\).)i(The)e(default)g(is)g(to)f(do)g(\014lename)i(com-)195 -1529 y(pletion.)k(This)15 b(calls)g Ft(rl_complete_internal)e(\(\))h -Fu(with)h(an)f(argumen)o(t)f(dep)q(ending)k(on)195 1584 -y Fm(in)o(v)o(oking)p 364 1584 14 2 v 17 w(k)o(ey)p Fu(.)1650 -1685 y(F)l(unction)-1749 b Fi(int)19 b Fh(rl)p 214 1685 -18 3 v 21 w(p)r(ossible)p 432 1685 V 20 w(completions)k -Fg(\()p Ft(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))195 -1739 y Fu(List)k(the)f(p)q(ossible)i(completions.)29 -b(See)19 b(description)h(of)d Ft(rl_complete)d(\(\))p -Fu(.)28 b(This)19 b(calls)195 1794 y Ft(rl_complete_internal)12 -b(\(\))j Fu(with)h(an)f(argumen)o(t)f(of)h(`)p Ft(?)p -Fu('.)1650 1895 y(F)l(unction)-1749 b Fi(int)20 b Fh(rl)p -215 1895 V 21 w(insert)p 378 1895 V 21 w(completions)j -Fg(\()p Ft(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))195 -1950 y Fu(Insert)24 b(the)h(list)f(of)g(p)q(ossible)i(completions)f(in) -o(to)f(the)g(line,)k(deleting)e(the)e(partially-)195 -2004 y(completed)16 b(w)o(ord.)j(See)c(description)i(of)d -Ft(rl_complete)g(\(\))p Fu(.)19 b(This)d(calls)g Ft(rl_complete_)195 -2059 y(internal)e(\(\))h Fu(with)g(an)h(argumen)o(t)e(of)h(`)p -Ft(*)p Fu('.)1650 2160 y(F)l(unction)-1749 b Fi(char)20 -b(**)f Fh(completion)p 547 2160 V 21 w(matc)n(hes)j Fg(\()p -Ft(char)15 b(*text,)f(CPFunction)283 2215 y(*entry_func)p -Fg(\))195 2270 y Fu(Returns)f(an)f(arra)o(y)f(of)h Ft(\(char)j(*\))d -Fu(whic)o(h)h(is)g(a)f(list)h(of)f(completions)i(for)e -Fm(text)p Fu(.)18 b(If)13 b(there)f(are)195 2324 y(no)17 -b(completions,)g(returns)g Ft(\(char)d(**\)NULL)p Fu(.)23 -b(The)17 b(\014rst)f(en)o(try)g(in)i(the)e(returned)h(arra)o(y)195 -2379 y(is)c(the)h(substitution)f(for)g Fm(text)p Fu(.)18 -b(The)13 b(remaining)i(en)o(tries)e(are)f(the)i(p)q(ossible)g -(completions.)195 2434 y(The)h(arra)o(y)f(is)i(terminated)g(with)f(a)g -Ft(NULL)g Fu(p)q(oin)o(ter.)195 2506 y Fm(en)o(try)p -302 2506 14 2 v 16 w(func)g Fu(is)d(a)f(function)h(of)g(t)o(w)o(o)e -(args,)h(and)g(returns)h(a)f Ft(\(char)k(*\))p Fu(.)j(The)12 -b(\014rst)f(argumen)o(t)195 2560 y(is)j Fm(text)p Fu(.)19 -b(The)14 b(second)g(is)g(a)f(state)f(argumen)o(t;)h(it)h(is)g(zero)f -(on)h(the)f(\014rst)g(call,)i(and)f(non-zero)195 2615 -y(on)g(subsequen)o(t)g(calls.)21 b Fm(en)o(try)p 714 -2615 V 16 w(func)c Fu(returns)d(a)f Ft(NULL)h Fu(p)q(oin)o(ter)g(to)f -(the)h(caller)h(when)g(there)195 2670 y(are)g(no)g(more)g(matc)o(hes.)p -eop -%%Page: 35 37 -35 36 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(35)1650 183 y(F)l(unction)-1749 b Fi(char)20 -b(*)f Fh(\014lename)p 455 183 18 3 v 20 w(completion)p -749 183 V 21 w(function)k Fg(\()p Ft(char)15 b(*text,)f(int)283 -238 y(state)p Fg(\))195 293 y Fu(A)19 b(generator)g(function)h(for)f -(\014lename)h(completion)h(in)f(the)f(general)h(case.)33 -b(Note)19 b(that)195 348 y(completion)e(in)f(Bash)f(is)h(a)f(little)i -(di\013eren)o(t)f(b)q(ecause)g(of)f(all)h(the)g(pathnames)f(that)g(m)o -(ust)195 402 y(b)q(e)i(follo)o(w)o(ed)g(when)g(lo)q(oking)h(up)f -(completions)h(for)e(a)g(command.)24 b(The)17 b(Bash)g(source)f(is)195 -457 y(a)f(useful)h(reference)g(for)f(writing)g(custom)g(completion)h -(functions.)1650 539 y(F)l(unction)-1749 b Fi(char)20 -b(*)f Fh(username)p 487 539 V 19 w(completion)p 780 539 -V 21 w(function)k Fg(\()p Ft(char)14 b(*text,)g(int)283 -594 y(state)p Fg(\))195 649 y Fu(A)k(completion)g(generator)f(for)g -(usernames.)28 b Fm(text)18 b Fu(con)o(tains)f(a)h(partial)g(username)g -(pre-)195 704 y(ceded)f(b)o(y)f(a)g(random)f(c)o(haracter)h(\(usually)h -(`)p Ft(~)p Fu('\).)k(As)16 b(with)g(all)h(completion)g(generators,)195 -759 y Fm(state)g Fu(is)f(zero)f(on)g(the)g(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)75 861 y Fl(2.6.3)30 -b(Completion)20 b(V)-5 b(ariables)1661 972 y Fu(V)l(ariable)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 972 V 21 w(completion)p -686 972 V 21 w(en)n(try)p 839 972 V 21 w(function)195 -1026 y Fu(A)c(p)q(oin)o(ter)h(to)e(the)i(generator)e(function)i(for)e -Ft(completion_matches)e(\(\))p Fu(.)22 b Ft(NULL)16 b -Fu(means)195 1081 y(to)f(use)g Ft(filename_completion_functio)o(n)d -(\(\))p Fu(,)j(the)g(default)h(\014lename)g(completer.)1661 -1163 y(V)l(ariable)-1749 b Fi(CPPFunction)21 b(*)e Fh(rl)p -469 1163 V 21 w(attempted)p 749 1163 V 20 w(completion)p -1043 1163 V 21 w(function)195 1218 y Fu(A)d(p)q(oin)o(ter)h(to)f(an)g -(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)23 -b(The)16 b(function)i(is)e(called)195 1273 y(with)f Fm(text)p -Fu(,)g Fm(start)p Fu(,)e(and)i Fm(end)p Fu(.)21 b Fm(start)15 -b Fu(and)g Fm(end)i Fu(are)e(indices)i(in)f Ft(rl_line_buffer)d -Fu(sa)o(ying)195 1328 y(what)22 b(the)h(b)q(oundaries)h(of)e -Fm(text)h Fu(are.)42 b(If)23 b(this)g(function)h(exists)f(and)f -(returns)h Ft(NULL)p Fu(,)195 1383 y(or)c(if)h(this)g(v)m(ariable)h(is) -f(set)g(to)e Ft(NULL)p Fu(,)i(then)g Ft(rl_complete)14 -b(\(\))19 b Fu(will)i(call)g(the)f(v)m(alue)g(of)195 -1437 y Ft(rl_completion_entry_functi)o(on)14 b Fu(to)j(generate)g(matc) -o(hes,)g(otherwise)g(the)g(arra)o(y)f(of)195 1492 y(strings)f(returned) -h(will)h(b)q(e)e(used.)1661 1574 y(V)l(ariable)-1749 -b Fi(CPFunction)21 b(*)e Fh(rl)p 443 1574 V 21 w(\014lename)p -672 1574 V 20 w(quoting)p 881 1574 V 21 w(function)195 -1629 y Fu(A)g(p)q(oin)o(ter)g(to)f(a)h(function)g(that)g(will)h(quote)f -(a)f(\014lename)i(in)g(an)e(application-)j(sp)q(eci\014c)195 -1684 y(fashion.)33 b(This)20 b(is)g(called)h(if)f(\014lename)g -(completion)h(is)f(b)q(eing)g(attempted)f(and)h(one)f(of)195 -1739 y(the)13 b(c)o(haracters)f(in)h Ft(rl_filename_quote_characte)o -(rs)d Fu(app)q(ears)i(in)i(a)e(completed)i(\014le-)195 -1793 y(name.)29 b(The)18 b(function)h(is)g(called)h(with)e -Fm(text)p Fu(,)g Fm(matc)o(h)p 1144 1793 14 2 v 16 w(t)o(yp)q(e)p -Fu(,)h(and)f Fm(quote)p 1480 1793 V 16 w(p)q(oin)o(ter)p -Fu(.)30 b(The)195 1848 y Fm(text)17 b Fu(is)h(the)f(\014lename)h(to)e -(b)q(e)h(quoted.)25 b(The)17 b Fm(matc)o(h)p 1115 1848 -V 16 w(t)o(yp)q(e)i Fu(is)f(either)f Ft(SINGLE_MATCH)p -Fu(,)e(if)195 1903 y(there)j(is)g(only)h(one)f(completion)h(matc)o(h,)f -(or)f Ft(MULT_MATCH)p Fu(.)27 b(Some)18 b(functions)g(use)h(this)195 -1958 y(to)13 b(decide)i(whether)f(or)g(not)f(to)g(insert)h(a)f(closing) -i(quote)f(c)o(haracter.)k(The)c Fm(quote)p 1600 1958 -V 16 w(p)q(oin)o(ter)195 2013 y Fu(is)20 b(a)g(p)q(oin)o(ter)g(to)f(an) -o(y)g(op)q(ening)i(quote)e(c)o(haracter)g(the)h(user)g(t)o(yp)q(ed.)34 -b(Some)19 b(functions)195 2067 y(c)o(ho)q(ose)c(to)g(reset)g(this)g(c)o -(haracter.)1661 2150 y(V)l(ariable)-1749 b Fi(CPFunction)21 -b(*)e Fh(rl)p 443 2150 18 3 v 21 w(\014lename)p 672 2150 -V 20 w(dequoting)p 939 2150 V 21 w(function)195 2204 -y Fu(A)14 b(p)q(oin)o(ter)g(to)e(a)i(function)g(that)f(will)i(remo)o(v) -o(e)e(application-sp)q(eci\014c)k(quoting)d(c)o(haracters)195 -2259 y(from)21 b(a)g(\014lename)h(b)q(efore)f(completion)i(is)f -(attempted,)g(so)f(those)g(c)o(haracters)f(do)h(not)195 -2314 y(in)o(terfere)e(with)f(matc)o(hing)h(the)f(text)g(against)g -(names)g(in)h(the)f(\014lesystem.)30 b(It)19 b(is)f(called)195 -2369 y(with)g Fm(text)p Fu(,)g(the)g(text)g(of)g(the)g(w)o(ord)f(to)g -(b)q(e)i(dequoted,)g(and)f Fm(quote)p 1381 2369 14 2 -v 16 w(c)o(har)p Fu(,)g(whic)o(h)h(is)g(the)195 2424 -y(quoting)e(c)o(haracter)f(that)g(delimits)i(the)f(\014lename)h -(\(usually)f(`)p Ft(')p Fu(')f(or)g(`)p Ft(")p Fu('\).)23 -b(If)17 b Fm(quote)p 1657 2424 V 16 w(c)o(har)195 2478 -y Fu(is)f(zero,)e(the)i(\014lename)g(w)o(as)e(not)h(in)h(an)f(em)o(b)q -(edded)i(string.)1661 2560 y(V)l(ariable)-1749 b Fi(Function)20 -b(*)g Fh(rl)p 391 2560 18 3 v 21 w(c)n(har)p 519 2560 -V 20 w(is)p 577 2560 V 22 w(quoted)p 770 2560 V 20 w(p)195 -2615 y Fu(A)c(p)q(oin)o(ter)g(to)f(a)h(function)g(to)g(call)g(that)g -(determines)g(whether)g(or)g(not)f(a)g(sp)q(eci\014c)j(c)o(har-)195 -2670 y(acter)12 b(in)i(the)f(line)i(bu\013er)e(is)g(quoted,)g -(according)h(to)e(whatev)o(er)g(quoting)h(mec)o(hanism)h(the)p -eop -%%Page: 36 38 -36 37 bop 75 -58 a Fu(36)1299 b(GNU)15 b(Readline)i(Library)195 -183 y(program)12 b(calling)j(readline)g(uses.)20 b(The)13 -b(function)h(is)g(called)h(with)f(t)o(w)o(o)e(argumen)o(ts:)18 -b Fm(text)p Fu(,)195 238 y(the)11 b(text)g(of)g(the)g(line,)i(and)f -Fm(index)p Fu(,)g(the)g(index)g(of)f(the)g(c)o(haracter)g(in)h(the)f -(line.)20 b(It)11 b(is)h(used)g(to)195 293 y(decide)20 -b(whether)e(a)g(c)o(haracter)g(found)h(in)g Ft -(rl_completer_word_break_)o(charact)o(ers)195 348 y Fu(should)d(b)q(e)g -(used)g(to)e(break)i(w)o(ords)e(for)h(the)g(completer.)1661 -447 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 447 -18 3 v 21 w(completion)p 510 447 V 21 w(query)p 673 447 -V 21 w(items)195 502 y Fu(Up)d(to)e(this)i(man)o(y)f(items)h(will)h(b)q -(e)f(displa)o(y)o(ed)g(in)g(resp)q(onse)g(to)f(a)g(p)q -(ossible-completions)195 557 y(call.)26 b(After)16 b(that,)g(w)o(e)h -(ask)f(the)h(user)g(if)g(she)g(is)h(sure)e(she)i(w)o(an)o(ts)d(to)h -(see)h(them)g(all.)26 b(The)195 612 y(default)16 b(v)m(alue)g(is)g -(100.)1661 712 y(V)l(ariable)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 712 V 21 w(basic)p 430 712 V 21 w(w)n(ord)p -575 712 V 21 w(break)p 736 712 V 20 w(c)n(haracters)195 -766 y Fu(The)13 b(basic)h(list)f(of)g(c)o(haracters)f(that)g(signal)i -(a)e(break)h(b)q(et)o(w)o(een)g(w)o(ords)f(for)g(the)h(completer)195 -821 y(routine.)20 b(The)c(default)g(v)m(alue)g(of)f(this)g(v)m(ariable) -i(is)f(the)f(c)o(haracters)g(whic)o(h)h(break)f(w)o(ords)195 -876 y(for)g(completion)h(in)g(Bash,)f(i.e.,)g Ft(")g -(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fu(.)1661 976 y(V)l(ariable)-1749 -b Fi(char)20 b(*)f Fh(rl)p 286 976 V 21 w(basic)p 430 -976 V 21 w(quote)p 590 976 V 21 w(c)n(haracters)195 1030 -y Fu(List)d(of)f(quote)g(c)o(haracters)f(whic)o(h)i(can)f(cause)h(a)f -(w)o(ord)f(break.)1661 1130 y(V)l(ariable)-1749 b Fi(char)20 -b(*)f Fh(rl)p 286 1130 V 21 w(completer)p 555 1130 V -21 w(w)n(ord)p 700 1130 V 20 w(break)p 860 1130 V 20 -w(c)n(haracters)195 1185 y Fu(The)j(list)g(of)f(c)o(haracters)g(that)g -(signal)h(a)g(break)f(b)q(et)o(w)o(een)h(w)o(ords)f(for)g -Ft(rl_complete_)195 1240 y(internal)14 b(\(\))p Fu(.)k(The)10 -b(default)h(list)g(is)g(the)f(v)m(alue)h(of)f Ft -(rl_basic_word_break_charac)o(ters)p Fu(.)p 1909 1244 -21 36 v 1661 1340 a(V)l(ariable)-1749 b Fi(char)20 b(*)f -Fh(rl)p 286 1340 18 3 v 21 w(completer)p 555 1340 V 21 -w(quote)p 715 1340 V 21 w(c)n(haracters)195 1394 y Fu(List)11 -b(of)g(c)o(haracters)f(whic)o(h)h(can)g(b)q(e)h(used)f(to)g(quote)f(a)h -(substring)g(of)f(the)h(line.)20 b(Completion)195 1449 -y(o)q(ccurs)c(on)g(the)g(en)o(tire)g(substring,)g(and)g(within)h(the)e -(substring)h Ft(rl_completer_word_)195 1504 y(break_characters)d -Fu(are)h(treated)g(as)h(an)o(y)f(other)g(c)o(haracter,)g(unless)i(they) -f(also)g(app)q(ear)195 1559 y(within)h(this)g(list.)1661 -1658 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1658 V 21 w(\014lename)p 515 1658 V 20 w(quote)p 674 -1658 V 21 w(c)n(haracters)195 1713 y Fu(A)d(list)g(of)g(c)o(haracters)e -(that)h(cause)h(a)g(\014lename)h(to)e(b)q(e)h(quoted)g(b)o(y)f(the)h -(completer)g(when)195 1768 y(they)f(app)q(ear)h(in)g(a)f(completed)h -(\014lename.)21 b(The)15 b(default)h(is)g(the)f(n)o(ull)i(string.)1661 -1868 y(V)l(ariable)-1749 b Fi(char)20 b(*)f Fh(rl)p 286 -1868 V 21 w(sp)r(ecial)p 473 1868 V 22 w(pre\014xes)195 -1923 y Fu(The)14 b(list)h(of)e(c)o(haracters)g(that)g(are)g(w)o(ord)g -(break)h(c)o(haracters,)f(but)h(should)g(b)q(e)h(left)f(in)g -Fm(text)195 1977 y Fu(when)19 b(it)g(is)g(passed)f(to)g(the)h -(completion)g(function.)31 b(Programs)17 b(can)h(use)h(this)g(to)f -(help)195 2032 y(determine)e(what)e(kind)i(of)e(completing)i(to)e(do.) -19 b(F)l(or)14 b(instance,)h(Bash)g(sets)f(this)i(v)m(ariable)195 -2087 y(to)f Ft(")p Fu($)p Ft(@")f Fu(so)h(that)f(it)i(can)f(complete)h -(shell)h(v)m(ariables)f(and)g(hostnames.)1661 2187 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 2187 V 21 w(completion)p 510 -2187 V 21 w(app)r(end)p 715 2187 V 19 w(c)n(haracter)195 -2241 y Fu(When)15 b(a)e(single)j(completion)f(alternativ)o(e)f(matc)o -(hes)g(at)g(the)g(end)h(of)e(the)i(command)f(line,)195 -2296 y(this)20 b(c)o(haracter)e(is)i(app)q(ended)h(to)d(the)i(inserted) -g(completion)g(text.)31 b(The)20 b(default)g(is)f(a)195 -2351 y(space)14 b(c)o(haracter)f(\(`)i('\).)j(Setting)c(this)h(to)e -(the)h(n)o(ull)h(c)o(haracter)e(\(`)p Ft(\\0)p Fu('\))f(prev)o(en)o(ts) -i(an)o(ything)195 2406 y(b)q(eing)24 b(app)q(ended)g(automatically)l(.) -42 b(This)23 b(can)g(b)q(e)g(c)o(hanged)f(in)i(custom)e(completion)195 -2461 y(functions)15 b(to)e(pro)o(vide)i(the)f(\\most)f(sensible)j(w)o -(ord)d(separator)g(c)o(haracter")g(according)i(to)195 -2515 y(an)g(application-sp)q(eci\014)q(c)j(command)d(line)i(syn)o(tax)d -(sp)q(eci\014cation.)1661 2615 y(V)l(ariable)-1749 b -Fi(int)20 b Fh(rl)p 215 2615 V 21 w(ignore)p 391 2615 -V 20 w(completion)p 685 2615 V 21 w(duplicates)195 2670 -y Fu(If)15 b(non-zero,)h(then)f(disallo)o(w)h(duplicates)h(in)f(the)g -(matc)o(hes.)j(Default)c(is)h(1.)p eop -%%Page: 37 39 -37 38 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(37)1661 183 y(V)l(ariable)-1749 b Fi(int)20 -b Fh(rl)p 215 183 18 3 v 21 w(\014lename)p 444 183 V -20 w(completion)p 738 183 V 21 w(desired)195 238 y Fu(Non-zero)15 -b(means)g(that)g(the)g(results)h(of)f(the)g(matc)o(hes)g(are)f(to)h(b)q -(e)h(treated)f(as)f(\014lenames.)195 293 y(This)e(is)h -Fm(alw)o(a)o(ys)f Fu(zero)g(on)g(en)o(try)l(,)g(and)g(can)f(only)i(b)q -(e)f(c)o(hanged)g(within)h(a)e(completion)i(en)o(try)195 -348 y(generator)f(function.)20 b(If)14 b(it)f(is)h(set)f(to)g(a)g -(non-zero)g(v)m(alue,)i(directory)e(names)h(ha)o(v)o(e)f(a)g(slash)195 -402 y(app)q(ended)k(and)f(Readline)h(attempts)e(to)f(quote)i(completed) -g(\014lenames)g(if)g(they)g(con)o(tain)195 457 y(an)o(y)f(em)o(b)q -(edded)i(w)o(ord)d(break)h(c)o(haracters.)1661 541 y(V)l(ariable)-1749 -b Fi(int)20 b Fh(rl)p 215 541 V 21 w(\014lename)p 444 -541 V 20 w(quoting)p 653 541 V 21 w(desired)195 596 y -Fu(Non-zero)c(means)f(that)g(the)h(results)g(of)g(the)f(matc)o(hes)h -(are)f(to)g(b)q(e)h(quoted)g(using)h(double)195 650 y(quotes)12 -b(\(or)f(an)g(application-sp)q(eci)q(\014c)k(quoting)d(mec)o(hanism\))g -(if)g(the)g(completed)h(\014lename)195 705 y(con)o(tains)f(an)o(y)g(c)o -(haracters)g(in)h Ft(rl_filename_quote_chars)p Fu(.)j(This)c(is)h -Fm(alw)o(a)o(ys)h Fu(non-zero)195 760 y(on)d(en)o(try)l(,)g(and)h(can)f -(only)h(b)q(e)g(c)o(hanged)f(within)h(a)f(completion)i(en)o(try)d -(generator)g(function.)195 815 y(The)16 b(quoting)h(is)g(e\013ected)f -(via)h(a)e(call)j(to)d(the)i(function)g(p)q(oin)o(ted)g(to)e(b)o(y)i -Ft(rl_filename_)195 870 y(quoting_function)p Fu(.)1661 -953 y(V)l(ariable)-1749 b Fi(int)20 b Fh(rl)p 215 953 -V 21 w(inhibit)p 399 953 V 23 w(completion)195 1008 y -Fu(If)15 b(this)f(v)m(ariable)i(is)f(non-zero,)f(completion)i(is)f -(inhibit)p Ft(<)p Fu(ed.)22 b(The)14 b(completion)i(c)o(haracter)195 -1063 y(will)h(b)q(e)f(inserted)g(as)f(an)o(y)f(other)h(b)q(ound)h(to)f -Ft(self-insert)p Fu(.)1661 1146 y(V)l(ariable)-1749 b -Fi(Function)20 b(*)g Fh(rl)p 391 1146 V 21 w(ignore)p -567 1146 V 20 w(some)p 714 1146 V 19 w(completions)p -1030 1146 V 21 w(function)195 1201 y Fu(This)15 b(function,)g(if)f -(de\014ned,)i(is)e(called)i(b)o(y)e(the)h(completer)f(when)h(real)g -(\014lename)g(comple-)195 1256 y(tion)k(is)g(done,)g(after)f(all)i(the) -f(matc)o(hing)f(names)h(ha)o(v)o(e)f(b)q(een)i(generated.)30 -b(It)19 b(is)g(passed)195 1311 y(a)h Ft(NULL)f Fu(terminated)h(arra)o -(y)f(of)g(matc)o(hes.)34 b(The)20 b(\014rst)g(elemen)o(t)h(\()p -Ft(matches[0])p Fu(\))c(is)k(the)195 1366 y(maximal)e(substring)f -(common)g(to)g(all)h(matc)o(hes.)29 b(This)19 b(function)g(can)f -(re-arrange)g(the)195 1420 y(list)h(of)e(matc)o(hes)h(as)f(required,)i -(but)f(eac)o(h)g(elemen)o(t)h(deleted)g(from)e(the)h(arra)o(y)f(m)o -(ust)g(b)q(e)195 1475 y(freed.)1661 1559 y(V)l(ariable)-1749 -b Fi(Function)20 b(*)g Fh(rl)p 391 1559 V 21 w(directory)p -639 1559 V 21 w(completion)p 934 1559 V 21 w(ho)r(ok)195 -1613 y Fu(This)13 b(function,)h(if)g(de\014ned,)g(is)f(allo)o(w)o(ed)h -(to)e(mo)q(dify)h(the)g(directory)g(p)q(ortion)g(of)g(\014lenames)195 -1668 y(Readline)k(completes.)j(It)15 b(is)g(called)h(with)f(the)g -(address)g(of)f(a)g(string)h(\(the)f(curren)o(t)h(direc-)195 -1723 y(tory)f(name\))g(as)h(an)f(argumen)o(t.)19 b(It)c(could)h(b)q(e)f -(used)h(to)e(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)195 -1778 y(v)m(ariables)j(in)f(pathnames.)1661 1861 y(V)l(ariable)-1749 -b Fi(VFunction)20 b(*)g Fh(rl)p 417 1861 V 21 w(completion)p -712 1861 V 21 w(displa)n(y)p 906 1861 V 22 w(matc)n(hes)p -1131 1861 V 20 w(ho)r(ok)195 1916 y Fu(If)g(non-zero,)g(then)f(this)h -(is)g(the)f(address)h(of)f(a)g(function)h(to)f(call)h(when)g -(completing)g(a)195 1971 y(w)o(ord)h(w)o(ould)h(normally)h(displa)o(y)g -(the)f(list)h(of)e(p)q(ossible)j(matc)o(hes.)39 b(This)23 -b(function)f(is)195 2026 y(called)d(in)f(lieu)h(of)e(Readline)j(displa) -o(ying)f(the)e(list.)27 b(It)18 b(tak)o(es)e(three)i(argumen)o(ts:)23 -b(\()p Ft(char)195 2081 y(**)p Fm(matc)o(hes)p Fu(,)g -Ft(int)e Fm(n)o(um)p 623 2081 14 2 v 17 w(matc)o(hes)p -Fu(,)h Ft(int)g Fm(max)p 1015 2081 V 16 w(length)p Fu(\))g(where)g -Fm(matc)o(hes)i Fu(is)e(the)g(arra)o(y)195 2135 y(of)17 -b(matc)o(hing)h(strings,)f Fm(n)o(um)p 702 2135 V 17 -w(matc)o(hes)h Fu(is)g(the)g(n)o(um)o(b)q(er)g(of)f(strings)g(in)h -(that)f(arra)o(y)l(,)g(and)195 2190 y Fm(max)p 283 2190 -V 16 w(length)f Fu(is)h(the)e(length)i(of)e(the)h(longest)g(string)f -(in)i(that)e(arra)o(y)l(.)20 b(Readline)e(pro)o(vides)195 -2245 y(a)d(con)o(v)o(enience)i(function,)g Ft(rl_display_match_list)p -Fu(,)12 b(that)j(tak)o(es)g(care)g(of)h(doing)g(the)195 -2300 y(displa)o(y)k(to)f(Readline's)i(output)f(stream.)31 -b(That)19 b(function)h(ma)o(y)f(b)q(e)h(called)h(from)e(this)195 -2355 y(ho)q(ok.)75 2458 y Fl(2.6.4)30 b(A)21 b(Short)f(Completion)g -(Example)137 2552 y Fu(Here)11 b(is)f(a)g(small)h(application)h -(demonstrating)e(the)g(use)h(of)e(the)i(GNU)f(Readline)i(library)l(.)19 -b(It)11 b(is)f(called)75 2606 y Ft(fileman)p Fu(,)17 -b(and)h(the)g(source)g(co)q(de)g(resides)h(in)f(`)p Ft -(examples/fileman.c)p Fu('.)25 b(This)18 b(sample)g(application)75 -2661 y(pro)o(vides)c(completion)g(of)e(command)h(names,)g(line)i -(editing)g(features,)d(and)i(access)f(to)f(the)h(history)h(list.)p -eop -%%Page: 38 40 -38 39 bop 75 -58 a Fu(38)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Ft(/*)24 b(fileman.c)e(--)i(A)g(tiny)f(application)f(which)h -(demonstrates)g(how)g(to)h(use)f(the)267 235 y(GNU)g(Readline)g -(library.)46 b(This)24 b(application)e(interactively)g(allows)h(users) -267 287 y(to)g(manipulate)g(files)g(and)g(their)g(modes.)h(*/)195 -391 y(#include)f(<stdio.h>)195 443 y(#include)g(<sys/types.h>)195 -495 y(#include)g(<sys/file.h>)195 546 y(#include)g(<sys/stat.h>)195 -598 y(#include)g(<sys/errno.h>)195 702 y(#include)g -(<readline/readline.h>)195 754 y(#include)g(<readline/history.h>)195 -858 y(extern)g(char)g(*getwd)g(\(\);)195 910 y(extern)g(char)g -(*xmalloc)g(\(\);)195 1013 y(/*)h(The)f(names)g(of)h(functions)e(that)i -(actually)f(do)g(the)h(manipulation.)e(*/)195 1065 y(int)h(com_list)g -(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i(com_stat)f(\(\),)g -(com_pwd)g(\(\);)195 1117 y(int)g(com_delete)g(\(\),)g(com_help)g -(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)195 1221 y(/*)h(A)f -(structure)g(which)g(contains)g(information)f(on)i(the)f(commands)g -(this)g(program)267 1273 y(can)g(understand.)f(*/)195 -1377 y(typedef)h(struct)g({)243 1429 y(char)g(*name;)g(/*)h(User)f -(printable)g(name)g(of)h(the)f(function.)g(*/)243 1480 -y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.) -h(*/)243 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h -(function.)46 b(*/)195 1584 y(})24 b(COMMAND;)195 1688 -y(COMMAND)f(commands[])f(=)i({)243 1740 y({)f("cd",)h(com_cd,)f -("Change)f(to)i(directory)f(DIR")g(},)243 1792 y({)g("delete",)g -(com_delete,)f("Delete)h(FILE")h(},)243 1844 y({)f("help",)g(com_help,) -g("Display)g(this)g(text")g(},)243 1896 y({)g("?",)h(com_help,)e -("Synonym)h(for)h(`help'")f(},)243 1947 y({)g("list",)g(com_list,)g -("List)g(files)g(in)h(DIR")f(},)243 1999 y({)g("ls",)h(com_list,)e -("Synonym)h(for)g(`list'")g(},)243 2051 y({)g("pwd",)g(com_pwd,)g -("Print)g(the)h(current)f(working)g(directory")f(},)243 -2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)243 -2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g -(},)243 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g -(on)h(FILE")f(},)243 2259 y({)g("view",)g(com_view,)g("View)g(the)h -(contents)e(of)i(FILE")f(},)243 2311 y({)g(\(char)h(*\)NULL,)f -(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})195 2363 -y(};)195 2466 y(/*)h(Forward)e(declarations.)h(*/)195 -2518 y(char)g(*stripwhite)g(\(\);)195 2570 y(COMMAND)g(*find_command)f -(\(\);)p eop -%%Page: 39 41 -39 40 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(39)195 183 y Ft(/*)24 b(The)f(name)g(of)h(this)f -(program,)g(as)h(taken)f(from)g(argv[0].)g(*/)195 235 -y(char)g(*progname;)195 339 y(/*)h(When)f(non-zero,)g(this)g(global)g -(means)g(the)h(user)f(is)g(done)h(using)f(this)g(program.)g(*/)p -1985 349 21 42 v 195 391 a(int)g(done;)195 495 y(char)g(*)195 -546 y(dupstr)g(\(s\))314 598 y(int)h(s;)195 650 y({)243 -702 y(char)f(*r;)243 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h -(1\);)243 858 y(strcpy)f(\(r,)g(s\);)243 910 y(return)g(\(r\);)195 -962 y(})195 1065 y(main)g(\(argc,)g(argv\))314 1117 y(int)h(argc;)314 -1169 y(char)g(**argv;)195 1221 y({)243 1273 y(char)f(*line,)g(*s;)243 -1377 y(progname)f(=)i(argv[0];)243 1480 y(initialize_readline)d(\(\);)i -(/*)h(Bind)f(our)h(completer.)e(*/)243 1584 y(/*)h(Loop)h(reading)f -(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)243 -1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))290 1688 y({)338 -1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)338 1844 -y(if)i(\(!line\))386 1896 y(break;)338 1999 y(/*)g(Remove)f(leading)g -(and)g(trailing)g(whitespace)f(from)i(the)f(line.)410 -2051 y(Then,)g(if)h(there)f(is)g(anything)g(left,)g(add)h(it)f(to)h -(the)f(history)g(list)410 2103 y(and)g(execute)g(it.)h(*/)338 -2155 y(s)g(=)g(stripwhite)e(\(line\);)338 2259 y(if)i(\(*s\))386 -2311 y({)434 2363 y(add_history)e(\(s\);)434 2414 y(execute_line)g -(\(s\);)386 2466 y(})338 2570 y(free)h(\(line\);)290 -2622 y(})p eop -%%Page: 40 42 -40 41 bop 75 -58 a Fu(40)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(exit)23 b(\(0\);)195 235 y(})195 339 y(/*)h(Execute)e(a)i -(command)f(line.)g(*/)195 391 y(int)195 443 y(execute_line)f(\(line\)) -314 495 y(char)i(*line;)195 546 y({)243 598 y(register)e(int)i(i;)243 -650 y(COMMAND)f(*command;)243 702 y(char)g(*word;)243 -806 y(/*)g(Isolate)g(the)h(command)f(word.)g(*/)243 858 -y(i)g(=)h(0;)243 910 y(while)f(\(line[i])g(&&)g(whitespace)g -(\(line[i]\)\))290 962 y(i++;)243 1013 y(word)g(=)h(line)f(+)h(i;)243 -1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))290 -1169 y(i++;)243 1273 y(if)g(\(line[i]\))290 1325 y(line[i++])g(=)h -('\\0';)243 1429 y(command)f(=)g(find_command)g(\(word\);)243 -1532 y(if)g(\(!command\))290 1584 y({)338 1636 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)338 -1688 y(return)g(\(-1\);)290 1740 y(})243 1844 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)243 1896 y(while)f(\(whitespace)f -(\(line[i]\)\))290 1947 y(i++;)243 2051 y(word)h(=)h(line)f(+)h(i;)243 -2155 y(/*)f(Call)h(the)f(function.)g(*/)243 2207 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)195 2259 y(})195 -2363 y(/*)j(Look)f(up)g(NAME)h(as)f(the)h(name)f(of)h(a)f(command,)g -(and)h(return)f(a)g(pointer)g(to)h(that)267 2414 y(command.)46 -b(Return)23 b(a)h(NULL)f(pointer)g(if)h(NAME)f(isn't)g(a)h(command)f -(name.)g(*/)195 2466 y(COMMAND)g(*)195 2518 y(find_command)f(\(name\)) -314 2570 y(char)i(*name;)195 2622 y({)p eop -%%Page: 41 43 -41 42 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(41)243 183 y Ft(register)22 b(int)i(i;)243 -287 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -339 y(if)i(\(strcmp)f(\(name,)g(commands[i].name\))f(==)h(0\))338 -391 y(return)g(\(&commands[i]\);)243 495 y(return)g(\(\(COMMAND)f -(*\)NULL\);)195 546 y(})195 650 y(/*)i(Strip)f(whitespace)f(from)i(the) -f(start)g(and)h(end)f(of)h(STRING.)46 b(Return)24 b(a)f(pointer)267 -702 y(into)g(STRING.)g(*/)195 754 y(char)g(*)195 806 -y(stripwhite)f(\(string\))314 858 y(char)i(*string;)195 -910 y({)243 962 y(register)e(char)i(*s,)f(*t;)243 1065 -y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\))290 -1117 y(;)243 1221 y(if)g(\(*s)h(==)f(0\))290 1273 y(return)g(\(s\);)243 -1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;)243 1429 -y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))290 -1480 y(t--;)243 1532 y(*++t)h(=)h('\\0';)243 1636 y(return)f(s;)195 -1688 y(})195 1792 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)195 1844 y(/*)1575 -b(*/)195 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)195 1947 y(/*)1575 b(*/)195 1999 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)195 2103 y(char)i(*command_generator)f(\(\);)195 -2155 y(char)h(**fileman_completion)e(\(\);)195 2259 y(/*)j(Tell)f(the)g -(GNU)h(Readline)f(library)f(how)i(to)g(complete.)46 b(We)24 -b(want)f(to)h(try)f(to)h(complete)p 2034 2269 21 42 v -267 2311 a(on)f(command)g(names)g(if)h(this)f(is)h(the)f(first)g(word)h -(in)f(the)h(line,)f(or)h(on)f(filenames)p 1962 2317 21 -35 v 267 2363 a(if)g(not.)g(*/)195 2414 y(initialize_readline)e(\(\)) -195 2466 y({)243 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g(the)h -(~/.inputrc)e(file.)h(*/)243 2570 y(rl_readline_name)e(=)j("FileMan";)p -eop -%%Page: 42 44 -42 43 bop 75 -58 a Fu(42)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(/*)23 b(Tell)h(the)f(completer)g(that)g(we)h(want)f(a)h(crack) -f(first.)g(*/)243 235 y(rl_attempted_completion_)o(functio)o(n)e(=)j -(\(CPPFunction)e(*\)fileman_completion;)195 287 y(})195 -391 y(/*)i(Attempt)e(to)i(complete)f(on)g(the)h(contents)f(of)g(TEXT.) -47 b(START)23 b(and)h(END)f(bound)h(the)267 443 y(region)f(of)g -(rl_line_buffer)f(that)h(contains)g(the)h(word)f(to)h(complete.)46 -b(TEXT)23 b(is)267 495 y(the)g(word)g(to)h(complete.)46 -b(We)24 b(can)f(use)h(the)f(entire)g(contents)g(of)h(rl_line_buffer)p -1963 505 21 38 v 267 546 a(in)f(case)g(we)h(want)f(to)h(do)g(some)f -(simple)g(parsing.)47 b(Return)23 b(the)g(array)g(of)h(matches,)p -1986 557 V 267 598 a(or)f(NULL)g(if)h(there)f(aren't)g(any.)h(*/)195 -650 y(char)f(**)195 702 y(fileman_completion)e(\(text,)i(start,)g -(end\))314 754 y(char)h(*text;)314 806 y(int)g(start,)f(end;)195 -858 y({)243 910 y(char)g(**matches;)243 1013 y(matches)g(=)g(\(char)h -(**\)NULL;)243 1117 y(/*)f(If)h(this)f(word)h(is)f(at)h(the)f(start)g -(of)h(the)f(line,)h(then)f(it)g(is)h(a)g(command)314 -1169 y(to)g(complete.)46 b(Otherwise)23 b(it)h(is)f(the)h(name)f(of)h -(a)f(file)h(in)f(the)h(current)314 1221 y(directory.)f(*/)243 -1273 y(if)g(\(start)g(==)h(0\))290 1325 y(matches)f(=)h -(completion_matches)d(\(text,)j(command_generator\);)243 -1429 y(return)f(\(matches\);)195 1480 y(})195 1584 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)h(know)f(whether)p 1938 1594 21 42 v 267 -1636 a(to)g(start)g(from)h(scratch;)e(without)h(any)h(state)f(\(i.e.)g -(STATE)g(==)h(0\),)f(then)h(we)267 1688 y(start)f(at)g(the)h(top)f(of)h -(the)f(list.)g(*/)195 1740 y(char)g(*)195 1792 y(command_generator)f -(\(text,)h(state\))314 1844 y(char)h(*text;)314 1896 -y(int)g(state;)195 1947 y({)243 1999 y(static)f(int)g(list_index,)g -(len;)243 2051 y(char)g(*name;)243 2155 y(/*)g(If)h(this)f(is)h(a)g -(new)f(word)g(to)h(complete,)f(initialize)f(now.)47 b(This)24 -b(includes)314 2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f -(efficiency,)g(and)g(initializing)f(the)i(index)p 1938 -2217 21 38 v 314 2259 a(variable)f(to)h(0.)f(*/)243 2311 -y(if)g(\(!state\))290 2363 y({)338 2414 y(list_index)g(=)g(0;)338 -2466 y(len)h(=)f(strlen)g(\(text\);)290 2518 y(})243 -2622 y(/*)g(Return)g(the)h(next)f(name)g(which)h(partially)e(matches)h -(from)g(the)h(command)f(list.)g(*/)p 1985 2632 21 42 -v eop -%%Page: 43 45 -43 44 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(43)243 183 y Ft(while)23 b(\(name)g(=)h -(commands[list_index].name)o(\))290 235 y({)338 287 y(list_index++;)338 -391 y(if)g(\(strncmp)f(\(name,)g(text,)g(len\))g(==)h(0\))386 -443 y(return)f(\(dupstr\(name\)\);)290 495 y(})243 598 -y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f(NULL.)g(*/)243 -650 y(return)g(\(\(char)g(*\)NULL\);)195 702 y(})195 -806 y(/*)h(***********************)o(*******)o(********)o(*******)o -(*******)o(********)o(****)d(*/)195 858 y(/*)1575 b(*/)195 -910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)195 962 -y(/*)1575 b(*/)195 1013 y(/*)24 b(***********************)o(*******)o -(********)o(*******)o(*******)o(********)o(****)d(*/)195 -1117 y(/*)j(String)f(to)g(pass)h(to)f(system)g(\(\).)47 -b(This)24 b(is)f(for)h(the)f(LIST,)g(VIEW)h(and)f(RENAME)267 -1169 y(commands.)f(*/)195 1221 y(static)h(char)g(syscom[1024];)195 -1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)195 -1377 y(com_list)g(\(arg\))314 1429 y(char)h(*arg;)195 -1480 y({)243 1532 y(if)f(\(!arg\))290 1584 y(arg)h(=)g("";)243 -1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)243 -1740 y(return)g(\(system)g(\(syscom\)\);)195 1792 y(})195 -1896 y(com_view)g(\(arg\))314 1947 y(char)h(*arg;)195 -1999 y({)243 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))290 -2103 y(return)g(1;)243 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)243 2259 y(return)g(\(system)g(\(syscom\)\);)195 -2311 y(})195 2414 y(com_rename)f(\(arg\))314 2466 y(char)i(*arg;)195 -2518 y({)243 2570 y(too_dangerous)e(\("rename"\);)243 -2622 y(return)h(\(1\);)p eop -%%Page: 44 46 -44 45 bop 75 -58 a Fu(44)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Ft(})195 287 y(com_stat)23 b(\(arg\))314 339 y(char)h(*arg;)195 -391 y({)243 443 y(struct)f(stat)g(finfo;)243 546 y(if)g -(\(!valid_argument)f(\("stat",)h(arg\)\))290 598 y(return)g(\(1\);)243 -702 y(if)g(\(stat)g(\(arg,)h(&finfo\))f(==)g(-1\))290 -754 y({)338 806 y(perror)g(\(arg\);)338 858 y(return)g(\(1\);)290 -910 y(})243 1013 y(printf)g(\("Statistics)f(for)h(`\045s':\\n",)g -(arg\);)243 1117 y(printf)g(\("\045s)g(has)h(\045d)f(link\045s,)g(and)g -(is)h(\045d)g(byte\045s)f(in)g(length.\\n",)g(arg,)434 -1169 y(finfo.st_nlink,)434 1221 y(\(finfo.st_nlink)e(==)j(1\))g(?)f("") -h(:)g("s",)434 1273 y(finfo.st_size,)434 1325 y(\(finfo.st_size)e(==)h -(1\))h(?)f("")h(:)g("s"\);)243 1377 y(printf)f(\("Inode)g(Last)g -(Change)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_ctime\)\);)243 -1429 y(printf)g(\(")143 b(Last)23 b(access)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_atime\)\);)243 1480 y(printf)g(\(")95 b(Last)23 -b(modified)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_mtime\)\);)243 -1532 y(return)g(\(0\);)195 1584 y(})195 1688 y(com_delete)f(\(arg\))314 -1740 y(char)i(*arg;)195 1792 y({)243 1844 y(too_dangerous)e -(\("delete"\);)243 1896 y(return)h(\(1\);)195 1947 y(})195 -2051 y(/*)h(Print)f(out)g(help)h(for)f(ARG,)g(or)h(for)f(all)h(of)f -(the)h(commands)f(if)g(ARG)h(is)267 2103 y(not)f(present.)g(*/)195 -2155 y(com_help)g(\(arg\))314 2207 y(char)h(*arg;)195 -2259 y({)243 2311 y(register)e(int)i(i;)243 2363 y(int)f(printed)g(=)h -(0;)243 2466 y(for)f(\(i)h(=)f(0;)h(commands[i].name;)e(i++\))290 -2518 y({)338 2570 y(if)i(\(!*arg)f(||)g(\(strcmp)g(\(arg,)g -(commands[i].name\))f(==)i(0\)\))386 2622 y({)p eop -%%Page: 45 47 -45 46 bop 75 -58 a Fu(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)844 b(45)434 183 y Ft(printf)23 b(\("\045s\\t\\t\045s.\\n",)e -(commands[i].name,)h(commands[i].doc\);)434 235 y(printed++;)386 -287 y(})290 339 y(})243 443 y(if)h(\(!printed\))290 495 -y({)338 546 y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 -b(Possibilties)22 b(are:\\n",)h(arg\);)338 650 y(for)h(\(i)f(=)h(0;)g -(commands[i].name;)d(i++\))386 702 y({)434 754 y(/*)i(Print)g(in)h(six) -f(columns.)g(*/)434 806 y(if)g(\(printed)g(==)h(6\))481 -858 y({)529 910 y(printed)f(=)h(0;)529 962 y(printf)f(\("\\n"\);)481 -1013 y(})434 1117 y(printf)g(\("\045s\\t",)f(commands[i].name\);)434 -1169 y(printed++;)386 1221 y(})338 1325 y(if)i(\(printed\))386 -1377 y(printf)f(\("\\n"\);)290 1429 y(})243 1480 y(return)g(\(0\);)195 -1532 y(})195 1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)195 -1688 y(com_cd)f(\(arg\))314 1740 y(char)h(*arg;)195 1792 -y({)243 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))290 -1896 y({)338 1947 y(perror)g(\(arg\);)338 1999 y(return)g(1;)290 -2051 y(})243 2155 y(com_pwd)g(\(""\);)243 2207 y(return)g(\(0\);)195 -2259 y(})195 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)195 2414 y(com_pwd)g(\(ignore\))314 -2466 y(char)h(*ignore;)195 2518 y({)243 2570 y(char)f(dir[1024],)g(*s;) -p eop -%%Page: 46 48 -46 47 bop 75 -58 a Fu(46)1299 b(GNU)15 b(Readline)i(Library)243 -183 y Ft(s)23 b(=)h(getwd)f(\(dir\);)243 235 y(if)g(\(s)h(==)f(0\))290 -287 y({)338 339 y(printf)g(\("Error)g(getting)g(pwd:)g(\045s\\n",)g -(dir\);)338 391 y(return)g(1;)290 443 y(})243 546 y(printf)g -(\("Current)f(directory)h(is)h(\045s\\n",)f(dir\);)243 -598 y(return)g(0;)195 650 y(})195 754 y(/*)h(The)f(user)g(wishes)g(to)h -(quit)f(using)g(this)h(program.)46 b(Just)24 b(set)f(DONE)h(non-zero.)e -(*/)p 1961 764 21 42 v 195 806 a(com_quit)h(\(arg\))314 -858 y(char)h(*arg;)195 910 y({)243 962 y(done)f(=)h(1;)243 -1013 y(return)f(\(0\);)195 1065 y(})195 1169 y(/*)h(Function)e(which)i -(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)195 -1221 y(too_dangerous)f(\(caller\))314 1273 y(char)i(*caller;)195 -1325 y({)243 1377 y(fprintf)f(\(stderr,)457 1429 y("\045s:)h(Too)f -(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23 -b(it)h(yourself.\\n",)p 1987 1439 V 457 1480 a(caller\);)195 -1532 y(})195 1636 y(/*)g(Return)f(non-zero)f(if)i(ARG)f(is)h(a)g(valid) -f(argument)g(for)g(CALLER,)g(else)g(print)267 1688 y(an)g(error)g -(message)g(and)h(return)f(zero.)g(*/)195 1740 y(int)195 -1792 y(valid_argument)f(\(caller,)h(arg\))314 1844 y(char)h(*caller,)e -(*arg;)195 1896 y({)243 1947 y(if)h(\(!arg)g(||)h(!*arg\))290 -1999 y({)338 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g -(required.\\n",)f(caller\);)338 2103 y(return)h(\(0\);)290 -2155 y(})243 2259 y(return)g(\(1\);)195 2311 y(})p eop -%%Page: 47 49 -47 48 bop 75 -58 a Fu(Concept)15 b(Index)1466 b(47)75 -183 y Fq(Concept)27 b(Index)75 359 y Fs(C)75 417 y Ff(command)14 -b(editing)9 b Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(1)75 517 y Fs(E)75 575 y Ff(editing)15 b(command)f(lines)8 -b Fe(.)f(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(1)75 675 -y Fs(I)75 733 y Ff(initiali)q(zati)q(on)c(\014le,)e(readline)8 -b Fe(.)g(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(4)75 782 y(in)o(teraction,)15 -b(readline)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(1)75 882 y Fs(K)75 940 y Ff(kill)15 b(ring)e Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)24 b Ff(3)1012 359 y(killin)q(g)16 b(text)11 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)24 b Ff(2)1012 495 y Fs(N)1012 553 y Ff(notation,)15 -b(readline)5 b Fe(.)k(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -19 b Ff(1)1012 688 y Fs(R)1012 747 y Ff(readline,)c(function)6 -b Fe(.)i(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(19)1012 882 y Fs(Y)1012 940 y Ff(y)o(anking)c(text)6 -b Fe(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)19 b Ff(2)p eop -%%Page: 48 50 -48 49 bop 75 -58 a Fu(48)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: 49 51 -49 50 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(49)75 183 y Fq(F)-7 b(unction)26 b(and)h(V)-7 b(ariable)26 -b(Index)75 345 y Fs(A)75 403 y Fd(abort)11 b(\(C-g\))6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)18 b Ff(17)75 453 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\)) -s Fe(.)s(.)c(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(12)75 503 y Fd(alphabetic)r Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(29)75 -652 y Fs(B)75 711 y Fd(backward-c)o(ha)o(r)10 b(\(C-b\))t -Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75 760 -y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 b(\(Rubout\))f -Fe(.)s(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(14)75 810 y Fd(backward-k)o(il)o(l-l)o(in)o(e)10 -b(\(C-x)h(Rubout\))e Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(14)75 860 y Fd(backward-k)o(il)o(l-w)o(or)o(d)10 -b(\(M-DEL\))t Fe(.)s(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)16 b Ff(15)75 910 y Fd(backward-w)o(or)o(d)10 -b(\(M-b\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(12)75 -960 y Fd(beginning-)o(of)o(-hi)o(st)o(ory)9 b(\(M-<\))t -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)16 b Ff(13)75 1009 y Fd(beginning-)o(of)o(-li)o(ne)9 -b(\(C-a\))e Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(12)75 1059 y(b)q(ell-st)o(yle)13 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)23 b Ff(4)75 1209 y Fs(C)75 1267 -y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))6 -b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -18 b Ff(16)75 1317 y Fd(capitalize)o(-w)o(ord)9 b(\(M-c\))f -Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(14)75 1366 y Fd(character-)o(se)o(arc)o -(h)10 b(\(C-]\))f Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(17)75 1416 -y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))s -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(17)75 -1466 y Fd(clear-scre)o(en)9 b(\(C-l\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Ff(12)75 1516 y(commen)o(t-b)q(egin)9 b -Fe(.)f(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 -b Ff(4)75 1566 y Fd(complete)10 b(\(TAB\))e Fe(.)e(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(16)75 1616 y(completion-query-i)q -(tems)9 b Fe(.)f(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(5)75 -1665 y Fd(completion)p 276 1665 12 2 v 10 w(matches)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(34)75 -1715 y(con)o(v)o(ert-meta)11 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)75 1765 y Fd(copy-backw)o(ar) -o(d-w)o(or)o(d)10 b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(15)75 1815 y Fd(copy-forwa)o(rd)o(-wo)o(rd)9 b(\(\))i -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)75 1865 y Fd(copy-regio)o(n-)o -(as-)o(ki)o(ll)9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(15)75 -2014 y Fs(D)75 2072 y Fd(delete-cha)o(r)10 b(\(C-d\))c -Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(13)75 -2122 y Fd(delete-cha)o(r-)o(or-)o(li)o(st)9 b(\(\))g -Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)21 b Ff(16)75 2172 y Fd(delete-hor)o(iz)o(ont)o(al)o -(-sp)o(ace)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)16 b Ff(15)75 2222 y Fd(digit-argu)o(me)o(nt)9 -b(\(M-0,)i(M-1,)h(...)f(M--\))t Fe(.)t(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)16 b Ff(15)75 2271 y Fd(digit)p 177 2271 V 12 w(p)10 -b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)23 b Ff(29)75 2321 y Fd(digit)p 177 -2321 V 12 w(value)5 b Fe(.)t(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(29)75 2371 y Fd(ding)10 -b Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(29)75 2421 y(disable-comple)q -(tion)7 b Fe(.)i(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(5)75 2471 y Fd(do-upperca)o(se)o(-ve)o(rs)o(ion)9 -b(\(M-a,)i(M-b,)g(M-)p Fe(x)p Fd(,)h Fc(:)6 b(:)g(:)p -Fd(\))j Fe(.)d(.)23 b Ff(17)75 2521 y Fd(downcase-w)o(or)o(d)10 -b(\(M-l\))t Fe(.)t(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(14)75 -2570 y Fd(dump-funct)o(io)o(ns)9 b(\(\))d Fe(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)19 b Ff(17)75 2620 y Fd(dump-macro)o(s)10 -b(\(\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(18)75 2670 y Fd(dump-varia)o(bl)o(es)9 b(\(\))d -Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(18)1012 -345 y Fs(E)1012 403 y Ff(editing-mo)q(de)13 b Fe(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)23 -b Ff(5)1012 453 y(enable-k)o(eypad)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22 b Ff(5)1012 -503 y Fd(end-kbd-mac)o(ro)9 b(\(C-x)i(\)\))5 b Fe(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)18 b Ff(16)1012 553 y Fd(end-of-hist)o(or)o(y)10 -b(\(M->\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012 -603 y Fd(end-of-line)9 b(\(C-e\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)20 b Ff(12)1012 652 y Fd(exchange-po)o(in)o(t-a)o(nd)o(-ma)o -(rk)9 b(\(C-x)j(C-x\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(17)1012 702 y(expand-tilde)8 b Fe(.)h(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Ff(5)1012 -811 y Fs(F)1012 869 y Fd(filename)p 1174 869 V 11 w(completion)p -1385 869 V 11 w(function)s Fe(.)s(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)16 b Ff(35)1012 919 y Fd(forward-bac)o(kw)o(ard) -o(-d)o(ele)o(te)o(-ch)o(ar)9 b(\(\))d Fe(.)f(.)h(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)19 b Ff(14)1012 969 y Fd(forward-cha)o(r)10 -b(\(C-f\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 -b Ff(12)1012 1019 y Fd(forward-sea)o(rc)o(h-h)o(is)o(tor)o(y)10 -b(\(C-s\))d Fe(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)23 b Ff(13)1012 1069 y Fd(forward-wor)o(d)10 b(\(M-f\))5 -b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(12)1012 -1118 y Fd(free)p 1094 1118 V 13 w(undo)p 1187 1118 V -13 w(list)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)17 b Ff(27)1012 1228 y Fs(H)1012 1286 y Fd(history-sea)o(rc)o(h-b)o -(ac)o(kwa)o(rd)9 b(\(\))t Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(13)1012 1336 y Fd(history-sea)o(rc) -o(h-f)o(or)o(war)o(d)10 b(\(\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(13)1012 -1385 y(horizon)o(tal-scrol)q(l-mo)r(de)c Fe(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)24 b Ff(5)1012 1495 y Fs(I)1012 1553 y Ff(input-meta)12 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)23 b Ff(5)1012 1602 y Fd(insert-comm)o(en)o(t)10 -b(\(M-#\))f Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(17)1012 -1652 y Fd(insert-comp)o(le)o(tio)o(ns)9 b(\(M-*\))d Fe(.)t(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 -b Ff(16)1012 1702 y(isearc)o(h-terminators)13 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(6)1012 -1811 y Fs(K)1012 1869 y Ff(k)o(eymap)t Fe(.)7 b(.)g(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(6)1012 1919 y Fd(kill-line)10 b(\(C-k\))f Fe(.)t(.)d(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)22 b Ff(14)1012 1969 y Fd(kill-region)9 -b(\(\))g Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(15)1012 2019 y Fd(kill-whole-)o(li)o(ne)9 b(\(\))c -Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(15)1012 -2069 y Fd(kill-word)10 b(\(M-d\))f Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)22 b Ff(15)1012 2178 y Fs(L)1012 2236 -y Fd(lowercase)p 1194 2236 V 11 w(p)5 b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(29)1012 -2345 y Fs(M)1012 2403 y Ff(mark-mo)q(di\014ed-li)q(nes)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b -Ff(6)1012 2453 y Fd(menu-comple)o(te)9 b(\(\))f Fe(.)d(.)h(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(16)1012 2503 y(meta-\015ag)8 -b Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)21 b Ff(5)1012 2612 y Fs(N)1012 2670 -y Fd(next-histor)o(y)10 b(\(C-n\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)18 b Ff(12)p eop -%%Page: 50 52 -50 51 bop 75 -58 a Fu(50)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fd(non-increm)o(en)o(tal)o(-f)o(orw)o(ard)o(-s)o(ear)o(ch)o(-hi)o -(st)o(ory)9 b(\(M-n\))155 233 y Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(13)75 283 y Fd(non-increm)o(en)o(tal)o(-r)o(eve)o(rse)o(-s)o(ear)o -(ch)o(-hi)o(st)o(ory)9 b(\(M-p\))155 333 y Fe(.)d(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)16 b Ff(13)75 382 y Fd(numeric)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(29)75 485 y Fs(O)75 543 y Ff(output-meta)7 b Fe(.)g(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(6)75 646 y Fs(P)75 704 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))t Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)16 b Ff(16)75 754 y Fd(prefix-met)o(a)10 -b(\(ESC\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(17)75 804 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))f -Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 907 y Fs(Q)75 965 y -Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))d Fe(.)e(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22 -b Ff(14)75 1068 y Fs(R)75 1126 y Fd(re-read-in)o(it)o(-fi)o(le)9 -b(\(C-x)i(C-r\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)18 b Ff(17)75 1176 y Fd(readline)6 -b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)19 b Ff(19)75 1225 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne) -9 b(\(\))g Fe(.)c(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)21 b Ff(12)75 1275 y Fd(reverse-se)o(ar) -o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))f Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(13)75 1325 y Fd(revert-lin)o(e)10 -b(\(M-r\))c Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(17)75 1375 y Fd(rl)p 117 1375 12 2 v 13 w(add)p -190 1375 V 13 w(defun)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(23)75 1425 y Fd(rl)p 117 -1425 V 13 w(add)p 190 1425 V 13 w(undo)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(27)75 -1474 y Fd(rl)p 117 1474 V 13 w(already)p 270 1474 V 12 -w(prompted)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(22)75 -1524 y Fd(rl)p 117 1524 V 13 w(attempted)p 310 1524 V -11 w(completion)p 520 1524 V 10 w(function)g Fe(.)6 b(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)24 b Ff(35)75 1574 y Fd(rl)p 117 1574 -V 13 w(basic)p 230 1574 V 13 w(quote)p 343 1574 V 12 -w(character)o(s)13 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 1624 y Fd(rl)p -117 1624 V 13 w(basic)p 230 1624 V 13 w(word)p 323 1624 -V 12 w(break)p 435 1624 V 12 w(characters)h Fe(.)6 b(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(36)75 1674 y Fd(rl)p -117 1674 V 13 w(begin)p 230 1674 V 13 w(undo)p 323 1674 -V 12 w(group)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(26)75 1724 y Fd(rl)p 117 1724 V 13 w(bind)p 210 -1724 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)20 b Ff(25)75 1773 y Fd(rl)p 117 -1773 V 13 w(bind)p 210 1773 V 13 w(key)p 283 1773 V 13 -w(in)p 336 1773 V 13 w(map)t Fe(.)5 b(.)h(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)17 b Ff(25)75 1823 y Fd(rl)p 117 1823 V 13 w(binding)p -270 1823 V 12 w(keymap)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(23)75 1873 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(ins)o(ta)o(ll)7 -b Fe(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(30)75 1923 y Fd(rl_callbac)o(k_)o(han)o(dl)o(er_)o(rem)o(ov)o(e)9 -b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -21 b Ff(30)75 1973 y Fd(rl_callbac)o(k_)o(rea)o(d_)o(cha)o(r)6 -b Fe(.)s(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)19 b Ff(30)75 2022 y Fd(rl)p -117 2022 V 13 w(catch)p 230 2022 V 13 w(signals)13 b -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 b -Ff(32)75 2072 y Fd(rl)p 117 2072 V 13 w(catch)p 230 2072 -V 13 w(sigwinch)k Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(32)75 2122 y Fd(rl)p 117 2122 V 13 w(char)p 210 -2122 V 13 w(is)p 263 2122 V 13 w(quoted)p 396 2122 V -12 w(p)18 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b -Ff(35)75 2172 y Fd(rl)p 117 2172 V 13 w(cleanup)p 270 -2172 V 12 w(after)p 382 2172 V 12 w(signal)t Fe(.)s(.)6 -b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)16 b Ff(32)75 2222 y Fd(rl)p 117 2222 V 13 -w(clear)p 230 2222 V 13 w(message)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)22 b Ff(28)75 2271 y Fd(rl)p 117 2271 -V 13 w(clear)p 230 2271 V 13 w(signals)7 b Fe(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)22 b Ff(33)75 2321 y Fd(rl)p 117 -2321 V 13 w(complete)5 b Fe(.)s(.)h(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(34)75 2371 y Fd(rl)p -117 2371 V 13 w(complete)p 290 2371 V 11 w(internal)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Ff(34)75 2421 y -Fd(rl)p 117 2421 V 13 w(completer)p 310 2421 V 11 w(quote)p -421 2421 V 12 w(characters)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)19 b Ff(36)75 2471 y Fd(rl)p 117 2471 -V 13 w(completer)p 310 2471 V 11 w(word)p 401 2471 V -13 w(break)p 514 2471 V 12 w(character)o(s)13 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 b Ff(36)75 2521 y -Fd(rl)p 117 2521 V 13 w(completion)p 329 2521 V 11 w(append)p -461 2521 V 11 w(character)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(36)75 2570 y Fd(rl)p 117 2570 V 13 -w(completion)p 329 2570 V 11 w(display)p 481 2570 V 11 -w(matches)p 632 2570 V 11 w(hook)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)16 b Ff(37)75 2620 y Fd(rl)p 117 2620 V 13 w(completion)p -329 2620 V 11 w(entry)p 441 2620 V 12 w(function)21 b -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(34,)13 -b(35)75 2670 y Fd(rl)p 117 2670 V 13 w(completion)p 329 -2670 V 11 w(query)p 441 2670 V 12 w(items)h Fe(.)6 b(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(36)1012 183 y Fd(rl)p 1054 183 V 14 w(copy)p 1148 -183 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)17 b Ff(24)1012 233 y Fd(rl)p 1054 233 V 14 -w(copy)p 1148 233 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012 283 y -Fd(rl)p 1054 283 V 14 w(delete)p 1188 283 V 12 w(text)t -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(28)1012 333 y Fd(rl)p 1054 333 V 14 w(directory)p -1247 333 V 10 w(completion)p 1458 333 V 11 w(hook)i Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(37)1012 382 y Fd(rl)p 1054 382 V 14 w(discard)p -1208 382 V 11 w(keymap)9 b Fe(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(24)1012 432 y Fd(rl)p 1054 432 V 14 w(display)p -1208 432 V 11 w(match)p 1319 432 V 12 w(list)6 b Fe(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)19 b Ff(29)1012 482 y Fd(rl)p 1054 482 V 14 w(do)p -1108 482 V 13 w(undo)9 b Fe(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(27)1012 532 y Fd(rl)p -1054 532 V 14 w(done)15 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)1012 -582 y Fd(rl)p 1054 582 V 14 w(end)f Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 -b Ff(21)1012 632 y Fd(rl)p 1054 632 V 14 w(end)p 1128 -632 V 13 w(undo)p 1221 632 V 12 w(group)10 b Fe(.)c(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)25 b Ff(26)1012 681 y Fd(rl)p 1054 681 -V 14 w(erase)p 1168 681 V 12 w(empty)p 1280 681 V 12 -w(line)d Fe(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)24 b Ff(22)1012 -731 y Fd(rl)p 1054 731 V 14 w(event)p 1168 731 V 12 w(hook)18 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(23)1012 781 y Fd(rl)p 1054 781 V 14 w(executing)p -1247 781 V 10 w(keymap)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)21 -b Ff(23)1012 831 y Fd(rl)p 1054 831 V 14 w(extend)p 1188 -831 V 12 w(line)p 1280 831 V 12 w(buffer)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -19 b Ff(28)1012 881 y Fd(rl)p 1054 881 V 14 w(filename)p -1228 881 V 11 w(completio)o(n)p 1438 881 V 11 w(desired)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(37)1012 930 y Fd(rl)p 1054 930 V 14 w(filename)p -1228 930 V 11 w(dequoting)p 1418 930 V 10 w(function)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(35)1012 980 y Fd(rl)p 1054 980 V 14 w(filename)p -1228 980 V 11 w(quote)p 1339 980 V 12 w(character)o(s)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(36)1012 1030 y Fd(rl)p 1054 1030 V 14 w(filename)p -1228 1030 V 11 w(quoting)p 1379 1030 V 11 w(desired)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(37)1012 1080 y Fd(rl)p 1054 1080 V 14 w(filename)p -1228 1080 V 11 w(quoting)p 1379 1080 V 11 w(function)18 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(35)1012 1130 y Fd(rl)p 1054 1130 V 14 w(forced)p -1188 1130 V 12 w(update)p 1320 1130 V 11 w(display)9 -b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)24 b Ff(27)1012 1180 y Fd(rl)p 1054 1180 -V 14 w(free)p 1148 1180 V 12 w(line)p 1240 1180 V 13 -w(state)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(32)1012 1229 y Fd(rl)p 1054 1229 V 14 w(function)p -1228 1229 V 11 w(dumper)7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(26)1012 1279 y Fd(rl)p 1054 1279 V 14 w(function)p -1228 1279 V 11 w(of)p 1279 1279 V 13 w(keyseq)6 b Fe(.)t(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)19 b Ff(25)1012 1329 y Fd(rl)p 1054 1329 V 14 -w(funmap)p 1188 1329 V 12 w(names)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 1379 y Fd(rl)p 1054 -1379 V 14 w(generic)p 1208 1379 V 11 w(bind)10 b Fe(.)c(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(25)1012 1429 y Fd(rl)p -1054 1429 V 14 w(get)p 1128 1429 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(24)1012 -1478 y Fd(rl)p 1054 1478 V 14 w(get)p 1128 1478 V 13 -w(keymap)p 1261 1478 V 11 w(by)p 1312 1478 V 14 w(name)9 -b Fe(.)t(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)22 b Ff(24)1012 1528 y Fd(rl)p -1054 1528 V 14 w(get)p 1128 1528 V 13 w(keymap)p 1261 -1528 V 11 w(name)9 b Fe(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 -b Ff(24)1012 1578 y Fd(rl)p 1054 1578 V 14 w(getc)8 b -Fe(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)23 b Ff(28)1012 1628 y Fd(rl)p 1054 1628 -V 14 w(getc)p 1148 1628 V 12 w(function)13 b Fe(.)7 b(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(23)1012 1678 y Fd(rl)p -1054 1678 V 14 w(ignore)p 1188 1678 V 12 w(completi)o(on)p -1399 1678 V 11 w(duplicate)o(s)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)17 b Ff(36)1012 1727 y Fd(rl)p 1054 1727 -V 14 w(ignore)p 1188 1727 V 12 w(some)p 1280 1727 V 12 -w(completion)o(s)p 1511 1727 V 11 w(function)j Fe(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(37)1012 1777 y Fd(rl)p -1054 1777 V 14 w(inhibit)p 1208 1777 V 11 w(completion)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(37)1012 1827 y Fd(rl)p -1054 1827 V 14 w(initializ)o(e)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(28)1012 1877 y Fd(rl)p -1054 1877 V 14 w(insert)p 1188 1877 V 12 w(completi)o(ons)r -Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(34)1012 1927 y Fd(rl)p -1054 1927 V 14 w(insert)p 1188 1927 V 12 w(text)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(28)1012 1977 y Fd(rl)p 1054 1977 V 14 w(instream)g -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 -b Ff(22)1012 2026 y Fd(rl)p 1054 2026 V 14 w(invoking)p -1228 2026 V 11 w(keyseqs)6 b Fe(.)s(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19 -b Ff(26)1012 2076 y Fd(rl)p 1054 2076 V 14 w(invoking)p -1228 2076 V 11 w(keyseqs)p 1379 2076 V 11 w(in)p 1430 -2076 V 14 w(map)9 b Fe(.)e(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)24 b Ff(26)1012 2126 y Fd(rl)p -1054 2126 V 14 w(kill)p 1148 2126 V 12 w(text)6 b Fe(.)f(.)h(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(28)1012 -2176 y Fd(rl)p 1054 2176 V 14 w(library)p 1208 2176 V -11 w(version)g Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(22)1012 2226 y Fd(rl)p 1054 2226 V 14 w(line)p 1148 -2226 V 12 w(buffer)17 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)19 b Ff(21)1012 2275 y Fd(rl)p 1054 2275 V -14 w(list)p 1148 2275 V 12 w(funmap)p 1280 2275 V 12 -w(names)7 b Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(26)1012 -2325 y Fd(rl)p 1054 2325 V 14 w(make)p 1148 2325 V 12 -w(bare)p 1240 2325 V 13 w(keymap)9 b Fe(.)s(.)d(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -22 b Ff(24)1012 2375 y Fd(rl)p 1054 2375 V 14 w(make)p -1148 2375 V 12 w(keymap)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)17 b Ff(24)1012 2425 y Fd(rl)p 1054 2425 -V 14 w(mark)e Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(21)1012 2475 -y Fd(rl)p 1054 2475 V 14 w(message)6 b Fe(.)s(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Ff(27)1012 -2524 y Fd(rl)p 1054 2524 V 14 w(modifying)s Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(27)1012 2574 y Fd(rl)p 1054 2574 V 14 w(named)p -1168 2574 V 12 w(function)8 b Fe(.)s(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)22 b Ff(25)1012 2624 y Fd(rl)p 1054 2624 V 14 w(on)p -1108 2624 V 13 w(new)p 1181 2624 V 13 w(line)7 b Fe(.)t(.)f(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(27)p eop -%%Page: 51 53 -51 52 bop 75 -58 a Fu(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1187 -b(51)75 183 y Fd(rl)p 117 183 12 2 v 13 w(on)p 170 183 -V 14 w(new)p 244 183 V 13 w(line)p 337 183 V 12 w(with)p -429 183 V 13 w(prompt)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(27)75 233 y Fd(rl)p -117 233 V 13 w(outstream)d Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)18 b Ff(22)75 283 y Fd(rl)p 117 283 -V 13 w(parse)p 230 283 V 13 w(and)p 303 283 V 13 w(bind)9 -b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(25)75 -333 y Fd(rl)p 117 333 V 13 w(pending)p 270 333 V 12 w(input)14 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(22)75 382 y Fd(rl)p 117 382 V 13 w(point)22 b Fe(.)6 -b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)24 b Ff(21)75 432 y Fd(rl)p 117 432 V 13 w(possible)p -290 432 V 11 w(completions)6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(34)75 -482 y Fd(rl)p 117 482 V 13 w(pre)p 190 482 V 13 w(input)p -303 482 V 13 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -18 b Ff(22)75 532 y Fd(rl)p 117 532 V 13 w(prompt)i Fe(.)7 -b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -22 b Ff(22)75 582 y Fd(rl)p 117 582 V 13 w(read)p 210 -582 V 13 w(init)p 303 582 V 13 w(file)9 b Fe(.)d(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)24 b Ff(25)75 632 y Fd(rl)p 117 632 V -13 w(read)p 210 632 V 13 w(key)8 b Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Ff(28)75 681 -y Fd(rl)p 117 681 V 13 w(readline)p 290 681 V 11 w(name)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(22)75 731 y Fd(rl)p 117 731 V 13 w(redisplay)t Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 -b Ff(27)75 781 y Fd(rl)p 117 781 V 13 w(redisplay)p 310 -781 V 11 w(function)f Fe(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Ff(23)75 -831 y Fd(rl)p 117 831 V 13 w(reset)p 230 831 V 13 w(after)p -343 831 V 12 w(signal)6 b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(32)75 881 y Fd(rl)p 117 881 V 13 w(reset)p 230 881 -V 13 w(line)p 323 881 V 12 w(state)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)21 b Ff(27)75 930 y Fd(rl)p 117 930 V 13 w(reset)p -230 930 V 13 w(terminal)8 b Fe(.)s(.)e(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -21 b Ff(29)75 980 y Fd(rl)p 117 980 V 13 w(resize)p 250 -980 V 12 w(terminal)7 b Fe(.)s(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(33)75 1030 y Fd(rl)p 117 1030 V 13 w(restore)p 270 -1030 V 12 w(prompt)9 b Fe(.)s(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 -b Ff(28)75 1080 y Fd(rl)p 117 1080 V 13 w(save)p 210 -1080 V 13 w(prompt)t Fe(.)t(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)17 b Ff(28)75 1130 y Fd(rl)p 117 1130 V 13 -w(set)p 190 1130 V 13 w(keymap)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(24)75 1180 y Fd(rl)p -117 1180 V 13 w(set)p 190 1180 V 13 w(signals)t Fe(.)t(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(33)75 1229 y Fd(rl)p 117 1229 V 13 w(special)p 270 -1229 V 12 w(prefixes)h Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(36)75 1279 y Fd(rl)p 117 1279 V 13 w(startup)p 270 -1279 V 12 w(hook)16 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)17 b Ff(22)75 1329 y Fd(rl)p 117 1329 V 13 w(stuff)p -230 1329 V 13 w(char)5 b Fe(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)18 b Ff(28)75 1379 y Fd(rl)p 117 1379 -V 13 w(terminal)p 290 1379 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)16 b Ff(22)75 1429 y Fd(rl)p 117 -1429 V 13 w(unbind)p 250 1429 V 12 w(command)p 402 1429 -V 12 w(in)p 454 1429 V 13 w(map)5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(25)75 1478 y Fd(rl)p 117 1478 V 13 w(unbind)p 250 -1478 V 12 w(function)p 422 1478 V 11 w(in)p 473 1478 -V 14 w(map)t Fe(.)t(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(25)75 1528 y Fd(rl)p -117 1528 V 13 w(unbind)p 250 1528 V 12 w(key)5 b Fe(.)g(.)h(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(25)75 -1578 y Fd(rl)p 117 1578 V 13 w(unbind)p 250 1578 V 12 -w(key)p 322 1578 V 13 w(in)p 375 1578 V 13 w(map)10 b -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(25)1012 183 y -Fs(S)1012 241 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...\))t -Fe(.)5 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(14)1012 291 y Fd(set-mark)10 b(\(C-@\))e Fe(.)f(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(17)1012 341 y(sho)o(w-all-if-am) -o(bigu)q(ous)8 b Fe(.)g(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(6)1012 391 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))e -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)24 b Ff(16)1012 490 y Fs(T)1012 549 y -Fd(tab-insert)9 b(\(M-TAB\))c Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 -b Ff(14)1012 598 y Fd(tilde-expan)o(d)10 b(\(M-~\))5 -b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(17)1012 -648 y Fd(to)p 1054 648 V 14 w(lower)9 b Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(29)1012 698 y Fd(to)p 1054 698 V 14 w(upper)9 b -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)22 b Ff(29)1012 748 y Fd(transpose-c)o(ha)o(rs)9 -b(\(C-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(14)1012 798 -y Fd(transpose-w)o(or)o(ds)9 b(\(M-t\))f Fe(.)e(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 -b Ff(14)1012 897 y Fs(U)1012 955 y Fd(undo)12 b(\(C-)p -1166 955 V 13 w(,)g(C-x)g(C-u\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)18 b Ff(17)1012 1005 y Fd(universal-a)o(rg)o(ume)o(nt)9 -b(\(\))g Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(15)1012 1055 y -Fd(unix-line-d)o(is)o(car)o(d)10 b(\(C-u\))d Fe(.)t(.)f(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)21 -b Ff(14)1012 1105 y Fd(unix-word-r)o(ub)o(out)9 b(\(C-w\))g -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)22 b Ff(15)1012 1155 y Fd(upcase-word)9 -b(\(M-u\))d Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(14)1012 1204 y Fd(uppercase)p 1194 1204 V 11 w(p)5 -b Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)18 b Ff(29)1012 1254 y Fd(username)p 1174 1254 V 11 -w(completion)p 1385 1254 V 11 w(function)s Fe(.)s(.)6 -b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 -b Ff(35)1012 1354 y Fs(V)1012 1412 y Ff(visible-stats)t -Fe(.)9 b(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Ff(6)1012 1512 y Fs(Y)1012 1570 y Fd(yank)12 -b(\(C-y\))7 b Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)20 b Ff(15)1012 1620 y Fd(yank-last-a)o(rg)9 -b(\(M-.,)i(M-)p 1433 1620 V 13 w(\))t Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(13)1012 1669 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)24 b Ff(13)1012 1719 y Fd(yank-pop)10 -b(\(M-y\))e Fe(.)f(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(15)p eop -%%Page: 52 54 -52 53 bop 75 -58 a Fu(52)1299 b(GNU)15 b(Readline)i(Library)p -eop -%%Page: -1 55 --1 54 bop 1862 -58 a Fu(i)75 183 y Fq(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fs(1)67 b(Command)22 b(Line)i(Editing)d -Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fs(1)224 423 y Fu(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fu(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fu(1)374 532 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fu(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fu(2)374 697 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fu(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fu(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fu(4)374 861 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fu(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fu(8)374 971 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fu(9)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h -(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fu(12)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fu(12)374 1135 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fu(12)374 1190 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fa(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fu(14)374 -1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fu(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fu(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fu(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fu(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fu(18)75 1640 y Fs(2)67 b(Programming)23 -b(with)g(GNU)f(Readline)12 b Fb(.)f(.)g(.)f(.)g(.)g(.)g(.)h(.)f(.)35 -b Fs(19)224 1708 y Fu(2.1)45 b(Basic)16 b(Beha)o(vior)8 -b Fa(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(19)224 1763 y(2.2)45 -b(Custom)14 b(F)l(unctions)7 b Fa(.)i(.)f(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 b Fu(20)374 -1818 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)11 -b Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 b Fu(20)374 -1873 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l(unction)6 -b Fa(.)i(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 b Fu(21)224 1928 y(2.3)45 -b(Readline)17 b(V)l(ariables)f Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)29 b Fu(21)224 -1982 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7 -b Fa(.)i(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 b Fu(23)374 2037 y(2.4.1)44 -b(Naming)15 b(a)g(F)l(unction)e Fa(.)7 b(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)27 b Fu(23)374 2092 y(2.4.2)44 b(Selecting)17 -b(a)e(Keymap)6 b Fa(.)h(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fu(24)374 2147 y(2.4.3)44 b(Binding)17 b(Keys)5 b Fa(.)j(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)20 b -Fu(24)374 2202 y(2.4.4)44 b(Asso)q(ciating)16 b(F)l(unction)g(Names)f -(and)g(Bindings)8 b Fa(.)h(.)f(.)f(.)h(.)f(.)h(.)23 b -Fu(25)374 2256 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b -Fu(26)374 2311 y(2.4.6)44 b(Redispla)o(y)10 b Fa(.)f(.)f(.)g(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fu(27)374 2366 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)7 -b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)22 -b Fu(28)374 2421 y(2.4.8)44 b(Utilit)o(y)16 b(F)l(unctions)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 -b Fu(28)374 2475 y(2.4.9)44 b(Alternate)15 b(In)o(terface)5 -b Fa(.)i(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b -Fu(29)374 2530 y(2.4.10)43 b(An)16 b(Example)f Fa(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fu(30)224 2585 y(2.5)45 b(Readline)17 b(Signal)g(Handling)12 -b Fa(.)c(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fu(31)224 2640 y(2.6)45 b(Custom)14 b(Completers)f -Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)28 b Fu(33)p eop -%%Page: -2 56 --2 55 bop 75 -58 a Fu(ii)1321 b(GNU)15 b(Readline)i(Library)374 -42 y(2.6.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)10 -b Fa(.)d(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)25 b Fu(33)374 96 y(2.6.2)44 -b(Completion)16 b(F)l(unctions)6 b Fa(.)i(.)g(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -21 b Fu(34)374 151 y(2.6.3)44 b(Completion)16 b(V)l(ariables)c -Fa(.)c(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fu(35)374 206 -y(2.6.4)44 b(A)15 b(Short)g(Completion)h(Example)5 b -Fa(.)j(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)20 b Fu(37)75 327 y Fs(Concept)i(Index)10 b Fb(.)i(.)e(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)33 b Fs(47)75 462 -y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)9 -b Fb(.)i(.)f(.)g(.)h(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)32 b Fs(49)p eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/gnu/lib/libreadline/doc/rluserman.dvi b/gnu/lib/libreadline/doc/rluserman.dvi Binary files differdeleted file mode 100644 index 0d2bf71f771..00000000000 --- a/gnu/lib/libreadline/doc/rluserman.dvi +++ /dev/null diff --git a/gnu/lib/libreadline/doc/rluserman.html b/gnu/lib/libreadline/doc/rluserman.html deleted file mode 100644 index b813dda6c1e..00000000000 --- a/gnu/lib/libreadline/doc/rluserman.html +++ /dev/null @@ -1,1566 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.52 - from /usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo on 1 March 2000 --> - -<TITLE>GNU Readline Library</TITLE> -</HEAD> -<BODY> -<H1>GNU Readline Library User Interface</H1> -<H2>Edition 4.1, for <CODE>Readline Library</CODE> Version 4.1.</H2> -<H2>January 2000</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<P><HR><P> -<H1>Table of Contents</H1> -<UL> -<LI><A NAME="TOC1" HREF="rluserman.html#SEC1">Command Line Editing</A> -<UL> -<LI><A NAME="TOC2" HREF="rluserman.html#SEC2">Introduction to Line Editing</A> -<LI><A NAME="TOC3" HREF="rluserman.html#SEC3">Readline Interaction</A> -<UL> -<LI><A NAME="TOC4" HREF="rluserman.html#SEC4">Readline Bare Essentials</A> -<LI><A NAME="TOC5" HREF="rluserman.html#SEC5">Readline Movement Commands</A> -<LI><A NAME="TOC6" HREF="rluserman.html#SEC6">Readline Killing Commands</A> -<LI><A NAME="TOC7" HREF="rluserman.html#SEC7">Readline Arguments</A> -<LI><A NAME="TOC8" HREF="rluserman.html#SEC8">Searching for Commands in the History</A> -</UL> -<LI><A NAME="TOC9" HREF="rluserman.html#SEC9">Readline Init File</A> -<UL> -<LI><A NAME="TOC10" HREF="rluserman.html#SEC10">Readline Init File Syntax</A> -<LI><A NAME="TOC11" HREF="rluserman.html#SEC11">Conditional Init Constructs</A> -<LI><A NAME="TOC12" HREF="rluserman.html#SEC12">Sample Init File</A> -</UL> -<LI><A NAME="TOC13" HREF="rluserman.html#SEC13">Bindable Readline Commands</A> -<UL> -<LI><A NAME="TOC14" HREF="rluserman.html#SEC14">Commands For Moving</A> -<LI><A NAME="TOC15" HREF="rluserman.html#SEC15">Commands For Manipulating The History</A> -<LI><A NAME="TOC16" HREF="rluserman.html#SEC16">Commands For Changing Text</A> -<LI><A NAME="TOC17" HREF="rluserman.html#SEC17">Killing And Yanking</A> -<LI><A NAME="TOC18" HREF="rluserman.html#SEC18">Specifying Numeric Arguments</A> -<LI><A NAME="TOC19" HREF="rluserman.html#SEC19">Letting Readline Type For You</A> -<LI><A NAME="TOC20" HREF="rluserman.html#SEC20">Keyboard Macros</A> -<LI><A NAME="TOC21" HREF="rluserman.html#SEC21">Some Miscellaneous Commands</A> -</UL> -<LI><A NAME="TOC22" HREF="rluserman.html#SEC22">Readline vi Mode</A> -</UL> -</UL> -<P><HR><P> - -<P> -This document describes the end user interface of the GNU Readline Library, -a utility which aids in the consistency of user interface across discrete -programs that need to provide a command line interface. - -</P> -<P> -Published by the Free Software Foundation <BR> -59 Temple Place, Suite 330, <BR> -Boston, MA 02111 USA - -</P> -<P> -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. - -</P> -<P> -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided that the entire -resulting derived work is distributed under the terms of a permission -notice identical to this one. - -</P> -<P> -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions, -except that this permission notice may be stated in a translation approved -by the Free Software Foundation. - -</P> -<P> -Copyright (C) 1988-1999 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="rluserman.html#TOC1">Command Line Editing</A></H1> - -<P> -This chapter describes the basic features of the GNU -command line editing interface. - -</P> - -<UL> -<LI><A HREF="rluserman.html#SEC2">Introduction and Notation</A>: Notation used in this text. -<LI><A HREF="rluserman.html#SEC3">Readline Interaction</A>: The minimum set of commands for editing a line. -<LI><A HREF="rluserman.html#SEC9">Readline Init File</A>: Customizing Readline from a user's view. -<LI><A HREF="rluserman.html#SEC13">Bindable Readline Commands</A>: A description of most of the Readline commands - available for binding -<LI><A HREF="rluserman.html#SEC22">Readline vi Mode</A>: A short description of how to make Readline - behave like the vi editor. -</UL> - - - -<H2><A NAME="SEC2" HREF="rluserman.html#TOC2">Introduction to Line Editing</A></H2> - -<P> -The following paragraphs describe the notation used to represent -keystrokes. - -</P> -<P> -The text <KBD>C-k</KBD> is read as `Control-K' and describes the character -produced when the <KBD>k</KBD> key is pressed while the Control key -is depressed. - -</P> -<P> -The text <KBD>M-k</KBD> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <KBD>k</KBD> -key is pressed. -The Meta key is labeled <KBD>ALT</KBD> on many keyboards. -On keyboards with two keys labeled <KBD>ALT</KBD> (usually to either side of -the space bar), the <KBD>ALT</KBD> on the left side is generally set to -work as a Meta key. -The <KBD>ALT</KBD> key on the right may also be configured to work as a -Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - -</P> -<P> -If you do not have a Meta or <KBD>ALT</KBD> key, or another key working as -a Meta key, the identical keystroke can be generated by typing <KBD>ESC</KBD> -<I>first</I>, and then typing <KBD>k</KBD>. -Either process is known as <EM>metafying</EM> the <KBD>k</KBD> key. - -</P> -<P> -The text <KBD>M-C-k</KBD> is read as `Meta-Control-k' and describes the -character produced by <EM>metafying</EM> <KBD>C-k</KBD>. - -</P> -<P> -In addition, several keys have their own names. Specifically, -<KBD>DEL</KBD>, <KBD>ESC</KBD>, <KBD>LFD</KBD>, <KBD>SPC</KBD>, <KBD>RET</KBD>, and <KBD>TAB</KBD> all -stand for themselves when seen in this text, or in an init file -(see section <A HREF="rluserman.html#SEC9">Readline Init File</A>). -If your keyboard lacks a <KBD>LFD</KBD> key, typing <KBD>C-j</KBD> will -produce the desired character. -The <KBD>RET</KBD> key may be labeled <KBD>Return</KBD> or <KBD>Enter</KBD> on -some keyboards. - -</P> - - -<H2><A NAME="SEC3" HREF="rluserman.html#TOC3">Readline Interaction</A></H2> -<P> -<A NAME="IDX1"></A> - -</P> -<P> -Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <KBD>RETURN</KBD>. You do not have to be at the -end of the line to press <KBD>RETURN</KBD>; the entire line is accepted -regardless of the location of the cursor within the line. - -</P> - -<UL> -<LI><A HREF="rluserman.html#SEC4">Readline Bare Essentials</A>: The least you need to know about Readline. -<LI><A HREF="rluserman.html#SEC5">Readline Movement Commands</A>: Moving about the input line. -<LI><A HREF="rluserman.html#SEC6">Readline Killing Commands</A>: How to delete text, and how to get it back! -<LI><A HREF="rluserman.html#SEC7">Readline Arguments</A>: Giving numeric arguments to commands. -<LI><A HREF="rluserman.html#SEC8">Searching</A>: Searching through previous lines. -</UL> - - - -<H3><A NAME="SEC4" HREF="rluserman.html#TOC4">Readline Bare Essentials</A></H3> -<P> -<A NAME="IDX2"></A> -<A NAME="IDX3"></A> -<A NAME="IDX4"></A> - -</P> -<P> -In order to enter characters into the line, simply type them. The typed -character appears where the cursor was, and then the cursor moves one -space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - -</P> -<P> -Sometimes you may mistype a character, and -not notice the error until you have typed several other characters. In -that case, you can type <KBD>C-b</KBD> to move the cursor to the left, and then -correct your mistake. Afterwards, you can move the cursor to the right -with <KBD>C-f</KBD>. - -</P> -<P> -When you add text in the middle of a line, you will notice that characters -to the right of the cursor are `pushed over' to make room for the text -that you have inserted. Likewise, when you delete text behind the cursor, -characters to the right of the cursor are `pulled back' to fill in the -blank space created by the removal of the text. A list of the bare -essentials for editing the text of an input line follows. - -</P> -<DL COMPACT> - -<DT><KBD>C-b</KBD> -<DD> -Move back one character. -<DT><KBD>C-f</KBD> -<DD> -Move forward one character. -<DT><KBD>DEL</KBD> or <KBD>Backspace</KBD> -<DD> -Delete the character to the left of the cursor. -<DT><KBD>C-d</KBD> -<DD> -Delete the character underneath the cursor. -<DT>Printing characters -<DD> -Insert the character into the line at the cursor. -<DT><KBD>C-_</KBD> or <KBD>C-x C-u</KBD> -<DD> -Undo the last editing command. You can undo all the way back to an -empty line. -</DL> - -<P> -(Depending on your configuration, the <KBD>Backspace</KBD> key be set to -delete the character to the left of the cursor and the <KBD>DEL</KBD> key set -to delete the character underneath the cursor, like <KBD>C-d</KBD>, rather -than the character to the left of the cursor.) - -</P> - - -<H3><A NAME="SEC5" HREF="rluserman.html#TOC5">Readline Movement Commands</A></H3> - -<P> -The above table describes the most basic keystrokes that you need -in order to do editing of the input line. For your convenience, many -other commands have been added in addition to <KBD>C-b</KBD>, <KBD>C-f</KBD>, -<KBD>C-d</KBD>, and <KBD>DEL</KBD>. Here are some commands for moving more rapidly -about the line. - -</P> -<DL COMPACT> - -<DT><KBD>C-a</KBD> -<DD> -Move to the start of the line. -<DT><KBD>C-e</KBD> -<DD> -Move to the end of the line. -<DT><KBD>M-f</KBD> -<DD> -Move forward a word, where a word is composed of letters and digits. -<DT><KBD>M-b</KBD> -<DD> -Move backward a word. -<DT><KBD>C-l</KBD> -<DD> -Clear the screen, reprinting the current line at the top. -</DL> - -<P> -Notice how <KBD>C-f</KBD> moves forward a character, while <KBD>M-f</KBD> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - -</P> - - -<H3><A NAME="SEC6" HREF="rluserman.html#TOC6">Readline Killing Commands</A></H3> - -<P> -<A NAME="IDX5"></A> -<A NAME="IDX6"></A> - -</P> -<P> -<EM>Killing</EM> text means to delete the text from the line, but to save -it away for later use, usually by <EM>yanking</EM> (re-inserting) -it back into the line. -(`Cut' and `paste' are more recent jargon for `kill' and `yank'.) - -</P> -<P> -If the description for a command says that it `kills' text, then you can -be sure that you can get the text back in a different (or the same) -place later. - -</P> -<P> -When you use a kill command, the text is saved in a <EM>kill-ring</EM>. -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill -ring is not line specific; the text that you killed on a previously -typed line is available to be yanked back later, when you are typing -another line. -<A NAME="IDX7"></A> - -</P> -<P> -Here is the list of commands for killing text. - -</P> -<DL COMPACT> - -<DT><KBD>C-k</KBD> -<DD> -Kill the text from the current cursor position to the end of the line. - -<DT><KBD>M-d</KBD> -<DD> -Kill from the cursor to the end of the current word, or, if between -words, to the end of the next word. -Word boundaries are the same as those used by <KBD>M-f</KBD>. - -<DT><KBD>M-DEL</KBD> -<DD> -Kill from the cursor the start of the previous word, or, if between -words, to the start of the previous word. -Word boundaries are the same as those used by <KBD>M-b</KBD>. - -<DT><KBD>C-w</KBD> -<DD> -Kill from the cursor to the previous whitespace. This is different than -<KBD>M-DEL</KBD> because the word boundaries differ. - -</DL> - -<P> -Here is how to <EM>yank</EM> the text back into the line. Yanking -means to copy the most-recently-killed text from the kill buffer. - -</P> -<DL COMPACT> - -<DT><KBD>C-y</KBD> -<DD> -Yank the most recently killed text back into the buffer at the cursor. - -<DT><KBD>M-y</KBD> -<DD> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is <KBD>C-y</KBD> or <KBD>M-y</KBD>. -</DL> - - - -<H3><A NAME="SEC7" HREF="rluserman.html#TOC7">Readline Arguments</A></H3> - -<P> -You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the <I>sign</I> of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type <SAMP>`M-- C-k'</SAMP>. - -</P> -<P> -The general way to pass numeric arguments to a command is to type meta -digits before the command. If the first `digit' typed is a minus -sign (<SAMP>`-'</SAMP>), then the sign of the argument will be negative. Once -you have typed one meta digit to get the argument started, you can type -the remainder of the digits, and then the command. For example, to give -the <KBD>C-d</KBD> command an argument of 10, you could type <SAMP>`M-1 0 C-d'</SAMP>. - -</P> - - -<H3><A NAME="SEC8" HREF="rluserman.html#TOC8">Searching for Commands in the History</A></H3> - -<P> -Readline provides commands for searching through the command history -for lines containing a specified string. -There are two search modes: <VAR>incremental</VAR> and <VAR>non-incremental</VAR>. - -</P> -<P> -Incremental searches begin before the user has finished typing the -search string. -As each character of the search string is typed, Readline displays -the next entry from the history matching the string typed so far. -An incremental search requires only as many characters as needed to -find the desired history entry. -To search backward in the history for a particular string, type -<KBD>C-r</KBD>. Typing <KBD>C-s</KBD> searches forward through the history. -The characters present in the value of the <CODE>isearch-terminators</CODE> variable -are used to terminate an incremental search. -If that variable has not been assigned a value, the <KBD>ESC</KBD> and -<KBD>C-J</KBD> characters will terminate an incremental search. -<KBD>C-g</KBD> will abort an incremental search and restore the original line. -When the search is terminated, the history entry containing the -search string becomes the current line. - -</P> -<P> -To find other matching entries in the history list, type <KBD>C-r</KBD> or -<KBD>C-s</KBD> as appropriate. -This will search backward or forward in the history for the next -entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate -the search and execute that command. -For instance, a <KBD>RET</KBD> will terminate the search and accept -the line, thereby executing the command from the history list. - -</P> -<P> -Non-incremental searches read the entire search string before starting -to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - -</P> - - -<H2><A NAME="SEC9" HREF="rluserman.html#TOC9">Readline Init File</A></H2> -<P> -<A NAME="IDX8"></A> - -</P> -<P> -Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. -Any user can customize programs that use Readline by putting -commands in an <EM>inputrc</EM> file, conventionally in his home directory. -The name of this -file is taken from the value of the environment variable <CODE>INPUTRC</CODE>. If -that variable is unset, the default is <TT>`~/.inputrc'</TT>. - -</P> -<P> -When a program which uses the Readline library starts up, the -init file is read, and the key bindings are set. - -</P> -<P> -In addition, the <CODE>C-x C-r</CODE> command re-reads this init file, thus -incorporating any changes that you might have made to it. - -</P> - -<UL> -<LI><A HREF="rluserman.html#SEC10">Readline Init File Syntax</A>: Syntax for the commands in the inputrc file. - -<LI><A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>: Conditional key bindings in the inputrc file. - -<LI><A HREF="rluserman.html#SEC12">Sample Init File</A>: An example inputrc file. -</UL> - - - -<H3><A NAME="SEC10" HREF="rluserman.html#TOC10">Readline Init File Syntax</A></H3> - -<P> -There are only a few basic constructs allowed in the -Readline init file. Blank lines are ignored. -Lines beginning with a <SAMP>`#'</SAMP> are comments. -Lines beginning with a <SAMP>`$'</SAMP> indicate conditional -constructs (see section <A HREF="rluserman.html#SEC11">Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. - -</P> -<DL COMPACT> - -<DT>Variable Settings -<DD> -You can modify the run-time behavior of Readline by -altering the values of variables in Readline -using the <CODE>set</CODE> command within the init file. Here is how to -change from the default Emacs-like key binding to use -<CODE>vi</CODE> line editing commands: - - -<PRE> -set editing-mode vi -</PRE> - -A great deal of run-time behavior is changeable with the following -variables. - -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD> -<A NAME="IDX9"></A> -Controls what happens when Readline wants to ring the terminal bell. -If set to <SAMP>`none'</SAMP>, Readline never rings the bell. If set to -<SAMP>`visible'</SAMP>, Readline uses a visible bell if one is available. -If set to <SAMP>`audible'</SAMP> (the default), Readline attempts to ring -the terminal's bell. - -<DT><CODE>comment-begin</CODE> -<DD> -<A NAME="IDX10"></A> -The string to insert at the beginning of the line when the -<CODE>insert-comment</CODE> command is executed. The default value -is <CODE>"#"</CODE>. - -<DT><CODE>completion-ignore-case</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, Readline performs filename matching and completion -in a case-insensitive fashion. -The default value is <SAMP>`off'</SAMP>. - -<DT><CODE>completion-query-items</CODE> -<DD> -<A NAME="IDX11"></A> -The number of possible completions that determines when the user is -asked whether he wants to see the list of possibilities. If the -number of possible completions is greater than this value, -Readline will ask the user whether or not he wishes to view -them; otherwise, they are simply listed. The default limit is -<CODE>100</CODE>. - -<DT><CODE>convert-meta</CODE> -<DD> -<A NAME="IDX12"></A> -If set to <SAMP>`on'</SAMP>, Readline will convert characters with the -eighth bit set to an ASCII key sequence by stripping the eighth -bit and prefixing an <KBD>ESC</KBD> character, converting them to a -meta-prefixed key sequence. The default value is <SAMP>`on'</SAMP>. - -<DT><CODE>disable-completion</CODE> -<DD> -<A NAME="IDX13"></A> -If set to <SAMP>`On'</SAMP>, Readline will inhibit word completion. -Completion characters will be inserted into the line as if they had -been mapped to <CODE>self-insert</CODE>. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>editing-mode</CODE> -<DD> -<A NAME="IDX14"></A> -The <CODE>editing-mode</CODE> variable controls which default set of -key bindings is used. By default, Readline starts up in Emacs editing -mode, where the keystrokes are most similar to Emacs. This variable can be -set to either <SAMP>`emacs'</SAMP> or <SAMP>`vi'</SAMP>. - -<DT><CODE>enable-keypad</CODE> -<DD> -<A NAME="IDX15"></A> -When set to <SAMP>`on'</SAMP>, Readline will try to enable the application -keypad when it is called. Some systems need this to enable the -arrow keys. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>expand-tilde</CODE> -<DD> -<A NAME="IDX16"></A> -If set to <SAMP>`on'</SAMP>, tilde expansion is performed when Readline -attempts word completion. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>horizontal-scroll-mode</CODE> -<DD> -<A NAME="IDX17"></A> -This variable can be set to either <SAMP>`on'</SAMP> or <SAMP>`off'</SAMP>. Setting it -to <SAMP>`on'</SAMP> means that the text of the lines being edited will scroll -horizontally on a single screen line when they are longer than the width -of the screen, instead of wrapping onto a new screen line. By default, -this variable is set to <SAMP>`off'</SAMP>. - -<DT><CODE>input-meta</CODE> -<DD> -<A NAME="IDX18"></A> -<A NAME="IDX19"></A> -If set to <SAMP>`on'</SAMP>, Readline will enable eight-bit input (it -will not strip the eighth bit from the characters it reads), -regardless of what the terminal claims it can support. The -default value is <SAMP>`off'</SAMP>. The name <CODE>meta-flag</CODE> is a -synonym for this variable. - -<DT><CODE>isearch-terminators</CODE> -<DD> -<A NAME="IDX20"></A> -The string of characters that should terminate an incremental search without -subsequently executing the character as a command (see section <A HREF="rluserman.html#SEC8">Searching for Commands in the History</A>). -If this variable has not been given a value, the characters <KBD>ESC</KBD> and -<KBD>C-J</KBD> will terminate an incremental search. - -<DT><CODE>keymap</CODE> -<DD> -<A NAME="IDX21"></A> -Sets Readline's idea of the current keymap for key binding commands. -Acceptable <CODE>keymap</CODE> names are -<CODE>emacs</CODE>, -<CODE>emacs-standard</CODE>, -<CODE>emacs-meta</CODE>, -<CODE>emacs-ctlx</CODE>, -<CODE>vi</CODE>, -<CODE>vi-command</CODE>, and -<CODE>vi-insert</CODE>. -<CODE>vi</CODE> is equivalent to <CODE>vi-command</CODE>; <CODE>emacs</CODE> is -equivalent to <CODE>emacs-standard</CODE>. The default value is <CODE>emacs</CODE>. -The value of the <CODE>editing-mode</CODE> variable also affects the -default keymap. - -<DT><CODE>mark-directories</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, completed directory names have a slash -appended. The default is <SAMP>`on'</SAMP>. - -<DT><CODE>mark-modified-lines</CODE> -<DD> -<A NAME="IDX22"></A> -This variable, when set to <SAMP>`on'</SAMP>, causes Readline to display an -asterisk (<SAMP>`*'</SAMP>) at the start of history lines which have been modified. -This variable is <SAMP>`off'</SAMP> by default. - -<DT><CODE>output-meta</CODE> -<DD> -<A NAME="IDX23"></A> -If set to <SAMP>`on'</SAMP>, Readline will display characters with the -eighth bit set directly rather than as a meta-prefixed escape -sequence. The default is <SAMP>`off'</SAMP>. - -<DT><CODE>print-completions-horizontally</CODE> -<DD> -If set to <SAMP>`on'</SAMP>, Readline will display completions with matches -sorted horizontally in alphabetical order, rather than down the screen. -The default is <SAMP>`off'</SAMP>. - -<DT><CODE>show-all-if-ambiguous</CODE> -<DD> -<A NAME="IDX24"></A> -This alters the default behavior of the completion functions. If -set to <SAMP>`on'</SAMP>, -words which have more than one possible completion cause the -matches to be listed immediately instead of ringing the bell. -The default value is <SAMP>`off'</SAMP>. - -<DT><CODE>visible-stats</CODE> -<DD> -<A NAME="IDX25"></A> -If set to <SAMP>`on'</SAMP>, a character denoting a file's type -is appended to the filename when listing possible -completions. The default is <SAMP>`off'</SAMP>. - -</DL> - -<DT>Key Bindings -<DD> -The syntax for controlling key bindings in the init file is -simple. First you need to find the name of the command that you -want to change. The following sections contain tables of the command -name, the default keybinding, if any, and a short description of what -the command does. - -Once you know the name of the command, simply place the name of the key -you wish to bind the command to, a colon, and then the name of the -command on a line in the init file. The name of the key -can be expressed in different ways, depending on which is most -comfortable for you. - -<DL COMPACT> - -<DT><VAR>keyname</VAR>: <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD> -<VAR>keyname</VAR> is the name of a key spelled out in English. For example: - -<PRE> -Control-u: universal-argument -Meta-Rubout: backward-kill-word -Control-o: "> output" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE>, and <KBD>C-o</KBD> is bound to run the macro -expressed on the right hand side (that is, to insert the text -<SAMP>`> output'</SAMP> into the line). - -<DT>"<VAR>keyseq</VAR>": <VAR>function-name</VAR> or <VAR>macro</VAR> -<DD> -<VAR>keyseq</VAR> differs from <VAR>keyname</VAR> above in that strings -denoting an entire key sequence can be specified, by placing -the key sequence in double quotes. Some GNU Emacs style key -escapes can be used, as in the following example, but the -special character names are not recognized. - - -<PRE> -"\C-u": universal-argument -"\C-x\C-r": re-read-init-file -"\e[11~": "Function Key 1" -</PRE> - -In the above example, <KBD>C-u</KBD> is bound to the function -<CODE>universal-argument</CODE> (just as it was in the first example), -<SAMP>`<KBD>C-x</KBD> <KBD>C-r</KBD>'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>, -and <SAMP>`<KBD>ESC</KBD> <KBD>[</KBD> <KBD>1</KBD> <KBD>1</KBD> <KBD>~</KBD>'</SAMP> is bound to insert -the text <SAMP>`Function Key 1'</SAMP>. - -</DL> - -The following GNU Emacs style escape sequences are available when -specifying key sequences: - -<DL COMPACT> - -<DT><CODE><KBD>\C-</KBD></CODE> -<DD> -control prefix -<DT><CODE><KBD>\M-</KBD></CODE> -<DD> -meta prefix -<DT><CODE><KBD>\e</KBD></CODE> -<DD> -an escape character -<DT><CODE><KBD>\\</KBD></CODE> -<DD> -backslash -<DT><CODE><KBD>\"</KBD></CODE> -<DD> -<KBD>"</KBD>, a double quotation mark -<DT><CODE><KBD>\'</KBD></CODE> -<DD> -<KBD>'</KBD>, a single quote or apostrophe -</DL> - -In addition to the GNU Emacs style escape sequences, a second -set of backslash escapes is available: - -<DL COMPACT> - -<DT><CODE>\a</CODE> -<DD> -alert (bell) -<DT><CODE>\b</CODE> -<DD> -backspace -<DT><CODE>\d</CODE> -<DD> -delete -<DT><CODE>\f</CODE> -<DD> -form feed -<DT><CODE>\n</CODE> -<DD> -newline -<DT><CODE>\r</CODE> -<DD> -carriage return -<DT><CODE>\t</CODE> -<DD> -horizontal tab -<DT><CODE>\v</CODE> -<DD> -vertical tab -<DT><CODE>\<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the octal value <VAR>nnn</VAR> -(one to three digits) -<DT><CODE>\x<VAR>nnn</VAR></CODE> -<DD> -the character whose <CODE>ASCII</CODE> code is the hexadecimal value <VAR>nnn</VAR> -(one to three digits) -</DL> - -When entering the text of a macro, single or double quotes must -be used to indicate a macro definition. -Unquoted text is assumed to be a function name. -In the macro body, the backslash escapes described above are expanded. -Backslash will quote any other character in the macro text, -including <SAMP>`"'</SAMP> and <SAMP>`''</SAMP>. -For example, the following binding will make <SAMP>`C-x \'</SAMP> -insert a single <SAMP>`\'</SAMP> into the line: - -<PRE> -"\C-x\\": "\\" -</PRE> - -</DL> - - - -<H3><A NAME="SEC11" HREF="rluserman.html#TOC11">Conditional Init Constructs</A></H3> - -<P> -Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key -bindings and variable settings to be performed as the result -of tests. There are four parser directives used. - -</P> -<DL COMPACT> - -<DT><CODE>$if</CODE> -<DD> -The <CODE>$if</CODE> construct allows bindings to be made based on the -editing mode, the terminal being used, or the application using -Readline. The text of the test extends to the end of the line; -no characters are required to isolate it. - -<DL COMPACT> - -<DT><CODE>mode</CODE> -<DD> -The <CODE>mode=</CODE> form of the <CODE>$if</CODE> directive is used to test -whether Readline is in <CODE>emacs</CODE> or <CODE>vi</CODE> mode. -This may be used in conjunction -with the <SAMP>`set keymap'</SAMP> command, for instance, to set bindings in -the <CODE>emacs-standard</CODE> and <CODE>emacs-ctlx</CODE> keymaps only if -Readline is starting out in <CODE>emacs</CODE> mode. - -<DT><CODE>term</CODE> -<DD> -The <CODE>term=</CODE> form may be used to include terminal-specific -key bindings, perhaps to bind the key sequences output by the -terminal's function keys. The word on the right side of the -<SAMP>`='</SAMP> is tested against both the full name of the terminal and -the portion of the terminal name before the first <SAMP>`-'</SAMP>. This -allows <CODE>sun</CODE> to match both <CODE>sun</CODE> and <CODE>sun-cmd</CODE>, -for instance. - -<DT><CODE>application</CODE> -<DD> -The <VAR>application</VAR> construct is used to include -application-specific settings. Each program using the Readline -library sets the <VAR>application name</VAR>, and you can test for it. -This could be used to bind key sequences to functions useful for -a specific program. For instance, the following command adds a -key sequence that quotes the current or previous word in Bash: - -<PRE> -$if Bash -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -$endif -</PRE> - -</DL> - -<DT><CODE>$endif</CODE> -<DD> -This command, as seen in the previous example, terminates an -<CODE>$if</CODE> command. - -<DT><CODE>$else</CODE> -<DD> -Commands in this branch of the <CODE>$if</CODE> directive are executed if -the test fails. - -<DT><CODE>$include</CODE> -<DD> -This directive takes a single filename as an argument and reads commands -and bindings from that file. - -<PRE> -$include /etc/inputrc -</PRE> - -</DL> - - - -<H3><A NAME="SEC12" HREF="rluserman.html#TOC12">Sample Init File</A></H3> - -<P> -Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - -</P> - -<PRE> -# This file controls the behaviour of line input editing for -# programs that use the Gnu Readline library. Existing programs -# include FTP, Bash, and Gdb. -# -# You can re-read the inputrc file with C-x C-r. -# Lines beginning with '#' are comments. -# -# First, include any systemwide bindings and variable assignments from -# /etc/Inputrc -$include /etc/Inputrc - -# -# Set various bindings for emacs mode. - -set editing-mode emacs - -$if mode=emacs - -Meta-Control-h: backward-kill-word Text after the function name is ignored - -# -# Arrow keys in keypad mode -# -#"\M-OD": backward-char -#"\M-OC": forward-char -#"\M-OA": previous-history -#"\M-OB": next-history -# -# Arrow keys in ANSI mode -# -"\M-[D": backward-char -"\M-[C": forward-char -"\M-[A": previous-history -"\M-[B": next-history -# -# Arrow keys in 8 bit keypad mode -# -#"\M-\C-OD": backward-char -#"\M-\C-OC": forward-char -#"\M-\C-OA": previous-history -#"\M-\C-OB": next-history -# -# Arrow keys in 8 bit ANSI mode -# -#"\M-\C-[D": backward-char -#"\M-\C-[C": forward-char -#"\M-\C-[A": previous-history -#"\M-\C-[B": next-history - -C-q: quoted-insert - -$endif - -# An old-style binding. This happens to be the default. -TAB: complete - -# Macros that are convenient for shell interaction -$if Bash -# edit the path -"\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" -# prepare to type a quoted word -- insert open and close double quotes -# and move to just after the open quote -"\C-x\"": "\"\"\C-b" -# insert a backslash (testing backslash escapes in sequences and macros) -"\C-x\\": "\\" -# Quote the current or previous word -"\C-xq": "\eb\"\ef\"" -# Add a binding to refresh the line, which is unbound -"\C-xr": redraw-current-line -# Edit variable on current line. -"\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" -$endif - -# use a visible bell if one is available -set bell-style visible - -# don't strip characters to 7 bits when reading -set input-meta on - -# allow iso-latin1 characters to be inserted rather than converted to -# prefix-meta sequences -set convert-meta off - -# display characters with the eighth bit set directly rather than -# as meta-prefixed characters -set output-meta on - -# if there are more than 150 possible completions for a word, ask the -# user if he wants to see all of them -set completion-query-items 150 - -# For FTP -$if Ftp -"\C-xg": "get \M-?" -"\C-xt": "put \M-?" -"\M-.": yank-last-arg -$endif -</PRE> - - - -<H2><A NAME="SEC13" HREF="rluserman.html#TOC13">Bindable Readline Commands</A></H2> - - -<UL> -<LI><A HREF="rluserman.html#SEC14">Commands For Moving</A>: Moving about the line. -<LI><A HREF="rluserman.html#SEC15">Commands For History</A>: Getting at previous lines. -<LI><A HREF="rluserman.html#SEC16">Commands For Text</A>: Commands for changing text. -<LI><A HREF="rluserman.html#SEC17">Commands For Killing</A>: Commands for killing and yanking. -<LI><A HREF="rluserman.html#SEC18">Numeric Arguments</A>: Specifying numeric arguments, repeat counts. -<LI><A HREF="rluserman.html#SEC19">Commands For Completion</A>: Getting Readline to do the typing for you. -<LI><A HREF="rluserman.html#SEC20">Keyboard Macros</A>: Saving and re-executing typed characters -<LI><A HREF="rluserman.html#SEC21">Miscellaneous Commands</A>: Other miscellaneous commands. -</UL> - -<P> -This section describes Readline commands that may be bound to key -sequences. - -</P> -<P> -Command names without an accompanying key sequence are unbound by default. -In the following descriptions, <VAR>point</VAR> refers to the current cursor -position, and <VAR>mark</VAR> refers to a cursor position saved by the -<CODE>set-mark</CODE> command. -The text between the point and mark is referred to as the <VAR>region</VAR>. - -</P> - - -<H3><A NAME="SEC14" HREF="rluserman.html#TOC14">Commands For Moving</A></H3> -<DL COMPACT> - -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD> -<A NAME="IDX26"></A> -Move to the start of the current line. - -<DT><CODE>end-of-line (C-e)</CODE> -<DD> -<A NAME="IDX27"></A> -Move to the end of the line. - -<DT><CODE>forward-char (C-f)</CODE> -<DD> -<A NAME="IDX28"></A> -Move forward a character. - -<DT><CODE>backward-char (C-b)</CODE> -<DD> -<A NAME="IDX29"></A> -Move back a character. - -<DT><CODE>forward-word (M-f)</CODE> -<DD> -<A NAME="IDX30"></A> -Move forward to the end of the next word. Words are composed of -letters and digits. - -<DT><CODE>backward-word (M-b)</CODE> -<DD> -<A NAME="IDX31"></A> -Move back to the start of the current or previous word. Words are -composed of letters and digits. - -<DT><CODE>clear-screen (C-l)</CODE> -<DD> -<A NAME="IDX32"></A> -Clear the screen and redraw the current line, -leaving the current line at the top of the screen. - -<DT><CODE>redraw-current-line ()</CODE> -<DD> -<A NAME="IDX33"></A> -Refresh the current line. By default, this is unbound. - -</DL> - - - -<H3><A NAME="SEC15" HREF="rluserman.html#TOC15">Commands For Manipulating The History</A></H3> - -<DL COMPACT> - -<DT><CODE>accept-line (Newline, Return)</CODE> -<DD> -<A NAME="IDX34"></A> -Accept the line regardless of where the cursor is. If this line is -non-empty, add it to the history list. If this line was a history -line, then restore the history line to its original state. - -<DT><CODE>previous-history (C-p)</CODE> -<DD> -<A NAME="IDX35"></A> -Move `up' through the history list. - -<DT><CODE>next-history (C-n)</CODE> -<DD> -<A NAME="IDX36"></A> -Move `down' through the history list. - -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD> -<A NAME="IDX37"></A> -Move to the first line in the history. - -<DT><CODE>end-of-history (M->)</CODE> -<DD> -<A NAME="IDX38"></A> -Move to the end of the input history, i.e., the line currently -being entered. - -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD> -<A NAME="IDX39"></A> -Search backward starting at the current line and moving `up' through -the history as necessary. This is an incremental search. - -<DT><CODE>forward-search-history (C-s)</CODE> -<DD> -<A NAME="IDX40"></A> -Search forward starting at the current line and moving `down' through -the the history as necessary. This is an incremental search. - -<DT><CODE>non-incremental-reverse-search-history (M-p)</CODE> -<DD> -<A NAME="IDX41"></A> -Search backward starting at the current line and moving `up' -through the history as necessary using a non-incremental search -for a string supplied by the user. - -<DT><CODE>non-incremental-forward-search-history (M-n)</CODE> -<DD> -<A NAME="IDX42"></A> -Search forward starting at the current line and moving `down' -through the the history as necessary using a non-incremental search -for a string supplied by the user. - -<DT><CODE>history-search-forward ()</CODE> -<DD> -<A NAME="IDX43"></A> -Search forward through the history for the string of characters -between the start of the current line and the point. -This is a non-incremental search. -By default, this command is unbound. - -<DT><CODE>history-search-backward ()</CODE> -<DD> -<A NAME="IDX44"></A> -Search backward through the history for the string of characters -between the start of the current line and the point. This -is a non-incremental search. By default, this command is unbound. - -<DT><CODE>yank-nth-arg (M-C-y)</CODE> -<DD> -<A NAME="IDX45"></A> -Insert the first argument to the previous command (usually -the second word on the previous line). With an argument <VAR>n</VAR>, -insert the <VAR>n</VAR>th word from the previous command (the words -in the previous command begin with word 0). A negative argument -inserts the <VAR>n</VAR>th word from the end of the previous command. - -<DT><CODE>yank-last-arg (M-., M-_)</CODE> -<DD> -<A NAME="IDX46"></A> -Insert last argument to the previous command (the last word of the -previous history entry). With an -argument, behave exactly like <CODE>yank-nth-arg</CODE>. -Successive calls to <CODE>yank-last-arg</CODE> move back through the history -list, inserting the last argument of each line in turn. - -</DL> - - - -<H3><A NAME="SEC16" HREF="rluserman.html#TOC16">Commands For Changing Text</A></H3> - -<DL COMPACT> - -<DT><CODE>delete-char (C-d)</CODE> -<DD> -<A NAME="IDX47"></A> -Delete the character under the cursor. If the cursor is at the -beginning of the line, there are no characters in the line, and -the last character typed was not bound to <CODE>delete-char</CODE>, then -return <CODE>EOF</CODE>. - -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD> -<A NAME="IDX48"></A> -Delete the character behind the cursor. A numeric argument means -to kill the characters instead of deleting them. - -<DT><CODE>forward-backward-delete-char ()</CODE> -<DD> -<A NAME="IDX49"></A> -Delete the character under the cursor, unless the cursor is at the -end of the line, in which case the character behind the cursor is -deleted. By default, this is not bound to a key. - -<DT><CODE>quoted-insert (C-q, C-v)</CODE> -<DD> -<A NAME="IDX50"></A> -Add the next character typed to the line verbatim. This is -how to insert key sequences like <KBD>C-q</KBD>, for example. - -<DT><CODE>tab-insert (M-TAB)</CODE> -<DD> -<A NAME="IDX51"></A> -Insert a tab character. - -<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE> -<DD> -<A NAME="IDX52"></A> -Insert yourself. - -<DT><CODE>transpose-chars (C-t)</CODE> -<DD> -<A NAME="IDX53"></A> -Drag the character before the cursor forward over -the character at the cursor, moving the -cursor forward as well. If the insertion point -is at the end of the line, then this -transposes the last two characters of the line. -Negative arguments have no effect. - -<DT><CODE>transpose-words (M-t)</CODE> -<DD> -<A NAME="IDX54"></A> -Drag the word before point past the word after point, -moving point past that word as well. - -<DT><CODE>upcase-word (M-u)</CODE> -<DD> -<A NAME="IDX55"></A> -Uppercase the current (or following) word. With a negative argument, -uppercase the previous word, but do not move the cursor. - -<DT><CODE>downcase-word (M-l)</CODE> -<DD> -<A NAME="IDX56"></A> -Lowercase the current (or following) word. With a negative argument, -lowercase the previous word, but do not move the cursor. - -<DT><CODE>capitalize-word (M-c)</CODE> -<DD> -<A NAME="IDX57"></A> -Capitalize the current (or following) word. With a negative argument, -capitalize the previous word, but do not move the cursor. - -</DL> - - - -<H3><A NAME="SEC17" HREF="rluserman.html#TOC17">Killing And Yanking</A></H3> - -<DL COMPACT> - -<DT><CODE>kill-line (C-k)</CODE> -<DD> -<A NAME="IDX58"></A> -Kill the text from point to the end of the line. - -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD> -<A NAME="IDX59"></A> -Kill backward to the beginning of the line. - -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD> -<A NAME="IDX60"></A> -Kill backward from the cursor to the beginning of the current line. - -<DT><CODE>kill-whole-line ()</CODE> -<DD> -<A NAME="IDX61"></A> -Kill all characters on the current line, no matter point is. -By default, this is unbound. - -<DT><CODE>kill-word (M-d)</CODE> -<DD> -<A NAME="IDX62"></A> -Kill from point to the end of the current word, or if between -words, to the end of the next word. -Word boundaries are the same as <CODE>forward-word</CODE>. - -<DT><CODE>backward-kill-word (M-DEL)</CODE> -<DD> -<A NAME="IDX63"></A> -Kill the word behind point. -Word boundaries are the same as <CODE>backward-word</CODE>. - -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD> -<A NAME="IDX64"></A> -Kill the word behind point, using white space as a word boundary. -The killed text is saved on the kill-ring. - -<DT><CODE>delete-horizontal-space ()</CODE> -<DD> -<A NAME="IDX65"></A> -Delete all spaces and tabs around point. By default, this is unbound. - -<DT><CODE>kill-region ()</CODE> -<DD> -<A NAME="IDX66"></A> -Kill the text in the current region. -By default, this command is unbound. - -<DT><CODE>copy-region-as-kill ()</CODE> -<DD> -<A NAME="IDX67"></A> -Copy the text in the region to the kill buffer, so it can be yanked -right away. By default, this command is unbound. - -<DT><CODE>copy-backward-word ()</CODE> -<DD> -<A NAME="IDX68"></A> -Copy the word before point to the kill buffer. -The word boundaries are the same as <CODE>backward-word</CODE>. -By default, this command is unbound. - -<DT><CODE>copy-forward-word ()</CODE> -<DD> -<A NAME="IDX69"></A> -Copy the word following point to the kill buffer. -The word boundaries are the same as <CODE>forward-word</CODE>. -By default, this command is unbound. - -<DT><CODE>yank (C-y)</CODE> -<DD> -<A NAME="IDX70"></A> -Yank the top of the kill ring into the buffer at the current -cursor position. - -<DT><CODE>yank-pop (M-y)</CODE> -<DD> -<A NAME="IDX71"></A> -Rotate the kill-ring, and yank the new top. You can only do this if -the prior command is yank or yank-pop. -</DL> - - - -<H3><A NAME="SEC18" HREF="rluserman.html#TOC18">Specifying Numeric Arguments</A></H3> -<DL COMPACT> - -<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE> -<DD> -<A NAME="IDX72"></A> -Add this digit to the argument already accumulating, or start a new -argument. <KBD>M--</KBD> starts a negative argument. - -<DT><CODE>universal-argument ()</CODE> -<DD> -<A NAME="IDX73"></A> -This is another way to specify an argument. -If this command is followed by one or more digits, optionally with a -leading minus sign, those digits define the argument. -If the command is followed by digits, executing <CODE>universal-argument</CODE> -again ends the numeric argument, but is otherwise ignored. -As a special case, if this command is immediately followed by a -character that is neither a digit or minus sign, the argument count -for the next command is multiplied by four. -The argument count is initially one, so executing this function the -first time makes the argument count four, a second time makes the -argument count sixteen, and so on. -By default, this is not bound to a key. -</DL> - - - -<H3><A NAME="SEC19" HREF="rluserman.html#TOC19">Letting Readline Type For You</A></H3> - -<DL COMPACT> - -<DT><CODE>complete (TAB)</CODE> -<DD> -<A NAME="IDX74"></A> -Attempt to do completion on the text before the cursor. This is -application-specific. Generally, if you are typing a filename -argument, you can do filename completion; if you are typing a command, -you can do command completion; if you are typing in a symbol to GDB, you -can do symbol name completion; if you are typing in a variable to Bash, -you can do variable name completion, and so on. - -<DT><CODE>possible-completions (M-?)</CODE> -<DD> -<A NAME="IDX75"></A> -List the possible completions of the text before the cursor. - -<DT><CODE>insert-completions (M-*)</CODE> -<DD> -<A NAME="IDX76"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. - -<DT><CODE>menu-complete ()</CODE> -<DD> -<A NAME="IDX77"></A> -Similar to <CODE>complete</CODE>, but replaces the word to be completed -with a single match from the list of possible completions. -Repeated execution of <CODE>menu-complete</CODE> steps through the list -of possible completions, inserting each match in turn. -At the end of the list of completions, the bell is rung and the -original text is restored. -An argument of <VAR>n</VAR> moves <VAR>n</VAR> positions forward in the list -of matches; a negative argument may be used to move backward -through the list. -This command is intended to be bound to <CODE>TAB</CODE>, but is unbound -by default. - -<DT><CODE>delete-char-or-list ()</CODE> -<DD> -<A NAME="IDX78"></A> -Deletes the character under the cursor if not at the beginning or -end of the line (like <CODE>delete-char</CODE>). -If at the end of the line, behaves identically to -<CODE>possible-completions</CODE>. -This command is unbound by default. - -</DL> - - - -<H3><A NAME="SEC20" HREF="rluserman.html#TOC20">Keyboard Macros</A></H3> -<DL COMPACT> - -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD> -<A NAME="IDX79"></A> -Begin saving the characters typed into the current keyboard macro. - -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD> -<A NAME="IDX80"></A> -Stop saving the characters typed into the current keyboard macro -and save the definition. - -<DT><CODE>call-last-kbd-macro (C-x e)</CODE> -<DD> -<A NAME="IDX81"></A> -Re-execute the last keyboard macro defined, by making the characters -in the macro appear as if typed at the keyboard. - -</DL> - - - -<H3><A NAME="SEC21" HREF="rluserman.html#TOC21">Some Miscellaneous Commands</A></H3> -<DL COMPACT> - -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD> -<A NAME="IDX82"></A> -Read in the contents of the <VAR>inputrc</VAR> file, and incorporate -any bindings or variable assignments found there. - -<DT><CODE>abort (C-g)</CODE> -<DD> -<A NAME="IDX83"></A> -Abort the current editing command and -ring the terminal's bell (subject to the setting of -<CODE>bell-style</CODE>). - -<DT><CODE>do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</CODE> -<DD> -<A NAME="IDX84"></A> -If the metafied character <VAR>x</VAR> is lowercase, run the command -that is bound to the corresponding uppercase character. - -<DT><CODE>prefix-meta (ESC)</CODE> -<DD> -<A NAME="IDX85"></A> -Make the next character typed be metafied. This is for keyboards -without a meta key. Typing <SAMP>`ESC f'</SAMP> is equivalent to typing -<SAMP>`M-f'</SAMP>. - -<DT><CODE>undo (C-_, C-x C-u)</CODE> -<DD> -<A NAME="IDX86"></A> -Incremental undo, separately remembered for each line. - -<DT><CODE>revert-line (M-r)</CODE> -<DD> -<A NAME="IDX87"></A> -Undo all changes made to this line. This is like executing the <CODE>undo</CODE> -command enough times to get back to the beginning. - -<DT><CODE>tilde-expand (M-~)</CODE> -<DD> -<A NAME="IDX88"></A> -Perform tilde expansion on the current word. - -<DT><CODE>set-mark (C-@)</CODE> -<DD> -<A NAME="IDX89"></A> -Set the mark to the current point. If a -numeric argument is supplied, the mark is set to that position. - -<DT><CODE>exchange-point-and-mark (C-x C-x)</CODE> -<DD> -<A NAME="IDX90"></A> -Swap the point with the mark. The current cursor position is set to -the saved position, and the old cursor position is saved as the mark. - -<DT><CODE>character-search (C-])</CODE> -<DD> -<A NAME="IDX91"></A> -A character is read and point is moved to the next occurrence of that -character. A negative count searches for previous occurrences. - -<DT><CODE>character-search-backward (M-C-])</CODE> -<DD> -<A NAME="IDX92"></A> -A character is read and point is moved to the previous occurrence -of that character. A negative count searches for subsequent -occurrences. - -<DT><CODE>insert-comment (M-#)</CODE> -<DD> -<A NAME="IDX93"></A> -The value of the <CODE>comment-begin</CODE> -variable is inserted at the beginning of the current line, -and the line is accepted as if a newline had been typed. - -<DT><CODE>dump-functions ()</CODE> -<DD> -<A NAME="IDX94"></A> -Print all of the functions and their key bindings to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -<DT><CODE>dump-variables ()</CODE> -<DD> -<A NAME="IDX95"></A> -Print all of the settable variables and their values to the -Readline output stream. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -<DT><CODE>dump-macros ()</CODE> -<DD> -<A NAME="IDX96"></A> -Print all of the Readline key sequences bound to macros and the -strings they ouput. If a numeric argument is supplied, -the output is formatted in such a way that it can be made part -of an <VAR>inputrc</VAR> file. This command is unbound by default. - -</DL> - - - -<H2><A NAME="SEC22" HREF="rluserman.html#TOC22">Readline vi Mode</A></H2> - -<P> -While the Readline library does not have a full set of <CODE>vi</CODE> -editing functions, it does contain enough to allow simple editing -of the line. The Readline <CODE>vi</CODE> mode behaves as specified in -the POSIX 1003.2 standard. - -</P> -<P> -In order to switch interactively between <CODE>emacs</CODE> and <CODE>vi</CODE> -editing modes, use the command M-C-j (toggle-editing-mode). -The Readline default is <CODE>emacs</CODE> mode. - -</P> -<P> -When you enter a line in <CODE>vi</CODE> mode, you are already placed in -`insertion' mode, as if you had typed an <SAMP>`i'</SAMP>. Pressing <KBD>ESC</KBD> -switches you into `command' mode, where you can edit the text of the -line with the standard <CODE>vi</CODE> movement keys, move to previous -history lines with <SAMP>`k'</SAMP> and subsequent lines with <SAMP>`j'</SAMP>, and -so forth. - -</P> - -<P><HR><P> -This document was generated on 1 March 2000 using the -<A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A> -translator version 1.52.</P> -</BODY> -</HTML> diff --git a/gnu/lib/libreadline/doc/rluserman.info b/gnu/lib/libreadline/doc/rluserman.info deleted file mode 100644 index b714421c402..00000000000 --- a/gnu/lib/libreadline/doc/rluserman.info +++ /dev/null @@ -1,1189 +0,0 @@ -This is Info file rluserman.info, produced by Makeinfo version 1.68 -from the input file -/usr/homes/chet/src/bash/readline-src/doc/rluserman.texinfo. - -INFO-DIR-SECTION Libraries -START-INFO-DIR-ENTRY -* Readline: (readline). The GNU readline library API -END-INFO-DIR-ENTRY - - This document describes the end user interface of the GNU Readline -Library, a utility which aids in the consistency of user interface -across discrete programs that need to provide a command line interface. - - Copyright (C) 1988-1999 Free Software Foundation, Inc. - - Permission is granted to make and distribute verbatim copies of this -manual provided the copyright notice and this permission notice pare -preserved on all copies. - - Permission is granted to copy and distribute modified versions of -this manual under the conditions for verbatim copying, provided that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - - Permission is granted to copy and distribute translations of this -manual into another language, under the above conditions for modified -versions, except that this permission notice may be stated in a -translation approved by the Free Software Foundation. - - -File: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) - -GNU Readline Library -******************** - - This document describes the end user interface of the GNU Readline -Library, a utility which aids in the consistency of user interface -across discrete programs that need to provide a command line interface. - -* Menu: - -* Command Line Editing:: GNU Readline User's Manual. - - -File: rluserman.info, Node: Command Line Editing, Prev: Top, Up: Top - -Command Line Editing -******************** - - This chapter describes the basic features of the GNU command line -editing interface. - -* Menu: - -* Introduction and Notation:: Notation used in this text. -* Readline Interaction:: The minimum set of commands for editing a line. -* Readline Init File:: Customizing Readline from a user's view. -* Bindable Readline Commands:: A description of most of the Readline commands - available for binding -* Readline vi Mode:: A short description of how to make Readline - behave like the vi editor. - - -File: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing - -Introduction to Line Editing -============================ - - The following paragraphs describe the notation used to represent -keystrokes. - - The text <C-k> is read as `Control-K' and describes the character -produced when the <k> key is pressed while the Control key is depressed. - - The text <M-k> is read as `Meta-K' and describes the character -produced when the Meta key (if you have one) is depressed, and the <k> -key is pressed. The Meta key is labeled <ALT> on many keyboards. On -keyboards with two keys labeled <ALT> (usually to either side of the -space bar), the <ALT> on the left side is generally set to work as a -Meta key. The <ALT> key on the right may also be configured to work as -a Meta key or may be configured as some other modifier, such as a -Compose key for typing accented characters. - - If you do not have a Meta or <ALT> key, or another key working as a -Meta key, the identical keystroke can be generated by typing <ESC> -first, and then typing <k>. Either process is known as "metafying" the -<k> key. - - The text <M-C-k> is read as `Meta-Control-k' and describes the -character produced by "metafying" <C-k>. - - In addition, several keys have their own names. Specifically, -<DEL>, <ESC>, <LFD>, <SPC>, <RET>, and <TAB> all stand for themselves -when seen in this text, or in an init file (*note Readline Init -File::.). If your keyboard lacks a <LFD> key, typing <C-j> will -produce the desired character. The <RET> key may be labeled <Return> -or <Enter> on some keyboards. - - -File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing - -Readline Interaction -==================== - - Often during an interactive session you type in a long line of text, -only to notice that the first word on the line is misspelled. The -Readline library gives you a set of commands for manipulating the text -as you type it in, allowing you to just fix your typo, and not forcing -you to retype the majority of the line. Using these editing commands, -you move the cursor to the place that needs correction, and delete or -insert the text of the corrections. Then, when you are satisfied with -the line, you simply press <RETURN>. You do not have to be at the end -of the line to press <RETURN>; the entire line is accepted regardless -of the location of the cursor within the line. - -* Menu: - -* Readline Bare Essentials:: The least you need to know about Readline. -* Readline Movement Commands:: Moving about the input line. -* Readline Killing Commands:: How to delete text, and how to get it back! -* Readline Arguments:: Giving numeric arguments to commands. -* Searching:: Searching through previous lines. - - -File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction - -Readline Bare Essentials ------------------------- - - In order to enter characters into the line, simply type them. The -typed character appears where the cursor was, and then the cursor moves -one space to the right. If you mistype a character, you can use your -erase character to back up and delete the mistyped character. - - Sometimes you may mistype a character, and not notice the error -until you have typed several other characters. In that case, you can -type <C-b> to move the cursor to the left, and then correct your -mistake. Afterwards, you can move the cursor to the right with <C-f>. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the bare essentials for editing the text of an input line -follows. - -<C-b> - Move back one character. - -<C-f> - Move forward one character. - -<DEL> or <Backspace> - Delete the character to the left of the cursor. - -<C-d> - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -<C-_> or <C-x C-u> - Undo the last editing command. You can undo all the way back to an - empty line. - -(Depending on your configuration, the <Backspace> key be set to delete -the character to the left of the cursor and the <DEL> key set to delete -the character underneath the cursor, like <C-d>, rather than the -character to the left of the cursor.) - - -File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction - -Readline Movement Commands --------------------------- - - The above table describes the most basic keystrokes that you need in -order to do editing of the input line. For your convenience, many -other commands have been added in addition to <C-b>, <C-f>, <C-d>, and -<DEL>. Here are some commands for moving more rapidly about the line. - -<C-a> - Move to the start of the line. - -<C-e> - Move to the end of the line. - -<M-f> - Move forward a word, where a word is composed of letters and - digits. - -<M-b> - Move backward a word. - -<C-l> - Clear the screen, reprinting the current line at the top. - - Notice how <C-f> moves forward a character, while <M-f> moves -forward a word. It is a loose convention that control keystrokes -operate on characters while meta keystrokes operate on words. - - -File: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction - -Readline Killing Commands -------------------------- - - "Killing" text means to delete the text from the line, but to save -it away for later use, usually by "yanking" (re-inserting) it back into -the line. (`Cut' and `paste' are more recent jargon for `kill' and -`yank'.) - - If the description for a command says that it `kills' text, then you -can be sure that you can get the text back in a different (or the same) -place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -<C-k> - Kill the text from the current cursor position to the end of the - line. - -<M-d> - Kill from the cursor to the end of the current word, or, if between - words, to the end of the next word. Word boundaries are the same - as those used by <M-f>. - -<M-DEL> - Kill from the cursor the start of the previous word, or, if between - words, to the start of the previous word. Word boundaries are the - same as those used by <M-b>. - -<C-w> - Kill from the cursor to the previous whitespace. This is - different than <M-DEL> because the word boundaries differ. - - Here is how to "yank" the text back into the line. Yanking means to -copy the most-recently-killed text from the kill buffer. - -<C-y> - Yank the most recently killed text back into the buffer at the - cursor. - -<M-y> - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is <C-y> or <M-y>. - - -File: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction - -Readline Arguments ------------------- - - You can pass numeric arguments to Readline commands. Sometimes the -argument acts as a repeat count, other times it is the sign of the -argument that is significant. If you pass a negative argument to a -command which normally acts in a forward direction, that command will -act in a backward direction. For example, to kill text back to the -start of the line, you might type `M-- C-k'. - - The general way to pass numeric arguments to a command is to type -meta digits before the command. If the first `digit' typed is a minus -sign (`-'), then the sign of the argument will be negative. Once you -have typed one meta digit to get the argument started, you can type the -remainder of the digits, and then the command. For example, to give -the <C-d> command an argument of 10, you could type `M-1 0 C-d'. - - -File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction - -Searching for Commands in the History -------------------------------------- - - Readline provides commands for searching through the command history -for lines containing a specified string. There are two search modes: -INCREMENTAL and NON-INCREMENTAL. - - Incremental searches begin before the user has finished typing the -search string. As each character of the search string is typed, -Readline displays the next entry from the history matching the string -typed so far. An incremental search requires only as many characters -as needed to find the desired history entry. To search backward in the -history for a particular string, type <C-r>. Typing <C-s> searches -forward through the history. The characters present in the value of -the `isearch-terminators' variable are used to terminate an incremental -search. If that variable has not been assigned a value, the <ESC> and -<C-J> characters will terminate an incremental search. <C-g> will -abort an incremental search and restore the original line. When the -search is terminated, the history entry containing the search string -becomes the current line. - - To find other matching entries in the history list, type <C-r> or -<C-s> as appropriate. This will search backward or forward in the -history for the next entry matching the search string typed so far. -Any other key sequence bound to a Readline command will terminate the -search and execute that command. For instance, a <RET> will terminate -the search and accept the line, thereby executing the command from the -history list. - - Non-incremental searches read the entire search string before -starting to search for matching history lines. The search string may be -typed by the user or be part of the contents of the current line. - - -File: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing - -Readline Init File -================== - - Although the Readline library comes with a set of Emacs-like -keybindings installed by default, it is possible to use a different set -of keybindings. Any user can customize programs that use Readline by -putting commands in an "inputrc" file, conventionally in his home -directory. The name of this file is taken from the value of the -environment variable `INPUTRC'. If that variable is unset, the default -is `~/.inputrc'. - - When a program which uses the Readline library starts up, the init -file is read, and the key bindings are set. - - In addition, the `C-x C-r' command re-reads this init file, thus -incorporating any changes that you might have made to it. - -* Menu: - -* Readline Init File Syntax:: Syntax for the commands in the inputrc file. - -* Conditional Init Constructs:: Conditional key bindings in the inputrc file. - -* Sample Init File:: An example inputrc file. - - -File: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File - -Readline Init File Syntax -------------------------- - - There are only a few basic constructs allowed in the Readline init -file. Blank lines are ignored. Lines beginning with a `#' are -comments. Lines beginning with a `$' indicate conditional constructs -(*note Conditional Init Constructs::.). Other lines denote variable -settings and key bindings. - -Variable Settings - You can modify the run-time behavior of Readline by altering the - values of variables in Readline using the `set' command within the - init file. Here is how to change from the default Emacs-like key - binding to use `vi' line editing commands: - - set editing-mode vi - - A great deal of run-time behavior is changeable with the following - variables. - - `bell-style' - Controls what happens when Readline wants to ring the - terminal bell. If set to `none', Readline never rings the - bell. If set to `visible', Readline uses a visible bell if - one is available. If set to `audible' (the default), - Readline attempts to ring the terminal's bell. - - `comment-begin' - The string to insert at the beginning of the line when the - `insert-comment' command is executed. The default value is - `"#"'. - - `completion-ignore-case' - If set to `on', Readline performs filename matching and - completion in a case-insensitive fashion. The default value - is `off'. - - `completion-query-items' - The number of possible completions that determines when the - user is asked whether he wants to see the list of - possibilities. If the number of possible completions is - greater than this value, Readline will ask the user whether - or not he wishes to view them; otherwise, they are simply - listed. The default limit is `100'. - - `convert-meta' - If set to `on', Readline will convert characters with the - eighth bit set to an ASCII key sequence by stripping the - eighth bit and prefixing an <ESC> character, converting them - to a meta-prefixed key sequence. The default value is `on'. - - `disable-completion' - If set to `On', Readline will inhibit word completion. - Completion characters will be inserted into the line as if - they had been mapped to `self-insert'. The default is `off'. - - `editing-mode' - The `editing-mode' variable controls which default set of key - bindings is used. By default, Readline starts up in Emacs - editing mode, where the keystrokes are most similar to Emacs. - This variable can be set to either `emacs' or `vi'. - - `enable-keypad' - When set to `on', Readline will try to enable the application - keypad when it is called. Some systems need this to enable - the arrow keys. The default is `off'. - - `expand-tilde' - If set to `on', tilde expansion is performed when Readline - attempts word completion. The default is `off'. - - `horizontal-scroll-mode' - This variable can be set to either `on' or `off'. Setting it - to `on' means that the text of the lines being edited will - scroll horizontally on a single screen line when they are - longer than the width of the screen, instead of wrapping onto - a new screen line. By default, this variable is set to `off'. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `isearch-terminators' - The string of characters that should terminate an incremental - search without subsequently executing the character as a - command (*note Searching::.). If this variable has not been - given a value, the characters <ESC> and <C-J> will terminate - an incremental search. - - `keymap' - Sets Readline's idea of the current keymap for key binding - commands. Acceptable `keymap' names are `emacs', - `emacs-standard', `emacs-meta', `emacs-ctlx', `vi', - `vi-command', and `vi-insert'. `vi' is equivalent to - `vi-command'; `emacs' is equivalent to `emacs-standard'. The - default value is `emacs'. The value of the `editing-mode' - variable also affects the default keymap. - - `mark-directories' - If set to `on', completed directory names have a slash - appended. The default is `on'. - - `mark-modified-lines' - This variable, when set to `on', causes Readline to display an - asterisk (`*') at the start of history lines which have been - modified. This variable is `off' by default. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. The default is `off'. - - `print-completions-horizontally' - If set to `on', Readline will display completions with matches - sorted horizontally in alphabetical order, rather than down - the screen. The default is `off'. - - `show-all-if-ambiguous' - This alters the default behavior of the completion functions. - If set to `on', words which have more than one possible - completion cause the matches to be listed immediately instead - of ringing the bell. The default value is `off'. - - `visible-stats' - If set to `on', a character denoting a file's type is - appended to the filename when listing possible completions. - The default is `off'. - -Key Bindings - The syntax for controlling key bindings in the init file is - simple. First you need to find the name of the command that you - want to change. The following sections contain tables of the - command name, the default keybinding, if any, and a short - description of what the command does. - - Once you know the name of the command, simply place the name of - the key you wish to bind the command to, a colon, and then the - name of the command on a line in the init file. The name of the - key can be expressed in different ways, depending on which is most - comfortable for you. - - KEYNAME: FUNCTION-NAME or MACRO - KEYNAME is the name of a key spelled out in English. For - example: - Control-u: universal-argument - Meta-Rubout: backward-kill-word - Control-o: "> output" - - In the above example, <C-u> is bound to the function - `universal-argument', and <C-o> is bound to run the macro - expressed on the right hand side (that is, to insert the text - `> output' into the line). - - "KEYSEQ": FUNCTION-NAME or MACRO - KEYSEQ differs from KEYNAME above in that strings denoting an - entire key sequence can be specified, by placing the key - sequence in double quotes. Some GNU Emacs style key escapes - can be used, as in the following example, but the special - character names are not recognized. - - "\C-u": universal-argument - "\C-x\C-r": re-read-init-file - "\e[11~": "Function Key 1" - - In the above example, <C-u> is bound to the function - `universal-argument' (just as it was in the first example), - `<C-x> <C-r>' is bound to the function `re-read-init-file', - and `<ESC> <[> <1> <1> <~>' is bound to insert the text - `Function Key 1'. - - The following GNU Emacs style escape sequences are available when - specifying key sequences: - - `\C-' - control prefix - - `\M-' - meta prefix - - `\e' - an escape character - - `\\' - backslash - - `\"' - <">, a double quotation mark - - `\'' - <'>, a single quote or apostrophe - - In addition to the GNU Emacs style escape sequences, a second set - of backslash escapes is available: - - `\a' - alert (bell) - - `\b' - backspace - - `\d' - delete - - `\f' - form feed - - `\n' - newline - - `\r' - carriage return - - `\t' - horizontal tab - - `\v' - vertical tab - - `\NNN' - the character whose `ASCII' code is the octal value NNN (one - to three digits) - - `\xNNN' - the character whose `ASCII' code is the hexadecimal value NNN - (one to three digits) - - When entering the text of a macro, single or double quotes must be - used to indicate a macro definition. Unquoted text is assumed to - be a function name. In the macro body, the backslash escapes - described above are expanded. Backslash will quote any other - character in the macro text, including `"' and `''. For example, - the following binding will make `C-x \' insert a single `\' into - the line: - "\C-x\\": "\\" - - -File: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File - -Conditional Init Constructs ---------------------------- - - Readline implements a facility similar in spirit to the conditional -compilation features of the C preprocessor which allows key bindings -and variable settings to be performed as the result of tests. There -are four parser directives used. - -`$if' - The `$if' construct allows bindings to be made based on the - editing mode, the terminal being used, or the application using - Readline. The text of the test extends to the end of the line; no - characters are required to isolate it. - - `mode' - The `mode=' form of the `$if' directive is used to test - whether Readline is in `emacs' or `vi' mode. This may be - used in conjunction with the `set keymap' command, for - instance, to set bindings in the `emacs-standard' and - `emacs-ctlx' keymaps only if Readline is starting out in - `emacs' mode. - - `term' - The `term=' form may be used to include terminal-specific key - bindings, perhaps to bind the key sequences output by the - terminal's function keys. The word on the right side of the - `=' is tested against both the full name of the terminal and - the portion of the terminal name before the first `-'. This - allows `sun' to match both `sun' and `sun-cmd', for instance. - - `application' - The APPLICATION construct is used to include - application-specific settings. Each program using the - Readline library sets the APPLICATION NAME, and you can test - for it. This could be used to bind key sequences to - functions useful for a specific program. For instance, the - following command adds a key sequence that quotes the current - or previous word in Bash: - $if Bash - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - $endif - -`$endif' - This command, as seen in the previous example, terminates an `$if' - command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - -`$include' - This directive takes a single filename as an argument and reads - commands and bindings from that file. - $include /etc/inputrc - - -File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File - -Sample Init File ----------------- - - Here is an example of an inputrc file. This illustrates key -binding, variable assignment, and conditional syntax. - - - # This file controls the behaviour of line input editing for - # programs that use the Gnu Readline library. Existing programs - # include FTP, Bash, and Gdb. - # - # You can re-read the inputrc file with C-x C-r. - # Lines beginning with '#' are comments. - # - # First, include any systemwide bindings and variable assignments from - # /etc/Inputrc - $include /etc/Inputrc - - # - # Set various bindings for emacs mode. - - set editing-mode emacs - - $if mode=emacs - - Meta-Control-h: backward-kill-word Text after the function name is ignored - - # - # Arrow keys in keypad mode - # - #"\M-OD": backward-char - #"\M-OC": forward-char - #"\M-OA": previous-history - #"\M-OB": next-history - # - # Arrow keys in ANSI mode - # - "\M-[D": backward-char - "\M-[C": forward-char - "\M-[A": previous-history - "\M-[B": next-history - # - # Arrow keys in 8 bit keypad mode - # - #"\M-\C-OD": backward-char - #"\M-\C-OC": forward-char - #"\M-\C-OA": previous-history - #"\M-\C-OB": next-history - # - # Arrow keys in 8 bit ANSI mode - # - #"\M-\C-[D": backward-char - #"\M-\C-[C": forward-char - #"\M-\C-[A": previous-history - #"\M-\C-[B": next-history - - C-q: quoted-insert - - $endif - - # An old-style binding. This happens to be the default. - TAB: complete - - # Macros that are convenient for shell interaction - $if Bash - # edit the path - "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" - # prepare to type a quoted word -- insert open and close double quotes - # and move to just after the open quote - "\C-x\"": "\"\"\C-b" - # insert a backslash (testing backslash escapes in sequences and macros) - "\C-x\\": "\\" - # Quote the current or previous word - "\C-xq": "\eb\"\ef\"" - # Add a binding to refresh the line, which is unbound - "\C-xr": redraw-current-line - # Edit variable on current line. - "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" - $endif - - # use a visible bell if one is available - set bell-style visible - - # don't strip characters to 7 bits when reading - set input-meta on - - # allow iso-latin1 characters to be inserted rather than converted to - # prefix-meta sequences - set convert-meta off - - # display characters with the eighth bit set directly rather than - # as meta-prefixed characters - set output-meta on - - # if there are more than 150 possible completions for a word, ask the - # user if he wants to see all of them - set completion-query-items 150 - - # For FTP - $if Ftp - "\C-xg": "get \M-?" - "\C-xt": "put \M-?" - "\M-.": yank-last-arg - $endif - - -File: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing - -Bindable Readline Commands -========================== - -* Menu: - -* Commands For Moving:: Moving about the line. -* Commands For History:: Getting at previous lines. -* Commands For Text:: Commands for changing text. -* Commands For Killing:: Commands for killing and yanking. -* Numeric Arguments:: Specifying numeric arguments, repeat counts. -* Commands For Completion:: Getting Readline to do the typing for you. -* Keyboard Macros:: Saving and re-executing typed characters -* Miscellaneous Commands:: Other miscellaneous commands. - - This section describes Readline commands that may be bound to key -sequences. - - Command names without an accompanying key sequence are unbound by -default. In the following descriptions, POINT refers to the current -cursor position, and MARK refers to a cursor position saved by the -`set-mark' command. The text between the point and mark is referred to -as the REGION. - - -File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands - -Commands For Moving -------------------- - -`beginning-of-line (C-a)' - Move to the start of the current line. - -`end-of-line (C-e)' - Move to the end of the line. - -`forward-char (C-f)' - Move forward a character. - -`backward-char (C-b)' - Move back a character. - -`forward-word (M-f)' - Move forward to the end of the next word. Words are composed of - letters and digits. - -`backward-word (M-b)' - Move back to the start of the current or previous word. Words are - composed of letters and digits. - -`clear-screen (C-l)' - Clear the screen and redraw the current line, leaving the current - line at the top of the screen. - -`redraw-current-line ()' - Refresh the current line. By default, this is unbound. - - -File: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands - -Commands For Manipulating The History -------------------------------------- - -`accept-line (Newline, Return)' - Accept the line regardless of where the cursor is. If this line is - non-empty, add it to the history list. If this line was a history - line, then restore the history line to its original state. - -`previous-history (C-p)' - Move `up' through the history list. - -`next-history (C-n)' - Move `down' through the history list. - -`beginning-of-history (M-<)' - Move to the first line in the history. - -`end-of-history (M->)' - Move to the end of the input history, i.e., the line currently - being entered. - -`reverse-search-history (C-r)' - Search backward starting at the current line and moving `up' - through the history as necessary. This is an incremental search. - -`forward-search-history (C-s)' - Search forward starting at the current line and moving `down' - through the the history as necessary. This is an incremental - search. - -`non-incremental-reverse-search-history (M-p)' - Search backward starting at the current line and moving `up' - through the history as necessary using a non-incremental search - for a string supplied by the user. - -`non-incremental-forward-search-history (M-n)' - Search forward starting at the current line and moving `down' - through the the history as necessary using a non-incremental search - for a string supplied by the user. - -`history-search-forward ()' - Search forward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`history-search-backward ()' - Search backward through the history for the string of characters - between the start of the current line and the point. This is a - non-incremental search. By default, this command is unbound. - -`yank-nth-arg (M-C-y)' - Insert the first argument to the previous command (usually the - second word on the previous line). With an argument N, insert the - Nth word from the previous command (the words in the previous - command begin with word 0). A negative argument inserts the Nth - word from the end of the previous command. - -`yank-last-arg (M-., M-_)' - Insert last argument to the previous command (the last word of the - previous history entry). With an argument, behave exactly like - `yank-nth-arg'. Successive calls to `yank-last-arg' move back - through the history list, inserting the last argument of each line - in turn. - - -File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands - -Commands For Changing Text --------------------------- - -`delete-char (C-d)' - Delete the character under the cursor. If the cursor is at the - beginning of the line, there are no characters in the line, and - the last character typed was not bound to `delete-char', then - return `EOF'. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric argument means - to kill the characters instead of deleting them. - -`forward-backward-delete-char ()' - Delete the character under the cursor, unless the cursor is at the - end of the line, in which case the character behind the cursor is - deleted. By default, this is not bound to a key. - -`quoted-insert (C-q, C-v)' - Add the next character typed to the line verbatim. This is how to - insert key sequences like <C-q>, for example. - -`tab-insert (M-TAB)' - Insert a tab character. - -`self-insert (a, b, A, 1, !, ...)' - Insert yourself. - -`transpose-chars (C-t)' - Drag the character before the cursor forward over the character at - the cursor, moving the cursor forward as well. If the insertion - point is at the end of the line, then this transposes the last two - characters of the line. Negative arguments have no effect. - -`transpose-words (M-t)' - Drag the word before point past the word after point, moving point - past that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, uppercase the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, lowercase the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, capitalize the previous word, but do not move the cursor. - - -File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands - -Killing And Yanking -------------------- - -`kill-line (C-k)' - Kill the text from point to the end of the line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - -`kill-whole-line ()' - Kill all characters on the current line, no matter point is. By - default, this is unbound. - -`kill-word (M-d)' - Kill from point to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-DEL)' - Kill the word behind point. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind point, using white space as a word boundary. - The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text in the current region. By default, this command is - unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so it can be yanked - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. The word - boundaries are the same as `backward-word'. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. The word - boundaries are the same as `forward-word'. By default, this - command is unbound. - -`yank (C-y)' - Yank the top of the kill ring into the buffer at the current - cursor position. - -`yank-pop (M-y)' - Rotate the kill-ring, and yank the new top. You can only do this - if the prior command is yank or yank-pop. - - -File: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands - -Specifying Numeric Arguments ----------------------------- - -`digit-argument (M-0, M-1, ... M--)' - Add this digit to the argument already accumulating, or start a new - argument. <M-> starts a negative argument. - -`universal-argument ()' - This is another way to specify an argument. If this command is - followed by one or more digits, optionally with a leading minus - sign, those digits define the argument. If the command is - followed by digits, executing `universal-argument' again ends the - numeric argument, but is otherwise ignored. As a special case, if - this command is immediately followed by a character that is - neither a digit or minus sign, the argument count for the next - command is multiplied by four. The argument count is initially - one, so executing this function the first time makes the argument - count four, a second time makes the argument count sixteen, and so - on. By default, this is not bound to a key. - - -File: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands - -Letting Readline Type For You ------------------------------ - -`complete (TAB)' - Attempt to do completion on the text before the cursor. This is - application-specific. Generally, if you are typing a filename - argument, you can do filename completion; if you are typing a - command, you can do command completion; if you are typing in a - symbol to GDB, you can do symbol name completion; if you are - typing in a variable to Bash, you can do variable name completion, - and so on. - -`possible-completions (M-?)' - List the possible completions of the text before the cursor. - -`insert-completions (M-*)' - Insert all completions of the text before point that would have - been generated by `possible-completions'. - -`menu-complete ()' - Similar to `complete', but replaces the word to be completed with - a single match from the list of possible completions. Repeated - execution of `menu-complete' steps through the list of possible - completions, inserting each match in turn. At the end of the list - of completions, the bell is rung and the original text is restored. - An argument of N moves N positions forward in the list of matches; - a negative argument may be used to move backward through the list. - This command is intended to be bound to `TAB', but is unbound by - default. - -`delete-char-or-list ()' - Deletes the character under the cursor if not at the beginning or - end of the line (like `delete-char'). If at the end of the line, - behaves identically to `possible-completions'. This command is - unbound by default. - - -File: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands - -Keyboard Macros ---------------- - -`start-kbd-macro (C-x ()' - Begin saving the characters typed into the current keyboard macro. - -`end-kbd-macro (C-x ))' - Stop saving the characters typed into the current keyboard macro - and save the definition. - -`call-last-kbd-macro (C-x e)' - Re-execute the last keyboard macro defined, by making the - characters in the macro appear as if typed at the keyboard. - - -File: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands - -Some Miscellaneous Commands ---------------------------- - -`re-read-init-file (C-x C-r)' - Read in the contents of the INPUTRC file, and incorporate any - bindings or variable assignments found there. - -`abort (C-g)' - Abort the current editing command and ring the terminal's bell - (subject to the setting of `bell-style'). - -`do-uppercase-version (M-a, M-b, M-X, ...)' - If the metafied character X is lowercase, run the command that is - bound to the corresponding uppercase character. - -`prefix-meta (ESC)' - Make the next character typed be metafied. This is for keyboards - without a meta key. Typing `ESC f' is equivalent to typing `M-f'. - -`undo (C-_, C-x C-u)' - Incremental undo, separately remembered for each line. - -`revert-line (M-r)' - Undo all changes made to this line. This is like executing the - `undo' command enough times to get back to the beginning. - -`tilde-expand (M-~)' - Perform tilde expansion on the current word. - -`set-mark (C-@)' - Set the mark to the current point. If a numeric argument is - supplied, the mark is set to that position. - -`exchange-point-and-mark (C-x C-x)' - Swap the point with the mark. The current cursor position is set - to the saved position, and the old cursor position is saved as the - mark. - -`character-search (C-])' - A character is read and point is moved to the next occurrence of - that character. A negative count searches for previous - occurrences. - -`character-search-backward (M-C-])' - A character is read and point is moved to the previous occurrence - of that character. A negative count searches for subsequent - occurrences. - -`insert-comment (M-#)' - The value of the `comment-begin' variable is inserted at the - beginning of the current line, and the line is accepted as if a - newline had been typed. - -`dump-functions ()' - Print all of the functions and their key bindings to the Readline - output stream. If a numeric argument is supplied, the output is - formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - -`dump-variables ()' - Print all of the settable variables and their values to the - Readline output stream. If a numeric argument is supplied, the - output is formatted in such a way that it can be made part of an - INPUTRC file. This command is unbound by default. - -`dump-macros ()' - Print all of the Readline key sequences bound to macros and the - strings they ouput. If a numeric argument is supplied, the output - is formatted in such a way that it can be made part of an INPUTRC - file. This command is unbound by default. - - -File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing - -Readline vi Mode -================ - - While the Readline library does not have a full set of `vi' editing -functions, it does contain enough to allow simple editing of the line. -The Readline `vi' mode behaves as specified in the POSIX 1003.2 -standard. - - In order to switch interactively between `emacs' and `vi' editing -modes, use the command M-C-j (toggle-editing-mode). The Readline -default is `emacs' mode. - - When you enter a line in `vi' mode, you are already placed in -`insertion' mode, as if you had typed an `i'. Pressing <ESC> switches -you into `command' mode, where you can edit the text of the line with -the standard `vi' movement keys, move to previous history lines with -`k' and subsequent lines with `j', and so forth. - - - -Tag Table: -Node: Top1221 -Node: Command Line Editing1617 -Node: Introduction and Notation2231 -Node: Readline Interaction3850 -Node: Readline Bare Essentials5044 -Node: Readline Movement Commands6826 -Node: Readline Killing Commands7784 -Node: Readline Arguments9691 -Node: Searching10667 -Node: Readline Init File12511 -Node: Readline Init File Syntax13573 -Node: Conditional Init Constructs22839 -Node: Sample Init File25279 -Node: Bindable Readline Commands28450 -Node: Commands For Moving29495 -Node: Commands For History30345 -Node: Commands For Text33063 -Node: Commands For Killing35067 -Node: Numeric Arguments37035 -Node: Commands For Completion38163 -Node: Keyboard Macros39912 -Node: Miscellaneous Commands40472 -Node: Readline vi Mode43277 - -End Tag Table diff --git a/gnu/lib/libreadline/doc/rluserman.ps b/gnu/lib/libreadline/doc/rluserman.ps deleted file mode 100644 index 4edf5787904..00000000000 --- a/gnu/lib/libreadline/doc/rluserman.ps +++ /dev/null @@ -1,1897 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dvips(k) 5.82 Copyright 1998 Radical Eye Software -%%Title: rluserman.dvi -%%Pages: 22 -%%PageOrder: Ascend -%%BoundingBox: 0 0 612 792 -%%EndComments -%DVIPSWebPage: (www.radicaleye.com) -%DVIPSCommandLine: dvips -D 300 -t letter -o rluserman.ps rluserman.dvi -%DVIPSParameters: dpi=300, compressed -%DVIPSSource: TeX output 2000.03.01:1453 -%%BeginProcSet: texc.pro -%! -/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S -N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 -mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 -0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ -landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize -mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ -matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round -exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ -statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] -N/FBB[0 0 0 0]N/nn 0 N/IE 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin -/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array -/BitMaps X/BuildChar{CharBuilder}N/Encoding IE N end A{/foo setfont}2 -array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N -df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A -definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get -}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} -B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr -1 add N}if}B/id 0 N/rw 0 N/rc 0 N/gp 0 N/cp 0 N/G 0 N/CharBuilder{save 3 -1 roll S A/base get 2 index get S/BitMaps get S get/Cd X pop/ctr 0 N Cdx -0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx -sub Cy .1 sub]/id Ci N/rw Cw 7 add 8 idiv string N/rc 0 N/gp 0 N/cp 0 N{ -rc 0 ne{rc 1 sub/rc X rw}{G}ifelse}imagemask restore}B/G{{id gp get/gp -gp 1 add N A 18 mod S 18 idiv pl S get exec}loop}B/adv{cp add/cp X}B -/chg{rw cp id gp 4 index getinterval putinterval A gp add/gp X adv}B/nd{ -/cp 0 N rw exit}B/lsh{rw cp 2 copy get A 0 eq{pop 1}{A 255 eq{pop 254}{ -A A add 255 and S 1 and or}ifelse}ifelse put 1 adv}B/rsh{rw cp 2 copy -get A 0 eq{pop 128}{A 255 eq{pop 127}{A 2 idiv S 128 and or}ifelse} -ifelse put 1 adv}B/clr{rw cp 2 index string putinterval adv}B/set{rw cp -fillstr 0 4 index getinterval putinterval adv}B/fillstr 18 string 0 1 17 -{2 copy 255 put pop}for N/pl[{adv 1 chg}{adv 1 chg nd}{1 add chg}{1 add -chg nd}{adv lsh}{adv lsh nd}{adv rsh}{adv rsh nd}{1 add adv}{/rc X nd}{ -1 add set}{1 add clr}{adv 2 chg}{adv 2 chg nd}{pop nd}]A{bind pop} -forall N/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn -/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put -}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ -bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A -mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ -SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ -userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X -1000 div/DVImag X/IE 256 array N 2 string 0 1 255{IE S A 360 add 36 4 -index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N -/p{show}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{ -/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT) -(LaserWriter 16/600)]{A length product length le{A length product exch 0 -exch getinterval eq{pop true exit}if}{pop}ifelse}forall}{false}ifelse -end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{BDot}imagemask -grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat{BDot} -imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round -exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto -fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B/M{S p -delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M}B/g{0 M} -B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{ -p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{0 S -rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end - -%%EndProcSet -TeXDict begin 40258431 52099146 1000 300 300 (rluserman.dvi) -@start -%DVIPSBitmapFont: Fa cmti10 10.95 1 -/Fa 1 47 df<127012F8A212F012E005057B840E>46 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fb cmbxti10 14.4 1 -/Fb 1 47 df<120E123FEA7F80A212FFA21300127E123C0909798815>46 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fc cmmi10 10.95 1 -/Fc 1 59 df<127012F8A3127005057C840D>58 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fd cmsltt10 10.95 6 -/Fd 6 102 df<1206120FEA1F80120FA21203EA0700A25A120E123C127C12F01260090E -769B18>39 D<387FFFC0B512E0A26C13C013047C8F18>45 D<EB3E18EBFFB84813F8EA07 -C1EB8078EA0E00121E001C137048133014005AA35AA614C0EA7001A2130338380780383C -0F00EA1FFE6C5AEA03F0151C7C9B18>67 D<3907E01F80000FEB3FC0000714803903B02E -00146EA214CE380730DC1331149CA21333141C000E5B13371336133E133C131848C65AA6 -38FE03F800FF7F00FE5B1A1C7F9B18>77 D<126012F0A37E1278A3127C123CA3123E121E -A3121F7EA313801207A313C01203A413E01201A313F0120013600C24789F18>92 -D<13F8EA07FE487E381F0780EA3C03387801C0127012E0A2B5FCA2148000E0C7FCA21303 -3870078038780F00EA3FFE6C5AEA07F012147B9318>101 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fe cmbx12 13.14 46 -/Fe 46 122 df<123C127E12FFA4127E123C08087C8711>46 D<131C133C13FC12FFA212 -00B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E07F0383803F8386001FC38 -7C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F -00131E5B1370EBE003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA21823 -7DA21F>I<48B4FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C010000 -13FCA2EB03F8EB07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210 -127C12FEA214FEA2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14 -381478A214F81301130313071306130C131C13381330136013E0EA01C01380EA03005A12 -0E5A12185A12705AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C00 -1F137CEBFFF814F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8 -000813FCC7127EA3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FF -C03801FE0018237DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F -005AA2007E133C1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4 -003E137E123F6C137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C -003FB512C0A215804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA2 -5BA2133CA25BA213F8A41201A66C5A13601A257DA41F>I<EBFF80000313E0380F01F838 -1C007C48133C141E1278A2127C127E387F803C13E0383FF878381FFDF0EBFFC07E000313 -E014F8000F13FCEA1E1F383C07FEEA7803EB00FF48133F141F140FA3140E1278141C6C13 -38381F80F03807FFE00001130018237DA21F>I<141CA2143EA3147FA24A7EA39038019F -C0A29038031FE0140F01077FEB0607A2010C7F1403011C7FEB1801A2496C7EA2017FB5FC -A29039E0007F8049133FA2484880151F00038190C7120FA2486E7ED8FFF090B51280A229 -257EA42E>65 D<B612E015FC3903F0007FED3F80ED1FC0ED0FE0A216F0A21507150FA216 -E0151F16C0ED7F80913801FE0090B512F815FF9039F0003FC0ED0FE0ED07F016F8150316 -FCA616F81507ED0FF0ED1FE0ED7FC0B7120015F826257EA42C>I<9138FF8008010FEBF0 -1890393FC03C789039FE0006F8D801F81303484813014848130048481478121F48481438 -A2007F151890C8FCA2481500A97E16187F123FA26C6C1430120F6C6C14606C6C14C06C6C -EB0180D800FEEB070090383FC01E90380FFFF8010013C025257DA42C>I<B7FCA23903F8 -007FED0F8015071503A21501A3ED00C01406A21600A2140E141EEBFFFEA2EBF81E140E14 -06A21660A291C7FC16C0A415011503A2ED0F80153FB7FCA223257EA428>69 -D<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C5C90B5FCA2EBF80F80 -80A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F80003F800AF90B6FCA2 -9038F80003B0B500E0B512E0A22B257EA430>72 D<B512E0A23803F800B3AFB512E0A213 -257EA417>I<B539E007FF80A2D803F8C7EA780016605E4B5A0307C7FC150E15185D5D5D -EC03804AC8FC140E141F4A7E147FECDFC09038FB8FE09038FF0FF0EBFC07496C7E816E7E -1400157F82153F6F7E6F7E8215076F7E82B539E03FFFC0A22A257EA430>75 -D<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E157CEC03FCB6FCA220257E -A425>I<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D1406A26D6C130CA26D6C1318 -A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A291387E0300A3EC3F06A2EC1F8C -A2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A235257EA43A>I<D8FFF8903807 -FFE07FD803FE9038003C006D14187F6D7E6D7E806D7E6D7E13036D7E6D7E80EC7F80EC3F -C0141FEC0FE015F0EC07F8EC03FC1401EC00FE157F1698ED3FD8ED1FF8150F15071503A2 -150115001678486C1438D8FFFC1418A22B257EA430>I<B67E15F83903F801FEEC007F6F -7E6F7EA282A55EA24B5A4BC7FCEC01FE90B512F815C09038F803F06E7E6E7E157EA2157F -A482A31760ED3FC017C0ED1FE1B539E00FFF80923801FE002B257EA42E>82 -D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>I< -007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C160C5AA4C71400 -B3A390B512FEA226247EA32B>I<B539C001FFE0A2D807F8C7EA1C006C6C141816386C6C -14306C6C5C16E06D6C5B6D6C485A1503D91FE090C7FC90380FF006150E903807F80C6D6C -5A15386D6C5A903800FF6015E06E5A6E5AAE90380FFFFCA22B257FA42E>89 -D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1FFE3803FE7EEA0FC0EA1F -00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B187E971E>97 -D<EAFFC0A2120FACEBC1FCEBCFFF9038FC0FC09038F007E09038C003F0A2EC01F8A215FC -A815F8A2EC03F013E09038F007E090381C1F80390E0FFF00380C03F81E267FA522>I<EB -7FE03803FFF83807C07C381F80FC13005A007E1378140012FEA8127E127F6C130CEA1F80 -EBC0183807E0703803FFE038007F0016187E971B>I<ECFFC0A2140FAC137F3803FFCF38 -0FE0FF381F803F383F000FA2127EA212FEA8127EA27E141F381F803F380FC0EF3903FFCF -FC3800FE0F1E267EA522>I<137F3803FFC03807C1F0380F80F8EA1F0048137C127E147E -12FEA2B512FEA248C7FCA3127EA214067E6C130C380F80183807E0703803FFE038007F80 -17187E971C>I<EB1FC0EB7FF0EA01F83803E1F8120713C1380FC0F01400A7B5FCA2EA0F -C0B3A2EAFFFEA215267EA513>I<3901FF07C00007EBDFE0380F83F1EA1F01393E00F800 -007E7FA6003E5B6C485A380F83E0EBFFC0001190C7FC0030C8FCA21238123C383FFFE06C -13FC806C7F481480383C003F48EB0FC000F81307A4007CEB0F806CEB1F00381F807E3807 -FFF8C613C01B247E971F>I<EAFFC0A2120FAC14FE9038C3FF809038CE0FC013D89038D0 -07E013E0A213C0AF39FFFC7FFEA21F267EA522>I<120FEA1F80EA3FC0A4EA1F80EA0F00 -C7FCA7EA7FC0A2120FB3A2EAFFF8A20D277EA611>I<EAFFC0A2120FACEC1FF0A2EC0780 -EC0E005C14305CEBC1C0EBC38013C713DFEBFFC0EBE7E0EBC3F0138180EB80FC147E80A2 -EC1F80EC0FC039FFF83FF8A21D267FA520>107 D<EAFFC0A2120FB3B0EAFFFCA20E267E -A511>I<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813CC903A9007E803F001 -A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80FE903883FF80390F8E -0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722>I<EB7F803803FFF038 -07C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A26CEB3F00A2381F807E -6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390FFC1FC09038F007E001 -C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE09038DC1F809038CFFF00 -EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF8380F8C7CEB90FC13B013 -A01478EBE0005BAEEAFFFEA216187F9719>114 D<3807F8C0EA1FFFEA3C07EA7001EAF0 -00A300FC1300B47EEA7FFC7F383FFF80000F13C0120338001FE01303EAC001A212E014C0 -EAF00338FC078038EFFF00EAC3FC13187E9718>I<13C0A41201A312031207120F121FB5 -12C0A2380FC000AC1460A63807E0C013E13801FF8038007E0013237FA218>I<39FFC07F -E0A2000F1307B0140FA200071317EBE0673903FFC7FE38007F071F187E9722>I<39FFF8 -0FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00005B13FE -EB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D187F9720>I<39FFF83FF0A2390FC00F -003807E00E6C6C5A6D5A6C6C5A00001360EB7EC06D5AA2131F6D7E497E80EB33F81361EB -E0FC3801C07E3803807F3907003F8048131F39FFC07FF8A21D187F9720>120 -D<39FFF80FF8A2390FC001C015803907E00300A26D5A00031306EBF80E0001130C13FC00 -005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21306A25B1230EA781CEAFC185B -1370EA68E0EA7FC0001FC8FC1D237F9720>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Ff cmsl10 10.95 22 -/Ff 22 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF0380380 -70A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>12 -D<EAFFF0A20C027E8A0F>45 D<3A07FF803FE03A00F8001F000178130C5D4913205D5D4A -C7FC1402140848485A5C146014F013E1EBE4F83803C878EBD07CEBE03CEBC03E141E141F -48487E81140781140381380F00016D487E39FFF00FFE231F7E9E23>75 -D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7EA1E07EA3C0E127800F01310A313 -1EEB2E2038784F40381F878014147D9317>97 D<13FEEA0383380E0780121C0038130090 -C7FC12785AA45AA37E5BEA70026C5AEA1C18EA07E011147D9314>99 -D<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5AEA7002EA -3004EA1C18EA07E011147D9314>101 D<EB07C0EB1C60EB30F01360EBE0E0EBC0001201 -A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E11EB -E1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA21218 -121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC181F80 -9417>I<EA01C0EA03E0A213C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA6 -5A121EEAFF800B1F7F9E0C>105 D<13E0120712011200A2485AA6485AEB81FCEB80F014 -C0EB81801400EA07045B13181338137C131C120E7FA2130F7F1480EA1C03381E07C038FF -8FF016207E9F18>107 D<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A -121EEAFF800B207F9F0C>I<390387C07C391F9861863907A072073903C03403EB803800 -07EB7807EB0070A5000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I< -38038F80381F90E0EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13 -C038FF8FF014147E9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438 -E001E0A214C0130300F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807 -EC383801F01C6C487E140F48487E1580A53903800F00A2140E141E141C5C38074070EB61 -C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E -01E0123C003813C0127812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA -0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA0780 -90C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802 -EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010 -147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840 -EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA2 -5BEA305E381F9F8011147B9319>I<381FF0FF3803C0780001137014403800E0C0EBE180 -EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE07 -FC18147F9318>120 D<390FF83F803901E00E00EBC00C140813E000005B143014205C13 -705CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12 -E61278191D809318>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fg cmr8 8 41 -/Fg 41 124 df<126012F0A212701210A21220A21240A2040A7D960A>39 -D<EAFF80A2090280870C>45 D<1206120E12FE120EB1EAFFE00B157D9412>49 -D<13101338A3135CA3138EA3EA0107A238020380A33807FFC0EA0401A2380800E0A20018 -13F0123838FE03FE17177F961A>65 D<EAFFFE381C0380EB00E014601470A414E0EB01C0 -381FFF8014C0381C00E0147014301438A4147014E0EB01C0B5120015177F9619>I<EBFC -1038038330380E00B0481370481330123000701310126012E01400A51410126012700030 -132012386C13406C138038038300EA00FC14177E9619>I<B5FC381C01C0EB00E0143014 -381418141C140C140EA7140C141CA2143814301460EB01C0B5120017177F961B>I<B512 -E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C0C13041408A2130014181410A214 -3014F0B5FC15177F9618>I<B512E0EA1C00146014201410A3EB0400A3130CEA1FFCEA1C -0C1304A390C7FCA6EAFFC014177F9617>I<EA0FF8EA00E0B112E0A2EAC1C0EA6180EA1F -000D177E9612>74 D<EAFFC0001CC7FCAD1420A31460A2144014C01303B5FC13177F9616 ->76 D<00FEEB03F8001E14C000171305A338138009A23811C011A33810E021A2EB7041A3 -EB3881A2EB1D01A2130EA2123839FE040FF81D177F9620>I<00FC13FE001E1338001F13 -101217EA1380EA11C0A2EA10E013701338A2131C130E130F1307EB0390EB01D0A2EB00F0 -14701430123800FE131017177F961A>I<EAFFFE381C0380EB00C014601470A4146014C0 -EB0380381FFE00001CC7FCAAB47E14177F9618>80 D<EAFFFC381C0380EB00C014E01470 -A414E014C0EB0380381FFE00381C0780EB01C0EB00E0A514E1A2147238FF803C18177F96 -1A>82 D<EA0FC4EA302CEA601CEA400CEAC004A3EAE0001270127FEA3FE0EA0FF8EA01FC -EA001C130E13061280A3EAC004EAE008EAD810EA87E00F177E9614>I<387FFFF8386038 -1800401308A200801304A300001300AF3803FF8016177F9619>I<38FF80FE381C003814 -10B06C132012066C13403801818038007E0017177F961A>I<12FCA212C0B3AB12FCA206 -217D980A>91 D<EA3FC0EA70601330EA20381200EA03F8EA1E3812301270EAE039A21379 -EA70FFEA1F1E100E7F8D12>97 D<12F81238A8EA39F0EA3E0CEA380613077F1480A41400 -5B1306EA361CEA21F011177F9614>I<EA07F0EA18381230EA7010EA600012E0A41260EA -70081230EA1830EA07C00D0E7F8D10>I<133E130EA8EA07CEEA1C3EEA300E1270126012 -E0A412601270EA301EEA182E3807CF8011177F9614>I<EA0FC0EA1860EA3030EA7038EA -E018EAFFF8EAE000A31260EA7008EA3010EA1830EA07C00D0E7F8D10>I<EA03E0EA0670 -120EEA1C201300A5EAFF80EA1C00ACEA7F800C1780960B>I<EA0F9EEA18E3EA3060EA70 -70A3EA3060EA18C0EA2F80EA20001260EA3FE013F813FCEA600EEAC006A3EA600CEA3838 -EA0FE010157F8D12>I<1203EA0780A2EA0300C7FCA5EA1F801203AF1243EAE30012E712 -7C091D82960B>106 D<12F81238A8133E13381330134013801239EA3FC0EA39E0123813 -F01378133CA2EAFE7F10177F9613>I<12F81238B3A312FE07177F960A>I<EAF8F8EA3B1C -EA3C0E1238AA38FE3F80110E7F8D14>110 D<EA07C0EA1830EA3018EA600CA2EAE00EA5 -EA701CEA3018EA1830EA07C00F0E7F8D12>I<EAF9F0EA3E1CEA380613077F1480A41400 -5B130EEA3E1CEA39F00038C7FCA512FE11147F8D14>I<EA07C2EA1C26EA381EEA700E12 -6012E0A412601270EA301EEA1C2EEA07CEEA000EA5EB3F8011147F8D13>I<EAF9E0EA3A -70123CEA38201300A9B4FC0C0E7F8D0E>I<EA1F40EA60C0EAC040A2EAE000B4FCEA7F80 -EA1FC0EA01E0EA8060A212C0EAE0C0EA9F000B0E7F8D0E>I<1208A31218A21238EAFFC0 -EA3800A71340A4EA1C80EA0F000A147F930E>I<EAF83EEA380EAA131EEA1C2E3807CF80 -110E7F8D14>I<38FEFE7C383838381410133C001C1320134C381E4E60380ECE40138700 -0713801303A200031300EA0201160E7F8D19>119 D<EAFE3FEA3C1CEA1C10EA0E20EA07 -4013C0EA0380EA01C0EA02E0EA04F0EA0870EA1838EA383CEAFC7F100E7F8D13>I<EAFE -1FEA380EEA3C0CEA1C08A2EA0E10A2EA0720A213E0EA03C0A2EA0180A21300A212E2A212 -A4127810147F8D13>I<B512801101808812>123 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fh cmsy9 9 2 -/Fh 2 106 df<13801201EA0300A31206A25AA35AA35AA25AA35AA21260A37EA27EA37E -A37EA27EA3EA0180120009267D9B0F>104 D<12C0A21260A37EA27EA37EA37EA27EA3EA -0180A2EA0300A31206A25AA35AA35AA25AA35AA209267E9B0F>I -E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fi cmcsc10 10.95 8 -/Fi 8 118 df<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<EB1FE0EB70383801C00E -48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA900 -781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E -38007038EB1FE01E217C9F26>79 D<B512F0380F803E0007130FEC0780EC03C0A215E0A4 -15C0A2EC0780EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F02038 -0C0C60381803E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC000713 -80000113C038000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217C9F1C>83 D<397FF807FE390FE001F0D807C013C06C6C6C5A000149C7FCEB -F0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8EB0478EB -087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F8001F83A -FFC007FF80211F7E9E25>88 D<EB7E083803819838070078000C1338001C13185A007813 -08127000F01300A5EB03FEEB00381270127812387E120C1207380380D838007F0817177E -961D>103 D<38FC01FC381E007014201217EA1380A2EA11C0EA10E0A213701338A2131C -130E1307A2EB03A0EB01E0A213001460123800FE132016177E961C>110 -D<38FF81FC381C00701420B0000C1340120E6C138038018300EA007C16177E961C>117 -D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fj cmbx12 17.28 18 -/Fj 18 117 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F1200B3B1007FB512F0A3 -1C2E7AAD28>49 D<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB -079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607A248 -5A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D15 -0E0003161E6C6C151C6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7 -FCD9003F13F80203138031317CB03A>67 D<B812F0A3C6903880003FEE07F816031600A2 -1778A21738A3171C1507A31700A25D5D5D91B5FCA3EC803F818181A21707A392C7120EA4 -171EA2173CA2177C17FC16011607163FB812F8A330317EB035>69 -D<B67EA3000190C9FCB3A9EE0380A416071700A25EA35E5E5E5E4B5A150FB7FCA329317D -B030>76 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780 -A3481603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<EBFFF0000313FF390F803F80 -9038C00FE0486C6C7EA26E7ED80FC07FEA0780C7FCA414FF131FEBFFE33803FC03EA0FF0 -EA1FC0123FEA7F80A2EAFF00A31407A2387F800D393FC01DFE3A1FE078FFF03907FFE07F -C6EB803F24207E9F27>97 D<EA01F812FFA3120F1207ADEC3FE0ECFFFC9038FBE07F9039 -FF001F8049EB0FC04914E049EB07F016F8A2ED03FCA316FEA816FCA3ED07F8A216F06DEB -0FE06D14C001E7EB3F809039C3C0FE00903880FFF89038003FC027327EB12D>I<ED0FC0 -EC07FFA3EC007F153FADEB07F8EB3FFF9038FE07BF3903F801FF3907E0007F120F484813 -3F123FA2485AA312FFA8127FA36C7EA2121F6C6C137F000714FF2603F00313E03A01FC0F -3FFE38007FFEEB0FF027327DB12D>100 D<EB0FFC90387FFF803901FC0FC03903F003E0 -3907E001F0000F14F8391FC000FC003F14FEA24848137E157FA212FFA290B6FCA20180C7 -FCA4127FA36C6C1307121F150E6C7E6C6C131C6C6C13783900FE03E090383FFFC0903807 -FE0020207E9F25>I<EB01FE90380FFF8090381FC3C090387F07E09038FE0FF0120113FC -1203EC07E0EC018091C7FCA8B512FCA3D803FCC7FCB3A8387FFFF0A31C327EB119>I<90 -391FF007C09039FFFE3FE03A01F83F79F03907E00FC3000F14E19039C007E0E0001FECF0 -00A2003F80A5001F5CA2000F5CEBE00F00075C2603F83FC7FC3806FFFE380E1FF090C9FC -121EA2121F7F90B57E6C14F015FC6C806C801680000F15C0003FC7127F007EEC1FE0007C -140F00FC1407A4007EEC0FC0003E1580003F141FD80FC0EB7E003907F803FC0001B512F0 -D8001F90C7FC242F7E9F28>I<EA03C0487E487E487EA46C5A6C5A6C5AC8FCA9EA01F812 -7FA31207B3A7B51280A311337DB217>105 D<EA01F812FFA3120F1207B3B3A6B512C0A3 -12327DB117>108 D<2703F007F8EB1FE000FFD93FFEEBFFF8913A783F01E0FC02C09038 -8300FE280FF1801FC6137F2607F30013CC01F602F8148001FC5CA3495CB3B500C3B5380F -FFFCA33E207D9F43>I<3903F007F800FFEB3FFEEC783F02C013803A0FF1801FC03807F3 -0001F614E013FCA35BB3B500C3B5FCA328207D9F2D>I<EB07FC90387FFFC03901FC07F0 -3903F001F848486C7E4848137E001F147F003F158049133F007F15C0A300FF15E0A8007F -15C0A36C6CEB7F80A2001F15006C6C13FE00075C3903F803F83901FE0FF039007FFFC0D9 -07FCC7FC23207E9F28>I<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90 -C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA003F01001380143F0060131F00 -E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C07F8019207D9F20>115 -D<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7FCB0EC0380A712 -01EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fk cmsy10 10.95 1 -/Fk 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C000 -061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C15 -30A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090C7 -FC282B7EA02D>13 D E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fl cmbx12 14.4 39 -/Fl 39 122 df<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A2120612 -0E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00A2121C09097B8813>46 -D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277BA622>49 -D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15E0140FA2 -127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E4913E013 -705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB7F803803 -FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C495AEB07 -F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F48148000 -7CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C5BA2EB03 -BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12F0B612F8 -A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C5C14C091 -C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215E0A21218 -127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C613801B277DA6 -22>I<B612F815FF16C03A03F8001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED -07F0150FED1FC0EDFF8090B5EAFE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216 -FFA616FE1501ED03FC1507ED1FF8B712E016C0EDFE0028297DA830>66 -D<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F484814 -7F4848143F4848141F485A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E -6C7E6C6C141C6C6C143C6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE0090 -38007FF028297CA831>I<B712E0A33903FC001FED07F01501A215001670A3913801C078 -1638A302031300A2140F90B5FCA3EBFC0F1403A20201130EA3161C91C7FCA3163C163816 -7816F815011503151FB712F0A327297EA82C>69 D<B712C0A33903FC003FED0FE0150315 -01A21500A316F0913801C070A316001403A2140F90B5FCA3EBFC0F1403A21401A491C8FC -A9B512FCA324297EA82A>I<B512F0A33803FC00B3B1B512F0A314297EA819>73 -D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A21507A2150FA2151F157F913801FF00 -B7FCA322297EA828>76 D<D8FFFE92383FFF80A26D5D0003EFE000A2D9BF8014EFA2D99F -C0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8130EA2D981FC131CA3D980FE1338 -A2027F1370A291383F80E0A391381FC1C0A291380FE380A2913807F700A3EC03FEA26E5A -A26E5AD8FFFE0203B51280A2157039297DA840>I<B612E015FE6F7E3A03FC003FE0ED0F -F06F7E6F7E150182A65E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC0 -6F7E6F7E6F7EA9170EA21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>82 -D<9038FF80600003EBF0E0000F13F8381F80FD383F001F003E1307481303A200FC1301A2 -14007EA26C140013C0EA7FFCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB -007FEC1FF0140F140700E01303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE00 -00E15B38C01FF01C297CA825>I<B500F0EBFFFEA3D803FCC7EA0380B3AA0001ED07007F -0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7FC2F297EA834 ->85 D<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E13016C -604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F160E17F0 -9126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC70035BA291 -3AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E80021E141E -A242297FA845>87 D<3803FF80000F13F0381F01FC383F80FE147F801580EA1F00C7FCA4 -EB3FFF3801FC3FEA0FE0EA1F80EA3F00127E5AA4145F007E13DF393F839FFC381FFE0F38 -03FC031E1B7E9A21>97 D<EAFFE0A3120FACEBE1FE9038EFFF809038FE07E09038F803F0 -9038F001F89038E000FCA2157EA2157FA8157EA315FCA29038F001F89038F803F090389C -0FE090380FFF80390E01FC00202A7EA925>I<EB3FF03801FFFC3803F03E380FC07FEA1F -80EA3F00A248133E007E90C7FCA212FEA7127EA2127F6CEB03801380001FEB0700380FE0 -0E3803F83C3801FFF838003FC0191B7E9A1E>I<EC7FF0A31407ACEB3F873801FFF73807 -F03F380FC00F381F8007EA3F00A2127EA312FEA8127EA27EA2381F800F380FC01F3907E0 -7FFF3801FFE738007F87202A7EA925>I<EB3FC03801FFF03803E07C380F803E001F7F13 -0048EB0F80127E15C0A200FE1307A2B6FCA248C8FCA3127EA2127F6CEB01C07E390F8003 -803907C007003803F01E3800FFFCEB3FE01A1B7E9A1F>I<EB07F8EB3FFCEB7E3E3801FC -7FEA03F813F01207143E1400A7B512C0A33807F000B3A3387FFF80A3182A7EA915>I<90 -38FF80F00003EBE3F8390FC1FE1C391F007C7C48137E003EEB3E10007EEB3F00A6003E13 -3E003F137E6C137C380FC1F8380BFFE00018138090C8FC1238A2123C383FFFF814FF6C14 -C06C14E06C14F0121F383C0007007CEB01F8481300A4007CEB01F0A2003FEB07E0390FC0 -1F806CB5120038007FF01E287E9A22>I<EAFFE0A3120FAC147E9038E1FF809038E30FC0 -01E413E0EBE80701F813F013F0A213E0B039FFFE3FFFA3202A7DA925>I<1207EA0F80EA -1FC0EA3FE0A3EA1FC0EA0F80EA0700C7FCA7EAFFE0A3120FB3A3EAFFFEA30F2B7EAA12> -I<EAFFE0A3120FB3B2EAFFFEA30F2A7EA912>108 D<26FFC07FEB1FC0903AC1FFC07FF0 -903AC307E0C1F8D80FC49038F101FC9039C803F20001D801FE7F01D05BA201E05BB03CFF -FE3FFF8FFFE0A3331B7D9A38>I<38FFC07E9038C1FF809038C30FC0D80FC413E0EBC807 -01D813F013D0A213E0B039FFFE3FFFA3201B7D9A25>I<EB3FE03801FFFC3803F07E390F -C01F80391F800FC0393F0007E0A2007EEB03F0A300FE14F8A8007E14F0A26CEB07E0A239 -1F800FC0390FC01F803907F07F003801FFFC38003FE01D1B7E9A22>I<38FFC1F0EBC7FC -EBC63E380FCC7F13D813D0A2EBF03EEBE000B0B5FCA3181B7F9A1B>114 -D<3803FE30380FFFF0EA3E03EA7800127000F01370A27E00FE1300EAFFE06CB4FC14C06C -13E06C13F0000713F8C6FCEB07FC130000E0137C143C7E14387E6C137038FF01E038E7FF -C000C11300161B7E9A1B>I<13E0A41201A31203A21207120F381FFFE0B5FCA2380FE000 -AD1470A73807F0E0000313C03801FF8038007F0014267FA51A>I<39FFE07FF0A3000F13 -07B2140FA2000713173903F067FF3801FFC738007F87201B7D9A25>I<39FFFC03FFA339 -0FF000F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA214 -9EEB3F9C14FC6D5AA26D5AA36D5AA26D5AA2201B7F9A23>I<3BFFFC7FFC1FFCA33B0FE0 -0FE001C02607F007EB0380A201F8EBF00700031600EC0FF801FC5C0001150EEC1FFC2600 -FE1C5B15FE9039FF387E3C017F1438EC787F6D486C5A16F0ECE01F011F5CA26D486C5AA2 -EC800701075CA22E1B7F9A31>I<39FFFC1FFEA33907F003803803F8079038FC0F003801 -FE1E00005BEB7F3814F86D5A6D5A130F806D7E130F497EEB3CFEEB38FFEB787F9038F03F -803901E01FC0D803C013E0EB800F39FFF03FFFA3201B7F9A23>I<39FFFC03FFA3390FF0 -00F0000714E07F0003EB01C0A2EBFC0300011480EBFE070000140013FFEB7F0EA2149EEB -3F9C14FC6D5AA26D5AA36D5AA26D5AA25CA21307003890C7FCEA7C0FEAFE0E131E131C5B -EA74F0EA3FE0EA0F8020277F9A23>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fm cmtt10 10.95 77 -/Fm 77 127 df<127012F8B012701200A5127012F8A31270051C779B18>33 -D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I<EA0306EA078FA6387FFFC0B5 -12E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E3C00A6EA0C18131C7E9B18> -I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C38013C7A338F1C0001279123F -6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EBC7001271EA79DEEA3FFEEA1F -F8EA07E0EA01C0A3120011247D9F18>I<1238127CA2127E123E120EA3121CA2123812F8 -12F012C0070E789B18>39 D<137013F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA4 -5AA81270A47EA27E121E7EEA0780EA03C0EA01F0120013700C24799F18>I<126012F012 -787E7E7EEA07801203EA01C0A2EA00E0A41370A813E0A4EA01C0A2EA03801207EA0F0012 -1E5A5A5A12600C247C9F18>I<EA01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07 -F0A2EA1FFCEA7FFF38FDDF80EAF1C73841C100EA01C0A411147D9718>I<121C123E127E -127F123F121F1207120E121E127C12F81260080C788518>44 D<387FFFC0B512E0A26C13 -C013047E8F18>I<1230127812FCA2127812300606778518>I<1303EB0780A2130F14005B -131EA2133E133C137C1378A213F85B12015B12035BA212075B120F90C7FCA25A121E123E -123CA2127C127812F85AA2126011247D9F18>I<EA01F0EA07FC487EEA1F1FEA1C073838 -0380007813C0EA7001A238E000E0A9EAF001007013C0A2EA780300381380381C0700EA1F -1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203A21207120F123F12FF12FB12431203 -B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C -0780383003C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFC -EA03F0131C7E9B18>53 D<12E0B512E0A214C038E00380EB0700C65A131E131C5BA25B13 -F05BA2485AA3485AA448C7FCA7131D7E9C18>55 D<EA03F8EA0FFE487E383E0F80EA3803 -387001C0A438380380EA3C07381FFF00EA07FC487EEA1F1F383C0780387001C000F013E0 -EAE000A4387001C0EA7803383E0F80381FFF006C5AEA03F8131C7E9B18>I<1230127812 -FCA2127812301200A81230127812FCA2127812300614779318>58 -D<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048C7FC12FCA2127F6C -7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303EB00C013187E9918>60 -D<387FFFC0B512E0A26C13C0C8FCA4387FFFC0B512E0A26C13C0130C7E9318>I<126012 -F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE0048 -5AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0FF0EA3FFC48B4FCEA700F -38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A111C -7D9B18>I<137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C1 -12E1EAE380A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC0 -0001138038007E00131C7E9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707 -A5380FFF80A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>I<EA7FFC -B5FC6C1380381C03C01301EB00E0A4130114C01307381FFF80140014C0EA1C03EB00E014 -F01470A414F014E01303387FFFC0B51280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07 -FFEA0F07EA1E03EA3C01EA38005AA214005AA8127014E0A27E123C381E01C0EA0F073807 -FF803803FE00EA00F8131C7E9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E013 -00A214F01470A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F9B18> -I<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A315 -1C7F9B18>I<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0 -A3151C7F9B18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5 -EB0FF0131F130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B -18>I<387F07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8 -387F07F0151C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C -7D9B18>I<387F07F038FF87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0 -121DA2EA1FB8A2131C121EEA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0 -151C7F9B18>75 D<EAFFC0A3001CC7FCB114E0A5B5FCA3131C7E9B18>I<38FC01F8EAFE -03A2383B06E0A4138EA2EA398CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C -7F9B18>I<387E07F038FF0FF8387F07F0381D81C0A313C1121CA213E1A313611371A213 -311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE383FFF8048 -13C0EA7803EA700100F013E0EAE000B0EAF001007013C0EA7C07EA7FFF6C1380380FFE00 -131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF -1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA0FFE383FFF804813C0EA7803EA7001 -00F013E0EAE000AE1370A2EAF079387039C0EA783FEA7FFF6C1380380FFE00EA000FEB07 -80A2EB03C01301A213227E9B18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A31303 -1480130F381FFF005BA2EA1C0F7FEB0380A5149CA3387F01F8EAFF81387F00F0161C7F9B -18>I<3803F1C0EA1FFF5AEA7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FE -C67EEB0F80EB03C01301EB00E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8 -131C7E9B18>I<387FFFF8B5FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF -83FEA3381C0070B36C13E0EA0F01380783C03803FF806C1300EA007C171C809B18>I<38 -FE03F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3 -EA00F8A21370A9EA01FC487E6C5A151C7F9B18>89 D<EAFFF8A3EAE000B3ACEAFFF8A30D -24779F18>91 D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F -12017F12007F1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I< -EAFFF8A3EA0038B3ACEAFFF8A30D247F9F18>I<387FFFC0B512E0A26C13C013047E7F18> -95 D<EA0FF0EA1FFC487EEA3C0FEA180738000380A213FF1207121FEA7F03127812E0A3 -EAF007EA780F383FFFF8EA1FFDEA07F015147E9318>97 D<127E12FE127E120EA5133EEB -FF80000F13C0EBC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380 -38063E00151C809B18>I<EA01FEEA07FF001F1380EA3E073838030048C7FCA25AA61270 -EB01C01238EA3E03381FFF8000071300EA01FC12147D9318>I<EB1F80133F131F1303A5 -EA03E3EA0FFBEA1FFFEA3C1FEA380FEA7007130312E0A6EA7007A2EA380FEA3C1F381FFF -F0380FFBF83803E3F0151C7E9B18>I<EA01F0EA07FCEA1FFEEA3E0F38380780EA7003A2 -38E001C0A2B5FCA300E0C7FC1270EB01C01238EA3E07381FFF8000071300EA01F812147D -9318>I<EB1F80EB7FC0EBFFE013E13801C0C01400A3387FFFC0B5FCA23801C000AEEA7F -FFA3131C7F9B18>I<3801E1F03807FFF85A381E1E30381C0E00487EA5EA1C0EEA1E1EEA -1FFC5BEA39E00038C7FC7EEA1FFEEBFFC04813E0387801F038700070481338A4007813F0 -EA7E03381FFFC06C13803801FC00151F7F9318>I<127E12FE127E120EA5133EEBFF8000 -0F13C013C1EB80E01300120EAB387FC7FC38FFE7FE387FC7FC171C809B18>I<EA0380EA -07C0A3EA0380C7FCA4EA7FC012FF127F1201AEB5FCA3101D7C9C18>I<1338137CA31338 -1300A4EA0FFCA3EA001CB3A4EA6038EAF078EAFFF0EA7FE0EA3F800E277E9C18>I<127E -12FE127E120EA5EB3FF0A3EB0780EB0F00131E5B5B5BEA0FF87F139C130EEA0E0F7FEB03 -8014C0387FC7F812FF127F151C7F9B18>I<EAFFC0A31201B3A4B51280A3111C7D9B18>I< -38F9C1C038FFF7F013FF383E3E38EA3C3CA2EA3838AB38FE3E3EEB7E7EEB3E3E17148093 -18>I<EA7E3E38FEFF80007F13C0EA0FC1EB80E01300120EAB387FC7FC38FFE7FE387FC7 -FC1714809318>I<EA01F0EA0FFE487E383E0F80EA3803387001C0A238E000E0A5EAF001 -007013C0EA7803383C0780EA3E0F381FFF006C5AEA01F013147E9318>I<EA7E3E38FEFF -80007F13C0380FC1E01380EB0070120E1438A6000F1370A2EB80E013C1EBFFC0000E1380 -EB3E0090C7FCA7EA7FC0487E6C5A151E809318>I<3801F380EA07FBEA1FFFEA3E1FEA38 -0FEA7007A2EAE003A6EA7007A2EA380FEA3C1FEA1FFFEA0FFBEA03E3EA0003A7EB1FF0EB -3FF8EB1FF0151E7E9318>I<38FF0FC0EB3FE0EB7FF0EA07F0EBE060EBC0005BA290C7FC -A9EAFFFC7F5B14147E9318>I<EA07F7EA3FFF5AEA780FEAE007A3007CC7FCEA7FE0EA1F -FCEA03FEEA001F38600780EAE003A212F038F80F00B5FC13FCEAE7F011147D9318>I<48 -7E1203A4387FFFC0B5FCA238038000A9144014E0A33801C1C013FF6C1380EB3E0013197F -9818>I<387E07E0EAFE0FEA7E07EA0E00AC1301EA0F033807FFFC6C13FE3801FCFC1714 -809318>I<387F8FF000FF13F8007F13F0381C01C0380E0380A338070700A3138FEA038E -A3EA01DCA3EA00F8A2137015147F9318>I<38FF07F8138F1307383800E0A4381C01C013 -7113F9A213D9EA1DDD000D1380A3138DEA0F8FA23807070015147F9318>I<387F8FF013 -9F138F380F0700EA078EEA039EEA01DC13F81200137013F07FEA01DCEA039E138EEA0707 -000E1380387F8FF000FF13F8007F13F015147F9318>I<387F8FF000FF13F8007F13F038 -0E01C0EB0380A21207EB0700A2EA0387A2138EEA01CEA213CC120013DC1378A31370A313 -F05B1279EA7BC0EA7F806CC7FC121E151E7F9318>I<383FFFF05AA2387001E0EB03C0EB -078038000F00131E5B13F8485AEA03C0485A380F0070121E5A5AB512F0A314147F9318> -I<EB07E0131F137FEB780013E0AB1201EA7FC0485AA26C7EEA01E01200AB1378EB7FE013 -1F130713247E9F18>I<127CB4FC13C01203C67EAB7FEB7FC0EB3FE0A2EB7FC0EBF0005B -ABEA03C012FF90C7FC127C13247E9F18>125 D<EA060CEA1F1EEA3FBEEAFBF8EAF1F0EA -60C00F067C9B18>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fn cmr10 10.95 72 -/Fn 72 123 df<90381F83E09038F06E303901C07878380380F8903800F03048EB7000A7 -B612803907007000B2383FE3FF1D20809F1B>11 D<133FEBE0C0EA01C0380381E0EA0701 -A290C7FCA6B512E0EA0700B2383FC3FC1620809F19>I<127012F812FCA212741204A312 -08A21210A212201240060E7C9F0D>39 D<13401380EA01005A12061204120C5AA2123812 -30A212701260A412E0AC1260A412701230A212381218A27E120412067E7EEA008013400A -2E7BA112>I<7E12407E12307E1208120C7EA212077EA213801201A413C0AC1380A41203 -1300A25A1206A25A120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A3 -1210A31220A21240050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A312700505 -7C840D>I<EA03F0EA0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA78 -0700381300EA1806EA1C0E6C5AEA03F0121F7E9D17>48 D<13801203120F12F31203B3A6 -EA07C0EAFFFE0F1E7C9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF8 -03A3EA200712001480A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380 -EA3FFF5AB5FC121E7E9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F12 -001400A2131E131C1370EA07F0EA003C130E130FEB0780A214C0122012F8A300F0138012 -40EB0F00EA200EEA183CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E138EA2 -EA010E1202A212041208A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17 ->I<EA1803EA1FFE5B5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003A214 -C0A3127012F0A200E013801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<137C -EA0182EA0701380E0380EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406 -EAF807EB0380A200F013C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D -17>I<1240387FFFE014C0A23840008038800100A21302485AA25B5BA25BA21360A213E0 -5B1201A41203A76C5A131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260A312 -7038780300123EEA3F06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007EB01 -C012C01300A31480EA600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E -18487E487E13071270EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E3380003 -80A3EB07001230EA7806130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012F8A3 -12701200AA127012F8A3127005147C930D>I<127012F8A312701200AA127012F012F8A2 -12781208A31210A31220A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB -2078A3497EA2EBC03EEB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14 -E039FF801FFE1F207F9F22>65 D<B512E0380F0078141EA2801580A515005C141E147CEB -FFF0EB007C141FEC0F80EC07C0140315E0A515C014071580EC0F00143EB512F01B1F7E9E -20>I<90380FE0109038381C309038E002703803C00139078000F048C71270121E15305A -1510127C127800F81400A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E0 -0300EB380CEB0FF01C217E9F21>I<B512F83807801EEC0780EC03C0EC01E0EC00F01570 -1578A2153CA3153EA8153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F -7F9E23>I<B61280380F000F14031401140015C01540A314401500A214C0130113FF1301 -13001440A3EC0020A31540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780 -071401A2140015C01540A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE -1A1F7F9E1E>I<90380FE0109038381C309038E002703803C00139078000F048C7127012 -1E15305A1510127C127800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E39 -03C001703900E002309038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780 -AD90B5FCEB0007AF39FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10> -I<3807FFC038003E00131EB3A3122012F8A3EAF01CEA403CEA6038EA1070EA0FC012207F -9E17>I<39FFF007FC390F0003E0EC0180150014025C5C5C5C5C5C49C7FC5B497E130FEB -13C0EB21E01341EB80F0EB0078A28080A280EC0780A2EC03C015E015F039FFF01FFE1F1F -7E9E23>I<EAFFF8EA0F8090C7FCB21402A414061404A2140C141C147CB512FC171F7E9E -1C>I<B46CEB07FE000715C0A2D805C0130BA2D804E01313A301701323A26D1343A36D13 -83A290380E0103A3EB0702A3EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F -7F9E2A>I<B4EB0FF8390F8003E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB07 -80A2EB03C0EB01E0A2EB00F01478A2143C141EA2140F1407A214031401123E38FF80001D -1F7E9E22>I<EB1FE0EB70383801C00E48487E39070003804814C0001EEB01E048EB00F0 -A2007C14F8A20078147800F8147CA900781478007C14F8A2003C14F0003E1301001E14E0 -6CEB03C06C148039038007003801E01E38007038EB1FE01E217E9F23>I<B512E0380F00 -7C141E80EC0780A215C0A41580A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F ->I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070A28014 -3CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>82 -D<3803F040380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF8 -6CB4FC00071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F80180 -38C60300EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C014 -3000801410A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC00 -80B3A46CEB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003 -FE391F8000F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213 -F8EB7804A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF0 -7FF81FF03B1F000FC007C06C903907800180170015C001805C00071502EC09E013C00003 -5DEC19F01410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C14 -4090383D000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<39 -FFF001FF391F800078000F146012076D1340000314807F3901F001001200EBF802EB7C06 -EB3C04EB3E08131EEB1F10EB0FB0EB07A014E06D5AACEB3FFC201F7F9E22>89 -D<12FFA212C0B3B3A512FFA2082D7CA10D>91 D<12FFA21203B3B3A512FFA2082D80A10D ->93 D<120812101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 -D<EA1FE0EA3030EA7818131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A313 -1E127838386720380F83C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00 -C0001C13E01470A21478A6147014F014E0001E13C0381A018038198700EA107C15207E9F -19>I<EA01FCEA0706EA1C0F123813060078C7FC127012F0A61270127800381380A2381C -0100EA0706EA01F811147F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112 -381278127012F0A61270A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA -0E1C487E487EA21270EB038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706 -EA01F811147F9314>I<137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE0 -1020809F0E>I<14E03803E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA -33E00020C7FCA21230A2EA3FFE381FFF8014C0383001E038600070481330A4006013606C -13C0381C03803803FC00141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2 -121CAE38FF8FF014207E9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F -7F9E0C>I<13E0EA01F0A3EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA -6180EA3F000C28829E0E>I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013 -E0EA1DF0EA1E70EA1C38133C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12 -FC121CB3ABEAFF8009207F9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2 -001C13C0AE3AFF8FF8FF8021147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38 -FF8FF014147E9319>I<EA01F8EA070E381C0380383801C0A2387000E0A200F013F0A600 -7013E0A2383801C0A2381C038038070E00EA01F814147F9317>I<EA1C7CEAFD87381E01 -8014C0381C00E014F014701478A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7 -FCA8B47E151D7E9319>I<3801F04038070CC0EA0E02EA1C03EA38011278127012F0A612 -7012781238EA1C03EA0C05EA0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD -18EA1E3CA21318EA1C00AEEAFFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE0 -00127CEA3FE0EA1FF0EA07F8EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F14 -7F9312>I<1202A31206A2120EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C -7F9B12>I<381C0380EAFC1FEA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83 -F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370 -A3132015147F9318>I<39FF9FE1FC393C078070391C030060EC8020000E1440A214C0D8 -0704138014E0A239038861001471A23801D032143A143E3800E01CA2EB6018EB40081E14 -7F9321>I<38FF87F8381E03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370 -137813F8139CEA010E1202EA060738040380000C13C0003C13E038FE07FC16147F9318> -I<38FF83F8383E00E0001C13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00 -E8A21370A31320A25BA3EAF080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E12 -60EA401C133813781370EA00E0120113C0EA038012071301120E121EEA1C03EA3802EA70 -06130EEAFFFE10147F9314>I E -%EndDVIPSBitmapFont -%DVIPSBitmapFont: Fo cmbx12 20.736 19 -/Fo 19 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC00FE0F -010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9121F48 -5A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB61280127FA27F -DC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C6D01C0 -EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC413D7B -BB4C>71 D<B612F8A439007FF000B3B3AFB612F8A41D3B7DBA24>73 -D<B612FEA426007FF0C9FCB3ADEF03C0A517071880A3170FA3171FA2173F177F17FF5E04 -071300163FB9FCA4323B7DBA3A>76 D<B500F00207B512E0808080D8007F92390007E000 -6E6F5A81017B7F81137901787F6E7E6E7E81141F6E7E6E7F6E7F82806E7F6F7E6F7E826F -7E816F13806F13C017E06F13F081EE7FF8EE3FFC17FEEE1FFF827013837013C318E37013 -F382EF7FFBEF3FFFA283838383A28383187F183FA201FC161FB500FC150F18071803A243 -3B7CBA4C>78 D<B712F8EEFFC017F817FE3B007FF0001FFF040313C004007F717E717EA2 -84171FA284A660A2173F604D5A604C485A4C5BDC1FFEC8FC91B612F817C0A29139F0007F -F0EE1FF8707E707E707E8482A284A584A5F101E0A27013F0A2F103C0EF7FF8B600F89039 -3FFC078094381FFE0F0507B51200050113FCCBEA1FF0433C7CBA48>82 -D<B600F80107B512E0A426007FF0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA2 -6D6C151E0107163E6E5D6D6C5D6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02 -034AC8FCDA007F13F003071380433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007 -FC9038F001FE486C6C7E6F7E82153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F38 -03FF803807FC00EA0FF0485A123F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F -0FFFE03807FFFE0001497E39003FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4 -FC021F13F0027F13FC9138FC03FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF0 -17F8A2EE07FCA317FEA917FCA3160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EB -FF009039F0FC07FE91387FFFF8D9E01F13E09026C003FEC7FC2F3C7DBB36>I<903801FF -F0010F13FE013FEBFF809039FF801FC03901FE003F4848EB7FE0485A485A121F4848EB3F -C0ED1F80007FEC0F004990C7FCA212FFAA127F7FA2123F6D14F0121F6C6CEB01E012076C -6CEB03C06CB4EB0F806C9038C03F0090383FFFFE010F13F8010113C024267DA52B>I<EE -3F80ED3FFFA4150181B0ECFF80010F13F0013F13FC9038FFC03F3901FE000F4848130348 -487F48487F121F485AA2127F5BA312FFA9127FA36C7EA2121F6C6C5B6C6C5B00035CD801 -FE011F13C02700FF807E13FE90387FFFF8010F13E0010113002F3C7DBB36>I<49B47E01 -0F13F0017F13FC9038FF81FE3A03FE007F80D807F8133F4848EB1FC0ED0FE0485A003F15 -F01507485A16F8A212FFA290B6FCA301C0C8FCA4127FA36C7E1678121F7F000F15F06C6C -13016C6CEB03E06C6CEB0FC03A00FFC07F8090393FFFFE00010F13F8010013C025267DA5 -2C>I<EC1FF0ECFFFC010313FF90390FF83F8090381FE07F90393FC0FFC0495A13FFA248 -9038007F80ED3F00151E92C7FCAAB67EA4000190C8FCB3AC007F13FEA4223C7DBB1E>I< -EA01E0EA07F8487EA2487EA46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512 -F0A4143D7DBC1A>105 D<13FE12FFA412071203B3B3AEB512F8A4153C7DBB1A>108 -D<D801FCEBFF8000FF010313F0020F7F91381E03FC91383801FE000701607F0003497E01 -FD15805C01FFC7FCA35BB3A4B5D8F83F13FEA42F267CA536>110 -D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC707F00079038E0FFC000035BEBFD80A2 -01FFEB7F809138003F00151E92C7FC5BB3A3B512FCA422267DA528>114 -D<90383FF0383903FFFE7848EBFFF8381FC00F383F0003003E13005A157812FCA27E6C14 -0013C013FC387FFFF06C13FEECFF806C14C06C14E0000314F0C614F8011F13FCEB007FEC -07FE0070130100F01300157E7EA27E157C6C14FC6C14F890388001F09038F00FE000F9B5 -12C0D8F07F130038C01FF81F267DA526>I<130FA55BA45BA25BA25B5A5A5A001FEBFFF0 -B6FCA3000190C7FCB3153CA86C14781480017F13F090383FC1E090381FFFC06D13809038 -01FE001E377EB626>I<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E13 -7C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F010391 -C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C14 -1E0008133E007F133C147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FCEA -1FFCEA07F02E377EA533>121 D E -%EndDVIPSBitmapFont -end -%%EndProlog -%%BeginSetup -%%Feature: *Resolution 300dpi -TeXDict begin -%%BeginPaperSize: Letter -letter -%%EndPaperSize - -%%EndSetup -%%Page: 1 1 -1 0 bop 75 693 a Fo(GNU)33 b(Readline)h(Library)e(User)h(In)m(terface)p -75 743 1800 17 v 936 791 a Fn(Edition)17 b(4.1,)c(for)i -Fm(Readline)f(Library)g Fn(V)l(ersion)i(4.1.)1609 845 -y(Jan)o(uary)f(2000)75 2467 y Fl(Brian)23 b(F)-6 b(o)n(x,)23 -b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)75 -2534 y(Chet)22 b(Ramey)-6 b(,)23 b(Case)e(W)-6 b(estern)23 -b(Reserv)n(e)f(Univ)n(ersit)n(y)p 75 2570 1800 9 v eop -%%Page: 2 2 -2 1 bop 75 250 a Fn(This)22 b(do)q(cumen)o(t)f(describ)q(es)i(the)f -(end)f(user)h(in)o(terface)f(of)g(the)g(GNU)g(Readline)j(Library)l(,)f -(a)e(utilit)o(y)75 305 y(whic)o(h)14 b(aids)f(in)g(the)g(consistency)h -(of)e(user)h(in)o(terface)g(across)f(discrete)h(programs)f(that)g(need) -h(to)f(pro)o(vide)75 360 y(a)j(command)g(line)i(in)o(terface.)75 -427 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)75 482 y(59)h(T)l(emple)h(Place,)f(Suite)i(330,)75 -537 y(Boston,)d(MA)h(02111)f(USA)75 604 y(P)o(ermission)j(is)f(gran)o -(ted)g(to)f(mak)o(e)h(and)g(distribute)i(v)o(erbatim)d(copies)i(of)f -(this)h(man)o(ual)f(pro)o(vided)h(the)75 659 y(cop)o(yrigh)o(t)e -(notice)h(and)f(this)h(p)q(ermission)g(notice)g(are)f(preserv)o(ed)h -(on)f(all)h(copies.)75 726 y(P)o(ermission)c(is)h(gran)o(ted)e(to)g -(cop)o(y)h(and)g(distribute)h(mo)q(di\014ed)g(v)o(ersions)f(of)f(this)h -(man)o(ual)g(under)h(the)f(con-)75 781 y(ditions)k(for)e(v)o(erbatim)h -(cop)o(ying,)g(pro)o(vided)h(that)e(the)h(en)o(tire)h(resulting)g -(deriv)o(ed)g(w)o(ork)e(is)h(distributed)75 836 y(under)h(the)f(terms)g -(of)g(a)f(p)q(ermission)j(notice)f(iden)o(tical)h(to)e(this)g(one.)75 -903 y(P)o(ermission)i(is)g(gran)o(ted)f(to)g(cop)o(y)h(and)f -(distribute)i(translations)f(of)f(this)h(man)o(ual)g(in)o(to)f(another) -g(lan-)75 958 y(guage,)e(under)h(the)f(ab)q(o)o(v)o(e)g(conditions)i -(for)d(mo)q(di\014ed)j(v)o(ersions,)e(except)h(that)f(this)h(p)q -(ermission)g(notice)75 1013 y(ma)o(y)f(b)q(e)i(stated)f(in)h(a)f -(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l(ree)h(Soft)o(w)o(are) -d(F)l(oundation.)75 2661 y(Cop)o(yrigh)o(t)301 2660 y(c)289 -2661 y Fk(\015)i Fn(1988-1999)e(F)l(ree)i(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -%%Page: 1 3 -1 2 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(1)75 183 y Fj(1)41 b(Command)28 b(Line)e(Editing)137 -299 y Fn(This)16 b(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fi(gnu)g Fn(command)g(line)i(editing)f(in)o(terface.)75 -426 y Fl(1.1)33 b(In)n(tro)r(duction)24 b(to)e(Line)i(Editing)137 -522 y Fn(The)16 b(follo)o(wing)g(paragraphs)e(describ)q(e)j(the)e -(notation)g(used)h(to)e(represen)o(t)i(k)o(eystrok)o(es.)137 -589 y(The)h(text)327 587 y Fh(h)p 339 561 56 2 v 339 -589 a Fg(C-k)p 339 597 V 393 587 a Fh(i)424 589 y Fn(is)f(read)g(as)g -(`Con)o(trol-K')f(and)h(describ)q(es)i(the)e(c)o(haracter)g(pro)q -(duced)h(when)f(the)1831 587 y Fh(h)p 1844 561 19 2 v -1844 589 a Fg(k)p 1844 597 V 1860 587 a Fh(i)75 644 y -Fn(k)o(ey)f(is)h(pressed)g(while)g(the)f(Con)o(trol)g(k)o(ey)g(is)h -(depressed.)137 711 y(The)f(text)325 709 y Fh(h)p 337 -683 63 2 v 337 711 a Fg(M-k)p 337 719 V 397 709 a Fh(i)427 -711 y Fn(is)g(read)g(as)f(`Meta-K')g(and)h(describ)q(es)i(the)e(c)o -(haracter)f(pro)q(duced)i(when)f(the)g(Meta)75 766 y(k)o(ey)f(\(if)g(y) -o(ou)g(ha)o(v)o(e)g(one\))g(is)h(depressed,)g(and)f(the)930 -764 y Fh(h)p 942 738 19 2 v 942 766 a Fg(k)p 942 774 -V 958 764 a Fh(i)987 766 y Fn(k)o(ey)g(is)h(pressed.)20 -b(The)15 b(Meta)e(k)o(ey)h(is)h(lab)q(eled)1779 764 y -Fh(h)p 1791 738 72 2 v 1791 766 a Fg(AL)m(T)p 1791 774 -V 1860 764 a Fh(i)75 821 y Fn(on)e(man)o(y)g(k)o(eyb)q(oards.)19 -b(On)13 b(k)o(eyb)q(oards)g(with)h(t)o(w)o(o)e(k)o(eys)g(lab)q(eled) -1213 819 y Fh(h)p 1225 793 V 1225 821 a Fg(AL)m(T)p 1225 -828 V 1294 819 a Fh(i)1322 821 y Fn(\(usually)i(to)e(either)i(side)g -(of)f(the)75 876 y(space)j(bar\),)f(the)388 874 y Fh(h)p -400 847 V 400 876 a Fg(AL)m(T)p 400 883 V 469 874 a Fh(i)499 -876 y Fn(on)h(the)g(left)g(side)g(is)g(generally)h(set)f(to)f(w)o(ork)g -(as)g(a)g(Meta)g(k)o(ey)l(.)22 b(The)1697 874 y Fh(h)p -1709 847 V 1709 876 a Fg(AL)m(T)p 1709 883 V 1778 874 -a Fh(i)1808 876 y Fn(k)o(ey)75 930 y(on)17 b(the)f(righ)o(t)h(ma)o(y)f -(also)h(b)q(e)g(con\014gured)g(to)f(w)o(ork)g(as)g(a)h(Meta)f(k)o(ey)g -(or)g(ma)o(y)g(b)q(e)i(con\014gured)f(as)f(some)75 985 -y(other)f(mo)q(di\014er,)h(suc)o(h)f(as)g(a)g(Comp)q(ose)g(k)o(ey)g -(for)f(t)o(yping)i(accen)o(ted)f(c)o(haracters.)137 1052 -y(If)c(y)o(ou)g(do)g(not)f(ha)o(v)o(e)h(a)f(Meta)h(or)694 -1050 y Fh(h)p 706 1024 V 706 1052 a Fg(AL)m(T)p 706 1060 -V 775 1050 a Fh(i)801 1052 y Fn(k)o(ey)l(,)g(or)g(another)f(k)o(ey)h(w) -o(orking)f(as)h(a)f(Meta)h(k)o(ey)l(,)g(the)g(iden)o(tical)75 -1107 y(k)o(eystrok)o(e)f(can)i(b)q(e)f(generated)h(b)o(y)f(t)o(yping) -809 1105 y Fh(h)p 821 1079 70 2 v 821 1107 a Fg(ESC)p -821 1115 V 888 1105 a Fh(i)915 1107 y Ff(\014rst)p Fn(,)g(and)g(then)h -(t)o(yping)1339 1105 y Fh(h)p 1351 1079 19 2 v 1351 1107 -a Fg(k)p 1351 1115 V 1368 1105 a Fh(i)1383 1107 y Fn(.)18 -b(Either)12 b(pro)q(cess)f(is)h(kno)o(wn)75 1162 y(as)j -Ff(metafying)k Fn(the)425 1160 y Fh(h)p 437 1134 V 437 -1162 a Fg(k)p 437 1169 V 454 1160 a Fh(i)484 1162 y Fn(k)o(ey)l(.)137 -1229 y(The)h(text)334 1227 y Fh(h)p 347 1201 100 2 v -347 1229 a Fg(M-C-k)p 347 1236 V 444 1227 a Fh(i)479 -1229 y Fn(is)g(read)g(as)f(`Meta-Con)o(trol-k')f(and)i(describ)q(es)h -(the)f(c)o(haracter)f(pro)q(duced)i(b)o(y)75 1283 y Ff(metafying)291 -1281 y Fh(h)p 303 1255 56 2 v 303 1283 a Fg(C-k)p 303 -1291 V 357 1281 a Fh(i)372 1283 y Fn(.)137 1350 y(In)e(addition,)h(sev) -o(eral)f(k)o(eys)f(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)30 -b(Sp)q(eci\014cally)l(,)1384 1348 y Fh(h)p 1396 1322 -73 2 v 1396 1350 a Fg(DEL)p 1396 1358 V 1467 1348 a Fh(i)1482 -1350 y Fn(,)1514 1348 y Fh(h)p 1526 1322 70 2 v 1526 -1350 a Fg(ESC)p 1526 1358 V 1593 1348 a Fh(i)1608 1350 -y Fn(,)1640 1348 y Fh(h)p 1652 1322 72 2 v 1652 1350 -a Fg(LFD)p 1652 1358 V 1722 1348 a Fh(i)1737 1350 y Fn(,)1768 -1348 y Fh(h)p 1780 1322 70 2 v 1780 1350 a Fg(SPC)p 1780 -1358 V 1847 1348 a Fh(i)1862 1350 y Fn(,)75 1403 y Fh(h)p -87 1377 76 2 v 87 1405 a Fg(RET)p 87 1413 V 160 1403 -a Fh(i)175 1405 y Fn(,)23 b(and)306 1403 y Fh(h)p 318 -1377 74 2 v 318 1405 a Fg(T)m(AB)p 318 1413 V 390 1403 -a Fh(i)427 1405 y Fn(all)f(stand)g(for)f(themselv)o(es)h(when)h(seen)f -(in)g(this)g(text,)h(or)e(in)i(an)e(init)i(\014le)g(\(see)75 -1460 y(Section)d(1.3)f([Readline)i(Init)f(File],)h(page)e(4\).)32 -b(If)19 b(y)o(our)g(k)o(eyb)q(oard)h(lac)o(ks)f(a)1444 -1458 y Fh(h)p 1456 1432 72 2 v 1456 1460 a Fg(LFD)p 1456 -1468 V 1526 1458 a Fh(i)1560 1460 y Fn(k)o(ey)l(,)h(t)o(yping)1802 -1458 y Fh(h)p 1814 1432 49 2 v 1814 1460 a Fg(C-j)p 1814 -1468 V 1860 1458 a Fh(i)75 1515 y Fn(will)c(pro)q(duce)g(the)f(desired) -h(c)o(haracter.)j(The)874 1513 y Fh(h)p 886 1487 76 2 -v 886 1515 a Fg(RET)p 886 1522 V 959 1513 a Fh(i)989 -1515 y Fn(k)o(ey)c(ma)o(y)f(b)q(e)h(lab)q(eled)1385 1513 -y Fh(h)p 1397 1487 109 2 v 1397 1515 a Fg(Return)p 1397 -1522 V 1503 1513 a Fh(i)1533 1515 y Fn(or)1588 1513 y -Fh(h)p 1600 1487 86 2 v 1600 1515 a Fg(En)o(ter)p 1600 -1522 V 1684 1513 a Fh(i)1714 1515 y Fn(on)f(some)75 1569 -y(k)o(eyb)q(oards.)75 1697 y Fl(1.2)33 b(Readline)23 -b(In)n(teraction)137 1793 y Fn(Often)13 b(during)h(an)e(in)o(teractiv)o -(e)h(session)g(y)o(ou)g(t)o(yp)q(e)f(in)i(a)e(long)h(line)h(of)e(text,) -h(only)g(to)f(notice)h(that)f(the)75 1848 y(\014rst)k(w)o(ord)f(on)h -(the)h(line)h(is)e(missp)q(elled.)26 b(The)16 b(Readline)j(library)e -(giv)o(es)f(y)o(ou)g(a)g(set)g(of)g(commands)g(for)75 -1903 y(manipulating)g(the)f(text)g(as)f(y)o(ou)h(t)o(yp)q(e)g(it)g(in,) -g(allo)o(wing)h(y)o(ou)f(to)f(just)h(\014x)g(y)o(our)f(t)o(yp)q(o,)g -(and)h(not)g(forcing)75 1958 y(y)o(ou)f(to)f(ret)o(yp)q(e)h(the)g(ma)s -(jorit)o(y)f(of)h(the)g(line.)21 b(Using)15 b(these)f(editing)h -(commands,)f(y)o(ou)g(mo)o(v)o(e)f(the)h(cursor)75 2012 -y(to)i(the)i(place)g(that)e(needs)i(correction,)g(and)f(delete)h(or)f -(insert)g(the)h(text)e(of)h(the)g(corrections.)26 b(Then,)75 -2067 y(when)16 b(y)o(ou)f(are)h(satis\014ed)g(with)g(the)f(line,)i(y)o -(ou)e(simply)i(press)1160 2065 y Fh(h)p 1172 2039 155 -2 v 1172 2067 a Fg(RETURN)p 1172 2075 V 1324 2065 a Fh(i)1339 -2067 y Fn(.)k(Y)l(ou)16 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i(at)75 -2122 y(the)g(end)g(of)f(the)g(line)i(to)e(press)634 2120 -y Fh(h)p 646 2094 V 646 2122 a Fg(RETURN)p 646 2130 V -798 2120 a Fh(i)813 2122 y Fn(;)g(the)h(en)o(tire)g(line)h(is)f -(accepted)g(regardless)g(of)f(the)g(lo)q(cation)75 2177 -y(of)f(the)g(cursor)g(within)h(the)g(line.)75 2288 y -Fe(1.2.1)30 b(Readline)20 b(Bare)g(Essen)n(tials)137 -2384 y Fn(In)12 b(order)g(to)f(en)o(ter)g(c)o(haracters)g(in)o(to)g -(the)h(line,)h(simply)g(t)o(yp)q(e)f(them.)18 b(The)12 -b(t)o(yp)q(ed)g(c)o(haracter)f(app)q(ears)75 2439 y(where)16 -b(the)h(cursor)f(w)o(as,)f(and)h(then)h(the)f(cursor)g(mo)o(v)o(es)g -(one)g(space)g(to)g(the)g(righ)o(t.)23 b(If)17 b(y)o(ou)f(mist)o(yp)q -(e)g(a)75 2493 y(c)o(haracter,)e(y)o(ou)h(can)g(use)h(y)o(our)f(erase)g -(c)o(haracter)f(to)h(bac)o(k)g(up)g(and)h(delete)g(the)f(mist)o(yp)q -(ed)h(c)o(haracter.)137 2560 y(Sometimes)g(y)o(ou)f(ma)o(y)g(mist)o(yp) -q(e)h(a)f(c)o(haracter,)f(and)i(not)f(notice)h(the)f(error)g(un)o(til)i -(y)o(ou)e(ha)o(v)o(e)g(t)o(yp)q(ed)75 2615 y(sev)o(eral)f(other)f(c)o -(haracters.)19 b(In)14 b(that)g(case,)f(y)o(ou)h(can)g(t)o(yp)q(e)1102 -2613 y Fh(h)p 1114 2587 57 2 v 1114 2615 a Fg(C-b)p 1114 -2623 V 1168 2613 a Fh(i)1197 2615 y Fn(to)f(mo)o(v)o(e)g(the)h(cursor)g -(to)f(the)h(left,)g(and)75 2670 y(then)i(correct)e(y)o(our)h(mistak)o -(e.)20 b(Afterw)o(ards,)13 b(y)o(ou)i(can)g(mo)o(v)o(e)g(the)g(cursor)g -(to)g(the)g(righ)o(t)g(with)1714 2668 y Fh(h)p 1727 2642 -49 2 v 1727 2670 a Fg(C-f)p 1727 2678 V 1772 2668 a Fh(i)1787 -2670 y Fn(.)p eop -%%Page: 2 4 -2 3 bop 75 -58 a Fn(2)1322 b(GNU)15 b(Readline)i(Library)137 -183 y(When)g(y)o(ou)f(add)g(text)g(in)h(the)g(middle)h(of)e(a)f(line,)j -(y)o(ou)e(will)i(notice)f(that)f(c)o(haracters)f(to)h(the)g(righ)o(t)75 -238 y(of)e(the)g(cursor)g(are)g(`pushed)h(o)o(v)o(er')f(to)f(mak)o(e)h -(ro)q(om)g(for)f(the)i(text)f(that)f(y)o(ou)h(ha)o(v)o(e)g(inserted.)21 -b(Lik)o(ewise,)75 293 y(when)e(y)o(ou)g(delete)h(text)e(b)q(ehind)j -(the)e(cursor,)g(c)o(haracters)f(to)g(the)h(righ)o(t)f(of)g(the)h -(cursor)g(are)f(`pulled)75 348 y(bac)o(k')11 b(to)g(\014ll)h(in)h(the)e -(blank)h(space)g(created)f(b)o(y)h(the)f(remo)o(v)m(al)g(of)g(the)h -(text.)18 b(A)11 b(list)h(of)f(the)h(bare)f(essen)o(tials)75 -402 y(for)k(editing)h(the)f(text)g(of)g(an)g(input)h(line)h(follo)o -(ws.)75 479 y Fh(h)p 87 453 57 2 v 87 481 a Fg(C-b)p -87 489 V 142 479 a Fh(i)315 481 y Fn(Mo)o(v)o(e)d(bac)o(k)h(one)h(c)o -(haracter.)75 558 y Fh(h)p 87 532 49 2 v 87 560 a Fg(C-f)p -87 567 V 133 558 a Fh(i)315 560 y Fn(Mo)o(v)o(e)e(forw)o(ard)g(one)h(c) -o(haracter.)75 636 y Fh(h)p 87 610 73 2 v 87 638 a Fg(DEL)p -87 646 V 158 636 a Fh(i)188 638 y Fn(or)244 636 y Fh(h)p -256 610 159 2 v 256 638 a Fg(Bac)o(kspace)p 256 646 V -412 636 a Fh(i)315 693 y Fn(Delete)h(the)f(c)o(haracter)g(to)f(the)h -(left)h(of)f(the)g(cursor.)75 770 y Fh(h)p 87 744 57 -2 v 87 772 a Fg(C-d)p 87 779 V 142 770 a Fh(i)315 772 -y Fn(Delete)h(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)75 -850 y(Prin)o(ting)h(c)o(haracters)315 905 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)75 -981 y Fh(h)p 87 955 50 2 v 87 983 a Fg(C-)p 126 983 11 -2 v 87 991 50 2 v 135 981 a Fh(i)165 983 y Fn(or)221 -981 y Fh(h)p 233 955 125 2 v 233 983 a Fg(C-x)c(C-u)p -233 991 V 355 981 a Fh(i)315 1038 y Fn(Undo)17 b(the)g(last)f(editing)i -(command.)25 b(Y)l(ou)17 b(can)g(undo)g(all)g(the)g(w)o(a)o(y)f(bac)o -(k)h(to)f(an)g(empt)o(y)315 1093 y(line.)75 1172 y(\(Dep)q(ending)i(on) -f(y)o(our)g(con\014guration,)g(the)863 1170 y Fh(h)p -875 1144 159 2 v 875 1172 a Fg(Bac)o(kspace)p 875 1179 -V 1032 1170 a Fh(i)1063 1172 y Fn(k)o(ey)g(b)q(e)h(set)f(to)f(delete)i -(the)f(c)o(haracter)g(to)f(the)75 1226 y(left)h(of)f(the)h(cursor)f -(and)g(the)596 1224 y Fh(h)p 608 1198 73 2 v 608 1226 -a Fg(DEL)p 608 1234 V 679 1224 a Fh(i)710 1226 y Fn(k)o(ey)h(set)f(to)g -(delete)h(the)g(c)o(haracter)f(underneath)h(the)g(cursor,)f(lik)o(e)75 -1279 y Fh(h)p 87 1253 57 2 v 87 1281 a Fg(C-d)p 87 1289 -V 142 1279 a Fh(i)157 1281 y Fn(,)f(rather)f(than)h(the)h(c)o(haracter) -e(to)h(the)g(left)g(of)g(the)g(cursor.\))75 1392 y Fe(1.2.2)30 -b(Readline)20 b(Mo)n(v)n(emen)n(t)i(Commands)137 1487 -y Fn(The)14 b(ab)q(o)o(v)o(e)e(table)i(describ)q(es)g(the)g(most)e -(basic)i(k)o(eystrok)o(es)d(that)i(y)o(ou)g(need)h(in)f(order)g(to)g -(do)g(editing)75 1542 y(of)f(the)h(input)h(line.)21 b(F)l(or)12 -b(y)o(our)g(con)o(v)o(enience,)i(man)o(y)f(other)f(commands)h(ha)o(v)o -(e)f(b)q(een)i(added)f(in)h(addition)75 1597 y(to)130 -1595 y Fh(h)p 142 1569 V 142 1597 a Fg(C-b)p 142 1605 -V 197 1595 a Fh(i)212 1597 y Fn(,)239 1595 y Fh(h)p 251 -1569 49 2 v 251 1597 a Fg(C-f)p 251 1605 V 297 1595 a -Fh(i)312 1597 y Fn(,)339 1595 y Fh(h)p 351 1569 57 2 -v 351 1597 a Fg(C-d)p 351 1605 V 406 1595 a Fh(i)421 -1597 y Fn(,)g(and)536 1595 y Fh(h)p 548 1569 73 2 v 548 -1597 a Fg(DEL)p 548 1605 V 619 1595 a Fh(i)634 1597 y -Fn(.)20 b(Here)15 b(are)f(some)g(commands)h(for)f(mo)o(ving)g(more)h -(rapidly)g(ab)q(out)g(the)75 1652 y(line.)75 1728 y Fh(h)p -87 1702 55 2 v 87 1730 a Fg(C-a)p 87 1738 V 140 1728 -a Fh(i)315 1730 y Fn(Mo)o(v)o(e)f(to)h(the)g(start)f(of)h(the)g(line.) -75 1807 y Fh(h)p 87 1781 53 2 v 87 1809 a Fg(C-e)p 87 -1817 V 138 1807 a Fh(i)315 1809 y Fn(Mo)o(v)o(e)f(to)h(the)g(end)h(of)f -(the)g(line.)75 1885 y Fh(h)p 87 1859 55 2 v 87 1887 -a Fg(M-f)p 87 1895 V 140 1885 a Fh(i)315 1887 y Fn(Mo)o(v)o(e)f(forw)o -(ard)g(a)h(w)o(ord,)f(where)i(a)e(w)o(ord)h(is)h(comp)q(osed)f(of)g -(letters)g(and)h(digits.)75 1964 y Fh(h)p 87 1938 64 -2 v 87 1966 a Fg(M-b)p 87 1974 V 149 1964 a Fh(i)315 -1966 y Fn(Mo)o(v)o(e)e(bac)o(kw)o(ard)h(a)g(w)o(ord.)75 -2043 y Fh(h)p 87 2017 48 2 v 87 2045 a Fg(C-l)p 87 2052 -V 132 2043 a Fh(i)315 2045 y Fn(Clear)g(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)137 2123 y(Notice)d(ho)o(w) -368 2121 y Fh(h)p 380 2095 49 2 v 380 2123 a Fg(C-f)p -380 2131 V 426 2121 a Fh(i)452 2123 y Fn(mo)o(v)o(es)f(forw)o(ard)f(a)i -(c)o(haracter,)f(while)1105 2121 y Fh(h)p 1117 2095 55 -2 v 1117 2123 a Fg(M-f)p 1117 2131 V 1170 2121 a Fh(i)1197 -2123 y Fn(mo)o(v)o(es)f(forw)o(ard)h(a)g(w)o(ord.)18 -b(It)12 b(is)g(a)g(lo)q(ose)75 2178 y(con)o(v)o(en)o(tion)j(that)f(con) -o(trol)h(k)o(eystrok)o(es)f(op)q(erate)h(on)f(c)o(haracters)h(while)h -(meta)e(k)o(eystrok)o(es)g(op)q(erate)h(on)75 2233 y(w)o(ords.)75 -2343 y Fe(1.2.3)30 b(Readline)20 b(Killing)h(Commands)137 -2439 y Ff(Killing)26 b Fn(text)18 b(means)g(to)g(delete)i(the)f(text)f -(from)g(the)h(line,)i(but)d(to)g(sa)o(v)o(e)g(it)h(a)o(w)o(a)o(y)e(for) -h(later)h(use,)75 2494 y(usually)f(b)o(y)f Ff(y)o(anking)22 -b Fn(\(re-inserting\))17 b(it)g(bac)o(k)g(in)o(to)g(the)h(line.)27 -b(\(`Cut')15 b(and)j(`paste')e(are)g(more)h(recen)o(t)75 -2549 y(jargon)d(for)h(`kill')h(and)g(`y)o(ank'.\))137 -2615 y(If)g(the)f(description)h(for)f(a)g(command)g(sa)o(ys)f(that)h -(it)g(`kills')h(text,)e(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)f(y)o -(ou)75 2670 y(can)h(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o -(t)g(\(or)g(the)g(same\))g(place)h(later.)p eop -%%Page: 3 5 -3 4 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(3)137 183 y(When)12 b(y)o(ou)g(use)g(a)f(kill)i(command,)f(the)g -(text)f(is)h(sa)o(v)o(ed)f(in)i(a)e Ff(kill-ring)p Fn(.)21 -b(An)o(y)12 b(n)o(um)o(b)q(er)g(of)f(consecutiv)o(e)75 -238 y(kills)17 b(sa)o(v)o(e)e(all)h(of)f(the)h(killed)i(text)d -(together,)f(so)h(that)g(when)h(y)o(ou)f(y)o(ank)g(it)h(bac)o(k,)f(y)o -(ou)g(get)g(it)h(all.)22 b(The)75 293 y(kill)c(ring)f(is)f(not)g(line)i -(sp)q(eci\014c;)g(the)e(text)g(that)f(y)o(ou)h(killed)j(on)d(a)g -(previously)h(t)o(yp)q(ed)g(line)h(is)e(a)o(v)m(ailable)75 -348 y(to)f(b)q(e)g(y)o(ank)o(ed)g(bac)o(k)h(later,)e(when)i(y)o(ou)f -(are)g(t)o(yping)g(another)g(line.)137 415 y(Here)h(is)f(the)h(list)g -(of)e(commands)h(for)g(killing)j(text.)75 492 y Fh(h)p -87 466 56 2 v 87 494 a Fg(C-k)p 87 502 V 141 492 a Fh(i)315 -494 y Fn(Kill)f(the)f(text)e(from)h(the)g(curren)o(t)g(cursor)g(p)q -(osition)h(to)f(the)g(end)h(of)f(the)g(line.)75 571 y -Fh(h)p 87 545 64 2 v 87 573 a Fg(M-d)p 87 581 V 149 571 -a Fh(i)315 573 y Fn(Kill)g(from)e(the)g(cursor)g(to)f(the)i(end)g(of)e -(the)i(curren)o(t)f(w)o(ord,)f(or,)h(if)g(b)q(et)o(w)o(een)h(w)o(ords,) -e(to)h(the)315 628 y(end)j(of)f(the)g(next)g(w)o(ord.)k(W)l(ord)c(b)q -(oundaries)i(are)e(the)g(same)g(as)g(those)f(used)i(b)o(y)1728 -626 y Fh(h)p 1740 600 55 2 v 1740 628 a Fg(M-f)p 1740 -636 V 1793 626 a Fh(i)1808 628 y Fn(.)75 705 y Fh(h)p -87 679 118 2 v 87 707 a Fg(M-DEL)p 87 715 V 202 705 a -Fh(i)315 707 y Fn(Kill)21 b(from)e(the)g(cursor)f(the)h(start)f(of)h -(the)g(previous)h(w)o(ord,)f(or,)g(if)g(b)q(et)o(w)o(een)h(w)o(ords,)f -(to)315 762 y(the)14 b(start)f(of)g(the)h(previous)g(w)o(ord.)19 -b(W)l(ord)14 b(b)q(oundaries)h(are)e(the)h(same)g(as)f(those)h(used)g -(b)o(y)315 815 y Fh(h)p 327 789 64 2 v 327 817 a Fg(M-b)p -327 825 V 389 815 a Fh(i)404 817 y Fn(.)75 894 y Fh(h)p -87 868 63 2 v 87 896 a Fg(C-w)p 87 904 V 148 894 a Fh(i)315 -896 y Fn(Kill)k(from)d(the)h(cursor)g(to)f(the)h(previous)h -(whitespace.)22 b(This)17 b(is)f(di\013eren)o(t)g(than)1733 -894 y Fh(h)p 1745 868 118 2 v 1745 896 a Fg(M-DEL)p 1745 -904 V 1860 894 a Fh(i)315 951 y Fn(b)q(ecause)g(the)f(w)o(ord)g(b)q -(oundaries)h(di\013er.)137 1030 y(Here)21 b(is)h(ho)o(w)e(to)g -Ff(y)o(ank)j Fn(the)e(text)f(bac)o(k)h(in)o(to)g(the)f(line.)39 -b(Y)l(anking)21 b(means)g(to)f(cop)o(y)h(the)g(most-)75 -1085 y(recen)o(tly-killed)d(text)d(from)f(the)i(kill)h(bu\013er.)75 -1163 y Fh(h)p 87 1137 56 2 v 87 1165 a Fg(C-y)p 87 1172 -V 141 1163 a Fh(i)315 1165 y Fn(Y)l(ank)e(the)h(most)e(recen)o(tly)i -(killed)h(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i -(cursor.)75 1242 y Fh(h)p 87 1216 63 2 v 87 1244 a Fg(M-y)p -87 1252 V 148 1242 a Fh(i)315 1244 y Fn(Rotate)h(the)g(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 1299 y(command)d(is)568 -1297 y Fh(h)p 580 1271 56 2 v 580 1299 a Fg(C-y)p 580 -1306 V 634 1297 a Fh(i)664 1299 y Fn(or)719 1297 y Fh(h)p -732 1271 63 2 v 732 1299 a Fg(M-y)p 732 1306 V 792 1297 -a Fh(i)807 1299 y Fn(.)75 1410 y Fe(1.2.4)30 b(Readline)20 -b(Argumen)n(ts)137 1506 y Fn(Y)l(ou)15 b(can)g(pass)f(n)o(umeric)i -(argumen)o(ts)e(to)g(Readline)i(commands.)k(Sometimes)15 -b(the)g(argumen)o(t)e(acts)75 1561 y(as)20 b(a)g(rep)q(eat)g(coun)o(t,) -h(other)f(times)g(it)h(is)g(the)f Ff(sign)h Fn(of)f(the)g(argumen)o(t)f -(that)h(is)h(signi\014can)o(t.)36 b(If)20 b(y)o(ou)75 -1616 y(pass)d(a)f(negativ)o(e)h(argumen)o(t)f(to)g(a)g(command)h(whic)o -(h)h(normally)f(acts)f(in)i(a)e(forw)o(ard)g(direction,)i(that)75 -1671 y(command)g(will)h(act)e(in)i(a)e(bac)o(kw)o(ard)g(direction.)28 -b(F)l(or)17 b(example,)i(to)e(kill)j(text)d(bac)o(k)g(to)g(the)h(start) -e(of)75 1726 y(the)f(line,)i(y)o(ou)e(migh)o(t)g(t)o(yp)q(e)g(`)p -Fm(M--)f(C-k)p Fn('.)137 1793 y(The)h(general)f(w)o(a)o(y)f(to)h(pass)g -(n)o(umeric)h(argumen)o(ts)e(to)g(a)h(command)g(is)h(to)e(t)o(yp)q(e)h -(meta)g(digits)h(b)q(efore)75 1847 y(the)h(command.)k(If)c(the)f -(\014rst)g(`digit')h(t)o(yp)q(ed)f(is)h(a)g(min)o(us)g(sign)g(\(`)p -Fm(-)p Fn('\),)d(then)j(the)f(sign)h(of)f(the)h(argumen)o(t)75 -1902 y(will)g(b)q(e)f(negativ)o(e.)k(Once)c(y)o(ou)f(ha)o(v)o(e)g(t)o -(yp)q(ed)g(one)h(meta)e(digit)i(to)f(get)f(the)h(argumen)o(t)g -(started,)f(y)o(ou)h(can)75 1957 y(t)o(yp)q(e)19 b(the)g(remainder)g -(of)f(the)h(digits,)h(and)f(then)g(the)g(command.)30 -b(F)l(or)18 b(example,)i(to)e(giv)o(e)h(the)1793 1955 -y Fh(h)p 1805 1929 57 2 v 1805 1957 a Fg(C-d)p 1805 1965 -V 1860 1955 a Fh(i)75 2012 y Fn(command)c(an)g(argumen)o(t)g(of)f(10,)h -(y)o(ou)f(could)j(t)o(yp)q(e)e(`)p Fm(M-1)f(0)h(C-d)p -Fn('.)75 2123 y Fe(1.2.5)30 b(Searc)n(hing)21 b(for)f(Commands)h(in)f -(the)h(History)137 2219 y Fn(Readline)e(pro)o(vides)d(commands)g(for)g -(searc)o(hing)g(through)g(the)g(command)g(history)g(for)g(lines)i(con-) -75 2274 y(taining)e(a)f(sp)q(eci\014ed)i(string.)j(There)c(are)e(t)o(w) -o(o)g(searc)o(h)h(mo)q(des:)20 b Ff(incremen)o(tal)e -Fn(and)e Ff(non-incremen)o(tal)p Fn(.)137 2341 y(Incremen)o(tal)e -(searc)o(hes)f(b)q(egin)h(b)q(efore)f(the)g(user)g(has)g(\014nished)h -(t)o(yping)f(the)g(searc)o(h)g(string.)19 b(As)13 b(eac)o(h)75 -2396 y(c)o(haracter)k(of)g(the)h(searc)o(h)g(string)f(is)h(t)o(yp)q -(ed,)h(Readline)h(displa)o(ys)e(the)g(next)g(en)o(try)f(from)g(the)h -(history)75 2451 y(matc)o(hing)12 b(the)g(string)g(t)o(yp)q(ed)g(so)g -(far.)18 b(An)13 b(incremen)o(tal)g(searc)o(h)f(requires)g(only)h(as)f -(man)o(y)f(c)o(haracters)g(as)75 2506 y(needed)16 b(to)d(\014nd)j(the)e -(desired)i(history)e(en)o(try)l(.)19 b(T)l(o)c(searc)o(h)f(bac)o(kw)o -(ard)f(in)j(the)e(history)g(for)g(a)g(particular)75 2560 -y(string,)g(t)o(yp)q(e)317 2558 y Fh(h)p 329 2532 51 -2 v 329 2560 a Fg(C-r)p 329 2568 V 378 2558 a Fh(i)393 -2560 y Fn(.)19 b(T)o(yping)580 2558 y Fh(h)p 592 2532 -52 2 v 592 2560 a Fg(C-s)p 592 2568 V 641 2558 a Fh(i)670 -2560 y Fn(searc)o(hes)14 b(forw)o(ard)f(through)g(the)h(history)l(.)20 -b(The)14 b(c)o(haracters)f(presen)o(t)75 2615 y(in)20 -b(the)f(v)m(alue)h(of)f(the)g Fm(isearch-terminators)d -Fn(v)m(ariable)k(are)f(used)h(to)e(terminate)h(an)g(incremen)o(tal)75 -2670 y(searc)o(h.)29 b(If)19 b(that)e(v)m(ariable)j(has)e(not)g(b)q -(een)i(assigned)f(a)f(v)m(alue,)i(the)1282 2668 y Fh(h)p -1294 2642 70 2 v 1294 2670 a Fg(ESC)p 1294 2678 V 1361 -2668 a Fh(i)1395 2670 y Fn(and)1486 2668 y Fh(h)p 1498 -2642 56 2 v 1498 2670 a Fg(C-J)p 1498 2678 V 1551 2668 -a Fh(i)1585 2670 y Fn(c)o(haracters)d(will)p eop -%%Page: 4 6 -4 5 bop 75 -58 a Fn(4)1322 b(GNU)15 b(Readline)i(Library)75 -183 y(terminate)k(an)f(incremen)o(tal)i(searc)o(h.)780 -181 y Fh(h)p 792 155 55 2 v 792 183 a Fg(C-g)p 792 191 -V 845 181 a Fh(i)880 183 y Fn(will)g(ab)q(ort)e(an)h(incremen)o(tal)h -(searc)o(h)e(and)h(restore)f(the)75 238 y(original)c(line.)21 -b(When)15 b(the)f(searc)o(h)g(is)h(terminated,)g(the)f(history)h(en)o -(try)f(con)o(taining)h(the)g(searc)o(h)f(string)75 293 -y(b)q(ecomes)i(the)f(curren)o(t)g(line.)137 357 y(T)l(o)g(\014nd)h -(other)e(matc)o(hing)h(en)o(tries)h(in)f(the)g(history)g(list,)h(t)o -(yp)q(e)1231 355 y Fh(h)p 1243 329 51 2 v 1243 357 a -Fg(C-r)p 1243 364 V 1292 355 a Fh(i)1322 357 y Fn(or)1377 -355 y Fh(h)p 1389 329 52 2 v 1389 357 a Fg(C-s)p 1389 -364 V 1438 355 a Fh(i)1468 357 y Fn(as)f(appropriate.)k(This)75 -412 y(will)c(searc)o(h)e(bac)o(kw)o(ard)f(or)g(forw)o(ard)g(in)i(the)f -(history)g(for)g(the)g(next)g(en)o(try)g(matc)o(hing)g(the)g(searc)o(h) -g(string)75 466 y(t)o(yp)q(ed)19 b(so)g(far.)30 b(An)o(y)19 -b(other)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e(a)h(Readline)i(command)d -(will)j(terminate)e(the)75 521 y(searc)o(h)h(and)h(execute)g(that)f -(command.)35 b(F)l(or)20 b(instance,)i(a)1151 519 y Fh(h)p -1163 493 76 2 v 1163 521 a Fg(RET)p 1163 529 V 1236 519 -a Fh(i)1271 521 y Fn(will)g(terminate)f(the)f(searc)o(h)h(and)75 -576 y(accept)15 b(the)h(line,)g(thereb)o(y)f(executing)i(the)e(command) -g(from)g(the)g(history)g(list.)137 640 y(Non-incremen)o(tal)25 -b(searc)o(hes)e(read)h(the)f(en)o(tire)h(searc)o(h)f(string)g(b)q -(efore)h(starting)f(to)f(searc)o(h)i(for)75 695 y(matc)o(hing)d -(history)h(lines.)39 b(The)22 b(searc)o(h)f(string)g(ma)o(y)g(b)q(e)h -(t)o(yp)q(ed)f(b)o(y)h(the)f(user)h(or)e(b)q(e)i(part)f(of)g(the)75 -750 y(con)o(ten)o(ts)15 b(of)f(the)i(curren)o(t)f(line.)75 -868 y Fl(1.3)33 b(Readline)23 b(Init)h(File)137 961 y -Fn(Although)f(the)g(Readline)i(library)e(comes)g(with)g(a)f(set)g(of)g -(Emacs-lik)o(e)i(k)o(eybindings)g(installed)75 1016 y(b)o(y)d(default,) -h(it)f(is)h(p)q(ossible)g(to)e(use)i(a)e(di\013eren)o(t)h(set)g(of)f(k) -o(eybindings.)39 b(An)o(y)20 b(user)h(can)g(customize)75 -1071 y(programs)15 b(that)h(use)g(Readline)j(b)o(y)d(putting)g -(commands)g(in)i(an)e Ff(inputrc)k Fn(\014le,)d(con)o(v)o(en)o -(tionally)g(in)g(his)75 1126 y(home)g(directory)l(.)24 -b(The)17 b(name)g(of)f(this)h(\014le)g(is)g(tak)o(en)g(from)e(the)i(v)m -(alue)h(of)e(the)h(en)o(vironmen)o(t)g(v)m(ariable)75 -1181 y Fm(INPUTRC)p Fn(.)i(If)c(that)g(v)m(ariable)h(is)g(unset,)f(the) -g(default)h(is)g(`)p Fm(~/.inputrc)p Fn('.)137 1244 y(When)f(a)g -(program)f(whic)o(h)h(uses)g(the)g(Readline)i(library)f(starts)d(up,)i -(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)75 1299 -y(k)o(ey)g(bindings)i(are)e(set.)137 1363 y(In)f(addition,)h(the)e -Fm(C-x)i(C-r)e Fn(command)g(re-reads)h(this)g(init)g(\014le,)h(th)o(us) -e(incorp)q(orating)h(an)o(y)f(c)o(hanges)75 1418 y(that)h(y)o(ou)h -(migh)o(t)g(ha)o(v)o(e)g(made)g(to)g(it.)75 1520 y Fe(1.3.1)30 -b(Readline)20 b(Init)g(File)h(Syn)n(tax)137 1613 y Fn(There)c(are)g -(only)g(a)g(few)f(basic)i(constructs)e(allo)o(w)o(ed)i(in)f(the)g -(Readline)i(init)f(\014le.)26 b(Blank)18 b(lines)g(are)75 -1668 y(ignored.)36 b(Lines)22 b(b)q(eginning)h(with)d(a)h(`)p -Fm(#)p Fn(')e(are)h(commen)o(ts.)35 b(Lines)22 b(b)q(eginning)h(with)e -(a)f(`)p Fm($)p Fn(')f(indicate)75 1723 y(conditional)c(constructs)f -(\(see)g(Section)g(1.3.2)f([Conditional)h(Init)h(Constructs],)e(page)h -(8\).)k(Other)c(lines)75 1778 y(denote)h(v)m(ariable)i(settings)e(and)h -(k)o(ey)f(bindings.)75 1851 y(V)l(ariable)h(Settings)315 -1906 y(Y)l(ou)k(can)h(mo)q(dify)g(the)f(run-time)h(b)q(eha)o(vior)g(of) -e(Readline)k(b)o(y)d(altering)h(the)f(v)m(alues)h(of)315 -1960 y(v)m(ariables)13 b(in)g(Readline)i(using)d(the)g -Fm(set)g Fn(command)g(within)h(the)f(init)h(\014le.)20 -b(Here)13 b(is)f(ho)o(w)g(to)315 2015 y(c)o(hange)e(from)g(the)g -(default)h(Emacs-lik)o(e)g(k)o(ey)f(binding)i(to)e(use)g -Fm(vi)g Fn(line)i(editing)g(commands:)435 2076 y Fm(set)23 -b(editing-mode)g(vi)315 2140 y Fn(A)15 b(great)g(deal)g(of)g(run-time)h -(b)q(eha)o(vior)g(is)g(c)o(hangeable)g(with)f(the)h(follo)o(wing)f(v)m -(ariables.)315 2213 y Fm(bell-style)555 2268 y Fn(Con)o(trols)21 -b(what)h(happ)q(ens)h(when)f(Readline)i(w)o(an)o(ts)d(to)g(ring)i(the)f -(termi-)555 2323 y(nal)d(b)q(ell.)32 b(If)19 b(set)f(to)g(`)p -Fm(none)p Fn(',)g(Readline)j(nev)o(er)e(rings)g(the)f(b)q(ell.)32 -b(If)19 b(set)g(to)555 2378 y(`)p Fm(visible)p Fn(',)c(Readline)j(uses) -f(a)f(visible)j(b)q(ell)g(if)e(one)f(is)h(a)o(v)m(ailable.)26 -b(If)16 b(set)h(to)555 2432 y(`)p Fm(audible)p Fn(')g(\(the)h -(default\),)i(Readline)h(attempts)d(to)g(ring)h(the)g(terminal's)555 -2487 y(b)q(ell.)315 2560 y Fm(comment-begin)555 2615 -y Fn(The)c(string)f(to)g(insert)i(at)d(the)i(b)q(eginning)i(of)d(the)h -(line)h(when)f(the)g Fm(insert-)555 2670 y(comment)f -Fn(command)h(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g -Fm("#")p Fn(.)p eop -%%Page: 5 7 -5 6 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(5)315 183 y Fm(completion-ignore-case)555 238 y Fn(If)14 -b(set)f(to)g(`)p Fm(on)p Fn(',)g(Readline)j(p)q(erforms)d(\014lename)i -(matc)o(hing)f(and)g(completion)555 293 y(in)i(a)f(case-insensitiv)o(e) -i(fashion.)k(The)15 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p -Fn('.)315 384 y Fm(completion-query-items)555 439 y Fn(The)d(n)o(um)o -(b)q(er)h(of)e(p)q(ossible)j(completions)g(that)d(determines)i(when)g -(the)f(user)555 494 y(is)21 b(ask)o(ed)g(whether)g(he)h(w)o(an)o(ts)d -(to)i(see)g(the)g(list)h(of)e(p)q(ossibilitie)q(s.)40 -b(If)21 b(the)555 549 y(n)o(um)o(b)q(er)14 b(of)f(p)q(ossible)i -(completions)f(is)g(greater)f(than)g(this)h(v)m(alue,)h(Readline)555 -604 y(will)g(ask)e(the)g(user)h(whether)f(or)g(not)g(he)g(wishes)h(to)f -(view)h(them;)f(otherwise,)555 658 y(they)i(are)g(simply)i(listed.)k -(The)15 b(default)h(limit)h(is)e Fm(100)p Fn(.)315 750 -y Fm(convert-meta)555 805 y Fn(If)i(set)g(to)g(`)p Fm(on)p -Fn(',)f(Readline)k(will)e(con)o(v)o(ert)f(c)o(haracters)f(with)i(the)f -(eigh)o(th)g(bit)555 860 y(set)f(to)f(an)h(ASCI)q(I)h(k)o(ey)f -(sequence)h(b)o(y)f(stripping)h(the)f(eigh)o(th)h(bit)f(and)h(pre-)555 -915 y(\014xing)i(an)749 913 y Fh(h)p 761 887 70 2 v 761 -915 a Fg(ESC)p 761 922 V 828 913 a Fh(i)861 915 y Fn(c)o(haracter,)f -(con)o(v)o(erting)g(them)g(to)g(a)f(meta-pre\014xed)i(k)o(ey)555 -969 y(sequence.)i(The)15 b(default)h(v)m(alue)h(is)e(`)p -Fm(on)p Fn('.)315 1061 y Fm(disable-completion)555 1116 -y Fn(If)k(set)f(to)f(`)p Fm(On)p Fn(',)h(Readline)j(will)f(inhibit)g(w) -o(ord)e(completion.)30 b(Completion)555 1171 y(c)o(haracters)12 -b(will)j(b)q(e)f(inserted)g(in)o(to)f(the)g(line)h(as)f(if)h(they)f -(had)g(b)q(een)h(mapp)q(ed)555 1225 y(to)h Fm(self-insert)p -Fn(.)j(The)d(default)h(is)g(`)p Fm(off)p Fn('.)315 1317 -y Fm(editing-mode)555 1372 y Fn(The)f Fm(editing-mode)d -Fn(v)m(ariable)k(con)o(trols)e(whic)o(h)h(default)g(set)f(of)g(k)o(ey)g -(bind-)555 1427 y(ings)f(is)g(used.)20 b(By)12 b(default,)i(Readline)g -(starts)e(up)h(in)g(Emacs)f(editing)i(mo)q(de,)555 1481 -y(where)h(the)f(k)o(eystrok)o(es)g(are)g(most)g(similar)i(to)d(Emacs.) -20 b(This)15 b(v)m(ariable)h(can)555 1536 y(b)q(e)g(set)f(to)f(either)i -(`)p Fm(emacs)p Fn(')e(or)h(`)p Fm(vi)p Fn('.)315 1628 -y Fm(enable-keypad)555 1683 y Fn(When)d(set)f(to)h(`)p -Fm(on)p Fn(',)e(Readline)k(will)g(try)d(to)g(enable)i(the)f -(application)h(k)o(eypad)555 1737 y(when)h(it)f(is)h(called.)21 -b(Some)13 b(systems)g(need)h(this)g(to)f(enable)h(the)g(arro)o(w)e(k)o -(eys.)555 1792 y(The)j(default)h(is)g(`)p Fm(off)p Fn('.)315 -1884 y Fm(expand-tilde)555 1939 y Fn(If)e(set)g(to)f(`)p -Fm(on)p Fn(',)f(tilde)k(expansion)e(is)h(p)q(erformed)f(when)g -(Readline)i(attempts)555 1994 y(w)o(ord)f(completion.)21 -b(The)15 b(default)h(is)f(`)p Fm(off)p Fn('.)315 2085 -y Fm(horizontal-scroll-mode)555 2140 y Fn(This)k(v)m(ariable)g(can)f(b) -q(e)g(set)g(to)f(either)i(`)p Fm(on)p Fn(')e(or)g(`)p -Fm(off)p Fn('.)27 b(Setting)19 b(it)f(to)f(`)p Fm(on)p -Fn(')555 2195 y(means)c(that)f(the)i(text)e(of)h(the)g(lines)i(b)q -(eing)f(edited)g(will)h(scroll)f(horizon)o(tally)555 -2250 y(on)i(a)f(single)i(screen)g(line)g(when)g(they)f(are)f(longer)h -(than)g(the)g(width)g(of)g(the)555 2304 y(screen,)e(instead)f(of)g -(wrapping)g(on)o(to)f(a)h(new)g(screen)h(line.)21 b(By)13 -b(default,)h(this)555 2359 y(v)m(ariable)j(is)e(set)g(to)g(`)p -Fm(off)p Fn('.)315 2451 y Fm(input-meta)555 2506 y Fn(If)h(set)g(to)f -(`)p Fm(on)p Fn(',)f(Readline)k(will)g(enable)f(eigh)o(t-bit)f(input)h -(\(it)f(will)h(not)f(strip)555 2560 y(the)f(eigh)o(th)g(bit)h(from)e -(the)h(c)o(haracters)f(it)i(reads\),)e(regardless)h(of)f(what)h(the)555 -2615 y(terminal)21 b(claims)g(it)f(can)g(supp)q(ort.)34 -b(The)20 b(default)h(v)m(alue)g(is)g(`)p Fm(off)p Fn('.)33 -b(The)555 2670 y(name)15 b Fm(meta-flag)f Fn(is)i(a)f(synon)o(ym)g(for) -f(this)i(v)m(ariable.)p eop -%%Page: 6 8 -6 7 bop 75 -58 a Fn(6)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Fm(isearch-terminators)555 238 y Fn(The)26 b(string)g(of)f(c)o -(haracters)g(that)g(should)i(terminate)f(an)g(incremen)o(tal)555 -293 y(searc)o(h)e(without)h(subsequen)o(tly)g(executing)h(the)e(c)o -(haracter)g(as)g(a)g(com-)555 348 y(mand)19 b(\(see)f(Section)i(1.2.5)d -([Searc)o(hing],)i(page)f(3\).)29 b(If)19 b(this)g(v)m(ariable)h(has) -555 402 y(not)13 b(b)q(een)h(giv)o(en)g(a)f(v)m(alue,)i(the)e(c)o -(haracters)1312 400 y Fh(h)p 1324 374 70 2 v 1324 402 -a Fg(ESC)p 1324 410 V 1391 400 a Fh(i)1419 402 y Fn(and)1505 -400 y Fh(h)p 1518 374 56 2 v 1518 402 a Fg(C-J)p 1518 -410 V 1571 400 a Fh(i)1599 402 y Fn(will)i(terminate)555 -457 y(an)g(incremen)o(tal)h(searc)o(h.)315 540 y Fm(keymap)114 -b Fn(Sets)17 b(Readline's)j(idea)e(of)f(the)h(curren)o(t)g(k)o(eymap)f -(for)g(k)o(ey)g(binding)j(com-)555 595 y(mands.)41 b(Acceptable)23 -b Fm(keymap)f Fn(names)g(are)f Fm(emacs)p Fn(,)i Fm(emacs-standard)p -Fn(,)555 650 y Fm(emacs-meta)p Fn(,)15 b Fm(emacs-ctlx)p -Fn(,)h Fm(vi)p Fn(,)g Fm(vi-command)p Fn(,)g(and)h Fm(vi-insert)p -Fn(.)23 b Fm(vi)16 b Fn(is)555 705 y(equiv)m(alen)o(t)e(to)f -Fm(vi-command)p Fn(;)e Fm(emacs)h Fn(is)i(equiv)m(alen)o(t)g(to)e -Fm(emacs-standard)p Fn(.)555 759 y(The)f(default)h(v)m(alue)g(is)f -Fm(emacs)p Fn(.)18 b(The)11 b(v)m(alue)i(of)d(the)h Fm(editing-mode)f -Fn(v)m(ariable)555 814 y(also)15 b(a\013ects)g(the)g(default)h(k)o -(eymap.)315 897 y Fm(mark-directories)555 952 y Fn(If)j(set)g(to)g(`)p -Fm(on)p Fn(',)f(completed)i(directory)g(names)f(ha)o(v)o(e)f(a)h(slash) -h(app)q(ended.)555 1007 y(The)15 b(default)h(is)g(`)p -Fm(on)p Fn('.)315 1090 y Fm(mark-modified-lines)555 1145 -y Fn(This)j(v)m(ariable,)g(when)g(set)e(to)h(`)p Fm(on)p -Fn(',)f(causes)h(Readline)i(to)d(displa)o(y)i(an)f(as-)555 -1200 y(terisk)f(\(`)p Fm(*)p Fn('\))e(at)i(the)f(start)g(of)h(history)f -(lines)j(whic)o(h)e(ha)o(v)o(e)g(b)q(een)h(mo)q(di\014ed.)555 -1254 y(This)e(v)m(ariable)g(is)g(`)p Fm(off)p Fn(')e(b)o(y)h(default.) -315 1337 y Fm(output-meta)555 1392 y Fn(If)j(set)f(to)g(`)p -Fm(on)p Fn(',)g(Readline)j(will)g(displa)o(y)f(c)o(haracters)d(with)j -(the)e(eigh)o(th)h(bit)555 1447 y(set)g(directly)i(rather)d(than)h(as)g -(a)g(meta-pre\014xed)h(escap)q(e)g(sequence.)30 b(The)555 -1502 y(default)16 b(is)f(`)p Fm(off)p Fn('.)315 1585 -y Fm(print-completions-horizont)o(ally)555 1640 y Fn(If)d(set)g(to)f(`) -p Fm(on)p Fn(',)h(Readline)i(will)f(displa)o(y)h(completions)f(with)f -(matc)o(hes)f(sorted)555 1694 y(horizon)o(tally)23 b(in)f(alphab)q -(etical)i(order,)f(rather)e(than)g(do)o(wn)h(the)g(screen.)555 -1749 y(The)15 b(default)h(is)g(`)p Fm(off)p Fn('.)315 -1832 y Fm(show-all-if-ambiguous)555 1887 y Fn(This)g(alters)e(the)i -(default)f(b)q(eha)o(vior)h(of)e(the)h(completion)h(functions.)21 -b(If)15 b(set)555 1942 y(to)e(`)p Fm(on)p Fn(',)g(w)o(ords)g(whic)o(h)h -(ha)o(v)o(e)g(more)f(than)g(one)h(p)q(ossible)i(completion)f(cause)555 -1997 y(the)20 b(matc)o(hes)f(to)f(b)q(e)j(listed)f(immediately)h -(instead)f(of)f(ringing)i(the)e(b)q(ell.)555 2051 y(The)c(default)h(v)m -(alue)h(is)e(`)p Fm(off)p Fn('.)315 2134 y Fm(visible-stats)555 -2189 y Fn(If)h(set)g(to)f(`)p Fm(on)p Fn(',)g(a)h(c)o(haracter)f -(denoting)h(a)g(\014le's)h(t)o(yp)q(e)f(is)g(app)q(ended)i(to)d(the)555 -2244 y(\014lename)h(when)g(listing)h(p)q(ossible)g(completions.)j(The)c -(default)g(is)f(`)p Fm(off)p Fn('.)75 2327 y(Key)h(Bindings)315 -2382 y(The)21 b(syn)o(tax)f(for)h(con)o(trolling)h(k)o(ey)f(bindings)h -(in)g(the)f(init)h(\014le)g(is)g(simple.)39 b(First)20 -b(y)o(ou)315 2437 y(need)15 b(to)e(\014nd)h(the)g(name)g(of)g(the)f -(command)h(that)f(y)o(ou)h(w)o(an)o(t)f(to)g(c)o(hange.)19 -b(The)14 b(follo)o(wing)315 2491 y(sections)k(con)o(tain)h(tables)f(of) -f(the)h(command)g(name,)g(the)g(default)h(k)o(eybinding,)h(if)e(an)o(y) -l(,)315 2546 y(and)d(a)g(short)g(description)i(of)d(what)h(the)g -(command)g(do)q(es.)315 2615 y(Once)j(y)o(ou)g(kno)o(w)e(the)i(name)f -(of)g(the)h(command,)f(simply)i(place)g(the)e(name)h(of)f(the)g(k)o(ey) -315 2670 y(y)o(ou)c(wish)h(to)f(bind)i(the)f(command)f(to,)g(a)g -(colon,)h(and)g(then)f(the)h(name)f(of)h(the)f(command)p -eop -%%Page: 7 9 -7 8 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(7)315 183 y(on)19 b(a)g(line)i(in)f(the)g(init)g(\014le.)34 -b(The)19 b(name)h(of)e(the)i(k)o(ey)f(can)h(b)q(e)g(expressed)g(in)g -(di\013eren)o(t)315 238 y(w)o(a)o(ys,)14 b(dep)q(ending)j(on)e(whic)o -(h)h(is)g(most)e(comfortable)h(for)g(y)o(ou.)315 316 -y Ff(k)o(eyname)s Fn(:)k Ff(function-name)g Fn(or)c Ff(macro)555 -371 y(k)o(eyname)i Fn(is)e(the)f(name)h(of)f(a)g(k)o(ey)g(sp)q(elled)j -(out)d(in)h(English.)21 b(F)l(or)13 b(example:)675 435 -y Fm(Control-u:)22 b(universal-argument)675 487 y(Meta-Rubout:)g -(backward-kill-word)675 538 y(Control-o:)g(">)i(output")555 -605 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g(example,)1023 -603 y Fh(h)p 1035 577 57 2 v 1035 605 a Fg(C-u)p 1035 -613 V 1090 603 a Fh(i)1123 605 y Fn(is)h(b)q(ound)g(to)f(the)g -(function)h Fm(universal-)555 660 y(argument)p Fn(,)g(and)872 -658 y Fh(h)p 884 632 55 2 v 884 660 a Fg(C-o)p 884 667 -V 937 658 a Fh(i)971 660 y Fn(is)h(b)q(ound)g(to)f(run)h(the)f(macro)g -(expressed)h(on)g(the)555 715 y(righ)o(t)13 b(hand)h(side)h(\(that)e -(is,)h(to)f(insert)h(the)g(text)f(`)p Fm(>)h(output)p -Fn(')f(in)o(to)g(the)h(line\).)315 793 y Fm(")p Ff(k)o(eyseq)q -Fm(")p Fn(:)20 b Ff(function-name)e Fn(or)d Ff(macro)555 -848 y(k)o(eyseq)i Fn(di\013ers)e(from)g Ff(k)o(eyname)j -Fn(ab)q(o)o(v)o(e)d(in)i(that)d(strings)i(denoting)g(an)f(en-)555 -902 y(tire)i(k)o(ey)g(sequence)h(can)f(b)q(e)g(sp)q(eci\014ed,)i(b)o(y) -e(placing)h(the)f(k)o(ey)g(sequence)h(in)555 957 y(double)e(quotes.)j -(Some)c Fi(gnu)g Fn(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es)g(can)g(b)q -(e)g(used,)g(as)555 1012 y(in)j(the)f(follo)o(wing)g(example,)h(but)f -(the)g(sp)q(ecial)i(c)o(haracter)d(names)h(are)f(not)555 -1067 y(recognized.)675 1130 y Fm("\\C-u":)23 b(universal-argument)675 -1182 y("\\C-x\\C-r":)f(re-read-init-file)675 1234 y("\\e[11~":)h -("Function)f(Key)i(1")555 1301 y Fn(In)19 b(the)f(ab)q(o)o(v)o(e)g -(example,)1023 1299 y Fh(h)p 1035 1273 57 2 v 1035 1301 -a Fg(C-u)p 1035 1308 V 1090 1299 a Fh(i)1123 1301 y Fn(is)h(b)q(ound)g -(to)f(the)g(function)h Fm(universal-)555 1355 y(argument)9 -b Fn(\(just)h(as)h(it)g(w)o(as)e(in)j(the)e(\014rst)h(example\),)g(`) -1463 1353 y Fh(h)p 1475 1327 56 2 v 1475 1355 a Fg(C-x)p -1475 1363 V 1529 1353 a Fh(i)k(h)p 1571 1327 51 2 v 1571 -1355 a Fg(C-r)p 1571 1363 V 1620 1353 a Fh(i)1635 1355 -y Fn(')10 b(is)h(b)q(ound)h(to)555 1410 y(the)k(function)i -Fm(re-read-init-file)p Fn(,)c(and)i(`)1351 1408 y Fh(h)p -1363 1382 70 2 v 1363 1410 a Fg(ESC)p 1363 1418 V 1430 -1408 a Fh(i)f(h)p 1472 1382 10 2 v 1472 1410 a Fg([)p -1472 1419 V 1480 1408 a Fh(i)g(h)p 1522 1382 18 2 v 1522 -1410 a Fg(1)p 1522 1418 V 1538 1408 a Fh(i)g(h)p 1580 -1382 V 1580 1410 a Fg(1)p 1580 1418 V 1595 1408 a Fh(i)g(h)p -1637 1382 24 2 v 1637 1410 a Fm(~)p 1637 1418 V 1659 -1408 a Fh(i)1674 1410 y Fn(')h(is)h(b)q(ound)555 1465 -y(to)e(insert)g(the)g(text)g(`)p Fm(Function)f(Key)h(1)p -Fn('.)315 1543 y(The)g(follo)o(wing)h Fi(gnu)e Fn(Emacs)h(st)o(yle)g -(escap)q(e)h(sequences)g(are)e(a)o(v)m(ailable)j(when)e(sp)q(ecifying) -315 1598 y(k)o(ey)g(sequences:)315 1676 y Fd(\\C-)168 -b Fn(con)o(trol)15 b(pre\014x)315 1755 y Fd(\\M-)168 -b Fn(meta)15 b(pre\014x)315 1833 y Fd(\\e)192 b Fn(an)15 -b(escap)q(e)h(c)o(haracter)315 1911 y Fd(\\\\)192 b Fn(bac)o(kslash)315 -1989 y Fd(\\)p Fm(")555 1987 y Fh(h)p 567 1961 V 567 -1989 a Fm(")p 567 1997 V 589 1987 a Fh(i)604 1989 y Fn(,)15 -b(a)f(double)j(quotation)e(mark)315 2068 y Fd(\\')555 -2066 y Fh(h)p 567 2040 10 2 v 567 2068 a Fg(')p 567 2075 -V 575 2066 a Fh(i)590 2068 y Fn(,)g(a)f(single)j(quote)e(or)g(ap)q -(ostrophe)315 2146 y(In)f(addition)h(to)f(the)f Fi(gnu)h -Fn(Emacs)g(st)o(yle)f(escap)q(e)i(sequences,)g(a)e(second)i(set)e(of)h -(bac)o(kslash)315 2201 y(escap)q(es)i(is)g(a)o(v)m(ailable:)315 -2279 y Fm(\\a)192 b Fn(alert)15 b(\(b)q(ell\))315 2357 -y Fm(\\b)192 b Fn(bac)o(kspace)315 2435 y Fm(\\d)g Fn(delete)315 -2514 y Fm(\\f)g Fn(form)14 b(feed)315 2592 y Fm(\\n)192 -b Fn(newline)315 2670 y Fm(\\r)g Fn(carriage)15 b(return)p -eop -%%Page: 8 10 -8 9 bop 75 -58 a Fn(8)1322 b(GNU)15 b(Readline)i(Library)315 -183 y Fm(\\t)192 b Fn(horizon)o(tal)16 b(tab)315 262 -y Fm(\\v)192 b Fn(v)o(ertical)16 b(tab)315 340 y Fm(\\)p -Ff(nnn)141 b Fn(the)13 b(c)o(haracter)e(whose)i Fm(ASCII)e -Fn(co)q(de)j(is)f(the)f(o)q(ctal)h(v)m(alue)h Ff(nnn)f -Fn(\(one)f(to)g(three)555 395 y(digits\))315 473 y Fm(\\x)p -Ff(nnn)117 b Fn(the)15 b(c)o(haracter)e(whose)i Fm(ASCII)e -Fn(co)q(de)j(is)f(the)f(hexadecimal)i(v)m(alue)g Ff(nnn)f -Fn(\(one)555 528 y(to)g(three)g(digits\))315 607 y(When)k(en)o(tering)g -(the)g(text)f(of)g(a)h(macro,)f(single)i(or)e(double)i(quotes)f(m)o -(ust)f(b)q(e)h(used)h(to)315 662 y(indicate)12 b(a)f(macro)f -(de\014nition.)20 b(Unquoted)11 b(text)f(is)i(assumed)e(to)h(b)q(e)g(a) -f(function)i(name.)18 b(In)315 716 y(the)11 b(macro)f(b)q(o)q(dy)l(,)i -(the)f(bac)o(kslash)g(escap)q(es)g(describ)q(ed)i(ab)q(o)o(v)o(e)d(are) -g(expanded.)20 b(Bac)o(kslash)315 771 y(will)i(quote)d(an)o(y)h(other)g -(c)o(haracter)f(in)i(the)f(macro)f(text,)h(including)j(`)p -Fm(")p Fn(')c(and)h(`)p Fm(')p Fn('.)34 b(F)l(or)315 -826 y(example,)14 b(the)f(follo)o(wing)g(binding)i(will)g(mak)o(e)d(`)p -Fm(C-x)i(\\)p Fn(')f(insert)g(a)g(single)h(`)p Fm(\\)p -Fn(')e(in)o(to)h(the)g(line:)435 890 y Fm("\\C-x\\\\":)23 -b("\\\\")75 1000 y Fe(1.3.2)30 b(Conditional)20 b(Init)g(Constructs)137 -1096 y Fn(Readline)g(implemen)o(ts)f(a)f(facilit)o(y)g(similar)h(in)g -(spirit)f(to)f(the)h(conditional)h(compilation)g(features)75 -1150 y(of)e(the)g(C)g(prepro)q(cessor)g(whic)o(h)i(allo)o(ws)e(k)o(ey)g -(bindings)i(and)f(v)m(ariable)g(settings)f(to)g(b)q(e)h(p)q(erformed)f -(as)75 1205 y(the)e(result)h(of)f(tests.)k(There)c(are)g(four)g(parser) -g(directiv)o(es)h(used.)75 1284 y Fm($if)168 b Fn(The)16 -b Fm($if)f Fn(construct)g(allo)o(ws)h(bindings)i(to)d(b)q(e)h(made)g -(based)g(on)f(the)h(editing)h(mo)q(de,)f(the)315 1338 -y(terminal)k(b)q(eing)g(used,)g(or)f(the)g(application)i(using)e -(Readline.)34 b(The)19 b(text)g(of)f(the)i(test)315 1393 -y(extends)c(to)e(the)h(end)h(of)f(the)g(line;)i(no)e(c)o(haracters)f -(are)h(required)i(to)d(isolate)i(it.)315 1472 y Fm(mode)144 -b Fn(The)11 b Fm(mode=)e Fn(form)h(of)g(the)h Fm($if)f -Fn(directiv)o(e)h(is)g(used)g(to)f(test)g(whether)h(Readline)555 -1527 y(is)k(in)h Fm(emacs)e Fn(or)g Fm(vi)g Fn(mo)q(de.)20 -b(This)c(ma)o(y)e(b)q(e)h(used)g(in)h(conjunction)g(with)f(the)555 -1581 y(`)p Fm(set)f(keymap)p Fn(')f(command,)g(for)h(instance,)g(to)f -(set)h(bindings)h(in)g(the)f Fm(emacs-)555 1636 y(standard)d -Fn(and)i Fm(emacs-ctlx)e Fn(k)o(eymaps)h(only)i(if)f(Readline)h(is)f -(starting)f(out)555 1691 y(in)k Fm(emacs)f Fn(mo)q(de.)315 -1769 y Fm(term)144 b Fn(The)14 b Fm(term=)e Fn(form)h(ma)o(y)g(b)q(e)h -(used)g(to)f(include)j(terminal-sp)q(eci\014c)g(k)o(ey)d(bind-)555 -1824 y(ings,)19 b(p)q(erhaps)g(to)e(bind)i(the)g(k)o(ey)e(sequences)j -(output)e(b)o(y)g(the)g(terminal's)555 1879 y(function)13 -b(k)o(eys.)18 b(The)13 b(w)o(ord)e(on)h(the)g(righ)o(t)g(side)g(of)g -(the)g(`)p Fm(=)p Fn(')f(is)h(tested)g(against)555 1934 -y(b)q(oth)j(the)g(full)i(name)e(of)f(the)h(terminal)h(and)f(the)g(p)q -(ortion)h(of)e(the)h(terminal)555 1989 y(name)i(b)q(efore)g(the)g -(\014rst)f(`)p Fm(-)p Fn('.)24 b(This)17 b(allo)o(ws)g -Fm(sun)f Fn(to)g(matc)o(h)h(b)q(oth)f Fm(sun)h Fn(and)555 -2043 y Fm(sun-cmd)p Fn(,)d(for)g(instance.)315 2122 y -Fm(application)555 2177 y Fn(The)d Ff(application)i Fn(construct)e(is)g -(used)h(to)e(include)j(application-sp)q(eci)q(\014c)h(set-)555 -2231 y(tings.)19 b(Eac)o(h)12 b(program)f(using)j(the)e(Readline)j -(library)e(sets)f(the)g Ff(application)555 2286 y(name)p -Fn(,)17 b(and)f(y)o(ou)h(can)f(test)g(for)g(it.)24 b(This)18 -b(could)f(b)q(e)g(used)g(to)f(bind)i(k)o(ey)f(se-)555 -2341 y(quences)c(to)e(functions)i(useful)g(for)e(a)h(sp)q(eci\014c)i -(program.)j(F)l(or)12 b(instance,)h(the)555 2396 y(follo)o(wing)i -(command)f(adds)g(a)f(k)o(ey)h(sequence)h(that)f(quotes)f(the)i(curren) -o(t)e(or)555 2451 y(previous)j(w)o(ord)e(in)i(Bash:)675 -2514 y Fm($if)23 b(Bash)675 2566 y(#)h(Quote)f(the)g(current)g(or)h -(previous)f(word)675 2618 y("\\C-xq":)g("\\eb\\"\\ef\\"")675 -2670 y($endif)p eop -%%Page: 9 11 -9 10 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1077 -b(9)75 183 y Fm($endif)96 b Fn(This)16 b(command,)e(as)h(seen)h(in)g -(the)f(previous)h(example,)g(terminates)f(an)g Fm($if)f -Fn(command.)75 263 y Fm($else)120 b Fn(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Fm($if)e Fn(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)75 343 y Fm($include)48 b Fn(This)14 b(directiv)o(e)i -(tak)o(es)d(a)g(single)i(\014lename)g(as)f(an)f(argumen)o(t)g(and)h -(reads)g(commands)g(and)315 397 y(bindings)j(from)e(that)f(\014le.)435 -462 y Fm($include)23 b(/etc/inputrc)75 574 y Fe(1.3.3)30 -b(Sample)20 b(Init)h(File)137 670 y Fn(Here)16 b(is)g(an)f(example)h -(of)f(an)h(inputrc)g(\014le.)22 b(This)16 b(illustrates)g(k)o(ey)g -(binding,)h(v)m(ariable)f(assignmen)o(t,)75 725 y(and)f(conditional)i -(syn)o(tax.)p eop -%%Page: 10 12 -10 11 bop 75 -58 a Fn(10)1299 b(GNU)15 b(Readline)i(Library)195 -235 y Fm(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)195 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)195 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)195 391 -y(#)195 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)195 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)195 546 y(#)195 598 y(#)g(First,)f(include)g(any)g -(systemwide)g(bindings)f(and)i(variable)f(assignments)f(from)195 -650 y(#)i(/etc/Inputrc)195 702 y($include)f(/etc/Inputrc)195 -806 y(#)195 858 y(#)h(Set)f(various)g(bindings)g(for)g(emacs)g(mode.) -195 962 y(set)g(editing-mode)g(emacs)195 1065 y($if)g(mode=emacs)195 -1169 y(Meta-Control-h:)46 b(backward-kill-word)21 b(Text)i(after)h(the) -f(function)g(name)g(is)h(ignored)p 1986 1179 21 38 v -195 1273 a(#)195 1325 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode)195 -1377 y(#)195 1429 y(#"\\M-OD":)190 b(backward-char)195 -1480 y(#"\\M-OC":)g(forward-char)195 1532 y(#"\\M-OA":)g -(previous-history)195 1584 y(#"\\M-OB":)g(next-history)195 -1636 y(#)195 1688 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)195 -1740 y(#)195 1792 y("\\M-[D":)190 b(backward-char)195 -1844 y("\\M-[C":)g(forward-char)195 1896 y("\\M-[A":)g -(previous-history)195 1947 y("\\M-[B":)g(next-history)195 -1999 y(#)195 2051 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -195 2103 y(#)195 2155 y(#"\\M-\\C-OD":)165 b(backward-char)195 -2207 y(#"\\M-\\C-OC":)g(forward-char)195 2259 y(#"\\M-\\C-OA":)g -(previous-history)195 2311 y(#"\\M-\\C-OB":)g(next-history)195 -2363 y(#)195 2414 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -195 2466 y(#)195 2518 y(#"\\M-\\C-[D":)165 b(backward-char)195 -2570 y(#"\\M-\\C-[C":)g(forward-char)195 2622 y(#"\\M-\\C-[A":)g -(previous-history)p eop -%%Page: 11 13 -11 12 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(11)195 183 y Fm(#"\\M-\\C-[B":)165 b(next-history)195 -287 y(C-q:)23 b(quoted-insert)195 391 y($endif)195 495 -y(#)h(An)f(old-style)g(binding.)47 b(This)23 b(happens)g(to)g(be)h(the) -f(default.)195 546 y(TAB:)g(complete)195 650 y(#)h(Macros)f(that)g(are) -h(convenient)e(for)h(shell)h(interaction)195 702 y($if)f(Bash)195 -754 y(#)h(edit)f(the)g(path)195 806 y("\\C-xp":)g -("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")195 858 y(#)h(prepare)f(to)g -(type)h(a)f(quoted)g(word)h(--)f(insert)g(open)h(and)f(close)g(double)g -(quotes)195 910 y(#)h(and)f(move)g(to)h(just)f(after)h(the)f(open)g -(quote)195 962 y("\\C-x\\"":)g("\\"\\"\\C-b")195 1013 -y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f(in)i -(sequences)f(and)g(macros\))195 1065 y("\\C-x\\\\":)g("\\\\")195 -1117 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)195 -1169 y("\\C-xq":)g("\\eb\\"\\ef\\"")195 1221 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)195 -1273 y("\\C-xr":)f(redraw-current-line)195 1325 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)195 1377 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")195 1429 y($endif)195 -1532 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)195 -1584 y(set)f(bell-style)g(visible)195 1688 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)195 1740 -y(set)f(input-meta)g(on)195 1844 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)195 -1896 y(#)h(prefix-meta)e(sequences)195 1947 y(set)h(convert-meta)g(off) -195 2051 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)195 2103 y(#)h(as)f(meta-prefixed)f -(characters)195 2155 y(set)h(output-meta)g(on)195 2259 -y(#)h(if)f(there)g(are)h(more)f(than)h(150)f(possible)g(completions)f -(for)i(a)f(word,)h(ask)f(the)195 2311 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)195 2363 y(set)g(completion-query-items)e -(150)195 2466 y(#)j(For)f(FTP)195 2518 y($if)g(Ftp)195 -2570 y("\\C-xg":)g("get)g(\\M-?")195 2622 y("\\C-xt":)g("put)g(\\M-?")p -eop -%%Page: 12 14 -12 13 bop 75 -58 a Fn(12)1299 b(GNU)15 b(Readline)i(Library)195 -183 y Fm("\\M-.":)23 b(yank-last-arg)195 235 y($endif)75 -359 y Fl(1.4)33 b(Bindable)24 b(Readline)f(Commands)137 -453 y Fn(This)16 b(section)g(describ)q(es)h(Readline)g(commands)e(that) -g(ma)o(y)f(b)q(e)i(b)q(ound)g(to)f(k)o(ey)g(sequences.)137 -519 y(Command)j(names)g(without)h(an)f(accompan)o(ying)g(k)o(ey)g -(sequence)i(are)e(un)o(b)q(ound)h(b)o(y)g(default.)29 -b(In)75 573 y(the)15 b(follo)o(wing)h(descriptions,)g -Ff(p)q(oin)o(t)h Fn(refers)e(to)f(the)i(curren)o(t)f(cursor)f(p)q -(osition,)i(and)g Ff(mark)h Fn(refers)e(to)f(a)75 628 -y(cursor)h(p)q(osition)h(sa)o(v)o(ed)e(b)o(y)h(the)g -Fm(set-mark)f Fn(command.)20 b(The)15 b(text)g(b)q(et)o(w)o(een)g(the)g -(p)q(oin)o(t)h(and)f(mark)f(is)75 683 y(referred)h(to)g(as)g(the)g -Ff(region)p Fn(.)75 790 y Fe(1.4.1)30 b(Commands)21 b(F)-5 -b(or)19 b(Mo)n(ving)75 895 y Fm(beginning-of-line)13 -b(\(C-a\))315 950 y Fn(Mo)o(v)o(e)h(to)h(the)g(start)f(of)h(the)g -(curren)o(t)g(line.)75 1026 y Fm(end-of-line)f(\(C-e\))315 -1081 y Fn(Mo)o(v)o(e)g(to)h(the)g(end)h(of)f(the)g(line.)75 -1157 y Fm(forward-char)f(\(C-f\))315 1212 y Fn(Mo)o(v)o(e)g(forw)o(ard) -g(a)h(c)o(haracter.)75 1288 y Fm(backward-char)e(\(C-b\))315 -1343 y Fn(Mo)o(v)o(e)h(bac)o(k)h(a)g(c)o(haracter.)75 -1419 y Fm(forward-word)f(\(M-f\))315 1474 y Fn(Mo)o(v)o(e)g(forw)o(ard) -g(to)g(the)i(end)g(of)e(the)h(next)h(w)o(ord.)j(W)l(ords)c(are)f(comp)q -(osed)i(of)f(letters)g(and)315 1529 y(digits.)75 1605 -y Fm(backward-word)e(\(M-b\))315 1660 y Fn(Mo)o(v)o(e)j(bac)o(k)g(to)h -(the)f(start)g(of)g(the)h(curren)o(t)g(or)f(previous)i(w)o(ord.)24 -b(W)l(ords)16 b(are)h(comp)q(osed)315 1715 y(of)e(letters)g(and)g -(digits.)75 1791 y Fm(clear-screen)f(\(C-l\))315 1846 -y Fn(Clear)f(the)h(screen)g(and)f(redra)o(w)g(the)g(curren)o(t)g(line,) -i(lea)o(ving)g(the)e(curren)o(t)g(line)i(at)e(the)g(top)315 -1900 y(of)i(the)g(screen.)75 1977 y Fm(redraw-current-line)e(\(\))315 -2031 y Fn(Refresh)j(the)f(curren)o(t)g(line.)22 b(By)15 -b(default,)h(this)f(is)h(un)o(b)q(ound.)75 2138 y Fe(1.4.2)30 -b(Commands)21 b(F)-5 b(or)19 b(Manipulating)i(The)f(History)75 -2244 y Fm(accept-line)14 b(\(Newline,)g(Return\))315 -2298 y Fn(Accept)h(the)g(line)i(regardless)e(of)g(where)g(the)g(cursor) -f(is.)20 b(If)c(this)f(line)h(is)g(non-empt)o(y)l(,)f(add)315 -2353 y(it)f(to)g(the)g(history)g(list.)20 b(If)14 b(this)h(line)g(w)o -(as)e(a)h(history)g(line,)i(then)e(restore)f(the)h(history)g(line)315 -2408 y(to)h(its)g(original)h(state.)75 2484 y Fm(previous-history)d -(\(C-p\))315 2539 y Fn(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g -(list.)75 2615 y Fm(next-history)f(\(C-n\))315 2670 y -Fn(Mo)o(v)o(e)g(`do)o(wn')g(through)h(the)h(history)f(list.)p -eop -%%Page: 13 15 -13 14 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(13)75 183 y Fm(beginning-of-history)12 b(\(M-<\))315 -238 y Fn(Mo)o(v)o(e)i(to)h(the)g(\014rst)g(line)i(in)f(the)f(history)l -(.)75 314 y Fm(end-of-history)e(\(M->\))315 369 y Fn(Mo)o(v)o(e)h(to)h -(the)g(end)h(of)f(the)g(input)h(history)l(,)f(i.e.,)g(the)g(line)i -(curren)o(tly)f(b)q(eing)g(en)o(tered.)75 445 y Fm -(reverse-search-history)c(\(C-r\))315 500 y Fn(Searc)o(h)k(bac)o(kw)o -(ard)e(starting)h(at)g(the)h(curren)o(t)f(line)j(and)d(mo)o(ving)h -(`up')f(through)g(the)h(his-)315 555 y(tory)e(as)h(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 631 -y Fm(forward-search-history)c(\(C-s\))315 686 y Fn(Searc)o(h)j(forw)o -(ard)e(starting)h(at)h(the)f(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do) -o(wn')f(through)g(the)h(the)315 741 y(history)g(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)75 817 -y Fm(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))315 -872 y Fn(Searc)o(h)k(bac)o(kw)o(ard)e(starting)h(at)g(the)h(curren)o(t) -f(line)j(and)d(mo)o(ving)h(`up')f(through)g(the)h(his-)315 -926 y(tory)h(as)h(necessary)g(using)h(a)e(non-incremen)o(tal)j(searc)o -(h)e(for)f(a)h(string)g(supplied)i(b)o(y)e(the)315 981 -y(user.)75 1057 y Fm(non-incremental-forward-se)o(arch-hi)o(story)12 -b(\(M-n\))315 1112 y Fn(Searc)o(h)j(forw)o(ard)e(starting)h(at)h(the)f -(curren)o(t)h(line)h(and)f(mo)o(ving)g(`do)o(wn')f(through)g(the)h(the) -315 1167 y(history)e(as)g(necessary)h(using)g(a)f(non-incremen)o(tal)i -(searc)o(h)e(for)g(a)g(string)g(supplied)j(b)o(y)d(the)315 -1222 y(user.)75 1298 y Fm(history-search-forward)f(\(\))315 -1353 y Fn(Searc)o(h)21 b(forw)o(ard)e(through)i(the)f(history)h(for)f -(the)h(string)g(of)f(c)o(haracters)g(b)q(et)o(w)o(een)h(the)315 -1407 y(start)16 b(of)h(the)h(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o -(t.)28 b(This)18 b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 -b(By)315 1462 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1538 y Fm(history-search-backward)c(\(\))315 1593 y Fn(Searc)o(h)18 -b(bac)o(kw)o(ard)e(through)h(the)h(history)f(for)g(the)g(string)h(of)f -(c)o(haracters)f(b)q(et)o(w)o(een)i(the)315 1648 y(start)e(of)h(the)h -(curren)o(t)g(line)h(and)e(the)h(p)q(oin)o(t.)28 b(This)18 -b(is)g(a)f(non-incremen)o(tal)i(searc)o(h.)27 b(By)315 -1703 y(default,)15 b(this)h(command)f(is)h(un)o(b)q(ound.)75 -1779 y Fm(yank-nth-arg)e(\(M-C-y\))315 1834 y Fn(Insert)f(the)g -(\014rst)g(argumen)o(t)f(to)g(the)i(previous)f(command)g(\(usually)h -(the)f(second)h(w)o(ord)e(on)315 1889 y(the)i(previous)i(line\).)21 -b(With)14 b(an)h(argumen)o(t)e Ff(n)p Fn(,)i(insert)f(the)h -Ff(n)p Fn(th)f(w)o(ord)g(from)g(the)g(previous)315 1943 -y(command)f(\(the)h(w)o(ords)f(in)h(the)g(previous)g(command)g(b)q -(egin)h(with)f(w)o(ord)e(0\).)19 b(A)14 b(negativ)o(e)315 -1998 y(argumen)o(t)g(inserts)i(the)f Ff(n)p Fn(th)h(w)o(ord)e(from)h -(the)g(end)h(of)e(the)i(previous)g(command.)75 2074 y -Fm(yank-last-arg)d(\(M-.,)i(M-_\))315 2129 y Fn(Insert)j(last)f -(argumen)o(t)g(to)g(the)g(previous)i(command)e(\(the)g(last)h(w)o(ord)f -(of)g(the)g(previous)315 2184 y(history)e(en)o(try\).)20 -b(With)15 b(an)g(argumen)o(t,)g(b)q(eha)o(v)o(e)g(exactly)h(lik)o(e)g -Fm(yank-nth-arg)p Fn(.)j(Succes-)315 2239 y(siv)o(e)f(calls)g(to)f -Fm(yank-last-arg)e Fn(mo)o(v)o(e)i(bac)o(k)g(through)g(the)g(history)g -(list,)i(inserting)f(the)315 2294 y(last)d(argumen)o(t)g(of)f(eac)o(h)i -(line)g(in)g(turn.)75 2400 y Fe(1.4.3)30 b(Commands)21 -b(F)-5 b(or)19 b(Changing)i(T)-5 b(ext)75 2506 y Fm(delete-char)14 -b(\(C-d\))315 2560 y Fn(Delete)j(the)f(c)o(haracter)g(under)h(the)f -(cursor.)23 b(If)16 b(the)h(cursor)f(is)h(at)e(the)i(b)q(eginning)h(of) -e(the)315 2615 y(line,)j(there)e(are)g(no)g(c)o(haracters)f(in)i(the)g -(line,)h(and)e(the)g(last)g(c)o(haracter)g(t)o(yp)q(ed)g(w)o(as)f(not) -315 2670 y(b)q(ound)g(to)f Fm(delete-char)p Fn(,)e(then)j(return)f -Fm(EOF)p Fn(.)p eop -%%Page: 14 16 -14 15 bop 75 -58 a Fn(14)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fm(backward-delete-char)12 b(\(Rubout\))315 238 -y Fn(Delete)k(the)f(c)o(haracter)f(b)q(ehind)j(the)f(cursor.)j(A)c(n)o -(umeric)h(argumen)o(t)e(means)i(to)e(kill)j(the)315 293 -y(c)o(haracters)d(instead)i(of)f(deleting)i(them.)75 -378 y Fm(forward-backward-delete-ch)o(ar)12 b(\(\))315 -432 y Fn(Delete)20 b(the)f(c)o(haracter)f(under)i(the)f(cursor,)h -(unless)g(the)f(cursor)g(is)h(at)e(the)h(end)h(of)f(the)315 -487 y(line,)e(in)g(whic)o(h)g(case)e(the)h(c)o(haracter)g(b)q(ehind)h -(the)f(cursor)g(is)g(deleted.)23 b(By)16 b(default,)h(this)315 -542 y(is)f(not)f(b)q(ound)h(to)e(a)h(k)o(ey)l(.)75 627 -y Fm(quoted-insert)e(\(C-q,)i(C-v\))315 682 y Fn(Add)j(the)f(next)g(c)o -(haracter)g(t)o(yp)q(ed)g(to)f(the)i(line)g(v)o(erbatim.)26 -b(This)18 b(is)f(ho)o(w)g(to)g(insert)g(k)o(ey)315 736 -y(sequences)f(lik)o(e)605 734 y Fh(h)p 617 708 56 2 v -617 736 a Fg(C-q)p 617 744 V 671 734 a Fh(i)685 736 y -Fn(,)f(for)g(example.)75 821 y Fm(tab-insert)f(\(M-TAB\))315 -876 y Fn(Insert)h(a)g(tab)g(c)o(haracter.)75 961 y Fm(self-insert)f -(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\))315 1016 y Fn(Insert)g(y)o(ourself.) -75 1100 y Fm(transpose-chars)e(\(C-t\))315 1155 y Fn(Drag)i(the)h(c)o -(haracter)f(b)q(efore)h(the)h(cursor)e(forw)o(ard)g(o)o(v)o(er)g(the)h -(c)o(haracter)f(at)h(the)g(cursor,)315 1210 y(mo)o(ving)i(the)f(cursor) -h(forw)o(ard)e(as)i(w)o(ell.)28 b(If)18 b(the)g(insertion)h(p)q(oin)o -(t)f(is)g(at)f(the)h(end)h(of)e(the)315 1265 y(line,)c(then)e(this)h -(transp)q(oses)e(the)h(last)g(t)o(w)o(o)f(c)o(haracters)g(of)h(the)g -(line.)20 b(Negativ)o(e)11 b(argumen)o(ts)315 1320 y(ha)o(v)o(e)k(no)g -(e\013ect.)75 1404 y Fm(transpose-words)e(\(M-t\))315 -1459 y Fn(Drag)i(the)h(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(past)f(the)g -(w)o(ord)f(after)h(p)q(oin)o(t,)g(mo)o(ving)g(p)q(oin)o(t)h(past)f -(that)315 1514 y(w)o(ord)f(as)f(w)o(ell.)75 1599 y Fm(upcase-word)g -(\(M-u\))315 1654 y Fn(Upp)q(ercase)j(the)f(curren)o(t)g(\(or)f(follo)o -(wing\))h(w)o(ord.)22 b(With)16 b(a)g(negativ)o(e)g(argumen)o(t,)f(upp) -q(er-)315 1708 y(case)g(the)g(previous)h(w)o(ord,)f(but)g(do)g(not)g -(mo)o(v)o(e)f(the)i(cursor.)75 1793 y Fm(downcase-word)d(\(M-l\))315 -1848 y Fn(Lo)o(w)o(ercase)d(the)h(curren)o(t)g(\(or)f(follo)o(wing\))h -(w)o(ord.)17 b(With)11 b(a)g(negativ)o(e)g(argumen)o(t,)f(lo)o(w)o -(ercase)315 1903 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o -(v)o(e)f(the)h(cursor.)75 1988 y Fm(capitalize-word)e(\(M-c\))315 -2042 y Fn(Capitalize)f(the)f(curren)o(t)f(\(or)g(follo)o(wing\))h(w)o -(ord.)18 b(With)11 b(a)f(negativ)o(e)h(argumen)o(t,)f(capitalize)315 -2097 y(the)15 b(previous)h(w)o(ord,)e(but)i(do)f(not)g(mo)o(v)o(e)f -(the)h(cursor.)75 2220 y Fe(1.4.4)30 b(Killing)20 b(And)h(Y)-5 -b(anking)75 2336 y Fm(kill-line)14 b(\(C-k\))315 2391 -y Fn(Kill)j(the)f(text)e(from)h(p)q(oin)o(t)h(to)e(the)h(end)h(of)f -(the)g(line.)75 2476 y Fm(backward-kill-line)e(\(C-x)h(Rubout\))315 -2530 y Fn(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)75 2615 y Fm(unix-line-discard)e(\(C-u\))315 2670 -y Fn(Kill)k(bac)o(kw)o(ard)e(from)f(the)i(cursor)e(to)h(the)g(b)q -(eginning)j(of)c(the)i(curren)o(t)f(line.)p eop -%%Page: 15 17 -15 16 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(15)75 183 y Fm(kill-whole-line)13 b(\(\))315 238 y -Fn(Kill)20 b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e -(matter)f(p)q(oin)o(t)h(is.)28 b(By)18 b(default,)h(this)f(is)315 -293 y(un)o(b)q(ound.)75 374 y Fm(kill-word)c(\(M-d\))315 -429 y Fn(Kill)j(from)d(p)q(oin)o(t)h(to)f(the)h(end)g(of)f(the)h -(curren)o(t)g(w)o(ord,)e(or)i(if)g(b)q(et)o(w)o(een)g(w)o(ords,)e(to)i -(the)f(end)315 483 y(of)h(the)g(next)g(w)o(ord.)20 b(W)l(ord)14 -b(b)q(oundaries)j(are)e(the)g(same)g(as)g Fm(forward-word)p -Fn(.)75 564 y Fm(backward-kill-word)e(\(M-DEL\))315 619 -y Fn(Kill)k(the)d(w)o(ord)g(b)q(ehind)i(p)q(oin)o(t.)21 -b(W)l(ord)14 b(b)q(oundaries)h(are)f(the)h(same)f(as)g -Fm(backward-word)p Fn(.)75 700 y Fm(unix-word-rubout)f(\(C-w\))315 -755 y Fn(Kill)18 b(the)e(w)o(ord)f(b)q(ehind)j(p)q(oin)o(t,)e(using)h -(white)f(space)g(as)g(a)f(w)o(ord)g(b)q(oundary)l(.)23 -b(The)16 b(killed)315 810 y(text)f(is)g(sa)o(v)o(ed)g(on)g(the)h -(kill-ring.)75 891 y Fm(delete-horizontal-space)c(\(\))315 -946 y Fn(Delete)k(all)g(spaces)f(and)h(tabs)e(around)i(p)q(oin)o(t.)k -(By)15 b(default,)h(this)f(is)h(un)o(b)q(ound.)75 1027 -y Fm(kill-region)e(\(\))315 1082 y Fn(Kill)j(the)f(text)e(in)i(the)g -(curren)o(t)f(region.)20 b(By)15 b(default,)h(this)f(command)g(is)h(un) -o(b)q(ound.)75 1163 y Fm(copy-region-as-kill)d(\(\))315 -1217 y Fn(Cop)o(y)j(the)i(text)e(in)i(the)f(region)g(to)g(the)g(kill)h -(bu\013er,)f(so)g(it)g(can)g(b)q(e)h(y)o(ank)o(ed)f(righ)o(t)g(a)o(w)o -(a)o(y)l(.)315 1272 y(By)e(default,)h(this)f(command)g(is)h(un)o(b)q -(ound.)75 1353 y Fm(copy-backward-word)d(\(\))315 1408 -y Fn(Cop)o(y)19 b(the)g(w)o(ord)g(b)q(efore)g(p)q(oin)o(t)h(to)e(the)i -(kill)h(bu\013er.)32 b(The)19 b(w)o(ord)g(b)q(oundaries)h(are)f(the)315 -1463 y(same)c(as)g Fm(backward-word)p Fn(.)j(By)d(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)75 1544 y Fm(copy-forward-word)d(\(\)) -315 1599 y Fn(Cop)o(y)i(the)h(w)o(ord)e(follo)o(wing)j(p)q(oin)o(t)f -(to)f(the)g(kill)j(bu\013er.)i(The)c(w)o(ord)f(b)q(oundaries)i(are)e -(the)315 1653 y(same)g(as)g Fm(forward-word)p Fn(.)j(By)d(default,)h -(this)f(command)g(is)h(un)o(b)q(ound.)75 1734 y Fm(yank)f(\(C-y\))315 -1789 y Fn(Y)l(ank)g(the)h(top)f(of)f(the)i(kill)h(ring)e(in)o(to)g(the) -h(bu\013er)f(at)f(the)i(curren)o(t)f(cursor)g(p)q(osition.)75 -1870 y Fm(yank-pop)f(\(M-y\))315 1925 y Fn(Rotate)j(the)g(kill-ring,)j -(and)d(y)o(ank)g(the)h(new)f(top.)26 b(Y)l(ou)17 b(can)h(only)g(do)f -(this)h(if)f(the)h(prior)315 1980 y(command)d(is)h(y)o(ank)f(or)f(y)o -(ank-p)q(op.)75 2095 y Fe(1.4.5)30 b(Sp)r(ecifying)20 -b(Numeric)h(Argumen)n(ts)75 2205 y Fm(digit-argument)13 -b(\(M-0,)i(M-1,)f(...)h(M--\))315 2260 y Fn(Add)f(this)g(digit)g(to)f -(the)h(argumen)o(t)e(already)i(accum)o(ulating,)g(or)f(start)f(a)h(new) -h(argumen)o(t.)315 2313 y Fh(h)p 327 2287 50 2 v 327 -2315 a Fg(M{)p 327 2323 V 375 2313 a Fh(i)405 2315 y -Fn(starts)g(a)h(negativ)o(e)g(argumen)o(t.)75 2396 y -Fm(universal-argument)e(\(\))315 2451 y Fn(This)g(is)h(another)e(w)o(a) -o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)13 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)315 -2506 y(or)h(more)h(digits,)g(optionally)h(with)f(a)g(leading)h(min)o -(us)f(sign,)g(those)g(digits)g(de\014ne)h(the)f(ar-)315 -2560 y(gumen)o(t.)k(If)c(the)g(command)f(is)h(follo)o(w)o(ed)g(b)o(y)g -(digits,)g(executing)g Fm(universal-argument)315 2615 -y Fn(again)h(ends)g(the)g(n)o(umeric)h(argumen)o(t,)e(but)h(is)h -(otherwise)f(ignored.)22 b(As)16 b(a)g(sp)q(ecial)h(case,)315 -2670 y(if)g(this)g(command)f(is)h(immediately)h(follo)o(w)o(ed)f(b)o(y) -f(a)g(c)o(haracter)g(that)g(is)h(neither)g(a)f(digit)p -eop -%%Page: 16 18 -16 17 bop 75 -58 a Fn(16)1299 b(GNU)15 b(Readline)i(Library)315 -183 y(or)c(min)o(us)i(sign,)f(the)g(argumen)o(t)g(coun)o(t)f(for)h(the) -g(next)g(command)g(is)g(m)o(ultiplied)j(b)o(y)d(four.)315 -238 y(The)19 b(argumen)o(t)f(coun)o(t)g(is)h(initially)j(one,)d(so)f -(executing)i(this)f(function)h(the)e(\014rst)h(time)315 -293 y(mak)o(es)c(the)h(argumen)o(t)f(coun)o(t)h(four,)f(a)h(second)g -(time)g(mak)o(es)g(the)g(argumen)o(t)f(coun)o(t)g(six-)315 -348 y(teen,)g(and)g(so)g(on.)20 b(By)15 b(default,)h(this)f(is)h(not)f -(b)q(ound)h(to)f(a)g(k)o(ey)l(.)75 472 y Fe(1.4.6)30 -b(Letting)20 b(Readline)g(T)n(yp)r(e)h(F)-5 b(or)19 b(Y)-5 -b(ou)75 590 y Fm(complete)14 b(\(TAB\))315 644 y Fn(A)o(ttempt)j(to)g -(do)h(completion)g(on)g(the)g(text)f(b)q(efore)h(the)g(cursor.)27 -b(This)18 b(is)g(application-)315 699 y(sp)q(eci\014c.)k(Generally)l(,) -15 b(if)g(y)o(ou)g(are)f(t)o(yping)h(a)g(\014lename)g(argumen)o(t,)f(y) -o(ou)g(can)h(do)g(\014lename)315 754 y(completion;)h(if)g(y)o(ou)f(are) -g(t)o(yping)h(a)f(command,)f(y)o(ou)h(can)h(do)f(command)g(completion;) -h(if)315 809 y(y)o(ou)i(are)g(t)o(yping)g(in)h(a)f(sym)o(b)q(ol)h(to)e -(GDB,)h(y)o(ou)g(can)g(do)g(sym)o(b)q(ol)h(name)f(completion;)i(if)315 -864 y(y)o(ou)13 b(are)g(t)o(yping)g(in)h(a)f(v)m(ariable)h(to)f(Bash,)g -(y)o(ou)g(can)g(do)g(v)m(ariable)h(name)f(completion,)i(and)315 -918 y(so)g(on.)75 1004 y Fm(possible-completions)d(\(M-?\))315 -1059 y Fn(List)k(the)f(p)q(ossible)i(completions)f(of)f(the)g(text)g(b) -q(efore)h(the)f(cursor.)75 1145 y Fm(insert-completions)e(\(M-*\))315 -1199 y Fn(Insert)j(all)g(completions)g(of)f(the)g(text)g(b)q(efore)h(p) -q(oin)o(t)f(that)g(w)o(ould)h(ha)o(v)o(e)f(b)q(een)h(generated)315 -1254 y(b)o(y)f Fm(possible-completions)p Fn(.)75 1340 -y Fm(menu-complete)e(\(\))315 1395 y Fn(Similar)g(to)f -Fm(complete)p Fn(,)f(but)h(replaces)h(the)f(w)o(ord)f(to)g(b)q(e)i -(completed)f(with)h(a)e(single)j(matc)o(h)315 1450 y(from)k(the)h(list) -h(of)e(p)q(ossible)j(completions.)32 b(Rep)q(eated)20 -b(execution)g(of)f Fm(menu-complete)315 1504 y Fn(steps)h(through)g -(the)g(list)h(of)f(p)q(ossible)i(completions,)g(inserting)f(eac)o(h)f -(matc)o(h)f(in)i(turn.)315 1559 y(A)o(t)c(the)g(end)h(of)f(the)h(list)g -(of)f(completions,)i(the)e(b)q(ell)j(is)e(rung)f(and)h(the)f(original)i -(text)d(is)315 1614 y(restored.)26 b(An)17 b(argumen)o(t)g(of)g -Ff(n)g Fn(mo)o(v)o(es)g Ff(n)g Fn(p)q(ositions)h(forw)o(ard)e(in)i(the) -g(list)g(of)f(matc)o(hes;)315 1669 y(a)j(negativ)o(e)g(argumen)o(t)f -(ma)o(y)g(b)q(e)i(used)f(to)f(mo)o(v)o(e)h(bac)o(kw)o(ard)f(through)g -(the)h(list.)35 b(This)315 1724 y(command)15 b(is)h(in)o(tended)g(to)f -(b)q(e)h(b)q(ound)g(to)f Fm(TAB)p Fn(,)f(but)h(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)75 1809 y Fm(delete-char-or-list)e(\(\))315 -1864 y Fn(Deletes)h(the)f(c)o(haracter)g(under)h(the)g(cursor)f(if)h -(not)f(at)g(the)g(b)q(eginning)j(or)d(end)h(of)f(the)g(line)315 -1919 y(\(lik)o(e)i Fm(delete-char)p Fn(\).)j(If)d(at)f(the)h(end)g(of)f -(the)g(line,)i(b)q(eha)o(v)o(es)f(iden)o(tically)i(to)d -Fm(possible-)315 1974 y(completions)p Fn(.)k(This)e(command)f(is)h(un)o -(b)q(ound)g(b)o(y)f(default.)75 2098 y Fe(1.4.7)30 b(Keyb)r(oard)20 -b(Macros)75 2216 y Fm(start-kbd-macro)13 b(\(C-x)i(\(\))315 -2270 y Fn(Begin)h(sa)o(ving)f(the)h(c)o(haracters)e(t)o(yp)q(ed)i(in)o -(to)f(the)g(curren)o(t)g(k)o(eyb)q(oard)g(macro.)75 2356 -y Fm(end-kbd-macro)e(\(C-x)i(\)\))315 2411 y Fn(Stop)f(sa)o(ving)f(the) -h(c)o(haracters)f(t)o(yp)q(ed)h(in)o(to)f(the)h(curren)o(t)g(k)o(eyb)q -(oard)f(macro)g(and)h(sa)o(v)o(e)f(the)315 2466 y(de\014nition.)75 -2552 y Fm(call-last-kbd-macro)g(\(C-x)h(e\))315 2606 -y Fn(Re-execute)19 b(the)f(last)f(k)o(eyb)q(oard)h(macro)f(de\014ned,)i -(b)o(y)e(making)h(the)g(c)o(haracters)e(in)j(the)315 -2661 y(macro)14 b(app)q(ear)i(as)f(if)g(t)o(yp)q(ed)h(at)e(the)i(k)o -(eyb)q(oard.)p eop -%%Page: 17 19 -17 18 bop 75 -58 a Fn(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1055 -b(17)75 183 y Fe(1.4.8)30 b(Some)20 b(Miscellaneous)h(Commands)75 -298 y Fm(re-read-init-file)13 b(\(C-x)h(C-r\))315 353 -y Fn(Read)e(in)f(the)g(con)o(ten)o(ts)g(of)f(the)h Ff(inputrc)k -Fn(\014le,)d(and)g(incorp)q(orate)f(an)o(y)f(bindings)j(or)e(v)m -(ariable)315 407 y(assignmen)o(ts)k(found)h(there.)75 -491 y Fm(abort)e(\(C-g\))315 546 y Fn(Ab)q(ort)f(the)g(curren)o(t)h -(editing)g(command)f(and)h(ring)f(the)h(terminal's)f(b)q(ell)i(\(sub)s -(ject)e(to)g(the)315 600 y(setting)i(of)g Fm(bell-style)p -Fn(\).)75 684 y Fm(do-uppercase-version)d(\(M-a,)j(M-b,)f(M-)p -Ff(x)p Fm(,)h Fc(:)8 b(:)g(:)n Fm(\))315 739 y Fn(If)14 -b(the)g(meta\014ed)g(c)o(haracter)f Ff(x)k Fn(is)d(lo)o(w)o(ercase,)g -(run)g(the)g(command)f(that)h(is)g(b)q(ound)h(to)e(the)315 -794 y(corresp)q(onding)j(upp)q(ercase)g(c)o(haracter.)75 -877 y Fm(prefix-meta)e(\(ESC\))315 932 y Fn(Mak)o(e)j(the)i(next)f(c)o -(haracter)f(t)o(yp)q(ed)i(b)q(e)g(meta\014ed.)28 b(This)19 -b(is)g(for)e(k)o(eyb)q(oards)h(without)g(a)315 987 y(meta)d(k)o(ey)l(.) -20 b(T)o(yping)15 b(`)p Fm(ESC)g(f)p Fn(')f(is)i(equiv)m(alen)o(t)h(to) -d(t)o(yping)i(`)p Fm(M-f)p Fn('.)75 1070 y Fm(undo)f(\(C-_,)f(C-x)h -(C-u\))315 1125 y Fn(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q -(ered)g(for)e(eac)o(h)h(line.)75 1209 y Fm(revert-line)f(\(M-r\))315 -1263 y Fn(Undo)j(all)g(c)o(hanges)g(made)f(to)g(this)h(line.)26 -b(This)17 b(is)g(lik)o(e)h(executing)f(the)g Fm(undo)f -Fn(command)315 1318 y(enough)g(times)f(to)g(get)f(bac)o(k)h(to)g(the)g -(b)q(eginning.)75 1402 y Fm(tilde-expand)f(\(M-~\))315 -1456 y Fn(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)75 1540 y Fm(set-mark)f(\(C-@\))315 1595 y Fn(Set)g(the)f(mark)g -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)19 b(If)14 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)h(supplied,)i(the)e(mark)315 1650 y(is)i(set)f(to)f -(that)h(p)q(osition.)75 1733 y Fm(exchange-point-and-mark)d(\(C-x)j -(C-x\))315 1788 y Fn(Sw)o(ap)g(the)h(p)q(oin)o(t)g(with)g(the)g(mark.)k -(The)c(curren)o(t)f(cursor)h(p)q(osition)g(is)g(set)g(to)f(the)g(sa)o -(v)o(ed)315 1843 y(p)q(osition,)h(and)f(the)h(old)f(cursor)g(p)q -(osition)h(is)g(sa)o(v)o(ed)f(as)g(the)g(mark.)75 1926 -y Fm(character-search)e(\(C-]\))315 1981 y Fn(A)f(c)o(haracter)g(is)h -(read)g(and)f(p)q(oin)o(t)h(is)g(mo)o(v)o(ed)f(to)g(the)g(next)h(o)q -(ccurrence)g(of)f(that)g(c)o(haracter.)315 2036 y(A)j(negativ)o(e)h -(coun)o(t)f(searc)o(hes)g(for)f(previous)i(o)q(ccurrences.)75 -2119 y Fm(character-search-backward)c(\(M-C-]\))315 2174 -y Fn(A)22 b(c)o(haracter)g(is)h(read)f(and)h(p)q(oin)o(t)g(is)g(mo)o(v) -o(ed)f(to)g(the)g(previous)h(o)q(ccurrence)h(of)e(that)315 -2229 y(c)o(haracter.)d(A)c(negativ)o(e)h(coun)o(t)f(searc)o(hes)g(for)f -(subsequen)o(t)i(o)q(ccurrences.)75 2312 y Fm(insert-comment)d(\(M-#\)) -315 2367 y Fn(The)19 b(v)m(alue)i(of)e(the)g Fm(comment-begin)e -Fn(v)m(ariable)k(is)f(inserted)g(at)e(the)i(b)q(eginning)h(of)e(the)315 -2422 y(curren)o(t)c(line,)i(and)e(the)g(line)i(is)f(accepted)g(as)e(if) -i(a)f(newline)i(had)f(b)q(een)g(t)o(yp)q(ed.)75 2506 -y Fm(dump-functions)d(\(\))315 2560 y Fn(Prin)o(t)g(all)h(of)f(the)g -(functions)h(and)g(their)g(k)o(ey)f(bindings)i(to)d(the)i(Readline)h -(output)e(stream.)315 2615 y(If)j(a)g(n)o(umeric)g(argumen)o(t)f(is)i -(supplied,)h(the)e(output)f(is)i(formatted)d(in)j(suc)o(h)f(a)g(w)o(a)o -(y)f(that)315 2670 y(it)g(can)h(b)q(e)g(made)f(part)f(of)h(an)g -Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h(un)o(b)q(ound)g(b)o -(y)f(default.)p eop -%%Page: 18 20 -18 19 bop 75 -58 a Fn(18)1299 b(GNU)15 b(Readline)i(Library)75 -183 y Fm(dump-variables)c(\(\))315 238 y Fn(Prin)o(t)e(all)g(of)f(the)h -(settable)g(v)m(ariables)h(and)f(their)g(v)m(alues)h(to)e(the)h -(Readline)i(output)d(stream.)315 293 y(If)16 b(a)g(n)o(umeric)g -(argumen)o(t)f(is)i(supplied,)h(the)e(output)f(is)i(formatted)d(in)j -(suc)o(h)f(a)g(w)o(a)o(y)f(that)315 348 y(it)g(can)h(b)q(e)g(made)f -(part)f(of)h(an)g Ff(inputrc)k Fn(\014le.)i(This)16 b(command)f(is)h -(un)o(b)q(ound)g(b)o(y)f(default.)75 427 y Fm(dump-macros)f(\(\))315 -482 y Fn(Prin)o(t)j(all)h(of)e(the)h(Readline)i(k)o(ey)e(sequences)h(b) -q(ound)g(to)e(macros)g(and)h(the)g(strings)g(they)315 -537 y(ouput.)30 b(If)19 b(a)f(n)o(umeric)i(argumen)o(t)d(is)i -(supplied,)j(the)c(output)h(is)g(formatted)e(in)i(suc)o(h)g(a)315 -592 y(w)o(a)o(y)14 b(that)g(it)i(can)f(b)q(e)g(made)g(part)g(of)f(an)h -Ff(inputrc)k Fn(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)g(b)o -(y)315 647 y(default.)75 775 y Fl(1.5)33 b(Readline)23 -b(vi)h(Mo)r(de)137 871 y Fn(While)13 b(the)f(Readline)j(library)d(do)q -(es)g(not)g(ha)o(v)o(e)f(a)h(full)h(set)f(of)f Fm(vi)g -Fn(editing)j(functions,)f(it)f(do)q(es)g(con)o(tain)75 -926 y(enough)17 b(to)g(allo)o(w)g(simple)h(editing)h(of)d(the)i(line.) -27 b(The)17 b(Readline)i Fm(vi)e Fn(mo)q(de)g(b)q(eha)o(v)o(es)g(as)g -(sp)q(eci\014ed)i(in)75 981 y(the)c Fi(POSIX)h Fn(1003.2)d(standard.) -137 1048 y(In)i(order)g(to)f(switc)o(h)g(in)o(teractiv)o(ely)i(b)q(et)o -(w)o(een)f Fm(emacs)e Fn(and)i Fm(vi)f Fn(editing)i(mo)q(des,)f(use)f -(the)h(command)75 1103 y(M-C-j)g(\(toggle-editing-mo)q(de\).)21 -b(The)15 b(Readline)j(default)d(is)h Fm(emacs)f Fn(mo)q(de.)137 -1170 y(When)h(y)o(ou)e(en)o(ter)h(a)g(line)i(in)e Fm(vi)g -Fn(mo)q(de,)g(y)o(ou)g(are)f(already)i(placed)g(in)g(`insertion')f(mo)q -(de,)g(as)g(if)g(y)o(ou)75 1225 y(had)e(t)o(yp)q(ed)h(an)f(`)p -Fm(i)p Fn('.)18 b(Pressing)608 1223 y Fh(h)p 620 1197 -70 2 v 620 1225 a Fg(ESC)p 620 1233 V 687 1223 a Fh(i)715 -1225 y Fn(switc)o(hes)13 b(y)o(ou)g(in)o(to)g(`command')f(mo)q(de,)i -(where)f(y)o(ou)g(can)g(edit)h(the)75 1280 y(text)i(of)h(the)g(line)h -(with)g(the)f(standard)f Fm(vi)h Fn(mo)o(v)o(emen)o(t)f(k)o(eys,)g(mo)o -(v)o(e)g(to)h(previous)g(history)g(lines)i(with)75 1335 -y(`)p Fm(k)p Fn(')14 b(and)i(subsequen)o(t)f(lines)i(with)f(`)p -Fm(j)p Fn(',)e(and)h(so)g(forth.)p eop -%%Page: -1 21 --1 20 bop 1862 -58 a Fn(i)75 183 y Fj(T)-7 b(able)27 -b(of)f(Con)n(ten)n(ts)75 354 y Fl(1)67 b(Command)22 b(Line)i(Editing)d -Fb(.)10 b(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)h -(.)f(.)g(.)g(.)42 b Fl(1)224 423 y Fn(1.1)j(In)o(tro)q(duction)16 -b(to)f(Line)h(Editing)e Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fn(1)224 478 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)23 b Fn(1)374 532 y(1.2.1)44 b(Readline)17 -b(Bare)e(Essen)o(tials)f Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fn(1)374 587 y(1.2.2)44 b(Readline)17 b(Mo)o(v)o(emen)o(t)d(Commands) -7 b Fa(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f -(.)h(.)21 b Fn(2)374 642 y(1.2.3)44 b(Readline)17 b(Killing)h(Commands) -11 b Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fn(2)374 697 y(1.2.4)44 b(Readline)17 -b(Argumen)o(ts)12 b Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 -b Fn(3)374 752 y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h -(the)f(History)e Fa(.)8 b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fn(3)224 806 y(1.3)45 b(Readline)17 b(Init)g(File)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)29 b Fn(4)374 861 y(1.3.1)44 b(Readline)17 -b(Init)f(File)h(Syn)o(tax)7 b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fn(4)374 916 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)5 -b Fa(.)i(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)g(.)f(.)19 b Fn(8)374 971 y(1.3.3)44 b(Sample)16 -b(Init)g(File)11 b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)26 b Fn(9)224 1026 y(1.4)45 b(Bindable)17 b(Readline)h -(Commands)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fn(12)374 1080 y(1.4.1)44 b(Commands)14 b(F)l(or)h(Mo)o(ving)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fn(12)374 1135 y(1.4.2)44 -b(Commands)14 b(F)l(or)h(Manipulating)i(The)e(History)9 -b Fa(.)e(.)h(.)f(.)h(.)f(.)h(.)24 b Fn(12)374 1190 y(1.4.3)44 -b(Commands)14 b(F)l(or)h(Changing)h(T)l(ext)e Fa(.)8 -b(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)30 -b Fn(13)374 1245 y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)9 -b Fa(.)e(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 b Fn(14)374 -1299 y(1.4.5)44 b(Sp)q(ecifying)17 b(Numeric)f(Argumen)o(ts)c -Fa(.)c(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)27 -b Fn(15)374 1354 y(1.4.6)44 b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l -(or)g(Y)l(ou)10 b Fa(.)d(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)25 b Fn(16)374 1409 y(1.4.7)44 b(Keyb)q(oard)15 -b(Macros)6 b Fa(.)h(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fn(16)374 1464 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)7 -b Fa(.)g(.)g(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -22 b Fn(17)224 1519 y(1.5)45 b(Readline)17 b(vi)f(Mo)q(de)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)28 b Fn(18)p eop -%%Page: -2 22 --2 21 bop 75 -58 a Fn(ii)1321 b(GNU)15 b(Readline)i(Library)p -eop -%%Trailer -end -userdict /end-hook known{end-hook}if -%%EOF diff --git a/gnu/lib/libreadline/doc/texi2dvi b/gnu/lib/libreadline/doc/texi2dvi deleted file mode 100644 index a249350495e..00000000000 --- a/gnu/lib/libreadline/doc/texi2dvi +++ /dev/null @@ -1,362 +0,0 @@ -#! /bin/sh -# texi2dvi --- smartly produce DVI files from texinfo sources -# $Id: texi2dvi,v 1.1 2001/03/18 17:32:04 millert Exp $ -# -# Copyright (C) 1992, 93, 94, 95, 96, 97, 98 Free Software Foundation, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, you can either send email to this -# program's maintainer or write to: The Free Software Foundation, -# Inc.; 59 Temple Place, Suite 330; Boston, MA 02111-1307, USA. -# -# Commentary: -# -# Author: Noah Friedman <friedman@gnu.org> -# -# Please send bug reports, etc. to bug-texinfo@gnu.org. -# If possible, please send a copy of the output of the script called with -# the `--debug' option when making a bug report. -# -# In the interest of general portability, some common bourne shell -# constructs were avoided because they weren't guaranteed to be available -# in some earlier implementations. I've tried to make this program as -# portable as possible. Welcome to unix, where the lowest common -# denominator is rapidly diminishing. -# -# Among the more interesting lossages I noticed among Bourne shells: -# * No shell functions. -# * No `unset' builtin. -# * `shift' cannot take a numeric argument, and signals an error if -# there are no arguments to shift. -# -# Code: - -# Name by which this script was invoked. -progname=`echo "$0" | sed -e 's/[^\/]*\///g'` - -# This string is expanded by rcs automatically when this file is checked out. -rcs_revision='$Revision: 1.1 $' -version=`set - $rcs_revision; echo $2` - -# To prevent hairy quoting and escaping later. -bq='`' -eq="'" - -usage="Usage: $0 [OPTION]... FILE... -Run a Texinfo document through TeX. - -Options: --b, --batch No interaction (\nonstopmode in TeX). --c, --clean Remove all auxiliary files. --D, --debug Turn on shell debugging ($bq${bq}set -x$eq$eq). --t, --texinfo CMD Insert CMD after @setfilename before running TeX. ---verbose Report on what is done. --h, --help Display this help and exit. --v, --version Display version information and exit. - -The values of the TEX, TEXINDEX, and MAKEINFO environment variables are -used to run those commands, if they are set. - -Email bug reports to bug-texinfo@gnu.org." - -# Initialize variables. -# Don't use `unset' since old bourne shells don't have this command. -# Instead, assign them an empty value. -# Some of these, like TEX and TEXINDEX, may be inherited from the environment. -backup_extension=.bak # these files get deleted if all goes well. -batch= -clean= -debug= -orig_pwd="`pwd`" -textra= -verbose=false -makeinfo="${MAKEINFO-makeinfo}" -texindex="${TEXINDEX-texindex}" -tex="${TEX-tex}" - -# Save this so we can construct a new TEXINPUTS path for each file. -TEXINPUTS_orig="$TEXINPUTS" -export TEXINPUTS - -# Parse command line arguments. -# Make sure that all wildcarded options are long enough to be unambiguous. -# It's a good idea to document the full long option name in each case. -# Long options which take arguments will need a `*' appended to the -# canonical name to match the value appended after the `=' character. -while :; do - test $# -eq 0 && break - - case "$1" in - -b | --batch | --b* ) batch=t; shift ;; - -c | --clean | --c* ) clean=t; shift ;; - -D | --debug | --d* ) debug=t; shift ;; - -h | --help | --h* ) echo "$usage"; exit 0 ;; - # OK, we should do real option parsing here, but be lazy for now. - -t | --texinfo | --t*) shift; textra="$textra $1"; shift ;; - -v | --vers* ) - echo "$progname (GNU Texinfo 3.12) $version" - echo "Copyright (C) 1998 Free Software Foundation, Inc. -There is NO warranty. You may redistribute this software -under the terms of the GNU General Public License. -For more information about these matters, see the files named COPYING." - exit 0 ;; - --verb* ) verbose=echo; shift ;; - -- ) # Stop option processing - shift - break ;; - -* ) - case "$1" in - --*=* ) arg=`echo "$1" | sed -e 's/=.*//'` ;; - * ) arg="$1" ;; - esac - exec 1>&2 - echo "$progname: Unknown or ambiguous option $bq$arg$eq." - echo "$progname: Try $bq--help$eq for more information." - exit 1 ;; - * ) break ;; - esac -done - -# See if there are any command line args left (which will be interpreted as -# filename arguments). -if test $# -eq 0; then - exec 1>&2 - echo "$progname: At least one file name is required as an argument." - echo "$progname: Try $bq--help$eq for more information." - exit 2 -fi - -test "$debug" = t && set -x - -# Texify files -for command_line_filename in ${1+"$@"}; do - $verbose "Processing $command_line_filename ..." - - # See if file exists. If it doesn't we're in trouble since, even - # though the user may be able to reenter a valid filename at the tex - # prompt (assuming they're attending the terminal), this script won't - # be able to find the right index files and so forth. - if test ! -r "${command_line_filename}"; then - echo "$0: Could not read ${command_line_filename}." >&2 - continue - fi - - # Roughly equivalent to `dirname ...`, but more portable - directory="`echo ${command_line_filename} | sed 's/\/[^\/]*$//'`" - filename_texi="`basename ${command_line_filename}`" - # Strip off the last extension part (probably .texinfo or .texi) - filename_noext="`echo ${filename_texi} | sed 's/\.[^.]*$//'`" - - # Use same basename since we want to generate aux files with the same - # basename as the manual. Use extension .texi for the temp file so - # that TeX will ignore it. Thus, we must use a subdirectory. - # - # Output the macro-expanded file to here. The vastly abbreviated - # temporary directory name is so we don't have collisions on 8.3 or - # 14-character filesystems. - tmp_dir=${TMPDIR-/tmp}/txi2d.$$ - filename_tmp=$tmp_dir/$filename_noext.texi - # Output the file with the user's extra commands to here. - tmp_dir2=${tmp_dir}.2 - filename_tmp2=$tmp_dir2/$filename_noext.texi - mkdir $tmp_dir $tmp_dir2 - # Always remove the temporary directories. - trap "rm -rf $tmp_dir $tmp_dir2" 1 2 15 - - # If directory and file are the same, then it's probably because there's - # no pathname component. Set dirname to `.', the current directory. - if test "z${directory}" = "z${command_line_filename}"; then - directory=. - fi - - # Source file might @include additional texinfo sources. Put `.' and - # directory where source file(s) reside in TEXINPUTS before anything - # else. `.' goes first to ensure that any old .aux, .cps, etc. files in - # ${directory} don't get used in preference to fresher files in `.'. - TEXINPUTS=".:${directory}:${TEXINPUTS_orig}" - - # Expand macro commands in the original source file using Makeinfo; - # the macro syntax bfox implemented is impossible to implement in TeX. - # Always use `end' footnote style, since the `separate' style - # generates different output (arguably this is a bug in -E). - # Discard main info output, the user asked to run TeX, not makeinfo. - # Redirect output to /dev/null to throw away `Making info file...' msg. - $verbose "Macro-expanding $command_line_filename to $filename_tmp ..." - $makeinfo --footnote-style=end -E $filename_tmp -o /dev/null \ - $command_line_filename >/dev/null - - # But if there were no macros, or makeinfo failed for some reason, - # just use the original file. (It shouldn't make any difference, but - # let's be safe.) - if test $? -ne 0 || cmp -s $filename_tmp $command_line_filename; then - $verbose "Reverting to $command_line_filename ..." - cp -p $command_line_filename $filename_tmp - fi - filename_input=$filename_tmp - dirname_input=$tmp_dir - - # Used most commonly for @finalout, @smallbook, etc. - if test -n "$textra"; then - $verbose "Inserting extra commands: $textra." - sed '/^@setfilename/a\ -'"$textra" $filename_input >$filename_tmp2 - filename_input=$filename_tmp2 - dirname_input=$tmp_dir2 - fi - - # If clean mode was specified, then move to the temporary directory. - if test "$clean" = t; then - $verbose "cd $dirname_input" - cd $dirname_input || exit 1 - filename_input=`basename $filename_input` - fi - - while true; do # will break out of loop below - # "Unset" variables that might have values from previous iterations and - # which won't be completely reset later. - definite_index_files= - - # Find all files having root filename with a two-letter extension, - # determine whether they're really index files, and save them. Foo.aux - # is actually the cross-references file, but we need to keep track of - # that too. - possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" - for this_file in ${possible_index_files}; do - # If file is empty, forget it. - test -s "${this_file}" || continue - - # Examine first character of file. If it's not suitable to be an - # index or xref file, don't process it. - first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" - if test "x${first_character}" = "x\\" \ - || test "x${first_character}" = "x'"; then - definite_index_files="${definite_index_files} ${this_file}" - fi - done - orig_index_files="${definite_index_files}" - orig_index_files_sans_aux="`echo ${definite_index_files} \ - | sed 's/'${filename_noext}'\.aux//; - s/^[ ]*//;s/[ ]*$//;'`" - - # Now save copies of original index files so we have some means of - # comparison later. - $verbose "Backing up current index files: $orig_index_files ..." - for index_file_to_save in ${orig_index_files}; do - cp "${index_file_to_save}" "${index_file_to_save}${backup_extension}" - done - - # Run texindex on current index files. If they already exist, and - # after running TeX a first time the index files don't change, then - # there's no reason to run TeX again. But we won't know that if the - # index files are out of date or nonexistent. - if test -n "${orig_index_files_sans_aux}"; then - $verbose "Running $texindex $orig_index_files_sans_aux ..." - ${texindex} ${orig_index_files_sans_aux} - fi - - # Finally, run TeX. - if test "$batch" = t; then - tex_mode='\nonstopmode' - else - tex_mode= - fi - $verbose "Running $tex $filename_input ..." - cmd="$tex $tex_mode \\input $filename_input" - $cmd - - # Check if index files changed. - # - definite_index_files= - # Get list of new index files. - possible_index_files="`eval echo ${filename_noext}.?? ${filename_noext}.aux`" - for this_file in ${possible_index_files}; do - # If file is empty, forget it. - test -s "${this_file}" || continue - - # Examine first character of file. If it's not a backslash or - # single quote, then it's definitely not an index or xref file. - # (Will have to check for @ when we switch to Texinfo syntax in - # all these files...) - first_character="`sed -n '1s/^\(.\).*$/\1/p;q' ${this_file}`" - if test "x${first_character}" = "x\\" \ - || test "x${first_character}" = "x'"; then - definite_index_files="${definite_index_files} ${this_file}" - fi - done - new_index_files="${definite_index_files}" - new_index_files_sans_aux="`echo ${definite_index_files} \ - | sed 's/'${filename_noext}'\.aux//; - s/^[ ]*//;s/[ ]*$//;'`" - - # If old and new list don't at least have the same file list, then one - # file or another has definitely changed. - $verbose "Original index files =$orig_index_files" - $verbose "New index files =$new_index_files" - if test "z${orig_index_files}" != "z${new_index_files}"; then - index_files_changed_p=t - else - # File list is the same. We must compare each file until we find a - # difference. - index_files_changed_p= - for this_file in ${new_index_files}; do - $verbose "Comparing index file $this_file ..." - # cmp -s will return nonzero exit status if files differ. - cmp -s "${this_file}" "${this_file}${backup_extension}" - if test $? -ne 0; then - # We only need to keep comparing until we find *one* that - # differs, because we'll have to run texindex & tex no - # matter what. - index_files_changed_p=t - $verbose "Index file $this_file differed:" - test $verbose = echo \ - && diff -c "${this_file}${backup_extension}" "${this_file}" - break - fi - done - fi - - # If index files have changed since TeX has been run, or if the aux - # file wasn't present originally, run texindex and TeX again. - if test "${index_files_changed_p}"; then :; else - # Nothing changed. We're done with TeX. - break - fi - done - - # If we were in clean mode, compilation was in a tmp directory. - # Copy the DVI file into the directory where the compilation - # has been done. (The temp dir is about to get removed anyway.) - # We also return to the original directory so that - # - the next file is processed in correct conditions - # - the temporary file can be removed - if test -n "$clean"; then - $verbose "Copying DVI file from `pwd` to $orig_pwd" - cp -p $filename_noext.dvi $orig_pwd - cd $orig_pwd || exit 1 - fi - - # Generate list of files to delete, then call rm once with the entire - # list. This is significantly faster than multiple executions of rm. - file_list= - for file in ${orig_index_files}; do - file_list="${file_list} ${file}${backup_extension}" - done - if test -n "${file_list}"; then - $verbose "Removing $file_list $tmp_dir $tmp_dir2 ..." - rm -f ${file_list} - rm -rf $tmp_dir $tmp_dir2 - fi -done - -$verbose "$0 done." -true # exit successfully. diff --git a/gnu/lib/libreadline/doc/texi2html b/gnu/lib/libreadline/doc/texi2html deleted file mode 100644 index 4beec01b341..00000000000 --- a/gnu/lib/libreadline/doc/texi2html +++ /dev/null @@ -1,2081 +0,0 @@ -#!/usr/local/bin/perl -'di '; -'ig 00 '; -#+############################################################################## -# # -# File: texi2html # -# # -# Description: Program to transform most Texinfo documents to HTML # -# # -#-############################################################################## - -# @(#)texi2html 1.52 01/05/98 Written (mainly) by Lionel Cons, Lionel.Cons@cern.ch - -# The man page for this program is included at the end of this file and can be -# viewed using the command 'nroff -man texi2html'. -# Please read the copyright at the end of the man page. - -#+++############################################################################ -# # -# Constants # -# # -#---############################################################################ - -$DEBUG_TOC = 1; -$DEBUG_INDEX = 2; -$DEBUG_BIB = 4; -$DEBUG_GLOSS = 8; -$DEBUG_DEF = 16; -$DEBUG_HTML = 32; -$DEBUG_USER = 64; - -$BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference -$FILERE = '[\/\w.+-]+'; # RE for a file name -$VARRE = '[^\s\{\}]+'; # RE for a variable name -$NODERE = '[^@{}:\'`",]+'; # RE for a node name -$NODESRE = '[^@{}:\'`"]+'; # RE for a list of node names -$XREFRE = '[^@{}]+'; # RE for a xref (should use NODERE) - -$ERROR = "***"; # prefix for errors and warnings -$THISPROG = "texi2html 1.52"; # program name and version -$HOMEPAGE = "http://wwwinfo.cern.ch/dis/texi2html/"; # program home page -$TODAY = &pretty_date; # like "20 September 1993" -$SPLITTAG = "<!-- SPLIT HERE -->\n"; # tag to know where to split -$PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections -$html2_doctype = '<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0 Strict Level 2//EN">'; - -# -# language dependent constants -# -#$LDC_SEE = 'see'; -#$LDC_SECTION = 'section'; -#$LDC_IN = 'in'; -#$LDC_TOC = 'Table of Contents'; -#$LDC_GOTO = 'Go to the'; -#$LDC_FOOT = 'Footnotes'; -# TODO: @def* shortcuts - -# -# pre-defined indices -# -%predefined_index = ( - 'cp', 'c', - 'fn', 'f', - 'vr', 'v', - 'ky', 'k', - 'pg', 'p', - 'tp', 't', - ); - -# -# valid indices -# -%valid_index = ( - 'c', 1, - 'f', 1, - 'v', 1, - 'k', 1, - 'p', 1, - 't', 1, - ); - -# -# texinfo section names to level -# -%sec2level = ( - 'top', 0, - 'chapter', 1, - 'unnumbered', 1, - 'majorheading', 1, - 'chapheading', 1, - 'appendix', 1, - 'section', 2, - 'unnumberedsec', 2, - 'heading', 2, - 'appendixsec', 2, - 'appendixsection', 2, - 'subsection', 3, - 'unnumberedsubsec', 3, - 'subheading', 3, - 'appendixsubsec', 3, - 'subsubsection', 4, - 'unnumberedsubsubsec', 4, - 'subsubheading', 4, - 'appendixsubsubsec', 4, - ); - -# -# accent map, TeX command to ISO name -# -%accent_map = ( - '"', 'uml', - '~', 'tilde', - '^', 'circ', - '`', 'grave', - '\'', 'acute', - ); - -# -# texinfo "simple things" (@foo) to HTML ones -# -%simple_map = ( - # cf. makeinfo.c - "*", "<BR>", # HTML+ - " ", " ", - "\n", "\n", - "|", "", - # spacing commands - ":", "", - "!", "!", - "?", "?", - ".", ".", - "-", "", - ); - -# -# texinfo "things" (@foo{}) to HTML ones -# -%things_map = ( - 'TeX', 'TeX', - 'br', '<P>', # paragraph break - 'bullet', '*', - 'copyright', '(C)', - 'dots', '...', - 'equiv', '==', - 'error', 'error-->', - 'expansion', '==>', - 'minus', '-', - 'point', '-!-', - 'print', '-|', - 'result', '=>', - 'today', $TODAY, - ); - -# -# texinfo styles (@foo{bar}) to HTML ones -# -%style_map = ( - 'asis', '', - 'b', 'B', - 'cite', 'CITE', - 'code', 'CODE', - 'ctrl', '&do_ctrl', # special case - 'dfn', 'EM', # DFN tag is illegal in the standard - 'dmn', '', # useless - 'email', '&do_email', # insert a clickable email address - 'emph', 'EM', - 'file', '"TT', # will put quotes, cf. &apply_style - 'i', 'I', - 'kbd', 'KBD', - 'key', 'KBD', - 'math', 'EM', - 'r', '', # unsupported - 'samp', '"SAMP', # will put quotes, cf. &apply_style - 'sc', '&do_sc', # special case - 'strong', 'STRONG', - 't', 'TT', - 'titlefont', '', # useless - 'uref', '&do_uref', # insert a clickable URL - 'url', '&do_url', # insert a clickable URL - 'var', 'VAR', - 'w', '', # unsupported - ); - -# -# texinfo format (@foo/@end foo) to HTML ones -# -%format_map = ( - 'display', 'PRE', - 'example', 'PRE', - 'format', 'PRE', - 'lisp', 'PRE', - 'quotation', 'BLOCKQUOTE', - 'smallexample', 'PRE', - 'smalllisp', 'PRE', - # lists - 'itemize', 'UL', - 'enumerate', 'OL', - # poorly supported - 'flushleft', 'PRE', - 'flushright', 'PRE', - ); - -# -# texinfo definition shortcuts to real ones -# -%def_map = ( - # basic commands - 'deffn', 0, - 'defvr', 0, - 'deftypefn', 0, - 'deftypevr', 0, - 'defcv', 0, - 'defop', 0, - 'deftp', 0, - # basic x commands - 'deffnx', 0, - 'defvrx', 0, - 'deftypefnx', 0, - 'deftypevrx', 0, - 'defcvx', 0, - 'defopx', 0, - 'deftpx', 0, - # shortcuts - 'defun', 'deffn Function', - 'defmac', 'deffn Macro', - 'defspec', 'deffn {Special Form}', - 'defvar', 'defvr Variable', - 'defopt', 'defvr {User Option}', - 'deftypefun', 'deftypefn Function', - 'deftypevar', 'deftypevr Variable', - 'defivar', 'defcv {Instance Variable}', - 'defmethod', 'defop Method', - # x shortcuts - 'defunx', 'deffnx Function', - 'defmacx', 'deffnx Macro', - 'defspecx', 'deffnx {Special Form}', - 'defvarx', 'defvrx Variable', - 'defoptx', 'defvrx {User Option}', - 'deftypefunx', 'deftypefnx Function', - 'deftypevarx', 'deftypevrx Variable', - 'defivarx', 'defcvx {Instance Variable}', - 'defmethodx', 'defopx Method', - ); - -# -# things to skip -# -%to_skip = ( - # comments - 'c', 1, - 'comment', 1, - # useless - 'contents', 1, - 'shortcontents', 1, - 'summarycontents', 1, - 'footnotestyle', 1, - 'end ifclear', 1, - 'end ifset', 1, - 'titlepage', 1, - 'end titlepage', 1, - # unsupported commands (formatting) - 'afourpaper', 1, - 'cropmarks', 1, - 'finalout', 1, - 'headings', 1, - 'need', 1, - 'page', 1, - 'setchapternewpage', 1, - 'everyheading', 1, - 'everyfooting', 1, - 'evenheading', 1, - 'evenfooting', 1, - 'oddheading', 1, - 'oddfooting', 1, - 'smallbook', 1, - 'vskip', 1, - 'filbreak', 1, - 'paragraphindent', 1, - # unsupported formats - 'cartouche', 1, - 'end cartouche', 1, - 'group', 1, - 'end group', 1, - ); - -#+++############################################################################ -# # -# Argument parsing, initialisation # -# # -#---############################################################################ - -%value = (); # hold texinfo variables, see also -D - -$use_bibliography = 1; -$use_acc = 0; -$debug = 0; -$doctype = ''; -$check = 0; -$expandinfo = 0; -$use_glossary = 0; -$invisible_mark = ''; -$use_iso = 0; -@include_dirs = (); -$show_menu = 0; -$number_sections = 0; -$split_node = 0; -$split_chapter = 0; -$monolithic = 0; -$verbose = 0; -$usage = <<EOT; -This is $THISPROG -To convert a Texinfo file to HMTL: $0 [options] file - where options can be: - -expandinfo : use \@ifinfo sections, not \@iftex - -glossary : handle a glossary - -invisible name: use 'name' as an invisible anchor - -Dname : define name like with \@set - -I dir : search also for files in 'dir' - -menu : handle menus - -monolithic : output only one file including ToC - -number : number sections - -split_chapter : split on main sections - -split_node : split on nodes - -usage : print usage instructions - -verbose : verbose output -To check converted files: $0 -check [-verbose] files -EOT - -while (@ARGV && $ARGV[0] =~ /^-/) { - $_ = shift(@ARGV); - if (/^-acc$/) { $use_acc = 1; next; } - if (/^-d(ebug)?(\d+)?$/) { $debug = $2 || shift(@ARGV); next; } - if (/^-doctype$/) { $doctype = shift(@ARGV); next; } - if (/^-c(heck)?$/) { $check = 1; next; } - if (/^-e(xpandinfo)?$/) { $expandinfo = 1; next; } - if (/^-g(lossary)?$/) { $use_glossary = 1; next; } - if (/^-i(nvisible)?$/) { $invisible_mark = shift(@ARGV); next; } - if (/^-iso$/) { $use_iso = 1; next; } - if (/^-D(.+)?$/) { $value{$1 || shift(@ARGV)} = 1; next; } - if (/^-I(.+)?$/) { push(@include_dirs, $1 || shift(@ARGV)); next; } - if (/^-m(enu)?$/) { $show_menu = 1; next; } - if (/^-mono(lithic)?$/) { $monolithic = 1; next; } - if (/^-n(umber)?$/) { $number_sections = 1; next; } - if (/^-s(plit)?_?(n(ode)?|c(hapter)?)?$/) { - if ($2 =~ /^n/) { - $split_node = 1; - } else { - $split_chapter = 1; - } - next; - } - if (/^-v(erbose)?$/) { $verbose = 1; next; } - die $usage; -} -if ($check) { - die $usage unless @ARGV > 0; - ✓ - exit; -} - -if (($split_node || $split_chapter) && $monolithic) { - warn "Can't use -monolithic with -split, -monolithic ignored.\n"; - $monolithic = 0; -} -if ($expandinfo) { - $to_skip{'ifinfo'}++; - $to_skip{'end ifinfo'}++; -} else { - $to_skip{'iftex'}++; - $to_skip{'end iftex'}++; -} -$invisible_mark = '<IMG SRC="invisible.xbm">' if $invisible_mark eq 'xbm'; -die $usage unless @ARGV == 1; -$docu = shift(@ARGV); -if ($docu =~ /.*\//) { - chop($docu_dir = $&); - $docu_name = $'; -} else { - $docu_dir = '.'; - $docu_name = $docu; -} -unshift(@include_dirs, $docu_dir); -$docu_name =~ s/\.te?x(i|info)?$//; # basename of the document - -$docu_doc = "$docu_name.html"; # document's contents -if ($monolithic) { - $docu_toc = $docu_foot = $docu_doc; -} else { - $docu_toc = "${docu_name}_toc.html"; # document's table of contents - $docu_foot = "${docu_name}_foot.html"; # document's footnotes -} - -# -# variables -# -$value{'html'} = 1; # predefine html (the output format) -$value{'texi2html'} = '1.52'; # predefine texi2html (the translator) -# _foo: internal to track @foo -foreach ('_author', '_title', '_subtitle', - '_settitle', '_setfilename') { - $value{$_} = ''; # prevent -w warnings -} -%node2sec = (); # node to section name -%node2href = (); # node to HREF -%bib2href = (); # bibliography reference to HREF -%gloss2href = (); # glossary term to HREF -@sections = (); # list of sections -%tag2pro = (); # protected sections - -# -# initial indexes -# -$bib_num = 0; -$foot_num = 0; -$gloss_num = 0; -$idx_num = 0; -$sec_num = 0; -$doc_num = 0; -$html_num = 0; - -# -# can I use ISO8879 characters? (HTML+) -# -if ($use_iso) { - $things_map{'bullet'} = "•"; - $things_map{'copyright'} = "©"; - $things_map{'dots'} = "…"; - $things_map{'equiv'} = "≡"; - $things_map{'expansion'} = "→"; - $things_map{'point'} = "∗"; - $things_map{'result'} = "⇒"; -} - -# -# read texi2html extensions (if any) -# -$extensions = 'texi2html.ext'; # extensions in working directory -if (-f $extensions) { - print "# reading extensions from $extensions\n" if $verbose; - require($extensions); -} -($progdir = $0) =~ s/[^\/]+$//; -if ($progdir && ($progdir ne './')) { - $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory - if (-f $extensions) { - print "# reading extensions from $extensions\n" if $verbose; - require($extensions); - } -} - -print "# reading from $docu\n" if $verbose; - -#+++############################################################################ -# # -# Pass 1: read source, handle command, variable, simple substitution # -# # -#---############################################################################ - -@lines = (); # whole document -@toc_lines = (); # table of contents -$toplevel = 0; # top level seen in hierarchy -$curlevel = 0; # current level in TOC -$node = ''; # current node name -$in_table = 0; # am I inside a table -$table_type = ''; # type of table ('', 'f', 'v', 'multi') -@tables = (); # nested table support -$in_bibliography = 0; # am I inside a bibliography -$in_glossary = 0; # am I inside a glossary -$in_top = 0; # am I inside the top node -$in_pre = 0; # am I inside a preformatted section -$in_list = 0; # am I inside a list -$in_html = 0; # am I inside an HTML section -$first_line = 1; # is it the first line -$dont_html = 0; # don't protect HTML on this line -$split_num = 0; # split index -$deferred_ref = ''; # deferred reference for indexes -@html_stack = (); # HTML elements stack -$html_element = ''; # current HTML element -&html_reset; - -# build code for simple substitutions -# the maps used (%simple_map and %things_map) MUST be aware of this -# watch out for regexps, / and escaped characters! -$subst_code = ''; -foreach (keys(%simple_map)) { - ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars - $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n"; -} -foreach (keys(%things_map)) { - $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n"; -} -if ($use_acc) { - # accentuated characters - foreach (keys(%accent_map)) { - if ($_ eq "`") { - $subst_code .= "s/$;3"; - } elsif ($_ eq "'") { - $subst_code .= "s/$;4"; - } else { - $subst_code .= "s/\\\@\\$_"; - } - $subst_code .= "([aeiou])/&\${1}$accent_map{$_};/gi;\n"; - } -} -eval("sub simple_substitutions { $subst_code }"); - -&init_input; -while ($_ = &next_line) { - # - # remove \input on the first lines only - # - if ($first_line) { - next if /^\\input/; - $first_line = 0; - } - # - # parse texinfo tags - # - $tag = ''; - $end_tag = ''; - if (/^\@end\s+(\w+)\b/) { - $end_tag = $1; - } elsif (/^\@(\w+)\b/) { - $tag = $1; - } - # - # handle @ifhtml / @end ifhtml - # - if ($in_html) { - if ($end_tag eq 'ifhtml') { - $in_html = 0; - } else { - $tag2pro{$in_html} .= $_; - } - next; - } elsif ($tag eq 'ifhtml') { - $in_html = $PROTECTTAG . ++$html_num; - push(@lines, $in_html); - next; - } - # - # try to skip the line - # - if ($end_tag) { - next if $to_skip{"end $end_tag"}; - } elsif ($tag) { - next if $to_skip{$tag}; - last if $tag eq 'bye'; - } - if ($in_top) { - # parsing the top node - if ($tag eq 'node' || $tag eq 'include' || $sec2level{$tag}) { - # no more in top - $in_top = 0; - } else { - # skip it - next; - } - } - # - # try to remove inlined comments - # syntax from tex-mode.el comment-start-skip - # - s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; - # non-@ substitutions cf. texinfmt.el - unless ($in_pre) { - s/``/\"/g; - s/''/\"/g; - s/([\w ])---([\w ])/$1--$2/g; - } - # - # analyze the tag - # - if ($tag) { - # skip lines - &skip_until($tag), next if $tag eq 'ignore'; - if ($expandinfo) { - &skip_until($tag), next if $tag eq 'iftex'; - } else { - &skip_until($tag), next if $tag eq 'ifinfo'; - } - &skip_until($tag), next if $tag eq 'tex'; - # handle special tables - if ($tag =~ /^(|f|v|multi)table$/) { - $table_type = $1; - $tag = 'table'; - } - # special cases - if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) { - $in_top = 1; - @lines = (); # ignore all lines before top (title page garbage) - next; - } elsif ($tag eq 'node') { - $in_top = 0; - warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o; - $_ = &protect_html($_); # if node contains '&' for instance - s/^\@node\s+//; - ($node) = split(/,/); - &normalise_node($node); - if ($split_node) { - &next_doc; - push(@lines, $SPLITTAG) if $split_num++; - push(@sections, $node); - } - next; - } elsif ($tag eq 'include') { - if (/^\@include\s+($FILERE)\s*$/o) { - $file = $1; - unless (-e $file) { - foreach $dir (@include_dirs) { - $file = "$dir/$1"; - last if -e $file; - } - } - if (-e $file) { - &open($file); - print "# including $file\n" if $verbose; - } else { - warn "$ERROR Can't find $file, skipping"; - } - } else { - warn "$ERROR Bad include line: $_"; - } - next; - } elsif ($tag eq 'ifclear') { - if (/^\@ifclear\s+($VARRE)\s*$/o) { - next unless defined($value{$1}); - &skip_until($tag); - } else { - warn "$ERROR Bad ifclear line: $_"; - } - next; - } elsif ($tag eq 'ifset') { - if (/^\@ifset\s+($VARRE)\s*$/o) { - next if defined($value{$1}); - &skip_until($tag); - } else { - warn "$ERROR Bad ifset line: $_"; - } - next; - } elsif ($tag eq 'menu') { - unless ($show_menu) { - &skip_until($tag); - next; - } - &html_push_if($tag); - push(@lines, &html_debug("\n", __LINE__)); - } elsif ($format_map{$tag}) { - $in_pre = 1 if $format_map{$tag} eq 'PRE'; - &html_push_if($format_map{$tag}); - push(@lines, &html_debug("\n", __LINE__)); - $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ; - push(@lines, &debug("<$format_map{$tag}>\n", __LINE__)); - next; - } elsif ($tag eq 'table') { - if (/^\@(|f|v|multi)table\s+\@(\w+)/) { - $in_table = $2; - unshift(@tables, join($;, $table_type, $in_table)); - if ($table_type eq "multi") { - push(@lines, &debug("<TABLE BORDER>\n", __LINE__)); - &html_push_if('TABLE'); - } else { - push(@lines, &debug("<DL COMPACT>\n", __LINE__)); - &html_push_if('DL'); - } - push(@lines, &html_debug("\n", __LINE__)); - } else { - warn "$ERROR Bad table line: $_"; - } - next; - } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') { - if (/^\@$tag\s+(\w)\w\s+(\w)\w\s*$/) { - eval("*${1}index = *${2}index"); - } else { - warn "$ERROR Bad syn*index line: $_"; - } - next; - } elsif ($tag eq 'sp') { - push(@lines, &debug("<P>\n", __LINE__)); - next; - } elsif ($tag eq 'setref') { - &protect_html; # if setref contains '&' for instance - if (/^\@$tag\s*{($NODERE)}\s*$/) { - $setref = $1; - $setref =~ s/\s+/ /g; # normalize - $setref =~ s/ $//; - $node2sec{$setref} = $name; - $node2href{$setref} = "$docu_doc#$docid"; - } else { - warn "$ERROR Bad setref line: $_"; - } - next; - } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') { - if (/^\@$tag\s+(\w\w)\s*$/) { - $valid_index{$1} = 1; - } else { - warn "$ERROR Bad defindex line: $_"; - } - next; - } elsif (defined($def_map{$tag})) { - if ($def_map{$tag}) { - s/^\@$tag\s+//; - $tag = $def_map{$tag}; - $_ = "\@$tag $_"; - $tag =~ s/\s.*//; - } - } elsif (defined($user_sub{$tag})) { - s/^\@$tag\s+//; - $sub = $user_sub{$tag}; - print "# user $tag = $sub, arg: $_" if $debug & $DEBUG_USER; - if (defined(&$sub)) { - chop($_); - &$sub($_); - } else { - warn "$ERROR Bad user sub for $tag: $sub\n"; - } - next; - } - if (defined($def_map{$tag})) { - s/^\@$tag\s+//; - if ($tag =~ /x$/) { - # extra definition line - $tag = $`; - $is_extra = 1; - } else { - $is_extra = 0; - } - while (/\{([^\{\}]*)\}/) { - # this is a {} construct - ($before, $contents, $after) = ($`, $1, $'); - # protect spaces - $contents =~ s/\s+/$;9/g; - # restore $_ protecting {} - $_ = "$before$;7$contents$;8$after"; - } - @args = split(/\s+/, &protect_html($_)); - foreach (@args) { - s/$;9/ /g; # unprotect spaces - s/$;7/\{/g; # ... { - s/$;8/\}/g; # ... } - } - $type = shift(@args); - $type =~ s/^\{(.*)\}$/$1/; - print "# def ($tag): {$type} ", join(', ', @args), "\n" - if $debug & $DEBUG_DEF; - $type .= ':'; # it's nicer like this - $name = shift(@args); - $name =~ s/^\{(.*)\}$/$1/; - if ($is_extra) { - $_ = &debug("<DT>", __LINE__); - } else { - $_ = &debug("<DL>\n<DT>", __LINE__); - } - if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') { - $_ .= "<U>$type</U> <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr' - || $tag eq 'defcv' || $tag eq 'defop') { - $ftype = $name; - $name = shift(@args); - $name =~ s/^\{(.*)\}$/$1/; - $_ .= "<U>$type</U> $ftype <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } else { - warn "$ERROR Unknown definition type: $tag\n"; - $_ .= "<U>$type</U> <B>$name</B>"; - $_ .= " <I>@args</I>" if @args; - } - $_ .= &debug("\n<DD>", __LINE__); - $name = &unprotect_html($name); - if ($tag eq 'deffn' || $tag eq 'deftypefn') { - unshift(@input_spool, "\@findex $name\n"); - } elsif ($tag eq 'defop') { - unshift(@input_spool, "\@findex $name on $ftype\n"); - } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') { - unshift(@input_spool, "\@vindex $name\n"); - } else { - unshift(@input_spool, "\@tindex $name\n"); - } - $dont_html = 1; - } - } elsif ($end_tag) { - if ($format_map{$end_tag}) { - $in_pre = 0 if $format_map{$end_tag} eq 'PRE'; - $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ; - &html_pop_if('LI', 'P'); - &html_pop_if(); - push(@lines, &debug("</$format_map{$end_tag}>\n", __LINE__)); - push(@lines, &html_debug("\n", __LINE__)); - } elsif ($end_tag =~ /^(|f|v|multi)table$/) { - unless (@tables) { - warn "$ERROR \@end $end_tag without \@*table\n"; - next; - } - ($table_type, $in_table) = split($;, shift(@tables)); - unless ($1 eq $table_type) { - warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; - next; - } - if ($table_type eq "multi") { - push(@lines, "</TR></TABLE>\n"); - &html_pop_if('TR'); - } else { - push(@lines, "</DL>\n"); - &html_pop_if('DD'); - } - &html_pop_if(); - if (@tables) { - ($table_type, $in_table) = split($;, $tables[0]); - } else { - $in_table = 0; - } - } elsif (defined($def_map{$end_tag})) { - push(@lines, &debug("</DL>\n", __LINE__)); - } elsif ($end_tag eq 'menu') { - &html_pop_if(); - push(@lines, $_); # must keep it for pass 2 - } - next; - } - # - # misc things - # - # protect texi and HTML things - &protect_texi; - $_ = &protect_html($_) unless $dont_html; - $dont_html = 0; - # substitution (unsupported things) - s/^\@center\s+//g; - s/^\@exdent\s+//g; - s/\@noindent\s+//g; - s/\@refill\s+//g; - # other substitutions - &simple_substitutions; - s/\@value{($VARRE)}/$value{$1}/eg; - s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4 - # - # analyze the tag again - # - if ($tag) { - if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) { - if (/^\@$tag\s+(.+)$/) { - $name = $1; - $name =~ s/\s+$//; - $level = $sec2level{$tag}; - $name = &update_sec_num($tag, $level) . " $name" - if $number_sections && $tag !~ /^unnumbered/; - if ($tag =~ /heading$/) { - push(@lines, &html_debug("\n", __LINE__)); - if ($html_element ne 'body') { - # We are in a nice pickle here. We are trying to get a H? heading - # even though we are not in the body level. So, we convert it to a - # nice, bold, line by itself. - $_ = &debug("\n\n<P><STRONG>$name</STRONG></P>\n\n", __LINE__); - } else { - $_ = &debug("<H$level>$name</H$level>\n", __LINE__); - &html_push_if('body'); - } - print "# heading, section $name, level $level\n" - if $debug & $DEBUG_TOC; - } else { - if ($split_chapter) { - unless ($toplevel) { - # first time we see a "section" - unless ($level == 1) { - warn "$ERROR The first section found is not of level 1: $_"; - warn "$ERROR I'll split on sections of level $level...\n"; - } - $toplevel = $level; - } - if ($level == $toplevel) { - &next_doc; - push(@lines, $SPLITTAG) if $split_num++; - push(@sections, $name); - } - } - $sec_num++; - $docid = "SEC$sec_num"; - $tocid = "TOC$sec_num"; - # check biblio and glossary - $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); - $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); - # check node - if ($node) { - if ($node2sec{$node}) { - warn "$ERROR Duplicate node found: $node\n"; - } else { - $node2sec{$node} = $name; - $node2href{$node} = "$docu_doc#$docid"; - print "# node $node, section $name, level $level\n" - if $debug & $DEBUG_TOC; - } - $node = ''; - } else { - print "# no node, section $name, level $level\n" - if $debug & $DEBUG_TOC; - } - # update TOC - while ($level > $curlevel) { - $curlevel++; - push(@toc_lines, "<UL>\n"); - } - while ($level < $curlevel) { - $curlevel--; - push(@toc_lines, "</UL>\n"); - } - $_ = "<LI>" . &anchor($tocid, "$docu_doc#$docid", $name, 1); - push(@toc_lines, &substitute_style($_)); - # update DOC - push(@lines, &html_debug("\n", __LINE__)); - &html_reset; - $_ = "<H$level>".&anchor($docid, "$docu_toc#$tocid", $name)."</H$level>\n"; - $_ = &debug($_, __LINE__); - push(@lines, &html_debug("\n", __LINE__)); - } - # update DOC - foreach $line (split(/\n+/, $_)) { - push(@lines, "$line\n"); - } - next; - } else { - warn "$ERROR Bad section line: $_"; - } - } else { - # track variables - $value{$1} = $2, next if /^\@set\s+($VARRE)\s+(.*)$/o; - delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o; - # store things - $value{'_setfilename'} = $1, next if /^\@setfilename\s+(.*)$/; - $value{'_settitle'} = $1, next if /^\@settitle\s+(.*)$/; - $value{'_author'} .= "$1\n", next if /^\@author\s+(.*)$/; - $value{'_subtitle'} .= "$1\n", next if /^\@subtitle\s+(.*)$/; - $value{'_title'} .= "$1\n", next if /^\@title\s+(.*)$/; - # index - if (/^\@(..?)index\s+/) { - unless ($valid_index{$1}) { - warn "$ERROR Undefined index command: $_"; - next; - } - $id = 'IDX' . ++$idx_num; - $index = $1 . 'index'; - $what = &substitute_style($'); - $what =~ s/\s+$//; - print "# found $index for '$what' id $id\n" - if $debug & $DEBUG_INDEX; - eval(<<EOC); - if (defined(\$$index\{\$what\})) { - \$$index\{\$what\} .= "$;$docu_doc#$id"; - } else { - \$$index\{\$what\} = "$docu_doc#$id"; - } -EOC - # - # dirty hack to see if I can put an invisible anchor... - # - if ($html_element eq 'P' || - $html_element eq 'LI' || - $html_element eq 'DT' || - $html_element eq 'DD' || - $html_element eq 'ADDRESS' || - $html_element eq 'B' || - $html_element eq 'BLOCKQUOTE' || - $html_element eq 'PRE' || - $html_element eq 'SAMP') { - push(@lines, &anchor($id, '', $invisible_mark, !$in_pre)); - } elsif ($html_element eq 'body') { - push(@lines, &debug("<P>\n", __LINE__)); - push(@lines, &anchor($id, '', $invisible_mark, !$in_pre)); - &html_push('P'); - } elsif ($html_element eq 'DL' || - $html_element eq 'UL' || - $html_element eq 'OL' ) { - $deferred_ref .= &anchor($id, '', $invisible_mark, !$in_pre) . " "; - } - next; - } - # list item - if (/^\@itemx?\s+/) { - $what = $'; - $what =~ s/\s+$//; - if ($in_bibliography && $use_bibliography) { - if ($what =~ /^$BIBRE$/o) { - $id = 'BIB' . ++$bib_num; - $bib2href{$what} = "$docu_doc#$id"; - print "# found bibliography for '$what' id $id\n" - if $debug & $DEBUG_BIB; - $what = &anchor($id, '', $what); - } - } elsif ($in_glossary && $use_glossary) { - $id = 'GLOSS' . ++$gloss_num; - $entry = $what; - $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; - $gloss2href{$entry} = "$docu_doc#$id"; - print "# found glossary for '$entry' id $id\n" - if $debug & $DEBUG_GLOSS; - $what = &anchor($id, '', $what); - } - &html_pop_if('P'); - if ($html_element eq 'DL' || $html_element eq 'DD') { - if ($things_map{$in_table} && !$what) { - # special case to allow @table @bullet for instance - push(@lines, &debug("<DT>$things_map{$in_table}\n", __LINE__)); - } else { - push(@lines, &debug("<DT>\@$in_table\{$what\}\n", __LINE__)); - } - push(@lines, "<DD>"); - &html_push('DD') unless $html_element eq 'DD'; - if ($table_type) { # add also an index - unshift(@input_spool, "\@${table_type}index $what\n"); - } - } elsif ($html_element eq 'TABLE') { - push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); - &html_push('TR'); - } elsif ($html_element eq 'TR') { - push(@lines, &debug("</TR>\n", __LINE__)); - push(@lines, &debug("<TR><TD>$what</TD>\n", __LINE__)); - } else { - push(@lines, &debug("<LI>$what\n", __LINE__)); - &html_push('LI') unless $html_element eq 'LI'; - } - push(@lines, &html_debug("\n", __LINE__)); - if ($deferred_ref) { - push(@lines, &debug("$deferred_ref\n", __LINE__)); - $deferred_ref = ''; - } - next; - } elsif (/^\@tab\s+(.*)$/) { - push(@lines, "<TD>$1</TD>\n"); - next; - } - } - } - # paragraph separator - if ($_ eq "\n") { - next if $#lines >= 0 && $lines[$#lines] eq "\n"; - if ($html_element eq 'P') { - push(@lines, "\n"); - $_ = &debug("</P>\n", __LINE__); - &html_pop; - } - } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE') { - push(@lines, "<P>\n"); - &html_push('P'); - $_ = &debug($_, __LINE__); - } - # otherwise - push(@lines, $_); -} - -# finish TOC -$level = 0; -while ($level < $curlevel) { - $curlevel--; - push(@toc_lines, "</UL>\n"); -} - -print "# end of pass 1\n" if $verbose; - -#+++############################################################################ -# # -# Pass 2/3: handle style, menu, index, cross-reference # -# # -#---############################################################################ - -@lines2 = (); # whole document (2nd pass) -@lines3 = (); # whole document (3rd pass) -$in_menu = 0; # am I inside a menu - -while (@lines) { - $_ = shift(@lines); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@lines2, $_); - next; - } - # - # menu - # - $in_menu = 1, push(@lines2, &debug("<UL>\n", __LINE__)), next if /^\@menu\b/; - $in_menu = 0, push(@lines2, &debug("</UL>\n", __LINE__)), next if /^\@end\s+menu\b/; - if ($in_menu) { - if (/^\*\s+($NODERE)::/o) { - $descr = $'; - chop($descr); - &menu_entry($1, $1, $descr); - } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) { - $descr = $'; - chop($descr); - &menu_entry($1, $2, $descr); - } elsif (/^\*/) { - warn "$ERROR Bad menu line: $_"; - } else { # description continued? - push(@lines2, $_); - } - next; - } - # - # printindex - # - if (/^\@printindex\s+(\w\w)\b/) { - local($index, *ary, @keys, $key, $letter, $last_letter, @refs); - if ($predefined_index{$1}) { - $index = $predefined_index{$1} . 'index'; - } else { - $index = $1 . 'index'; - } - eval("*ary = *$index"); - @keys = keys(%ary); - foreach $key (@keys) { - $_ = $key; - 1 while s/<(\w+)>\`(.*)\'<\/\1>/$2/; # remove HTML tags with quotes - 1 while s/<(\w+)>(.*)<\/\1>/$2/; # remove HTML tags - $_ = &unprotect_html($_); - &unprotect_texi; - tr/A-Z/a-z/; # lowercase - $key2alpha{$key} = $_; - print "# index $key sorted as $_\n" - if $key ne $_ && $debug & $DEBUG_INDEX; - } - push(@lines2, "Jump to:\n"); - $last_letter = undef; - foreach $key (sort byalpha @keys) { - $letter = substr($key2alpha{$key}, 0, 1); - $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;; - if (!defined($last_letter) || $letter ne $last_letter) { - push(@lines2, "-\n") if defined($last_letter); - push(@lines2, "<A HREF=\"#$index\_$letter\">" . &protect_html($letter) . "</A>\n"); - $last_letter = $letter; - } - } - push(@lines2, "<P>\n"); - $last_letter = undef; - foreach $key (sort byalpha @keys) { - $letter = substr($key2alpha{$key}, 0, 1); - $letter = substr($key2alpha{$key}, 0, 2) if $letter eq $;; - if (!defined($last_letter) || $letter ne $last_letter) { - push(@lines2, "</DIR>\n") if defined($last_letter); - push(@lines2, "<H2><A NAME=\"$index\_$letter\">" . &protect_html($letter) . "</A></H2>\n"); - push(@lines2, "<DIR>\n"); - $last_letter = $letter; - } - @refs = (); - foreach (split(/$;/, $ary{$key})) { - push(@refs, &anchor('', $_, $key, 0)); - } - push(@lines2, "<LI>" . join(", ", @refs) . "\n"); - } - push(@lines2, "</DIR>\n") if defined($last_letter); - next; - } - # - # simple style substitutions - # - $_ = &substitute_style($_); - # - # xref - # - while (/\@(x|px|info|)ref{($XREFRE)(}?)/o) { - # note: Texinfo may accept other characters - ($type, $nodes, $full) = ($1, $2, $3); - ($before, $after) = ($`, $'); - if (! $full && $after) { - warn "$ERROR Bad xref (no ending } on line): $_"; - $_ = "$before$;0${type}ref\{$nodes$after"; - next; # while xref - } - if ($type eq 'x') { - $type = 'See '; - } elsif ($type eq 'px') { - $type = 'see '; - } elsif ($type eq 'info') { - $type = 'See Info'; - } else { - $type = ''; - } - unless ($full) { - $next = shift(@lines); - $next = &substitute_style($next); - chop($nodes); # remove final newline - if ($next =~ /\}/) { # split on 2 lines - $nodes .= " $`"; - $after = $'; - } else { - $nodes .= " $next"; - $next = shift(@lines); - $next = &substitute_style($next); - chop($nodes); - if ($next =~ /\}/) { # split on 3 lines - $nodes .= " $`"; - $after = $'; - } else { - warn "$ERROR Bad xref (no ending }): $_"; - $_ = "$before$;0xref\{$nodes$after"; - unshift(@lines, $next); - next; # while xref - } - } - } - $nodes =~ s/\s+/ /g; # remove useless spaces - @args = split(/\s*,\s*/, $nodes); - $node = $args[0]; # the node is always the first arg - &normalise_node($node); - $sec = $node2sec{$node}; - if (@args == 5) { # reference to another manual - $sec = $args[2] || $node; - $man = $args[4] || $args[3]; - $_ = "${before}${type}section `$sec' in \@cite{$man}$after"; - } elsif ($type =~ /Info/) { # inforef - warn "$ERROR Wrong number of arguments: $_" unless @args == 3; - ($nn, $_, $in) = @args; - $_ = "${before}${type} file `$in', node `$nn'$after"; - } elsif ($sec) { - $href = $node2href{$node}; - $_ = "${before}${type}section " . &anchor('', $href, $sec) . $after; - } else { - warn "$ERROR Undefined node ($node): $_"; - $_ = "$before$;0xref{$nodes}$after"; - } - } - # - # try to guess bibliography references or glossary terms - # - unless (/^<H\d><A NAME=\"SEC\d/) { - if ($use_bibliography) { - $done = ''; - while (/$BIBRE/o) { - ($pre, $what, $post) = ($`, $&, $'); - $href = $bib2href{$what}; - if (defined($href) && $post !~ /^[^<]*<\/A>/) { - $done .= $pre . &anchor('', $href, $what); - } else { - $done .= "$pre$what"; - } - $_ = $post; - } - $_ = $done . $_; - } - if ($use_glossary) { - $done = ''; - while (/\b\w+\b/) { - ($pre, $what, $post) = ($`, $&, $'); - $entry = $what; - $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; - $href = $gloss2href{$entry}; - if (defined($href) && $post !~ /^[^<]*<\/A>/) { - $done .= $pre . &anchor('', $href, $what); - } else { - $done .= "$pre$what"; - } - $_ = $post; - } - $_ = $done . $_; - } - } - # otherwise - push(@lines2, $_); -} -print "# end of pass 2\n" if $verbose; - -# -# split style substitutions -# -while (@lines2) { - $_ = shift(@lines2); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@lines3, $_); - next; - } - # - # split style substitutions - # - $old = ''; - while ($old ne $_) { - $old = $_; - if (/\@(\w+)\{/) { - ($before, $style, $after) = ($`, $1, $'); - if (defined($style_map{$style})) { - $_ = $after; - $text = ''; - $after = ''; - $failed = 1; - while (@lines2) { - if (/\}/) { - $text .= $`; - $after = $'; - $failed = 0; - last; - } else { - $text .= $_; - $_ = shift(@lines2); - } - } - if ($failed) { - die "* Bad syntax (\@$style) after: $before\n"; - } else { - $text = &apply_style($style, $text); - $_ = "$before$text$after"; - } - } - } - } - # otherwise - push(@lines3, $_); -} -print "# end of pass 3\n" if $verbose; - -#+++############################################################################ -# # -# Pass 4: foot notes, final cleanup # -# # -#---############################################################################ - -@foot_lines = (); # footnotes -@doc_lines = (); # final document -$end_of_para = 0; # true if last line is <P> - -while (@lines3) { - $_ = shift(@lines3); - # - # special case (protected sections) - # - if (/^$PROTECTTAG/o) { - push(@doc_lines, $_); - $end_of_para = 0; - next; - } - # - # footnotes - # - while (/\@footnote([^\{\s]+)\{/) { - ($before, $d, $after) = ($`, $1, $'); - $_ = $after; - $text = ''; - $after = ''; - $failed = 1; - while (@lines3) { - if (/\}/) { - $text .= $`; - $after = $'; - $failed = 0; - last; - } else { - $text .= $_; - $_ = shift(@lines3); - } - } - if ($failed) { - die "* Bad syntax (\@footnote) after: $before\n"; - } else { - $foot_num++; - $docid = "DOCF$foot_num"; - $footid = "FOOT$foot_num"; - $foot = "($foot_num)"; - push(@foot_lines, "<H3>" . &anchor($footid, "$d#$docid", $foot) . "</H3>\n"); - $text = "<P>$text" unless $text =~ /^\s*<P>/; - push(@foot_lines, "$text\n"); - $_ = $before . &anchor($docid, "$docu_foot#$footid", $foot) . $after; - } - } - # - # remove unnecessary <P> - # - if (/^\s*<P>\s*$/) { - next if $end_of_para++; - } else { - $end_of_para = 0; - } - # otherwise - push(@doc_lines, $_); -} -print "# end of pass 4\n" if $verbose; - -#+++############################################################################ -# # -# Pass 5: print things # -# # -#---############################################################################ - -$header = <<EOT; -<!-- This HTML file has been created by $THISPROG - from $docu on $TODAY --> -EOT - -$full_title = $value{'_title'} || $value{'_settitle'} || "Untitled Document"; -$title = $value{'_settitle'} || $full_title; -$_ = &substitute_style($full_title); -&unprotect_texi; -s/\n$//; # rmv last \n (if any) -$full_title = "<H1>" . join("</H1>\n<H1>", split(/\n/, $_)) . "</H1>\n"; - -# -# print ToC -# -if (!$monolithic && @toc_lines) { - if (open(FILE, "> $docu_toc")) { - print "# creating $docu_toc...\n" if $verbose; - &print_toplevel_header("$title - Table of Contents"); - &print_ruler; - &print(*toc_lines, FILE); - &print_toplevel_footer; - close(FILE); - } else { - warn "$ERROR Can't write to $docu_toc: $!\n"; - } -} - -# -# print footnotes -# -if (!$monolithic && @foot_lines) { - if (open(FILE, "> $docu_foot")) { - print "# creating $docu_foot...\n" if $verbose; - &print_toplevel_header("$title - Footnotes"); - &print_ruler; - &print(*foot_lines, FILE); - &print_toplevel_footer; - close(FILE); - } else { - warn "$ERROR Can't write to $docu_foot: $!\n"; - } -} - -# -# print document -# -if ($split_chapter || $split_node) { # split - $doc_num = 0; - $last_num = scalar(@sections); - $first_doc = &doc_name(1); - $last_doc = &doc_name($last_num); - while (@sections) { - $section = shift(@sections); - &next_doc; - if (open(FILE, "> $docu_doc")) { - print "# creating $docu_doc...\n" if $verbose; - &print_header("$title - $section"); - $prev_doc = ($doc_num == 1 ? undef : &doc_name($doc_num - 1)); - $next_doc = ($doc_num == $last_num ? undef : &doc_name($doc_num + 1)); - $navigation = "Go to the "; - $navigation .= ($prev_doc ? &anchor('', $first_doc, "first") : "first"); - $navigation .= ", "; - $navigation .= ($prev_doc ? &anchor('', $prev_doc, "previous") : "previous"); - $navigation .= ", "; - $navigation .= ($next_doc ? &anchor('', $next_doc, "next") : "next"); - $navigation .= ", "; - $navigation .= ($next_doc ? &anchor('', $last_doc, "last") : "last"); - $navigation .= " section, " . &anchor('', $docu_toc, "table of contents") . ".\n"; - print FILE $navigation; - &print_ruler; - # find corresponding lines - @tmp_lines = (); - while (@doc_lines) { - $_ = shift(@doc_lines); - last if ($_ eq $SPLITTAG); - push(@tmp_lines, $_); - } - &print(*tmp_lines, FILE); - &print_ruler; - print FILE $navigation; - &print_footer; - close(FILE); - } else { - warn "$ERROR Can't write to $docu_doc: $!\n"; - } - } -} else { # not split - if (open(FILE, "> $docu_doc")) { - print "# creating $docu_doc...\n" if $verbose; - if ($monolithic || !@toc_lines) { - &print_toplevel_header($title); - } else { - &print_header($title); - print FILE $full_title; - } - if ($monolithic && @toc_lines) { - &print_ruler; - print FILE "<H1>Table of Contents</H1>\n"; - &print(*toc_lines, FILE); - } - &print_ruler; - &print(*doc_lines, FILE); - if ($monolithic && @foot_lines) { - &print_ruler; - print FILE "<H1>Footnotes</H1>\n"; - &print(*foot_lines, FILE); - } - if ($monolithic || !@toc_lines) { - &print_toplevel_footer; - } else { - &print_footer; - } - close(FILE); - } else { - warn "$ERROR Can't write to $docu_doc: $!\n"; - } -} - -print "# that's all folks\n" if $verbose; - -#+++############################################################################ -# # -# Low level functions # -# # -#---############################################################################ - -sub update_sec_num { - local($name, $level) = @_; - - $level--; # here we start at 0 - if ($name =~ /^appendix/) { - # appendix style - if (defined(@appendix_sec_num)) { - &incr_sec_num($level, @appendix_sec_num); - } else { - @appendix_sec_num = ('A', 0, 0, 0); - } - return(join('.', @appendix_sec_num[0..$level])); - } else { - # normal style - if (defined(@normal_sec_num)) { - &incr_sec_num($level, @normal_sec_num); - } else { - @normal_sec_num = (1, 0, 0, 0); - } - return(join('.', @normal_sec_num[0..$level])); - } -} - -sub incr_sec_num { - local($level, $l); - $level = shift(@_); - $_[$level]++; - foreach $l ($level+1 .. 3) { - $_[$l] = 0; - } -} - -sub check { - local($_, %seen, %context, $before, $match, $after); - - while (<>) { - if (/\@(\*|\.|\:|\@|\{|\})/) { - $seen{$&}++; - $context{$&} .= "> $_" if $verbose; - $_ = "$`XX$'"; - redo; - } - if (/\@(\w+)/) { - ($before, $match, $after) = ($`, $&, $'); - if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address - $seen{'e-mail address'}++; - $context{'e-mail address'} .= "> $_" if $verbose; - } else { - $seen{$match}++; - $context{$match} .= "> $_" if $verbose; - } - $match =~ s/^\@/X/; - $_ = "$before$match$after"; - redo; - } - } - - foreach (sort(keys(%seen))) { - if ($verbose) { - print "$_\n"; - print $context{$_}; - } else { - print "$_ ($seen{$_})\n"; - } - } -} - -sub open { - local($name) = @_; - - ++$fh_name; - if (open($fh_name, $name)) { - unshift(@fhs, $fh_name); - } else { - warn "$ERROR Can't read file $name: $!\n"; - } -} - -sub init_input { - @fhs = (); # hold the file handles to read - @input_spool = (); # spooled lines to read - $fh_name = 'FH000'; - &open($docu); -} - -sub next_line { - local($fh, $line); - - if (@input_spool) { - $line = shift(@input_spool); - return($line); - } - while (@fhs) { - $fh = $fhs[0]; - $line = <$fh>; - return($line) if $line; - close($fh); - shift(@fhs); - } - return(undef); -} - -# used in pass 1, use &next_line -sub skip_until { - local($tag) = @_; - local($_); - - while ($_ = &next_line) { - return if /^\@end\s+$tag\s*$/; - } - die "* Failed to find '$tag' after: " . $lines[$#lines]; -} - -# -# HTML stacking to have a better HTML output -# - -sub html_reset { - @html_stack = ('html'); - $html_element = 'body'; -} - -sub html_push { - local($what) = @_; - push(@html_stack, $html_element); - $html_element = $what; -} - -sub html_push_if { - local($what) = @_; - push(@html_stack, $html_element) - if ($html_element && $html_element ne 'P'); - $html_element = $what; -} - -sub html_pop { - $html_element = pop(@html_stack); -} - -sub html_pop_if { - local($elt); - - if (@_) { - foreach $elt (@_) { - if ($elt eq $html_element) { - $html_element = pop(@html_stack) if @html_stack; - last; - } - } - } else { - $html_element = pop(@html_stack) if @html_stack; - } -} - -sub html_debug { - local($what, $line) = @_; - return("<!-- $line @html_stack, $html_element -->$what") - if $debug & $DEBUG_HTML; - return($what); -} - -# to debug the output... -sub debug { - local($what, $line) = @_; - return("<!-- $line -->$what") - if $debug & $DEBUG_HTML; - return($what); -} - -sub normalise_node { - $_[0] =~ s/\s+/ /g; - $_[0] =~ s/ $//; - $_[0] =~ s/^ //; -} - -sub menu_entry { - local($entry, $node, $descr) = @_; - local($href); - - &normalise_node($node); - $href = $node2href{$node}; - if ($href) { - $descr =~ s/^\s+//; - $descr = ": $descr" if $descr; - push(@lines2, "<LI>" . &anchor('', $href, $entry) . "$descr\n"); - } else { - warn "$ERROR Undefined node ($node): $_"; - } -} - -sub do_ctrl { "^$_[0]" } - -sub do_email { - local($addr, $text) = split(/,\s*/, $_[0]); - - $text = $addr unless $text; - &anchor('', "mailto:$addr", $text); -} - -sub do_sc { "\U$_[0]\E" } - -sub do_uref { - local($url, $text) = split(/,\s*/, $_[0]); - - $text = $url unless $text; - &anchor('', $url, $text); -} - -sub do_url { &anchor('', $_[0], $_[0]) } - -sub apply_style { - local($texi_style, $text) = @_; - local($style); - - $style = $style_map{$texi_style}; - if (defined($style)) { # known style - if ($style =~ /^\"/) { # add quotes - $style = $'; - $text = "\`$text\'"; - } - if ($style =~ /^\&/) { # custom - $style = $'; - $text = &$style($text); - } elsif ($style) { # good style - $text = "<$style>$text</$style>"; - } else { # no style - } - } else { # unknown style - $text = undef; - } - return($text); -} - -# remove Texinfo styles -sub remove_style { - local($_) = @_; - s/\@\w+{([^\{\}]+)}/$1/g; - return($_); -} - -sub substitute_style { - local($_) = @_; - local($changed, $done, $style, $text); - - $changed = 1; - while ($changed) { - $changed = 0; - $done = ''; - while (/\@(\w+){([^\{\}]+)}/) { - $text = &apply_style($1, $2); - if ($text) { - $_ = "$`$text$'"; - $changed = 1; - } else { - $done .= "$`\@$1"; - $_ = "{$2}$'"; - } - } - $_ = $done . $_; - } - return($_); -} - -sub anchor { - local($name, $href, $text, $newline) = @_; - local($result); - - $result = "<A"; - $result .= " NAME=\"$name\"" if $name; - $result .= " HREF=\"$href\"" if $href; - $result .= ">$text</A>"; - $result .= "\n" if $newline; - return($result); -} - -sub pretty_date { - local(@MoY, $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); - - @MoY = ('January', 'Febuary', 'March', 'April', 'May', 'June', - 'July', 'August', 'September', 'October', 'November', 'December'); - ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); - $year += ($year < 70) ? 2000 : 1900; - return("$mday $MoY[$mon] $year"); -} - -sub doc_name { - local($num) = @_; - - return("${docu_name}_$num.html"); -} - -sub next_doc { - $docu_doc = &doc_name(++$doc_num); -} - -sub print { - local(*lines, $fh) = @_; - local($_); - - while (@lines) { - $_ = shift(@lines); - if (/^$PROTECTTAG/o) { - $_ = $tag2pro{$_}; - } else { - &unprotect_texi; - } - print $fh $_; - } -} - -sub print_ruler { - print FILE "<P><HR><P>\n"; -} - -sub print_header { - local($_); - - # clean the title - $_ = &remove_style($_[0]); - &unprotect_texi; - # print the header - if ($doctype eq 'html2') { - print FILE $html2_doctype; - } elsif ($doctype) { - print FILE $doctype; - } - print FILE <<EOT; -<HTML> -<HEAD> -$header -<TITLE>$_</TITLE> -</HEAD> -<BODY> -EOT -} - -sub print_toplevel_header { - local($_); - - &print_header; # pass given arg... - print FILE $full_title; - if ($value{'_subtitle'}) { - $value{'_subtitle'} =~ s/\n+$//; - foreach (split(/\n/, $value{'_subtitle'})) { - $_ = &substitute_style($_); - &unprotect_texi; - print FILE "<H2>$_</H2>\n"; - } - } - if ($value{'_author'}) { - $value{'_author'} =~ s/\n+$//; - foreach (split(/\n/, $value{'_author'})) { - $_ = &substitute_style($_); - &unprotect_texi; - s/[\w.-]+\@[\w.-]+/<A HREF="mailto:$&">$&<\/A>/g; - print FILE "<ADDRESS>$_</ADDRESS>\n"; - } - } - print FILE "<P>\n"; -} - -sub print_footer { - print FILE <<EOT; -</BODY> -</HTML> -EOT -} - -sub print_toplevel_footer { - &print_ruler; - print FILE <<EOT; -This document was generated on $TODAY using the -<A HREF=\"$HOMEPAGE\">texi2html</A> -translator version 1.52.</P> -EOT - &print_footer; -} - -sub protect_texi { - # protect @ { } ` ' - s/\@\@/$;0/go; - s/\@\{/$;1/go; - s/\@\}/$;2/go; - s/\@\`/$;3/go; - s/\@\'/$;4/go; -} - -sub protect_html { - local($what) = @_; - # protect & < > - $what =~ s/\&/\&\#38;/g; - $what =~ s/\</\&\#60;/g; - $what =~ s/\>/\&\#62;/g; - # but recognize some HTML things - $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # </A> - $what =~ s/\&\#60;A ([^\&]+)\&\#62;/<A $1>/g; # <A [^&]+> - $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;/<IMG $1>/g; # <IMG [^&]+> - return($what); -} - -sub unprotect_texi { - s/$;0/\@/go; - s/$;1/\{/go; - s/$;2/\}/go; - s/$;3/\`/go; - s/$;4/\'/go; -} - -sub unprotect_html { - local($what) = @_; - $what =~ s/\&\#38;/\&/g; - $what =~ s/\&\#60;/\</g; - $what =~ s/\&\#62;/\>/g; - return($what); -} - -sub byalpha { - $key2alpha{$a} cmp $key2alpha{$b}; -} - -############################################################################## - - # These next few lines are legal in both Perl and nroff. - -.00 ; # finish .ig - -'di \" finish diversion--previous line must be blank -.nr nl 0-1 \" fake up transition to first page again -.nr % 0 \" start at page 1 -'; __END__ ############# From here on it's a standard manual page ############ -.TH TEXI2HTML 1 "01/05/98" -.AT 3 -.SH NAME -texi2html \- a Texinfo to HTML converter -.SH SYNOPSIS -.B texi2html [options] file -.PP -.B texi2html -check [-verbose] files -.SH DESCRIPTION -.I Texi2html -converts the given Texinfo file to a set of HTML files. It tries to handle -most of the Texinfo commands. It creates hypertext links for cross-references, -footnotes... -.PP -It also tries to add links from a reference to its corresponding entry in the -bibliography (if any). It may also handle a glossary (see the -.B \-glossary -option). -.PP -.I Texi2html -creates several files depending on the contents of the Texinfo file and on -the chosen options (see FILES). -.PP -The HTML files created by -.I texi2html -are closer to TeX than to Info, that's why -.I texi2html -converts @iftex sections and not @ifinfo ones by default. You can reverse -this with the \-expandinfo option. -.SH OPTIONS -.TP 12 -.B \-check -Check the given file and give the list of all things that may be Texinfo commands. -This may be used to check the output of -.I texi2html -to find the Texinfo commands that have been left in the HTML file. -.TP -.B \-expandinfo -Expand @ifinfo sections, not @iftex ones. -.TP -.B \-glossary -Use the section named 'Glossary' to build a list of terms and put links in the HTML -document from each term toward its definition. -.TP -.B \-invisible \fIname\fP -Use \fIname\fP to create invisible destination anchors for index links -(you can for instance use the invisible.xbm file shipped with this program). -This is a workaround for a known bug of many WWW browsers, including netscape. -.TP -.B \-I \fIdir\fP -Look also in \fIdir\fP to find included files. -.TP -.B \-menu -Show the Texinfo menus; by default they are ignored. -.TP -.B \-monolithic -Output only one file, including the table of contents and footnotes. -.TP -.B \-number -Number the sections. -.TP -.B \-split_chapter -Split the output into several HTML files (one per main section: -chapter, appendix...). -.TP -.B \-split_node -Split the output into several HTML files (one per node). -.TP -.B \-usage -Print usage instructions, listing the current available command-line options. -.TP -.B \-verbose -Give a verbose output. Can be used with the -.B \-check -option. -.PP -.SH FILES -By default -.I texi2html -creates the following files (foo being the name of the Texinfo file): -.TP 16 -.B foo_toc.html -The table of contents. -.TP -.B foo.html -The document's contents. -.TP -.B foo_foot.html -The footnotes (if any). -.PP -When used with the -.B \-split -option, it creates several files (one per chapter or node), named -.B foo_n.html -(n being the indice of the chapter or node), instead of the single -.B foo.html -file. -.PP -When used with the -.B \-monolithic -option, it creates only one file: -.B foo.html -.SH VARIABLES -.I texi2html -predefines the following variables: \fBhtml\fP, \fBtexi2html\fP. -.SH ADDITIONAL COMMANDS -.I texi2html -implements the following non-Texinfo commands (maybe they are in Texinfo now...): -.TP 16 -.B @ifhtml -This indicates the start of an HTML section, this section will passed through -without any modification. -.TP -.B @end ifhtml -This indicates the end of an HTML section. -.SH VERSION -This is \fItexi2html\fP version 1.52, 01/05/98. -.PP -The latest version of \fItexi2html\fP can be found in WWW, cf. URL -http://wwwinfo.cern.ch/dis/texi2html/ -.SH AUTHOR -The main author is Lionel Cons, CERN IT/DIS/OSE, Lionel.Cons@cern.ch. -Many other people around the net contributed to this program. -.SH COPYRIGHT -This program is the intellectual property of the European -Laboratory for Particle Physics (known as CERN). No guarantee whatsoever is -provided by CERN. No liability whatsoever is accepted for any loss or damage -of any kind resulting from any defect or inaccuracy in this information or -code. -.PP -CERN, 1211 Geneva 23, Switzerland -.SH "SEE ALSO" -GNU Texinfo Documentation Format, -HyperText Markup Language (HTML), -World Wide Web (WWW). -.SH BUGS -This program does not understand all Texinfo commands (yet). -.PP -TeX specific commands (normally enclosed in @iftex) will be -passed unmodified. -.ex diff --git a/gnu/lib/libreadline/doc/texinfo.tex b/gnu/lib/libreadline/doc/texinfo.tex deleted file mode 100644 index 79bcdbee9fa..00000000000 --- a/gnu/lib/libreadline/doc/texinfo.tex +++ /dev/null @@ -1,4692 +0,0 @@ -%% TeX macros to handle texinfo files - -% Copyright (C) 1985, 86, 88, 90, 91, 92, 93, -% 94, 95, 1996 Free Software Foundation, Inc. - -%This texinfo.tex file is free software; you can redistribute it and/or -%modify it under the terms of the GNU General Public License as -%published by the Free Software Foundation; either version 2, or (at -%your option) any later version. - -%This texinfo.tex file is distributed in the hope that it will be -%useful, but WITHOUT ANY WARRANTY; without even the implied warranty -%of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -%General Public License for more details. - -%You should have received a copy of the GNU General Public License -%along with this texinfo.tex file; see the file COPYING. If not, write -%to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -%Boston, MA 02111-1307, USA. - - -%In other words, you are welcome to use, share and improve this program. -%You are forbidden to forbid anyone else to use, share and improve -%what you give them. Help stamp out software-hoarding! - - -% Send bug reports to bug-texinfo@prep.ai.mit.edu. -% Please include a *precise* test case in each bug report. - - -% Make it possible to create a .fmt file just by loading this file: -% if the underlying format is not loaded, start by loading it now. -% Added by gildea November 1993. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi - -% This automatically updates the version number based on RCS. -\def\deftexinfoversion$#1: #2 ${\def\texinfoversion{#2}} -\deftexinfoversion$Revision: 1.1 $ -\message{Loading texinfo package [Version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}\message{} - \catcode`+=\active \catcode`\_=\active} - -% Save some parts of plain tex whose names we will redefine. - -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv = \equiv -\let\ptexi=\i -\let\ptexlbrace=\{ -\let\ptexrbrace=\} -\let\ptexstar=\* -\let\ptext=\t -\let\ptextilde=\~ - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} -\let\~ = \tie % And make it available as @~. - - -\message{Basics,} -\chardef\other=12 - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Set up fixed words for English. -\ifx\putwordChapter\undefined{\gdef\putwordChapter{Chapter}}\fi% -\def\putwordInfo{Info}% -\ifx\putwordSee\undefined{\gdef\putwordSee{See}}\fi% -\ifx\putwordsee\undefined{\gdef\putwordsee{see}}\fi% -\ifx\putwordfile\undefined{\gdef\putwordfile{file}}\fi% -\ifx\putwordpage\undefined{\gdef\putwordpage{page}}\fi% -\ifx\putwordsection\undefined{\gdef\putwordsection{section}}\fi% -\ifx\putwordSection\undefined{\gdef\putwordSection{Section}}\fi% -\ifx\putwordTableofContents\undefined{\gdef\putwordTableofContents{Table of Contents}}\fi% -\ifx\putwordShortContents\undefined{\gdef\putwordShortContents{Short Contents}}\fi% -\ifx\putwordAppendix\undefined{\gdef\putwordAppendix{Appendix}}\fi% - -% Ignore a token. -% -\def\gobble#1{} - -\hyphenation{ap-pen-dix} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{eshell} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen \bindingoffset -\newdimen \normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{\tracingcommands2 \tracingstats2 - \tracingpages1 \tracingoutput1 \tracinglostchars1 - \tracingmacros2 \tracingparagraphs1 \tracingrestores1 - \showboxbreadth\maxdimen\showboxdepth\maxdimen -}% - -%---------------------Begin change----------------------- -% -%%%% For @cropmarks command. -% Dimensions to add cropmarks at corners Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\cornerlong \newdimen\cornerthick -\newdimen \topandbottommargin -\newdimen \outerhsize \newdimen \outervsize -\cornerlong=1pc\cornerthick=.3pt % These set size of cropmarks -\outerhsize=7in -%\outervsize=9.5in -% Alternative @smallbook page size is 9.25in -\outervsize=9.25in -\topandbottommargin=.75in -% -%---------------------End change----------------------- - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\chardef\PAGE=255 \output={\onepageout{\pagecontents\PAGE}} -\def\onepageout#1{% - \hoffset=\normaloffset - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - {% - \escapechar = `\\ % use backslash in output files. - \indexdummies - \shipout\vbox{% - {\let\hsize=\pagewidth \makeheadline}% - \pagebody{#1}% - {\let\hsize=\pagewidth \makefootline}% - }% - }% - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -%%%% For @cropmarks command %%%% - -% Here is a modification of the main output routine for Near East Publications -% This provides right-angle cropmarks at all four corners. -% The contents of the page are centerlined into the cropmarks, -% and any desired binding offset is added as an \hskip on either -% site of the centerlined box. (P. A. MacKay, 12 November, 1986) -% -\def\croppageout#1{\hoffset=0pt % make sure this doesn't mess things up -{\escapechar=`\\\relax % makes sure backslash is used in output files. - \shipout - \vbox to \outervsize{\hsize=\outerhsize - \vbox{\line{\ewtop\hfill\ewtop}} - \nointerlineskip - \line{\vbox{\moveleft\cornerthick\nstop} - \hfill - \vbox{\moveright\cornerthick\nstop}} - \vskip \topandbottommargin - \centerline{\ifodd\pageno\hskip\bindingoffset\fi - \vbox{ - {\let\hsize=\pagewidth \makeheadline} - \pagebody{#1} - {\let\hsize=\pagewidth \makefootline}} - \ifodd\pageno\else\hskip\bindingoffset\fi} - \vskip \topandbottommargin plus1fill minus1fill - \boxmaxdepth\cornerthick - \line{\vbox{\moveleft\cornerthick\nsbot} - \hfill - \vbox{\moveright\cornerthick\nsbot}} - \nointerlineskip - \vbox{\line{\ewbot\hfill\ewbot}} - }} - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi} -% -% Do @cropmarks to get crop marks -\def\cropmarks{\let\onepageout=\croppageout } - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg#1{% - \let\next = #1% - \begingroup - \obeylines - \futurelet\temp\parseargx -} - -% If the next token is an obeyed space (from an @example environment or -% the like), remove it and recurse. Otherwise, we're done. -\def\parseargx{% - % \obeyedspace is defined far below, after the definition of \sepspaces. - \ifx\obeyedspace\temp - \expandafter\parseargdiscardspace - \else - \expandafter\parseargline - \fi -} - -% Remove a single space (as the delimiter token to the macro call). -{\obeyspaces % - \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - % - % First remove any @c comment, then any @comment. - % Result of each macro is put in \toks0. - \argremovec #1\c\relax % - \expandafter\argremovecomment \the\toks0 \comment\relax % - % - % Call the caller's macro, saved as \next in \parsearg. - \expandafter\next\expandafter{\the\toks0}% - }% -} - -% Since all \c{,omment} does is throw away the argument, we can let TeX -% do that for us. The \relax here is matched by the \relax in the call -% in \parseargline; it could be more or less anything, its purpose is -% just to delimit the argument to the \c. -\def\argremovec#1\c#2\relax{\toks0 = {#1}} -\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} - -% \argremovec{,omment} might leave us with trailing spaces, though; e.g., -% @end itemize @c foo -% will have two active spaces as part of the argument with the -% `itemize'. Here we remove all active spaces from #1, and assign the -% result to \toks0. -% -% This loses if there are any *other* active characters besides spaces -% in the argument -- _ ^ +, for example -- since they get expanded. -% Fortunately, Texinfo does not define any such commands. (If it ever -% does, the catcode of the characters in questionwill have to be changed -% here.) But this means we cannot call \removeactivespaces as part of -% \argremovec{,omment}, since @c uses \parsearg, and thus the argument -% that \parsearg gets might well have any character at all in it. -% -\def\removeactivespaces#1{% - \begingroup - \ignoreactivespaces - \edef\temp{#1}% - \global\toks0 = \expandafter{\temp}% - \endgroup -} - -% Change the active space to expand to nothing. -% -\begingroup - \obeyspaces - \gdef\ignoreactivespaces{\obeyspaces\let =\empty} -\endgroup - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment. Type Return to continue.} -\endgroup\fi} % This is not perfect, but it should reduce lossage - -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Type <Return> to continue.} - -\outer\def\begin{\parsearg\beginxxx} - -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} - -% @end foo executes the definition of \Efoo. -% -\def\end{\parsearg\endxxx} -\def\endxxx #1{% - \removeactivespaces{#1}% - \edef\endthing{\the\toks0}% - % - \expandafter\ifx\csname E\endthing\endcsname\relax - \expandafter\ifx\csname \endthing\endcsname\relax - % There's no \foo, i.e., no ``environment'' foo. - \errhelp = \EMsimple - \errmessage{Undefined command `@end \endthing'}% - \else - \unmatchedenderror\endthing - \fi - \else - % Everything's ok; the right environment has been started. - \csname E\endthing\endcsname - \fi -} - -% There is an environment #1, but it hasn't been started. Give an error. -% -\def\unmatchedenderror#1{% - \errhelp = \EMsimple - \errmessage{This `@end #1' doesn't have a matching `@#1'}% -} - -% Define the control sequence \E#1 to give an unmatched @end error. -% -\def\defineunmatchedend#1{% - \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% -} - - -% Single-spacing is done by various environments (specifically, in -% \nonfillstart and \quotations). -\newskip\singlespaceskip \singlespaceskip = 12.5pt -\def\singlespace{% - % Why was this kern here? It messes up equalizing space above and below - % environments. --karl, 6may93 - %{\advance \baselineskip by -\singlespaceskip - %\kern \baselineskip}% - \setleading \singlespaceskip -} - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt \char '100}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt \char '173}} -\def\myrbrace {{\tt \char '175}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce actual \{ & \} command in an index. - \catcode`\{ = 12 \catcode`\} = 12 - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\@ = 0 \catcode`\\ = 12 - @gdef@lbracecmd[\{]% - @gdef@rbracecmd[\}]% -@endgroup - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown -% Plain TeX defines: @AA @AE @O @OE @L (and lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @enddots{} is an end-of-sentence ellipsis. -\gdef\enddots{$\mathinner{\ldotp\ldotp\ldotp\ldotp}$\spacefactor=3000} - -% @! is an end-of-sentence bang. -\gdef\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\gdef\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -\def\group{\begingroup - \ifnum\catcode13=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - % - % The \vtop we start below produces a box with normal height and large - % depth; thus, TeX puts \baselineskip glue before it, and (when the - % next line of text is done) \lineskip glue after it. (See p.82 of - % the TeXbook.) Thus, space below is not quite equal to space - % above. But it's pretty close. - \def\Egroup{% - \egroup % End the \vtop. - \endgroup % End the \group. - }% - % - \vtop\bgroup - % We have to put a strut on the last line in case the @group is in - % the midst of an example, rather than completely enclosing it. - % Otherwise, the interline space between the last line of the group - % and the first line afterwards is too small. But we can't put the - % strut in \Egroup, since there it would be on a line by itself. - % Hence this just inserts a strut at the beginning of each line. - \everypar = {\strut}% - % - % Since we have a strut on every line, we don't need any of TeX's - % normal interline spacing. - \offinterlineskip - % - % OK, but now we have to do something about blank - % lines in the input in @example-like environments, which normally - % just turn into \lisppar, which will insert no space now that we've - % turned off the interline space. Simplest is to make them be an - % empty paragraph. - \ifx\par\lisppar - \edef\par{\leavevmode \par}% - % - % Reset ^^M's definition to new definition of \par. - \obeylines - \fi - % - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\def\need{\parsearg\needx} - -% Old definition--didn't work. -%\def\needx #1{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\penalty 10000 -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Go into vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % Don't add any leading before our big empty box, but allow a page - % break, since the best break might be right here. - \allowbreak - \nointerlineskip - \vtop to #1\mil{\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output some dots - -\def\dots{$\ldots$} - -% @page forces the start of a new page - -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} - -% This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{TEXT} puts TEXT in the margin next to the current paragraph. - -\def\inmargin#1{% -\strut\vadjust{\nobreak\kern-\strutdepth - \vtop to \strutdepth{\baselineskip\strutdepth\vss - \llap{\rightskip=\inmarginspacing \vbox{\noindent #1}}\null}}} -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} - -%\hbox{{\rm#1}}\hfil\break}} - -% @include file insert text of that file as input. -% Allow normal characters that we make active in the argument (a file name). -\def\include{\begingroup - \catcode`\\=12 - \catcode`~=12 - \catcode`^=12 - \catcode`_=12 - \catcode`|=12 - \catcode`<=12 - \catcode`>=12 - \catcode`+=12 - \parsearg\includezzz} -% Restore active chars for included file. -\def\includezzz#1{\endgroup\begingroup - % Read the included file in a group so nested @include's work. - \def\thisfile{#1}% - \input\thisfile -\endgroup} - -\def\thisfile{} - -% @center line outputs that line, centered - -\def\center{\parsearg\centerzzz} -\def\centerzzz #1{{\advance\hsize by -\leftskip -\advance\hsize by -\rightskip -\centerline{#1}}} - -% @sp n outputs n lines of vertical space - -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\catcode 64=\other \catcode 123=\other \catcode 125=\other% -\parsearg \commentxxx} - -\def\commentxxx #1{\catcode 64=0 \catcode 123=1 \catcode 125=2 } - -\let\c=\comment - -% @paragraphindent is defined for the Info formatting commands only. -\let\paragraphindent=\comment - -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% -\let\chapter=\relax -\let\unnumbered=\relax -\let\top=\relax -\let\unnumberedsec=\relax -\let\unnumberedsection=\relax -\let\unnumberedsubsec=\relax -\let\unnumberedsubsection=\relax -\let\unnumberedsubsubsec=\relax -\let\unnumberedsubsubsection=\relax -\let\section=\relax -\let\subsec=\relax -\let\subsubsec=\relax -\let\subsection=\relax -\let\subsubsection=\relax -\let\appendix=\relax -\let\appendixsec=\relax -\let\appendixsection=\relax -\let\appendixsubsec=\relax -\let\appendixsubsection=\relax -\let\appendixsubsubsec=\relax -\let\appendixsubsubsection=\relax -\let\contents=\relax -\let\smallbook=\relax -\let\titlepage=\relax -} - -% Used in nested conditionals, where we have to parse the Texinfo source -% and so want to turn off most commands, in case they are used -% incorrectly. -% -\def\ignoremorecommands{% - \let\defcodeindex = \relax - \let\defcv = \relax - \let\deffn = \relax - \let\deffnx = \relax - \let\defindex = \relax - \let\defivar = \relax - \let\defmac = \relax - \let\defmethod = \relax - \let\defop = \relax - \let\defopt = \relax - \let\defspec = \relax - \let\deftp = \relax - \let\deftypefn = \relax - \let\deftypefun = \relax - \let\deftypevar = \relax - \let\deftypevr = \relax - \let\defun = \relax - \let\defvar = \relax - \let\defvr = \relax - \let\ref = \relax - \let\xref = \relax - \let\printindex = \relax - \let\pxref = \relax - \let\settitle = \relax - \let\setchapternewpage = \relax - \let\setchapterstyle = \relax - \let\everyheading = \relax - \let\evenheading = \relax - \let\oddheading = \relax - \let\everyfooting = \relax - \let\evenfooting = \relax - \let\oddfooting = \relax - \let\headings = \relax - \let\include = \relax - \let\lowersections = \relax - \let\down = \relax - \let\raisesections = \relax - \let\up = \relax - \let\set = \relax - \let\clear = \relax - \let\item = \relax -} - -% Ignore @ignore ... @end ignore. -% -\def\ignore{\doignore{ignore}} - -% Also ignore @ifinfo, @ifhtml, @html, @menu, and @direntry text. -% -\def\ifinfo{\doignore{ifinfo}} -\def\ifhtml{\doignore{ifhtml}} -\def\html{\doignore{html}} -\def\menu{\doignore{menu}} -\def\direntry{\doignore{direntry}} - -% Also ignore @macro ... @end macro. The user must run texi2dvi, -% which runs makeinfo to do macro expansion. Ignore @unmacro, too. -\def\macro{\doignore{macro}} -\let\unmacro = \comment - - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory = \comment - -% Ignore text until a line `@end #1'. -% -\def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define a command to swallow text until we reach `@end #1'. - \long\def\doignoretext##1\end #1{\enddoignore}% - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode32 = 10 - % - % And now expand that command. - \doignoretext -} - -% What we do to finish off ignored text. -% -\def\enddoignore{\endgroup\ignorespaces}% - -\newif\ifwarnedobs\warnedobsfalse -\def\obstexwarn{% - \ifwarnedobs\relax\else - % We need to warn folks that they may have trouble with TeX 3.0. - % This uses \immediate\write16 rather than \message to get newlines. - \immediate\write16{} - \immediate\write16{***WARNING*** for users of Unix TeX 3.0!} - \immediate\write16{This manual trips a bug in TeX version 3.0 (tex hangs).} - \immediate\write16{If you are running another version of TeX, relax.} - \immediate\write16{If you are running Unix TeX 3.0, kill this TeX process.} - \immediate\write16{ Then upgrade your TeX installation if you can.} - \immediate\write16{ (See ftp://ftp.gnu.ai.mit.edu/pub/gnu/TeX.README.)} - \immediate\write16{If you are stuck with version 3.0, run the} - \immediate\write16{ script ``tex3patch'' from the Texinfo distribution} - \immediate\write16{ to use a workaround.} - \immediate\write16{} - \global\warnedobstrue - \fi -} - -% **In TeX 3.0, setting text in \nullfont hangs tex. For a -% workaround (which requires the file ``dummy.tfm'' to be installed), -% uncomment the following line: -%%%%%\font\nullfont=dummy\let\obstexwarn=\relax - -% Ignore text, except that we keep track of conditional commands for -% purposes of nesting, up to an `@end #1' command. -% -\def\nestedignore#1{% - \obstexwarn - % We must actually expand the ignored text to look for the @end - % command, so that nested ignore constructs work. Thus, we put the - % text into a \vbox and then do nothing with the result. To minimize - % the change of memory overflow, we follow the approach outlined on - % page 401 of the TeXbook: make the current font be a dummy font. - % - \setbox0 = \vbox\bgroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Define `@end #1' to end the box, which will in turn undefine the - % @end command again. - \expandafter\def\csname E#1\endcsname{\egroup\ignorespaces}% - % - % We are going to be parsing Texinfo commands. Most cause no - % trouble when they are used incorrectly, but some commands do - % complicated argument parsing or otherwise get confused, so we - % undefine them. - % - % We can't do anything about stray @-signs, unfortunately; - % they'll produce `undefined control sequence' errors. - \ignoremorecommands - % - % Set the current font to be \nullfont, a TeX primitive, and define - % all the font commands to also use \nullfont. We don't use - % dummy.tfm, as suggested in the TeXbook, because not all sites - % might have that installed. Therefore, math mode will still - % produce output, but that should be an extremely small amount of - % stuff compared to the main input. - % - \nullfont - \let\tenrm = \nullfont \let\tenit = \nullfont \let\tensl = \nullfont - \let\tenbf = \nullfont \let\tentt = \nullfont \let\smallcaps = \nullfont - \let\tensf = \nullfont - % Similarly for index fonts (mostly for their use in - % smallexample) - \let\indrm = \nullfont \let\indit = \nullfont \let\indsl = \nullfont - \let\indbf = \nullfont \let\indtt = \nullfont \let\indsc = \nullfont - \let\indsf = \nullfont - % - % Don't complain when characters are missing from the fonts. - \tracinglostchars = 0 - % - % Don't bother to do space factor calculations. - \frenchspacing - % - % Don't report underfull hboxes. - \hbadness = 10000 - % - % Do minimal line-breaking. - \pretolerance = 10000 - % - % Do not execute instructions in @tex - \def\tex{\doignore{tex}} -} - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. Make sure the catcode of space is correct to avoid -% losing inside @example, for instance. -% -\def\set{\begingroup\catcode` =10 \parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup -} -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - -% @value{foo} gets the text saved in variable foo. -% -\def\value#1{\expandafter - \ifx\csname SET#1\endcsname\relax - {\{No value for ``#1''\}} - \else \csname SET#1\endcsname \fi} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -\def\ifset{\parsearg\ifsetxxx} -\def\ifsetxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifsetfail - \else - \expandafter\ifsetsucceed - \fi -} -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\nestedignore{ifset}} -\defineunmatchedend{ifset} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -\def\ifclear{\parsearg\ifclearxxx} -\def\ifclearxxx #1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \expandafter\ifclearsucceed - \else - \expandafter\ifclearfail - \fi -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\nestedignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex always succeeds; we read the text following, through @end -% iftex). But `@end iftex' should be valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\defineunmatchedend{iftex} - -% We can't just want to start a group at @iftex (for example) and end it -% at @end iftex, since then @set commands inside the conditional have no -% effect (they'd get reverted at the end of the group). So we must -% define \Eiftex to redefine itself to be its previous value. (We can't -% just define it to fail again with an ``unmatched end'' error, since -% the @ifset might be nested.) -% -\def\conditionalsucceed#1{% - \edef\temp{% - % Remember the current value of \E#1. - \let\nece{prevE#1} = \nece{E#1}% - % - % At the `@end #1', redefine \E#1 to be its previous value. - \def\nece{E#1}{\let\nece{E#1} = \nece{prevE#1}}% - }% - \temp -} - -% We need to expand lots of \csname's, but we don't want to expand the -% control sequences after we've constructed them. -% -\def\nece#1{\expandafter\noexpand\csname#1\endcsname} - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math means output in math mode. -% We don't use $'s directly in the definition of \math because control -% sequences like \math are expanded when the toc file is written. Then, -% we read the toc file back, the $'s will be normal characters (as they -% should be, according to the definition of Texinfo). So we must use a -% control sequence to switch into and out of math mode. -% -% This isn't quite enough for @math to work properly in indices, but it -% seems unlikely it will ever be needed there. -% -\let\implicitmath = $ -\def\math#1{\implicitmath #1\implicitmath} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} - -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx [#1,]} -\def\nodexxx[#1,#2]{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -\def\donoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\setref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\unnumbnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\unnumbsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -\def\appendixnoderef{\ifx\lastnode\relax\else -\expandafter\expandafter\expandafter\appendixsetref{\lastnode}\fi -\global\let\lastnode=\relax} - -% @refill is a no-op. -\let\refill=\relax - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \readauxfile - \opencontents - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - \comment % Ignore the actual filename. -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - -% \def\macro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\macroxxx} -% \def\macroxxx#1#2 \end macro{% -% \expandafter\gdef\macrotemp#1{#2}% -% \endgroup} - -%\def\linemacro#1{\begingroup\ignoresections\catcode`\#=6\def\macrotemp{#1}\parsearg\linemacroxxx} -%\def\linemacroxxx#1#2 \end linemacro{% -%\let\parsearg=\relax -%\edef\macrotempx{\csname M\butfirst\expandafter\string\macrotemp\endcsname}% -%\expandafter\xdef\macrotemp{\parsearg\macrotempx}% -%\expandafter\gdef\macrotempx#1{#2}% -%\endgroup} - -%\def\butfirst#1{} - - -\message{fonts,} - -% Font-change commands. - -% Texinfo supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. -\newfam\sffam -\def\sf{\fam=\sffam \tensf} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this one. -\def\ttsl{\tenttsl} - -%% Try out Computer Modern fonts at \magstephalf -\let\mainmagstep=\magstephalf - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -\ifx\bigger\relax -\let\mainmagstep=\magstep1 -\setfont\textrm\rmshape{12}{1000} -\setfont\texttt\ttshape{12}{1000} -\else -\setfont\textrm\rmshape{10}{\mainmagstep} -\setfont\texttt\ttshape{10}{\mainmagstep} -\fi -% Instead of cmb10, you many want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10. -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun, etc. -\setfont\defbf\bxshape{10}{\magstep1} %was 1314 -\setfont\deftt\ttshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - -% Fonts for indices and small examples (9pt). -% We actually use the slanted font rather than the italic, -% because texinfo normally uses the slanted fonts for that. -% Do not make many font distinctions in general in the index, since they -% aren't very useful. -\setfont\ninett\ttshape{9}{1000} -\setfont\indrm\rmshape{9}{1000} -\setfont\indit\slshape{9}{1000} -\let\indsl=\indit -\let\indtt=\ninett -\let\indttsl=\ninett -\let\indsf=\indrm -\let\indbf=\indrm -\setfont\indsc\scshape{10}{900} -\font\indi=cmmi9 -\font\indsy=cmsy9 - -% Chapter (and unnumbered) fonts (17.28pt). -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{12}{\magstep2} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% \setfont\ssecrm\bxshape{10}{\magstep1} % This size an font looked bad. -% \setfont\ssecit\itshape{10}{\magstep1} % The letters were too crowded. -% \setfont\ssecsl\slshape{10}{\magstep1} -% \setfont\ssectt\ttshape{10}{\magstep1} -% \setfont\ssecsf\sfshape{10}{\magstep1} - -%\setfont\ssecrm\bfshape{10}{1315} % Note the use of cmb rather than cmbx. -%\setfont\ssecit\itshape{10}{1315} % Also, the size is a little larger than -%\setfont\ssecsl\slshape{10}{1315} % being scaled magstep1. -%\setfont\ssectt\ttshape{10}{1315} -%\setfont\ssecsf\sfshape{10}{1315} - -%\let\ssecbf=\ssecrm - -% Subsection fonts (13.15pt). -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{\magstep1} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled \magstep1 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% Fonts for title page: -\setfont\titlerm\rmbshape{12}{\magstep3} -\let\authorrm = \secrm - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts, we -% don't bother to reset \scriptfont and \scriptscriptfont (which would -% also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0 = \tenrm \textfont1 = \teni \textfont2 = \tensy - \textfont\itfam = \tenit \textfont\slfam = \tensl \textfont\bffam = \tenbf - \textfont\ttfam = \tentt \textfont\sffam = \tensf -} - - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam -% \tenbf}, for example. By redefining \tenbf, we obviate the need to -% redefine \bf itself. -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl - \resetmathfonts} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? -\def\indexfonts{% - \let\tenrm=\indrm \let\tenit=\indit \let\tensl=\indsl - \let\tenbf=\indbf \let\tentt=\indtt \let\smallcaps=\indsc - \let\tensf=\indsf \let\teni=\indi \let\tensy=\indsy \let\tenttsl=\indttsl - \resetmathfonts \setleading{12pt}} - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bxshape{12}{1000} -\setfont\shortcontsl\slshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else\/\fi\fi\fi} -\def\smartitalic#1{{\sl #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartitalic -\let\dfn=\smartitalic -\let\emph=\smartitalic -\let\cite=\smartitalic - -\def\b#1{{\bf #1}} -\let\strong=\b - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\let\ttfont=\t -\def\samp #1{`\tclose{#1}'\null} -\setfont\smallrm\rmshape{8}{1000} -\font\smallsy=cmsy9 -\def\key#1{{\smallrm\textfont2=\smallsy \leavevmode\hbox{% - \raise0.4pt\hbox{$\langle$}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{$\langle$}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{$\rangle$}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -\let\file=\samp -\let\url=\samp % perhaps include a hypertex \special eventually -\def\email#1{$\langle${\tt #1}$\rangle$} - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in \code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ -\catcode`\-=\active -\catcode`\_=\active -\global\def\code{\begingroup \catcode`\-=\active \let-\codedash \catcode`\_=\active \let_\codeunder \codex} -% The following is used by \doprintindex to insure that long function names -% wrap around. It is necessary for - and _ to be active before the index is -% read from the file, as \entry parses the arguments long before \code is -% ever called. -- mycroft -\global\def\indexbreaks{\catcode`\-=\active \let-\realdash \catcode`\_=\active \let_\realunder} -} - -\def\realdash{-} -\def\realunder{_} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{\normalunderscore\discretionary{}{}{}} -\def\codex #1{\tclose{#1}\endgroup} - -%\let\exp=\tclose %Was temporary - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. -% -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\ttsl\look}}\fi -\else{\tclose{\ttsl\look}}\fi} - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of -% @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -\def\r#1{{\rm #1}} % roman font -% Use of \lowercase was suggested. -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @pounds{} is a sterling sign. -\def\pounds{{\it\$}} - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\def\titlefont#1{{\titlerm #1}} - -\newif\ifseenauthor -\newif\iffinishedtitlepage - -\def\shorttitlepage{\parsearg\shorttitlepagezzz} -\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm -% I deinstalled the following change because \cmr12 is undefined. -% This change was not in the ChangeLog anyway. --rms. -% \let\subtitlerm=\cmr12 - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefont{##1}} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \oldpage - \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - \HEADINGSon -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks \evenheadline % Token sequence for heading line of even pages -\newtoks \oddheadline % Token sequence for heading line of odd pages -\newtoks \evenfootline % Token sequence for footing line of even pages -\newtoks \oddfootline % Token sequence for footing line of odd pages - -% Now make Tex use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} - -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyheadingxxx #1{\everyheadingyyy #1@|@|@|@|\finish} -\gdef\everyheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyfootingxxx #1{\everyfootingyyy #1@|@|@|@|\finish} -\gdef\everyfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}} -\global\oddfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} -% -}% unbind the catcode of @. - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{ -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% Produces Day Month Year style of output. -\def\today{\number\day\space -\ifcase\month\or -January\or February\or March\or April\or May\or June\or -July\or August\or September\or October\or November\or December\fi -\space\number\year} - -% Use this if you want the Month Day, Year style of output. -%\def\today{\ifcase\month\or -%January\or February\or March\or April\or May\or June\or -%July\or August\or September\or October\or November\or December\fi -%\space\number\day, \number\year} - -% @settitle line... specifies the title of the document, for headings -% It generates no output of its own - -\def\thistitle{No Title} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - - -\message{tables,} - -% @tabs -- simple alignment - -% These don't work. For one thing, \+ is defined as outer. -% So these macros cannot even be defined. - -%\def\tabs{\parsearg\tabszzz} -%\def\tabszzz #1{\settabs\+#1\cr} -%\def\tabline{\parsearg\tablinezzz} -%\def\tablinezzz #1{\+#1\cr} -%\def\&{&} - -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % Be sure we are not still in the middle of a paragraph. - %{\parskip = 0in - %\par - %}% - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. Unfortunately - % we can't prevent a possible page break at the following - % \baselineskip glue. - \nobreak - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. Since that - % text will be indented by \tableindent, we make the item text be in - % a zero-width box. - \noindent - \rlap{\hskip -\tableindent\box0}\ignorespaces% - \endgroup% - \itemxneedsnegativevskiptrue% - \fi -} - -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -%% Contains a kludge to get @end[description] to work -\def\description{\tablez{\dontindex}{1}{}{}{}{}} - -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Necessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\afterenvbreak\endgroup}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % -} - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemsize - \itemizey {#1}{\Eitemize} -} - -\def\itemizey #1#2{% -\aboveenvbreak % -\itemmax=\itemindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \itemindent % -\exdentamount=\itemindent -\parindent = 0pt % -\parskip = \smallskipamount % -\ifdim \parskip=0pt \parskip=2pt \fi% -\def#2{\endgraf\afterenvbreak\endgroup}% -\def\itemcontents{#1}% -\let\item=\itemizeitem} - -% Set sfcode to normal for the chars that usually have another value. -% These are `.?!:;,' -\def\frenchspacing{\sfcode46=1000 \sfcode63=1000 \sfcode33=1000 - \sfcode58=1000 \sfcode59=1000 \sfcode44=1000 } - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a <number>. - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{\in hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. -% -% For those who want to use more than one line's worth of words in -% the preamble, break the line within one argument and it -% will parse correctly, i.e., -% -% @multitable {Column 1 template} {Column 2 template} {Column 3 -% template} -% Not: -% @multitable {Column 1 template} {Column 2 template} -% {Column 3 template} - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab, @multitable or @end multitable do not need to be on their -% own lines, but it will not hurt if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. - -%%%% -% Dimensions - -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -%%%% -% Macros used to set up halign preamble: -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -%% 2/1/96, to allow fractions to be given with more than one digit. -\def\pickupwholefraction#1 {\global\advance\colcount by1 % -\expandafter\xdef\csname col\the\colcount\endcsname{.#1\hsize}% -\setuptable} - -\newcount\colcount -\def\setuptable#1{\def\firstarg{#1}% -\ifx\firstarg\xendsetuptable\let\go\relax% -\else - \ifx\firstarg\xcolumnfractions\global\setpercenttrue% - \else - \ifsetpercent - \let\go\pickupwholefraction % In this case arg of setuptable - % is the decimal point before the - % number given in percent of hsize. - % We don't need this so we don't use it. - \else - \global\advance\colcount by1 - \setbox0=\hbox{#1 }% Add a normal word space as a separator; - % typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi% - \fi% -\ifx\go\pickupwholefraction\else\let\go\setuptable\fi% -\fi\go} - -%%%% -% multitable syntax -\def\tab{&\hskip1sp\relax} % 2/2/96 - % tiny skip here makes sure this column space is - % maintained, even if it is never used. - - -%%%% -% @multitable ... @end multitable definitions: - -\def\multitable{\parsearg\dotable} - -\def\dotable#1{\bgroup -\let\item\cr -\tolerance=9500 -\hbadness=9500 -\setmultitablespacing -\parskip=\multitableparskip -\parindent=\multitableparindent -\overfullrule=0pt -\global\colcount=0\relax% -\def\Emultitable{\global\setpercentfalse\global\everycr{}\cr\egroup\egroup}% - % To parse everything between @multitable and @item : -\setuptable#1 \endsetuptable - % Need to reset this to 0 after \setuptable. -\global\colcount=0\relax% - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. -\halign\bgroup&\global\advance\colcount by 1\relax% -\multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % If user has set preamble in terms of percent of \hsize - % we will use that dimension as the width of the column, and - % the \leftskip will keep entries from bumping into each other. - % Table will start at left margin and final column will justify at - % right margin. -\ifnum\colcount=1 -\else - \ifsetpercent - \else - % If user has <not> set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: -\leftskip=\multitablecolspace -\fi -\noindent##\multistrut}\cr% - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. -\global\everycr{\noalign{% -\filbreak%% keeps underfull box messages off when table breaks over pages. -\global\colcount=0\relax}} -} - -\def\setmultitablespacing{% test to see if user has set \multitablelinespace. -% If so, do nothing. If not, give it an appropriate dimension based on -% current baselineskip. -\ifdim\multitablelinespace=0pt -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\else -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. - -\def\newindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#1}} -} - -% @defindex foo == \newindex{foo} - -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. - -\def\newcodeindex #1{ -\expandafter\newwrite \csname#1indfile\endcsname% Define number for output file -\openout \csname#1indfile\endcsname \jobname.#1 % Open the file -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#1}} -} - -\def\defcodeindex{\parsearg\newcodeindex} - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -\def\synindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\doindex {#2}}% -} - -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -\def\syncodeindex #1 #2 {% -\expandafter\let\expandafter\synindexfoo\expandafter=\csname#2indfile\endcsname -\expandafter\let\csname#1indfile\endcsname=\synindexfoo -\expandafter\xdef\csname#1index\endcsname{% % Define \xxxindex -\noexpand\docodeindex {#2}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -\def\indexdummies{% -% Take care of the plain tex accent commands. -\def\"{\realbackslash "}% -\def\`{\realbackslash `}% -\def\'{\realbackslash '}% -\def\^{\realbackslash ^}% -\def\~{\realbackslash ~}% -\def\={\realbackslash =}% -\def\b{\realbackslash b}% -\def\c{\realbackslash c}% -\def\d{\realbackslash d}% -\def\u{\realbackslash u}% -\def\v{\realbackslash v}% -\def\H{\realbackslash H}% -% Take care of the plain tex special European modified letters. -\def\oe{\realbackslash oe}% -\def\ae{\realbackslash ae}% -\def\aa{\realbackslash aa}% -\def\OE{\realbackslash OE}% -\def\AE{\realbackslash AE}% -\def\AA{\realbackslash AA}% -\def\o{\realbackslash o}% -\def\O{\realbackslash O}% -\def\l{\realbackslash l}% -\def\L{\realbackslash L}% -\def\ss{\realbackslash ss}% -% Take care of texinfo commands likely to appear in an index entry. -% (Must be a way to avoid doing expansion at all, and thus not have to -% laboriously list every single command here.) -\def\@{@}% will be @@ when we switch to @ as escape char. -%\let\{ = \lbracecmd -%\let\} = \rbracecmd -\def\_{{\realbackslash _}}% -\def\w{\realbackslash w }% -\def\bf{\realbackslash bf }% -%\def\rm{\realbackslash rm }% -\def\sl{\realbackslash sl }% -\def\sf{\realbackslash sf}% -\def\tt{\realbackslash tt}% -\def\gtr{\realbackslash gtr}% -\def\less{\realbackslash less}% -\def\hat{\realbackslash hat}% -%\def\char{\realbackslash char}% -\def\TeX{\realbackslash TeX}% -\def\dots{\realbackslash dots }% -\def\copyright{\realbackslash copyright }% -\def\tclose##1{\realbackslash tclose {##1}}% -\def\code##1{\realbackslash code {##1}}% -\def\dotless##1{\realbackslash dotless {##1}}% -\def\samp##1{\realbackslash samp {##1}}% -\def\,##1{\realbackslash ,{##1}}% -\def\t##1{\realbackslash t {##1}}% -\def\r##1{\realbackslash r {##1}}% -\def\i##1{\realbackslash i {##1}}% -\def\b##1{\realbackslash b {##1}}% -\def\cite##1{\realbackslash cite {##1}}% -\def\key##1{\realbackslash key {##1}}% -\def\file##1{\realbackslash file {##1}}% -\def\var##1{\realbackslash var {##1}}% -\def\kbd##1{\realbackslash kbd {##1}}% -\def\dfn##1{\realbackslash dfn {##1}}% -\def\emph##1{\realbackslash emph {##1}}% -\unsepspaces -} - -% If an index command is used in an @example environment, any spaces -% therein should become regular spaces in the raw index file, not the -% expansion of \tie (\\leavevmode \penalty \@M \ ). -{\obeyspaces - \gdef\unsepspaces{\obeyspaces\let =\space}} - -% \indexnofonts no-ops all font-change commands. -% This is used when outputting the strings to sort the index by. -\def\indexdummyfont#1{#1} -\def\indexdummytex{TeX} -\def\indexdummydots{...} - -\def\indexnofonts{% -% Just ignore accents. -\let\,=\indexdummyfont -\let\"=\indexdummyfont -\let\`=\indexdummyfont -\let\'=\indexdummyfont -\let\^=\indexdummyfont -\let\~=\indexdummyfont -\let\==\indexdummyfont -\let\b=\indexdummyfont -\let\c=\indexdummyfont -\let\d=\indexdummyfont -\let\u=\indexdummyfont -\let\v=\indexdummyfont -\let\H=\indexdummyfont -\let\dotless=\indexdummyfont -% Take care of the plain tex special European modified letters. -\def\oe{oe}% -\def\ae{ae}% -\def\aa{aa}% -\def\OE{OE}% -\def\AE{AE}% -\def\AA{AA}% -\def\o{o}% -\def\O{O}% -\def\l{l}% -\def\L{L}% -\def\ss{ss}% -\let\w=\indexdummyfont -\let\t=\indexdummyfont -\let\r=\indexdummyfont -\let\i=\indexdummyfont -\let\b=\indexdummyfont -\let\emph=\indexdummyfont -\let\strong=\indexdummyfont -\let\cite=\indexdummyfont -\let\sc=\indexdummyfont -%Don't no-op \tt, since it isn't a user-level command -% and is used in the definitions of the active chars like <, >, |... -%\let\tt=\indexdummyfont -\let\tclose=\indexdummyfont -\let\code=\indexdummyfont -\let\file=\indexdummyfont -\let\samp=\indexdummyfont -\let\kbd=\indexdummyfont -\let\key=\indexdummyfont -\let\var=\indexdummyfont -\let\TeX=\indexdummytex -\let\dots=\indexdummydots -\def\@{@}% -} - -% To define \realbackslash, we must make \ not be an escape. -% We must first make another character (@) an escape -% so we do not become unable to do a definition. - -{\catcode`\@=0 \catcode`\\=\other -@gdef@realbackslash{\}} - -\let\indexbackslash=0 %overridden during \printindex. - -\let\SETmarginindex=\relax %initialize! -% workhorse for all \fooindexes -% #1 is name of index, #2 is stuff to put there -\def\doind #1#2{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% - \fi - {% - \count255=\lastpenalty - {% - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - {% - \let\folio=0 % We will expand all macros now EXCEPT \folio. - \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % First process the index-string with all font commands turned off - % to get the string to sort by. - {\indexnofonts \xdef\indexsorttmp{#2}}% - % - % Now produce the complete index entry, with both the sort key and the - % original text, including any font commands. - \toks0 = {#2}% - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - \temp - }% - }% - \penalty\count255 - }% -} - -\def\dosubind #1#2#3{% -{\count10=\lastpenalty % -{\indexdummies % Must do this here, since \bf, etc expand at this stage -\escapechar=`\\% -{\let\folio=0% -\def\rawbackslashxx{\indexbackslash}% -% -% Now process the index-string once, with all font commands turned off, -% to get the string to sort the index by. -{\indexnofonts -\xdef\temp1{#2 #3}% -}% -% Now produce the complete index entry. We process the index-string again, -% this time with font commands expanded, to get what to print in the index. -\edef\temp{% -\write \csname#1indfile\endcsname{% -\realbackslash entry {\temp1}{\folio}{#2}{#3}}}% -\temp }% -}\penalty\count10}} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% This is what you call to cause a particular index to get printed. -% Write -% @unnumbered Function Index -% @printindex fn - -\def\printindex{\parsearg\doprintindex} - -\def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % - \indexfonts \rm - \tolerance = 9500 - \indexbreaks - \def\indexbackslash{\rawbackslashxx}% - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \catcode`\\ = 0 - \catcode`\@ = 11 - \escapechar = `\\ - \begindoublecolumns - % - % See if the index file exists and is nonempty. - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - (Index is nonexistent) - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - (Index is empty) - \else - \input \jobname.#1s - \fi - \fi - \closein 1 - \enddoublecolumns -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -% Same as \bigskipamount except no shrink. -% \balancecolumns gets confused if there is any shrink. -\newskip\initialskipamount \initialskipamount 12pt plus4pt - -\def\initial #1{% -{\let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt -\ifdim\lastskip<\initialskipamount -\removelastskip \penalty-200 \vskip \initialskipamount\fi -\line{\secbf#1\hfill}\kern 2pt\penalty10000}} - -% This typesets a paragraph consisting of #1, dot leaders, and then #2 -% flush to the right margin. It is used for index and table of contents -% entries. The paragraph is indented by \leftskip. -% -\def\entry #1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent=2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent - % - % Insert the text of the index entry. TeX will do line-breaking on it. - #1% - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#2}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd\ \else% - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ #2% The page number ends the paragraph. - \fi% - \par -\endgroup} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm - -\def\secondary #1#2{ -{\parfillskip=0in \parskip=0in -\hangindent =1in \hangafter=1 -\noindent\hskip\secondaryindent\hbox{#1}\indexdotfill #2\par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {\global\setbox\partialpage - =\vbox{\unvbox255\kern -\topskip \kern \baselineskip}}% - \eject - % - % Now switch to the double-column output routine. - \output={\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it once. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +- < - % 1pt) as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@=\pageheight \advance\dimen@ by-\ht\partialpage - % box0 will be the left-hand column, box1 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 \penalty\outputpenalty -} -\def\pagesofar{% - % The contents of the output page -- any previous material, - % followed by the two boxes we just split. - \unvbox\partialpage - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% -} -\def\enddoublecolumns{% - \output={\balancecolumns}\eject % split what we have - \endgroup - % Back to normal single-column typesetting, but take account of the - % fact that we just accumulated some stuff on the output page. - \pagegoal=\vsize -} -\def\balancecolumns{% - % Called on the last page of the double column material. - \setbox0=\vbox{\unvbox255}% - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {\vbadness=10000 \loop \global\setbox3=\copy0 - \global\setbox1=\vsplit3 to\dimen@ - \ifdim\ht3>\dimen@ \global\advance\dimen@ by1pt \repeat}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - \pagesofar -} -\catcode `\@=\other - - -\message{sectioning,} -% Define chapters, sections, etc. - -\newcount \chapno -\newcount \secno \secno=0 -\newcount \subsecno \subsecno=0 -\newcount \subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount \appendixno \appendixno = `\@ -\def\appendixletter{\char\the\appendixno} - -\newwrite \contentsfile -% This is called from \setfilename. -\def\opencontents{\openout \contentsfile = \jobname.toc} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise - -\def\thischapter{} \def\thissection{} -\def\seccheck#1{\if \pageno<0 % -\errmessage{@#1 not allowed after generating table of contents}\fi -% -} - -\def\chapternofonts{% -\let\rawbackslash=\relax% -\let\frenchspacing=\relax% -\def\result{\realbackslash result} -\def\equiv{\realbackslash equiv} -\def\expansion{\realbackslash expansion} -\def\print{\realbackslash print} -\def\TeX{\realbackslash TeX} -\def\dots{\realbackslash dots} -\def\copyright{\realbackslash copyright} -\def\tt{\realbackslash tt} -\def\bf{\realbackslash bf } -\def\w{\realbackslash w} -\def\less{\realbackslash less} -\def\gtr{\realbackslash gtr} -\def\hat{\realbackslash hat} -\def\char{\realbackslash char} -\def\tclose##1{\realbackslash tclose {##1}} -\def\code##1{\realbackslash code {##1}} -\def\samp##1{\realbackslash samp {##1}} -\def\r##1{\realbackslash r {##1}} -\def\b##1{\realbackslash b {##1}} -\def\key##1{\realbackslash key {##1}} -\def\file##1{\realbackslash file {##1}} -\def\kbd##1{\realbackslash kbd {##1}} -% These are redefined because @smartitalic wouldn't work inside xdef. -\def\i##1{\realbackslash i {##1}} -\def\cite##1{\realbackslash cite {##1}} -\def\var##1{\realbackslash var {##1}} -\def\emph##1{\realbackslash emph {##1}} -\def\dfn##1{\realbackslash dfn {##1}} -} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raise/lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% Choose a numbered-heading macro -% #1 is heading level if unmodified by @raisesections or @lowersections -% #2 is text for heading -\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \chapterzzz{#2} -\or - \seczzz{#2} -\or - \numberedsubseczzz{#2} -\or - \numberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \chapterzzz{#2} - \else - \numberedsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses appendix heading levels -\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \appendixzzz{#2} -\or - \appendixsectionzzz{#2} -\or - \appendixsubseczzz{#2} -\or - \appendixsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \appendixzzz{#2} - \else - \appendixsubsubseczzz{#2} - \fi -\fi -} - -% like \numhead, but chooses numberless heading levels -\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \unnumberedzzz{#2} -\or - \unnumberedseczzz{#2} -\or - \unnumberedsubseczzz{#2} -\or - \unnumberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \unnumberedzzz{#2} - \else - \unnumberedsubsubseczzz{#2} - \fi -\fi -} - - -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{\seccheck{chapter}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \chapno by 1 \message{\putwordChapter \the\chapno}% -\chapmacro {#1}{\the\chapno}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -% We don't substitute the actual chapter name into \thischapter -% because we don't want its macros evaluated now. -\xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry {#1}{\the\chapno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec -}} - -\outer\def\appendix{\parsearg\appendixyyy} -\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{\seccheck{appendix}% -\secno=0 \subsecno=0 \subsubsecno=0 -\global\advance \appendixno by 1 \message{Appendix \appendixletter}% -\chapmacro {#1}{\putwordAppendix{} \appendixletter}% -\gdef\thissection{#1}% -\gdef\thischaptername{#1}% -\xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% -{\chapternofonts% -\edef\temp{{\realbackslash chapentry - {#1}{\putwordAppendix{} \appendixletter}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\global\let\section = \appendixsec -\global\let\subsection = \appendixsubsec -\global\let\subsubsection = \appendixsubsubsec -}} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\def\centerchap{\parsearg\centerchapyyy} -\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -\outer\def\top{\parsearg\unnumberedyyy} -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{\seccheck{unnumbered}% -\secno=0 \subsecno=0 \subsubsecno=0 -% -% This used to be simply \message{#1}, but TeX fully expands the -% argument to \message. Therefore, if #1 contained @-commands, TeX -% expanded them. For example, in `@unnumbered The @cite{Book}', TeX -% expanded @cite (which turns out to cause errors because \cite is meant -% to be executed, not expanded). -% -% Anyway, we don't want the fully-expanded definition of @cite to appear -% as a result of the \message, we just want `@cite' itself. We use -% \the<toks register> to achieve this: TeX expands \the<toks> only once, -% simply yielding the contents of the <toks register>. -\toks0 = {#1}\message{(\the\toks0)}% -% -\unnumbchapmacro {#1}% -\gdef\thischapter{#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbchapentry {#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\global\let\section = \unnumberedsec -\global\let\subsection = \unnumberedsubsec -\global\let\subsubsection = \unnumberedsubsubsec -}} - -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{\seccheck{section}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\the\chapno}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{\seccheck{appendixsection}% -\subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % -\gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% -{\chapternofonts% -\edef\temp{{\realbackslash secentry % -{#1}{\appendixletter}{\the\secno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{\seccheck{unnumberedsec}% -\plainsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{\seccheck{subsection}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\the\chapno}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{\seccheck{appendixsubsec}% -\gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % -\subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsecentry % -{#1}{\appendixletter}{\the\secno}{\the\subsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{\seccheck{unnumberedsubsec}% -\plainsubsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{\seccheck{subsubsection}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry % - {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno} - {\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\donoderef % -\penalty 10000 % -}} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{\seccheck{appendixsubsubsec}% -\gdef\thissection{#1}\global\advance \subsubsecno by 1 % -\subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% -{\chapternofonts% -\edef\temp{{\realbackslash subsubsecentry{#1}% - {\appendixletter} - {\the\secno}{\the\subsecno}{\the\subsubsecno}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\appendixnoderef % -\penalty 10000 % -}} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{\seccheck{unnumberedsubsubsec}% -\plainsubsubsecheading {#1}\gdef\thissection{#1}% -{\chapternofonts% -\edef\temp{{\realbackslash unnumbsubsubsecentry{#1}{\noexpand\folio}}}% -\escapechar=`\\% -\write \contentsfile \temp % -\unnumbnoderef % -\penalty 10000 % -}} - -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and -% such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{\parsearg\majorheadingzzz} -\def\majorheadingzzz #1{% -{\advance\chapheadingskip by 10pt \chapbreak }% -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -\def\chapheading{\parsearg\chapheadingzzz} -\def\chapheadingzzz #1{\chapbreak % -{\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 200} - -% @heading, @subheading, @subsubheading. -\def\heading{\parsearg\plainsecheading} -\def\subheading{\parsearg\plainsubsecheading} -\def\subsubheading{\parsearg\plainsubsubsecheading} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{ -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{ -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{ -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain -\global\let\centerchapmacro=\centerchfplain} - -% Plain chapter opening. -% #1 is the text, #2 the chapter number or empty if unnumbered. -\def\chfplain#1#2{% - \pchapsepmacro - {% - \chapfonts \rm - \def\chapnum{#2}% - \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% Plain opening for unnumbered. -\def\unnchfplain#1{\chfplain{#1}{}} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerchfplain#1{{% - \def\centerparametersmaybe{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt - }% - \chfplain{#1}{}% -}} - -\CHAPFplain % The default - -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\penalty 10000 % -} - -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} - -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\penalty 10000 % -} - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen -\global\let\centerchapmacro=\centerchfopen} - - -% Section titles. -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} -\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} -\def\plainsecheading#1{\sectionheading{sec}{}{#1}} - -% Subsection titles. -\newskip \subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} -\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} -\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} - -% Subsubsection titles. -\let\subsubsecheadingskip = \subsecheadingskip -\let\subsubsecheadingbreak = \subsecheadingbreak -\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} -\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} - - -% Print any size section title. -% -% #1 is the section type (sec/subsec/subsubsec), #2 is the section -% number (maybe empty), #3 the text. -\def\sectionheading#1#2#3{% - {% - \expandafter\advance\csname #1headingskip\endcsname by \parskip - \csname #1headingbreak\endcsname - }% - {% - % Switch to the right set of fonts. - \csname #1fonts\endcsname \rm - % - % Only insert the separating space if we have a section number. - \def\secnum{#2}% - \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% - % - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 % zero if no section number - \unhbox0 #3}% - }% - \ifdim\parskip<10pt \nobreak\kern10pt\nobreak\kern-\parskip\fi \nobreak -} - - -\message{toc printing,} -% Finish up the main text and prepare to read what we've written -% to \contentsfile. - -\newskip\contentsrightmargin \contentsrightmargin=1in -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund <tege@matematik.su.se> - \contentsalignmacro - \immediate\closeout \contentsfile - \ifnum \pageno>0 - \pageno = -1 % Request roman numbered pages. - \fi - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - \catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. -} - - -% Normal (long) toc. -\outer\def\contents{% - \startcontents{\putwordTableofContents}% - \input \jobname.toc - \endgroup - \vfill \eject -} - -% And just the chapters. -\outer\def\summarycontents{% - \startcontents{\putwordShortContents}% - % - \let\chapentry = \shortchapentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\unnumbsecentry ##1##2{} - \def\subsecentry ##1##2##3##4##5{} - \def\unnumbsubsecentry ##1##2{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \def\unnumbsubsubsecentry ##1##2{} - \input \jobname.toc - \endgroup - \vfill \eject -} -\let\shortcontents = \summarycontents - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapter-level things, for both the long and short contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} - -% See comments in \dochapentry re vbox and related settings -\def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno{#3}}% -} - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g. `Appendix A' for an appendix, or `3' for a chapter. -% We could simplify the code here by writing out an \appendixentry -% command in the toc file for appendices, instead of using \chapentry -% for both, but it doesn't seem worth it. -\setbox0 = \hbox{\shortcontrm \putwordAppendix } -\newdimen\shortappendixwidth \shortappendixwidth = \wd0 - -\def\shortchaplabel#1{% - % We typeset #1 in a box of constant width, regardless of the text of - % #1, so the chapter titles will come out aligned. - \setbox0 = \hbox{#1}% - \dimen0 = \ifdim\wd0 > \shortappendixwidth \shortappendixwidth \else 0pt \fi - % - % This space should be plenty, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - \advance\dimen0 by 1.1em - \hbox to \dimen0{#1\hfil}% -} - -\def\unnumbchapentry#1#2{\dochapentry{#1}{#2}} -\def\shortunnumberedentry#1#2{\tocentry{#1}{\doshortpageno{#2}}} - -% Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2{\dosecentry{#1}{#2}} - -% Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2{\dosubsecentry{#1}{#2}} - -% And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2{\dosubsubsecentry{#1}{#2}} - -% This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno{#2}}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno{#2}}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno{#2}}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno{#2}}% -\endgroup} - -% Final typesetting of a toc entry; we use the same \entry macro as for -% the index entries, but we want to suppress hyphenation here. (We -% can't do that in the \entry macro, since index entries might consist -% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -% -% \turnoffactive is for the sake of @" used for umlauts. -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - \entry{\turnoffactive #1}{\turnoffactive #2}% -\endgroup} - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts - - -\message{environments,} - -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% Furthermore, these definitions must come after we define our fonts. -\newbox\dblarrowbox \newbox\longdblarrowbox -\newbox\pushcharbox \newbox\bullbox -\newbox\equivbox \newbox\errorbox - -%{\tentt -%\global\setbox\dblarrowbox = \hbox to 1em{\hfil$\Rightarrow$\hfil} -%\global\setbox\longdblarrowbox = \hbox to 1em{\hfil$\mapsto$\hfil} -%\global\setbox\pushcharbox = \hbox to 1em{\hfil$\dashv$\hfil} -%\global\setbox\equivbox = \hbox to 1em{\hfil$\ptexequiv$\hfil} -% Adapted from the manmac format (p.420 of TeXbook) -%\global\setbox\bullbox = \hbox to 1em{\kern.15em\vrule height .75ex width .85ex -% depth .1ex\hfil} -%} - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% Adapted from the TeXbook's \boxit. -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} - -\global\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{ - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} - -% The @error{} command. -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\def\tex{\begingroup -\catcode `\\=0 \catcode `\{=1 \catcode `\}=2 -\catcode `\$=3 \catcode `\&=4 \catcode `\#=6 -\catcode `\^=7 \catcode `\_=8 \catcode `\~=13 \let~=\tie -\catcode `\%=14 -\catcode 43=12 % plus -\catcode`\"=12 -\catcode`\==12 -\catcode`\|=12 -\catcode`\<=12 -\catcode`\>=12 -\escapechar=`\\ -% -\let\,=\ptexcomma -\let\~=\ptextilde -\let\{=\ptexlbrace -\let\}=\ptexrbrace -\let\.=\ptexdot -\let\*=\ptexstar -\let\dots=\ptexdots -\def\endldots{\mathinner{\ldots\ldots\ldots\ldots}} -\def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi} -\def\@{@}% -\let\bullet=\ptexbullet -\let\b=\ptexb \let\c=\ptexc \let\i=\ptexi \let\t=\ptext -% -\let\Etex=\endgroup} - -% Define @lisp ... @endlisp. -% @lisp does a \begingroup so it can rebind things, -% including the definition of @endlisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% Make each space character in the input produce a normal interword -% space in the output. Don't allow a line break at this space, as this -% is used only in environments like @example, where each line of input -% should produce a line of output anyway. -% -{\obeyspaces % -\gdef\sepspaces{\obeyspaces\let =\tie}} - -% Define \obeyedspace to be our active space, whatever it is. This is -% for use in \parsearg. -{\sepspaces% -\global\let\obeyedspace= } - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip -% -\def\aboveenvbreak{{\advance\envskipamount by \parskip -\endgraf \ifdim\lastskip<\envskipamount -\removelastskip \penalty-50 \vskip\envskipamount \fi}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% \cartouche: draw rectangle w/rounded corners around argument -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\long\def\cartouche{% -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip -\def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \inENV % This group ends at the end of the body - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \singlespace - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \let\exdent=\nofillexdent - \let\nonarrowing=\relax - \fi -} - -% To ending an @example-like environment, we first end the paragraph -% (via \afterenvbreak's vertical glue), and then the group. That way we -% keep the zero \parskip that the environments set -- \parskip glue -% will be inserted at the beginning of the next paragraph in the -% document, after the environment. -% -\def\nonfillfinish{\afterenvbreak\endgroup}% - -% This macro is -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \rawbackslash % have \ input char produce \ char from current font - \gobble -} - -% Define the \E... control sequence only if we are inside the -% environment, so the error checking in \end will work. -% -% We must call \lisp last in the definition, since it reads the -% return following the @example (or whatever) command. -% -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} -\def\smallexample{\begingroup \def\Esmallexample{\nonfillfinish\endgroup}\lisp} -\def\smalllisp{\begingroup \def\Esmalllisp{\nonfillfinish\endgroup}\lisp} - -% @smallexample and @smalllisp. This is not used unless the @smallbook -% command is given. Originally contributed by Pavel@xerox. -% -\def\smalllispx{\begingroup - \nonfillstart - \let\Esmalllisp = \nonfillfinish - \let\Esmallexample = \nonfillfinish - % - % Smaller fonts for small examples. - \indexfonts \tt - \rawbackslash % make \ output the \ character from the current font (tt) - \gobble -} - -% This is @display; same as @lisp except use roman font. -% -\def\display{\begingroup - \nonfillstart - \let\Edisplay = \nonfillfinish - \gobble -} - -% This is @format; same as @display except don't narrow margins. -% -\def\format{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eformat = \nonfillfinish - \gobble -} - -% @flushleft (same as @format) and @flushright. -% -\def\flushleft{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushleft = \nonfillfinish - \gobble -} -\def\flushright{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushright = \nonfillfinish - \advance\leftskip by 0pt plus 1fill - \gobble} - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. -% -\def\quotation{% - \begingroup\inENV %This group ends at the end of the @quotation body - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \singlespace - \parindent=0pt - % We have retained a nonzero parskip for the environment, since we're - % doing normal filling. So to avoid extra space below the environment... - \def\Equotation{\parskip = 0pt \nonfillfinish}% - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi -} - -\message{defuns,} -% Define formatter for defuns -% First, allow user to change definition object font (\df) internally -\def\setdeffont #1 {\csname DEF#1\endcsname} - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deftypemargin \deftypemargin=12pt -\newskip\deflastargmargin \deflastargmargin=18pt - -\newcount\parencount -% define \functionparens, which makes ( and ) and & do special things. -% \functionparens affects the group it is contained in. -\def\activeparens{% -\catcode`\(=\active \catcode`\)=\active \catcode`\&=\active -\catcode`\[=\active \catcode`\]=\active} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -\global\let(=\lparen \global\let)=\rparen -\global\let[=\lbrack \global\let]=\rbrack - -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} -% This is used to turn on special parens -% but make & act ordinary (given that it's active). -\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested % -\global\advance\parencount by 1 } -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. -% also in that case restore the outer-level definition of (. -\ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi -\global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}} \def\clnr{{\sf\char`\)}} \def\ampnr{\&} -\def\lbrb{{\bf\char`\[}} \def\rbrb{{\bf\char`\]}} - -% First, defname, which formats the header line itself. -% #1 should be the function name. -% #2 should be the type of definition, such as "Function". - -\def\defname #1#2{% -% Get the values of \leftskip and \rightskip as they were -% outside the @def... -\dimen2=\leftskip -\advance\dimen2 by -\defbodyindent -\dimen3=\rightskip -\advance\dimen3 by -\defbodyindent -\noindent % -\setbox0=\hbox{\hskip \deflastargmargin{\rm #2}\hskip \deftypemargin}% -\dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line -\dimen1=\hsize \advance \dimen1 by -\defargsindent %size for continuations -\parshape 2 0in \dimen0 \defargsindent \dimen1 % -% Now output arg 2 ("Function" or some such) -% ending at \deftypemargin from the right margin, -% but stuck inside a box of width 0 so it does not interfere with linebreaking -{% Adjust \hsize to exclude the ambient margins, -% so that \rightline will obey them. -\advance \hsize by -\dimen2 \advance \hsize by -\dimen3 -\rlap{\rightline{{\rm #2}\hskip \deftypemargin}}}% -% Make all lines underfull and no complaints: -\tolerance=10000 \hbadness=10000 -\advance\leftskip by -\defbodyindent -\exdentamount=\defbodyindent -{\df #1}\enskip % Generate function name -} - -% Actually process the body of a definition -% #1 should be the terminating control sequence, such as \Edefun. -% #2 should be the "another name" control sequence, such as \defunx. -% #3 should be the control sequence that actually processes the header, -% such as \defunheader. - -\def\defparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\activeparens\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % 61 is `=' -\obeylines\activeparens\spacesplit#3} - -\def\defmethparsebody #1#2#3#4 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 {\begingroup\obeylines\activeparens\spacesplit{#3{##1}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#4}}} - -\def\defopparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\activeparens\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\activeparens\spacesplit{#3{#5}}} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. - -\def\defvarparsebody #1#2#3{\begingroup\inENV% Environment for definitionbody -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2{\begingroup\obeylines\spacesplit#3}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup % -\catcode 61=\active % -\obeylines\spacesplit#3} - -% This is used for \def{tp,vr}parsebody. It could probably be used for -% some of the others, too, with some judicious conditionals. -% -\def\parsebodycommon#1#2#3{% - \begingroup\inENV % - \medbreak % - % Define the end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - \def#2##1 {\begingroup\obeylines\spacesplit{#3{##1}}}% - \parindent=0in - \advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent - \exdentamount=\defbodyindent - \begingroup\obeylines -} - -\def\defvrparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \spacesplit{#3{#4}}% -} - -% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the -% type is just `struct', because we lose the braces in `{struct -% termios}' when \spacesplit reads its undelimited argument. Sigh. -% \let\deftpparsebody=\defvrparsebody -% -% So, to get around this, we put \empty in with the type name. That -% way, TeX won't find exactly `{...}' as an undelimited argument, and -% won't strip off the braces. -% -\def\deftpparsebody #1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \spacesplit{\parsetpheaderline{#3{#4}}}\empty -} - -% Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does, putting the result in \tptemp. -% -\def\removeemptybraces\empty#1\relax{\def\tptemp{#1}}% - -% After \spacesplit has done its work, this is called -- #1 is the final -% thing to call, #2 the type name (which starts with \empty), and #3 -% (which might be empty) the arguments. -% -\def\parsetpheaderline#1#2#3{% - \removeemptybraces#2\relax - #1{\tptemp}{#3}% -}% - -\def\defopvarparsebody #1#2#3#4#5 {\begingroup\inENV % -\medbreak % -% Define the end token that this defining construct specifies -% so that it will exit this group. -\def#1{\endgraf\endgroup\medbreak}% -\def#2##1 ##2 {\def#4{##1}% -\begingroup\obeylines\spacesplit{#3{##2}}}% -\parindent=0in -\advance\leftskip by \defbodyindent \advance \rightskip by \defbodyindent -\exdentamount=\defbodyindent -\begingroup\obeylines\spacesplit{#3{#5}}} - -% Split up #2 at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. - -{\obeylines -\gdef\spacesplit#1#2^^M{\endgroup\spacesplitfoo{#1}#2 \relax\spacesplitfoo}% -\long\gdef\spacesplitfoo#1#2 #3#4\spacesplitfoo{% -\ifx\relax #3% -#1{#2}{}\else #1{#2}{#3#4}\fi}} - -% So much for the things common to all kinds of definitions. - -% Define @defun. - -% First, define the processing that is wanted for arguments of \defun -% Use this to expand the args and terminate the paragraph they make up - -\def\defunargs #1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -\hyphenchar\tensl=0 -#1% -\hyphenchar\tensl=45 -\ifnum\parencount=0 \else \errmessage{unbalanced parens in @def arguments}\fi% -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Use \boldbraxnoamp, not \functionparens, so that & is not special. -\boldbraxnoamp -\tclose{#1}% avoid \code because of side effects on active chars -\interlinepenalty=10000 -\advance\rightskip by 0pt plus 1fil -\endgraf\penalty 10000\vskip -\parskip\penalty 10000% -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars - -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} - -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} - -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Function}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefun int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} - -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Function}% -\deftypefunargs {#3}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} - -% \defheaderxcond#1\relax$$$ -% puts #1 in @code, followed by a space, but does nothing if #1 is null. -\def\defheaderxcond#1#2$$${\ifx#1\relax\else\code{#1#2} \fi} - -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup -\normalparens % notably, turn off `&' magic, which prevents -% at least some C++ text from working -\defname {\defheaderxcond#2\relax$$$#3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Macro}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% @defspec == @deffn Special Form - -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{Special Form}% -\defunargs {#2}\endgroup % -\catcode 61=\other % Turn off change made in \defparsebody -} - -% This definition is run if you use @defunx -% anywhere other than immediately after a @defun or @defunx. - -\def\deffnx #1 {\errmessage{@deffnx in invalid context}} -\def\defunx #1 {\errmessage{@defunx in invalid context}} -\def\defmacx #1 {\errmessage{@defmacx in invalid context}} -\def\defspecx #1 {\errmessage{@defspecx in invalid context}} -\def\deftypefnx #1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypeunx #1 {\errmessage{@deftypeunx in invalid context}} - -% @defmethod, and so on - -% @defop {Funny Method} foo-class frobnicate argument - -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} - -\def\defopheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% Make entry in function index -\begingroup\defname {#2}{\defoptype{} on #1}% -\defunargs {#3}\endgroup % -} - -% @defmethod == @defop Method - -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} - -\def\defmethodheader #1#2#3{% -\dosubind {fn}{\code{#2}}{on #1}% entry in function index -\begingroup\defname {#2}{Method on #1}% -\defunargs {#3}\endgroup % -} - -% @defcv {Class Option} foo-class foo-flag - -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - -\def\defcvarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{\defcvtype{} of #1}% -\defvarargs {#3}\endgroup % -} - -% @defivar == @defcv {Instance Variable} - -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} - -\def\defivarheader #1#2#3{% -\dosubind {vr}{\code{#2}}{of #1}% Make entry in var index -\begingroup\defname {#2}{Instance Variable of #1}% -\defvarargs {#3}\endgroup % -} - -% These definitions are run if you use @defmethodx, etc., -% anywhere other than immediately after a @defmethod, etc. - -\def\defopx #1 {\errmessage{@defopx in invalid context}} -\def\defmethodx #1 {\errmessage{@defmethodx in invalid context}} -\def\defcvx #1 {\errmessage{@defcvx in invalid context}} -\def\defivarx #1 {\errmessage{@defivarx in invalid context}} - -% Now @defvar - -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000} - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{Variable}% -\defvarargs {#2}\endgroup % -} - -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{User Option}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name. -\def\deftypevarheader #1#2{% -\doind {vr}{\code{#2}}% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$$$#2}{Variable}% -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\doind {vr}{\code{#3}}% -\begingroup\defname {\defheaderxcond#2\relax$$$#3}{#1} -\interlinepenalty=10000 -\endgraf\penalty 10000\vskip -\parskip\penalty 10000 -\endgroup} - -% This definition is run if you use @defvarx -% anywhere other than immediately after a @defvar or @defvarx. - -\def\defvrx #1 {\errmessage{@defvrx in invalid context}} -\def\defvarx #1 {\errmessage{@defvarx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\deftypevarx #1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx #1 {\errmessage{@deftypevrx in invalid context}} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% This definition is run if you use @deftpx, etc -% anywhere other than immediately after a @deftp, etc. - -\def\deftpx #1 {\errmessage{@deftpx in invalid context}} - - -\message{cross reference,} -% Define cross-reference macros -\newwrite \auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% \setref{foo} defines a cross-reference point named foo. - -\def\setref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ysectionnumberandtype}} - -\def\unnumbsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Ynothing}} - -\def\appendixsetref#1{% -\dosetq{#1-title}{Ytitle}% -\dosetq{#1-pg}{Ypagenumber}% -\dosetq{#1-snt}{Yappendixletterandtype}} - -% \xref, \pxref, and \ref generate cross-references to specified points. -% For \xrefX, #1 is the node name, #2 the name of the Info -% cross-reference, #3 the printed node name, #4 the name of the Info -% file, #5 the name of the printed manual. All but the node name can be -% omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% - \setbox0=\hbox{\printednodename}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printednodename{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1>0pt% - % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printednodename{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printednodename{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' in \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \refx{#1-snt}{}}% - \space [\printednodename],\space - \turnoffactive \putwordpage\tie\refx{#1-pg}{}% - \fi -\endgroup} - -% \dosetq is the interface for calls from other macros - -% Use \turnoffactive so that punctuation chars such as underscore -% work in node names. -\def\dosetq #1#2{{\let\folio=0 \turnoffactive \auxhat% -\edef\next{\write\auxfile{\internalsetq {#1}{#2}}}% -\next}} - -% \internalsetq {foo}{page} expands into -% CHARACTERS 'xrdef {foo}{...expansion of \Ypage...} -% When the aux file is read, ' is the escape character - -\def\internalsetq #1#2{'xrdef {#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq - -\def\Ypagenumber{\folio} - -\def\Ytitle{\thissection} - -\def\Ynothing{} - -\def\Ysectionnumberandtype{% -\ifnum\secno=0 \putwordChapter\xreftie\the\chapno % -\else \ifnum \subsecno=0 \putwordSection\xreftie\the\chapno.\the\secno % -\else \ifnum \subsubsecno=0 % -\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno % -\else % -\putwordSection\xreftie\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\def\Yappendixletterandtype{% -\ifnum\secno=0 \putwordAppendix\xreftie'char\the\appendixno{}% -\else \ifnum \subsecno=0 \putwordSection\xreftie'char\the\appendixno.\the\secno % -\else \ifnum \subsubsecno=0 % -\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno % -\else % -\putwordSection\xreftie'char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno % -\fi \fi \fi } - -\gdef\xreftie{'tie} - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Non-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. - -\def\refx#1#2{% - \expandafter\ifx\csname X#1\endcsname\relax - % If not defined, say something at least. - $\langle$un\-de\-fined$\rangle$% - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \else - % It's defined, so just use it. - \csname X#1\endcsname - \fi - #2% Output the suffix in any case. -} - -% Read the last existing aux file, if any. No error if none exists. - -% This is the macro invoked by entries in the aux file. -\def\xrdef #1#2{ -{\catcode`\'=\other\expandafter \gdef \csname X#1\endcsname {#2}}} - -\def\readauxfile{% -\begingroup -\catcode `\^^@=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\^^C=\other -\catcode `\^^D=\other -\catcode `\^^E=\other -\catcode `\^^F=\other -\catcode `\^^G=\other -\catcode `\^^H=\other -\catcode `\=\other -\catcode `\^^L=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode `\=\other -\catcode 26=\other -\catcode `\^^[=\other -\catcode `\^^\=\other -\catcode `\^^]=\other -\catcode `\^^^=\other -\catcode `\^^_=\other -\catcode `\@=\other -\catcode `\^=\other -\catcode `\~=\other -\catcode `\[=\other -\catcode `\]=\other -\catcode`\"=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode `\$=\other -\catcode `\#=\other -\catcode `\&=\other -% `\+ does not work, so use 43. -\catcode 43=\other -% Make the characters 128-255 be printing characters -{% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% -}% -% the aux file uses ' as the escape. -% Turn off \ as an escape so we do not lose on -% entries which were dumped with control sequences in their names. -% For example, 'xrdef {$\leq $-fun}{page ...} made by @defun ^^ -% Reference to such entries still does not work the way one would wish, -% but at least they do not bomb out when the aux file is read in. -\catcode `\{=1 \catcode `\}=2 -\catcode `\%=\other -\catcode `\'=0 -\catcode`\^=7 % to make ^^e4 etc usable in xref tags -\catcode `\\=\other -\openin 1 \jobname.aux -\ifeof 1 \else \closein 1 \input \jobname.aux \global\havexrefstrue -\global\warnedobstrue -\fi -% Open the new aux file. Tex will close it automatically at exit. -\openout \auxfile=\jobname.aux -\endgroup} - - -% Footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only.. -\let\footnotestyle=\comment - -\let\ptexfootnote=\footnote - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\/\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \footnotezzz -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -\long\gdef\footnotezzz#1{\insert\footins{% - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - % Hang the footnote text off the number. - \hang - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - #1\strut}% -} - -}%end \catcode `\@=11 - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - - -% End of control word definitions. - -\message{and turning on texinfo input format.} - -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% Set some numeric style parameters, for 8.5 x 11 format. - -\hsize = 6in -\hoffset = .25in -\newdimen\defaultparindent \defaultparindent = 15pt -\parindent = \defaultparindent -\parskip 3pt plus 2pt minus 1pt -\setleading{13.2pt} -\advance\topskip by 1.2cm - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness=10000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. This makes it come to about 9pt for the 8.5x11 format. -% -\ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% -\else - \emergencystretch = \hsize - \divide\emergencystretch by 45 -\fi - -% Use @smallbook to reset parameters for 7x9.5 format (or else 7x9.25) -\def\smallbook{ - \global\chapheadingskip = 15pt plus 4pt minus 2pt - \global\secheadingskip = 12pt plus 3pt minus 2pt - \global\subsecheadingskip = 9pt plus 2pt minus 2pt - % - \global\lispnarrowing = 0.3in - \setleading{12pt} - \advance\topskip by -1cm - \global\parskip 2pt plus 1pt - \global\hsize = 5in - \global\vsize=7.5in - \global\tolerance=700 - \global\hfuzz=1pt - \global\contentsrightmargin=0pt - \global\deftypemargin=0pt - \global\defbodyindent=.5cm - % - \global\pagewidth=\hsize - \global\pageheight=\vsize - % - \global\let\smalllisp=\smalllispx - \global\let\smallexample=\smalllispx - \global\def\Esmallexample{\Esmalllisp} -} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{ -\global\tolerance=700 -\global\hfuzz=1pt -\setleading{12pt} -\global\parskip 15pt plus 1pt - -\global\vsize= 53\baselineskip -\advance\vsize by \topskip -%\global\hsize= 5.85in % A4 wide 10pt -\global\hsize= 6.5in -\global\outerhsize=\hsize -\global\advance\outerhsize by 0.5in -\global\outervsize=\vsize -\global\advance\outervsize by 0.6in - -\global\pagewidth=\hsize -\global\pageheight=\vsize -} - -\bindingoffset=0pt -\normaloffset=\hoffset -\pagewidth=\hsize -\pageheight=\vsize - -% Allow control of the text dimensions. Parameters in order: textheight; -% textwidth; voffset; hoffset; binding offset; topskip. -% All require a dimension; -% header is additional; added length extends the bottom of the page. - -\def\changepagesizes#1#2#3#4#5#6{ - \global\vsize= #1 - \global\topskip= #6 - \advance\vsize by \topskip - \global\voffset= #3 - \global\hsize= #2 - \global\outerhsize=\hsize - \global\advance\outerhsize by 0.5in - \global\outervsize=\vsize - \global\advance\outervsize by 0.6in - \global\pagewidth=\hsize - \global\pageheight=\vsize - \global\normaloffset= #4 - \global\bindingoffset= #5} - -% A specific text layout, 24x15cm overall, intended for A4 paper. Top margin -% 29mm, hence bottom margin 28mm, nominal side margin 3cm. -\def\afourlatex - {\global\tolerance=700 - \global\hfuzz=1pt - \setleading{12pt} - \global\parskip 15pt plus 1pt - \advance\baselineskip by 1.6pt - \changepagesizes{237mm}{150mm}{3.6mm}{3.6mm}{3mm}{7mm} - } - -% Use @afourwide to print on European A4 paper in wide format. -\def\afourwide{\afourpaper -\changepagesizes{9.5in}{6.5in}{\hoffset}{\normaloffset}{\bindingoffset}{7mm}} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} - -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\the\font=0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt \char '042}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt \char '176}} -\chardef\hat=`\^ -\catcode`\^=\active -\def\auxhat{\def^{'hat}} -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.06em \vbox{\hrule width.3em height.1ex}} - -\catcode`\|=\active -\def|{{\tt \char '174}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -%\catcode 27=\active -%\def^^[{$\diamondsuit$} - -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`+=\active -\catcode`\_=\active - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \rawbackslashxx output one backslash character in current font -\global\chardef\rawbackslashxx=`\\ -%{\catcode`\\=\other -%@gdef@rawbackslashxx{\}} - -% \rawbackslash redefines \ as input to do \rawbackslashxx. -{\catcode`\\=\active -@gdef@rawbackslash{@let\=@rawbackslashxx }} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} - -% Say @foo, not \foo, in error messages. -\escapechar=`\@ - -% \catcode 17=0 % Define control-q -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{@let"=@normaldoublequote -@let\=@realbackslash -@let~=@normaltilde -@let^=@normalcaret -@let_=@normalunderscore -@let|=@normalverticalbar -@let<=@normalless -@let>=@normalgreater -@let+=@normalplus} - -@def@normalturnoffactive{@let"=@normaldoublequote -@let\=@normalbackslash -@let~=@normaltilde -@let^=@normalcaret -@let_=@normalunderscore -@let|=@normalverticalbar -@let<=@normalless -@let>=@normalgreater -@let+=@normalplus} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{@ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active @catcode`@_=@active} - -%% These look ok in all fonts, so just make them not special. The @rm below -%% makes sure that the current font starts out as the newly loaded cmr10 -@catcode`@$=@other @catcode`@%=@other @catcode`@&=@other @catcode`@#=@other - -@textfonts -@rm - -@c Local variables: -@c page-delimiter: "^\\\\message" -@c End: diff --git a/gnu/lib/libreadline/shlib_version b/gnu/lib/libreadline/shlib_version new file mode 100644 index 00000000000..97c9f92d6b8 --- /dev/null +++ b/gnu/lib/libreadline/shlib_version @@ -0,0 +1,2 @@ +major=0 +minor=0 |