Mercurial > hg > octave-terminal
changeset 3046:639808eda8eb
[project @ 1997-06-06 22:11:57 by jwe]
author | jwe |
---|---|
date | Fri, 06 Jun 1997 22:11:59 +0000 |
parents | d2046ca9a380 |
children | 540812544d0d |
files | readline/doc/history.dvi readline/doc/history.html readline/doc/history.info readline/doc/history.ps readline/doc/readline.0 readline/doc/readline.dvi readline/doc/readline.html readline/doc/readline.info readline/doc/readline.ps |
diffstat | 9 files changed, 0 insertions(+), 14512 deletions(-) [+] |
line wrap: on
line diff
deleted file mode 100644 index 4a4673cd2221a39e2375d04dc427408231bd24c9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 --- a/readline/doc/history.html +++ /dev/null @@ -1,1062 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.51 - from /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo on 16 April 1997 --> - -<TITLE>GNU History Library</TITLE> -</HEAD> -<BODY> -<H1>GNU History Library</H1> -<H2>Edition 2.1, for <CODE>History Library</CODE> Version 2.1.</H2> -<H2>March 1996</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<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> -675 Massachusetts Avenue, <BR> -Cambridge, MA 02139 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 Foundation. - -</P> -<P> -Copyright (C) 1989, 1991 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="history_toc.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> - - - -<H2><A NAME="SEC2" HREF="history_toc.html#TOC2">Interactive 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 previous history 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 previous history is called the -<STRONG>event</STRONG>, and the portions of that line that are acted upon are -called <STRONG>words</STRONG>. Various <STRONG>modifiers</STRONG> are available to manipulate -the selected words. The line is broken into words in the same fashion -that Bash does, so that several English (or Unix) words -surrounded by quotes are considered as one word. -History expansions are introduced by the appearance of the -history expansion character, which is <SAMP>`!'</SAMP> by default. - -</P> - - - -<H3><A NAME="SEC3" HREF="history_toc.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, <KBD>=</KBD> or <KBD>(</KBD>. - -<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_toc.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 -can 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> -<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_toc.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_toc.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> - - - -<H2><A NAME="SEC7" HREF="history_toc.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 <STRONG>expansion</STRONG> 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> - - -<H2><A NAME="SEC8" HREF="history_toc.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_toc.html#TOC9">History Functions</A></H2> - -<P> -This section describes the calling sequence for the various functions -present in GNU History. - -</P> - - - -<H3><A NAME="SEC10" HREF="history_toc.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_toc.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_toc.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_toc.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_toc.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 <STRONG>anchored</STRONG>, -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_toc.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_toc.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">Interactive 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 only 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_toc.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_toc.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_toc.html#TOC19">Concept Index</A></H1> -<P> -<H2>a</H2> -<DIR> -<LI><A HREF="history.html#IDX23">anchored search</A> -</DIR> -<H2>e</H2> -<DIR> -<LI><A HREF="history.html#IDX2">event designators</A> -</DIR> -<H2>h</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_toc.html#TOC20">Function and Variable Index</A></H1> -<P> -<H2>a</H2> -<DIR> -<LI><A HREF="history.html#IDX7">add_history</A> -<LI><A HREF="history.html#IDX30">append_history</A> -</DIR> -<H2>c</H2> -<DIR> -<LI><A HREF="history.html#IDX10">clear_history</A> -<LI><A HREF="history.html#IDX16">current_history</A> -</DIR> -<H2>g</H2> -<DIR> -<LI><A HREF="history.html#IDX34">get_history_event</A> -</DIR> -<H2>h</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>m</H2> -<DIR> -<LI><A HREF="history.html#IDX38">max_input_history</A> -</DIR> -<H2>n</H2> -<DIR> -<LI><A HREF="history.html#IDX21">next_history</A> -</DIR> -<H2>p</H2> -<DIR> -<LI><A HREF="history.html#IDX20">previous_history</A> -</DIR> -<H2>r</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>s</H2> -<DIR> -<LI><A HREF="history.html#IDX11">stifle_history</A> -</DIR> -<H2>u</H2> -<DIR> -<LI><A HREF="history.html#IDX12">unstifle_history</A> -<LI><A HREF="history.html#IDX4">using_history</A> -</DIR> -<H2>w</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 16 April 1997 using the -<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A> -translator version 1.51.</P> -</BODY> -</HTML>
deleted file mode 100644 --- a/readline/doc/history.info +++ /dev/null @@ -1,785 +0,0 @@ -This is Info file history.info, produced by Makeinfo-1.55 from the -input file /usr/homes/chet/src/bash/readline-src/doc/hist.texinfo. - - This document describes the GNU History library, a programming tool -that provides a consistent user interface for recalling lines of -previously typed input. - - Copyright (C) 1988, 1991, 1993, 1995, 1996 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: history.info, Node: Top, Next: Using History Interactively, Prev: (DIR), 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 - -Interactive 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 previous history 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 previous -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 English (or Unix) words -surrounded by quotes are considered as 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 can -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. - -`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. - - -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 only 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: Top1035 -Node: Using History Interactively1629 -Node: History Interaction2137 -Node: Event Designators3614 -Node: Word Designators4537 -Node: Modifiers5786 -Node: Programming with GNU History6924 -Node: Introduction to History7650 -Node: History Storage8971 -Node: History Functions10064 -Node: Initializing History and State Management11035 -Node: History List Management11827 -Node: Information About the History List13348 -Node: Moving Around the History List14654 -Node: Searching the History List15539 -Node: Managing the History File17371 -Node: History Expansion18877 -Node: History Variables20721 -Node: History Programming Example23039 -Node: Concept Index25643 -Node: Function and Variable Index26124 - -End Tag Table
deleted file mode 100644 --- a/readline/doc/history.ps +++ /dev/null @@ -1,1558 +0,0 @@ -%!PS (but not EPSF; comments have been disabled) -%DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi -%DVIPSParameters: dpi=300, compressed, comments removed -%DVIPSSource: TeX output 1997.04.16:1522 -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}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{dup dup 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 dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup 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 /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]/id ch-image N /rw ch-width 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 dup 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 dup gp add -/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ -dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 -adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 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}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] -}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 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 dup 1 get dup mul exch 0 get dup 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 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -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 /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /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 -TeXDict begin 40258431 52099146 1000 300 300 (history.dvi) -@start /Fa 1 47 df<127012F8A212F012E005057B840E>46 D -E /Fb 1 47 df<1238127C12FCA212F8127006067A8512>46 D E -/Fc 25 123 df<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3 -EA707C383FFF80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E0300 -1C1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFE -EA1C0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14> -I<137EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEF -C0EA07CF12177F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE0 -0012601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA070413 -00A3EA7FFE12FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800 -EA701CA3EA3018EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A4 -38700700EA3C1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E -07121CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A2 -0D187C9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38 -133C131C7F38FF1F80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I< -EAFB8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F -86EA1E07121CAA38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6 -EA701CEA783CEA3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C -1380EB01C0A6EB0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I< -EA03E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB -3FE0A213187F8F14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A21110 -7F8F14>I<EA0FD8EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612 -E012F0EAF81CEAFFF8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3 -131CEA07F8EA01F00F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F -14>I<38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38 -FE3F80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I< -EA7E3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A2 -11107F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25B -A3485A12730077C7FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0 -EA01C0EA0380EA0700120EEA1C0712381270B5FCA210107F8F14>I -E /Fd 1 47 df<1270A212F0126004047D830B>46 D E /Fe 25 -122 df<EA07E0EA1C38EA381CEA300CEA700EEA6006A2EAE007AAEA6006A2EA700EEA30 -0CEA381CEA1C38EA07E010187F9713>48 D<12035AB4FC1207B3A2EA7FF80D187D9713> -I<EA0F80EA1060EA2030EA4038EA803CEAC01C12E01240EA003C1338A21370136013C0EA -018013001202EA040412081210EA3008EA3FF8127F12FF0E187E9713>I<EA01F8EA0704 -EA0C06EA180E123013001270126012E0EAE3E0EAE418EAE80CEAF00EEAE0061307A31260 -A2EA7006EA300EEA180CEA0C38EA07E010187F9713>54 D<1240EA7FFF13FEA2EA4004EA -80081310A2EA00201340A21380120113005AA25A1206A2120EA5120410197E9813>I<EA -07E0EA1818EA300CEA20061260A21270EA780CEA3E18EA1F30EA07C0EA03E0EA0CF8EA30 -7CEA601E130FEAC0071303A3EA6002EA2004EA1818EA07E010187F9713>I<EA07E0EA1C -30EA3018EA700CEA600EEAE006A21307A31260EA700FEA3017EA1827EA07C7EA00071306 -130E130C12701318EA6030EA3060EA0F8010187F9713>I<39FFE1FFC0390E001C00AB38 -0FFFFC380E001CAC39FFE1FFC01A1A7F991D>72 D<EA0FC2EA1836EA200EEA600612C013 -02A3EAE0001270127EEA3FE0EA1FF8EA03FCEA007E130E130713031280A3EAC0021306EA -E004EAD818EA87E0101A7E9915>83 D<EA1FC0EA38707FEA101C1200A2EA03FCEA1E1C12 -38127012E01480A2133CEA705F381F8F0011107F8F13>97 D<EA07F8EA1C1C1238EA7008 -13005AA612701304EA3808EA1C18EA07E00E107F8F11>99 D<133F1307A9EA03E7EA0C17 -EA180F487E127012E0A6126012706C5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30 -EA30181270EA600C12E0EAFFFCEAE000A41260EA7004EA3808EA1C18EA07E00E107F8F11 ->I<EA0FCF3818718038303000EA7038A4EA30306C5AEA2FC00060C7FCA21270EA3FF013 -FC6C7EEA600FEAC003A4EA6006EA381CEA07E011187F8F13>103 -D<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I<1218123CA212 -181200A612FC121CAE12FF081A80990A>I<EAFC7CEA1D87381E0380A2121CAB38FF9FF0 -1410808F15>110 D<EA07E0EA1C38EA300CEA700EEA6006EAE007A6EA6006EA700EEA38 -1CEA1C38EA07E010107F8F13>I<EAFCFCEA1D07381E0380381C01C0A2EB00E0A6EB01C0 -1480381E0300EA1D06EA1CF890C7FCA6B47E1317808F15>I<EAFC78EA1D9CEA1E1C1308 -EA1C00ABEAFF800E10808F0F>114 D<EA1F20EA60E0EA402012C0A2EAF000127FEA3FC0 -EA1FE0EA00F0EA8070133012C01320EAF040EA8F800C107F8F0F>I<1208A41218A21238 -EAFFC0EA3800A81320A41218EA1C40EA07800B177F960F>I<38FF0F80383C0700EA1C06 -1304A26C5AA26C5AA3EA03A0A2EA01C0A36C5A11107F8F14>118 -D<38FE3F80383C1E00EA1C086C5AEA0F306C5A6C5A12017F1203EA0270487E1208EA181C -EA381E38FC3FC012107F8F14>120 D<38FF0F80383C0700EA1C061304A26C5AA26C5AA3 -EA03A0A2EA01C0A36C5AA248C7FCA212E112E212E4127811177F8F14>I -E /Ff 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012 -F0AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E /Fg 27 -123 df<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2ECFF80 -B6FCA2380FC01FB2397FF8FFF0A21C237FA220>12 D<90380FFF80137F3801FC1F3803F0 -3FEA07E0EA0FC0141FA7B6FCA2380FC01FB2397FF8FFF0A21C237FA220>I<EA07FE381F -FF80383F07E06D7E130180121E1200A2133FEA03FDEA1F81EA3E01127C12F8A4EA7C02EA -7E0C391FF87F803807E03F19167E951C>97 D<B47EA2121FABEB87F0EBBFFCEBF03EEBC0 -1F9038800F8015C0140715E0A715C0A2140F15809038C01F00381E707E381C3FFC38180F -E01B237EA220>I<EBFF80000713E0380F83F0EA1F03123E127E387C01E090C7FC12FCA6 -127C127EA2003E13186C1330380FC0603807FFC0C6130015167E9519>I<49B4FCA2EB00 -3FAB13FE3807FFBF380FC1FF48C67E003E7F127E127CA212FCA7127C127E123E6C5B380F -81FF3907FF3FE0EA01FC1B237EA220>I<13FE3807FF80380F83C0381E01E0383E00F012 -7E007C13F8147812FCB512F8A200FCC7FCA3127CA26C1318A26C1330380F80E03803FFC0 -C6130015167E951A>I<EB1F80EBFFE03801F1F0EA03E31207EA0FC3EBC1E0EBC000A6EA -FFFEA2EA0FC0B2EA7FFCA214237EA212>I<9038FE0F803903FF9FC0380F83E3381F01F3 -391E00F000003E7FA5001E5BEA1F01380F83E0380BFF80D808FEC7FC0018C8FCA2121C38 -1FFFE014FC6C13FF7E001F1480397C001FC00078130F00F81307A3007CEB0F806CEB1F00 -381F807E6CB45A000113E01A217F951D>I<B47EA2121FABEB83F0EB8FFCEB987EEBA03E -EBC03FA21380AE39FFF1FFE0A21B237DA220>I<121E123FEA7F80A4EA3F00121EC7FCA6 -EAFF80A2121FB2EAFFF0A20C247EA30F>I<B47EA2121FABECFF80A2EC3C00143014E0EB -81C00183C7FC1386139E13BE13FFEBDF80EB8FC01307806D7E6D7E130080147E39FFE1FF -C0A21A237EA21E>107 D<EAFF80A2121FB3ADEAFFF0A20C237EA20F>I<3AFF03F803F890 -390FFE0FFE3A1F183F183F9039201F201F014001C01380A201801380AE3BFFF0FFF0FFF0 -A22C167D9531>I<38FF03F0EB0FFC381F187EEB203EEB403FA21380AE39FFF1FFE0A21B -167D9520>I<13FF000713E0380F81F0381F00F8003E137C48133EA300FC133FA7007C13 -3E007E137E003E137C6C13F8380F81F03807FFE0C6130018167E951D>I<38FF87F0EBBF -FC381FF07EEBC01F9038800F8015C0A2EC07E0A715C0140FA2EC1F8001C01300EBF07EEB -BFFCEB8FE00180C7FCA8EAFFF0A21B207E9520>I<EBFE033807FF07380FC1CF381F00DF -48137F007E7FA2127C12FCA7127EA2003E5B6C5BEA0FC13807FF3FEA00FC1300A8903801 -FFE0A21B207E951E>I<38FF0F80EB1FE0381F33F013631343A2EBC1E0EB8000ADEAFFF8 -A214167E9518>I<3807F980EA1FFFEA3807EA7003EAF001A26CC7FCB4FC13F8EA7FFE6C -7E6C1380120738003FC0EAC007130312E0A200F0138038FC0F00EAEFFEEAC3F812167E95 -17>I<487EA41203A21207A2120F123FB5FCA2EA1F80ABEB8180A5380F830013C3EA07FE -EA01F811207F9F16>I<38FF81FFA2381F803FAF5C5C380FC1BF3907FF3FE0EA01FC1B16 -7D9520>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C5A -A26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA21B167F951E>I<3AFFF3FF83FC -A23A1F807C00E0D80FC014C08001E013010007017F1380A2D803F0EB0300ECCF8301F813 -87D801F913C61487D800FD13ECEBFF0315FC017F5BEB7E01013E5BEB3C00A20118136026 -167F9529>I<39FFF07FC0A2390FC01C006C6C5A6D5A00035B6C6C5A3800FD80137F91C7 -FC7F6D7E497EEB37E0EB67F013C33801C1F8380380FC48487E000E137F39FF81FFE0A21B -167F951E>I<39FFF01FE0A2391FC00700000F1306EBE00E0007130C13F000035BA26C6C -5AA26C6C5AA2EBFEE0EB7EC0137F6D5AA26DC7FCA2130EA2130CA25B1278EAFC3813305B -EA69C0EA7F80001FC8FC1B207F951E>I<387FFFF0A2387C07E038700FC0EA601F00E013 -8038C03F005B137EC65A1201485AEBF030EA07E0120FEBC070EA1F80003F1360EB00E0EA -7E03B5FCA214167E9519>I E /Fh 24 119 df<13E0A538F0E1E0EAFCE7387EEFC0381F -FF00EA07FCEA01F0EA07FCEA1FFF387EEFC038FCE7E0EAF0E13800E000A513157D991A> -42 D<1338137CA2136C13EEA313C6A2EA01C7A438038380A4380701C0A213FFA24813E0 -EA0E00A4481370387F01FC38FF83FE387F01FC171E7F9D1A>65 D<B512F8A3381C0038A5 -1400A2130EA3EA1FFEA3EA1C0EA390C7FCA3141CA5B512FCA3161E7E9D1A>69 -D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7FCA8EA7FE012 -FF127F161E7F9D1A>I<38FF83FEA3381C0070AA381FFFF0A3381C0070AB38FF83FEA317 -1E7F9D1A>72 D<B51280A33801C000B3A6B51280A3111E7C9D1A>I<38FE03FE12FFA238 -1D8070A213C0121CA213E0A213601370A213301338A21318131CA2130C130EA21306A213 -071303A238FF81F0A21380171E7F9D1A>78 D<EA0FFE383FFF804813C0EA7C07EA700100 -F013E0EAE000B1EAF001A2007013C0EA7C07EA7FFF6C1380380FFE00131E7D9D1A>I<EA -FFFC13FF1480381C07C0EB01E0EB00F01470A414F0EB01E0EB07C0381FFF801400148038 -1C07C01301EB00E0A514E214E7A338FF807EA21438181E7F9D1A>82 -D<3803F1C0EA0FFDEA3FFFEA7C0FEA700312E01301A390C7FC12701278123FEA1FF0EA07 -FE3800FF80EB0FC0EB01E013001470A2126012E0A214E0EAF00138FC03C0B5128000EF13 -00EAE3FC141E7D9D1A>I<387FFFFEB5FCA238E0380EA500001300B33803FF80A3171E7F -9D1A>I<38FF01FEA3381C00706C13E0A2380701C0A213830003138013C700011300A2EA -00EEA2137CA21338AA48B4FCA3171E7F9D1A>89 D<387FFFC0B512E0A26C13C013047D7E -1A>95 D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803 -127012E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 -D<EBFF80000313C0000F13E0EA1F01383C00C04813001270A25AA51270A2007813707E38 -1F01F0380FFFE0000313C03800FE0014157D941A>99 D<EB1FC0A31301A6EA01F1EA07FD -EA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2EA3807EA3E0F381FFFFCEA07FDEA -01F1161E7E9D1A>I<12FEA3120EA6133EEBFF80000F13C013C1EB80E01300120EAC38FF -E3FE13E713E3171E7F9D1A>104 D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF -80B512C06C1380121F7C9E1A>I<EAFE3EEBFF80B512C0EA0FC1EB80E01300120EAC38FF -E3FE13E713E317157F941A>110 D<EA01F0EA07FCEA1FFF383E0F80EA3C07387803C0EA -700138E000E0A6EAF001007013C0EA7803383C0780EA3E0F381FFF00EA07FCEA01F01315 -7D941A>I<387F81F838FF8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFFB5FC -7E17157F941A>114 D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E013FF -6C1380EB3F00141C7F9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7EEA00 -FC17157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A3380701C0A338038380A338 -01C700A3EA00EEA3137CA2133817157F941A>I E /Fi 41 123 df<EB07FCEB3FFF9038 -FE0780D803F013C03807E00FA2EA0FC0A3EC030091C7FCA3EC7FE0B6FCA2380FC007B3A2 -39FFFC7FFEA21F267FA522>12 D<123C127E12FFA4127E123C08087C8711>46 -D<131C133C13FC12FFA21200B3AA387FFFFCA216237CA21F>49 D<48B4FC000713C0381E -07F0383803F8386001FC387C00FE12FE14FF147FA2127C003813FFC7FC14FEA2EB01FC14 -F8EB03F0EB07E01480EB0F00131E5B1370EBE003EA01C038038007380700061206380FFF -FE5A5A4813FCB5FCA218237DA21F>I<48B4FC000713E0381E03F0383801F8003C13FC38 -7E00FEA3123EEA1C01000013FCA2EB03F8EB07F0EB0FC03801FF00A2380007E0EB01F014 -F8EB00FC14FE14FFA21210127C12FEA214FEA2387C01FC007013F8383E07F0380FFFC000 -01130018237DA21F>I<14381478A214F81301130313071306130C131C13381330136013 -E0EA01C01380EA03005A120E5A12185A12705AB612C0A2390001F800A790387FFFC0A21A -237EA21F>I<0018130C001F137CEBFFF814F014E014C01480EBFC000018C7FCA513FF00 -1B13E0381F03F0381C00F8000813FCC7127EA3147FA2127812FCA3147E5A006013FC1270 -383801F8381E07E03807FFC03801FE0018237DA21F>I<EB1FC0EB7FF03801F0383803E0 -0C3807803E000F137EEA1F005AA2007E133C1400A338FE3FC0EB7FF0EB80F800FF13FCEB -007C147E5A147FA4127EA4003E137E123F6C137C380F80F83807C1F03803FFC038007F00 -18237DA21F>I<1230123C003FB512C0A215804814005C5C38600018A200E05B485B5CC6 -485AA249C7FC1306130EA25BA2133CA25BA213F8A41201A66C5A13601A257DA41F>I<14 -1CA2143EA3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F1403 -011C7FEB1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C7 -120FA2486E7ED8FFF090B51280A229257EA42E>65 D<B612E015FC3903F800FFED1FC0ED -07E06F7E6F7E82150082A2167FA31780AA1700A316FEA24B5A5E4B5A4B5AED1FC0EDFF80 -B648C7FC15E029257EA42F>68 D<B7FCA23903F8007FED0F8015071503A21501A3ED00C0 -1406A21600A2140E141EEBFFFEA2EBF81E140E1406A21660A291C7FC16C0A415011503A2 -ED0F80153FB7FCA223257EA428>I<B612FEA23803F800151F8181A281A3ED01801403A2 -92C7FCA25C5C90B5FCA2EBF80F8080A491C8FCAAB512F0A221257EA427>I<B500E0B512 -E0A23B03F80003F800AF90B6FCA29038F80003B0B500E0B512E0A22B257EA430>72 -D<B512E0A23803F800B3AFB512E0A213257EA417>I<B512F0A2D803F8C7FCB3A31503A3 -1506A3150EA2151E153E157CEC03FCB6FCA220257EA425>76 D<D8FFF8EDFFF86D5C0003 -EEFE00017EEC037EA36D1406A26D6C130CA26D6C1318A26D6C1330A36D6C1360A26D6C13 -C0A2903900FC0180A291387E0300A3EC3F06A2EC1F8CA2EC0FD8A2EC07F0A36E5AEA0780 -3CFFFC01C01FFFF8A235257EA43A>I<01FF1380000713E3380F80F7381E001F48130F48 -1307140312F81401A27E91C7FCB4FCEA7FE013FE383FFFE014F86C13FE00077F6C1480C6 -7E010313C0EB003FEC0FE01407A200C01303A315C07E6C13076C14806CEB0F0038FFC03E -38E3FFF838803FE01B257DA422>83 D<B53B81FFFE01FFF0A23D07F0001FC0000F007013 -066C6C010F5CA26F7E6C6C5EA26D496C1338000017304B7E017F01195CA291388030FE01 -3F5E829139C0607F01011F5E03E0138190280FE0C03F83C7FCA29139F1801FC3010715C6 -17E69139FB000FEE010315EC02FF14FC6D486D5AA24A130301005DA24A130102785CA202 -306D5A3C257FA43F>87 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<EAFFC0A2120FB3B0 -EAFFFCA20E267EA511>108 D<26FF80FE137F903A83FF81FFC03B0F8E0FC707E0019813 -CC903A9007E803F001A013F0A201C013E0AF3BFFFC7FFE3FFFA230187E9733>I<38FF80 -FE903883FF80390F8E0FC0139890389007E013A0A213C0AF39FFFC7FFEA21F187E9722> -I<EB7F803803FFF03807C0F8381F807E48487EA2007EEB1F80A200FE14C0A8007E1480A2 -6CEB3F00A2381F807E6C6C5A3803FFF038007F801A187E971F>I<38FFC1FCEBCFFF390F -FC1FC09038F007E001C013F0140315F8140115FCA8EC03F8A215F0EBE0079038F00FE090 -38DC1F809038CFFF00EBC3F801C0C7FCA9EAFFFCA21E237F9722>I<38FF83E0EB8FF838 -0F8C7CEB90FC13B013A01478EBE0005BAEEAFFFEA216187F9719>114 -D<3807F8C0EA1FFFEA3C07EA7001EAF000A300FC1300B47EEA7FFC7F383FFF80000F13C0 -120338001FE01303EAC001A212E014C0EAF00338FC078038EFFF00EAC3FC13187E9718> -I<13C0A41201A312031207120F121FB512C0A2380FC000AC1460A63807E0C013E13801FF -8038007E0013237FA218>I<39FFC07FE0A2000F1307B0140FA200071317EBE0673903FF -C7FE38007F071F187E9722>I<39FFF80FF8A2390FC001C015803907E00300A26D5A0003 -1306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA21D -187F9720>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C6C5A00001360EB7EC0 -6D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F3907003F8048131F39FF -C07FF8A21D187F9720>120 D<39FFF80FF8A2390FC001C015803907E00300A26D5A0003 -1306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA213 -06A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720>I<387FFFF8A2 -387C03F0EA700738600FE000E013C0EB1F80EAC03F1400137EEA00FE5B485A0003130C13 -F0EA07E0120FEBC01C381F8018003F1338387F0078387E01F8B5FCA216187E971B>I -E /Fj 31 122 df<903803F07C90381E0DC69038380F0FEB701E01E0130EEC0C003801C0 -1CA548485A007FB512C03903803800A448485AA6000E5BA648485A001E7F38FF8FFC2020 -7E9F1B>11 D<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF038038070 -A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>I<903803F03F90 -391E09E0809039380F80C09039701F01E0EBE03E021E13C02601C01CC7FCA548485A007F -B612803903803803A43A0700700700A6000EEBE00EA64848485A001EEBE01E3AFF8FF8FF -C023207E9F26>14 D<13201360A4383061C0383C4380380E4E00EA0778EA01E0A2EA07B8 -EA1C9CEA708FEAE083EA0180A490C7FC12147AA117>42 D<EAFFF0A20C027E8A0F>45 -D<13181338EA01F8EA0E701200A513E0A6EA01C0A6EA0380A6EA07001380EAFFFC0E1E7B -9D17>49 D<EB3F80EBC1E038010070000213785AA2000F137C1380A2EB00781206C712F8 -14F0EB01E014C0EB0380EB0700130E5B5B13605B485A380300201206000813405A383FFF -C0481380B5FC161E7E9D17>I<13FFEA01FE1380A5EA0300A61206A65AA65AA65AA65AA6 -B4FCA2102D7EA10D>91 D<13FFEA01FEEA0006A5130CA61318A61330A61360A613C0A6EA -0180A6EAFF00A2102D82A10D>93 D<EA07F8EA0C0CEA1E061307121C1200A313FFEA07C7 -EA1E07EA3C0E127800F01310A3131EEB2E2038784F40381F878014147D9317>97 -D<13FEEA0383380E0780121C0038130090C7FC12785AA45AA37E5BEA70026C5AEA1C18EA -07E011147D9314>99 D<1438EB01F8EB00781438A21470A614E013FCEA0382EA0601121C -EA3C00383801C0127812F0A438E00380A412F0EA700738380F00381C37803807C7E01520 -7D9F19>I<13F8EA070EEA0E07121C383803801278127012F0A2B5FC00F0C7FC5AA46C5A -EA7002EA3004EA1C18EA07E011147D9314>I<EB07C0EB1C60EB30F01360EBE0E0EBC000 -1201A5485AEA3FFCEA0380A448C7FCA6120EA65A121EEAFFC014207F9F0E>I<140EEB3E -11EBE1A33801C1C2380381E0EA07801301120FA3380703C01480EB8700EA04FC48C7FCA2 -1218121CEA0FFF14C014E0381800F04813305A5AA3006013606C13C0381C0700EA07FC18 -1F809417>I<13E0120712011200A2485AA6485AEB8F80EB90E013A0EBC0601380000713 -E01300A5380E01C0A6381C0380001E13C038FF8FF014207E9F19>I<EA01C0EA03E0A213 -C0EA0180C7FCA6EA0380121F12071203A2EA0700A6120EA65A121EEAFF800B1F7F9E0C> -I<13E0120712011200A2EA01C0A6EA0380A6EA0700A6120EA65A121EEAFF800B207F9F0C ->108 D<390387C07C391F9861863907A072073903C03403EB80380007EB7807EB0070A5 -000EEBE00EA64848485A001EEBE01E3AFFCFFCFFC022147E9326>I<38038F80381F90E0 -EA07A03803C0601380000713E01300A5380E01C0A6381C0380001E13C038FF8FF014147E -9319>I<13FCEA0387380E0180381C00C04813E0A24813F012F0A438E001E0A214C01303 -00F0138038700700EA380E6C5AEA07E014147D9317>I<EBE3E03807EC383800F01C497E -140F48487E1580A53903800F00A2140E141E141C5C38074070EB61C0011FC7FC90C8FCA3 -120EA4121EEAFFC0191D809319>I<EBFC2038038260EA0702381E01E0123C003813C012 -7812F0A438E00380A212F0A21307127038380F00EA1C37EA07C7EA0007A3130EA4131EEB -FFC0131D7D9318>I<EA038E381FB380EA07C71203EB8300EA078090C7FCA5120EA65A12 -1EEAFFC011147E9312>I<EA01F9EA0607EA080312181301EA3802EA3C00121F13F0EA07 -FCEA01FEEA001FEA40071303A212601306EAF004EAC818EA87E010147F9312>I<1380EA -0100A35A5A5A121EEAFFF8EA0E00A45AA65A1310A41320A2EA1840EA0F800D1C7C9B12> -I<381C0380EAFC1FEA3C07EA1C03A238380700A6EA700EA4131EA25BEA305E381F9F8011 -147B9319>I<38FF83F8381E00E0001C13C01480121E380E01005B13025B12075BA25BEA -039013A013E05B5B120190C7FC15147C9318>I<39FF9FE1FC393C078070391C03006014 -8015401580EA0E0790380D81001309EB19C21311380F21C4EA0720EB40C814E8EB80F0A2 -6C485A1460000213401E147C9321>I<381FF0FF3803C0780001137014403800E0C0EBE1 -80EB73001376133CA2131C132E134E1387EA0107380203801204380C01C0383C03E038FE -07FC18147F9318>I<390FF83F803901E00E00EBC00C140813E000005B143014205C1370 -5CA20171C7FC1339133A133E133C133813181310A25BA25BEA70C0EAF08000F1C8FC12E6 -1278191D809318>I E /Fk 36 122 df<EB01C01303130F137FEA1FFFB5FC13BFEAE03F -1200B3B1007FB512F0A31C2E7AAD28>49 D<EB3FE03801FFFE0007EBFF80D80F8013C039 -1E003FE00038EB1FF0007CEB0FF8007EEB07FCB4FC018013FEA21403A2EA7F00003E1307 -C7FC15FCA2EC0FF8A215F0EC1FE015C0EC3F80EC7F00147E14F8495A495A495A49C7FC01 -1E130E5B133849131E49131C485A48C7123C48B512FC5A5A5A4814F8B6FCA31F2E7CAD28 ->I<1578A215FCA34A7EA24A7EA24A7FA34A7FEC0E7F021E7FEC1C3FA202387F151F0278 -7FEC700FA202E07F1507010180ECC003A249486C7EA201078191C7FC498191B6FCA24981 -011CC7123F013C810138141FA24981160F01F081491407A2484881486C1403B549B512FC -A336317DB03D>65 D<B712C016FC16FFD801FEC77FEE7FE0707E161F707EA2831607A416 -0FA25FA24C5A4C5A4C5A4B485ADB1FFEC7FC90B65AEEFF8049C7EA3FE0EE0FF0EE07FCA2 -707E83821880A718005E5F16074C5A4C5AEEFFF0B812C094C7FC16F831317DB039>I<91 -3A03FF800180023FEBF00349B5EAFC0701079038003F0FD91FF8EB079FD93FC0EB01FFD9 -FF807F4848C8127F4848153F0007161F49150F485A001F1607A2485A1703127FA24992C7 -FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E6D150E0003161E6C6C151C -6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FFFEC7FCD9003F13F8020313 -8031317CB03A>I<B812E0A3C6903880007FEE0FF016031601A21600A21770A31738A215 -07A21700A35D5D5D91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>70 -D<DA03FF1303027FEBF00749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03FF49 -487F4848C87E485A0007824848815B001F82A2484881A2127FA24992C7FC12FFAA0307B5 -12F8127F7FDB00011300123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8497E -D907FFEB3E3F01019038FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B6D8807FB512 -C0A3C60180C7387FC000B391B7FCA30280C7127FB3A3B6D8807FB512C0A33A317EB03F> -I<B61280A3C6EB8000B3B3A7B61280A319317EB01E>I<B56C49B512C08080C66D903900 -03E0006E6E5AEBEFFC13E780EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E -16806E13C0ED7FE0ED3FF0151F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1 -EE1FF9EE0FFD160717FF828282177F173FA2171F170F486C1507B500E014031701A23A31 -7EB03F>78 D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FF -A717FEA2EE07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB0 -37>80 D<007FB8FCA39039C00FF801D87E00EC003F007C82007882A200708200F01780A3 -481603A5C792C7FCB3AA017FB6FCA331307DAF38>84 D<B6D88003B51280A3C60180C738 -07C000715AB3AE137F4DC7FC80013F150EA26D6C5C6D6C5C6D6C5C6D6C495A903A00FF80 -1FC0023FB55A020F49C8FC020013E039317EB03E>I<B500FC91B5FCA3000390C8EA03C0 -6C17806E14076C170080017F150EA26E141E013F151C6E143C011F153880010F5D800107 -5DA26E130101035D6E13036D5D15806D4AC7FCA26F5A027F130EEDE01E023F131CEDF03C -021F133815F8020F5BA2EDFCF002075B15FF6E5BA26E5BA26E90C8FCA3157EA2153CA238 -317EB03D>I<EBFFF0000313FF390F803F809038C00FE0486C6C7EA26E7ED80FC07FEA07 -80C7FCA414FF131FEBFFE33803FC03EA0FF0EA1FC0123FEA7F80A2EAFF00A31407A2387F -800D393FC01DFE3A1FE078FFF03907FFE07FC6EB803F24207E9F27>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 -FC9038FBE07F9039FF003F80D807FEEB1FC049EB0FE04914F0ED07F8A216FC1503A216FE -A816FC1507A216F8A2ED0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3F -C091C8FCABB512C0A3272E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30F -F0EA07F6A29038FC07E0EC03C091C7FCA25BB2B512E0A31C207E9F21>114 -D<3801FF86000713FEEA1F00003C133E48131E140E12F8A36C90C7FCB47E13FC387FFFC0 -6C13F0806C7F00077F00017FEA003F01001380143F0060131F00E0130FA27E15007E6C13 -1E6C131C38FF807838F3FFF038C07F8019207D9F20>I<131CA5133CA3137CA213FC1201 -12031207381FFFFEB5FCA2D803FCC7FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB -07F0192E7FAD1F>I<D801F8EB07E000FFEB03FFA3000FEB003F0007141FB3153FA20003 -147FA26C6CEBDFF03A00FE039FFF90387FFF1FEB0FFC28207D9F2D>I<B5EB1FFCA3D80F -F8EB03C0000715806D1307000315007F0001140E7F6C5CA2EC803C017F1338ECC078013F -1370ECE0F0011F5B14F1010F5B14F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478 -A226207E9F2B>I<B53A1FFFE03FF8A33C0FF000FE0007806D150300076EEB0700816D5D -00039138FF800EA26C6C486D5A15DF01FF153C6C9039038FE038A2D97F876D5A150702C7 -14F0D93FCF6D5AECCE03D91FFEEBF9C09138FC01FD16FF010F5D4A7EA26D486DC7FCA201 -03147E4A133EA26D48131C35207E9F3A>I<3A7FFF807FFCA33A03FC000F006C6C131E6C -6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D90C7FC6D5A13016D7E -81815B903803DFE09038078FF08190380F07FC90381E03FEEB3C01496C7E4914804848EB -7FC00003EC3FE026FFFC01B5FCA328207F9F2B>I<B5EB1FFCA3D80FF8EB03C000071580 -6D1307000315007F0001140E7F6C5CA2EC803C017F1338ECC078013F1370ECE0F0011F5B -14F1010F5B14F9903807FB80A214FF6D90C7FCA26D5AA26D5AA21478A21470A214F05C13 -01007C5BEAFE035C49C8FC5BEAFC1EEA787CEA3FF0EA0FC0262E7E9F2B>I -E /Fl 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C0 -00061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C -1530A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090 -C7FC282B7EA02D>13 D E /Fm 46 122 df<123C127FEAFF80A213C0A3127F123E1200A2 -EA0180A3EA0300A21206120E5A5A12100A157B8813>44 D<121C127FA2EAFF80A3EA7F00 -A2121C09097B8813>46 D<130E131E137EEA07FE12FFA212F81200B3ABB512FEA317277B -A622>49 D<EBFF80000713F04813FC381E03FE393800FF80007C133F00FE14C06C131F15 -E0140FA2127E003C131FC7FC15C0A2EC3F801500147E5C5C495A495AEB078049C7FC131E -4913E013705B3901C001C0EA0380EA0600000FB5FC5A5A5AB61280A31B277DA622>I<EB -7F803803FFF04813FC380F81FE381F007FEA3F80EC3F80A3121F1300C7EA7F00A2147E5C -495AEB07F0EBFFC0A2EB01F8EB007E801580EC1FC0A215E0A2123C127EB4FCA215C0143F -481480007CEB7F00383F01FE6CB45A000713F0C613801B277DA622>I<140FA25C5C5C5C -5BA2EB03BFEB073F130E131C133C1338137013E0EA01C0EA038012071300120E5A5A5A12 -F0B612F8A3C7EA7F00A890381FFFF8A31D277EA622>I<00181303381F801FEBFFFE5C5C -5C14C091C7FC001CC8FCA7EB7FC0381DFFF8381F80FC381E003F1208C7EA1F8015C0A215 -E0A21218127C12FEA315C05A0078EB3F80A26CEB7F00381F01FE6CB45A000313F0C61380 -1B277DA622>I<1238123E003FB512F0A34814E015C0158015003870000EA25C485B5C5C -C6485AA2495A130791C7FC5B5B131E133EA2137E137CA213FCA41201A76C5A13701C297C -A822>55 D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA20103 -7F1480A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F08049 -1303000181491301A2000381D8FFFE013F13FCA32E297EA833>65 -D<B612F815FF16C03A03F8001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0 -150FED1FC0EDFF8090B5EAFE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA6 -16FE1501ED03FC1507ED1FF8B712E016C0EDFE0028297DA830>I<91387FE003903907FF -FC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848147F4848143F4848141F48 -5A160F485A1607127FA290C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C -6C6C14786CB4EB01F090397FF007C0011FB512800107EBFE009038007FF028297CA831> -I<B712E0A33903FC001FED07F01501A215001670A3913801C0781638A302031300A2140F -90B5FCA3EBFC0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB7 -12F0A327297EA82C>69 D<B712C0A33903FC003FED0FE015031501A21500A316F0913801 -C070A316001403A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A ->I<91387FE003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F4848 -80484880484880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7E -A26C7E6C7E6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297C -A835>I<B5D8F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA3 -30297EA835>I<B512F0A33803FC00B3B1B512F0A314297EA819>I<D8FFFE92383FFF80A2 -6D5D0003EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D9 -83F8130EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A29138 -0FE380A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840> -77 D<D8FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF -01801380147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1 -ED1FF1150F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A23029 -7EA835>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FEA716FC150316 -F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>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 /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 -38FE078038F803C0EAF001EB00E05A7E1270A3383801C0EA3C03381E0780380FFF006C5A -EA01F8131C7E9B18>54 D<1230127812FCA2127812301200A81230127812FCA212781230 -0614779318>58 D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E12 -1C123C127812F01260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07 -F0485AEA3F8048C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E013 -03EB00C013187E9918>I<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>I<12 -6012F87E127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE -00485AEA07F0485AEA3F8048C7FC12FC5A126013187E9918>I<EA0FF0EA3FFC48B4FCEA -700F38F00380A2EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A -111C7D9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80A3EA0E -03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>65 D<EA7FF8EAFFFE6C7E381C -0F80EB03C0A2EB01E01300A214F01470A814F014E0A2130114C01303EB0F80387FFF0048 -5AEA7FF8141C7F9B18>68 D<B512F0A3381C0070A41400A2130EA3EA1FFEA3EA1C0EA390 -C7FCA21438A5B512F8A3151C7F9B18>I<B512F8A3381C0038A41400A21307A3EA1FFFA3 -EA1C07A390C7FCA7EAFFC0A3151C7F9B18>I<387F07F038FF8FF8387F07F0381C01C0A9 -EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F0151C7F9B18>72 -D<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<EAFFC0A300 -1CC7FCB114E0A5B5FCA3131C7E9B18>76 D<387E07F038FF0FF8387F07F0381D81C0A313 -C1121CA213E1A313611371A213311339A31319A2131D130DA3EA7F07EAFF87EA7F03151C -7F9B18>78 D<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000B0EAF001007013 -C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF8014C0EA1C03EB01E013 -001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47EA3141C7F9B18>I<EA7F -F8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C0F7FEB0380 -A5149CA3387F01F8EAFF81387F00F0161C7F9B18>82 D<3803F1C0EA1FFF5AEA7C0FEA70 -03EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00E0A21260 -12E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5FCA238E0 -7038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0EA0F0138 -0783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03381C01C0EA1E -03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00F8A21370A9EA01FC487E6C5A15 -1C7F9B18>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 /Fo 74 123 df<90381F83E09038F06E303901C07878380380F8 -903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11 -D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F -19>I<EB3FE013E0EA01C1EA0381EA0700A8B5FCEA0700B2383FE7FC1620809F19>I<9038 -1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A -3FE3FE3FE02320809F26>I<EA7038EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008 -A2EA2010EA40200F0E7F9F17>34 D<127012F812FCA212741204A31208A21210A2122012 -40060E7C9F0D>39 D<13401380EA01005A12061204120C5AA212381230A212701260A412 -E0AC1260A412701230A212381218A27E120412067E7EEA008013400A2E7BA112>I<7E12 -407E12307E1208120C7EA212077EA213801201A413C0AC1380A412031300A25A1206A25A -120812185A12205A5A0A2E7EA112>I<127012F012F8A212781208A31210A31220A21240 -050E7C840D>44 D<EAFFF0A20C02808A0F>I<127012F8A3127005057C840D>I<EA03F0EA -0E1C487EEA1806EA380738700380A400F013C0AD00701380A3EA780700381300EA1806EA -1C0E6C5AEA03F0121F7E9D17>48 D<13801203120F12F31203B3A6EA07C0EAFFFE0F1E7C -9D17>I<EA03F0EA0C1CEA100E487E00401380128000F013C0EAF803A3EA200712001480 -A2EB0F00130E5B5B5B13605B485A48C7FC000613405A5A00101380EA3FFF5AB5FC121E7E -9D17>I<EA03F0EA0C1CEA100EEA200F007813801307A2EA380F12001400A2131E131C13 -70EA07F0EA003C130E130FEB0780A214C0122012F8A300F013801240EB0F00EA200EEA18 -3CEA07F0121F7E9D17>I<1306A2130EA2131E132EA2134E138EA2EA010E1202A2120412 -08A212101220A2124012C0B512F038000E00A7EBFFE0141E7F9D17>I<EA1803EA1FFE5B -5B13E00010C7FCA6EA11F0EA161CEA180EEA10071480EA0003A214C0A3127012F0A200E0 -13801240EB0700EA20066C5AEA0838EA07E0121F7E9D17>I<137CEA0182EA0701380E03 -80EA0C0712183838030090C7FC12781270A2EAF1F0EAF21CEAF406EAF807EB0380A200F0 -13C0A51270A214801238EB07001218EA0C0E6C5AEA01F0121F7E9D17>I<1240387FFFE0 -14C0A23840008038800100A21302485AA25B5BA25BA21360A213E05B1201A41203A76C5A -131F7E9D17>I<EA03F0EA0C0CEA1006EA3003382001801260A3127038780300123EEA3F -06EA1FC8EA0FF0EA03F8487EEA0C7EEA103F38300F80EA6007EB01C012C01300A31480EA -600100201300EA1002EA0C0CEA03F0121F7E9D17>I<EA03F0EA0E18487E487E13071270 -EB038012F0A214C0A5EA7007A21238EA180BEA0E13EA03E338000380A3EB07001230EA78 -06130EEA700CEA2018EA1070EA0FC0121F7E9D17>I<127012F8A312701200AA127012F8 -A3127005147C930D>I<127012F8A312701200AA127012F012F8A212781208A31210A312 -20A21240051D7C930D>I<5B497EA3497EA3EB09E0A3EB10F0A3EB2078A3497EA2EBC03E -EB801EA248B5FCEB000FA20002EB0780A348EB03C0A2120C001E14E039FF801FFE1F207F -9F22>65 D<B512E0380F0078141EA2801580A515005C141E147CEBFFF0EB007C141FEC0F -80EC07C0140315E0A515C014071580EC0F00143EB512F01B1F7E9E20>I<90380FE01090 -38381C309038E002703803C00139078000F048C71270121E15305A1510127C127800F814 -00A91278007C1410123CA26C1420A27E6C6C13406C6C13803900E00300EB380CEB0FF01C -217E9F21>I<B512F83807801EEC0780EC03C0EC01E0EC00F015701578A2153CA3153EA8 -153CA2157C1578A215F0EC01E0EC03C0EC0780EC1E00B512F81F1F7F9E23>I<B6128038 -0F000F14031401140015C01540A314401500A214C0130113FF130113001440A3EC0020A3 -1540A315C01401EC0380140FB6FC1B1F7E9E1F>I<B61280380780071401A2140015C015 -40A4EC2000A3146014E013FF138014601420A391C7FCA87FEAFFFE1A1F7F9E1E>I<9038 -0FE0109038381C309038E002703803C00139078000F048C71270121E15305A1510127C12 -7800F81400A7EC3FFEEC01F000781300127C123CA27EA27E6C7E3903C001703900E00230 -9038380C1090380FF0001F217E9F24>I<39FFF07FF8390F000780AD90B5FCEB0007AF39 -FFF07FF81D1F7E9E22>I<EAFFF0EA0F00B3ABEAFFF00C1F7E9E10>I<EAFFF8EA0F8090C7 -FCB21402A414061404A2140C141C147CB512FC171F7E9E1C>76 D<B46CEB07FE000715C0 -A2D805C0130BA2D804E01313A301701323A26D1343A36D1383A290380E0103A3EB0702A3 -EB0384A2EB01C8A3EB00F0A21460121FD8FFE0EB7FFE271F7F9E2A>I<B4EB0FF8390F80 -03E0EC0080EA0BC0EA09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F0 -1478A2143C141EA2140F1407A214031401123E38FF80001D1F7E9E22>I<EB1FE0EB7038 -3801C00E48487E39070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8 -147CA900781478007C14F8A2003C14F0003E1301001E14E06CEB03C06C14803903800700 -3801E01E38007038EB1FE01E217E9F23>I<B512E0380F007C141E80EC0780A215C0A415 -80A2EC0F00141E147CEBFFE090C8FCAEEAFFF01A1F7E9E1F>I<EB1FE0EB70383801C00E -48487E39070003804814C0001EEB01E0003E14F0003C1300007C14F8A20078147800F814 -7CA900781478007C14F8A2003C14F0383E0781391E0841E0390F1023C000071480390390 -17003801D01E3900783804EB1FF8EB001CEC0C0CEC0E1CEC0FF8A2140715F0EC01E01E29 -7E9F23>I<B57E380F00F0143C8080A21580A41500A2141E5C14F0EBFF80EB01C0EB0070 -A280143CA3143EA31504143F141FEC0F0839FFF00788C7EA01F01E207E9E21>I<3803F0 -40380C0CC0EA1803EA3001EA6000A212E01440A36C13007E127CEA7F80EA3FF86CB4FC00 -071380C613C0EB1FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300 -EA81FC14217E9F19>I<007FB512E038780F010060EB006000401420A200C01430008014 -10A400001400B3497E3803FFFC1C1F7E9E21>I<39FFF00FF8390F0003E0EC0080B3A46C -EB01001380120314026C6C5A6C6C5AEB3830EB0FC01D207E9E22>I<39FFF003FE391F80 -00F86CC7126015206C6C1340A36C6C1380A2EBE00100011400A23800F002A213F8EB7804 -A26D5AA36D5AA2131F6D5AA2EB07C0A36D5AA36DC7FC1F207F9E22>I<3BFFF07FF81FF0 -3B1F000FC007C06C903907800180170015C001805C00071502EC09E013C000035DEC19F0 -1410D801E05CA2EC2078D800F05CA2EC403C01785CA2EC801E017C1460013C144090383D -000F133F6D5CA2011E1307010E91C7FCA2010C7F010413022C207F9E2F>I<12FFA212C0 -B3B3A512FFA2082D7CA10D>91 D<EA0804EA1008EA2010A2EA4020A2EA8040A3EAB85CEA -FC7EA2EA7C3EEA381C0F0E7A9F17>I<12FFA21203B3B3A512FFA2082D80A10D>I<120812 -101220A21240A21280A312B812FCA2127C1238060E7D9F0D>96 D<EA1FE0EA3030EA7818 -131CEA300E1200A313FEEA078EEA1E0E1238127800F01310A3131E127838386720380F83 -C014147E9317>I<121C12FC121CAA137CEA1D87381E0180EB00C0001C13E01470A21478 -A6147014F014E0001E13C0381A018038198700EA107C15207E9F19>I<EA01FCEA0706EA -1C0F123813060078C7FC127012F0A61270127800381380A2381C0100EA0706EA01F81114 -7F9314>I<EB01C0130F1301AAEA01F1EA070DEA0C03EA180112381278127012F0A61270 -A21238EA1803120CEA070D3801F1F815207F9F19>I<EA03F0EA0E1C487E487EA21270EB -038012F0A2B5FC00F0C7FCA31270A26C1380A2381C0100EA0706EA01F811147F9314>I< -137CEA01C6EA030F1207EA0E061300A7EAFFF0EA0E00B2EA7FE01020809F0E>I<14E038 -03E330EA0E3CEA1C1C38380E00EA780FA5EA380E6C5AEA1E38EA33E00020C7FCA21230A2 -EA3FFE381FFF8014C0383001E038600070481330A4006013606C13C0381C03803803FC00 -141F7F9417>I<121C12FC121CAA137C1386EA1D03001E1380A2121CAE38FF8FF014207E -9F19>I<1238127CA31238C7FCA6121C12FC121CB1EAFF80091F7F9E0C>I<13E0EA01F0A3 -EA00E01300A61370EA07F012001370B3A31260EAF06013C0EA6180EA3F000C28829E0E> -I<121C12FC121CAAEB1FE0EB0780EB060013045B5B5B136013E0EA1DF0EA1E70EA1C3813 -3C131C7F130F7F148014C038FF9FF014207E9F18>I<121C12FC121CB3ABEAFF8009207F -9F0C>I<391C3E03E039FCC30C30391D039038391E01E01CA2001C13C0AE3AFF8FF8FF80 -21147E9326>I<EA1C7CEAFC86EA1D03001E1380A2121CAE38FF8FF014147E9319>I<EA01 -F8EA070E381C0380383801C0A2387000E0A200F013F0A6007013E0A2383801C0A2381C03 -8038070E00EA01F814147F9317>I<EA1C7CEAFD87381E018014C0381C00E014F0147014 -78A6147014F014E0381E01C0EB0380381D8700EA1C7C90C7FCA8B47E151D7E9319>I<38 -01F04038070CC0EA0E02EA1C03EA38011278127012F0A6127012781238EA1C03EA0C05EA -0709EA01F1EA0001A8EB0FF8151D7F9318>I<EA1CF0EAFD18EA1E3CA21318EA1C00AEEA -FFC00E147E9312>I<EA0FC8EA3038EA6018EAC008A3EAE000127CEA3FE0EA1FF0EA07F8 -EA003CEA800E130612C0A21304EAE00CEAD818EA87E00F147F9312>I<1202A31206A212 -0EA2123EEAFFF8EA0E00AB1304A5EA07081203EA01F00E1C7F9B12>I<381C0380EAFC1F -EA1C03AE1307120CEA061B3803E3F014147E9319>I<38FF83F8383E00E0001C13C06C13 -80A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A3132015147F9318>I<39 -FF9FE1FC393C078070391C030060EC8020000E1440A214C0D80704138014E0A239038861 -001471A23801D032143A143E3800E01CA2EB6018EB40081E147F9321>I<38FF87F8381E -03C0380E0180EB0300EA0702EA0384EA01C813D8EA00F01370137813F8139CEA010E1202 -EA060738040380000C13C0003C13E038FE07FC16147F9318>I<38FF83F8383E00E0001C -13C06C1380A338070100A21383EA0382A2EA01C4A213E4EA00E8A21370A31320A25BA3EA -F080A200F1C7FC1262123C151D7F9318>I<EA7FFFEA700E1260EA401C133813781370EA -00E0120113C0EA038012071301120E121EEA1C03EA3802EA7006130EEAFFFE10147F9314 ->I E /Fp 13 122 df<DB1FFC14C00203B5EAC001021FECF003027FECFC07903B01FFFC -00FE0F010701C0EB1F9F4948C7EA07FFD93FF880494814004948157F485B4A153F4890C9 -121F485A000F170F5B001F1707A2485A1803A2127FA24993C8FCA212FFAA041FB6128012 -7FA27FDC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C7F6D6C5CEB3FFCD90FFF5C -6D01C0EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF8030203ECE0009126001FFEC9FC -413D7BBB4C>71 D<B6D8F803B612E0A426007FF0C70001EBC000B3A491B8FCA402F0C712 -01B3A7B6D8F803B612E0A4433B7CBA4C>I<B612FEA426007FF0C9FCB3ADEF03C0A51707 -1880A3170FA3171FA2173F177F17FF5E04071300163FB9FCA4323B7DBA3A>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 end -TeXDict begin - -1 0 bop 0 693 a Fp(GNU)33 b(History)f(Library)p 0 743 -1950 17 v 1035 791 a Fo(Edition)16 b(2.1,)e(for)h Fn(History)f(Library) -g Fo(V)l(ersion)i(2.1.)1718 845 y(Marc)o(h)e(1996)0 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)0 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 0 2570 -1950 9 v eop -2 1 bop 0 320 a Fo(This)16 b(do)q(cumen)o(t)g(describ)q(es)h(the)f(GNU) -f(History)g(library)l(,)h(a)g(programming)e(to)q(ol)i(that)f(pro)o -(vides)h(a)f(consisten)o(t)0 382 y(user)g(in)o(terface)h(for)e -(recalling)j(lines)g(of)e(previously)h(t)o(yp)q(ed)g(input.)0 -519 y(Published)h(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f(F)l -(oundation)0 582 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)0 -644 y(Cam)o(bridge,)h(MA)g(02139)f(USA)0 781 y(P)o(ermission)f(is)g -(gran)o(ted)f(to)f(mak)o(e)h(and)h(distribute)h(v)o(erbatim)e(copies)h -(of)f(this)h(man)o(ual)g(pro)o(vided)g(the)f(cop)o(yrigh)o(t)0 -843 y(notice)k(and)f(this)h(p)q(ermission)h(notice)e(are)g(preserv)o -(ed)h(on)f(all)h(copies.)0 980 y(P)o(ermission)f(is)f(gran)o(ted)f(to)h -(cop)o(y)g(and)g(distribute)h(mo)q(di\014ed)h(v)o(ersions)e(of)f(this)i -(man)o(ual)f(under)h(the)f(conditions)0 1043 y(for)e(v)o(erbatim)g(cop) -o(ying,)h(pro)o(vided)h(that)d(the)i(en)o(tire)g(resulting)h(deriv)o -(ed)f(w)o(ork)f(is)h(distributed)h(under)f(the)g(terms)0 -1105 y(of)i(a)g(p)q(ermission)h(notice)g(iden)o(tical)h(to)e(this)g -(one.)0 1242 y(P)o(ermission)20 b(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)f(in)o(to)h -(another)f(language,)0 1304 y(under)c(the)f(ab)q(o)o(v)o(e)g -(conditions)h(for)e(mo)q(di\014ed)j(v)o(ersions,)e(except)g(that)g -(this)g(p)q(ermission)i(notice)e(ma)o(y)g(b)q(e)h(stated)0 -1366 y(in)h(a)f(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l -(oundation.)0 2661 y(Cop)o(yrigh)o(t)226 2660 y(c)214 -2661 y Fl(\015)g Fo(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -1 2 bop 0 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1157 b(1)0 183 y Fk(1)41 b(Using)14 b(History)h(In)n(teractiv)n -(ely)62 380 y Fo(This)i(c)o(hapter)e(describ)q(es)j(ho)o(w)d(to)h(use)g -(the)g(GNU)g(History)f(Library)i(in)o(teractiv)o(ely)l(,)g(from)e(a)g -(user's)h(stand-)0 442 y(p)q(oin)o(t.)23 b(It)16 b(should)h(b)q(e)f -(considered)i(a)d(user's)h(guide.)23 b(F)l(or)15 b(information)h(on)g -(using)h(the)f(GNU)g(History)f(Library)0 505 y(in)h(y)o(our)f(o)o(wn)f -(programs,)g(see)i(Chapter)e(2)h([Programming)f(with)i(GNU)f(History],) -f(page)h(5.)0 747 y Fm(1.1)33 b(In)n(teractiv)n(e)16 -b(History)g(Expansion)62 886 y Fo(The)e(History)f(library)h(pro)o -(vides)g(a)f(history)g(expansion)h(feature)f(that)g(is)g(similar)i(to)d -(the)i(history)f(expansion)0 948 y(pro)o(vided)j(b)o(y)f -Fn(csh)p Fo(.)20 b(This)15 b(section)h(describ)q(es)h(the)e(syn)o(tax)g -(used)g(to)g(manipulate)h(the)g(history)f(information.)62 -1087 y(History)h(expansions)g(in)o(tro)q(duce)g(w)o(ords)f(from)g(the)h -(history)f(list)i(in)o(to)e(the)h(input)g(stream,)f(making)g(it)h(easy) -0 1150 y(to)g(rep)q(eat)g(commands,)h(insert)g(the)f(argumen)o(ts)g(to) -g(a)g(previous)h(command)f(in)o(to)h(the)f(curren)o(t)h(input)g(line,)h -(or)0 1212 y(\014x)d(errors)g(in)h(previous)g(commands)f(quic)o(kly)l -(.)62 1351 y(History)c(expansion)i(tak)o(es)d(place)i(in)h(t)o(w)o(o)d -(parts.)18 b(The)11 b(\014rst)g(is)h(to)f(determine)h(whic)o(h)g(line)h -(from)e(the)g(previous)0 1413 y(history)h(should)h(b)q(e)f(used)h -(during)f(substitution.)20 b(The)12 b(second)g(is)h(to)e(select)h(p)q -(ortions)g(of)g(that)f(line)i(for)f(inclusion)0 1475 -y(in)o(to)f(the)h(curren)o(t)f(one.)18 b(The)12 b(line)h(selected)f -(from)f(the)g(previous)h(history)g(is)f(called)i(the)e -Fj(ev)o(en)o(t)p Fo(,)h(and)f(the)h(p)q(ortions)0 1538 -y(of)h(that)f(line)j(that)e(are)f(acted)i(up)q(on)g(are)e(called)j -Fj(w)o(ords)p Fo(.)k(V)l(arious)13 b Fj(mo)q(di\014ers)j -Fo(are)d(a)o(v)m(ailable)i(to)d(manipulate)j(the)0 1600 -y(selected)i(w)o(ords.)23 b(The)16 b(line)i(is)f(brok)o(en)f(in)o(to)g -(w)o(ords)f(in)i(the)g(same)f(fashion)g(that)g(Bash)g(do)q(es,)g(so)g -(that)g(sev)o(eral)0 1662 y(English)g(\(or)e(Unix\))h(w)o(ords)e -(surrounded)j(b)o(y)e(quotes)h(are)f(considered)i(as)e(one)h(w)o(ord.)k -(History)14 b(expansions)h(are)0 1725 y(in)o(tro)q(duced)h(b)o(y)g(the) -f(app)q(earance)h(of)e(the)i(history)f(expansion)h(c)o(haracter,)e -(whic)o(h)i(is)g(`)p Fn(!)p Fo(')e(b)o(y)h(default.)0 -1950 y Fi(1.1.1)30 b(Ev)n(en)n(t)16 b(Designators)62 -2089 y Fo(An)g(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.)0 -2243 y Fn(!)216 b Fo(Start)14 b(a)g(history)h(substitution,)g(except)h -(when)f(follo)o(w)o(ed)g(b)o(y)g(a)f(space,)h(tab,)f(the)h(end)g(of)g -(the)g(line,)240 2305 y Fn(=)g Fo(or)g Fn(\()p Fo(.)0 -2396 y Fn(!)p Fj(n)191 b Fo(Refer)16 b(to)e(command)h(line)i -Fj(n)p Fo(.)0 2488 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.)0 2579 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('.)0 2670 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(.)p eop -2 3 bop 0 -58 a Fo(2)1497 b(GNU)15 b(History)g(Library)0 -183 y Fn(!?)p Fj(string)t Fn([?])240 246 y Fo(Refer)h(to)f(the)g(most)g -(recen)o(t)g(command)g(con)o(taining)h Fj(string)p Fo(.)21 -b(The)15 b(trailing)i(`)p Fn(?)p Fo(')d(ma)o(y)h(b)q(e)h(omitted)240 -308 y(if)g(the)f Fj(string)k Fo(is)d(follo)o(w)o(ed)f(immediately)i(b)o -(y)e(a)g(newline.)0 395 y Fn(^)p Fj(string1)t Fn(^)p -Fj(string2)t Fn(^)240 457 y Fo(Quic)o(k)i(Substitution.)22 -b(Rep)q(eat)16 b(the)g(last)f(command,)h(replacing)h -Fj(string1)h Fo(with)e Fj(string2)p Fo(.)21 b(Equiv-)240 -520 y(alen)o(t)15 b(to)g Fn(!!:s/)p Fj(string1)t Fn(/)p -Fj(string2)t Fn(/)p Fo(.)0 607 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.)0 -816 y Fi(1.1.2)30 b(W)-5 b(ord)15 b(Designators)62 953 -y Fo(W)l(ord)k(designators)g(are)f(used)i(to)e(select)i(desired)g(w)o -(ords)e(from)h(the)g(ev)o(en)o(t.)31 b(A)19 b(`)p Fn(:)p -Fo(')f(separates)g(the)h(ev)o(en)o(t)0 1015 y(sp)q(eci\014cation)e -(from)d(the)h(w)o(ord)f(designator.)20 b(It)15 b(can)g(b)q(e)g(omitted) -g(if)g(the)g(w)o(ord)g(designator)f(b)q(egins)i(with)g(a)e(`)p -Fn(^)p Fo(',)0 1077 y(`)p Fn($)p Fo(',)i(`)p Fn(*)p Fo(',)g(`)p -Fn(-)p Fo(',)g(or)g(`)p Fn(\045)p Fo('.)24 b(W)l(ords)17 -b(are)f(n)o(um)o(b)q(ered)i(from)e(the)h(b)q(eginning)i(of)d(the)h -(line,)i(with)e(the)g(\014rst)g(w)o(ord)f(b)q(eing)0 -1139 y(denoted)g(b)o(y)f(0)g(\(zero\).)k(W)l(ords)c(are)g(inserted)h -(in)o(to)f(the)g(curren)o(t)g(line)i(separated)e(b)o(y)g(single)i -(spaces.)0 1289 y Fn(0)e(\(zero\))57 b Fo(The)15 b Fn(0)p -Fo(th)g(w)o(ord.)20 b(F)l(or)14 b(man)o(y)h(applications,)h(this)g(is)g -(the)f(command)g(w)o(ord.)0 1376 y Fj(n)215 b Fo(The)15 -b Fj(n)p Fo(th)h(w)o(ord.)0 1464 y Fn(^)216 b Fo(The)15 -b(\014rst)g(argumen)o(t;)f(that)h(is,)g(w)o(ord)g(1.)0 -1551 y Fn($)216 b Fo(The)15 b(last)h(argumen)o(t.)0 1639 -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.)0 -1726 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('.)0 1813 y Fn(*)216 b Fo(All)16 b(of)f(the)g(w)o(ords,)f(except)h -(the)g Fn(0)p Fo(th.)k(This)d(is)f(a)g(synon)o(ym)g(for)f(`)p -Fn(1-$)p Fo('.)k(It)d(is)h(not)e(an)h(error)f(to)h(use)240 -1876 y(`)p Fn(*)p Fo(')f(if)i(there)f(is)h(just)f(one)g(w)o(ord)g(in)h -(the)f(ev)o(en)o(t;)g(the)g(empt)o(y)g(string)g(is)h(returned)f(in)h -(that)f(case.)0 1963 y Fj(x)s Fn(*)189 b Fo(Abbreviates)16 -b(`)p Fj(x)p Fn(-$)p Fo(')0 2050 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.)62 -2200 y(If)i(a)g(w)o(ord)f(designator)g(is)i(supplied)h(without)d(an)h -(ev)o(en)o(t)g(sp)q(eci\014cation,)h(the)f(previous)h(command)e(is)h -(used)0 2262 y(as)e(the)g(ev)o(en)o(t.)0 2471 y Fi(1.1.3)30 -b(Mo)r(di\014ers)62 2608 y Fo(After)20 b(the)f(optional)i(w)o(ord)e -(designator,)h(y)o(ou)f(can)h(add)g(a)g(sequence)h(of)e(one)h(or)f -(more)g(of)g(the)h(follo)o(wing)0 2670 y(mo)q(di\014ers,)c(eac)o(h)f -(preceded)i(b)o(y)e(a)g(`)p Fn(:)p Fo('.)p eop -3 4 bop 0 -58 a Fo(Chapter)15 b(1:)k(Using)d(History)f(In)o(teractiv)o -(ely)1157 b(3)0 183 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.)0 -270 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.)0 358 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.)0 -445 y Fn(e)216 b Fo(Remo)o(v)o(e)15 b(all)h(but)g(the)f(trailing)h -(su\016x.)0 532 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.)0 619 y Fn(s/)p Fj(old)r -Fn(/)p Fj(new)t Fn(/)240 681 y Fo(Substitute)k Fj(new)k -Fo(for)19 b(the)g(\014rst)g(o)q(ccurrence)i(of)e Fj(old)j -Fo(in)e(the)f(ev)o(en)o(t)h(line.)34 b(An)o(y)19 b(delimiter)j(ma)o(y) -240 744 y(b)q(e)e(used)g(in)g(place)g(of)f(`)p Fn(/)p -Fo('.)31 b(The)19 b(delimiter)i(ma)o(y)e(b)q(e)h(quoted)f(in)h -Fj(old)h Fo(and)f Fj(new)j Fo(with)d(a)f(single)240 806 -y(bac)o(kslash.)28 b(If)18 b(`)p Fn(&)p Fo(')f(app)q(ears)h(in)h -Fj(new)p Fo(,)f(it)h(is)f(replaced)h(b)o(y)f Fj(old)p -Fo(.)28 b(A)18 b(single)h(bac)o(kslash)g(will)g(quote)240 -868 y(the)c(`)p Fn(&)p Fo('.)k(The)d(\014nal)g(delimiter)h(is)e -(optional)h(if)g(it)f(is)h(the)f(last)g(c)o(haracter)g(on)g(the)g -(input)i(line.)0 955 y Fn(&)216 b Fo(Rep)q(eat)16 b(the)f(previous)h -(substitution.)0 1043 y Fn(g)216 b Fo(Cause)17 b(c)o(hanges)g(to)f(b)q -(e)i(applied)g(o)o(v)o(er)e(the)h(en)o(tire)h(ev)o(en)o(t)e(line.)27 -b(Used)17 b(in)h(conjunction)g(with)f(`)p Fn(s)p Fo(',)240 -1105 y(as)e(in)h Fn(gs/)p Fj(old)r Fn(/)p Fj(new)t Fn(/)p -Fo(,)f(or)f(with)i(`)p Fn(&)p Fo('.)p eop -4 5 bop 0 -58 a Fo(4)1497 b(GNU)15 b(History)g(Library)p -eop -5 6 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(5)0 183 y Fk(2)41 b(Programming)16 b(with)f(GNU)h -(History)62 370 y Fo(This)e(c)o(hapter)f(describ)q(es)i(ho)o(w)d(to)h -(in)o(terface)g(programs)f(that)h(y)o(ou)g(write)g(with)g(the)h(GNU)f -(History)g(Library)l(.)0 432 y(It)j(should)g(b)q(e)g(considered)h(a)f -(tec)o(hnical)h(guide.)22 b(F)l(or)15 b(information)h(on)f(the)h(in)o -(teractiv)o(e)g(use)g(of)f(GNU)g(History)l(,)0 495 y(see)g(Chapter)g(1) -g([Using)h(History)f(In)o(teractiv)o(ely],)g(page)g(1.)0 -719 y Fm(2.1)33 b(In)n(tro)r(duction)17 b(to)e(History)62 -856 y Fo(Man)o(y)j(programs)g(read)h(input)h(from)e(the)g(user)h(a)g -(line)h(at)f(a)f(time.)31 b(The)19 b(GNU)g(History)f(library)i(is)f -(able)0 918 y(to)e(k)o(eep)g(trac)o(k)f(of)h(those)g(lines,)i(asso)q -(ciate)e(arbitrary)g(data)g(with)g(eac)o(h)g(line,)j(and)d(utilize)i -(information)f(from)0 980 y(previous)e(lines)h(in)f(comp)q(osing)f(new) -h(ones.)62 1117 y(The)i(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)i -(on)d(a)0 1180 y(history)f(list,)g(asso)q(ciating)g(arbitrary)g(data)f -(with)h(a)f(line,)j(remo)o(ving)d(lines)j(from)d(the)h(list,)g(searc)o -(hing)g(through)0 1242 y(the)h(list)h(for)e(a)h(line)h(con)o(taining)g -(an)f(arbitrary)f(text)h(string,)g(and)g(referencing)h(an)o(y)f(line)h -(in)g(the)f(list)h(directly)l(.)0 1304 y(In)d(addition,)h(a)e(history)h -Fj(expansion)h Fo(function)g(is)f(a)o(v)m(ailable)h(whic)o(h)g(pro)o -(vides)f(for)f(a)h(consisten)o(t)g(user)g(in)o(terface)0 -1366 y(across)f(di\013eren)o(t)i(programs.)62 1503 y(The)i(user)g -(using)g(programs)f(written)g(with)h(the)g(History)f(library)i(has)e -(the)h(b)q(ene\014t)h(of)e(a)g(consisten)o(t)h(user)0 -1566 y(in)o(terface)d(with)g(a)f(set)h(of)f(w)o(ell-kno)o(wn)h -(commands)g(for)f(manipulating)i(the)f(text)f(of)g(previous)h(lines)h -(and)f(using)0 1628 y(that)g(text)g(in)i(new)e(commands.)22 -b(The)15 b(basic)i(history)e(manipulation)j(commands)d(are)g(similar)i -(to)e(the)h(history)0 1690 y(substitution)g(pro)o(vided)g(b)o(y)f -Fn(csh)p Fo(.)62 1827 y(If)g(the)g(programmer)e(desires,)i(he)g(can)g -(use)g(the)f(Readline)j(library)l(,)e(whic)o(h)h(includes)g(some)f -(history)f(manip-)0 1889 y(ulation)i(b)o(y)f(default,)h(and)f(has)g -(the)g(added)h(adv)m(an)o(tage)f(of)g(command)g(line)h(editing.)0 -2114 y Fm(2.2)33 b(History)15 b(Storage)62 2251 y Fo(The)h(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:)120 -2377 y Fn(typedef)23 b(struct)g(_hist_entry)f({)168 2429 -y(char)h(*line;)168 2481 y(char)g(*data;)120 2533 y(})h(HIST_ENTRY;)62 -2670 y Fo(The)16 b(history)f(list)h(itself)g(migh)o(t)f(therefore)g(b)q -(e)h(declared)g(as)p eop -6 7 bop 0 -58 a Fo(6)1497 b(GNU)15 b(History)g(Library)120 -183 y Fn(HIST_ENTRY)22 b(**the_history_list;)62 327 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:)120 460 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(*/)120 512 y(typedef)g(struct)g -(_hist_state)f({)168 564 y(HIST_ENTRY)g(**entries;)214 -b(/*)23 b(Pointer)g(to)h(the)f(entries)g(themselves.)f(*/)168 -616 y(int)h(offset;)453 b(/*)23 b(The)h(location)e(pointer)h(within)g -(this)h(array.)f(*/)168 668 y(int)g(length;)453 b(/*)23 -b(Number)g(of)h(elements)f(within)g(this)g(array.)g(*/)168 -719 y(int)g(size;)501 b(/*)23 b(Number)g(of)h(slots)f(allocated)g(to)g -(this)h(array.)f(*/)168 771 y(int)g(flags;)120 823 y(})h -(HISTORY_STATE;)62 967 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.)0 1250 y Fm(2.3)33 b(History)15 b(F)-6 b(unctions)62 -1394 y Fo(This)16 b(section)g(describ)q(es)h(the)e(calling)i(sequence)f -(for)f(the)g(v)m(arious)h(functions)g(presen)o(t)f(in)h(GNU)f(History)l -(.)0 1661 y Fi(2.3.1)30 b(Initializing)15 b(History)g(and)g(State)g -(Managemen)n(t)62 1805 y Fo(This)j(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)g(library)0 1867 y(when)f(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.)1725 -2049 y(F)l(unction)-1899 b Fh(void)20 b Fg(using)p 258 -2049 18 3 v 20 w(history)j Ff(\(\))120 2111 y Fo(Begin)g(a)f(session)g -(in)h(whic)o(h)g(the)f(history)g(functions)g(migh)o(t)g(b)q(e)h(used.) -40 b(This)23 b(initializes)i(the)120 2173 y(in)o(teractiv)o(e)16 -b(v)m(ariables.)1725 2355 y(F)l(unction)-1899 b Fh(HISTORY_STATE)21 -b(*)e Fg(history)p 582 2355 V 21 w(get)p 680 2355 V 21 -w(history)p 876 2355 V 21 w(state)j Ff(\(\))120 2417 -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(.)1725 2599 y(F)l(unction)-1899 -b Fh(void)20 b Fg(history)p 302 2599 V 20 w(set)p 393 -2599 V 21 w(history)p 589 2599 V 21 w(state)j Ff(\()p -Fn(HISTORY_STATE)13 b(*state)p Ff(\))120 2661 y Fo(Set)i(the)h(state)e -(of)h(the)g(history)g(list)h(according)g(to)e Fj(state)p -Fo(.)p eop -7 8 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(7)0 183 y Fi(2.3.2)30 b(History)15 b(List)g(Managemen)n -(t)62 322 y Fo(These)i(functions)h(manage)e(individual)k(en)o(tries)d -(on)f(the)h(history)g(list,)g(or)f(set)h(parameters)e(managing)i(the)0 -384 y(list)f(itself.)1725 552 y(F)l(unction)-1899 b Fh(void)20 -b Fg(add)p 219 552 18 3 v 20 w(history)j Ff(\()p Fn(char)14 -b(*string)p Ff(\))120 614 y Fo(Place)j Fj(string)k Fo(at)16 -b(the)g(end)i(of)e(the)g(history)h(list.)25 b(The)17 -b(asso)q(ciated)g(data)f(\014eld)h(\(if)g(an)o(y\))f(is)h(set)g(to)120 -677 y Fn(NULL)p Fo(.)1725 844 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(remo)n(v)n(e)p 509 844 V 20 w(history)k Ff(\()p -Fn(int)14 b(which)p Ff(\))120 907 y Fo(Remo)o(v)o(e)d(history)g(en)o -(try)g(at)g(o\013set)f Fj(whic)o(h)i Fo(from)f(the)g(history)l(.)19 -b(The)11 b(remo)o(v)o(ed)g(elemen)o(t)h(is)g(returned)120 -969 y(so)j(y)o(ou)g(can)g(free)g(the)h(line,)g(data,)e(and)i(con)o -(taining)g(structure.)1725 1137 y(F)l(unction)-1899 b -Fh(HIST_ENTRY)21 b(*)e Fg(replace)p 505 1137 V 22 w(history)p -702 1137 V 20 w(en)n(try)24 b Ff(\()p Fn(int)14 b(which,)g(char)h -(*line,)f(char)208 1199 y(*data)p Ff(\))120 1261 y Fo(Mak)o(e)d(the)i -(history)f(en)o(try)g(at)f(o\013set)h Fj(whic)o(h)h Fo(ha)o(v)o(e)e -Fj(line)17 b Fo(and)12 b Fj(data)p Fo(.)19 b(This)12 -b(returns)g(the)h(old)g(en)o(try)e(so)120 1324 y(y)o(ou)i(can)g(disp)q -(ose)h(of)e(the)h(data.)19 b(In)13 b(the)g(case)g(of)f(an)h(in)o(v)m -(alid)i Fj(whic)o(h)p Fo(,)f(a)f Fn(NULL)f Fo(p)q(oin)o(ter)i(is)f -(returned.)1725 1491 y(F)l(unction)-1899 b Fh(void)20 -b Fg(clear)p 245 1491 V 21 w(history)j Ff(\(\))120 1554 -y Fo(Clear)15 b(the)h(history)f(list)h(b)o(y)f(deleting)i(all)f(the)f -(en)o(tries.)1725 1721 y(F)l(unction)-1899 b Fh(void)20 -b Fg(sti\015e)p 245 1721 V 21 w(history)j Ff(\()p Fn(int)14 -b(max)p Ff(\))120 1784 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.)1725 -1951 y(F)l(unction)-1899 b Fh(int)20 b Fg(unsti\015e)p -283 1951 V 21 w(history)i Ff(\(\))120 2014 y Fo(Stop)13 -b(sti\015ing)h(the)f(history)l(.)19 b(This)14 b(returns)f(the)g -(previous)h(amoun)o(t)e(the)h(history)g(w)o(as)g(sti\015ed.)20 -b(The)120 2076 y(v)m(alue)c(is)g(p)q(ositiv)o(e)g(if)g(the)f(history)g -(w)o(as)g(sti\015ed,)h(negativ)o(e)f(if)g(it)h(w)o(asn't.)1725 -2244 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -2244 V 20 w(is)p 334 2244 V 21 w(sti\015ed)k Ff(\(\))120 -2306 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.)0 2531 y Fi(2.3.3)30 b(Information)14 -b(Ab)r(out)h(the)g(History)g(List)62 2670 y Fo(These)h(functions)g -(return)f(information)g(ab)q(out)g(the)h(en)o(tire)f(history)g(list)h -(or)f(individual)j(list)f(en)o(tries.)p eop -8 9 bop 0 -58 a Fo(8)1497 b(GNU)15 b(History)g(Library)1725 -183 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 b(**)e Fg(history)p -530 183 18 3 v 21 w(list)24 b Ff(\(\))120 246 y Fo(Return)e(a)e -Fn(NULL)h Fo(terminated)g(arra)o(y)f(of)g Fn(HIST_ENTRY)g -Fo(whic)o(h)i(is)f(the)g(curren)o(t)g(input)h(history)l(.)120 -308 y(Elemen)o(t)16 b(0)f(of)f(this)i(list)g(is)g(the)f(b)q(eginning)i -(of)e(time.)20 b(If)c(there)f(is)h(no)f(history)l(,)g(return)g -Fn(NULL)p Fo(.)1725 482 y(F)l(unction)-1899 b Fh(int)20 -b Fg(where)p 250 482 V 20 w(history)j Ff(\(\))120 544 -y Fo(Returns)16 b(the)f(o\013set)f(of)h(the)g(curren)o(t)g(history)g -(elemen)o(t.)1725 719 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(curren)n(t)p 512 719 V 21 w(history)k Ff(\(\))120 -781 y Fo(Return)14 b(the)g(history)g(en)o(try)f(at)h(the)g(curren)o(t)f -(p)q(osition,)i(as)e(determined)j(b)o(y)d Fn(where_history)h(\(\))p -Fo(.)120 843 y(If)h(there)h(is)f(no)h(en)o(try)e(there,)h(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 1018 y(F)l(unction)-1899 -b Fh(HIST_ENTRY)21 b(*)e Fg(history)p 504 1018 V 21 w(get)j -Ff(\()p Fn(int)15 b(offset)p Ff(\))120 1080 y Fo(Return)g(the)g -(history)f(en)o(try)g(at)g(p)q(osition)i Fj(o\013set)p -Fo(,)d(starting)h(from)g Fn(history_base)p Fo(.)k(If)c(there)h(is)g(no) -120 1142 y(en)o(try)g(there,)g(or)f(if)i Fj(o\013set)f -Fo(is)h(greater)e(than)h(the)h(history)f(length,)g(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 1316 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1316 V 20 w(total)p 412 -1316 V 22 w(b)n(ytes)j Ff(\(\))120 1379 y Fo(Return)17 -b(the)f(n)o(um)o(b)q(er)g(of)g(b)o(ytes)g(that)f(the)h(primary)g -(history)g(en)o(tries)h(are)e(using.)23 b(This)17 b(function)120 -1441 y(returns)e(the)g(sum)h(of)e(the)i(lengths)f(of)g(all)h(the)g -(lines)g(in)g(the)g(history)l(.)0 1686 y Fi(2.3.4)30 -b(Mo)n(ving)15 b(Around)h(the)f(History)g(List)62 1827 -y Fo(These)h(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.)1725 -2001 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -2001 V 20 w(set)p 367 2001 V 21 w(p)r(os)h Ff(\()p Fn(int)15 -b(pos)p Ff(\))120 2063 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.)1725 2238 y(F)l(unction)-1899 b Fh(HIST_ENTRY)21 -b(*)e Fg(previous)p 540 2238 V 20 w(history)k Ff(\(\))120 -2300 y Fo(Bac)o(k)16 b(up)h(the)g(curren)o(t)f(history)h(o\013set)e(to) -h(the)h(previous)g(history)g(en)o(try)l(,)f(and)h(return)f(a)g(p)q(oin) -o(ter)120 2362 y(to)f(that)f(en)o(try)l(.)20 b(If)15 -b(there)g(is)h(no)f(previous)h(en)o(try)l(,)f(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)1725 2537 y(F)l(unction)-1899 -b Fh(HIST_ENTRY)21 b(*)e Fg(next)p 439 2537 V 21 w(history)k -Ff(\(\))120 2599 y Fo(Mo)o(v)o(e)c(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)g(the)g(a)120 2661 y(p)q(oin)o(ter)c(to)e(that)h(en)o -(try)l(.)k(If)d(there)f(is)h(no)f(next)g(en)o(try)l(,)g(return)g(a)g -Fn(NULL)g Fo(p)q(oin)o(ter.)p eop -9 10 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1039 b(9)0 183 y Fi(2.3.5)30 b(Searc)n(hing)15 -b(the)h(History)f(List)62 320 y Fo(These)e(functions)g(allo)o(w)f -(searc)o(hing)h(of)f(the)g(history)g(list)h(for)f(en)o(tries)h(con)o -(taining)g(a)f(sp)q(eci\014c)i(string.)19 b(Searc)o(h-)0 -382 y(ing)e(ma)o(y)g(b)q(e)g(p)q(erformed)g(b)q(oth)g(forw)o(ard)f(and) -h(bac)o(kw)o(ard)f(from)g(the)h(curren)o(t)f(history)h(p)q(osition.)26 -b(The)17 b(searc)o(h)0 445 y(ma)o(y)d(b)q(e)i Fj(anc)o(hored)p -Fo(,)f(meaning)h(that)f(the)g(string)g(m)o(ust)g(matc)o(h)f(at)h(the)g -(b)q(eginning)i(of)e(the)h(history)f(en)o(try)l(.)1725 -600 y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 -600 18 3 v 20 w(searc)n(h)j Ff(\()p Fn(char)14 b(*string,)g(int)h -(direction)p Ff(\))120 662 y Fo(Searc)o(h)k(the)g(history)g(for)f -Fj(string)p Fo(,)i(starting)e(at)g(the)h(curren)o(t)g(history)g -(o\013set.)30 b(If)19 b Fj(direction)h Fn(<)f Fo(0,)120 -724 y(then)14 b(the)f(searc)o(h)g(is)h(through)e(previous)i(en)o -(tries,)g(else)g(through)f(subsequen)o(t.)20 b(If)13 -b Fj(string)k Fo(is)d(found,)120 786 y(then)f(the)g(curren)o(t)g -(history)g(index)i(is)e(set)g(to)f(that)h(history)g(en)o(try)l(,)f(and) -i(the)f(v)m(alue)h(returned)f(is)h(the)120 849 y(o\013set)h(in)i(the)f -(line)i(of)d(the)h(en)o(try)g(where)g Fj(string)k Fo(w)o(as)c(found.)22 -b(Otherwise,)17 b(nothing)f(is)h(c)o(hanged,)120 911 -y(and)e(a)g(-1)g(is)h(returned.)1725 1066 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1066 V 20 w(searc)n(h)p -452 1066 V 21 w(pre\014x)i Ff(\()p Fn(char)15 b(*string,)f(int)g -(direction)p Ff(\))120 1128 y Fo(Searc)o(h)22 b(the)h(history)f(for)f -Fj(string)p Fo(,)j(starting)e(at)f(the)i(curren)o(t)f(history)g -(o\013set.)40 b(The)22 b(searc)o(h)g(is)120 1190 y(anc)o(hored:)i(matc) -o(hing)18 b(lines)h(m)o(ust)d(b)q(egin)j(with)f Fj(string)p -Fo(.)26 b(If)17 b Fj(direction)i Fn(<)e Fo(0,)g(then)h(the)f(searc)o(h) -g(is)120 1253 y(through)e(previous)h(en)o(tries,)f(else)i(through)d -(subsequen)o(t.)21 b(If)16 b Fj(string)j Fo(is)d(found,)f(then)h(the)f -(curren)o(t)120 1315 y(history)20 b(index)i(is)e(set)g(to)g(that)f(en)o -(try)l(,)i(and)f(the)g(return)h(v)m(alue)g(is)g(0.)34 -b(Otherwise,)22 b(nothing)e(is)120 1377 y(c)o(hanged,)15 -b(and)h(a)e(-1)h(is)h(returned.)1725 1532 y(F)l(unction)-1899 -b Fh(int)20 b Fg(history)p 276 1532 V 20 w(searc)n(h)p -452 1532 V 21 w(p)r(os)h Ff(\()p Fn(char)15 b(*string,)f(int)g -(direction,)g(int)h(pos)p Ff(\))120 1594 y Fo(Searc)o(h)d(for)f -Fj(string)k Fo(in)d(the)g(history)f(list,)i(starting)e(at)g -Fj(p)q(os)p Fo(,)h(an)f(absolute)h(index)h(in)o(to)e(the)h(list.)19 -b(If)12 b Fj(di-)120 1656 y(rection)g Fo(is)h(negativ)o(e,)f(the)g -(searc)o(h)g(pro)q(ceeds)h(bac)o(kw)o(ard)e(from)g Fj(p)q(os)p -Fo(,)i(otherwise)f(forw)o(ard.)17 b(Returns)120 1719 -y(the)e(absolute)h(index)g(of)f(the)g(history)h(elemen)o(t)f(where)h -Fj(string)j Fo(w)o(as)14 b(found,)h(or)g(-1)g(otherwise.)0 -1912 y Fi(2.3.6)30 b(Managing)14 b(the)i(History)f(File)62 -2049 y Fo(The)f(History)g(library)h(can)f(read)g(the)g(history)g(from)f -(and)i(write)f(it)g(to)f(a)h(\014le.)20 b(This)15 b(section)g(do)q -(cumen)o(ts)f(the)0 2111 y(functions)i(for)f(managing)g(a)f(history)i -(\014le.)1725 2266 y(F)l(unction)-1899 b Fh(int)20 b -Fg(read)p 211 2266 V 20 w(history)i Ff(\()p Fn(char)15 -b(*filename)p Ff(\))120 2328 y Fo(Add)i(the)f(con)o(ten)o(ts)g(of)g -Fj(\014lename)k Fo(to)c(the)h(history)f(list,)h(a)f(line)i(at)e(a)g -(time.)24 b(If)17 b Fj(\014lename)j Fo(is)d Fn(NULL)p -Fo(,)120 2391 y(then)f(read)f(from)f(`)p Fn(~/.history)p -Fo('.)k(Returns)e(0)e(if)i(successful,)g(or)f(errno)g(if)h(not.)1725 -2545 y(F)l(unction)-1899 b Fh(int)20 b Fg(read)p 211 -2545 V 20 w(history)p 406 2545 V 20 w(range)i Ff(\()p -Fn(char)15 b(*filename,)e(int)i(from,)g(int)f(to)p Ff(\))120 -2608 y Fo(Read)j(a)e(range)h(of)f(lines)j(from)d Fj(\014lename)p -Fo(,)i(adding)f(them)g(to)f(the)h(history)g(list.)23 -b(Start)15 b(reading)i(at)120 2670 y(line)f Fj(from)f -Fo(and)g(end)g(at)f Fj(to)p Fo(.)19 b(If)d Fj(from)e -Fo(is)h(zero,)f(start)g(at)g(the)h(b)q(eginning.)22 b(If)15 -b Fj(to)i Fo(is)e(less)g(than)g Fj(from)p Fo(,)p eop -10 11 bop 0 -58 a Fo(10)1474 b(GNU)15 b(History)g(Library)120 -183 y(then)i(read)g(un)o(til)h(the)f(end)g(of)g(the)g(\014le.)25 -b(If)17 b Fj(\014lename)k Fo(is)c Fn(NULL)p Fo(,)f(then)i(read)e(from)g -(`)p Fn(~/.history)p Fo('.)120 246 y(Returns)g(0)f(if)g(successful,)h -(or)f Fn(errno)g Fo(if)g(not.)1725 410 y(F)l(unction)-1899 -b Fh(int)20 b Fg(write)p 229 410 18 3 v 22 w(history)i -Ff(\()p Fn(char)15 b(*filename)p Ff(\))120 472 y Fo(W)l(rite)20 -b(the)g(curren)o(t)f(history)h(to)f Fj(\014lename)p Fo(,)i(o)o(v)o -(erwriting)f Fj(\014lename)j Fo(if)d(necessary)l(.)34 -b(If)20 b Fj(\014lename)120 534 y Fo(is)d Fn(NULL)p Fo(,)g(then)g -(write)g(the)g(history)g(list)h(to)e(`)p Fn(~/.history)p -Fo('.)23 b(V)l(alues)18 b(returned)g(are)e(as)h(in)h -Fn(read_)120 596 y(history)c(\(\))p Fo(.)1725 760 y(F)l(unction)-1899 -b Fh(int)20 b Fg(app)r(end)p 285 760 V 19 w(history)j -Ff(\()p Fn(int)14 b(nelements,)g(char)h(*filename)p Ff(\))120 -823 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(.)1725 987 -y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 987 -V 20 w(truncate)p 507 987 V 21 w(\014le)k Ff(\()p Fn(char)14 -b(*filename,)g(int)h(nlines)p Ff(\))120 1049 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.)0 1263 y Fi(2.3.7)30 b(History)15 -b(Expansion)62 1401 y Fo(These)h(functions)g(implemen)o(t)g -Fn(csh)p Fo(-lik)o(e)g(history)g(expansion.)1725 1565 -y(F)l(unction)-1899 b Fh(int)20 b Fg(history)p 276 1565 -V 20 w(expand)j Ff(\()p Fn(char)14 b(*string,)g(char)h(**output)p -Ff(\))120 1627 y Fo(Expand)20 b Fj(string)p Fo(,)f(placing)i(the)e -(result)h(in)o(to)f Fj(output)p Fo(,)h(a)f(p)q(oin)o(ter)h(to)e(a)h -(string)h(\(see)f(Section)h(1.1)120 1689 y([History)15 -b(In)o(teraction],)f(page)h(1\).)20 b(Returns:)120 1840 -y Fn(0)216 b Fo(If)21 b(no)g(expansions)h(to)q(ok)e(place)h(\(or,)g(if) -h(the)f(only)g(c)o(hange)g(in)h(the)f(text)f(w)o(as)g(the)360 -1902 y(de-slashifying)d(of)e(the)g(history)h(expansion)g(c)o -(haracter\);)120 1991 y Fn(1)216 b Fo(if)16 b(expansions)g(did)g(tak)o -(e)e(place;)120 2080 y Fn(-1)192 b Fo(if)16 b(there)f(w)o(as)f(an)h -(error)g(in)h(expansion;)120 2168 y Fn(2)216 b Fo(if)14 -b(the)f(returned)h(line)h(should)f(only)g(b)q(e)f(displa)o(y)o(ed,)i -(but)e(not)g(executed,)h(as)f(with)h(the)360 2231 y Fn(:p)h -Fo(mo)q(di\014er)h(\(see)f(Section)h(1.1.3)e([Mo)q(di\014ers],)h(page)g -(2\).)120 2381 y(If)g(an)h(error)e(o)q(curred)i(in)g(expansion,)f(then) -h Fj(output)g Fo(con)o(tains)f(a)g(descriptiv)o(e)i(error)d(message.) -1725 2545 y(F)l(unction)-1899 b Fh(char)20 b(*)f Fg(history)p -347 2545 V 21 w(arg)p 449 2545 V 19 w(extract)24 b Ff(\()p -Fn(int)14 b(first,)h(int)g(last,)f(char)h(*string)p Ff(\))120 -2608 y Fo(Extract)10 b(a)h(string)g(segmen)o(t)g(consisting)h(of)f(the) -g Fj(\014rst)h Fo(through)f Fj(last)h Fo(argumen)o(ts)e(presen)o(t)h -(in)h Fj(string)p Fo(.)120 2670 y(Argumen)o(ts)j(are)g(brok)o(en)g(up)g -(as)g(in)h(Bash.)p eop -11 12 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1017 b(11)1725 183 y(F)l(unction)-1899 b Fh(char)20 -b(*)f Fg(get)p 249 183 18 3 v 21 w(history)p 445 183 -V 20 w(ev)n(en)n(t)25 b Ff(\()p Fn(char)14 b(*string,)g(int)h(*cindex,) -f(int)h(qchar)p Ff(\))120 246 y Fo(Returns)e(the)f(text)f(of)h(the)g -(history)g(ev)o(en)o(t)f(b)q(eginning)k(at)c Fj(string)16 -b Fn(+)c Fj(*cindex)p Fo(.)20 b Fj(*cindex)c Fo(is)d(mo)q(di\014ed)120 -308 y(to)h(p)q(oin)o(t)h(to)f(after)h(the)f(ev)o(en)o(t)h(sp)q -(eci\014er.)21 b(A)o(t)15 b(function)g(en)o(try)l(,)f -Fj(cindex)20 b Fo(p)q(oin)o(ts)15 b(to)f(the)h(index)h(in)o(to)120 -370 y Fj(string)h Fo(where)d(the)f(history)h(ev)o(en)o(t)f(sp)q -(eci\014cation)i(b)q(egins.)20 b Fj(qc)o(har)d Fo(is)c(a)g(c)o -(haracter)g(that)g(is)h(allo)o(w)o(ed)120 432 y(to)h(end)g(the)h(ev)o -(en)o(t)f(sp)q(eci\014cation)i(in)f(addition)g(to)f(the)g(\\normal")g -(terminating)g(c)o(haracters.)1725 587 y(F)l(unction)-1899 -b Fh(char)20 b(**)f Fg(history)p 373 587 V 21 w(tok)n(enize)25 -b Ff(\()p Fn(char)14 b(*string)p Ff(\))120 649 y Fo(Return)k(an)f(arra) -o(y)f(of)h(tok)o(ens)f(parsed)i(out)e(of)h Fj(string)p -Fo(,)g(m)o(uc)o(h)h(as)e(the)i(shell)g(migh)o(t.)26 b(The)17 -b(tok)o(ens)120 711 y(are)c(split)h(on)f(white)g(space)h(and)f(on)g -(the)g(c)o(haracters)f Fn(\(\)<>;&|$)p Fo(,)g(and)h(shell)i(quoting)e -(con)o(v)o(en)o(tions)120 774 y(are)i(ob)q(ey)o(ed.)0 -983 y Fm(2.4)33 b(History)15 b(V)-6 b(ariables)62 1120 -y Fo(This)16 b(section)g(describ)q(es)h(the)e(externally)h(visible)i(v) -m(ariables)e(exp)q(orted)g(b)o(y)f(the)g(GNU)g(History)g(Library)l(.) -1736 1275 y(V)l(ariable)-1899 b Fh(int)20 b Fg(history)p -276 1275 V 20 w(base)120 1337 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.)1736 -1491 y(V)l(ariable)-1899 b Fh(int)20 b Fg(history)p 276 -1491 V 20 w(length)120 1554 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.)1736 -1708 y(V)l(ariable)-1899 b Fh(int)20 b Fg(max)p 208 1708 -V 19 w(input)p 360 1708 V 21 w(history)120 1771 y Fo(The)12 -b(maxim)o(um)g(n)o(um)o(b)q(er)g(of)f(history)h(en)o(tries.)19 -b(This)12 b(m)o(ust)f(b)q(e)h(c)o(hanged)g(using)h Fn(stifle_history) -120 1833 y(\(\))p Fo(.)1736 1987 y(V)l(ariable)-1899 -b Fh(char)20 b Fg(history)p 302 1987 V 20 w(expansion)p -569 1987 V 21 w(c)n(har)120 2050 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('.)1736 2204 y(V)l(ariable)-1899 b Fh(char)20 -b Fg(history)p 302 2204 V 20 w(subst)p 454 2204 V 20 -w(c)n(har)120 2266 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)12 b(default)120 2329 y(is)k(`)p Fn(^)p -Fo('.)1736 2483 y(V)l(ariable)-1899 b Fh(char)20 b Fg(history)p -302 2483 V 20 w(commen)n(t)p 552 2483 V 19 w(c)n(har)120 -2545 y Fo(During)12 b(tok)o(enization,)h(if)f(this)h(c)o(haracter)e(is) -i(seen)f(as)g(the)g(\014rst)f(c)o(haracter)g(of)h(a)g(w)o(ord,)f(then)i -(it)f(and)120 2608 y(all)19 b(subsequen)o(t)g(c)o(haracters)e(up)h(to)g -(a)f(newline)j(are)e(ignored,)h(suppressing)g(history)f(expansion)120 -2670 y(for)d(the)g(remainder)h(of)f(the)g(line.)21 b(This)16 -b(is)g(disabled)h(b)o(y)e(default.)p eop -12 13 bop 0 -58 a Fo(12)1474 b(GNU)15 b(History)g(Library)1736 -183 y(V)l(ariable)-1899 b Fh(char)20 b(*)f Fg(history)p -347 183 18 3 v 21 w(no)p 429 183 V 20 w(expand)p 629 -183 V 20 w(c)n(hars)120 246 y Fo(The)f(list)g(of)g(c)o(haracters)e -(whic)o(h)j(inhibit)h(history)d(expansion)i(if)f(found)g(immediately)h -(follo)o(wing)120 308 y Fj(history)p 261 308 14 2 v 16 -w(expansion)p 472 308 V 18 w(c)o(har)p Fo(.)g(The)d(default)f(is)h -(whitespace)g(and)g(`)p Fn(=)p Fo('.)1736 469 y(V)l(ariable)-1899 -b Fh(char)20 b(*)f Fg(history)p 347 469 18 3 v 21 w(searc)n(h)p -524 469 V 20 w(delimiter)p 768 469 V 23 w(c)n(hars)120 -532 y Fo(The)d(list)g(of)f(additional)i(c)o(haracters)d(whic)o(h)i(can) -g(delimit)h(a)e(history)g(searc)o(h)h(string,)f(in)h(addition)120 -594 y(to)f(whitespace,)g(`)p Fn(:)p Fo(')f(and)i(`)p -Fn(?)p Fo(')e(in)i(the)f(case)h(of)e(a)h(substring)h(searc)o(h.)k(The) -15 b(default)h(is)g(empt)o(y)l(.)1736 755 y(V)l(ariable)-1899 -b Fh(int)20 b Fg(history)p 276 755 V 20 w(quotes)p 458 -755 V 21 w(inhibit)p 642 755 V 23 w(expansion)120 818 -y Fo(If)e(non-zero,)f(single-quoted)i(w)o(ords)e(are)g(not)g(scanned)h -(for)e(the)i(history)f(expansion)h(c)o(haracter.)120 -880 y(The)d(default)h(v)m(alue)h(is)e(0.)1736 1041 y(V)l(ariable)-1899 -b Fh(Function)20 b(*)g Fg(history)p 452 1041 V 20 w(inhibit)p -635 1041 V 23 w(expansion)p 905 1041 V 21 w(function)120 -1104 y Fo(This)f(should)h(b)q(e)f(set)f(to)g(the)h(address)f(of)g(a)h -(function)g(that)f(tak)o(es)f(t)o(w)o(o)h(argumen)o(ts:)25 -b(a)19 b Fn(char)14 b(*)120 1166 y Fo(\()p Fj(string)t -Fo(\))c(and)i(an)f(in)o(teger)g(index)h(in)o(to)f(that)g(string)g(\()p -Fj(i)r Fo(\).)19 b(It)11 b(should)h(return)f(a)g(non-zero)g(v)m(alue)h -(if)g(the)120 1228 y(history)17 b(expansion)h(starting)e(at)h -Fj(string[i])h Fo(should)g(not)f(b)q(e)h(p)q(erformed;)f(zero)g(if)h -(the)f(expansion)120 1290 y(should)i(b)q(e)f(done.)28 -b(It)18 b(is)g(in)o(tended)h(for)e(use)h(b)o(y)g(applications)h(lik)o -(e)g(Bash)f(that)f(use)h(the)g(history)120 1353 y(expansion)e(c)o -(haracter)f(for)f(additional)j(purp)q(oses.)j(By)c(default,)f(this)h(v) -m(ariable)g(is)g(set)f(to)f(NULL.)0 1576 y Fm(2.5)33 -b(History)15 b(Programming)h(Example)62 1713 y Fo(The)g(follo)o(wing)g -(program)e(demonstrates)g(simple)j(use)e(of)g(the)g(GNU)g(History)g -(Library)l(.)120 1840 y Fn(main)23 b(\(\))120 1892 y({)168 -1944 y(char)g(line[1024],)f(*t;)168 1995 y(int)h(len,)g(done)h(=)g(0;) -168 2099 y(line[0])f(=)g(0;)168 2203 y(using_history)f(\(\);)168 -2255 y(while)h(\(!done\))215 2307 y({)263 2359 y(printf)g(\("history$)g -("\);)263 2411 y(fflush)g(\(stdout\);)263 2462 y(t)h(=)g(fgets)f -(\(line,)g(sizeof)g(\(line\))g(-)h(1,)f(stdin\);)263 -2514 y(if)h(\(t)f(&&)h(*t\))311 2566 y({)359 2618 y(len)f(=)h(strlen)f -(\(t\);)359 2670 y(if)g(\(t[len)g(-)h(1])g(==)f('\\n'\))p -eop -13 14 bop 0 -58 a Fo(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(History)1017 b(13)406 183 y Fn(t[len)24 b(-)f(1])h(=)g('\\0';)311 -235 y(})263 339 y(if)g(\(!t\))311 391 y(strcpy)f(\(line,)g("quit"\);) -263 495 y(if)h(\(line[0]\))311 546 y({)359 598 y(char)f(*expansion;)359 -650 y(int)g(result;)359 754 y(result)g(=)g(history_expand)f(\(line,)h -(&expansion\);)359 806 y(if)g(\(result\))406 858 y(fprintf)g(\(stderr,) -g("\045s\\n",)g(expansion\);)359 962 y(if)g(\(result)g(<)h(0)g(||)f -(result)g(==)h(2\))406 1013 y({)454 1065 y(free)f(\(expansion\);)454 -1117 y(continue;)406 1169 y(})359 1273 y(add_history)f(\(expansion\);) -359 1325 y(strncpy)h(\(line,)g(expansion,)f(sizeof)h(\(line\))g(-)h -(1\);)359 1377 y(free)f(\(expansion\);)311 1429 y(})263 -1532 y(if)h(\(strcmp)f(\(line,)g("quit"\))g(==)g(0\))311 -1584 y(done)g(=)h(1;)263 1636 y(else)f(if)h(\(strcmp)f(\(line,)g -("save"\))g(==)h(0\))311 1688 y(write_history)e(\("history_file"\);)263 -1740 y(else)h(if)h(\(strcmp)f(\(line,)g("read"\))g(==)h(0\))311 -1792 y(read_history)e(\("history_file"\);)263 1844 y(else)h(if)h -(\(strcmp)f(\(line,)g("list"\))g(==)h(0\))311 1896 y({)359 -1947 y(register)e(HIST_ENTRY)h(**the_list;)359 1999 y(register)f(int)i -(i;)359 2103 y(the_list)e(=)i(history_list)e(\(\);)359 -2155 y(if)h(\(the_list\))406 2207 y(for)h(\(i)f(=)h(0;)g(the_list[i];)e -(i++\))454 2259 y(printf)h(\("\045d:)g(\045s\\n",)g(i)h(+)g -(history_base,)e(the_list[i]->line\);)311 2311 y(})263 -2363 y(else)h(if)h(\(strncmp)f(\(line,)g("delete",)g(6\))g(==)h(0\))311 -2414 y({)359 2466 y(int)f(which;)359 2518 y(if)g(\(\(sscanf)g(\(line)g -(+)h(6,)f("\045d",)h(&which\)\))e(==)i(1\))406 2570 y({)454 -2622 y(HIST_ENTRY)f(*entry)g(=)g(remove_history)f(\(which\);)p -eop -14 15 bop 0 -58 a Fo(14)1474 b(GNU)15 b(History)g(Library)454 -183 y Fn(if)24 b(\(!entry\))502 235 y(fprintf)f(\(stderr,)f("No)i(such) -f(entry)g(\045d\\n",)g(which\);)454 287 y(else)502 339 -y({)550 391 y(free)g(\(entry->line\);)550 443 y(free)g(\(entry\);)502 -495 y(})406 546 y(})359 598 y(else)406 650 y({)454 702 -y(fprintf)g(\(stderr,)g("non-numeric)f(arg)h(given)h(to)f -(`delete'\\n"\);)406 754 y(})311 806 y(})215 858 y(})120 -910 y(})p eop -15 16 bop 0 -58 a Fo(App)q(endix)17 b(A:)e(Concept)g(Index)1346 -b(15)0 183 y Fk(App)r(endix)13 b(A)41 b(Concept)15 b(Index)0 -430 y Fm(A)0 496 y Fe(anc)o(hored)f(searc)o(h)5 b Fd(.)i(.)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(.)g(.)g(.)g(.)g(.)g(.)18 -b Fe(9)0 604 y Fm(E)0 670 y Fe(ev)o(en)o(t)13 b(designators)g -Fd(.)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(.)h(.)f(.)g -(.)23 b Fe(1)1015 430 y Fm(H)1015 496 y Fe(history)15 -b(ev)o(en)o(ts)5 b Fd(.)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(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(1)1015 554 -y(history)d(expansion)8 b Fd(.)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(.)h(.)f(.)g(.)g(.)g(.)21 b Fe(1)1015 612 y(History)14 -b(Searc)o(hing)7 b Fd(.)h(.)e(.)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(.)20 b Fe(9)p eop -16 17 bop 0 -58 a Fo(16)1474 b(GNU)15 b(History)g(Library)p -eop -17 18 bop 0 -58 a Fo(App)q(endix)17 b(B:)e(F)l(unction)h(and)g(V)l -(ariable)g(Index)1069 b(17)0 183 y Fk(App)r(endix)13 -b(B)41 b(F)-7 b(unction)15 b(and)g(V)-7 b(ariable)14 -b(Index)0 430 y Fm(A)0 496 y Fc(add)p 62 496 12 2 v 13 -w(history)8 b Fd(.)s(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20 b Fe(7)0 554 y -Fc(append)p 122 554 V 12 w(history)9 b Fd(.)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(.)h(.)f(.)g(.)g(.)g(.)24 b Fe(10)0 -679 y Fm(C)0 745 y Fc(clear)p 102 745 V 12 w(history)5 -b Fd(.)t(.)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(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)18 b Fe(7)0 803 y Fc(current)p 142 803 -V 11 w(history)9 b Fd(.)d(.)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 Fe(8)0 928 y Fm(G)0 994 y Fc(get)p -62 994 V 13 w(history)p 215 994 V 11 w(event)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(11)0 1119 -y Fm(H)0 1185 y Fc(history)p 142 1185 V 11 w(arg)p 213 -1185 V 13 w(extract)8 b Fd(.)t(.)e(.)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(.)21 b Fe(10)0 1243 y Fc(history)p 142 1243 V 11 w(base)e -Fd(.)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(.)20 b Fe(11)0 1301 y Fc(history)p 142 1301 -V 11 w(comment)p 293 1301 V 12 w(char)g Fd(.)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(.)21 b Fe(11)0 1359 y Fc(history)p 142 1359 -V 11 w(expand)10 b Fd(.)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(.)24 b Fe(10)0 1418 y Fc(history)p -142 1418 V 11 w(expansion)p 333 1418 V 11 w(char)17 b -Fd(.)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(.)19 b Fe(11)0 1476 -y Fc(history)p 142 1476 V 11 w(get)8 b Fd(.)d(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)20 -b Fe(8)0 1534 y Fc(history)p 142 1534 V 11 w(get)p 213 -1534 V 13 w(history)p 366 1534 V 12 w(state)t Fd(.)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(.)17 b Fe(6)0 1592 y Fc(history)p -142 1592 V 11 w(inhibit)p 293 1592 V 12 w(expansion)p -484 1592 V 10 w(function)k Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)23 b Fe(12)0 1650 y Fc(history)p 142 1650 V 11 -w(is)p 193 1650 V 14 w(stifled)7 b Fd(.)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(.) -g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(7)0 1708 y Fc(history)p -142 1708 V 11 w(length)16 b Fd(.)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(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Fe(11)0 1766 y Fc(history)p -142 1766 V 11 w(list)7 b Fd(.)t(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)19 b Fe(8)0 1824 -y Fc(history)p 142 1824 V 11 w(no)p 193 1824 V 14 w(expand)p -327 1824 V 12 w(chars)f Fd(.)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(.)20 -b Fe(12)0 1883 y Fc(history)p 142 1883 V 11 w(quotes)p -273 1883 V 12 w(inhibit)p 425 1883 V 12 w(expansion)14 -b Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 -b Fe(12)0 1941 y Fc(history)p 142 1941 V 11 w(search)t -Fd(.)t(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Fe(9)0 1999 y Fc(history)p 142 1999 V -11 w(search)p 273 1999 V 12 w(delimiter)p 465 1999 V -11 w(chars)h Fd(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)20 b Fe(12)0 2057 y Fc(history)p 142 2057 -V 11 w(search)p 273 2057 V 12 w(pos)9 b Fd(.)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(.)23 b Fe(9)0 2115 y Fc(history)p -142 2115 V 11 w(search)p 273 2115 V 12 w(prefix)6 b Fd(.)t(.)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(.)19 b Fe(9)0 2173 y Fc(history)p -142 2173 V 11 w(set)p 213 2173 V 13 w(history)p 366 2173 -V 12 w(state)t Fd(.)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(.)17 b Fe(6)1015 -430 y Fc(history)p 1157 430 V 12 w(set)p 1229 430 V 13 -w(pos)5 b Fd(.)g(.)h(.)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(.)19 b Fe(8)1015 488 y Fc(history)p 1157 -488 V 12 w(subst)p 1269 488 V 12 w(char)k Fd(.)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(.)25 b Fe(11)1015 546 y Fc(history)p -1157 546 V 12 w(tokenize)9 b Fd(.)s(.)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(.)22 b Fe(11)1015 604 y Fc(history)p -1157 604 V 12 w(total)p 1269 604 V 12 w(bytes)9 b Fd(.)t(.)d(.)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(.)22 b Fe(8)1015 662 -y Fc(history)p 1157 662 V 12 w(truncate)p 1329 662 V -11 w(file)5 b Fd(.)g(.)h(.)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 Fe(10)1015 770 y Fm(M)1015 836 y Fc(max)p 1077 836 -V 13 w(input)p 1190 836 V 13 w(history)14 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(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)17 b Fe(11)1015 944 -y Fm(N)1015 1011 y Fc(next)p 1097 1011 V 13 w(history)7 -b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)20 b Fe(8)1015 1119 y Fm(P)1015 1185 -y Fc(previous)p 1177 1185 V 12 w(history)7 b Fd(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Fe(8)1015 -1293 y Fm(R)1015 1359 y Fc(read)p 1097 1359 V 13 w(history)7 -b Fd(.)s(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)20 b Fe(9)1015 1418 y Fc(read)p 1097 -1418 V 13 w(history)p 1250 1418 V 11 w(range)9 b Fd(.)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(.)h(.)f(.)g(.)g(.)g(.)23 b Fe(9)1015 1476 -y Fc(remove)p 1137 1476 V 12 w(history)t Fd(.)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(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 -b Fe(7)1015 1534 y Fc(replace)p 1157 1534 V 12 w(history)p -1309 1534 V 11 w(entry)6 b Fd(.)f(.)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(.) -f(.)19 b Fe(7)1015 1642 y Fm(S)1015 1708 y Fc(stifle)p -1137 1708 V 12 w(history)t Fd(.)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(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)17 b Fe(7)1015 1816 -y Fm(U)1015 1883 y Fc(unstifle)p 1177 1883 V 12 w(history)7 -b Fd(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Fe(7)1015 1941 y Fc(using)p 1117 1941 V 13 w(history)5 -b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)h(.)f(.)g(.)18 b Fe(6)1015 2049 y Fm(W)1015 2115 y -Fc(where)p 1117 2115 V 13 w(history)5 b Fd(.)s(.)h(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)18 -b Fe(8)1015 2173 y Fc(write)p 1117 2173 V 13 w(history)t -Fd(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)17 b Fe(10)p eop -18 19 bop 0 -58 a Fo(18)1474 b(GNU)15 b(History)g(Library)p -eop --1 20 bop 1937 -58 a Fo(i)0 183 y Fk(T)-7 b(able)15 b(of)g(Con)n(ten)n -(ts)0 358 y Fm(1)67 b(Using)22 b(History)h(In)n(teractiv)n(ely)15 -b Fb(.)e(.)c(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)f(.)h(.)g(.)37 b Fm(1)149 435 y Fo(1.1)45 -b(In)o(teractiv)o(e)15 b(History)g(Expansion)9 b Fa(.)g(.)e(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)23 b -Fo(1)299 498 y(1.1.1)44 b(Ev)o(en)o(t)14 b(Designators)d -Fa(.)d(.)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(1)299 560 y(1.1.2)44 b(W)l(ord)15 b(Designators)t -Fa(.)7 b(.)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(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)19 b Fo(2)299 622 y(1.1.3)44 b(Mo)q(di\014ers)15 -b 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(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)29 b Fo(2)0 -747 y Fm(2)67 b(Programming)23 b(with)g(GNU)f(History)11 -b Fb(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) -g(.)33 b Fm(5)149 825 y Fo(2.1)45 b(In)o(tro)q(duction)16 -b(to)f(History)9 b Fa(.)e(.)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(.)h(.)f(.)24 b Fo(5)149 -887 y(2.2)45 b(History)15 b(Storage)c Fa(.)c(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)26 b Fo(5)149 949 y(2.3)45 b(History)15 -b(F)l(unctions)c Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)26 -b Fo(6)299 1011 y(2.3.1)44 b(Initializing)18 b(History)d(and)h(State)e -(Managemen)o(t)g Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)29 b Fo(6)299 1074 y(2.3.2)44 b(History)15 b(List)h(Managemen)o -(t)d 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(.)g(.)f(.)h(.)f(.)h(.)28 -b Fo(7)299 1136 y(2.3.3)44 b(Information)15 b(Ab)q(out)g(the)h(History) -f(List)c Fa(.)d(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)g(.)f(.)h(.)f(.)h(.)25 b Fo(7)299 1198 y(2.3.4)44 -b(Mo)o(ving)15 b(Around)g(the)g(History)g(List)10 b Fa(.)f(.)e(.)h(.)f -(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)25 b Fo(8)299 1260 y(2.3.5)44 b(Searc)o(hing)16 -b(the)f(History)g(List)7 b Fa(.)h(.)g(.)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(.)21 b Fo(9)299 1323 y(2.3.6)44 b(Managing)15 b(the)g(History)g -(File)5 b Fa(.)k(.)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(.)20 -b Fo(9)299 1385 y(2.3.7)44 b(History)15 b(Expansion)8 -b Fa(.)g(.)g(.)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(.)23 b Fo(10)149 1447 y(2.4)45 b(History)15 b(V)l(ariables)5 -b Fa(.)k(.)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(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)20 b Fo(11)149 -1510 y(2.5)45 b(History)15 b(Programming)f(Example)6 -b Fa(.)j(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)21 -b Fo(12)0 1634 y Fm(App)r(endix)j(A)67 b(Concept)22 b(Index)7 -b Fb(.)k(.)f(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) -h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)29 b Fm(15)0 1774 y(App)r(endix)24 -b(B)67 b(F)-6 b(unction)25 b(and)e(V)-6 b(ariable)24 -b(Index)13 b Fb(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)35 -b Fm(17)p eop --2 21 bop 0 -58 a Fo(ii)1496 b(GNU)15 b(History)g(Library)p -eop end -userdict /end-hook known{end-hook}if
deleted file mode 100644 --- a/readline/doc/readline.0 +++ /dev/null @@ -1,1122 +0,0 @@ - - - -READLINE(3) READLINE(3) - - -NNAAMMEE - readline - get a line from a user with editing - -SSYYNNOOPPSSIISS - ##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 - deleted is saved for possible future retrieval (_y_a_n_k_i_n_g). - - - -GNU 1997 Feb 5 1 - - - - - -READLINE(3) READLINE(3) - - - 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 - expressed on the right hand side (that is, to insert the - text _>_&_o_u_t_p_u_t into the line). - - - - -GNU 1997 Feb 5 2 - - - - - -READLINE(3) READLINE(3) - - - 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 escape sequences is - - \\CC-- control prefix - - \\MM-- meta prefix - - \\ee an escape character - - \\\\ backslash - - \\"" literal " - - \\'' literal ' - - 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. Backslash will - quote any character in the macro text, including " and '. - - BBaasshh allows the current readline key bindings to be dis- - played or modified with the bbiinndd builtin command. The - editing mode may be switched during interactive use by - using the --oo option to the sseett builtin command. Other - programs using this library provide similar mechanisms. - The _i_n_p_u_t_r_c file may be edited and re-read if a program - does not provide any other means to incorporate new bind- - ings. - - VVaarriiaabblleess - Readline has variables that can be used to further cus- - tomize its behavior. A variable may be set in the _i_n_p_u_t_r_c - file with a statement of the form - - sseett _v_a_r_i_a_b_l_e_-_n_a_m_e _v_a_l_u_e - - Except where noted, readline variables can take the values - OOnn or OOffff. 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 - - - -GNU 1997 Feb 5 3 - - - - - -READLINE(3) READLINE(3) - - - 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--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. - 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. - kkeeyymmaapp ((eemmaaccss)) - Set the current readline keymap. The set of legal - keymap names is _e_m_a_c_s_, _e_m_a_c_s_-_s_t_a_n_d_a_r_d_, _e_m_a_c_s_-_m_e_t_a_, - _e_m_a_c_s_-_c_t_l_x_, _v_i_, _v_i_-_m_o_v_e_, _v_i_-_c_o_m_m_a_n_d, and _v_i_-_i_n_s_e_r_t. - _v_i is equivalent to _v_i_-_c_o_m_m_a_n_d; _e_m_a_c_s is equivalent - to _e_m_a_c_s_-_s_t_a_n_d_a_r_d. The default value is _e_m_a_c_s; the - value of eeddiittiinngg--mmooddee also affects the default - keymap. - mmaarrkk--ddiirreeccttoorriieess ((OOnn)) - If set to OOnn, completed directory names have a - - - -GNU 1997 Feb 5 4 - - - - - -READLINE(3) READLINE(3) - - - slash appended. - mmaarrkk--mmooddiiffiieedd--lliinneess ((OOffff)) - If set to OOnn, history lines that have been modified - are displayed with a preceding asterisk (**). - mmeettaa--ffllaagg ((OOffff)) - If set to OOnn, readline will enable eight-bit input - (that is, it will not strip the high bit from the - characters it reads), regardless of what the termi- - nal claims it can support. - oouuttppuutt--mmeettaa ((OOffff)) - If set to OOnn, readline will display characters with - the eighth bit set directly rather than as a meta- - prefixed escape sequence. - sshhooww--aallll--iiff--aammbbiigguuoouuss ((OOffff)) - This alters the default behavior of the completion - functions. If set to oonn, words which have more - than one possible completion cause the matches to - be listed immediately instead of ringing the bell. - vviissiibbllee--ssttaattss ((OOffff)) - If set to OOnn, a character denoting a file's type as - reported by ssttaatt(2) is appended to the filename - when listing possible completions. - - CCoonnddiittiioonnaall CCoonnssttrruuccttss - Readline implements a facility similar in spirit to the - conditional compilation features of the C preprocessor - which allows key bindings and variable settings to be per- - formed as the result of tests. There are three 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. - - - - - -GNU 1997 Feb 5 5 - - - - - -READLINE(3) READLINE(3) - - - 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 you saw in the previous example, - terminates an $$iiff command. - - $$eellssee Commands in this branch of the $$iiff directive are - executed if the test fails. - -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 Escape character is used - to terminate an incremental search. Control-J will also - terminate the search. Control-G will abort an incremental - search and restore the original line. When the search is - terminated, the history entry containing the search string - becomes the current line. To find other matching entries - in the history list, type Control-S or Control-R as appro- - priate. This will search backward or forward in the his- - tory for the next line matching the search string typed so - far. Any other key sequence bound to a readline command - will terminate the search and execute that command. For - instance, a _n_e_w_l_i_n_e will terminate the search and accept - the line, thereby executing the command from the history - list. - - Non-incremental searches read the entire search string - before starting to search for matching history lines. The - search string may be typed by the user or part of the con- - tents of the current line. - - - - - -GNU 1997 Feb 5 6 - - - - - -READLINE(3) READLINE(3) - - -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. - ffoorrwwaarrdd--wwoorrdd ((MM--ff)) - Move forward to the end of the next word. Words - are composed of alphanumeric characters (letters - and digits). - bbaacckkwwaarrdd--wwoorrdd ((MM--bb)) - Move back to the start of this, or the previous, - word. Words are composed of alphanumeric charac- - ters (letters and digits). - cclleeaarr--ssccrreeeenn ((CC--ll)) - Clear the screen leaving the current line at the - top of the screen. With an argument, refresh the - current line without clearing the screen. - 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. - - - -GNU 1997 Feb 5 7 - - - - - -READLINE(3) READLINE(3) - - - This is an incremental search. - nnoonn--iinnccrreemmeennttaall--rreevveerrssee--sseeaarrcchh--hhiissttoorryy ((MM--pp)) - Search backward through the history starting at the - current line using a non-incremental search for a - string supplied by the user. - nnoonn--iinnccrreemmeennttaall--ffoorrwwaarrdd--sseeaarrcchh--hhiissttoorryy ((MM--nn)) - Search forward through the history using a non- - incremental search for a string supplied by the - user. - hhiissttoorryy--sseeaarrcchh--ffoorrwwaarrdd - Search forward through the history for the string - of characters between the start of the current line - and the current cursor position (the _p_o_i_n_t). This - is a non-incremental search. - hhiissttoorryy--sseeaarrcchh--bbaacckkwwaarrdd - Search backward through the history for the string - of characters between the start of the current line - and the point. This is a non-incremental search. - yyaannkk--nntthh--aarrgg ((MM--CC--yy)) - Insert the first argument to the previous command - (usually the second word on the previous line) at - point (the current cursor position). With an argu- - ment _n, insert the _nth word from the previous com- - mand (the words in the previous command begin with - word 0). A negative argument inserts the _nth word - from the end of the previous command. - 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. - - 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 CC--dd, then return EEOOFF. - bbaacckkwwaarrdd--ddeelleettee--cchhaarr ((RRuubboouutt)) - Delete the character behind the cursor. When given - a numeric argument, save the deleted text on the - kill ring. - qquuootteedd--iinnsseerrtt ((CC--qq,, CC--vv)) - Add the next character that you type to the line - 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 - - - -GNU 1997 Feb 5 8 - - - - - -READLINE(3) READLINE(3) - - - arguments 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. - uuppccaassee--wwoorrdd ((MM--uu)) - Uppercase the current (or following) word. With a - negative argument, do the previous word, but do not - move point. - ddoowwnnccaassee--wwoorrdd ((MM--ll)) - Lowercase the current (or following) word. With a - negative argument, do the previous word, but do not - move point. - ccaappiittaalliizzee--wwoorrdd ((MM--cc)) - Capitalize the current (or following) word. With a - negative argument, do 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. - 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. - ccooppyy--ffoorrwwaarrdd--wwoorrdd - Copy the word following point to the kill buffer. - - - -GNU 1997 Feb 5 9 - - - - - -READLINE(3) READLINE(3) - - - yyaannkk ((CC--yy)) - Yank the top of the kill ring into the buffer at - the cursor. - 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 ppoossssii-- - bbllee--ccoommpplleettiioonnss. - - KKeeyybbooaarrdd MMaaccrrooss - ssttaarrtt--kkbbdd--mmaaccrroo ((CC--xx (()) - Begin saving the characters typed into the current - keyboard macro. - - - - -GNU 1997 Feb 5 10 - - - - - -READLINE(3) READLINE(3) - - - 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 - typing 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 - 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 - - - -GNU 1997 Feb 5 11 - - - - - -READLINE(3) READLINE(3) - - - comment. - gglloobb--eexxppaanndd--wwoorrdd ((CC--xx **)) - The word before point is treated as a pattern for - pathname expansion, and the list of matching file - names is inserted, replacing the word. - gglloobb--lliisstt--eexxppaannssiioonnss ((CC--xx gg)) - The list of expansions that would have been gener- - ated by gglloobb--eexxppaanndd--wwoorrdd is inserted into the line, - replacing the word before point. - 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 vari- - able). - - EEmmaaccss MMooddee - Emacs Standard bindings - - "C-@" set-mark - - - -GNU 1997 Feb 5 12 - - - - - -READLINE(3) READLINE(3) - - - "C-A" beginning-of-line - "C-B" backward-char - "C-D" delete-char - "C-E" end-of-line - "C-F" forward-char - "C-G" abort - "C-H" backward-delete-char - "C-I" complete - "C-J" accept-line - "C-K" kill-line - "C-L" clear-screen - "C-M" accept-line - "C-N" next-history - "C-P" previous-history - "C-Q" quoted-insert - "C-R" reverse-search-history - "C-S" forward-search-history - "C-T" transpose-chars - "C-U" unix-line-discard - "C-V" quoted-insert - "C-W" unix-word-rubout - "C-Y" yank - "C-]" character-search - "C-_" undo - " " to "/" self-insert - "0" to "9" self-insert - ":" to "~" self-insert - "C-?" backward-delete-char - - Emacs Meta bindings - - "M-C-G" abort - "M-C-H" backward-kill-word - "M-C-I" tab-insert - "M-C-J" vi-editing-mode - "M-C-M" vi-editing-mode - "M-C-R" revert-line - "M-C-Y" yank-nth-arg - "M-C-[" complete - "M-C-]" character-search-backward - "M-space" set-mark - "M-#" insert-comment - "M-&" tilde-expand - "M-*" insert-completions - "M--" digit-argument - "M-." yank-last-arg - "M-0" digit-argument - "M-1" digit-argument - "M-2" digit-argument - "M-3" digit-argument - "M-4" digit-argument - "M-5" digit-argument - "M-6" digit-argument - "M-7" digit-argument - - - -GNU 1997 Feb 5 13 - - - - - -READLINE(3) READLINE(3) - - - "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 - "C-Y" yank - "C-[" vi-movement-mode - "C-_" undo - " " to "~" self-insert - "C-?" backward-delete-char - - - - -GNU 1997 Feb 5 14 - - - - - -READLINE(3) READLINE(3) - - - 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 - "T" vi-char-search - "U" revert-line - "W" vi-next-word - "X" backward-delete-char - "Y" vi-yank-to - "\" vi-complete - - - -GNU 1997 Feb 5 15 - - - - - -READLINE(3) READLINE(3) - - - "^" 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 (primary author) - bfox@ai.MIT.Edu - - Chet Ramey, Case Western Reserve University - chet@ins.CWRU.Edu - -BBUUGG RREEPPOORRTTSS - If you find a bug in rreeaaddlliinnee,, you should report it. But - first, you should make sure that it really is a bug, and - that it appears in the latest version of the rreeaaddlliinnee - library that you have. - - Once you have determined that a bug actually exists, mail - a bug report to _b_u_g_-_r_e_a_d_l_i_n_e@_p_r_e_p_._a_i_._M_I_T_._E_d_u. 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@_p_r_e_p_._a_i_._M_I_T_._E_d_u or posted to the Usenet newsgroup - - - -GNU 1997 Feb 5 16 - - - - - -READLINE(3) READLINE(3) - - - 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 1997 Feb 5 17 - -
deleted file mode 100644 index 64449db5da229a68cc21b7173cc580ebe036fb79..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 GIT binary patch literal 0 Hc$@<O00001
deleted file mode 100644 --- a/readline/doc/readline.html +++ /dev/null @@ -1,3363 +0,0 @@ -<HTML> -<HEAD> -<!-- This HTML file has been created by texi2html 1.51 - from /usr/homes/chet/src/bash/readline-2.1-beta2/doc/rlman.texinfo on 22 May 1997 --> - -<TITLE>GNU Readline Library</TITLE> -</HEAD> -<BODY> -<H1>GNU Readline Library</H1> -<H2>Edition 2.1, for <CODE>Readline Library</CODE> Version 2.1.</H2> -<H2>March 1996</H2> -<ADDRESS>Brian Fox, Free Software Foundation</ADDRESS> -<ADDRESS>Chet Ramey, Case Western Reserve University</ADDRESS> -<P> -<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> -675 Massachusetts Avenue, <BR> -Cambridge, MA 02139 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 Foundation. - -</P> -<P> -Copyright (C) 1989, 1991 Free Software Foundation, Inc. - -</P> - - - -<H1><A NAME="SEC1" HREF="readline_toc.html#TOC1">Command Line Editing</A></H1> - -<P> -This chapter describes the basic features of the GNU -command line editing interface. - -</P> - - - -<H2><A NAME="SEC2" HREF="readline_toc.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. If you do not have 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 <STRONG>metafying</STRONG> 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 <STRONG>metafying</STRONG> <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 -(@xref{Readline Init File}). - -</P> - - -<H2><A NAME="SEC3" HREF="readline_toc.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> - - - -<H3><A NAME="SEC4" HREF="readline_toc.html#TOC4">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#SEC5">Conditional Init Constructs</A>). Other lines -denote variable settings and key bindings. - -</P> -<DL COMPACT> - -<DT>Variable Settings -<DD> -You can change the state of a few variables in Readline by -using the <CODE>set</CODE> command within the init file. Here is how you -would specify that you wish to use <CODE>vi</CODE> line editing commands: - - -<PRE> -set editing-mode vi -</PRE> - -Right now, there are only a few variables which can be set; -so few, in fact, that we just list them here: - -<DL COMPACT> - -<DT><CODE>bell-style</CODE> -<DD> -<A NAME="IDX2"></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="IDX3"></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-query-items</CODE> -<DD> -<A NAME="IDX4"></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="IDX5"></A> -If set to <SAMP>`on'</SAMP>, Readline will convert characters with the -eigth bit set to an ASCII key sequence by stripping the eigth -bit and prepending 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="IDX6"></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="IDX7"></A> -The <CODE>editing-mode</CODE> variable controls which editing mode you are -using. 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="IDX8"></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="IDX9"></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="IDX10"></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 that you edit 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>keymap</CODE> -<DD> -<A NAME="IDX11"></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="IDX12"></A> -This variable, when set to <SAMP>`on'</SAMP>, says 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>input-meta</CODE> -<DD> -<A NAME="IDX13"></A> -<A NAME="IDX14"></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>output-meta</CODE> -<DD> -<A NAME="IDX15"></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>show-all-if-ambiguous</CODE> -<DD> -<A NAME="IDX16"></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="IDX17"></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 have to know the name of the command that you -want to change. The following pages contain tables of the command name, -the default keybinding, 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, <SAMP>`C-u'</SAMP> is bound to the function -<CODE>universal-argument</CODE>, and <SAMP>`C-o'</SAMP> 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, <SAMP>`C-u'</SAMP> is bound to the function -<CODE>universal-argument</CODE> (just as it was in the first example), -<SAMP>`C-x C-r'</SAMP> is bound to the function <CODE>re-read-init-file</CODE>, and -<SAMP>`ESC [ 1 1 ~'</SAMP> is bound to insert the text <SAMP>`Function Key 1'</SAMP>. -The following 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> -<DT><CODE><KBD>\'</KBD></CODE> -<DD> -<KBD>'</KBD> -</DL> - -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. Backslash -will quote any 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> -</DL> - - - -<H3><A NAME="SEC5" HREF="readline_toc.html#TOC5">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 three 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 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 you saw 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. -</DL> - - - -<H3><A NAME="SEC6" HREF="readline_toc.html#TOC6">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. -# -# 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="SEC7" HREF="readline_toc.html#TOC7">Bindable Readline Commands</A></H2> - -<P> -This section describes Readline commands that may be bound to key -sequences. - -</P> - - -<H3><A NAME="SEC8" HREF="readline_toc.html#TOC8">Commands For Moving</A></H3> -<DL COMPACT> - -<DT><CODE>beginning-of-line (C-a)</CODE> -<DD> -<A NAME="IDX18"></A> -Move to the start of the current line. - -<DT><CODE>end-of-line (C-e)</CODE> -<DD> -<A NAME="IDX19"></A> -Move to the end of the line. - -<DT><CODE>forward-char (C-f)</CODE> -<DD> -<A NAME="IDX20"></A> -Move forward a character. - -<DT><CODE>backward-char (C-b)</CODE> -<DD> -<A NAME="IDX21"></A> -Move back a character. - -<DT><CODE>forward-word (M-f)</CODE> -<DD> -<A NAME="IDX22"></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="IDX23"></A> -Move back to the start of this, or the previous, word. Words are -composed of letters and digits. - -<DT><CODE>clear-screen (C-l)</CODE> -<DD> -<A NAME="IDX24"></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="IDX25"></A> -Refresh the current line. By default, this is unbound. - -</DL> - - - -<H3><A NAME="SEC9" HREF="readline_toc.html#TOC9">Commands For Manipulating The History</A></H3> - -<DL COMPACT> - -<DT><CODE>accept-line (Newline, Return)</CODE> -<DD> -<A NAME="IDX26"></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="IDX27"></A> -Move `up' through the history list. - -<DT><CODE>next-history (C-n)</CODE> -<DD> -<A NAME="IDX28"></A> -Move `down' through the history list. - -<DT><CODE>beginning-of-history (M-<)</CODE> -<DD> -<A NAME="IDX29"></A> -Move to the first line in the history. - -<DT><CODE>end-of-history (M->)</CODE> -<DD> -<A NAME="IDX30"></A> -Move to the end of the input history, i.e., the line you are entering. - -<DT><CODE>reverse-search-history (C-r)</CODE> -<DD> -<A NAME="IDX31"></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="IDX32"></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="IDX33"></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="IDX34"></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="IDX35"></A> -Search forward through the history for the string of characters -between the start of the current line and the current cursor -position (the `point'). This is a non-incremental search. By -default, this command is unbound. - -<DT><CODE>history-search-backward ()</CODE> -<DD> -<A NAME="IDX36"></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="IDX37"></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="IDX38"></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>. - -</DL> - - - -<H3><A NAME="SEC10" HREF="readline_toc.html#TOC10">Commands For Changing Text</A></H3> - -<DL COMPACT> - -<DT><CODE>delete-char (C-d)</CODE> -<DD> -<A NAME="IDX39"></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 <KBD>C-d</KBD>, then return <CODE>EOF</CODE>. - -<DT><CODE>backward-delete-char (Rubout)</CODE> -<DD> -<A NAME="IDX40"></A> -Delete the character behind the cursor. A numeric arg says to kill -the characters instead of deleting them. - -<DT><CODE>quoted-insert (C-q, C-v)</CODE> -<DD> -<A NAME="IDX41"></A> -Add the next character that you type 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="IDX42"></A> -Insert a tab character. - -<DT><CODE>self-insert (a, b, A, 1, !, ...)</CODE> -<DD> -<A NAME="IDX43"></A> -Insert yourself. - -<DT><CODE>transpose-chars (C-t)</CODE> -<DD> -<A NAME="IDX44"></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 argumentss don't work. - -<DT><CODE>transpose-words (M-t)</CODE> -<DD> -<A NAME="IDX45"></A> -Drag the word behind the cursor past the word in front of the cursor -moving the cursor over that word as well. - -<DT><CODE>upcase-word (M-u)</CODE> -<DD> -<A NAME="IDX46"></A> -Uppercase the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -<DT><CODE>downcase-word (M-l)</CODE> -<DD> -<A NAME="IDX47"></A> -Lowercase the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -<DT><CODE>capitalize-word (M-c)</CODE> -<DD> -<A NAME="IDX48"></A> -Capitalize the current (or following) word. With a negative argument, -do the previous word, but do not move the cursor. - -</DL> - - - -<H3><A NAME="SEC11" HREF="readline_toc.html#TOC11">Killing And Yanking</A></H3> - -<DL COMPACT> - -<DT><CODE>kill-line (C-k)</CODE> -<DD> -<A NAME="IDX49"></A> -Kill the text from the current cursor position to the end of the line. - -<DT><CODE>backward-kill-line (C-x Rubout)</CODE> -<DD> -<A NAME="IDX50"></A> -Kill backward to the beginning of the line. - -<DT><CODE>unix-line-discard (C-u)</CODE> -<DD> -<A NAME="IDX51"></A> -Kill backward from the cursor to the beginning of the current line. -Save the killed text on the kill-ring. - -<DT><CODE>kill-whole-line ()</CODE> -<DD> -<A NAME="IDX52"></A> -Kill all characters on the current line, no matter where the -cursor is. By default, this is unbound. - -<DT><CODE>kill-word (M-d)</CODE> -<DD> -<A NAME="IDX53"></A> -Kill from the cursor to the end of the current word, or if between -words, to the end of the next word. Word boundaries are the same -as <CODE>forward-word</CODE>. - -<DT><CODE>backward-kill-word (M-DEL)</CODE> -<DD> -<A NAME="IDX54"></A> -Kill the word behind the cursor. Word boundaries are the same -as <CODE>backward-word</CODE>. - -<DT><CODE>unix-word-rubout (C-w)</CODE> -<DD> -<A NAME="IDX55"></A> -Kill the word behind the cursor, 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="IDX56"></A> -Delete all spaces and tabs around point. By default, this is unbound. - -<DT><CODE>kill-region ()</CODE> -<DD> -<A NAME="IDX57"></A> -Kill the text between the point and the <EM>mark</EM> (saved -cursor position. This text is referred to as the <VAR>region</VAR>. -By default, this command is unbound. - -<DT><CODE>copy-region-as-kill ()</CODE> -<DD> -<A NAME="IDX58"></A> -Copy the text in the region to the kill buffer, so you can yank it -right away. By default, this command is unbound. - -<DT><CODE>copy-backward-word ()</CODE> -<DD> -<A NAME="IDX59"></A> -Copy the word before point to the kill buffer. -By default, this command is unbound. - -<DT><CODE>copy-forward-word ()</CODE> -<DD> -<A NAME="IDX60"></A> -Copy the word following point to the kill buffer. -By default, this command is unbound. - -<DT><CODE>yank (C-y)</CODE> -<DD> -<A NAME="IDX61"></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="IDX62"></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="SEC12" HREF="readline_toc.html#TOC12">Specifying Numeric Arguments</A></H3> -<DL COMPACT> - -<DT><CODE>digit-argument (M-0, M-1, ... M--)</CODE> -<DD> -<A NAME="IDX63"></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="IDX64"></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="SEC13" HREF="readline_toc.html#TOC13">Letting Readline Type For You</A></H3> - -<DL COMPACT> - -<DT><CODE>complete (TAB)</CODE> -<DD> -<A NAME="IDX65"></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="IDX66"></A> -List the possible completions of the text before the cursor. - -<DT><CODE>insert-completions (M-*)</CODE> -<DD> -<A NAME="IDX67"></A> -Insert all completions of the text before point that would have -been generated by <CODE>possible-completions</CODE>. - -</DL> - - - -<H3><A NAME="SEC14" HREF="readline_toc.html#TOC14">Keyboard Macros</A></H3> -<DL COMPACT> - -<DT><CODE>start-kbd-macro (C-x ()</CODE> -<DD> -<A NAME="IDX68"></A> -Begin saving the characters typed into the current keyboard macro. - -<DT><CODE>end-kbd-macro (C-x ))</CODE> -<DD> -<A NAME="IDX69"></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="IDX70"></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="SEC15" HREF="readline_toc.html#TOC15">Some Miscellaneous Commands</A></H3> -<DL COMPACT> - -<DT><CODE>re-read-init-file (C-x C-r)</CODE> -<DD> -<A NAME="IDX71"></A> -Read in the contents of the inputrc file, and incorporate -any bindings or variable assignments found there. - -<DT><CODE>abort (C-g)</CODE> -<DD> -<A NAME="IDX72"></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="IDX73"></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="IDX74"></A> -Make the next character that you type be metafied. This is for people -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="IDX75"></A> -Incremental undo, separately remembered for each line. - -<DT><CODE>revert-line (M-r)</CODE> -<DD> -<A NAME="IDX76"></A> -Undo all changes made to this line. This is like typing the <CODE>undo</CODE> -command enough times to get back to the beginning. - -<DT><CODE>tilde-expand (M-~)</CODE> -<DD> -<A NAME="IDX77"></A> -Perform tilde expansion on the current word. - -<DT><CODE>set-mark (C-@)</CODE> -<DD> -<A NAME="IDX78"></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="IDX79"></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="IDX80"></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="IDX81"></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="IDX82"></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="IDX83"></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="IDX84"></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="IDX85"></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="SEC16" HREF="readline_toc.html#TOC16">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="SEC17" HREF="readline_toc.html#TOC17">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> - - - -<H2><A NAME="SEC18" HREF="readline_toc.html#TOC18">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="IDX86"></A> -<A NAME="IDX87"></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 <STRONG>history</STRONG> 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#SEC34">Custom Completers</A>). - -</P> - - -<H2><A NAME="SEC19" HREF="readline_toc.html#TOC19">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> - - - -<H3><A NAME="SEC20" HREF="readline_toc.html#TOC20">The Function Type</A></H3> - -<P> -For readabilty, we declare a new type of object, called -<STRONG>Function</STRONG>. 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="SEC21" HREF="readline_toc.html#TOC21">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="SEC22" HREF="readline_toc.html#TOC22">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="IDX88"></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#SEC28">Allowing Undoing</A>. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> int <B>rl_point</B> -<DD><A NAME="IDX89"></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="IDX90"></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="IDX91"></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="IDX92"></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="IDX93"></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> char * <B>rl_prompt</B> -<DD><A NAME="IDX94"></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> char * <B>rl_library_version</B> -<DD><A NAME="IDX95"></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="IDX96"></A> -The terminal type, used for initialization. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_readline_name</B> -<DD><A NAME="IDX97"></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#SEC5">Conditional Init Constructs</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> FILE * <B>rl_instream</B> -<DD><A NAME="IDX98"></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="IDX99"></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="IDX100"></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_event_hook</B> -<DD><A NAME="IDX101"></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="IDX102"></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#SEC31">Utility Functions</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> VFunction * <B>rl_redisplay_function</B> -<DD><A NAME="IDX103"></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#SEC29">Redisplay</A>). -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B> -<DD><A NAME="IDX104"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC25">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="IDX105"></A> -This variable is set to the keymap (see section <A HREF="readline.html#SEC25">Selecting a Keymap</A>) in which the -last key binding occurred. -</DL> - -</P> - - -<H2><A NAME="SEC23" HREF="readline_toc.html#TOC23">Readline Convenience Functions</A></H2> - - - -<H3><A NAME="SEC24" HREF="readline_toc.html#TOC24">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="IDX106"></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="SEC25" HREF="readline_toc.html#TOC25">Selecting a Keymap</A></H3> - -<P> -Key bindings take place on a <STRONG>keymap</STRONG>. 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="IDX107"></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="IDX108"></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="IDX109"></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="IDX110"></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="IDX111"></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="IDX112"></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="IDX113"></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 (@xref{Readline Init File}). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I> -<DD><A NAME="IDX114"></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 (@xref{Readline Init File}). -</DL> - -</P> - - -<H3><A NAME="SEC26" HREF="readline_toc.html#TOC26">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> -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="IDX115"></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="IDX116"></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="IDX117"></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="IDX118"></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_generic_bind</B> <I>(int type, char *keyseq, char *data, Keymap map)</I> -<DD><A NAME="IDX119"></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="IDX120"></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 -(@xref{Readline Init File}). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(char *filename)</I> -<DD><A NAME="IDX121"></A> -Read keybindings and variable assignments from <VAR>filename</VAR> -(@xref{Readline Init File}). -</DL> - -</P> - - -<H3><A NAME="SEC27" HREF="readline_toc.html#TOC27">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="IDX122"></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="IDX123"></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="IDX124"></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="IDX125"></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="IDX126"></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="IDX127"></A> -Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>. -</DL> - -</P> - - -<H3><A NAME="SEC28" HREF="readline_toc.html#TOC28">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="IDX128"></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="IDX129"></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="IDX130"></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="IDX131"></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="IDX132"></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="IDX133"></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="SEC29" HREF="readline_toc.html#TOC29">Redisplay</A></H3> - -<P> -<DL> -<DT><U>Function:</U> void <B>rl_redisplay</B> <I>()</I> -<DD><A NAME="IDX134"></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="IDX135"></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="IDX136"></A> -Tell the update routines 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_reset_line_state</B> <I>()</I> -<DD><A NAME="IDX137"></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="IDX138"></A> -The arguments are a string as would be supplied to <CODE>printf</CODE>. The -resulting string is displayed in the <STRONG>echo area</STRONG>. 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="IDX139"></A> -Clear the message in the echo area. -</DL> - -</P> - - -<H3><A NAME="SEC30" HREF="readline_toc.html#TOC30">Modifying Text</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_insert_text</B> <I>(char *text)</I> -<DD><A NAME="IDX140"></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="IDX141"></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="IDX142"></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="IDX143"></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="SEC31" HREF="readline_toc.html#TOC31">Utility Functions</A></H3> - -<P> -<DL> -<DT><U>Function:</U> int <B>rl_read_key</B> <I>()</I> -<DD><A NAME="IDX144"></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#SEC22">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="IDX145"></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="IDX146"></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> rl_extend_line_buffer <B>(int</B> <I>len)</I> -<DD><A NAME="IDX147"></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="IDX148"></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="IDX149"></A> -Reinitialize Readline's idea of the terminal settings using -<VAR>terminal_name</VAR> as the terminal type (e.g., <CODE>vt100</CODE>). -</DL> - -</P> -<P> -<DL> -<DT><U>Function:</U> int <B>alphabetic</B> <I>(int c)</I> -<DD><A NAME="IDX150"></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="IDX151"></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="IDX152"></A> -Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>. -</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="IDX153"></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="IDX154"></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="IDX155"></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="IDX156"></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="IDX157"></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="IDX158"></A> -If <VAR>c</VAR> is a number, return the value it represents. -</DL> - -</P> - - -<H3><A NAME="SEC32" HREF="readline_toc.html#TOC32">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="IDX159"></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="IDX160"></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="IDX161"></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="SEC33" HREF="readline_toc.html#TOC33">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="SEC34" HREF="readline_toc.html#TOC34">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> - - - -<H3><A NAME="SEC35" HREF="readline_toc.html#TOC35">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 -<STRONG>generator</STRONG> 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="IDX162"></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="IDX163"></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="SEC36" HREF="readline_toc.html#TOC36">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="IDX164"></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="IDX165"></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="IDX166"></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="IDX167"></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="IDX168"></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="IDX169"></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="IDX170"></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="SEC37" HREF="readline_toc.html#TOC37">Completion Variables</A></H3> - -<P> -<DL> -<DT><U>Variable:</U> Function * <B>rl_completion_entry_function</B> -<DD><A NAME="IDX171"></A> -A pointer to the generator function for <CODE>completion_matches ()</CODE>. -<CODE>NULL</CODE> means to use <CODE>filename_entry_function ()</CODE>, the default -filename completer. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> CPPFunction * <B>rl_attempted_completion_function</B> -<DD><A NAME="IDX172"></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="IDX173"></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="IDX174"></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="IDX175"></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="IDX176"></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="IDX177"></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="IDX178"></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="IDX179"></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="IDX180"></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="IDX181"></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 empty. -</DL> - -</P> -<P> -<DL> -<DT><U>Variable:</U> char * <B>rl_special_prefixes</B> -<DD><A NAME="IDX182"></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="IDX183"></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="IDX184"></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="IDX185"></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="IDX186"></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="IDX187"></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="IDX188"></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="IDX189"></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> - - -<H3><A NAME="SEC38" HREF="readline_toc.html#TOC38">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="SEC39" HREF="readline_toc.html#TOC39">Concept Index</A></H1> -<P> -<H2>i</H2> -<DIR> -<LI><A HREF="readline.html#IDX1">interaction, readline</A> -</DIR> -<H2>r</H2> -<DIR> -<LI><A HREF="readline.html#IDX87">readline, function</A> -</DIR> - -</P> - - -<H1><A NAME="SEC40" HREF="readline_toc.html#TOC40">Function and Variable Index</A></H1> -<P> -<H2>(</H2> -<DIR> -<LI><A HREF="readline.html#IDX147">(int</A> -</DIR> -<H2>a</H2> -<DIR> -<LI><A HREF="readline.html#IDX72">abort (C-g)</A> -<LI><A HREF="readline.html#IDX26">accept-line (Newline, Return)</A> -<LI><A HREF="readline.html#IDX150">alphabetic</A> -</DIR> -<H2>b</H2> -<DIR> -<LI><A HREF="readline.html#IDX21">backward-char (C-b)</A> -<LI><A HREF="readline.html#IDX40">backward-delete-char (Rubout)</A> -<LI><A HREF="readline.html#IDX50">backward-kill-line (C-x Rubout)</A> -<LI><A HREF="readline.html#IDX54">backward-kill-word (M-DEL)</A> -<LI><A HREF="readline.html#IDX23">backward-word (M-b)</A> -<LI><A HREF="readline.html#IDX29">beginning-of-history (M-&#60;)</A> -<LI><A HREF="readline.html#IDX18">beginning-of-line (C-a)</A> -<LI><A HREF="readline.html#IDX2">bell-style</A> -</DIR> -<H2>c</H2> -<DIR> -<LI><A HREF="readline.html#IDX70">call-last-kbd-macro (C-x e)</A> -<LI><A HREF="readline.html#IDX48">capitalize-word (M-c)</A> -<LI><A HREF="readline.html#IDX80">character-search (C-])</A> -<LI><A HREF="readline.html#IDX81">character-search-backward (M-C-])</A> -<LI><A HREF="readline.html#IDX24">clear-screen (C-l)</A> -<LI><A HREF="readline.html#IDX3">comment-begin</A> -<LI><A HREF="readline.html#IDX65">complete (TAB)</A> -<LI><A HREF="readline.html#IDX4">completion-query-items</A> -<LI><A HREF="readline.html#IDX168">completion_matches</A> -<LI><A HREF="readline.html#IDX5">convert-meta</A> -<LI><A HREF="readline.html#IDX59">copy-backward-word ()</A> -<LI><A HREF="readline.html#IDX60">copy-forward-word ()</A> -<LI><A HREF="readline.html#IDX58">copy-region-as-kill ()</A> -</DIR> -<H2>d</H2> -<DIR> -<LI><A HREF="readline.html#IDX39">delete-char (C-d)</A> -<LI><A HREF="readline.html#IDX56">delete-horizontal-space ()</A> -<LI><A HREF="readline.html#IDX63">digit-argument (M-0, M-1, ... M--)</A> -<LI><A HREF="readline.html#IDX155">digit_p</A> -<LI><A HREF="readline.html#IDX158">digit_value</A> -<LI><A HREF="readline.html#IDX152">ding</A> -<LI><A HREF="readline.html#IDX6">disable-completion</A> -<LI><A HREF="readline.html#IDX73">do-uppercase-version (M-a, M-b, M-<VAR>x</VAR>, ...)</A> -<LI><A HREF="readline.html#IDX47">downcase-word (M-l)</A> -<LI><A HREF="readline.html#IDX83">dump-functions ()</A> -<LI><A HREF="readline.html#IDX85">dump-macros ()</A> -<LI><A HREF="readline.html#IDX84">dump-variables ()</A> -</DIR> -<H2>e</H2> -<DIR> -<LI><A HREF="readline.html#IDX7">editing-mode</A> -<LI><A HREF="readline.html#IDX8">enable-keypad</A> -<LI><A HREF="readline.html#IDX69">end-kbd-macro (C-x ))</A> -<LI><A HREF="readline.html#IDX30">end-of-history (M-&#62;)</A> -<LI><A HREF="readline.html#IDX19">end-of-line (C-e)</A> -<LI><A HREF="readline.html#IDX79">exchange-point-and-mark (C-x C-x)</A> -<LI><A HREF="readline.html#IDX9">expand-tilde</A> -</DIR> -<H2>f</H2> -<DIR> -<LI><A HREF="readline.html#IDX169">filename_completion_function</A> -<LI><A HREF="readline.html#IDX20">forward-char (C-f)</A> -<LI><A HREF="readline.html#IDX32">forward-search-history (C-s)</A> -<LI><A HREF="readline.html#IDX22">forward-word (M-f)</A> -<LI><A HREF="readline.html#IDX131">free_undo_list</A> -</DIR> -<H2>h</H2> -<DIR> -<LI><A HREF="readline.html#IDX36">history-search-backward ()</A> -<LI><A HREF="readline.html#IDX35">history-search-forward ()</A> -<LI><A HREF="readline.html#IDX10">horizontal-scroll-mode</A> -</DIR> -<H2>i</H2> -<DIR> -<LI><A HREF="readline.html#IDX13">input-meta</A> -<LI><A HREF="readline.html#IDX82">insert-comment (M-#)</A> -<LI><A HREF="readline.html#IDX67">insert-completions (M-*)</A> -</DIR> -<H2>k</H2> -<DIR> -<LI><A HREF="readline.html#IDX11">keymap</A> -<LI><A HREF="readline.html#IDX49">kill-line (C-k)</A> -<LI><A HREF="readline.html#IDX57">kill-region ()</A> -<LI><A HREF="readline.html#IDX52">kill-whole-line ()</A> -<LI><A HREF="readline.html#IDX53">kill-word (M-d)</A> -</DIR> -<H2>l</H2> -<DIR> -<LI><A HREF="readline.html#IDX154">lowercase_p</A> -</DIR> -<H2>m</H2> -<DIR> -<LI><A HREF="readline.html#IDX12">mark-modified-lines</A> -<LI><A HREF="readline.html#IDX14">meta-flag</A> -</DIR> -<H2>n</H2> -<DIR> -<LI><A HREF="readline.html#IDX28">next-history (C-n)</A> -<LI><A HREF="readline.html#IDX34">non-incremental-forward-search-history (M-n)</A> -<LI><A HREF="readline.html#IDX33">non-incremental-reverse-search-history (M-p)</A> -<LI><A HREF="readline.html#IDX151">numeric</A> -</DIR> -<H2>o</H2> -<DIR> -<LI><A HREF="readline.html#IDX15">output-meta</A> -</DIR> -<H2>p</H2> -<DIR> -<LI><A HREF="readline.html#IDX66">possible-completions (M-?)</A> -<LI><A HREF="readline.html#IDX74">prefix-meta (ESC)</A> -<LI><A HREF="readline.html#IDX27">previous-history (C-p)</A> -</DIR> -<H2>q</H2> -<DIR> -<LI><A HREF="readline.html#IDX41">quoted-insert (C-q, C-v)</A> -</DIR> -<H2>r</H2> -<DIR> -<LI><A HREF="readline.html#IDX71">re-read-init-file (C-x C-r)</A> -<LI><A HREF="readline.html#IDX86">readline</A> -<LI><A HREF="readline.html#IDX25">redraw-current-line ()</A> -<LI><A HREF="readline.html#IDX31">reverse-search-history (C-r)</A> -<LI><A HREF="readline.html#IDX76">revert-line (M-r)</A> -<LI><A HREF="readline.html#IDX106">rl_add_defun</A> -<LI><A HREF="readline.html#IDX130">rl_add_undo</A> -<LI><A HREF="readline.html#IDX172">rl_attempted_completion_function</A> -<LI><A HREF="readline.html#IDX178">rl_basic_quote_characters</A> -<LI><A HREF="readline.html#IDX177">rl_basic_word_break_characters</A> -<LI><A HREF="readline.html#IDX128">rl_begin_undo_group</A> -<LI><A HREF="readline.html#IDX115">rl_bind_key</A> -<LI><A HREF="readline.html#IDX116">rl_bind_key_in_map</A> -<LI><A HREF="readline.html#IDX105">rl_binding_keymap</A> -<LI><A HREF="readline.html#IDX159">rl_callback_handler_install</A> -<LI><A HREF="readline.html#IDX161">rl_callback_handler_remove</A> -<LI><A HREF="readline.html#IDX160">rl_callback_read_char</A> -<LI><A HREF="readline.html#IDX175">rl_char_is_quoted_p</A> -<LI><A HREF="readline.html#IDX139">rl_clear_message</A> -<LI><A HREF="readline.html#IDX162">rl_complete</A>, <A HREF="rlman.html#IDX165">rl_complete</A> -<LI><A HREF="readline.html#IDX164">rl_complete_internal</A> -<LI><A HREF="readline.html#IDX180">rl_completer_quote_characters</A> -<LI><A HREF="readline.html#IDX179">rl_completer_word_break_characters</A> -<LI><A HREF="readline.html#IDX183">rl_completion_append_character</A> -<LI><A HREF="readline.html#IDX163">rl_completion_entry_function</A>, <A HREF="rlman.html#IDX171">rl_completion_entry_function</A> -<LI><A HREF="readline.html#IDX176">rl_completion_query_items</A> -<LI><A HREF="readline.html#IDX108">rl_copy_keymap</A> -<LI><A HREF="readline.html#IDX142">rl_copy_text</A> -<LI><A HREF="readline.html#IDX141">rl_delete_text</A> -<LI><A HREF="readline.html#IDX189">rl_directory_completion_hook</A> -<LI><A HREF="readline.html#IDX110">rl_discard_keymap</A> -<LI><A HREF="readline.html#IDX132">rl_do_undo</A> -<LI><A HREF="readline.html#IDX92">rl_done</A> -<LI><A HREF="readline.html#IDX90">rl_end</A> -<LI><A HREF="readline.html#IDX129">rl_end_undo_group</A> -<LI><A HREF="readline.html#IDX101">rl_event_hook</A> -<LI><A HREF="readline.html#IDX104">rl_executing_keymap</A> -<LI><A HREF="readline.html#IDX185">rl_filename_completion_desired</A> -<LI><A HREF="readline.html#IDX174">rl_filename_dequoting_function</A> -<LI><A HREF="readline.html#IDX181">rl_filename_quote_characters</A> -<LI><A HREF="readline.html#IDX186">rl_filename_quoting_desired</A> -<LI><A HREF="readline.html#IDX173">rl_filename_quoting_function</A> -<LI><A HREF="readline.html#IDX135">rl_forced_update_display</A> -<LI><A HREF="readline.html#IDX126">rl_function_dumper</A> -<LI><A HREF="readline.html#IDX123">rl_function_of_keyseq</A> -<LI><A HREF="readline.html#IDX119">rl_generic_bind</A> -<LI><A HREF="readline.html#IDX111">rl_get_keymap</A> -<LI><A HREF="readline.html#IDX113">rl_get_keymap_by_name</A> -<LI><A HREF="readline.html#IDX114">rl_get_keymap_name</A> -<LI><A HREF="readline.html#IDX145">rl_getc</A> -<LI><A HREF="readline.html#IDX102">rl_getc_function</A> -<LI><A HREF="readline.html#IDX184">rl_ignore_completion_duplicates</A> -<LI><A HREF="readline.html#IDX188">rl_ignore_some_completions_function</A> -<LI><A HREF="readline.html#IDX187">rl_inhibit_completion</A> -<LI><A HREF="readline.html#IDX148">rl_initialize</A> -<LI><A HREF="readline.html#IDX167">rl_insert_completions</A> -<LI><A HREF="readline.html#IDX140">rl_insert_text</A> -<LI><A HREF="readline.html#IDX98">rl_instream</A> -<LI><A HREF="readline.html#IDX124">rl_invoking_keyseqs</A> -<LI><A HREF="readline.html#IDX125">rl_invoking_keyseqs_in_map</A> -<LI><A HREF="readline.html#IDX143">rl_kill_text</A> -<LI><A HREF="readline.html#IDX95">rl_library_version</A> -<LI><A HREF="readline.html#IDX88">rl_line_buffer</A> -<LI><A HREF="readline.html#IDX127">rl_list_funmap_names</A> -<LI><A HREF="readline.html#IDX107">rl_make_bare_keymap</A> -<LI><A HREF="readline.html#IDX109">rl_make_keymap</A> -<LI><A HREF="readline.html#IDX91">rl_mark</A> -<LI><A HREF="readline.html#IDX138">rl_message</A> -<LI><A HREF="readline.html#IDX133">rl_modifying</A> -<LI><A HREF="readline.html#IDX122">rl_named_function</A> -<LI><A HREF="readline.html#IDX136">rl_on_new_line</A> -<LI><A HREF="readline.html#IDX99">rl_outstream</A> -<LI><A HREF="readline.html#IDX120">rl_parse_and_bind</A> -<LI><A HREF="readline.html#IDX93">rl_pending_input</A> -<LI><A HREF="readline.html#IDX89">rl_point</A> -<LI><A HREF="readline.html#IDX166">rl_possible_completions</A> -<LI><A HREF="readline.html#IDX94">rl_prompt</A> -<LI><A HREF="readline.html#IDX121">rl_read_init_file</A> -<LI><A HREF="readline.html#IDX144">rl_read_key</A> -<LI><A HREF="readline.html#IDX97">rl_readline_name</A> -<LI><A HREF="readline.html#IDX134">rl_redisplay</A> -<LI><A HREF="readline.html#IDX103">rl_redisplay_function</A> -<LI><A HREF="readline.html#IDX137">rl_reset_line_state</A> -<LI><A HREF="readline.html#IDX149">rl_reset_terminal</A> -<LI><A HREF="readline.html#IDX112">rl_set_keymap</A> -<LI><A HREF="readline.html#IDX182">rl_special_prefixes</A> -<LI><A HREF="readline.html#IDX100">rl_startup_hook</A> -<LI><A HREF="readline.html#IDX146">rl_stuff_char</A> -<LI><A HREF="readline.html#IDX96">rl_terminal_name</A> -<LI><A HREF="readline.html#IDX117">rl_unbind_key</A> -<LI><A HREF="readline.html#IDX118">rl_unbind_key_in_map</A> -</DIR> -<H2>s</H2> -<DIR> -<LI><A HREF="readline.html#IDX43">self-insert (a, b, A, 1, !, ...)</A> -<LI><A HREF="readline.html#IDX78">set-mark (C-@)</A> -<LI><A HREF="readline.html#IDX16">show-all-if-ambiguous</A> -<LI><A HREF="readline.html#IDX68">start-kbd-macro (C-x ()</A> -</DIR> -<H2>t</H2> -<DIR> -<LI><A HREF="readline.html#IDX42">tab-insert (M-TAB)</A> -<LI><A HREF="readline.html#IDX77">tilde-expand (M-~)</A> -<LI><A HREF="readline.html#IDX157">to_lower</A> -<LI><A HREF="readline.html#IDX156">to_upper</A> -<LI><A HREF="readline.html#IDX44">transpose-chars (C-t)</A> -<LI><A HREF="readline.html#IDX45">transpose-words (M-t)</A> -</DIR> -<H2>u</H2> -<DIR> -<LI><A HREF="readline.html#IDX75">undo (C-_, C-x C-u)</A> -<LI><A HREF="readline.html#IDX64">universal-argument ()</A> -<LI><A HREF="readline.html#IDX51">unix-line-discard (C-u)</A> -<LI><A HREF="readline.html#IDX55">unix-word-rubout (C-w)</A> -<LI><A HREF="readline.html#IDX46">upcase-word (M-u)</A> -<LI><A HREF="readline.html#IDX153">uppercase_p</A> -<LI><A HREF="readline.html#IDX170">username_completion_function</A> -</DIR> -<H2>v</H2> -<DIR> -<LI><A HREF="readline.html#IDX17">visible-stats</A> -</DIR> -<H2>y</H2> -<DIR> -<LI><A HREF="readline.html#IDX61">yank (C-y)</A> -<LI><A HREF="readline.html#IDX38">yank-last-arg (M-., M-_)</A> -<LI><A HREF="readline.html#IDX37">yank-nth-arg (M-C-y)</A> -<LI><A HREF="readline.html#IDX62">yank-pop (M-y)</A> -</DIR> - -</P> -<P><HR><P> -This document was generated on 22 May 1997 using the -<A HREF="http://wwwcn.cern.ch/dci/texi2html/">texi2html</A> -translator version 1.51.</P> -</BODY> -</HTML>
deleted file mode 100644 --- a/readline/doc/readline.info +++ /dev/null @@ -1,2766 +0,0 @@ -This is Info file readline.info, produced by Makeinfo-1.55 from the -input file -/usr/homes/chet/src/bash/readline-2.1-beta2/doc/rlman.texinfo. - - This document describes the GNU Readline Library, a utility which -aids in the consistency of user interface across discrete programs that -need to provide a command line interface. - - Copyright (C) 1988, 1991 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: Top, Next: Command Line Editing, Prev: (DIR), 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. If you do not have a meta key, the identical keystroke -can be generated by typing ESC first, and then typing k. Either -process is known as "metafying" the k key. - - The text M-C-k is read as `Meta-Control-k' and describes the -character produced by "metafying" C-k. - - 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::.). - - -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 miss typing a character that you wanted to type, -and not notice your error until you have typed several other -characters. In that case, you can type C-b to move the cursor to the -left, and then correct your mistake. Afterwards, you can move the -cursor to the right with C-f. - - When you add text in the middle of a line, you will notice that -characters to the right of the cursor are `pushed over' to make room -for the text that you have inserted. Likewise, when you delete text -behind the cursor, characters to the right of the cursor are `pulled -back' to fill in the blank space created by the removal of the text. A -list of the basic bare essentials for editing the text of an input line -follows. - -C-b - Move back one character. - -C-f - Move forward one character. - -DEL - Delete the character to the left of the cursor. - -C-d - Delete the character underneath the cursor. - -Printing characters - Insert the character into the line at the cursor. - -C-_ - Undo the last thing that you did. You can undo all the way back - to an empty line. - - -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 possible keystrokes that -you need in order to do editing of the input line. For your -convenience, many other commands have been added in addition to C-b, -C-f, C-d, and DEL. Here are some commands for moving more rapidly -about the line. - -C-a - Move to the start of the line. - -C-e - Move to the end of the line. - -M-f - Move forward a word. - -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. If the description for a command says that it `kills' text, -then you can be sure that you can get the text back in a different (or -the same) place later. - - When you use a kill command, the text is saved in a "kill-ring". -Any number of consecutive kills save all of the killed text together, so -that when you yank it back, you get it all. The kill ring is not line -specific; the text that you killed on a previously typed line is -available to be yanked back later, when you are typing another line. - - Here is the list of commands for killing text. - -C-k - Kill the text from the current cursor position to the end of the - line. - -M-d - Kill from the cursor to the end of the current word, or if between - words, to the end of the next word. - -M-DEL - Kill from the cursor the start of the previous word, or if between - words, to the start of the previous word. - -C-w - Kill from the cursor to the previous whitespace. This is - different than M-DEL because the word boundaries differ. - - And, 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' you type 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. The Escape character is -used to terminate an incremental search. Control-J will also terminate -the search. Control-G will abort an incremental search and restore the -original line. When the search is terminated, the history entry -containing the search string becomes the current line. To find other -matching entries in the history list, type Control-S or Control-R as -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 `newline' 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 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 that you would like to -use a different set of keybindings. You can customize programs that -use Readline by putting commands in an "inputrc" file in your 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 change the state of a few variables in Readline by using - the `set' command within the init file. Here is how you would - specify that you wish to use `vi' line editing commands: - - set editing-mode vi - - Right now, there are only a few variables which can be set; so - few, in fact, that we just list them here: - - `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-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 - eigth bit set to an ASCII key sequence by stripping the eigth - bit and prepending 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 editing mode you - are using. 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 that you edit 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'. - - `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', says to display an asterisk - (`*') at the start of history lines which have been modified. - This variable is `off' by default. - - `input-meta' - If set to `on', Readline will enable eight-bit input (it will - not strip the eighth bit from the characters it reads), - regardless of what the terminal claims it can support. The - default value is `off'. The name `meta-flag' is a synonym - for this variable. - - `output-meta' - If set to `on', Readline will display characters with the - eighth bit set directly rather than as a meta-prefixed escape - sequence. 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 have to know the name of the command that you - want to change. The following pages contain tables of the command - name, the default keybinding, 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 escape sequences are available when specifying - key sequences: - - ``\C-'' - control prefix - - ``\M-'' - meta prefix - - ``\e'' - an escape character - - ``\\'' - backslash - - ``\"'' - " - - ``\''' - ' - - 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. Backslash will quote any - 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 three 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 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 you saw in the previous example, terminates an - `$if' command. - -`$else' - Commands in this branch of the `$if' directive are executed if the - test fails. - - -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. - # - # 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. - - -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 this, or the 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 you are - entering. - -`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 current cursor - position (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'. - - -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 `C-d', then return `EOF'. - -`backward-delete-char (Rubout)' - Delete the character behind the cursor. A numeric arg says to kill - the characters instead of deleting them. - -`quoted-insert (C-q, C-v)' - Add the next character that you type 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 argumentss don't work. - -`transpose-words (M-t)' - Drag the word behind the cursor past the word in front of the - cursor moving the cursor over that word as well. - -`upcase-word (M-u)' - Uppercase the current (or following) word. With a negative - argument, do the previous word, but do not move the cursor. - -`downcase-word (M-l)' - Lowercase the current (or following) word. With a negative - argument, do the previous word, but do not move the cursor. - -`capitalize-word (M-c)' - Capitalize the current (or following) word. With a negative - argument, do 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 the current cursor position to the end of the - line. - -`backward-kill-line (C-x Rubout)' - Kill backward to the beginning of the line. - -`unix-line-discard (C-u)' - Kill backward from the cursor to the beginning of the current line. - Save the killed text on the kill-ring. - -`kill-whole-line ()' - Kill all characters on the current line, no matter where the - cursor is. By default, this is unbound. - -`kill-word (M-d)' - Kill from the cursor to the end of the current word, or if between - words, to the end of the next word. Word boundaries are the same - as `forward-word'. - -`backward-kill-word (M-DEL)' - Kill the word behind the cursor. Word boundaries are the same as - `backward-word'. - -`unix-word-rubout (C-w)' - Kill the word behind the cursor, using white space as a word - boundary. The killed text is saved on the kill-ring. - -`delete-horizontal-space ()' - Delete all spaces and tabs around point. By default, this is - unbound. - -`kill-region ()' - Kill the text between the point and the *mark* (saved cursor - position. This text is referred to as the REGION. By default, - this command is unbound. - -`copy-region-as-kill ()' - Copy the text in the region to the kill buffer, so you can yank it - right away. By default, this command is unbound. - -`copy-backward-word ()' - Copy the word before point to the kill buffer. By default, this - command is unbound. - -`copy-forward-word ()' - Copy the word following point to the kill buffer. 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'. - - -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 that you type be metafied. This is for - people 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 typing 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 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 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. - -* 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::. - - - 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: char * rl_prompt - The prompt Readline uses. This is set from the argument to - `readline ()', and should not be assigned to directly. - - - 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_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: Custom Completers, 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. - - 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_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'. - - -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 routines that we have moved onto a new (empty) - line, usually after ouputting a newline. - - - 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. - - -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: 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'). - - - 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'. - - 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: Custom Completers, Prev: Readline Convenience Functions, 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_entry_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 empty. - - - 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. - - -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: - -* (: Utility Functions. -* 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-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-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. -* 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. -* 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_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_binding_keymap: Readline Variables. -* rl_bind_key: Binding Keys. -* rl_bind_key_in_map: Binding Keys. -* rl_callback_handler_install: Alternate Interface. -* rl_callback_handler_remove: Alternate Interface. -* rl_callback_read_char: Alternate Interface. -* rl_char_is_quoted_p: Completion Variables. -* rl_clear_message: Redisplay. -* rl_complete: Completion Functions. -* rl_complete: How Completing Works. -* rl_completer_quote_characters: Completion Variables. -* rl_completer_word_break_characters: Completion Variables. -* rl_complete_internal: Completion Functions. -* rl_completion_append_character: Completion Variables. -* rl_completion_entry_function: 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_done: Readline Variables. -* rl_do_undo: Allowing Undoing. -* rl_end: Readline Variables. -* rl_end_undo_group: Allowing Undoing. -* rl_event_hook: Readline Variables. -* rl_executing_keymap: Readline Variables. -* 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_function_dumper: Associating Function Names and Bindings. -* rl_function_of_keyseq: Associating Function Names and Bindings. -* rl_generic_bind: Binding Keys. -* rl_getc: Utility Functions. -* rl_getc_function: Readline Variables. -* rl_get_keymap: Keymaps. -* rl_get_keymap_by_name: Keymaps. -* rl_get_keymap_name: Keymaps. -* 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_outstream: Readline Variables. -* rl_parse_and_bind: Binding Keys. -* rl_pending_input: Readline Variables. -* rl_point: Readline Variables. -* rl_possible_completions: Completion Functions. -* rl_prompt: Readline Variables. -* rl_readline_name: Readline Variables. -* rl_read_init_file: Binding Keys. -* rl_read_key: Utility Functions. -* rl_redisplay: Redisplay. -* rl_redisplay_function: Readline Variables. -* rl_reset_line_state: Redisplay. -* rl_reset_terminal: Utility Functions. -* rl_set_keymap: Keymaps. -* rl_special_prefixes: Completion Variables. -* rl_startup_hook: Readline Variables. -* rl_stuff_char: Utility Functions. -* rl_terminal_name: Readline Variables. -* 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. -* tab-insert (M-TAB): Commands For Text. -* tilde-expand (M-~): Miscellaneous Commands. -* 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: Top1048 -Node: Command Line Editing1661 -Node: Introduction and Notation2312 -Node: Readline Interaction3321 -Node: Readline Bare Essentials4510 -Node: Readline Movement Commands6040 -Node: Readline Killing Commands6931 -Node: Readline Arguments8634 -Node: Searching9608 -Node: Readline Init File11209 -Node: Readline Init File Syntax12272 -Node: Conditional Init Constructs20062 -Node: Sample Init File22344 -Node: Bindable Readline Commands25378 -Node: Commands For Moving26129 -Node: Commands For History26977 -Node: Commands For Text29591 -Node: Commands For Killing31334 -Node: Numeric Arguments33361 -Node: Commands For Completion34486 -Node: Keyboard Macros35370 -Node: Miscellaneous Commands35929 -Node: Readline vi Mode38740 -Node: Programming with GNU Readline40496 -Node: Basic Behavior41365 -Node: Custom Functions44678 -Node: The Function Type45279 -Node: Function Writing46124 -Node: Readline Variables47208 -Node: Readline Convenience Functions50296 -Node: Function Naming51027 -Node: Keymaps52254 -Node: Binding Keys53968 -Node: Associating Function Names and Bindings55912 -Node: Allowing Undoing57490 -Node: Redisplay60075 -Node: Modifying Text61146 -Node: Utility Functions62057 -Node: Alternate Interface64176 -Node: Custom Completers67470 -Node: How Completing Works68191 -Node: Completion Functions71187 -Node: Completion Variables74202 -Node: A Short Completion Example81344 -Node: Concept Index93650 -Node: Function and Variable Index94395 - -End Tag Table
deleted file mode 100644 --- a/readline/doc/readline.ps +++ /dev/null @@ -1,3856 +0,0 @@ -%!PS (but not EPSF; comments have been disabled) -%DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi -%DVIPSParameters: dpi=300, compressed, comments removed -%DVIPSSource: TeX output 1997.05.22:1433 -/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N -/X{S N}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{dup dup 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 dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /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 dup definefont setfont}B /ch-width{ch-data dup -length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ -128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub -get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data -dup 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 /sf 0 N /CharBuilder{save 3 1 roll S dup -/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx -0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff -setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff -.1 sub]/id ch-image N /rw ch-width 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 dup 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 dup gp add -/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ -dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 -adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 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}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] -}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup -length 1 sub dup 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 dup 1 get dup mul exch 0 get dup 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 0 1 255{IE S 1 string dup 0 3 index put cvn put}for -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 /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V -{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 -getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} -ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false -RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 -false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform -round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg -rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail -{dup /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 -TeXDict begin 40258431 52099146 1000 300 300 (readline.dvi) -@start /Fa 1 47 df<127012F8A212F012E005057B840E>46 D -E /Fb 1 47 df<1238127C12FCA212F8127006067A8512>46 D E -/Fc 1 59 df<126012F0A2126004047D830B>58 D E /Fd 52 127 -df<126012F0AD12601200A4126012F0A212600417789614>33 D<EA071CA5EA7FFFB512 -80A2380E3800A7B51280A26C1300EA1C70A511177F9614>35 D<EA01801203EA06005A12 -1C121812385AA35AA91270A37E1218121C120C7EEA03801201091D799914>40 -D<128012C01260123012381218121C120EA31207A9120EA3121C121812381230126012C0 -1280081D7C9914>I<EA0380A3EA638CEAF39EEA7FFCEA3FF8EA0FE0A2EA3FF8EA7FFCEA -F39EEA638CEA0380A30F107E9214>I<127012F812FCA2127C120C1218123012E012C006 -0A798414>44 D<EAFFFEA30F037E8C14>I<127012F8A312700505798414>I<EA07C0EA0F -E0EA1C70EA3838EA3018EA701CA2EAE00EA9EA701CA2EA3838A2EA1C70EA0FE0EA07C00F -177E9614>48 D<1203A25A5A123F12F712471207AEEA7FF0A20C177C9614>I<130E133E -137C13F0EA03E0EA07C0EA1F00123E12F85A7E123E7EEA07C0EA03E0EA00F0137C133E13 -0E0F137E9414>60 D<124012E012F8127C121EEA0F80EA07C0EA01F0EA00F8133E131E13 -3E13F8EA01F0EA07C0EA0F80EA1E00127C5A12E012400F157E9514>62 -D<EA1FE0EA3FF8EA701CEAE00EA21240EA003C137013E0EA01C0EA0380A41300C7FCA412 -03EA0780A2EA03000F177E9614>I<EA01E0EA07F0EA0E38EA181CEA38FC1271EA731E12 -77EAEE0EA7EA771CEA7318EA71F0EA38E0EA1806EA0E1EEA07F8EA01F00F177E9614>I< -EA01C0487EA21360A2EA0770A4EA0630EA0E38A4487EEA1FFCA2EA1C1CA2487EA238FE3F -80A211177F9614>I<EAFFF013FCEA381E130E1307A4130E131EEA3FFCA2EA381E130E13 -07A5130E131EEAFFFC13F810177F9614>I<3801F180EA07FFEA0E1FEA1C071238EA7003 -A348C7FCA738700380A338380700121CEA0E0EEA07FCEA01F011177F9614>I<EAFFE013 -F8EA383C7F130E7FA3EB0380A8EB0700A2130E131E5BEAFFF813E011177F9614>I<B5FC -A2EA3807A490C7FCA21338A2EA3FF8A2EA3838A290C7FCA3EB0380A4B5FCA211177F9614 ->I<B4FCA21238AF1307A4B5FCA210177E9614>76 D<38FC1F80A2007C1300EA7637A4EA -7777A2EA7367A313E7EA71C7A2EA7007A638F80F80A211177F9614>I<38FE3F80A2383E -0E00123BA4138E1239A213CEA31238A213EE136EA4133E12FEA211177F9614>I<EAFFE0 -13F8EA383C131C7FA45B133CEA3FF85BEA38387FA51480EB1DC0A238FE0F80EB07001217 -7F9614>82 D<EA0FCCEA1FFCEA307CEA603CEAE01CA313001270127EEA3FE0EA0FF0EA01 -F8EA001C131E130E126012E0A2EAF01CEAF838EAFFF0EAC7E00F177E9614>I<387FFF80 -B5FCEAE1C3A43801C000AFEA0FF8A211177F9614>I<EAFFE0A21200B3A712FFA20B1D7F -9914>93 D<EA1FC0EA7FF0EA7078EA2018EA001CA2EA07FC121FEA3C1C127012E0A3EA70 -7C383FFF80EA0F8F11107E8F14>97 D<12FCA2121CA513F8EA1DFEEA1F07EA1E03001C13 -80EB01C0A6EB0380001E1300EA1F0EEA1DFCEA0CF81217809614>I<EA03F8EA0FFEEA1C -0EEA3804EA7000126012E0A412601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13 -7EA2130EA5EA07CEEA0FFEEA1C3EEA301EEA700E12E0A61270EA301EEA383E381FEFC0EA -07CF12177F9614>I<EA07E0EA0FF0EA1C38EA301CEA700CEAE00EA2EAFFFEA2EAE00012 -601270EA380EEA1C1EEA0FFCEA03F00F107E8F14>I<13FCEA01FEEA038EEA07041300A3 -EA7FFE12FFEA0700ACEAFFF8A20F177F9614>I<EA07CF381FFF80EA383B38301800EA70 -1CA3EA3018EA3838EA3FF0EA37C00070C7FCA2EA3FF86C7E487EEA700F38E00380A43870 -0700EA3C1EEA1FFCEA07F011197F8F14>I<12FCA2121CA51378EA1DFEEA1F86EA1E0712 -1CAA38FF8FE0A21317809614>I<1206120FA21206C7FCA4B4FCA21207ACEAFFF8A20D18 -7C9714>I<12FCA2121CA5EBFF80A2EB1C005B5B5BEA1DC0EA1FE0A2EA1E70EA1C38133C -131C7F38FF1F80A21117809614>107 D<EAFF80A21203B3EAFFFEA20F177E9614>I<EAFB -8EEAFFDF383CF380A2EA38E3AA38FEFBE013791310808F14>I<EAFC78EAFDFEEA1F86EA -1E07121CAA38FF8FE0A21310808F14>I<EA07C0EA1FF0EA3C78EA701CA2EAE00EA6EA70 -1CEA783CEA3C78EA1FF0EA07C00F107E8F14>I<EAFCF8EAFDFEEA1F07EA1E03001C1380 -EB01C0A6EB0380001E1300EA1F0EEA1DFCEA1CF890C7FCA6B47EA21218808F14>I<EA03 -E7EA0FF7EA1C1FEA300F1270487EA6EA700F1230EA1C3FEA0FF7EA07C7EA0007A6EB3FE0 -A213187F8F14>I<EAFE1FEB7F80EA0EE3380F810090C7FCA2120EA8EAFFF0A211107F8F -14>I<EA0FD8EA3FF8EA603812C0A2EAF000EA7F80EA3FF0EA07F8EA001CEA600612E012 -F0EAF81CEAFFF8EACFE00F107E8F14>I<1206120EA4EA7FFC12FFEA0E00A8130EA3131C -EA07F8EA01F00F157F9414>I<EAFC3FA2EA1C07AB131F380FFFE0EA03E71310808F14>I< -38FE3F80A2383C1E00EA1C1CA36C5AA3EA0630EA0770A36C5AA311107F8F14>I<38FE3F -80A238700700EA380EA3EA39CEA3EA1B6C121AA3EA1E7CA2EA0E3811107F8F14>I<EA7E -3FA2EA1E3CEA0E78EA07705B12036C5A12037FEA0770EA0E781338487E38FE3F80A21110 -7F8F14>I<38FE3F80A2381C0E005BA2120E5BA212071330A2EA0370A25B1201A25BA348 -5A12730077C7FC127E123C11187F8F14>I<EA3FFF5AEA700E131C1338EA007013E0EA01 -C0EA0380EA0700120EEA1C0712381270B5FCA210107F8F14>I<EA1C10EA3F38EAE7E0EA -41C00D047D9614>126 D E /Fe 2 121 df<1270A212F0126004047D830B>46 -D<383FC7E038078380EB0200EA038413C8EA01D8EA00F05B7F120113381202487EEA081E -123838FC3FC013107F8F14>120 D E /Ff 39 123 df<13FEEA038138060180EA0E0338 -1C010090C7FCA5B51280EA1C03AE38FF8FF0141A809915>12 D<EBFF80EA0383EA060312 -0E121CA6B5FCEA1C03AE38FF9FF0141A809915>I<126012F0A212701210A31220A21240 -A2040B7D830B>44 D<EAFFC0A20A0280880D>I<EA07E0EA1C38EA381CEA300CEA700EEA -6006A2EAE007AAEA6006A2EA700EEA300CEA381CEA1C38EA07E010187F9713>48 -D<12035AB4FC1207B3A2EA7FF80D187D9713>I<EA0F80EA1060EA2030EA4038EA803CEA -C01C12E01240EA003C1338A21370136013C0EA018013001202EA040412081210EA3008EA -3FF8127F12FF0E187E9713>I<EA07E0EA1838EA201CEA601EEA700EEA201E1200131CA2 -13381370EA07E0EA0038131C130E130FA212E0A212C0EA400EEA601CEA1838EA07E01018 -7F9713>I<1318A21338137813F813B8EA01381202A212041208121812101220124012C0 -B5FCEA0038A6EA03FF10187F9713>I<EA3018EA3FF013E01380EA2000A5EA2FC0EA3060 -EA2030EA00381318131CA2124012E0A2EA8018EA40381330EA30E0EA0F800E187E9713> -I<EA01F8EA0704EA0C06EA180E123013001270126012E0EAE3E0EAE418EAE80CEAF00EEA -E0061307A31260A2EA7006EA300EEA180CEA0C38EA07E010187F9713>I<1240EA7FFF13 -FEA2EA4004EA80081310A2EA00201340A21380120113005AA25A1206A2120EA512041019 -7E9813>I<EA07E0EA1818EA300CEA20061260A21270EA780CEA3E18EA1F30EA07C0EA03 -E0EA0CF8EA307CEA601E130FEAC0071303A3EA6002EA2004EA1818EA07E010187F9713> -I<EA07E0EA1C30EA3018EA700CEA600EEAE006A21307A31260EA700FEA3017EA1827EA07 -C7EA00071306130E130C12701318EA6030EA3060EA0F8010187F9713>I<EA1FC0EA3870 -7FEA101C1200A2EA03FCEA1E1C1238127012E01480A2133CEA705F381F8F0011107F8F13 ->97 D<12FC121CA913FCEA1D07381E0380381C01C0130014E0A6EB01C01480381E0300EA -1906EA10F8131A809915>I<EA07F8EA1C1C1238EA700813005AA612701304EA3808EA1C -18EA07E00E107F8F11>I<133F1307A9EA03E7EA0C17EA180F487E127012E0A612601270 -6C5AEA1C373807C7E0131A7F9915>I<EA07C0EA1C30EA30181270EA600C12E0EAFFFCEA -E000A41260EA7004EA3808EA1C18EA07E00E107F8F11>I<EA01F0EA0718EA0E38EA1C10 -1300A6EAFFC0EA1C00AEEAFF800D1A80990C>I<EA0FCF3818718038303000EA7038A4EA -30306C5AEA2FC00060C7FCA21270EA3FF013FC6C7EEA600FEAC003A4EA6006EA381CEA07 -E011187F8F13>I<12FC121CA9137CEA1D87381E0380A2121CAB38FF9FF0141A809915>I< -1218123CA212181200A612FC121CAE12FF081A80990A>I<12FC121CA9EB1FC0EB0F0013 -0C5B13205B13E0121DEA1E70EA1C7813387F131E7F148038FF9FE0131A809914>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 /Fg 2 42 df<13E0EA01C0EA0380120713005A121EA2121C123CA212381278A3127012 -F0AE12701278A31238123CA2121C121EA27E7E13801203EA01C0EA00E00B2E7CA112>40 -D<12E012707E123C121C121E7EA27E1380A2120313C0A3120113E0AE13C01203A3138012 -07A213005AA2121E121C123C12385A5A0B2E7EA112>I E /Fh 28 -123 df<90380FF83F90397FFDFFC03A01FC1FE3E03903F03FC7EA07E0D80FC01387ED83 -C091381F8000A6B612FCA2390FC01F80B2397FF8FFF8A223237FA221>11 -D<EB07F8EB7FFC3801FC0E3803F01F48485AEA0FC0A3141E140C91C7FCA2ECFF80B6FCA2 -380FC01FB2397FF8FFF0A21C237FA220>I<13181330136013C01201EA0380120713005A -121EA2123E123CA2127CA3127812F8AD1278127CA3123CA2123E121EA27E7E13801203EA -01C012001360133013180D317BA416>40 D<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 /Fi 29 122 df<13E0A538F0E1E0EAFCE7387EEFC0381FFF00EA07FCEA01F0EA -07FCEA1FFF387EEFC038FCE7E0EAF0E13800E000A513157D991A>42 -D<EB7C38EA01FF000713F8EA0F83EA1E00001C13785A14385AA214005AA812701438A27E -A26C1370001E13F0380F83E03807FFC00001138038007C00151E7E9D1A>67 -D<B512F8A3381C0038A51400A2130EA3EA1FFEA3EA1C0EA390C7FCA3141CA5B512FCA316 -1E7E9D1A>69 D<387FFFFCB5FC7E380E001CA51400A2EB0380A3EA0FFFA3EA0E03A390C7 -FCA8EA7FE012FF127F161E7F9D1A>I<B51280A33801C000B3A6B51280A3111E7C9D1A> -73 D<387F03F838FF87FC387F03F8381C01E0EB03C01480EB07005B131E131C5B13785B -7F121DEA1FDC139C130EEA1E0F7F001C13801303EB01C0A2EB00E0A21470007F13FC38FF -81FE387F00FC171E7F9D1A>75 D<EA7FE0487E6C5A000EC7FCB3141CA5387FFFFCB5FC7E -161E7F9D1A>I<EAFFFEEBFF8014C0381C03E0EB00F0147014781438A41478147014F0EB -03E0381FFFC01480EBFE00001CC7FCA9B47EA3151E7E9D1A>80 D<38FF01FEA3381C0070 -A3001E13F0000E13E0A3380701C0A438038380A43801C700A4EA00C613EEA3136C137CA2 -1338171E7F9D1A>86 D<387FFFC0B512E0A26C13C013047D7E1A>95 -D<EA1FF0EA3FFC487EEA780FEA300738000380A2137FEA07FF121FEA3F83EA7803127012 -E0A3EA7007EA780F383FFFFCEA1FFDEA07F016157D941A>97 D<12FEA3120EA6133EEBFF -80000F13E0EBC1F0EB8070EB0038120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E -138038063E00161E7F9D1A>I<EBFF80000313C0000F13E0EA1F01383C00C04813001270 -A25AA51270A2007813707E381F01F0380FFFE0000313C03800FE0014157D941A>I<EB1F -C0A31301A6EA01F1EA07FDEA0FFFEA1E0FEA3C07EA7803EA700112E0A7EA7003A2EA3807 -EA3E0F381FFFFCEA07FDEA01F1161E7E9D1A>I<EA01F8EA07FF481380381E07C0EA3C01 -387800E01270481370A2B512F0A300E0C7FC1270A2007813707E381F01F0380FFFE00003 -13803800FE0014157D941A>I<EB07E0EB1FF0EB3FF8EB7878EBF030EBE000A4387FFFF0 -B5FCA23800E000AF383FFF804813C06C1380151E7F9D1A>I<12FEA3120EA6133EEBFF80 -000F13C013C1EB80E01300120EAC38FFE3FE13E713E3171E7F9D1A>104 -D<EA01C0487EA36C5AC8FCA5EA7FE0A31200AF387FFF80B512C06C1380121F7C9E1A>I< -EAFFE0A31200B3A6B512E0A3131E7D9D1A>108 D<387CE0E038FFFBF8EA7FFF381F1F1C -EA1E1EA2EA1C1CAC387F1F1F39FF9F9F80397F1F1F00191580941A>I<EAFE3EEBFF80B5 -12C0EA0FC1EB80E01300120EAC38FFE3FE13E713E317157F941A>I<EA01F0EA07FCEA1F -FF383E0F80EA3C07387803C0EA700138E000E0A6EAF001007013C0EA7803383C0780EA3E -0F381FFF00EA07FCEA01F013157D941A>I<EAFE3EEBFF80B512E0380FC1F0EB8070EB00 -38120E141CA7000F13381478EB80F0EBC1E0EBFFC0000E1380EB3E0090C7FCA8EAFFE0A3 -16207F941A>I<387F81F838FF8FFC387F9FFE3803FE1EEBF80CEBE000A25B5BAAEA7FFF -B5FC7E17157F941A>114 D<487E1203A6387FFFE0B5FCA238038000AA1470A43801C1E0 -13FF6C1380EB3F00141C7F9B1A>116 D<38FE0FE0A3EA0E00AD1301EA0F033807FFFE7E -EA00FC17157F941A>I<387FC7FC00FF13FE007F13FC380E00E0A3380701C0A338038380 -A33801C700A3EA00EEA3137CA2133817157F941A>I<387FC7F8EBCFFCEBC7F8380703C0 -38038380EBC700EA01EFEA00FE137C13781338137C13EE120113C738038380000713C013 -01387FC7FC00FF13FE007F13FC17157F941A>120 D<387FC7FC00FF13FE007F13FC380E -00E0A27EEB01C013811203EB8380EA01C3A2EBC700EA00E7A213E61366136E133CA31338 -A3137813701230EA78E01271EA7FC06C5A001EC7FC17207F941A>I -E /Fj 1 59 df<127012F8A3127005057C840D>58 D E /Fk 52 -122 df<123C127E12FFA4127E123C08087C8711>46 D<EB7F803803FFF03807E1F8380F -807C48487E48133F003E7F007E1480A400FE14C0AD007E1480A46CEB3F00A26C133E6C6C -5A3807E1F86CB45A38007F801A237EA21F>48 D<131C133C13FC12FFA21200B3AA387FFF -FCA216237CA21F>I<48B4FC000713C0381E07F0383803F8386001FC387C00FE12FE14FF -147FA2127C003813FFC7FC14FEA2EB01FC14F8EB03F0EB07E01480EB0F00131E5B1370EB -E003EA01C038038007380700061206380FFFFE5A5A4813FCB5FCA218237DA21F>I<48B4 -FC000713E0381E03F0383801F8003C13FC387E00FEA3123EEA1C01000013FCA2EB03F8EB -07F0EB0FC03801FF00A2380007E0EB01F014F8EB00FC14FE14FFA21210127C12FEA214FE -A2387C01FC007013F8383E07F0380FFFC00001130018237DA21F>I<14381478A214F813 -01130313071306130C131C13381330136013E0EA01C01380EA03005A120E5A12185A1270 -5AB612C0A2390001F800A790387FFFC0A21A237EA21F>I<0018130C001F137CEBFFF814 -F014E014C01480EBFC000018C7FCA513FF001B13E0381F03F0381C00F8000813FCC7127E -A3147FA2127812FCA3147E5A006013FC1270383801F8381E07E03807FFC03801FE001823 -7DA21F>I<EB1FC0EB7FF03801F0383803E00C3807803E000F137EEA1F005AA2007E133C -1400A338FE3FC0EB7FF0EB80F800FF13FCEB007C147E5A147FA4127EA4003E137E123F6C -137C380F80F83807C1F03803FFC038007F0018237DA21F>I<1230123C003FB512C0A215 -804814005C5C38600018A200E05B485B5CC6485AA249C7FC1306130EA25BA2133CA25BA2 -13F8A41201A66C5A13601A257DA41F>I<EBFF80000313E0380F01F8381C007C48133C14 -1E1278A2127C127E387F803C13E0383FF878381FFDF0EBFFC07E000313E014F8000F13FC -EA1E1F383C07FEEA7803EB00FF48133F141F140FA3140E1278141C6C1338381F80F03807 -FFE00001130018237DA21F>I<13FF000313C0380F83E0381F00F04813F8007E137CA214 -7E12FEA3147FA4127E14FF123EEA3F01001F137FEA0FFEEA03FCC7FC147EA2123C007E13 -FCA214F814F0EA7C01383003E0381C0F80380FFF00EA03F818237DA21F>I<141CA2143E -A3147FA24A7EA39038019FC0A29038031FE0140F01077FEB0607A2010C7F1403011C7FEB -1801A2496C7EA2017FB5FCA29039E0007F8049133FA2484880151F00038190C7120FA248 -6E7ED8FFF090B51280A229257EA42E>65 D<B612E015FC3903F0007FED3F80ED1FC0ED0F -E0A216F0A21507150FA216E0151F16C0ED7F80913801FE0090B512F815FF9039F0003FC0 -ED0FE0ED07F016F8150316FCA616F81507ED0FF0ED1FE0ED7FC0B7120015F826257EA42C ->I<9138FF8008010FEBF01890393FC03C789039FE0006F8D801F8130348481301484813 -0048481478121F48481438A2007F151890C8FCA2481500A97E16187F123FA26C6C143012 -0F6C6C14606C6C14C06C6CEB0180D800FEEB070090383FC01E90380FFFF8010013C02525 -7DA42C>I<B7FCA23903F8007FED0F8015071503A21501A3ED00C01406A21600A2140E14 -1EEBFFFEA2EBF81E140E1406A21660A291C7FC16C0A415011503A2ED0F80153FB7FCA223 -257EA428>69 D<B612FEA23803F800151F8181A281A3ED01801403A292C7FCA25C5C90B5 -FCA2EBF80F8080A491C8FCAAB512F0A221257EA427>I<B500E0B512E0A23B03F80003F8 -00AF90B6FCA29038F80003B0B500E0B512E0A22B257EA430>72 D<B512E0A23803F800B3 -AFB512E0A213257EA417>I<B539E007FF80A2D803F8C7EA780016605E4B5A0307C7FC15 -0E15185D5D5DEC03804AC8FC140E141F4A7E147FECDFC09038FB8FE09038FF0FF0EBFC07 -496C7E816E7E1400157F82153F6F7E6F7E8215076F7E82B539E03FFFC0A22A257EA430> -75 D<B512F0A2D803F8C7FCB3A31503A31506A3150EA2151E153E157CEC03FCB6FCA220 -257EA425>I<D8FFF8EDFFF86D5C0003EEFE00017EEC037EA36D1406A26D6C130CA26D6C -1318A26D6C1330A36D6C1360A26D6C13C0A2903900FC0180A291387E0300A3EC3F06A2EC -1F8CA2EC0FD8A2EC07F0A36E5AEA07803CFFFC01C01FFFF8A235257EA43A>I<D8FFF890 -3807FFE07FD803FE9038003C006D14187F6D7E6D7E806D7E6D7E13036D7E6D7E80EC7F80 -EC3FC0141FEC0FE015F0EC07F8EC03FC1401EC00FE157F1698ED3FD8ED1FF8150F150715 -03A2150115001678486C1438D8FFFC1418A22B257EA430>I<B67E15F83903F801FEEC00 -7F6F7E6F7EA282A55EA24B5A4BC7FCEC01FE90B512F815C09038F803F06E7E6E7E157EA2 -157FA482A31760ED3FC017C0ED1FE1B539E00FFF80923801FE002B257EA42E>82 -D<01FF1380000713E3380F80F7381E001F48130F481307140312F81401A27E91C7FCB4FC -EA7FE013FE383FFFE014F86C13FE00077F6C1480C67E010313C0EB003FEC0FE01407A200 -C01303A315C07E6C13076C14806CEB0F0038FFC03E38E3FFF838803FE01B257DA422>I< -007FB612F8A2397E00FE010078EC00780070153800601518A200E0151C160C5AA4C71400 -B3A390B512FEA226247EA32B>I<B539E00FFFC0A2D803F8C7EA78001630B3A700015D7F -00005D137C6D495A6D0107C7FC90380FE03E903803FFF89038007FC02A257EA42F>I<B5 -398001FFE0A2D807F8C7EA1C0000031518A26D1438000115306D1470000015607F6D5C80 -013F495AA2ECC003011F91C7FC6E5A010F130614F001075BA26D6C5AA2ECFC3801011330 -ECFE700100136014FF6E5AA26E5AA36EC8FCA2140EA22B257FA42E>I<B53B81FFFE01FF -F0A23D07F0001FC0000F007013066C6C010F5CA26F7E6C6C5EA26D496C1338000017304B -7E017F01195CA291388030FE013F5E829139C0607F01011F5E03E0138190280FE0C03F83 -C7FCA29139F1801FC3010715C617E69139FB000FEE010315EC02FF14FC6D486D5AA24A13 -0301005DA24A130102785CA202306D5A3C257FA43F>I<B539C001FFE0A2D807F8C7EA1C -006C6C141816386C6C14306C6C5C16E06D6C5B6D6C485A1503D91FE090C7FC90380FF006 -150E903807F80C6D6C5A15386D6C5A903800FF6015E06E5A6E5AAE90380FFFFCA22B257F -A42E>89 D<EA07FF001F13E0383E03F0383F00F880147E121EC7FCA3EB1FFE3803FE7EEA -0FC0EA1F00123E127E5AA314BEEA7E01383F073E391FFE1FE03807F00F1B187E971E>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<3BFFF9FFE0FF80A23B1F -C03F001C00000F6D13181580D807E05CA29039F03FC07000030137136015E02601F8635B -A29038FCE3F1000001C15B15F990267F80FBC7FCA215FF90383F007EA2011E133CA3010C -131829187F972C>I<39FFF83FF0A2390FC00F003807E00E6C6C5A6D5A6C6C5A00001360 -EB7EC06D5AA2131F6D7E497E80EB33F81361EBE0FC3801C07E3803807F3907003F804813 -1F39FFC07FF8A21D187F9720>I<39FFF80FF8A2390FC001C015803907E00300A26D5A00 -031306EBF80E0001130C13FC00005B13FEEB7E30A26D5AA214E06D5AA26D5AA26DC7FCA2 -1306A25B1230EA781CEAFC185B1370EA68E0EA7FC0001FC8FC1D237F9720>I -E /Fl 28 122 df<EB03E0EB1C181338EB703C13E014383801C000A5485A387FFFF03803 -8070A4380700E0A6380E01C0A6381C0380001E13C038FF0FF016207E9F19>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<EBE3E03807EC383800F01C497E140F48487E1580A53903800F00A214 -0E141E141C5C38074070EB61C0011FC7FC90C8FCA3120EA4121EEAFFC0191D809319>I< -EBFC2038038260EA0702381E01E0123C003813C0127812F0A438E00380A212F0A2130712 -7038380F00EA1C37EA07C7EA0007A3130EA4131EEBFFC0131D7D9318>I<EA038E381FB3 -80EA07C71203EB8300EA078090C7FCA5120EA65A121EEAFFC011147E9312>I<EA01F9EA -0607EA080312181301EA3802EA3C00121F13F0EA07FCEA01FEEA001FEA40071303A21260 -1306EAF004EAC818EA87E010147F9312>I<1380EA0100A35A5A5A121EEAFFF8EA0E00A4 -5AA65A1310A41320A2EA1840EA0F800D1C7C9B12>I<381C0380EAFC1FEA3C07EA1C03A2 -38380700A6EA700EA4131EA25BEA305E381F9F8011147B9319>I<38FF83F8381E00E000 -1C13C01480121E380E01005B13025B12075BA25BEA039013A013E05B5B120190C7FC1514 -7C9318>I<39FF9FE1FC393C078070391C030060148015401580EA0E0790380D81001309 -EB19C21311380F21C4EA0720EB40C814E8EB80F0A26C485A1460000213401E147C9321> -I<381FF0FF3803C0780001137014403800E0C0EBE180EB73001376133CA2131C132E134E -1387EA0107380203801204380C01C0383C03E038FE07FC18147F9318>I<390FF83F8039 -01E00E00EBC00C140813E000005B143014205C13705CA20171C7FC1339133A133E133C13 -3813181310A25BA25BEA70C0EAF08000F1C8FC12E61278191D809318>I -E /Fm 8 89 df<903807F00890383C0C189038E003383901C000B8D80780137848C71238 -120E001E14185A1508127C1278150012F8A6EC1FFF0078EB00F81578127C123CA27E120E -120F6C7ED801C013B83900E0011890383C0E08903807F00020217C9F27>71 -D<EAFFF0EA0F00B3ABEAFFF00C1F7D9E12>73 D<B4EB0FF8390F8003E0EC0080EA0BC0EA -09E0A2EA08F01378A27F7FA27FEB0780A2EB03C0EB01E0A2EB00F01478A2143C141EA214 -0F1407A214031401123E38FF80001D1F7C9E25>78 D<EB1FE0EB70383801C00E48487E39 -070003804814C0001EEB01E048EB00F0A2007C14F8A20078147800F8147CA90078147800 -7C14F8A2003C14F0003E1301001E14E06CEB03C06C148039038007003801E01E38007038 -EB1FE01E217C9F26>I<B512F0380F803E0007130FEC0780EC03C0A215E0A415C0A2EC07 -80EC0F00143EEBFFF00180C7FCAD487EEAFFFC1B1F7D9E22>I<3803F020380C0C603818 -03E0EA30005A146012E01420A36C13007E127CEA7F80EA3FFC6CB4FC00071380000113C0 -38000FE013031301EB00F014707EA46C136014E06C13C038F8018038C60300EA81FC1421 -7C9F1C>83 D<39FFF00FF8390F0003E0EC0080B3A46CEB01001380120314026C6C5A6C6C -5AEB3830EB0FC01D207C9E25>85 D<397FF807FE390FE001F0D807C013C06C6C6C5A0001 -49C7FCEBF0023800F806EB78046D5AEB3E18EB1F106D5A14C0130713036D7E497EEB06F8 -EB0478EB087CEB183EEB101EEB201F496C7EEBC007496C7ED801007F486D7E481300391F -8001F83AFFC007FF80211F7E9E25>88 D E /Fn 34 121 df<EB01C01303130F137FEA1F -FFB5FC13BFEAE03F1200B3B1007FB512F0A31C2E7AAD28>49 D<EB3FE03801FFFE0007EB -FF80D80F8013C0391E003FE00038EB1FF0007CEB0FF8007EEB07FCB4FC018013FEA21403 -A2EA7F00003E1307C7FC15FCA2EC0FF8A215F0EC1FE015C0EC3F80EC7F00147E14F8495A -495A495A49C7FC011E130E5B133849131E49131C485A48C7123C48B512FC5A5A5A4814F8 -B6FCA31F2E7CAD28>I<913A03FF800180023FEBF00349B5EAFC0701079038003F0FD91F -F8EB079FD93FC0EB01FFD9FF807F4848C8127F4848153F0007161F49150F485A001F1607 -A2485A1703127FA24992C7FCA212FFA9127FA27FEF0380123FA26C7E1707000F17006C7E -6D150E0003161E6C6C151C6C6C6C1478D93FC05CD91FF8EB03E0D907FFEB3F800101D9FF -FEC7FCD9003F13F80203138031317CB03A>67 D<B812F0A3C6903880003FEE07F8160316 -00A21778A21738A3171C1507A31700A25D5D5D91B5FCA3EC803F818181A21707A392C712 -0EA4171EA2173CA2177C17FC16011607163FB812F8A330317EB035>69 -D<B812E0A3C6903880007FEE0FF016031601A21600A21770A31738A21507A21700A35D5D -5D91B5FCA3EC803F818181A592C8FCACB612C0A32D317EB033>I<DA03FF1303027FEBF0 -0749B5EAFC0F01079038007E1FD91FF0EB0FBFD97FC0EB03FF49487F4848C87E485A0007 -824848815B001F82A2484881A2127FA24992C7FC12FFAA0307B512F8127F7FDB00011300 -123FA26C7EA2120F7F6C7E12036C7E6C6C7E6D6C5BD91FF8497ED907FFEB3E3F01019038 -FFFC1F6D6CEBF00F0203EB800335317CB03F>I<B61280A3C6EB8000B3B3A7B61280A319 -317EB01E>73 D<B67EA3000190C9FCB3A9EE0380A416071700A25EA35E5E5E5E4B5A150F -B7FCA329317DB030>76 D<B56C49B512C08080C66D90390003E0006E6E5AEBEFFC13E780 -EBE3FF01E17F01E07F6E7E143F816E7E6E7E6E7E14036E7E16806E13C0ED7FE0ED3FF015 -1F16F8ED0FFCED07FEED03FF6F13818117C1EE7FE1EE3FF1EE1FF9EE0FFD160717FF8282 -82177F173FA2171F170F486C1507B500E014031701A23A317EB03F>78 -D<B712E016FEEEFF80C6D9800013E0EE3FF0EE0FF8EE07FCA2EE03FEA217FFA717FEA2EE -07FC17F8160FEE3FE0EEFFC091B6120016F80280C8FCB3A2B67EA330317EB037>80 -D<B77E16F816FEC690398003FF809238007FE0EE1FF0707EA283160783A65F160F5F4C5A -4C5A4C5ADB03FFC8FC91B512F816E091388007F8ED01FC6F7E167F83707EA283A583A4F0 -038017F8161F1900706C5AB6398003FE0E933801FFFC9338001FF039317EB03C>82 -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 -3F80D807FEEB1FC049EB0FE04914F0ED07F8A216FC1503A216FEA816FC1507A216F8A2ED -0FF06D14E06DEB1FC06DEB3F809039FBC0FE009038F8FFF8EC3FC091C8FCABB512C0A327 -2E7E9F2D>I<3803F03F00FFEB7FC09038F1C3E01487390FF30FF0EA07F6A29038FC07E0 -EC03C091C7FCA25BB2B512E0A31C207E9F21>114 D<3801FF86000713FEEA1F00003C13 -3E48131E140E12F8A36C90C7FCB47E13FC387FFFC06C13F0806C7F00077F00017FEA003F -01001380143F0060131F00E0130FA27E15007E6C131E6C131C38FF807838F3FFF038C07F -8019207D9F20>I<131CA5133CA3137CA213FC120112031207381FFFFEB5FCA2D803FCC7 -FCB0EC0380A71201EC0700EA00FEEB7F0EEB3FFCEB07F0192E7FAD1F>I<D801F8EB07E0 -00FFEB03FFA3000FEB003F0007141FB3153FA20003147FA26C6CEBDFF03A00FE039FFF90 -387FFF1FEB0FFC28207D9F2D>I<B53A1FFFE03FF8A33C0FF000FE0007806D150300076E -EB0700816D5D00039138FF800EA26C6C486D5A15DF01FF153C6C9039038FE038A2D97F87 -6D5A150702C714F0D93FCF6D5AECCE03D91FFEEBF9C09138FC01FD16FF010F5D4A7EA26D -486DC7FCA20103147E4A133EA26D48131C35207E9F3A>119 D<3A7FFF807FFCA33A03FC -000F006C6C131E6C6C5BEC803890387FC078013F5B90381FE1E090380FF3C0ECFF806D90 -C7FC6D5A13016D7E81815B903803DFE09038078FF08190380F07FC90381E03FEEB3C0149 -6C7E4914804848EB7FC00003EC3FE026FFFC01B5FCA328207F9F2B>I -E /Fo 1 14 df<14FF010713E090381F00F80178131E01E01307D80180EB018048C812C0 -00061560481530A248151848150CA2481506A4481503A900601506A46C150CA26C15186C -1530A26C15606C15C06C6CEB0180D800E0EB07000178131E011F13F8903807FFE0010090 -C7FC282B7EA02D>13 D E /Fp 54 122 df<1306130C13181338137013E01201EA03C0A2 -EA0780A2120F13005AA2123EA3127EA3127CA212FCAE127CA2127EA3123EA37EA27E1380 -1207A2EA03C0A2EA01E01200137013381318130C13060F3C7AAC1A>40 -D<123C127FEAFF80A213C0A3127F123E1200A2EA0180A3EA0300A21206120E5A5A12100A -157B8813>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<EB7F803801FFF000077F380FC0FC381F803E48487E007E1480A2140F00FE14C0A3 -15E0A5007E131FA26C133F6C132F380F80CF3807FF8F0001130FEA0008010013C0A3EC1F -80123E127FEC3F00143E147E007E5B383E03F8381FFFE06C1380D801FEC7FC1B277DA622 ->57 D<EC0780A24A7EA34A7EA24A7EA3EC77F8A2ECF7FC14E3A2903801C1FEA201037F14 -80A249486C7EA24980010E133FA2496D7EA2013FB57EA39039700007F8A201F080491303 -000181491301A2000381D8FFFE013F13FCA32E297EA833>65 D<B612F815FF16C03A03F8 -001FE0ED0FF0ED07F8150316FCA21501A3150316F8A2ED07F0150FED1FC0EDFF8090B5EA -FE00EDFFC09039F8000FF0ED03F8ED01FC16FE1500A216FFA616FE1501ED03FC1507ED1F -F8B712E016C0EDFE0028297DA830>I<91387FE003903907FFFC07011FEBFF0F90397FF0 -0F9F9039FF0001FFD801FC7F4848147F4848143F4848141F485A160F485A1607127FA290 -C9FC5AA97E7F1607123FA26C7E160E6C7E6C6C141C6C6C143C6C6C14786CB4EB01F09039 -7FF007C0011FB512800107EBFE009038007FF028297CA831>I<B612FCEDFF8016E03A03 -FC001FF8ED03FCED00FE167FEE3F80EE1FC0A2EE0FE0A2EE07F0A417F8AA17F0A3EE0FE0 -A217C0161FEE3F80EE7F005EED03FCED1FF8B75A168003FCC7FC2D297EA834>I<B712E0 -A33903FC001FED07F01501A215001670A3913801C0781638A302031300A2140F90B5FCA3 -EBFC0F1403A20201130EA3161C91C7FCA3163C1638167816F815011503151FB712F0A327 -297EA82C>I<B712C0A33903FC003FED0FE015031501A21500A316F0913801C070A31600 -1403A2140F90B5FCA3EBFC0F1403A21401A491C8FCA9B512FCA324297EA82A>I<91387F -E003903907FFFC07011FEBFF0F90397FF00F9F9039FF0001FFD801FC7F48488048488048 -4880485A82485A82127FA290CAFC5AA892B512F87E7F03001300123FA26C7EA26C7E6C7E -6C7E6C7E6CB45B90387FF007011FB5129F0107EBFE0F9039007FF0032D297CA835>I<B5 -D8F00FB5FCA3D803FCC7EA3FC0AF90B7FCA301FCC7123FB1B5D8F00FB5FCA330297EA835 ->I<B512F0A33803FC00B3B1B512F0A314297EA819>I<B500F0EBFFFEA3D803FCC7EA0F00 -161E5E5E16E0ED03C04B5A4BC7FC151E5D15F04A5A4A5A1407140F4A7EEC7FF04A7EEBFD -E79038FFC3FCEC83FE9038FE01FF497E6F7E826F7E151F6F7E8215076F7E6F7E8281EE7F -80B539F00FFFFEA32F297EA835>75 D<B512FCA3D803FCC8FCB3A3ED01C0A415031680A2 -1507A2150FA2151F157F913801FF00B7FCA322297EA828>I<D8FFFE92383FFF80A26D5D -0003EFE000A2D9BF8014EFA2D99FC0EB01CFA2D98FE0EB038FA3D987F0EB070FA2D983F8 -130EA2D981FC131CA3D980FE1338A2027F1370A291383F80E0A391381FC1C0A291380FE3 -80A2913807F700A3EC03FEA26E5AA26E5AD8FFFE0203B51280A2157039297DA840>I<D8 -FFFCEC7FFF7F7F00036DEB01C080EBBFE0139F80EB8FF8EB87FCEB83FEEB81FF01801380 -147F15C0EC3FE0EC1FF0EC0FF8EC07FC140315FEEC01FF6E1381ED7FC1ED3FE1ED1FF115 -0F16F9ED07FDED03FF8181167FA2163F161F160F1607D8FFFE14031601A230297EA835> -I<ECFFC0010F13FC90383F807F9039FE001FC0D801F8EB07E048486D7E48486D7E000F81 -48486D7EA24848147FA2007F168090C8123FA34816C0AA6C16806D147FA2003F1600A26C -6C14FEA26C6C495A6C6C495A6C6C495A6C6C495A6C6C495A90263FC0FFC7FC90380FFFFC -010013C02A297CA833>I<B612F815FF16C03A03FC003FE0ED07F0ED03F816FC150116FE -A716FC150316F8ED07F0ED3FE090B61280EDFE0001FCC8FCB0B512F0A327297EA82E>I< -ECFFC0010F13FC90383FC0FF9039FE001FC048486D7ED803F0EB03F000078148486D7E48 -486D7EA24848147FA2007F1680A290C8123FA24816C0AA6C16806D147FA2003F1600A26C -6C14FE143E3A0FE07F81FC00079038C1C1F83A03F18063F0D801F9EB67E0D800FFEB3FC0 -90263FC07FC7FC90380FFFFC01004913C0EC003C811601ED1F8316FF6F1380A21700816F -5A6F5A6F5A2A357CA833>I<B612E015FE6F7E3A03FC003FE0ED0FF06F7E6F7E150182A6 -5E4B5A1507ED0FE0ED3FC090B500FEC7FCA29039FC00FF80ED3FC06F7E6F7E6F7EA9170E -A21503923801FC1CB538F000FEEE7FF8EE0FE02F297EA832>I<9038FF80600003EBF0E0 -000F13F8381F80FD383F001F003E1307481303A200FC1301A214007EA26C140013C0EA7F -FCEBFFE06C13F86C13FE80000714806C14C0C6FC010F13E0EB007FEC1FF0140F140700E0 -1303A46C14E0A26C13076C14C0B4EB0F80EBE03F39E3FFFE0000E15B38C01FF01C297CA8 -25>I<007FB71280A39039807F807FD87C00140F00781507A20070150300F016C0A24815 -01A5C791C7FCB3A490B612C0A32A287EA72F>I<B500F0EBFFFEA3D803FCC7EA0380B3AA -0001ED07007F0000150E137F6D143CD91FC05B90390FF003F06DB55A01001480DA1FFCC7 -FC2F297EA834>I<B500F0EB7FFFA3D803FEC7EA01C00001ED0380A26D14076C16006E5B -017F140E80013F5CA26E133C011F14386E1378010F14708001075CA26D6C485AA2ECFE03 -01015CECFF076D91C7FC1587EC7F8EA215DEEC3FDC15FC6E5AA26E5AA36E5AA26E5AA230 -297FA833>I<B53CE07FFFE01FFFC0A32803FC0003FCC7EA7000A26D6D7E000160A26D6E -13016C604B138002801503017F5F4B13C0D93FC0013F49C7FCA2913AE00E1FE00F011F16 -0E17F09126F01C0F131E010F161C033C13F8902707F838075BA2037813FC902703FC7003 -5BA2913AFEE001FEF001015E02FF14FF4B7E6D5EA26E486D5AA36EC76CC8FCA2023E8002 -1E141EA242297FA845>I<B500F0EB3FFFA3D803FEC7EA03C06C6C15806C6DEB07005E6D -6C130E6E5B013F143C6D6C13386E5B010F14F06D6C5B6E485A01031303D901FF5B0387C7 -FC6D138FEC7FCE15FC143F6E5A5D140FAE0103B512C0A330297FA833>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 /Fq 90 127 df<127012F8B012701200A51270 -12F8A31270051C779B18>33 D<EA4010EAE038EAF078EAE038AAEA60300D0E7B9C18>I< -EA0306EA078FA6387FFFC0B512E0A26C13C0380F1E00A6387FFFC0B512E0A26C13C0381E -3C00A6EA0C18131C7E9B18>I<13C01201A3EA03F0EA0FFCEA3FFEEA7DCFEA71C738E1C3 -8013C7A338F1C0001279123F6C7EEA0FF8EA01FC13DE13CF13C73861C38012F1A212E1EB -C7001271EA79DEEA3FFEEA1FF8EA07E0EA01C0A3120011247D9F18>I<EA3803387C0780 -A2EAEE0F1400A25B131EA2133EEA7C3CA2EA387CEA0078A213F85B12015BA212035BA212 -07EB8380EB87C0120FEB0EE0A2121F121EA2123E383C07C0A23818038013247E9F18>I< -EA01C0EA07E0487EEA0E70487EA4EB73F813F313E3380FC1C0EBC38013831303381F0700 -EA3F87EA7B8EEA71CEEAE1FC12E0137CEB7870A2EA70FE387FFFE0EA3FC7380F03C0151C -7F9B18>I<1238127CA2127E123E120EA3121CA2123812F812F012C0070E789B18>I<1370 -13F0EA01E0EA03C0EA0780EA0F00121E121C5AA25AA45AA81270A47EA27E121E7EEA0780 -EA03C0EA01F0120013700C24799F18>I<126012F012787E7E7EEA07801203EA01C0A2EA -00E0A41370A813E0A4EA01C0A2EA03801207EA0F00121E5A5A5A12600C247C9F18>I<EA -01C0A4EA41C138F1C780EAFDDF387FFF00EA1FFCEA07F0A2EA1FFCEA7FFF38FDDF80EAF1 -C73841C100EA01C0A411147D9718>I<136013F0A7387FFFC0B512E0A26C13C03800F000 -A7136013147E9718>I<121C123E127E127F123F121F1207120E121E127C12F81260080C -788518>I<387FFFC0B512E0A26C13C013047E8F18>I<1230127812FCA212781230060677 -8518>I<1303EB0780A2130F14005B131EA2133E133C137C1378A213F85B12015B12035B -A212075B120F90C7FCA25A121E123E123CA2127C127812F85AA2126011247D9F18>I<EA -01F0EA07FC487EEA1F1FEA1C0738380380007813C0EA7001A238E000E0A9EAF001007013 -C0A2EA780300381380381C0700EA1F1FEA0FFE6C5AEA01F0131C7E9B18>I<EA01801203 -A21207120F123F12FF12FB12431203B0EA7FFCEAFFFEEA7FFC0F1C7B9B18>I<EA03F0EA -0FFEEA3FFF387C0F80387003C0EAE00138F000E0A21260C7FCA2EB01C0A21303EB0780EB -0F00131E5B5B5B485AEA07C0485A381E00E05AEA7FFFB5FC7E131C7E9B18>I<131F5B13 -77A213E7120113C7EA038712071307120E121E123C1238127812F0B512F8A338000700A6 -EB7FF0A3151C7F9B18>52 D<383FFF80A30038C7FCA8EA3BF8EA3FFE7F383C0780383003 -C0EA0001EB00E0A2126012F0A238E001C0EA7003387C0F80383FFF00EA1FFCEA03F0131C -7E9B18>I<137E48B4FC00071380380F83C0EA1E03121C3838018090C7FC5AA2EAE1F8EA -E7FEB5FC38FE078038F803C0EAF001EB00E05A7E1270A3383801C0EA3C03381E0780380F -FF006C5AEA01F8131C7E9B18>I<12E0B512E0A214C038E00380EB0700C65A131E131C5B -A25B13F05BA2485AA3485AA448C7FCA7131D7E9C18>I<EA03F8EA0FFE487E383E0F80EA -3803387001C0A438380380EA3C07381FFF00EA07FC487EEA1F1F383C0780387001C000F0 -13E0EAE000A4387001C0EA7803383E0F80381FFF006C5AEA03F8131C7E9B18>I<123012 -7812FCA2127812301200A81230127812FCA2127812300614779318>58 -D<1218123C127EA2123C12181200A81218123C127EA2123E121E120E121C123C127812F0 -1260071A789318>I<14C0EB03E01307EB1FC0EB3F80EBFE00485AEA07F0485AEA3F8048 -C7FC12FCA2127F6C7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E01303EB00C013187E -9918>I<387FFFC0B512E0A3C8FCA4B512E0A36C13C0130C7E9318>I<126012F87E127F6C -7EEA0FE06C7EEA01FC6C7EEB3F80EB1FC0EB07E0A2EB1FC0EB3F80EBFE00485AEA07F048 -5AEA3F8048C7FC12FC5A126013187E9918>I<EA0FF0EA3FFC48B4FCEA700F38F00380A2 -EA600738000F00133E5BEA01F05B485AA55BC8FCA5EA0380487EA36C5A111C7D9B18>I< -137CEA01FEEA07FF380F8780381E03C0EA3C1DEA387F3870FFE0EA71E313C112E1EAE380 -A638E1C1C0127113E33870FF8038387F00EA3C1C381E00E0EA0F833807FFC00001138038 -007E00131C7E9B18>I<137013F8A213D8A2EA01DCA3138CEA038EA4EA0707A5380FFF80 -A3EA0E03381C01C0A3387F07F000FF13F8007F13F0151C7F9B18>I<EA7FFCB5FC6C1380 -381C03C01301EB00E0A4130114C01307381FFF80140014C0EA1C03EB00E014F01470A414 -F014E01303387FFFC0B51280387FFE00141C7F9B18>I<EBF8E0EA03FEEA07FFEA0F07EA -1E03EA3C01EA38005AA214005AA8127014E0A27E123C381E01C0EA0F073807FF803803FE -00EA00F8131C7E9B18>I<EA7FF8EAFFFE6C7E381C0F80EB03C0A2EB01E01300A214F014 -70A814F014E0A2130114C01303EB0F80387FFF00485AEA7FF8141C7F9B18>I<B512F0A3 -381C0070A41400A2130EA3EA1FFEA3EA1C0EA390C7FCA21438A5B512F8A3151C7F9B18> -I<B512F8A3381C0038A41400A21307A3EA1FFFA3EA1C07A390C7FCA7EAFFC0A3151C7F9B -18>I<3801F1C0EA03FDEA0FFFEA1F0FEA1C03123813011270A290C7FC5AA5EB0FF0131F -130F387001C0A213031238A2EA1C07EA1F0FEA0FFFEA03FDEA01F1141C7E9B18>I<387F -07F038FF8FF8387F07F0381C01C0A9EA1FFFA3EA1C01AA387F07F038FF8FF8387F07F015 -1C7F9B18>I<EA7FFFB512806C1300EA01C0B3A4EA7FFFB512806C1300111C7D9B18>I<38 -01FFC0A338000E00B312F0A2133CEA7FFCEA3FF0EA0FC0121C7D9B18>I<387F07F038FF -87F8387F07F0381C03C0EB07801400130E131E5B13385B13F0121DA2EA1FB8A2131C121E -EA1C0EA27FA2EB0380A2EB01C0387F03F038FF87F8387F03F0151C7F9B18>I<EAFFC0A3 -001CC7FCB114E0A5B5FCA3131C7E9B18>I<38FC01F8EAFE03A2383B06E0A4138EA2EA39 -8CA213DCA3EA38D8A213F81370A21300A638FE03F8A3151C7F9B18>I<387E07F038FF0F -F8387F07F0381D81C0A313C1121CA213E1A313611371A213311339A31319A2131D130DA3 -EA7F07EAFF87EA7F03151C7F9B18>I<EA0FFE383FFF804813C0EA7803EA700100F013E0 -EAE000B0EAF001007013C0EA7C07EA7FFF6C1380380FFE00131C7E9B18>I<EAFFFEEBFF -8014C0EA1C03EB01E013001470A514E01301EB03C0EA1FFF1480EBFE00001CC7FCA8B47E -A3141C7F9B18>I<EA0FFE383FFF804813C0EA7803EA700100F013E0EAE000AE1370A2EA -F079387039C0EA783FEA7FFF6C1380380FFE00EA000FEB0780A2EB03C01301A213227E9B -18>I<EA7FF8EAFFFE6C7E381C0F80130314C01301A313031480130F381FFF005BA2EA1C -0F7FEB0380A5149CA3387F01F8EAFF81387F00F0161C7F9B18>I<3803F1C0EA1FFF5AEA -7C0FEA7003EAE001A390C7FC12701278123FEA1FF0EA07FEC67EEB0F80EB03C01301EB00 -E0A2126012E0130100F013C038F80780B5FCEBFE00EAE7F8131C7E9B18>I<387FFFF8B5 -FCA238E07038A400001300B2EA07FFA3151C7F9B18>I<38FF83FEA3381C0070B36C13E0 -EA0F01380783C03803FF806C1300EA007C171C809B18>I<38FE03F8EAFF07EAFE03383C -01E0001C13C0A3EA1E03000E1380A438070700A4EA038EA4EA018C13DCA3EA00D813F8A2 -1370151C7F9B18>I<38FE03F8A338700070A36C13E0A513F8EA39FC13DCA2001913C0A3 -138CA2EA1D8DA31305000D1380EA0F07A2EA0E03151C7F9B18>I<387F0FE0139F130F38 -0E0700120FEA070E138EEA039C13DCEA01F8A212005B137013F07F487E13DCEA039E138E -EA070F7F000E13801303001E13C0387F07F000FF13F8007F13F0151C7F9B18>I<38FE03 -F8EAFF07EAFE03381C01C0EA1E03000E1380EA0F0700071300A2EA038EA2EA01DCA3EA00 -F8A21370A9EA01FC487E6C5A151C7F9B18>I<EAFFF8A3EAE000B3ACEAFFF8A30D24779F -18>91 D<126012F0A27E1278127C123CA2123E121E121F7EA27F12077F1203A27F12017F -12007F1378A2137C133C133E131EA2131F7F14801307A2EB030011247D9F18>I<EAFFF8 -A3EA0038B3ACEAFFF8A30D247F9F18>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 /Fr 78 123 df<90381F83E09038F06E303901C07878 -380380F8903800F03048EB7000A7B612803907007000B2383FE3FF1D20809F1B>11 -D<133FEBE0C0EA01C0380381E0EA0701A290C7FCA6B512E0EA0700B2383FC3FC1620809F -19>I<EB3FE013E0EA01C1EA0381EA0700A8B5FCEA0700B2383FE7FC1620809F19>I<9038 -1F81F89038F04F043901C07C06390380F80FEB00F05A0270C7FCA6B7FC3907007007B23A -3FE3FE3FE02320809F26>I<EA7038EAF87CEAFC7EA2EA743AEA0402A3EA0804A2EA1008 -A2EA2010EA40200F0E7F9F17>34 D<1340A2EA03F0EA0C4EEA1041382040801260004013 -4038C041C01343A238E04180EB40001270127CEA3FC0EA1FF86C7EEA03FEEA007FEB4F80 -1343EB41C0A2EAF040A312801480EA404100201300EA3042EA0C4CEA03F0EA0040A31225 -7EA117>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 /Fs 14 122 df<DB1FFC14C00203B5EAC001021FECF0 -03027FECFC07903B01FFFC00FE0F010701C0EB1F9F4948C7EA07FFD93FF8804948140049 -48157F485B4A153F4890C9121F485A000F170F5B001F1707A2485A1803A2127FA24993C8 -FCA212FFAA041FB61280127FA27FDC0001EBC000123FA36C7EA26C7EA26C7E7E6C7F806C -7F6D6C5CEB3FFCD90FFF5C6D01C0EB1FBF010101FCEBFF1F6D6CB5EAFE0F021FECF80302 -03ECE0009126001FFEC9FC413D7BBB4C>71 D<B612FEA426007FF0C9FCB3ADEF03C0A517 -071880A3170FA3171FA2173F177F17FF5E04071300163FB9FCA4323B7DBA3A>76 -D<B500F00207B512E0808080D8007F92390007E0006E6F5A81017B7F81137901787F6E7E -6E7E81141F6E7E6E7F6E7F82806E7F6F7E6F7E826F7E816F13806F13C017E06F13F081EE -7FF8EE3FFC17FEEE1FFF827013837013C318E37013F382EF7FFBEF3FFFA283838383A283 -83187F183FA201FC161FB500FC150F18071803A2433B7CBA4C>78 -D<B712F8EEFFC017F817FE3B007FF0001FFF040313C004007F717E717EA284171FA284A6 -60A2173F604D5A604C485A4C5BDC1FFEC8FC91B612F817C0A29139F0007FF0EE1FF8707E -707E707E8482A284A584A5F101E0A27013F0A2F103C0EF7FF8B600F890393FFC07809438 -1FFE0F0507B51200050113FCCBEA1FF0433C7CBA48>82 D<B600F80107B512E0A426007F -F0C83807E000725AB3B3A3013F4C5AA280011F4CC7FCA26D6C151E0107163E6E5D6D6C5D -6D6D13019026007FE0EB0FE0DA3FFCEB7FC0020FB65A02034AC8FCDA007F13F003071380 -433C7DBA4A>85 D<EB3FFE48B512E0000714F8390FE007FC9038F001FE486C6C7E6F7E82 -153F6C48806C5A6C5AC8FCA491B5FC131F90387FF83F3803FF803807FC00EA0FF0485A12 -3F485AA2485AA4157F6C7E15DF3A3FE0039FF03B1FF80F0FFFE03807FFFE0001497E3900 -3FE0002B267DA52F>97 D<13FE12FFA412071203B04AB4FC021F13F0027F13FC9138FC03 -FE9039FFF000FF02C0EB3F8091C7EA1FC04915E0EE0FF017F8A2EE07FCA317FEA917FCA3 -160F17F817F0161F6D15E06EEB3FC06EEB7F80D9F9E0EBFF009039F0FC07FE91387FFFF8 -D9E01F13E09026C003FEC7FC2F3C7DBB36>I<EE3F80ED3FFFA4150181B0ECFF80010F13 -F0013F13FC9038FFC03F3901FE000F4848130348487F48487F121F485AA2127F5BA312FF -A9127FA36C7EA2121F6C6C5B6C6C5B00035CD801FE011F13C02700FF807E13FE90387FFF -F8010F13E0010113002F3C7DBB36>100 D<49B47E010F13F0017F13FC9038FF81FE3A03 -FE007F80D807F8133F4848EB1FC0ED0FE0485A003F15F01507485A16F8A212FFA290B6FC -A301C0C8FCA4127FA36C7E1678121F7F000F15F06C6C13016C6CEB03E06C6CEB0FC03A00 -FFC07F8090393FFFFE00010F13F8010013C025267DA52C>I<EA01E0EA07F8487EA2487E -A46C5AA26C5AEA01E0C8FCAB13FE127FA412071203B3AAB512F0A4143D7DBC1A>105 -D<13FE12FFA412071203B3B3AEB512F8A4153C7DBB1A>108 D<D801FCEBFF8000FF0103 -13F0020F7F91381E03FC91383801FE000701607F0003497E01FD15805C01FFC7FCA35BB3 -A4B5D8F83F13FEA42F267CA536>110 D<3901FC03F000FFEB0FFC4AB4FC91383C3F80EC -707F00079038E0FFC000035BEBFD80A201FFEB7F809138003F00151E92C7FC5BB3A3B512 -FCA422267DA528>114 D<B500F0EBFFFCA4D803FEC7EA1F806D15006C151E806C5DA26E -137C017F14786E13F8013F5CECF001011F5CECF803010F5CA2ECFC0701075CECFE0F0103 -91C7FC6E5A6D131E15BE6D13BC15FC6E5AA36E5AA26E5AA26E5AA26E5AA2140F92C8FC5C -141E0008133E007F133C147C38FF807814F8EB81F0EB83E06C485A387C1F80D83FFFC9FC -EA1FFCEA07F02E377EA533>121 D E end -TeXDict begin - -1 0 bop 0 693 a Fs(GNU)33 b(Readline)h(Library)p 0 743 -1950 17 v 1011 791 a Fr(Edition)17 b(2.1,)c(for)i Fq(Readline)f -(Library)g Fr(V)l(ersion)i(2.1.)1718 845 y(Marc)o(h)e(1996)0 -2467 y Fp(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)0 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 0 2570 1950 9 v eop -2 1 bop 0 320 a Fr(This)15 b(do)q(cumen)o(t)f(describ)q(es)i(the)e(GNU) -g(Readline)j(Library)l(,)d(a)g(utilit)o(y)h(whic)o(h)g(aids)g(in)g(the) -f(consistency)h(of)f(user)0 382 y(in)o(terface)h(across)g(discrete)h -(programs)e(that)g(need)j(to)d(pro)o(vide)i(a)f(command)g(line)i(in)o -(terface.)0 519 y(Published)g(b)o(y)f(the)f(F)l(ree)g(Soft)o(w)o(are)f -(F)l(oundation)0 582 y(675)g(Massac)o(h)o(usetts)g(Av)o(en)o(ue,)0 -644 y(Cam)o(bridge,)h(MA)g(02139)f(USA)0 781 y(P)o(ermission)f(is)g -(gran)o(ted)f(to)f(mak)o(e)h(and)h(distribute)h(v)o(erbatim)e(copies)h -(of)f(this)h(man)o(ual)g(pro)o(vided)g(the)f(cop)o(yrigh)o(t)0 -843 y(notice)k(and)f(this)h(p)q(ermission)h(notice)e(are)g(preserv)o -(ed)h(on)f(all)h(copies.)0 980 y(P)o(ermission)f(is)f(gran)o(ted)f(to)h -(cop)o(y)g(and)g(distribute)h(mo)q(di\014ed)h(v)o(ersions)e(of)f(this)i -(man)o(ual)f(under)h(the)f(conditions)0 1043 y(for)e(v)o(erbatim)g(cop) -o(ying,)h(pro)o(vided)h(that)d(the)i(en)o(tire)g(resulting)h(deriv)o -(ed)f(w)o(ork)f(is)h(distributed)h(under)f(the)g(terms)0 -1105 y(of)i(a)g(p)q(ermission)h(notice)g(iden)o(tical)h(to)e(this)g -(one.)0 1242 y(P)o(ermission)20 b(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)f(in)o(to)h -(another)f(language,)0 1304 y(under)c(the)f(ab)q(o)o(v)o(e)g -(conditions)h(for)e(mo)q(di\014ed)j(v)o(ersions,)e(except)g(that)g -(this)g(p)q(ermission)i(notice)e(ma)o(y)g(b)q(e)h(stated)0 -1366 y(in)h(a)f(translation)g(appro)o(v)o(ed)g(b)o(y)g(the)g(F)l -(oundation.)0 2661 y(Cop)o(yrigh)o(t)226 2660 y(c)214 -2661 y Fo(\015)g Fr(1989,)f(1991)g(F)l(ree)h(Soft)o(w)o(are)f(F)l -(oundation,)h(Inc.)p eop -1 2 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(1)0 183 y Fn(1)41 b(Command)16 b(Line)f(Editing)62 -408 y Fr(This)h(c)o(hapter)f(describ)q(es)i(the)e(basic)h(features)f -(of)g(the)g Fm(GNU)g Fr(command)g(line)i(editing)f(in)o(terface.)0 -701 y Fp(1.1)33 b(In)n(tro)r(duction)17 b(to)e(Line)h(Editing)62 -845 y Fr(The)g(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.)62 -990 y(The)k(text)e Fq(C-K)h Fr(is)h(read)f(as)f(`Con)o(trol-K')h(and)g -(describ)q(es)i(the)e(c)o(haracter)f(pro)q(duced)j(when)e(the)g -Fq(K)g Fr(k)o(ey)g(is)0 1052 y(pressed)d(while)g(the)g(Con)o(trol)e(k)o -(ey)h(is)h(depressed.)62 1197 y(The)h(text)f Fq(M-K)g -Fr(is)i(read)e(as)g(`Meta-K')g(and)h(describ)q(es)h(the)f(c)o(haracter) -f(pro)q(duced)h(when)h(the)e(meta)g(k)o(ey)h(\(if)0 1259 -y(y)o(ou)f(ha)o(v)o(e)f(one\))h(is)g(depressed,)h(and)f(the)g -Fq(K)f Fr(k)o(ey)h(is)h(pressed.)22 b(If)16 b(y)o(ou)g(do)g(not)f(ha)o -(v)o(e)g(a)h(meta)f(k)o(ey)l(,)h(the)g(iden)o(tical)0 -1321 y(k)o(eystrok)o(e)j(can)g(b)q(e)i(generated)e(b)o(y)h(t)o(yping)f -Fq(ESC)h Fl(\014rst)p Fr(,)g(and)f(then)h(t)o(yping)g -Fq(K)p Fr(.)33 b(Either)20 b(pro)q(cess)g(is)g(kno)o(wn)f(as)0 -1383 y Fl(metafying)g Fr(the)c Fq(K)g Fr(k)o(ey)l(.)62 -1528 y(The)h(text)e Fq(M-C-K)g Fr(is)i(read)f(as)f(`Meta-Con)o(trol-k') -g(and)h(describ)q(es)h(the)g(c)o(haracter)e(pro)q(duced)i(b)o(y)f -Fl(metafying)0 1590 y Fq(C-K)p Fr(.)62 1735 y(In)i(addition,)h(sev)o -(eral)e(k)o(eys)g(ha)o(v)o(e)g(their)h(o)o(wn)f(names.)23 -b(Sp)q(eci\014cally)m(,)c Fq(DEL)p Fr(,)d Fq(ESC)p Fr(,)f -Fq(LFD)p Fr(,)h Fq(SPC)p Fr(,)g Fq(RET)p Fr(,)g(and)g -Fq(TAB)0 1797 y Fr(all)e(stand)f(for)f(themselv)o(es)i(when)f(seen)h -(in)g(this)f(text,)g(or)g(in)g(an)g(init)i(\014le)f(\(see)f(Section)h -(1.3)e([Readline)j(Init)f(File],)0 1859 y(page)h(5\).)0 -2152 y Fp(1.2)33 b(Readline)16 b(In)n(teraction)62 2296 -y Fr(Often)g(during)h(an)f(in)o(teractiv)o(e)g(session)h(y)o(ou)e(t)o -(yp)q(e)h(in)h(a)f(long)g(line)h(of)f(text,)f(only)h(to)g(notice)g -(that)f(the)h(\014rst)0 2359 y(w)o(ord)d(on)i(the)f(line)i(is)e(missp)q -(elled.)23 b(The)14 b(Readline)i(library)f(giv)o(es)g(y)o(ou)e(a)h(set) -g(of)g(commands)g(for)f(manipulating)0 2421 y(the)18 -b(text)g(as)g(y)o(ou)g(t)o(yp)q(e)g(it)h(in,)g(allo)o(wing)g(y)o(ou)f -(to)g(just)g(\014x)g(y)o(our)g(t)o(yp)q(o,)g(and)h(not)f(forcing)g(y)o -(ou)g(to)g(ret)o(yp)q(e)g(the)0 2483 y(ma)s(jorit)o(y)d(of)h(the)g -(line.)25 b(Using)17 b(these)g(editing)h(commands,)e(y)o(ou)g(mo)o(v)o -(e)f(the)i(cursor)f(to)g(the)g(place)h(that)f(needs)0 -2545 y(correction,)g(and)h(delete)g(or)f(insert)g(the)h(text)e(of)h -(the)g(corrections.)23 b(Then,)17 b(when)g(y)o(ou)f(are)g(satis\014ed)g -(with)h(the)0 2608 y(line,)h(y)o(ou)e(simply)i(press)f -Fq(RETURN)p Fr(.)23 b(Y)l(ou)17 b(do)f(not)g(ha)o(v)o(e)g(to)g(b)q(e)i -(at)e(the)g(end)h(of)f(the)h(line)h(to)e(press)h Fq(RETURN)p -Fr(;)f(the)0 2670 y(en)o(tire)g(line)h(is)e(accepted)h(regardless)f(of) -g(the)g(lo)q(cation)h(of)f(the)h(cursor)e(within)j(the)e(line.)p -eop -2 3 bop 0 -58 a Fr(2)1472 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(1.2.1)30 b(Readline)15 b(Bare)g(Essen)n(tials)62 -320 y Fr(In)f(order)f(to)f(en)o(ter)h(c)o(haracters)g(in)o(to)g(the)g -(line,)i(simply)f(t)o(yp)q(e)f(them.)19 b(The)14 b(t)o(yp)q(ed)f(c)o -(haracter)f(app)q(ears)i(where)0 382 y(the)h(cursor)h(w)o(as,)e(and)h -(then)h(the)g(cursor)f(mo)o(v)o(es)f(one)i(space)g(to)e(the)i(righ)o -(t.)k(If)c(y)o(ou)f(mist)o(yp)q(e)h(a)f(c)o(haracter,)f(y)o(ou)0 -445 y(can)h(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.)62 -582 y(Sometimes)f(y)o(ou)e(ma)o(y)h(miss)g(t)o(yping)g(a)g(c)o -(haracter)g(that)f(y)o(ou)h(w)o(an)o(ted)f(to)g(t)o(yp)q(e,)h(and)h -(not)e(notice)i(y)o(our)f(error)0 644 y(un)o(til)k(y)o(ou)e(ha)o(v)o(e) -g(t)o(yp)q(ed)h(sev)o(eral)g(other)f(c)o(haracters.)23 -b(In)18 b(that)d(case,)i(y)o(ou)f(can)h(t)o(yp)q(e)g -Fq(C-B)f Fr(to)g(mo)o(v)o(e)g(the)g(cursor)0 706 y(to)f(the)h(left,)g -(and)g(then)g(correct)f(y)o(our)h(mistak)o(e.)21 b(Afterw)o(ards,)14 -b(y)o(ou)i(can)g(mo)o(v)o(e)f(the)h(cursor)f(to)g(the)h(righ)o(t)g -(with)0 769 y Fq(C-F)p Fr(.)62 906 y(When)i(y)o(ou)f(add)g(text)g(in)h -(the)f(middle)i(of)e(a)g(line,)i(y)o(ou)e(will)i(notice)e(that)g(c)o -(haracters)f(to)h(the)g(righ)o(t)g(of)g(the)0 968 y(cursor)h(are)h -(`pushed)g(o)o(v)o(er')e(to)h(mak)o(e)g(ro)q(om)g(for)g(the)h(text)f -(that)g(y)o(ou)g(ha)o(v)o(e)h(inserted.)31 b(Lik)o(ewise,)20 -b(when)f(y)o(ou)0 1030 y(delete)f(text)f(b)q(ehind)i(the)f(cursor,)f(c) -o(haracters)f(to)h(the)g(righ)o(t)g(of)g(the)h(cursor)f(are)g(`pulled)i -(bac)o(k')d(to)h(\014ll)i(in)f(the)0 1092 y(blank)g(space)f(created)g -(b)o(y)g(the)h(remo)o(v)m(al)f(of)f(the)i(text.)25 b(A)17 -b(list)h(of)e(the)h(basic)h(bare)f(essen)o(tials)h(for)e(editing)j(the) -0 1155 y(text)c(of)f(an)i(input)g(line)h(follo)o(ws.)0 -1303 y Fq(C-B)168 b Fr(Mo)o(v)o(e)14 b(bac)o(k)h(one)h(c)o(haracter.)0 -1390 y Fq(C-F)168 b Fr(Mo)o(v)o(e)14 b(forw)o(ard)g(one)h(c)o -(haracter.)0 1476 y Fq(DEL)168 b Fr(Delete)16 b(the)f(c)o(haracter)g -(to)f(the)h(left)h(of)f(the)g(cursor.)0 1562 y Fq(C-D)168 -b Fr(Delete)16 b(the)f(c)o(haracter)g(underneath)h(the)f(cursor.)0 -1648 y(Prin)o(ting)h(c)o(haracters)240 1710 y(Insert)f(the)h(c)o -(haracter)e(in)o(to)h(the)h(line)h(at)d(the)h(cursor.)0 -1796 y Fq(C-_)168 b Fr(Undo)15 b(the)h(last)f(thing)h(that)e(y)o(ou)h -(did.)21 b(Y)l(ou)15 b(can)h(undo)f(all)h(the)g(w)o(a)o(y)e(bac)o(k)h -(to)f(an)i(empt)o(y)e(line.)0 2001 y Fk(1.2.2)30 b(Readline)15 -b(Mo)n(v)n(emen)n(t)h(Commands)62 2138 y Fr(The)c(ab)q(o)o(v)o(e)g -(table)g(describ)q(es)i(the)e(most)f(basic)h(p)q(ossible)i(k)o(eystrok) -o(es)d(that)g(y)o(ou)g(need)i(in)g(order)f(to)f(do)h(editing)0 -2201 y(of)g(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)g(to)e Fq(C-B)p Fr(,)0 2263 y Fq(C-F)p -Fr(,)i Fq(C-D)p Fr(,)h(and)g Fq(DEL)p Fr(.)20 b(Here)15 -b(are)g(some)g(commands)g(for)f(mo)o(ving)h(more)g(rapidly)i(ab)q(out)e -(the)g(line.)0 2412 y Fq(C-A)168 b Fr(Mo)o(v)o(e)14 b(to)h(the)g(start) -f(of)h(the)g(line.)0 2498 y Fq(C-E)168 b Fr(Mo)o(v)o(e)14 -b(to)h(the)g(end)h(of)f(the)g(line.)0 2584 y Fq(M-F)168 -b Fr(Mo)o(v)o(e)14 b(forw)o(ard)g(a)h(w)o(ord.)0 2670 -y Fq(M-B)168 b Fr(Mo)o(v)o(e)14 b(bac)o(kw)o(ard)h(a)g(w)o(ord.)p -eop -3 4 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(3)0 183 y Fq(C-L)168 b Fr(Clear)15 b(the)h(screen,)f(reprin)o(ting)h -(the)f(curren)o(t)g(line)i(at)e(the)g(top.)62 350 y(Notice)22 -b(ho)o(w)e Fq(C-F)h Fr(mo)o(v)o(es)f(forw)o(ard)g(a)g(c)o(haracter,)i -(while)g Fq(M-F)f Fr(mo)o(v)o(es)f(forw)o(ard)g(a)h(w)o(ord.)36 -b(It)21 b(is)h(a)f(lo)q(ose)0 412 y(con)o(v)o(en)o(tion)15 -b(that)g(con)o(trol)g(k)o(eystrok)o(es)f(op)q(erate)h(on)g(c)o -(haracters)f(while)j(meta)e(k)o(eystrok)o(es)f(op)q(erate)h(on)g(w)o -(ords.)0 696 y Fk(1.2.3)30 b(Readline)15 b(Killing)g(Commands)62 -841 y Fl(Killing)25 b Fr(text)18 b(means)g(to)f(delete)i(the)g(text)e -(from)h(the)g(line,)i(but)e(to)g(sa)o(v)o(e)f(it)i(a)o(w)o(a)o(y)d(for) -i(later)g(use,)h(usually)0 903 y(b)o(y)c Fl(y)o(anking)k -Fr(\(re-inserting\))c(it)g(bac)o(k)g(in)o(to)g(the)g(line.)21 -b(If)16 b(the)f(description)h(for)e(a)h(command)f(sa)o(ys)h(that)f(it)h -(`kills')0 966 y(text,)f(then)i(y)o(ou)f(can)g(b)q(e)h(sure)f(that)g(y) -o(ou)g(can)g(get)g(the)g(text)g(bac)o(k)g(in)h(a)f(di\013eren)o(t)g -(\(or)f(the)i(same\))e(place)i(later.)62 1111 y(When)g(y)o(ou)f(use)g -(a)g(kill)i(command,)e(the)h(text)e(is)i(sa)o(v)o(ed)f(in)h(a)f -Fl(kill-ring)p Fr(.)22 b(An)o(y)16 b(n)o(um)o(b)q(er)f(of)g(consecutiv) -o(e)h(kills)0 1173 y(sa)o(v)o(e)g(all)i(of)e(the)h(killed)i(text)d -(together,)g(so)g(that)g(when)h(y)o(ou)f(y)o(ank)h(it)g(bac)o(k,)f(y)o -(ou)h(get)f(it)h(all.)25 b(The)17 b(kill)h(ring)f(is)0 -1236 y(not)e(line)i(sp)q(eci\014c;)g(the)f(text)f(that)g(y)o(ou)g -(killed)j(on)d(a)h(previously)g(t)o(yp)q(ed)g(line)h(is)f(a)o(v)m -(ailable)i(to)d(b)q(e)h(y)o(ank)o(ed)f(bac)o(k)0 1298 -y(later,)g(when)h(y)o(ou)e(are)h(t)o(yping)h(another)e(line.)62 -1443 y(Here)i(is)f(the)h(list)g(of)e(commands)h(for)g(killing)j(text.)0 -1610 y Fq(C-K)168 b Fr(Kill)17 b(the)f(text)e(from)h(the)g(curren)o(t)g -(cursor)g(p)q(osition)h(to)f(the)g(end)h(of)f(the)g(line.)0 -1714 y Fq(M-D)168 b Fr(Kill)17 b(from)d(the)h(cursor)g(to)f(the)h(end)g -(of)g(the)g(curren)o(t)f(w)o(ord,)g(or)g(if)i(b)q(et)o(w)o(een)f(w)o -(ords,)f(to)g(the)h(end)g(of)240 1776 y(the)g(next)h(w)o(ord.)0 -1880 y Fq(M-DEL)120 b Fr(Kill)16 b(from)d(the)i(cursor)e(the)h(start)f -(of)h(the)g(previous)h(w)o(ord,)e(or)g(if)i(b)q(et)o(w)o(een)f(w)o -(ords,)f(to)h(the)g(start)e(of)240 1942 y(the)j(previous)h(w)o(ord.)0 -2046 y Fq(C-W)168 b Fr(Kill)18 b(from)e(the)g(cursor)g(to)f(the)h -(previous)h(whitespace.)24 b(This)17 b(is)f(di\013eren)o(t)h(than)f -Fq(M-DEL)f Fr(b)q(ecause)240 2109 y(the)g(w)o(ord)g(b)q(oundaries)h -(di\013er.)62 2275 y(And,)e(here)g(is)h(ho)o(w)e(to)g -Fl(y)o(ank)j Fr(the)e(text)f(bac)o(k)g(in)o(to)h(the)f(line.)22 -b(Y)l(anking)14 b(means)g(to)f(cop)o(y)g(the)h(most-recen)o(tly-)0 -2337 y(killed)j(text)e(from)g(the)g(kill)i(bu\013er.)0 -2504 y Fq(C-Y)168 b Fr(Y)l(ank)15 b(the)h(most)e(recen)o(tly)i(killed)h -(text)e(bac)o(k)g(in)o(to)g(the)h(bu\013er)f(at)f(the)i(cursor.)0 -2608 y Fq(M-Y)168 b Fr(Rotate)13 b(the)h(kill-ring,)i(and)e(y)o(ank)g -(the)g(new)g(top.)19 b(Y)l(ou)14 b(can)g(only)g(do)g(this)g(if)g(the)g -(prior)g(command)240 2670 y(is)i Fq(C-Y)e Fr(or)h Fq(M-Y)p -Fr(.)p eop -4 5 bop 0 -58 a Fr(4)1472 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(1.2.4)30 b(Readline)15 b(Argumen)n(ts)62 345 -y Fr(Y)l(ou)k(can)g(pass)f(n)o(umeric)i(argumen)o(ts)d(to)h(Readline)j -(commands.)30 b(Sometimes)19 b(the)f(argumen)o(t)g(acts)g(as)g(a)0 -407 y(rep)q(eat)f(coun)o(t,)f(other)g(times)g(it)h(is)g(the)g -Fl(sign)f Fr(of)g(the)h(argumen)o(t)f(that)f(is)i(signi\014can)o(t.)25 -b(If)16 b(y)o(ou)h(pass)f(a)g(negativ)o(e)0 470 y(argumen)o(t)g(to)g(a) -h(command)g(whic)o(h)h(normally)f(acts)g(in)h(a)e(forw)o(ard)g -(direction,)i(that)f(command)f(will)j(act)d(in)i(a)0 -532 y(bac)o(kw)o(ard)13 b(direction.)20 b(F)l(or)13 b(example,)i(to)d -(kill)k(text)d(bac)o(k)g(to)g(the)h(start)e(of)h(the)h(line,)h(y)o(ou)e -(migh)o(t)g(t)o(yp)q(e)h Fq(M--)h(C-k)o Fr(.)62 694 y(The)k(general)g -(w)o(a)o(y)f(to)g(pass)g(n)o(umeric)i(argumen)o(ts)e(to)g(a)g(command)h -(is)g(to)f(t)o(yp)q(e)g(meta)g(digits)i(b)q(efore)f(the)0 -756 y(command.)36 b(If)21 b(the)g(\014rst)f(`digit')h(y)o(ou)g(t)o(yp)q -(e)f(is)i(a)e(min)o(us)h(sign)g(\()p Fq(-)p Fr(\),)g(then)g(the)g(sign) -g(of)g(the)f(argumen)o(t)g(will)0 818 y(b)q(e)i(negativ)o(e.)40 -b(Once)22 b(y)o(ou)f(ha)o(v)o(e)h(t)o(yp)q(ed)g(one)f(meta)g(digit)i -(to)e(get)g(the)h(argumen)o(t)f(started,)h(y)o(ou)f(can)h(t)o(yp)q(e)0 -881 y(the)c(remainder)h(of)f(the)g(digits,)h(and)f(then)h(the)f -(command.)29 b(F)l(or)17 b(example,)i(to)f(giv)o(e)g(the)g -Fq(C-D)g Fr(command)g(an)0 943 y(argumen)o(t)c(of)h(10,)f(y)o(ou)h -(could)h(t)o(yp)q(e)g(`)p Fq(M-1)e(0)h(C-d)p Fr('.)0 -1375 y Fk(1.2.5)30 b(Searc)n(hing)15 b(for)g(Commands)h(in)f(the)g -(History)62 1537 y Fr(Readline)j(pro)o(vides)d(commands)g(for)g(searc)o -(hing)h(through)e(the)i(command)f(history)g(for)g(lines)h(con)o -(taining)g(a)0 1599 y(sp)q(eci\014ed)h(string.)j(There)c(are)f(t)o(w)o -(o)e(searc)o(h)i(mo)q(des:)20 b Fl(incremen)o(tal)f Fr(and)c -Fl(non-incremen)o(tal)p Fr(.)62 1761 y(Incremen)o(tal)i(searc)o(hes)e -(b)q(egin)i(b)q(efore)f(the)g(user)f(has)h(\014nished)h(t)o(yping)f -(the)g(searc)o(h)f(string.)21 b(As)15 b(eac)o(h)h(c)o(har-)0 -1823 y(acter)f(of)h(the)g(searc)o(h)f(string)h(is)g(t)o(yp)q(ed,)g -(readline)h(displa)o(ys)g(the)f(next)g(en)o(try)f(from)g(the)h(history) -g(matc)o(hing)g(the)0 1885 y(string)g(t)o(yp)q(ed)g(so)f(far.)20 -b(An)c(incremen)o(tal)h(searc)o(h)e(requires)i(only)f(as)f(man)o(y)g(c) -o(haracters)g(as)h(needed)h(to)e(\014nd)h(the)0 1948 -y(desired)g(history)f(en)o(try)l(.)20 b(The)15 b(Escap)q(e)h(c)o -(haracter)e(is)h(used)h(to)e(terminate)h(an)g(incremen)o(tal)h(searc)o -(h.)k(Con)o(trol-J)0 2010 y(will)c(also)f(terminate)g(the)g(searc)o(h.) -k(Con)o(trol-G)14 b(will)j(ab)q(ort)d(an)h(incremen)o(tal)g(searc)o(h)g -(and)g(restore)f(the)h(original)0 2072 y(line.)30 b(When)18 -b(the)h(searc)o(h)e(is)i(terminated,)g(the)f(history)g(en)o(try)f(con)o -(taining)i(the)f(searc)o(h)g(string)g(b)q(ecomes)h(the)0 -2134 y(curren)o(t)g(line.)35 b(T)l(o)20 b(\014nd)g(other)f(matc)o(hing) -h(en)o(tries)g(in)g(the)g(history)g(list,)h(t)o(yp)q(e)e(Con)o(trol-S)h -(or)f(Con)o(trol-R)g(as)0 2197 y(appropriate.)k(This)17 -b(will)h(searc)o(h)e(bac)o(kw)o(ard)g(or)f(forw)o(ard)g(in)j(the)e -(history)g(for)g(the)g(next)h(en)o(try)f(matc)o(hing)g(the)0 -2259 y(searc)o(h)c(string)h(t)o(yp)q(ed)f(so)g(far.)19 -b(An)o(y)12 b(other)g(k)o(ey)g(sequence)i(b)q(ound)f(to)f(a)g(readline) -i(command)e(will)i(terminate)f(the)0 2321 y(searc)o(h)j(and)h(execute)g -(that)f(command.)24 b(F)l(or)16 b(instance,)h(a)g Fq(newline)e -Fr(will)j(terminate)f(the)g(searc)o(h)f(and)h(accept)0 -2384 y(the)e(line,)i(thereb)o(y)e(executing)h(the)g(command)f(from)f -(the)h(history)h(list.)62 2545 y(Non-incremen)o(tal)k(searc)o(hes)f -(read)f(the)h(en)o(tire)g(searc)o(h)g(string)f(b)q(efore)h(starting)f -(to)g(searc)o(h)h(for)f(matc)o(hing)0 2608 y(history)g(lines.)29 -b(The)18 b(searc)o(h)g(string)g(ma)o(y)f(b)q(e)h(t)o(yp)q(ed)g(b)o(y)g -(the)g(user)g(or)f(part)g(of)h(the)g(con)o(ten)o(ts)f(of)g(the)h -(curren)o(t)0 2670 y(line.)p eop -5 6 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(5)0 183 y Fp(1.3)33 b(Readline)16 b(Init)g(File)62 -324 y Fr(Although)h(the)f(Readline)j(library)e(comes)f(with)g(a)g(set)g -(of)g Fq(emacs)p Fr(-lik)o(e)h(k)o(eybindings)h(installed)g(b)o(y)e -(default,)0 387 y(it)e(is)g(p)q(ossible)i(that)d(y)o(ou)g(w)o(ould)h -(lik)o(e)h(to)e(use)h(a)f(di\013eren)o(t)h(set)g(of)f(k)o(eybindings.) -21 b(Y)l(ou)14 b(can)g(customize)g(programs)0 449 y(that)j(use)h -(Readline)i(b)o(y)e(putting)h(commands)e(in)i(an)f Fl(inputrc)j -Fr(\014le)e(in)g(y)o(our)e(home)h(directory)l(.)28 b(The)19 -b(name)e(of)0 511 y(this)e(\014le)h(is)g(tak)o(en)e(from)h(the)g(v)m -(alue)h(of)e(the)h(en)o(vironmen)o(t)h(v)m(ariable)g -Fq(INPUTRC)p Fr(.)j(If)c(that)f(v)m(ariable)j(is)e(unset,)g(the)0 -573 y(default)h(is)f(`)p Fq(~/.inputrc)p Fr('.)62 714 -y(When)k(a)g(program)e(whic)o(h)j(uses)f(the)g(Readline)i(library)e -(starts)f(up,)h(the)g(init)h(\014le)g(is)f(read,)g(and)g(the)g(k)o(ey)0 -777 y(bindings)e(are)e(set.)62 918 y(In)j(addition,)h(the)f -Fq(C-x)c(C-r)k Fr(command)f(re-reads)g(this)h(init)h(\014le,)g(th)o(us) -e(incorp)q(orating)h(an)o(y)f(c)o(hanges)h(that)0 980 -y(y)o(ou)d(migh)o(t)g(ha)o(v)o(e)g(made)g(to)f(it.)0 -1224 y Fk(1.3.1)30 b(Readline)15 b(Init)g(File)g(Syn)n(tax)62 -1365 y Fr(There)h(are)f(only)h(a)f(few)g(basic)h(constructs)f(allo)o(w) -o(ed)h(in)g(the)g(Readline)i(init)e(\014le.)22 b(Blank)16 -b(lines)h(are)e(ignored.)0 1427 y(Lines)f(b)q(eginning)h(with)e(a)f(`)p -Fq(#)p Fr(')g(are)g(commen)o(ts.)19 b(Lines)14 b(b)q(eginning)h(with)e -(a)f(`)p Fq($)p Fr(')g(indicate)i(conditional)g(constructs)0 -1490 y(\(see)i(Section)h(1.3.2)e([Conditional)i(Init)g(Constructs],)e -(page)i(8\).)22 b(Other)16 b(lines)i(denote)f(v)m(ariable)h(settings)e -(and)0 1552 y(k)o(ey)f(bindings.)0 1710 y(V)l(ariable)h(Settings)240 -1772 y(Y)l(ou)j(can)g(c)o(hange)g(the)g(state)f(of)g(a)g(few)h(v)m -(ariables)h(in)g(Readline)h(b)o(y)d(using)i(the)f Fq(set)f -Fr(command)240 1834 y(within)e(the)f(init)h(\014le.)k(Here)15 -b(is)g(ho)o(w)g(y)o(ou)f(w)o(ould)h(sp)q(ecify)h(that)e(y)o(ou)g(wish)i -(to)e(use)h Fq(vi)f Fr(line)j(editing)240 1896 y(commands:)360 -1965 y Fq(set)23 b(editing-mode)g(vi)240 2044 y Fr(Righ)o(t)14 -b(no)o(w,)f(there)h(are)f(only)h(a)f(few)h(v)m(ariables)g(whic)o(h)h -(can)f(b)q(e)g(set;)f(so)g(few,)h(in)g(fact,)f(that)g(w)o(e)g(just)240 -2106 y(list)j(them)f(here:)240 2201 y Fq(bell-style)480 -2263 y Fr(Con)o(trols)h(what)f(happ)q(ens)j(when)f(Readline)h(w)o(an)o -(ts)e(to)f(ring)i(the)f(terminal)h(b)q(ell.)26 b(If)480 -2326 y(set)17 b(to)f(`)p Fq(none)p Fr(',)g(Readline)j(nev)o(er)f(rings) -f(the)g(b)q(ell.)28 b(If)17 b(set)g(to)f(`)p Fq(visible)p -Fr(',)g(Readline)480 2388 y(uses)21 b(a)g(visible)j(b)q(ell)f(if)e(one) -h(is)f(a)o(v)m(ailable.)40 b(If)21 b(set)g(to)g(`)p Fq(audible)p -Fr(')e(\(the)i(default\),)480 2450 y(Readline)d(attempts)c(to)g(ring)i -(the)f(terminal's)h(b)q(ell.)240 2545 y Fq(comment-begin)480 -2608 y Fr(The)d(string)h(to)e(insert)i(at)e(the)i(b)q(eginning)h(of)e -(the)g(line)i(when)f(the)f Fq(insert-comment)480 2670 -y Fr(command)i(is)h(executed.)21 b(The)15 b(default)h(v)m(alue)g(is)g -Fq("#")p Fr(.)p eop -6 7 bop 0 -58 a Fr(6)1472 b(GNU)15 b(Readline)i(Library)240 -183 y Fq(completion-query-items)480 246 y Fr(The)12 b(n)o(um)o(b)q(er)g -(of)f(p)q(ossible)j(completions)e(that)f(determines)i(when)f(the)g -(user)g(is)g(ask)o(ed)480 308 y(whether)k(he)h(w)o(an)o(ts)d(to)i(see)g -(the)g(list)h(of)e(p)q(ossibiliti)q(es.)25 b(If)16 b(the)g(n)o(um)o(b)q -(er)h(of)e(p)q(ossible)480 370 y(completions)i(is)f(greater)f(than)h -(this)h(v)m(alue,)f(Readline)j(will)e(ask)f(the)g(user)g(whether)480 -432 y(or)k(not)h(he)h(wishes)f(to)g(view)g(them;)j(otherwise,)e(they)f -(are)g(simply)h(listed.)39 b(The)480 495 y(default)16 -b(limit)g(is)g Fq(100)p Fr(.)240 592 y Fq(convert-meta)480 -654 y Fr(If)21 b(set)f(to)g(`)p Fq(on)p Fr(',)g(Readline)j(will)f(con)o -(v)o(ert)e(c)o(haracters)f(with)i(the)g(eigth)f(bit)h(set)g(to)480 -716 y(an)c(ASCI)q(I)g(k)o(ey)g(sequence)h(b)o(y)e(stripping)i(the)f -(eigth)g(bit)g(and)g(prep)q(ending)i(an)d Fq(ESC)480 -779 y Fr(c)o(haracter,)h(con)o(v)o(erting)g(them)g(to)f(a)h -(meta-pre\014xed)h(k)o(ey)f(sequence.)27 b(The)17 b(default)480 -841 y(v)m(alue)f(is)g(`)p Fq(on)p Fr('.)240 938 y Fq -(disable-completion)480 1000 y Fr(If)e(set)f(to)g(`)p -Fq(On)p Fr(',)f(readline)j(will)h(inhibit)f(w)o(ord)e(completion.)20 -b(Completion)15 b(c)o(haracters)480 1063 y(will)h(b)q(e)g(inserted)g -(in)o(to)e(the)h(line)i(as)d(if)h(they)g(had)g(b)q(een)h(mapp)q(ed)g -(to)e Fq(self-insert)p Fr(.)480 1125 y(The)h(default)h(is)g(`)p -Fq(off)p Fr('.)240 1222 y Fq(editing-mode)480 1285 y -Fr(The)d Fq(editing-mode)e Fr(v)m(ariable)j(con)o(trols)e(whic)o(h)h -(editing)h(mo)q(de)f(y)o(ou)f(are)g(using.)20 b(By)480 -1347 y(default,)f(Readline)h(starts)c(up)i(in)h(Emacs)e(editing)i(mo)q -(de,)f(where)g(the)g(k)o(eystrok)o(es)480 1409 y(are)g(most)f(similar)i -(to)e(Emacs.)27 b(This)19 b(v)m(ariable)g(can)f(b)q(e)h(set)e(to)g -(either)i(`)p Fq(emacs)p Fr(')d(or)480 1471 y(`)p Fq(vi)p -Fr('.)240 1569 y Fq(enable-keypad)480 1631 y Fr(When)g(set)g(to)f(`)p -Fq(on)p Fr(',)g(readline)j(will)f(try)e(to)h(enable)h(the)f -(application)h(k)o(eypad)f(when)480 1693 y(it)f(is)g(called.)22 -b(Some)15 b(systems)f(need)i(this)f(to)f(enable)i(the)f(arro)o(w)f(k)o -(eys.)19 b(The)c(default)480 1755 y(is)h(`)p Fq(off)p -Fr('.)240 1853 y Fq(expand-tilde)480 1915 y Fr(If)i(set)f(to)f(`)p -Fq(on)p Fr(',)h(tilde)h(expansion)h(is)e(p)q(erformed)h(when)g -(Readline)h(attempts)e(w)o(ord)480 1977 y(completion.)k(The)15 -b(default)h(is)g(`)p Fq(off)p Fr('.)240 2075 y Fq -(horizontal-scroll-mode)480 2137 y Fr(This)j(v)m(ariable)h(can)e(b)q(e) -i(set)e(to)g(either)h(`)p Fq(on)p Fr(')e(or)h(`)p Fq(off)p -Fr('.)28 b(Setting)19 b(it)g(to)f(`)p Fq(on)p Fr(')f(means)480 -2199 y(that)f(the)h(text)f(of)h(the)f(lines)j(that)d(y)o(ou)g(edit)i -(will)g(scroll)g(horizon)o(tally)f(on)g(a)g(single)480 -2261 y(screen)h(line)h(when)f(they)f(are)g(longer)h(than)f(the)g(width) -h(of)f(the)g(screen,)h(instead)g(of)480 2324 y(wrapping)e(on)o(to)e(a)h -(new)g(screen)h(line.)21 b(By)16 b(default,)f(this)h(v)m(ariable)g(is)g -(set)f(to)g(`)p Fq(off)p Fr('.)240 2421 y Fq(keymap)96 -b Fr(Sets)13 b(Readline's)i(idea)e(of)g(the)g(curren)o(t)f(k)o(eymap)h -(for)f(k)o(ey)h(binding)i(commands.)k(Ac-)480 2483 y(ceptable)d -Fq(keymap)e Fr(names)h(are)g Fq(emacs)p Fr(,)f Fq(emacs-standard)p -Fr(,)f Fq(emacs-meta)p Fr(,)g Fq(emacs-)480 2545 y(ctlx)p -Fr(,)18 b Fq(vi)p Fr(,)h Fq(vi-command)p Fr(,)e(and)i -Fq(vi-insert)p Fr(.)28 b Fq(vi)18 b Fr(is)h(equiv)m(alen)o(t)h(to)e -Fq(vi-command)p Fr(;)480 2608 y Fq(emacs)d Fr(is)i(equiv)m(alen)o(t)h -(to)d Fq(emacs-standard)p Fr(.)20 b(The)d(default)f(v)m(alue)i(is)e -Fq(emacs)p Fr(.)22 b(The)480 2670 y(v)m(alue)16 b(of)f(the)g -Fq(editing-mode)f Fr(v)m(ariable)j(also)e(a\013ects)f(the)h(default)h -(k)o(eymap.)p eop -7 8 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(7)240 183 y Fq(mark-directories)480 246 y Fr(If)22 -b(set)g(to)g(`)p Fq(on)p Fr(',)g(completed)h(directory)f(names)h(ha)o -(v)o(e)e(a)h(slash)h(app)q(ended.)42 b(The)480 308 y(default)16 -b(is)f(`)p Fq(on)p Fr('.)240 388 y Fq(mark-modified-lines)480 -450 y Fr(This)f(v)m(ariable,)h(when)e(set)g(to)g(`)p -Fq(on)p Fr(',)f(sa)o(ys)h(to)g(displa)o(y)h(an)f(asterisk)g(\(`)p -Fq(*)p Fr('\))f(at)h(the)g(start)480 512 y(of)f(history)h(lines)h(whic) -o(h)f(ha)o(v)o(e)f(b)q(een)i(mo)q(di\014ed.)21 b(This)13 -b(v)m(ariable)h(is)f(`)p Fq(off)p Fr(')e(b)o(y)i(default.)240 -593 y Fq(input-meta)480 655 y Fr(If)21 b(set)g(to)g(`)p -Fq(on)p Fr(',)g(Readline)i(will)g(enable)g(eigh)o(t-bit)f(input)g(\(it) -f(will)i(not)d(strip)i(the)480 717 y(eigh)o(th)e(bit)f(from)f(the)i(c)o -(haracters)e(it)h(reads\),)h(regardless)f(of)f(what)h(the)g(terminal) -480 779 y(claims)d(it)g(can)f(supp)q(ort.)21 b(The)15 -b(default)h(v)m(alue)h(is)e(`)p Fq(off)p Fr('.)20 b(The)15 -b(name)g Fq(meta-flag)f Fr(is)480 842 y(a)h(synon)o(ym)g(for)f(this)i -(v)m(ariable.)240 922 y Fq(output-meta)480 984 y Fr(If)11 -b(set)f(to)g(`)p Fq(on)p Fr(',)g(Readline)j(will)g(displa)o(y)e(c)o -(haracters)f(with)h(the)g(eigh)o(th)g(bit)g(set)g(directly)480 -1046 y(rather)k(than)g(as)f(a)h(meta-pre\014xed)h(escap)q(e)g -(sequence.)21 b(The)16 b(default)f(is)h(`)p Fq(off)p -Fr('.)240 1126 y Fq(show-all-if-ambiguous)480 1189 y -Fr(This)f(alters)f(the)h(default)g(b)q(eha)o(vior)g(of)f(the)h -(completion)g(functions.)21 b(If)14 b(set)h(to)e(`)p -Fq(on)p Fr(',)480 1251 y(w)o(ords)18 b(whic)o(h)i(ha)o(v)o(e)f(more)f -(than)h(one)g(p)q(ossible)i(completion)f(cause)f(the)g(matc)o(hes)480 -1313 y(to)e(b)q(e)h(listed)h(immediately)g(instead)f(of)f(ringing)i -(the)e(b)q(ell.)29 b(The)18 b(default)g(v)m(alue)g(is)480 -1375 y(`)p Fq(off)p Fr('.)240 1456 y Fq(visible-stats)480 -1518 y Fr(If)c(set)g(to)f(`)p Fq(on)p Fr(',)f(a)i(c)o(haracter)f -(denoting)h(a)g(\014le's)g(t)o(yp)q(e)g(is)g(app)q(ended)i(to)d(the)h -(\014lename)480 1580 y(when)i(listing)g(p)q(ossible)h(completions.)k -(The)16 b(default)f(is)h(`)p Fq(off)p Fr('.)0 1660 y(Key)g(Bindings)240 -1722 y(The)k(syn)o(tax)f(for)g(con)o(trolling)i(k)o(ey)e(bindings)j(in) -e(the)g(init)h(\014le)g(is)f(simple.)35 b(First)19 b(y)o(ou)g(ha)o(v)o -(e)h(to)240 1785 y(kno)o(w)13 b(the)h(name)g(of)f(the)h(command)g(that) -f(y)o(ou)g(w)o(an)o(t)g(to)g(c)o(hange.)20 b(The)14 b(follo)o(wing)g -(pages)g(con)o(tain)240 1847 y(tables)i(of)f(the)h(command)g(name,)f -(the)h(default)g(k)o(eybinding,)i(and)e(a)f(short)g(description)i(of)f -(what)240 1909 y(the)f(command)g(do)q(es.)240 1980 y(Once)h(y)o(ou)e -(kno)o(w)g(the)h(name)g(of)f(the)h(command,)f(simply)i(place)g(the)f -(name)f(of)h(the)f(k)o(ey)h(y)o(ou)f(wish)240 2043 y(to)g(bind)j(the)e -(command)g(to,)f(a)g(colon,)i(and)f(then)g(the)g(name)g(of)g(the)g -(command)g(on)g(a)f(line)j(in)f(the)240 2105 y(init)h(\014le.)22 -b(The)16 b(name)g(of)f(the)h(k)o(ey)f(can)h(b)q(e)g(expressed)h(in)f -(di\013eren)o(t)g(w)o(a)o(ys,)f(dep)q(ending)i(on)f(whic)o(h)240 -2167 y(is)g(most)e(comfortable)h(for)g(y)o(ou.)240 2247 -y Fl(k)o(eyname)s Fr(:)k Fl(function-name)g Fr(or)c Fl(macro)480 -2310 y(k)o(eyname)j Fr(is)d(the)h(name)f(of)g(a)g(k)o(ey)g(sp)q(elled)i -(out)e(in)h(English.)21 b(F)l(or)15 b(example:)600 2370 -y Fq(Control-u:)22 b(universal-argument)600 2422 y(Meta-Rubout:)g -(backward-kill-word)600 2474 y(Control-o:)g(">)i(output")480 -2545 y Fr(In)12 b(the)g(ab)q(o)o(v)o(e)f(example,)h(`)p -Fq(C-u)p Fr(')f(is)h(b)q(ound)g(to)f(the)h(function)g -Fq(universal-argument)p Fr(,)480 2608 y(and)h(`)p Fq(C-o)p -Fr(')f(is)h(b)q(ound)h(to)f(run)g(the)g(macro)f(expressed)i(on)f(the)g -(righ)o(t)g(hand)g(side)h(\(that)480 2670 y(is,)h(to)g(insert)h(the)f -(text)g(`)p Fq(>)f(output)p Fr(')g(in)o(to)h(the)h(line\).)p -eop -8 9 bop 0 -58 a Fr(8)1472 b(GNU)15 b(Readline)i(Library)240 -183 y Fq(")p Fl(k)o(eyseq)q Fq(")p Fr(:)j Fl(function-name)e -Fr(or)d Fl(macro)480 246 y(k)o(eyseq)j Fr(di\013ers)f(from)f -Fl(k)o(eyname)k Fr(ab)q(o)o(v)o(e)c(in)i(that)e(strings)h(denoting)h -(an)f(en)o(tire)g(k)o(ey)480 308 y(sequence)i(can)f(b)q(e)h(sp)q -(eci\014ed,)i(b)o(y)d(placing)h(the)f(k)o(ey)g(sequence)h(in)g(double)h -(quotes.)480 370 y(Some)e(GNU)g(Emacs)f(st)o(yle)h(k)o(ey)g(escap)q(es) -g(can)g(b)q(e)h(used,)g(as)e(in)i(the)f(follo)o(wing)h(ex-)480 -432 y(ample,)c(but)h(the)f(sp)q(ecial)i(c)o(haracter)e(names)g(are)g -(not)f(recognized.)600 499 y Fq("\\C-u":)23 b(universal-argument)600 -551 y("\\C-x\\C-r":)f(re-read-init-file)600 603 y("\\e[11~":)h -("Function)f(Key)i(1")480 681 y Fr(In)13 b(the)g(ab)q(o)o(v)o(e)g -(example,)g(`)p Fq(C-u)p Fr(')f(is)h(b)q(ound)h(to)e(the)h(function)g -Fq(universal-argument)480 743 y Fr(\(just)g(as)f(it)i(w)o(as)e(in)i -(the)f(\014rst)g(example\),)h(`)p Fq(C-x)g(C-r)p Fr(')f(is)g(b)q(ound)i -(to)d(the)h(function)h Fq(re-)480 805 y(read-init-file)p -Fr(,)g(and)i(`)p Fq(ESC)e([)h(1)g(1)g(~)p Fr(')h(is)g(b)q(ound)h(to)f -(insert)g(the)g(text)f(`)p Fq(Function)480 867 y(Key)g(1)p -Fr('.)24 b(The)18 b(follo)o(wing)f(escap)q(e)h(sequences)g(are)f(a)o(v) -m(ailable)i(when)e(sp)q(ecifying)i(k)o(ey)480 930 y(sequences:)480 -1022 y Fq(\\C-)168 b Fr(con)o(trol)15 b(pre\014x)480 -1115 y Fq(\\M-)168 b Fr(meta)15 b(pre\014x)480 1208 y -Fq(\\e)192 b Fr(an)15 b(escap)q(e)h(c)o(haracter)480 -1300 y Fq(\\\\)192 b Fr(bac)o(kslash)480 1393 y Fq(\\")g(")480 -1485 y(\\')g(')480 1578 y Fr(When)14 b(en)o(tering)h(the)f(text)f(of)h -(a)f(macro,)g(single)j(or)d(double)i(quotes)f(should)h(b)q(e)f(used)480 -1640 y(to)g(indicate)j(a)e(macro)f(de\014nition.)22 b(Unquoted)15 -b(text)g(is)g(assumed)g(to)g(b)q(e)g(a)g(function)480 -1703 y(name.)21 b(Bac)o(kslash)16 b(will)h(quote)f(an)o(y)f(c)o -(haracter)g(in)h(the)g(macro)f(text,)g(including)j(`)p -Fq(")p Fr(')480 1765 y(and)12 b(`)p Fq(')p Fr('.)18 b(F)l(or)11 -b(example,)i(the)f(follo)o(wing)g(binding)i(will)f(mak)o(e)e(`)p -Fq(C-x)k(\\)p Fr(')c(insert)h(a)g(single)480 1827 y(`)p -Fq(\\)p Fr(')i(in)o(to)h(the)h(line:)600 1894 y Fq("\\C-x\\\\":)23 -b("\\\\")0 2126 y Fk(1.3.2)30 b(Conditional)15 b(Init)g(Constructs)62 -2266 y Fr(Readline)j(implemen)o(ts)e(a)f(facilit)o(y)h(similar)g(in)g -(spirit)g(to)f(the)g(conditional)i(compilation)f(features)f(of)g(the)g -(C)0 2328 y(prepro)q(cessor)f(whic)o(h)h(allo)o(ws)f(k)o(ey)g(bindings) -h(and)f(v)m(ariable)i(settings)e(to)f(b)q(e)h(p)q(erformed)h(as)e(the)h -(result)g(of)g(tests.)0 2391 y(There)h(are)g(three)h(parser)e(directiv) -o(es)j(used.)0 2545 y Fq($if)168 b Fr(The)14 b Fq($if)e -Fr(construct)h(allo)o(ws)h(bindings)h(to)e(b)q(e)h(made)f(based)h(on)f -(the)h(editing)g(mo)q(de,)g(the)f(terminal)240 2608 y(b)q(eing)k(used,) -e(or)g(the)g(application)i(using)f(Readline.)22 b(The)16 -b(text)f(of)g(the)g(test)g(extends)g(to)g(the)g(end)240 -2670 y(of)g(the)g(line;)i(no)e(c)o(haracters)f(are)h(required)h(to)f -(isolate)g(it.)p eop -9 10 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1227 -b(9)240 183 y Fq(mode)144 b Fr(The)19 b Fq(mode=)f Fr(form)g(of)h(the)g -Fq($if)f Fr(directiv)o(e)i(is)f(used)h(to)e(test)g(whether)h(Readline)i -(is)480 246 y(in)h Fq(emacs)f Fr(or)f Fq(vi)h Fr(mo)q(de.)38 -b(This)22 b(ma)o(y)f(b)q(e)h(used)g(in)g(conjunction)g(with)f(the)h(`)p -Fq(set)480 308 y(keymap)p Fr(')d(command,)i(for)e(instance,)j(to)d(set) -h(bindings)i(in)f(the)f Fq(emacs-standard)480 370 y Fr(and)15 -b Fq(emacs-ctlx)f Fr(k)o(eymaps)h(only)h(if)f(Readline)j(is)e(starting) -e(out)h(in)h Fq(emacs)f Fr(mo)q(de.)240 457 y Fq(term)144 -b Fr(The)21 b Fq(term=)f Fr(form)g(ma)o(y)h(b)q(e)g(used)h(to)e -(include)j(terminal-sp)q(eci\014c)h(k)o(ey)c(bindings,)480 -519 y(p)q(erhaps)15 b(to)f(bind)j(the)d(k)o(ey)h(sequences)h(output)e -(b)o(y)h(the)g(terminal's)g(function)h(k)o(eys.)480 582 -y(The)f(w)o(ord)g(on)f(the)i(righ)o(t)e(side)i(of)f(the)g(`)p -Fq(=)p Fr(')f(is)h(tested)g(against)g(the)g(full)h(name)f(of)g(the)480 -644 y(terminal)k(and)g(the)g(p)q(ortion)g(of)f(the)h(terminal)g(name)g -(b)q(efore)g(the)g(\014rst)f(`)p Fq(-)p Fr('.)29 b(This)480 -706 y(allo)o(ws)15 b Fq(sun)g Fr(to)g(matc)o(h)f(b)q(oth)i -Fq(sun)e Fr(and)i Fq(sun-cmd)p Fr(,)e(for)g(instance.)240 -793 y Fq(application)480 856 y Fr(The)k Fl(application)i -Fr(construct)e(is)g(used)h(to)e(include)k(application-sp)q(eci\014c)g -(settings.)480 918 y(Eac)o(h)d(program)g(using)h(the)f(Readline)j -(library)e(sets)f(the)h Fl(application)h(name)p Fr(,)f(and)480 -980 y(y)o(ou)c(can)h(test)f(for)g(it.)21 b(This)16 b(could)g(b)q(e)h -(used)f(to)e(bind)j(k)o(ey)f(sequences)g(to)f(functions)480 -1043 y(useful)h(for)e(a)h(sp)q(eci\014c)i(program.)h(F)l(or)d -(instance,)g(the)g(follo)o(wing)h(command)e(adds)h(a)480 -1105 y(k)o(ey)g(sequence)h(that)f(quotes)g(the)g(curren)o(t)g(or)g -(previous)h(w)o(ord)e(in)i(Bash:)600 1169 y Fq($if)23 -b(Bash)600 1221 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)600 -1273 y("\\C-xq":)g("\\eb\\"\\ef\\"")600 1325 y($endif)0 -1412 y($endif)96 b Fr(This)16 b(command,)e(as)h(y)o(ou)g(sa)o(w)g(in)h -(the)f(previous)h(example,)f(terminates)h(an)f Fq($if)f -Fr(command.)0 1499 y Fq($else)120 b Fr(Commands)15 b(in)h(this)f(branc) -o(h)h(of)e(the)i Fq($if)e Fr(directiv)o(e)j(are)e(executed)h(if)g(the)f -(test)g(fails.)0 1707 y Fk(1.3.3)30 b(Sample)15 b(Init)g(File)62 -1844 y Fr(Here)20 b(is)f(an)g(example)h(of)f(an)g(inputrc)h(\014le.)33 -b(This)20 b(illustrates)g(k)o(ey)f(binding,)j(v)m(ariable)e(assignmen)o -(t,)g(and)0 1906 y(conditional)d(syn)o(tax.)p eop -10 11 bop 0 -58 a Fr(10)1449 b(GNU)15 b(Readline)i(Library)120 -235 y Fq(#)24 b(This)f(file)g(controls)g(the)h(behaviour)e(of)i(line)f -(input)g(editing)g(for)120 287 y(#)h(programs)e(that)i(use)f(the)h(Gnu) -f(Readline)g(library.)47 b(Existing)22 b(programs)120 -339 y(#)i(include)f(FTP,)g(Bash,)g(and)h(Gdb.)120 391 -y(#)120 443 y(#)g(You)f(can)h(re-read)f(the)g(inputrc)g(file)g(with)h -(C-x)f(C-r.)120 495 y(#)h(Lines)f(beginning)g(with)g('#')g(are)h -(comments.)120 546 y(#)120 598 y(#)g(Set)f(various)g(bindings)g(for)g -(emacs)g(mode.)120 702 y(set)g(editing-mode)g(emacs)120 -806 y($if)g(mode=emacs)120 910 y(Meta-Control-h:)46 b -(backward-kill-word)21 b(Text)i(after)h(the)f(function)g(name)g(is)h -(ignored)120 1013 y(#)120 1065 y(#)g(Arrow)f(keys)g(in)h(keypad)f(mode) -120 1117 y(#)120 1169 y(#"\\M-OD":)190 b(backward-char)120 -1221 y(#"\\M-OC":)g(forward-char)120 1273 y(#"\\M-OA":)g -(previous-history)120 1325 y(#"\\M-OB":)g(next-history)120 -1377 y(#)120 1429 y(#)24 b(Arrow)f(keys)g(in)h(ANSI)f(mode)120 -1480 y(#)120 1532 y("\\M-[D":)190 b(backward-char)120 -1584 y("\\M-[C":)g(forward-char)120 1636 y("\\M-[A":)g -(previous-history)120 1688 y("\\M-[B":)g(next-history)120 -1740 y(#)120 1792 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(keypad)g(mode) -120 1844 y(#)120 1896 y(#"\\M-\\C-OD":)165 b(backward-char)120 -1947 y(#"\\M-\\C-OC":)g(forward-char)120 1999 y(#"\\M-\\C-OA":)g -(previous-history)120 2051 y(#"\\M-\\C-OB":)g(next-history)120 -2103 y(#)120 2155 y(#)24 b(Arrow)f(keys)g(in)h(8)g(bit)f(ANSI)g(mode) -120 2207 y(#)120 2259 y(#"\\M-\\C-[D":)165 b(backward-char)120 -2311 y(#"\\M-\\C-[C":)g(forward-char)120 2363 y(#"\\M-\\C-[A":)g -(previous-history)120 2414 y(#"\\M-\\C-[B":)g(next-history)120 -2518 y(C-q:)23 b(quoted-insert)120 2622 y($endif)p eop -11 12 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(11)120 235 y Fq(#)24 b(An)f(old-style)g(binding.)47 -b(This)23 b(happens)g(to)g(be)h(the)f(default.)120 287 -y(TAB:)g(complete)120 391 y(#)h(Macros)f(that)g(are)h(convenient)e(for) -h(shell)h(interaction)120 443 y($if)f(Bash)120 495 y(#)h(edit)f(the)g -(path)120 546 y("\\C-xp":)g("PATH=${PATH}\\e\\C-e\\C-a\\)o(ef\\C-f")120 -598 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)120 650 y(#)h(and)f(move)g(to)h(just)f -(after)h(the)f(open)g(quote)120 702 y("\\C-x\\"":)g("\\"\\"\\C-b")120 -754 y(#)h(insert)f(a)g(backslash)g(\(testing)g(backslash)g(escapes)f -(in)i(sequences)f(and)g(macros\))120 806 y("\\C-x\\\\":)g("\\\\")120 -858 y(#)h(Quote)f(the)g(current)g(or)h(previous)f(word)120 -910 y("\\C-xq":)g("\\eb\\"\\ef\\"")120 962 y(#)h(Add)f(a)h(binding)f -(to)g(refresh)g(the)h(line,)f(which)g(is)h(unbound)120 -1013 y("\\C-xr":)f(redraw-current-line)120 1065 y(#)h(Edit)f(variable)g -(on)g(current)g(line.)120 1117 y("\\M-\\C-v":)f -("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-a\\C-y=)o(")120 1169 y($endif)120 -1273 y(#)i(use)f(a)h(visible)f(bell)g(if)h(one)f(is)h(available)120 -1325 y(set)f(bell-style)g(visible)120 1429 y(#)h(don't)f(strip)g -(characters)g(to)g(7)h(bits)f(when)h(reading)120 1480 -y(set)f(input-meta)g(on)120 1584 y(#)h(allow)f(iso-latin1)f(characters) -h(to)g(be)h(inserted)f(rather)g(than)g(converted)g(to)120 -1636 y(#)h(prefix-meta)e(sequences)120 1688 y(set)h(convert-meta)g(off) -120 1792 y(#)h(display)f(characters)f(with)h(the)h(eighth)f(bit)g(set)h -(directly)f(rather)g(than)120 1844 y(#)h(as)f(meta-prefixed)f -(characters)120 1896 y(set)h(output-meta)g(on)120 1999 -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)120 2051 y(#)h(user)f(if)h(he)f(wants)g -(to)h(see)f(all)h(of)f(them)120 2103 y(set)g(completion-query-items)e -(150)120 2207 y(#)j(For)f(FTP)120 2259 y($if)g(Ftp)120 -2311 y("\\C-xg":)g("get)g(\\M-?")120 2363 y("\\C-xt":)g("put)g(\\M-?") -120 2414 y("\\M-.":)g(yank-last-arg)120 2466 y($endif)p -eop -12 13 bop 0 -58 a Fr(12)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fp(1.4)33 b(Bindable)16 b(Readline)h(Commands)62 -322 y Fr(This)f(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.)0 -545 y Fk(1.4.1)30 b(Commands)15 b(F)-5 b(or)15 b(Mo)n(ving)0 -698 y Fq(beginning-of-line)e(\(C-a\))240 760 y Fr(Mo)o(v)o(e)h(to)h -(the)g(start)f(of)h(the)g(curren)o(t)g(line.)0 851 y -Fq(end-of-line)f(\(C-e\))240 913 y Fr(Mo)o(v)o(e)g(to)h(the)g(end)h(of) -f(the)g(line.)0 1003 y Fq(forward-char)f(\(C-f\))240 -1066 y Fr(Mo)o(v)o(e)g(forw)o(ard)g(a)h(c)o(haracter.)0 -1156 y Fq(backward-char)e(\(C-b\))240 1219 y Fr(Mo)o(v)o(e)h(bac)o(k)h -(a)g(c)o(haracter.)0 1309 y Fq(forward-word)f(\(M-f\))240 -1371 y Fr(Mo)o(v)o(e)g(forw)o(ard)g(to)h(the)g(end)h(of)f(the)g(next)g -(w)o(ord.)k(W)l(ords)c(are)g(comp)q(osed)h(of)e(letters)i(and)f -(digits.)0 1462 y Fq(backward-word)e(\(M-b\))240 1524 -y Fr(Mo)o(v)o(e)j(bac)o(k)g(to)g(the)h(start)f(of)g(this,)h(or)g(the)f -(previous,)i(w)o(ord.)24 b(W)l(ords)16 b(are)g(comp)q(osed)i(of)e -(letters)240 1587 y(and)f(digits.)0 1677 y Fq(clear-screen)f(\(C-l\)) -240 1739 y Fr(Clear)h(the)g(screen)g(and)g(redra)o(w)f(the)h(curren)o -(t)g(line,)h(lea)o(ving)g(the)f(curren)o(t)f(line)j(at)d(the)h(top)f -(of)h(the)240 1802 y(screen.)0 1892 y Fq(redraw-current-line)e(\(\))240 -1955 y Fr(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.)0 2177 y Fk(1.4.2)30 -b(Commands)15 b(F)-5 b(or)15 b(Manipulating)g(The)g(History)0 -2330 y Fq(accept-line)f(\(Newline,)g(Return\))240 2393 -y Fr(Accept)g(the)f(line)i(regardless)e(of)g(where)g(the)g(cursor)g -(is.)20 b(If)13 b(this)h(line)h(is)e(non-empt)o(y)l(,)h(add)f(it)g(to)g -(the)240 2455 y(history)k(list.)25 b(If)17 b(this)g(line)i(w)o(as)c(a)i -(history)g(line,)h(then)f(restore)f(the)h(history)f(line)j(to)d(its)h -(original)240 2517 y(state.)0 2608 y Fq(previous-history)c(\(C-p\))240 -2670 y Fr(Mo)o(v)o(e)h(`up')h(through)g(the)g(history)g(list.)p -eop -13 14 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(13)0 183 y Fq(next-history)14 b(\(C-n\))240 246 y Fr(Mo)o(v)o(e)g -(`do)o(wn')g(through)h(the)h(history)f(list.)0 331 y -Fq(beginning-of-history)d(\(M-<\))240 393 y Fr(Mo)o(v)o(e)i(to)h(the)g -(\014rst)g(line)i(in)f(the)f(history)l(.)0 478 y Fq(end-of-history)e -(\(M->\))240 540 y Fr(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(y)o(ou)e(are)g(en)o(tering.)0 -625 y Fq(reverse-search-history)d(\(C-r\))240 688 y Fr(Searc)o(h)18 -b(bac)o(kw)o(ard)f(starting)g(at)g(the)g(curren)o(t)h(line)h(and)f(mo)o -(ving)f(`up')h(through)f(the)h(history)f(as)240 750 y(necessary)l(.)j -(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)0 835 y -Fq(forward-search-history)c(\(C-s\))240 897 y Fr(Searc)o(h)j(forw)o -(ard)e(starting)h(at)g(the)g(curren)o(t)h(line)h(and)f(mo)o(ving)f(`do) -o(wn')g(through)g(the)g(the)h(history)240 960 y(as)g(necessary)l(.)20 -b(This)c(is)g(an)f(incremen)o(tal)h(searc)o(h.)0 1045 -y Fq(non-incremental-reverse-se)o(arch-hi)o(story)c(\(M-p\))240 -1107 y Fr(Searc)o(h)18 b(bac)o(kw)o(ard)f(starting)g(at)g(the)g(curren) -o(t)h(line)h(and)f(mo)o(ving)f(`up')h(through)f(the)h(history)f(as)240 -1169 y(necessary)e(using)h(a)f(non-incremen)o(tal)i(searc)o(h)e(for)g -(a)f(string)i(supplied)h(b)o(y)e(the)h(user.)0 1254 y -Fq(non-incremental-forward-se)o(arch-hi)o(story)c(\(M-n\))240 -1317 y Fr(Searc)o(h)j(forw)o(ard)e(starting)h(at)g(the)g(curren)o(t)h -(line)h(and)f(mo)o(ving)f(`do)o(wn')g(through)g(the)g(the)h(history)240 -1379 y(as)g(necessary)g(using)h(a)f(non-incremen)o(tal)i(searc)o(h)e -(for)f(a)h(string)g(supplied)j(b)o(y)d(the)g(user.)0 -1464 y Fq(history-search-forward)d(\(\))240 1526 y Fr(Searc)o(h)h(forw) -o(ard)f(through)h(the)g(history)g(for)g(the)g(string)g(of)g(c)o -(haracters)f(b)q(et)o(w)o(een)i(the)f(start)f(of)h(the)240 -1589 y(curren)o(t)19 b(line)h(and)f(the)g(curren)o(t)f(cursor)h(p)q -(osition)g(\(the)g(`p)q(oin)o(t'\).)30 b(This)19 b(is)g(a)f -(non-incremen)o(tal)240 1651 y(searc)o(h.)i(By)15 b(default,)g(this)h -(command)f(is)h(un)o(b)q(ound.)0 1736 y Fq(history-search-backward)c -(\(\))240 1798 y Fr(Searc)o(h)21 b(bac)o(kw)o(ard)f(through)g(the)h -(history)f(for)g(the)h(string)f(of)h(c)o(haracters)f(b)q(et)o(w)o(een)g -(the)h(start)240 1860 y(of)c(the)h(curren)o(t)g(line)h(and)f(the)f(p)q -(oin)o(t.)28 b(This)18 b(is)h(a)e(non-incremen)o(tal)i(searc)o(h.)27 -b(By)18 b(default,)h(this)240 1923 y(command)c(is)h(un)o(b)q(ound.)0 -2008 y Fq(yank-nth-arg)e(\(M-C-y\))240 2070 y Fr(Insert)19 -b(the)g(\014rst)f(argumen)o(t)g(to)g(the)h(previous)g(command)g -(\(usually)g(the)g(second)g(w)o(ord)f(on)h(the)240 2132 -y(previous)e(line\).)23 b(With)16 b(an)g(argumen)o(t)f -Fl(n)p Fr(,)h(insert)h(the)f Fl(n)p Fr(th)g(w)o(ord)f(from)g(the)h -(previous)h(command)240 2195 y(\(the)d(w)o(ords)g(in)h(the)g(previous)g -(command)f(b)q(egin)i(with)f(w)o(ord)f(0\).)19 b(A)14 -b(negativ)o(e)h(argumen)o(t)f(inserts)240 2257 y(the)h -Fl(n)p Fr(th)h(w)o(ord)e(from)h(the)g(end)h(of)e(the)i(previous)g -(command.)0 2342 y Fq(yank-last-arg)d(\(M-.,)i(M-_\))240 -2404 y Fr(Insert)i(last)g(argumen)o(t)g(to)f(the)h(previous)h(command)f -(\(the)g(last)g(w)o(ord)f(of)h(the)g(previous)h(history)240 -2467 y(en)o(try\).)h(With)d(an)f(argumen)o(t,)f(b)q(eha)o(v)o(e)h -(exactly)h(lik)o(e)g Fq(yank-nth-arg)p Fr(.)0 2670 y -Fk(1.4.3)30 b(Commands)15 b(F)-5 b(or)15 b(Changing)g(T)-5 -b(ext)p eop -14 15 bop 0 -58 a Fr(14)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(delete-char)d(\(C-d\))240 246 y Fr(Delete)f(the)f(c)o -(haracter)f(under)i(the)f(cursor.)19 b(If)12 b(the)g(cursor)g(is)g(at)g -(the)g(b)q(eginning)i(of)e(the)g(line,)i(there)240 308 -y(are)k(no)h(c)o(haracters)e(in)j(the)e(line,)j(and)d(the)h(last)f(c)o -(haracter)g(t)o(yp)q(ed)h(w)o(as)f(not)g Fq(C-d)p Fr(,)g(then)h(return) -240 370 y Fq(EOF)p Fr(.)0 460 y Fq(backward-delete-char)12 -b(\(Rubout\))240 522 y Fr(Delete)g(the)f(c)o(haracter)f(b)q(ehind)j -(the)e(cursor.)18 b(A)11 b(n)o(umeric)h(arg)e(sa)o(ys)g(to)g(kill)j -(the)e(c)o(haracters)f(instead)240 584 y(of)15 b(deleting)h(them.)0 -674 y Fq(quoted-insert)d(\(C-q,)i(C-v\))240 736 y Fr(Add)i(the)f(next)h -(c)o(haracter)f(that)f(y)o(ou)h(t)o(yp)q(e)h(to)f(the)g(line)i(v)o -(erbatim.)24 b(This)17 b(is)g(ho)o(w)e(to)h(insert)h(k)o(ey)240 -799 y(sequences)f(lik)o(e)h Fq(C-Q)p Fr(,)d(for)h(example.)0 -888 y Fq(tab-insert)f(\(M-TAB\))240 951 y Fr(Insert)h(a)g(tab)g(c)o -(haracter.)0 1040 y Fq(self-insert)f(\(a,)g(b,)h(A,)g(1,)g(!,)g(...\)) -240 1103 y Fr(Insert)g(y)o(ourself.)0 1192 y Fq(transpose-chars)e -(\(C-t\))240 1255 y Fr(Drag)h(the)h(c)o(haracter)g(b)q(efore)g(the)h -(cursor)f(forw)o(ard)f(o)o(v)o(er)g(the)h(c)o(haracter)g(at)f(the)i -(cursor,)e(mo)o(ving)240 1317 y(the)k(cursor)h(forw)o(ard)e(as)h(w)o -(ell.)30 b(If)19 b(the)f(insertion)i(p)q(oin)o(t)f(is)g(at)e(the)i(end) -g(of)f(the)g(line,)j(then)e(this)240 1379 y(transp)q(oses)c(the)g(last) -g(t)o(w)o(o)f(c)o(haracters)h(of)f(the)i(line.)21 b(Negativ)o(e)15 -b(argumen)o(tss)f(don't)h(w)o(ork.)0 1469 y Fq(transpose-words)e -(\(M-t\))240 1531 y Fr(Drag)f(the)h(w)o(ord)f(b)q(ehind)i(the)f(cursor) -g(past)f(the)h(w)o(ord)f(in)h(fron)o(t)f(of)h(the)f(cursor)h(mo)o(ving) -f(the)h(cursor)240 1594 y(o)o(v)o(er)h(that)h(w)o(ord)f(as)h(w)o(ell.)0 -1683 y Fq(upcase-word)f(\(M-u\))240 1746 y Fr(Upp)q(ercase)h(the)e -(curren)o(t)h(\(or)f(follo)o(wing\))h(w)o(ord.)k(With)c(a)f(negativ)o -(e)h(argumen)o(t,)f(do)g(the)h(previous)240 1808 y(w)o(ord,)g(but)h(do) -h(not)e(mo)o(v)o(e)h(the)g(cursor.)0 1898 y Fq(downcase-word)e(\(M-l\)) -240 1960 y Fr(Lo)o(w)o(ercase)g(the)i(curren)o(t)f(\(or)f(follo)o -(wing\))h(w)o(ord.)19 b(With)14 b(a)g(negativ)o(e)g(argumen)o(t,)f(do)h -(the)g(previous)240 2022 y(w)o(ord,)g(but)h(do)h(not)e(mo)o(v)o(e)h -(the)g(cursor.)0 2112 y Fq(capitalize-word)e(\(M-c\))240 -2174 y Fr(Capitalize)j(the)e(curren)o(t)g(\(or)f(follo)o(wing\))i(w)o -(ord.)j(With)d(a)f(negativ)o(e)g(argumen)o(t,)f(do)h(the)g(previous)240 -2236 y(w)o(ord,)g(but)h(do)h(not)e(mo)o(v)o(e)h(the)g(cursor.)0 -2456 y Fk(1.4.4)30 b(Killing)15 b(And)h(Y)-5 b(anking)0 -2608 y Fq(kill-line)14 b(\(C-k\))240 2670 y Fr(Kill)j(the)f(text)e -(from)h(the)g(curren)o(t)g(cursor)g(p)q(osition)h(to)f(the)g(end)h(of)f -(the)g(line.)p eop -15 16 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(15)0 183 y Fq(backward-kill-line)13 b(\(C-x)h(Rubout\))240 -246 y Fr(Kill)j(bac)o(kw)o(ard)e(to)f(the)i(b)q(eginning)h(of)e(the)g -(line.)0 332 y Fq(unix-line-discard)e(\(C-u\))240 394 -y Fr(Kill)j(bac)o(kw)o(ard)d(from)f(the)i(cursor)f(to)g(the)h(b)q -(eginning)i(of)d(the)g(curren)o(t)h(line.)21 b(Sa)o(v)o(e)13 -b(the)h(killed)h(text)240 456 y(on)g(the)g(kill-ring.)0 -543 y Fq(kill-whole-line)e(\(\))240 605 y Fr(Kill)18 -b(all)f(c)o(haracters)e(on)h(the)g(curren)o(t)f(line,)j(no)e(matter)e -(where)i(the)g(cursor)g(is.)22 b(By)16 b(default,)h(this)240 -667 y(is)f(un)o(b)q(ound.)0 753 y Fq(kill-word)e(\(M-d\))240 -816 y Fr(Kill)j(from)d(the)h(cursor)g(to)f(the)h(end)g(of)g(the)g -(curren)o(t)f(w)o(ord,)g(or)g(if)i(b)q(et)o(w)o(een)f(w)o(ords,)f(to)g -(the)h(end)g(of)240 878 y(the)g(next)h(w)o(ord.)j(W)l(ord)c(b)q -(oundaries)h(are)f(the)g(same)g(as)g Fq(forward-word)p -Fr(.)0 964 y Fq(backward-kill-word)e(\(M-DEL\))240 1027 -y Fr(Kill)k(the)f(w)o(ord)e(b)q(ehind)j(the)f(cursor.)j(W)l(ord)c(b)q -(oundaries)i(are)d(the)i(same)f(as)f Fq(backward-word)p -Fr(.)0 1113 y Fq(unix-word-rubout)f(\(C-w\))240 1175 -y Fr(Kill)i(the)e(w)o(ord)f(b)q(ehind)j(the)f(cursor,)e(using)i(white)f -(space)h(as)e(a)h(w)o(ord)f(b)q(oundary)l(.)20 b(The)13 -b(killed)i(text)240 1237 y(is)h(sa)o(v)o(ed)e(on)i(the)f(kill-ring.)0 -1324 y Fq(delete-horizontal-space)d(\(\))240 1386 y Fr(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.)0 1472 y Fq(kill-region)e(\(\)) -240 1535 y Fr(Kill)23 b(the)e(text)g(b)q(et)o(w)o(een)g(the)g(p)q(oin)o -(t)g(and)g(the)g Fl(mark)j Fr(\(sa)o(v)o(ed)c(cursor)g(p)q(osition.)38 -b(This)22 b(text)e(is)240 1597 y(referred)15 b(to)g(as)g(the)g -Fl(region)p Fr(.)20 b(By)15 b(default,)h(this)g(command)f(is)g(un)o(b)q -(ound.)0 1683 y Fq(copy-region-as-kill)e(\(\))240 1745 -y Fr(Cop)o(y)f(the)h(text)f(in)i(the)f(region)g(to)f(the)g(kill)j -(bu\013er,)e(so)f(y)o(ou)h(can)f(y)o(ank)h(it)g(righ)o(t)f(a)o(w)o(a)o -(y)l(.)18 b(By)13 b(default,)240 1808 y(this)j(command)f(is)g(un)o(b)q -(ound.)0 1894 y Fq(copy-backward-word)e(\(\))240 1956 -y Fr(Cop)o(y)i(the)g(w)o(ord)f(b)q(efore)i(p)q(oin)o(t)g(to)e(the)h -(kill)j(bu\013er.)h(By)d(default,)f(this)h(command)f(is)h(un)o(b)q -(ound.)0 2043 y Fq(copy-forward-word)d(\(\))240 2105 -y Fr(Cop)o(y)f(the)h(w)o(ord)f(follo)o(wing)h(p)q(oin)o(t)g(to)f(the)h -(kill)h(bu\013er.)19 b(By)13 b(default,)g(this)h(command)e(is)h(un)o(b) -q(ound.)0 2191 y Fq(yank)i(\(C-y\))240 2253 y Fr(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.)0 2340 y Fq(yank-pop)f(\(M-y\))240 -2402 y Fr(Rotate)f(the)h(kill-ring,)i(and)e(y)o(ank)g(the)g(new)g(top.) -19 b(Y)l(ou)14 b(can)g(only)g(do)g(this)g(if)g(the)g(prior)g(command) -240 2464 y(is)i(y)o(ank)f(or)f(y)o(ank-p)q(op.)0 2670 -y Fk(1.4.5)30 b(Sp)r(ecifying)15 b(Numeric)h(Argumen)n(ts)p -eop -16 17 bop 0 -58 a Fr(16)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(digit-argument)c(\(M-0,)i(M-1,)f(...)h(M--\))240 -246 y Fr(Add)j(this)g(digit)h(to)e(the)h(argumen)o(t)e(already)i(accum) -o(ulating,)h(or)e(start)g(a)g(new)h(argumen)o(t.)26 b -Fq(M--)240 308 y Fr(starts)14 b(a)h(negativ)o(e)g(argumen)o(t.)0 -403 y Fq(universal-argument)e(\(\))240 465 y Fr(This)f(is)h(another)e -(w)o(a)o(y)g(to)g(sp)q(ecify)i(an)f(argumen)o(t.)18 b(If)12 -b(this)g(command)g(is)g(follo)o(w)o(ed)g(b)o(y)g(one)g(or)f(more)240 -527 y(digits,)19 b(optionally)g(with)f(a)g(leading)h(min)o(us)f(sign,)h -(those)e(digits)i(de\014ne)g(the)f(argumen)o(t.)27 b(If)18 -b(the)240 590 y(command)12 b(is)h(follo)o(w)o(ed)g(b)o(y)f(digits,)i -(executing)f Fq(universal-argument)d Fr(again)j(ends)g(the)f(n)o -(umeric)240 652 y(argumen)o(t,)i(but)h(is)g(otherwise)g(ignored.)20 -b(As)15 b(a)f(sp)q(ecial)j(case,)d(if)h(this)g(command)g(is)g -(immediately)240 714 y(follo)o(w)o(ed)e(b)o(y)f(a)h(c)o(haracter)e -(that)h(is)h(neither)h(a)e(digit)i(or)e(min)o(us)h(sign,)g(the)g -(argumen)o(t)f(coun)o(t)g(for)g(the)240 776 y(next)i(command)g(is)h(m)o -(ultiplied)i(b)o(y)d(four.)19 b(The)c(argumen)o(t)e(coun)o(t)h(is)h -(initially)i(one,)d(so)g(executing)240 839 y(this)k(function)g(the)f -(\014rst)g(time)g(mak)o(es)g(the)g(argumen)o(t)g(coun)o(t)g(four,)g(a)g -(second)h(time)f(mak)o(es)g(the)240 901 y(argumen)o(t)d(coun)o(t)h -(sixteen,)h(and)f(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(.)0 1143 y Fk(1.4.6)30 b(Letting)14 -b(Readline)h(T)n(yp)r(e)h(F)-5 b(or)14 b(Y)-5 b(ou)0 -1301 y Fq(complete)14 b(\(TAB\))240 1363 y Fr(A)o(ttempt)i(to)h(do)g -(completion)i(on)e(the)g(text)g(b)q(efore)h(the)f(cursor.)26 -b(This)18 b(is)g(application-sp)q(eci\014c.)240 1425 -y(Generally)l(,)h(if)f(y)o(ou)f(are)h(t)o(yping)g(a)f(\014lename)i -(argumen)o(t,)e(y)o(ou)g(can)h(do)f(\014lename)i(completion;)g(if)240 -1487 y(y)o(ou)f(are)f(t)o(yping)i(a)e(command,)i(y)o(ou)e(can)i(do)f -(command)g(completion,)h(if)g(y)o(ou)e(are)h(t)o(yping)g(in)h(a)240 -1550 y(sym)o(b)q(ol)e(to)f(GDB,)g(y)o(ou)g(can)h(do)g(sym)o(b)q(ol)g -(name)g(completion,)h(if)f(y)o(ou)f(are)h(t)o(yping)g(in)g(a)g(v)m -(ariable)240 1612 y(to)e(Bash,)f(y)o(ou)h(can)h(do)f(v)m(ariable)h -(name)g(completion,)g(and)f(so)g(on.)0 1707 y Fq(possible-completions)d -(\(M-?\))240 1769 y Fr(List)k(the)f(p)q(ossible)i(completions)f(of)f -(the)g(text)g(b)q(efore)h(the)f(cursor.)0 1864 y Fq(insert-completions) -e(\(M-*\))240 1926 y Fr(Insert)22 b(all)h(completions)g(of)f(the)g -(text)f(b)q(efore)h(p)q(oin)o(t)h(that)e(w)o(ould)h(ha)o(v)o(e)g(b)q -(een)h(generated)f(b)o(y)240 1989 y Fq(possible-completions)p -Fr(.)0 2231 y Fk(1.4.7)30 b(Keyb)r(oard)15 b(Macros)0 -2388 y Fq(start-kbd-macro)e(\(C-x)i(\(\))240 2451 y Fr(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.)0 2545 y Fq(end-kbd-macro)e(\(C-x)i(\)\))240 -2608 y Fr(Stop)f(sa)o(ving)h(the)g(c)o(haracters)f(t)o(yp)q(ed)h(in)o -(to)f(the)h(curren)o(t)f(k)o(eyb)q(oard)h(macro)f(and)h(sa)o(v)o(e)f -(the)g(de\014ni-)240 2670 y(tion.)p eop -17 18 bop 0 -58 a Fr(Chapter)15 b(1:)k(Command)c(Line)i(Editing)1205 -b(17)0 183 y Fq(call-last-kbd-macro)13 b(\(C-x)h(e\))240 -246 y Fr(Re-execute)20 b(the)f(last)f(k)o(eyb)q(oard)g(macro)g -(de\014ned,)i(b)o(y)f(making)f(the)h(c)o(haracters)f(in)h(the)g(macro) -240 308 y(app)q(ear)c(as)g(if)h(t)o(yp)q(ed)f(at)g(the)g(k)o(eyb)q -(oard.)0 546 y Fk(1.4.8)30 b(Some)15 b(Miscellaneous)h(Commands)0 -703 y Fq(re-read-init-file)d(\(C-x)h(C-r\))240 765 y -Fr(Read)23 b(in)h(the)e(con)o(ten)o(ts)g(of)h(the)f(inputrc)i(\014le,)h -(and)e(incorp)q(orate)g(an)o(y)f(bindings)i(or)f(v)m(ariable)240 -827 y(assignmen)o(ts)15 b(found)h(there.)0 921 y Fq(abort)e(\(C-g\))240 -984 y Fr(Ab)q(ort)f(the)h(curren)o(t)f(editing)i(command)e(and)h(ring)g -(the)f(terminal's)h(b)q(ell)h(\(sub)s(ject)f(to)e(the)i(setting)240 -1046 y(of)h Fq(bell-style)p Fr(\).)0 1140 y Fq(do-uppercase-version)d -(\(M-a,)j(M-b,)f(M-)p Fl(x)p Fq(,)h Fj(:)8 b(:)g(:)n -Fq(\))240 1202 y Fr(If)16 b(the)f(meta\014ed)g(c)o(haracter)g -Fl(x)k Fr(is)c(lo)o(w)o(ercase,)g(run)h(the)f(command)g(that)g(is)h(b)q -(ound)g(to)f(the)g(corre-)240 1264 y(sp)q(onding)h(upp)q(ercase)h(c)o -(haracter.)0 1358 y Fq(prefix-meta)d(\(ESC\))240 1421 -y Fr(Mak)o(e)g(the)g(next)h(c)o(haracter)f(that)g(y)o(ou)g(t)o(yp)q(e)h -(b)q(e)g(meta\014ed.)20 b(This)15 b(is)g(for)f(p)q(eople)i(without)e(a) -h(meta)240 1483 y(k)o(ey)l(.)20 b(T)o(yping)c(`)p Fq(ESC)e(f)p -Fr(')h(is)g(equiv)m(alen)o(t)i(to)e(t)o(yping)g(`)p Fq(M-f)p -Fr('.)0 1577 y Fq(undo)g(\(C-_,)f(C-x)h(C-u\))240 1639 -y Fr(Incremen)o(tal)h(undo,)f(separately)h(remem)o(b)q(ered)g(for)e -(eac)o(h)h(line.)0 1733 y Fq(revert-line)f(\(M-r\))240 -1796 y Fr(Undo)20 b(all)h(c)o(hanges)f(made)g(to)f(this)i(line.)35 -b(This)21 b(is)f(lik)o(e)h(t)o(yping)f(the)g Fq(undo)g -Fr(command)g(enough)240 1858 y(times)15 b(to)g(get)g(bac)o(k)g(to)f -(the)i(b)q(eginning.)0 1952 y Fq(tilde-expand)e(\(M-~\))240 -2014 y Fr(P)o(erform)g(tilde)j(expansion)f(on)f(the)g(curren)o(t)g(w)o -(ord.)0 2108 y Fq(set-mark)f(\(C-@\))240 2171 y Fr(Set)i(the)g(mark)f -(to)g(the)h(curren)o(t)g(p)q(oin)o(t.)23 b(If)16 b(a)f(n)o(umeric)i -(argumen)o(t)e(is)i(supplied,)h(the)e(mark)f(is)h(set)240 -2233 y(to)f(that)f(p)q(osition.)0 2327 y Fq(exchange-point-and-mark)e -(\(C-x)j(C-x\))240 2389 y Fr(Sw)o(ap)e(the)g(p)q(oin)o(t)h(with)f(the)g -(mark.)19 b(The)13 b(curren)o(t)g(cursor)g(p)q(osition)h(is)g(set)f(to) -f(the)i(sa)o(v)o(ed)e(p)q(osition,)240 2451 y(and)j(the)h(old)f(cursor) -g(p)q(osition)i(is)e(sa)o(v)o(ed)g(as)g(the)g(mark.)0 -2545 y Fq(character-search)e(\(C-]\))240 2608 y Fr(A)19 -b(c)o(haracter)e(is)j(read)e(and)h(p)q(oin)o(t)g(is)g(mo)o(v)o(ed)f(to) -g(the)g(next)h(o)q(ccurrence)h(of)e(that)g(c)o(haracter.)29 -b(A)240 2670 y(negativ)o(e)15 b(coun)o(t)g(searc)o(hes)g(for)g -(previous)h(o)q(ccurrences.)p eop -18 19 bop 0 -58 a Fr(18)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fq(character-search-backward)12 b(\(M-C-]\))240 -246 y Fr(A)i(c)o(haracter)f(is)h(read)g(and)f(p)q(oin)o(t)i(is)f(mo)o -(v)o(ed)f(to)g(the)h(previous)g(o)q(ccurrence)h(of)e(that)g(c)o -(haracter.)19 b(A)240 308 y(negativ)o(e)c(coun)o(t)g(searc)o(hes)g(for) -g(subsequen)o(t)h(o)q(ccurrences.)0 395 y Fq(insert-comment)d(\(M-#\)) -240 457 y Fr(The)19 b(v)m(alue)g(of)f(the)g Fq(comment-begin)f -Fr(v)m(ariable)i(is)g(inserted)g(at)f(the)g(b)q(eginning)j(of)d(the)g -(curren)o(t)240 519 y(line,)e(and)g(the)f(line)i(is)f(accepted)g(as)e -(if)i(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)0 607 -y Fq(dump-functions)c(\(\))240 669 y Fr(Prin)o(t)18 b(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.)28 b(If)18 b(a)240 731 y(n)o(umeric)i(argumen)o(t)d -(is)i(supplied,)j(the)d(output)f(is)h(formatted)f(in)h(suc)o(h)g(a)f(w) -o(a)o(y)g(that)g(it)h(can)f(b)q(e)240 793 y(made)d(part)g(of)g(an)g -Fl(inputrc)k Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b)o -(y)e(default.)0 881 y Fq(dump-variables)e(\(\))240 943 -y Fr(Prin)o(t)j(all)h(of)f(the)h(settable)f(v)m(ariables)i(and)e(their) -h(v)m(alues)g(to)f(the)g(readline)i(output)e(stream.)23 -b(If)16 b(a)240 1005 y(n)o(umeric)k(argumen)o(t)d(is)i(supplied,)j(the) -d(output)f(is)h(formatted)f(in)h(suc)o(h)g(a)f(w)o(a)o(y)g(that)g(it)h -(can)f(b)q(e)240 1067 y(made)d(part)g(of)g(an)g Fl(inputrc)k -Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b)o(y)e(default.) -0 1155 y Fq(dump-macros)f(\(\))240 1217 y Fr(Prin)o(t)h(all)g(of)g(the) -f(readline)j(k)o(ey)d(sequences)i(b)q(ound)g(to)e(macros)g(and)h(the)f -(strings)h(they)g(ouput.)20 b(If)240 1279 y(a)c(n)o(umeric)h(argumen)o -(t)e(is)i(supplied,)h(the)e(output)g(is)g(formatted)f(in)i(suc)o(h)g(a) -e(w)o(a)o(y)g(that)h(it)g(can)g(b)q(e)240 1341 y(made)f(part)g(of)g(an) -g Fl(inputrc)k Fr(\014le.)i(This)15 b(command)g(is)h(un)o(b)q(ound)h(b) -o(y)e(default.)0 1566 y Fp(1.5)33 b(Readline)16 b(vi)g(Mo)r(de)62 -1703 y Fr(While)d(the)f(Readline)i(library)e(do)q(es)g(not)g(ha)o(v)o -(e)f(a)g(full)i(set)f(of)f Fq(vi)g Fr(editing)i(functions,)g(it)f(do)q -(es)g(con)o(tain)g(enough)0 1765 y(to)f(allo)o(w)i(simple)g(editing)g -(of)f(the)g(line.)20 b(The)13 b(Readline)h Fq(vi)d Fr(mo)q(de)i(b)q -(eha)o(v)o(es)f(as)g(sp)q(eci\014ed)i(in)e(the)h Fm(POSIX)f -Fr(1003.2)0 1827 y(standard.)62 1964 y(In)17 b(order)e(to)g(switc)o(h)h -(in)o(teractiv)o(ely)h(b)q(et)o(w)o(een)f Fq(emacs)f -Fr(and)h Fq(vi)f Fr(editing)i(mo)q(des,)f(use)g(the)g(command)f(M-C-j)0 -2026 y(\(toggle-editing-mo)q(de\).)21 b(The)15 b(Readline)j(default)e -(is)f Fq(emacs)g Fr(mo)q(de.)62 2163 y(When)k(y)o(ou)f(en)o(ter)g(a)g -(line)i(in)g Fq(vi)e Fr(mo)q(de,)h(y)o(ou)f(are)g(already)g(placed)i -(in)f(`insertion')g(mo)q(de,)g(as)f(if)h(y)o(ou)f(had)0 -2226 y(t)o(yp)q(ed)e(an)f(`)p Fq(i)p Fr('.)20 b(Pressing)c -Fq(ESC)f Fr(switc)o(hes)h(y)o(ou)f(in)o(to)h(`command')f(mo)q(de,)g -(where)h(y)o(ou)f(can)h(edit)g(the)g(text)f(of)g(the)0 -2288 y(line)j(with)e(the)h(standard)e Fq(vi)h Fr(mo)o(v)o(emen)o(t)f(k) -o(eys,)h(mo)o(v)o(e)g(to)f(previous)i(history)f(lines)i(with)f(`)p -Fq(k)p Fr(')e(and)h(subsequen)o(t)0 2350 y(lines)h(with)e(`)p -Fq(j)p Fr(',)f(and)i(so)e(forth.)p eop -19 20 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(19)0 183 y Fn(2)41 b(Programming)16 b(with)f(GNU)h -(Readline)62 394 y Fr(This)j(c)o(hapter)f(describ)q(es)i(the)e(in)o -(terface)g(b)q(et)o(w)o(een)h(the)f(GNU)g(Readline)j(Library)d(and)h -(other)f(programs.)0 456 y(If)h(y)o(ou)g(are)f(a)h(programmer,)f(and)i -(y)o(ou)e(wish)i(to)e(include)j(the)e(features)g(found)g(in)h(GNU)f -(Readline)i(suc)o(h)e(as)0 518 y(completion,)f(line)h(editing,)f(and)f -(in)o(teractiv)o(e)h(history)f(manipulation)h(in)g(y)o(our)f(o)o(wn)f -(programs,)g(this)h(section)0 581 y(is)f(for)e(y)o(ou.)0 -848 y Fp(2.1)33 b(Basic)14 b(Beha)n(vior)62 989 y Fr(Man)o(y)c -(programs)g(pro)o(vide)h(a)g(command)f(line)j(in)o(terface,)e(suc)o(h)g -(as)g Fq(mail)p Fr(,)f Fq(ftp)p Fr(,)h(and)g Fq(sh)p -Fr(.)18 b(F)l(or)10 b(suc)o(h)i(programs,)0 1052 y(the)17 -b(default)h(b)q(eha)o(viour)g(of)e(Readline)k(is)e(su\016cien)o(t.)26 -b(This)18 b(section)f(describ)q(es)i(ho)o(w)e(to)f(use)i(Readline)h(in) -f(the)0 1114 y(simplest)e(w)o(a)o(y)e(p)q(ossible,)j(p)q(erhaps)f(to)e -(replace)j(calls)f(in)g(y)o(our)f(co)q(de)g(to)g Fq(gets\(\))f -Fr(or)h Fq(fgets)f(\(\))p Fr(.)62 1256 y(The)g(function)g -Fq(readline)g(\(\))f Fr(prin)o(ts)h(a)f(prompt)g(and)h(then)g(reads)f -(and)g(returns)h(a)f(single)i(line)g(of)e(text)g(from)0 -1318 y(the)g(user.)19 b(The)13 b(line)i Fq(readline)d -Fr(returns)g(is)i(allo)q(cated)g(with)f Fq(malloc)h(\(\))p -Fr(;)f(y)o(ou)g(should)h Fq(free)g(\(\))f Fr(the)g(line)h(when)0 -1380 y(y)o(ou)h(are)g(done)g(with)h(it.)k(The)15 b(declaration)h(for)f -Fq(readline)f Fr(in)i(ANSI)g(C)f(is)120 1512 y Fq(char)23 -b(*readline)g(\(char)g(*)p Fl(prompt)q Fq(\);)0 1653 -y Fr(So,)15 b(one)g(migh)o(t)g(sa)o(y)120 1785 y Fq(char)23 -b(*line)g(=)h(readline)f(\("Enter)g(a)h(line:)f("\);)0 -1927 y Fr(in)17 b(order)g(to)f(read)g(a)g(line)j(of)d(text)g(from)g -(the)g(user.)24 b(The)17 b(line)h(returned)f(has)g(the)f(\014nal)i -(newline)g(remo)o(v)o(ed,)e(so)0 1989 y(only)g(the)f(text)g(remains.)62 -2131 y(If)g Fq(readline)f Fr(encoun)o(ters)h(an)f Fq(EOF)h -Fr(while)h(reading)f(the)g(line,)h(and)f(the)g(line)h(is)f(empt)o(y)g -(at)f(that)g(p)q(oin)o(t,)h(then)0 2193 y Fq(\(char)f(*\)NULL)h -Fr(is)h(returned.)k(Otherwise,)15 b(the)h(line)h(is)e(ended)i(just)d -(as)h(if)h(a)f(newline)i(had)e(b)q(een)i(t)o(yp)q(ed.)62 -2335 y(If)g(y)o(ou)g(w)o(an)o(t)f(the)h(user)g(to)f(b)q(e)i(able)f(to)g -(get)f(at)g(the)h(line)i(later,)e(\(with)g Fq(C-P)f Fr(for)g -(example\),)i(y)o(ou)e(m)o(ust)h(call)0 2397 y Fq(add_history)d(\(\))h -Fr(to)f(sa)o(v)o(e)h(the)g(line)i(a)o(w)o(a)o(y)c(in)j(a)f -Fl(history)k Fr(list)d(of)f(suc)o(h)h(lines.)120 2528 -y Fq(add_history)22 b(\(line\);)0 2670 y Fr(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.)p eop -20 21 bop 0 -58 a Fr(20)1449 b(GNU)15 b(Readline)i(Library)62 -183 y(It)e(is)g(preferable)g(to)f(a)o(v)o(oid)g(sa)o(ving)h(empt)o(y)f -(lines)i(on)f(the)f(history)h(list,)g(since)g(users)g(rarely)g(ha)o(v)o -(e)f(a)g(burning)0 246 y(need)i(to)e(reuse)h(a)f(blank)i(line.)21 -b(Here)15 b(is)g(a)g(function)g(whic)o(h)h(usefully)g(replaces)g(the)f -(standard)f Fq(gets)h(\(\))f Fr(library)0 308 y(function,)i(and)f(has)g -(the)g(adv)m(an)o(tage)g(of)g(no)g(static)g(bu\013er)g(to)g(o)o(v)o -(er\015o)o(w:)120 445 y Fq(/*)24 b(A)f(static)g(variable)g(for)h -(holding)e(the)i(line.)f(*/)120 497 y(static)g(char)g(*line_read)g(=)h -(\(char)f(*\)NULL;)120 601 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(*/)120 -653 y(char)f(*)120 705 y(rl_gets)g(\(\))120 757 y({)168 -809 y(/*)g(If)h(the)f(buffer)g(has)h(already)f(been)g(allocated,)g -(return)g(the)g(memory)239 861 y(to)h(the)f(free)h(pool.)f(*/)168 -912 y(if)g(\(line_read\))215 964 y({)263 1016 y(free)g(\(line_read\);) -263 1068 y(line_read)g(=)h(\(char)f(*\)NULL;)215 1120 -y(})168 1224 y(/*)g(Get)h(a)f(line)h(from)f(the)h(user.)f(*/)168 -1276 y(line_read)f(=)i(readline)f(\(""\);)168 1379 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 -(*/)168 1431 y(if)g(\(line_read)g(&&)g(*line_read\))215 -1483 y(add_history)g(\(line_read\);)168 1587 y(return)g(\(line_read\);) -120 1639 y(})62 1787 y Fr(This)15 b(function)g(giv)o(es)f(the)g(user)g -(the)g(default)h(b)q(eha)o(viour)g(of)e Fq(TAB)h Fr(completion:)20 -b(completion)15 b(on)f(\014le)h(names.)0 1849 y(If)h(y)o(ou)f(do)h(not) -f(w)o(an)o(t)g(Readline)j(to)d(complete)i(on)e(\014lenames,)i(y)o(ou)e -(can)h(c)o(hange)g(the)g(binding)i(of)d(the)h Fq(TAB)f -Fr(k)o(ey)0 1912 y(with)h Fq(rl_bind_key)d(\(\))p Fr(.)120 -2049 y Fq(int)23 b(rl_bind_key)g(\(int)g Fl(k)o(ey)p -Fq(,)h(int)f(\(*)p Fl(function)p Fq(\)\(\)\);)62 2197 -y(rl_bind_key)14 b(\(\))f Fr(tak)o(es)g(t)o(w)o(o)f(argumen)o(ts:)19 -b Fl(k)o(ey)e Fr(is)d(the)g(c)o(haracter)f(that)g(y)o(ou)g(w)o(an)o(t)f -(to)h(bind,)i(and)f Fl(function)0 2260 y Fr(is)g(the)g(address)g(of)f -(the)h(function)g(to)f(call)i(when)f Fl(k)o(ey)j Fr(is)d(pressed.)20 -b(Binding)c Fq(TAB)d Fr(to)g Fq(rl_insert)h(\(\))f Fr(mak)o(es)g -Fq(TAB)0 2322 y Fr(insert)i(itself.)20 b Fq(rl_bind_key)14 -b(\(\))g Fr(returns)g(non-zero)h(if)g Fl(k)o(ey)j Fr(is)d(not)f(a)g(v)m -(alid)i(ASCI)q(I)f(c)o(haracter)f(co)q(de)h(\(b)q(et)o(w)o(een)0 -2384 y(0)g(and)g(255\).)62 2532 y(Th)o(us,)g(to)g(disable)h(the)g -(default)f Fq(TAB)g Fr(b)q(eha)o(vior,)h(the)f(follo)o(wing)h -(su\016ces:)120 2670 y Fq(rl_bind_key)22 b(\('\\t',)h(rl_insert\);)p -eop -21 22 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(21)62 183 y(This)12 b(co)q(de)f(should)h(b)q(e)f -(executed)h(once)f(at)f(the)h(start)f(of)g(y)o(our)g(program;)h(y)o(ou) -g(migh)o(t)f(write)h(a)g(function)g(called)0 246 y Fq -(initialize_readline)i(\(\))j Fr(whic)o(h)h(p)q(erforms)f(this)h(and)f -(other)g(desired)i(initializations,)h(suc)o(h)e(as)f(installing)0 -308 y(custom)f(completers)g(\(see)h(Section)g(2.5)e([Custom)g -(Completers],)h(page)g(34\).)0 562 y Fp(2.2)33 b(Custom)14 -b(F)-6 b(unctions)62 702 y Fr(Readline)18 b(pro)o(vides)f(man)o(y)e -(functions)i(for)e(manipulating)j(the)e(text)f(of)g(the)h(line,)i(but)e -(it)g(isn't)g(p)q(ossible)i(to)0 765 y(an)o(ticipate)i(the)g(needs)g -(of)f(all)h(programs.)31 b(This)20 b(section)g(describ)q(es)h(the)f(v)m -(arious)g(functions)g(and)g(v)m(ariables)0 827 y(de\014ned)c(within)f -(the)g(Readline)i(library)e(whic)o(h)g(allo)o(w)g(a)f(user)g(program)f -(to)h(add)h(customized)g(functionalit)o(y)h(to)0 889 -y(Readline.)0 1127 y Fk(2.2.1)30 b(The)15 b(F)-5 b(unction)14 -b(T)n(yp)r(e)62 1267 y Fr(F)l(or)j(readabilt)o(y)l(,)h(w)o(e)f(declare) -i(a)e(new)g(t)o(yp)q(e)h(of)f(ob)s(ject,)f(called)j Fl(F)l(unction)p -Fr(.)28 b(A)17 b Fq(Function)f Fr(is)i(a)f(C)g(function)0 -1329 y(whic)o(h)f(returns)f(an)g Fq(int)p Fr(.)20 b(The)15 -b(t)o(yp)q(e)g(declaration)h(for)f Fq(Function)f Fr(is:)0 -1470 y Fq(typedef)g(int)h(Function)f(\(\);)62 1610 y -Fr(The)i(reason)f(for)g(declaring)i(this)f(new)g(t)o(yp)q(e)f(is)h(to)f -(mak)o(e)g(it)h(easier)g(to)f(write)g(co)q(de)h(describing)i(p)q(oin)o -(ters)e(to)0 1672 y(C)g(functions.)25 b(Let)17 b(us)f(sa)o(y)g(w)o(e)g -(had)h(a)f(v)m(ariable)i(called)g Fl(func)i Fr(whic)o(h)d(w)o(as)f(a)g -(p)q(oin)o(ter)h(to)f(a)g(function.)25 b(Instead)0 1735 -y(of)15 b(the)g(classic)h(C)f(declaration)62 1875 y Fq(int)g -(\(*\)\(\)func;)0 2015 y Fr(w)o(e)g(ma)o(y)f(write)62 -2156 y Fq(Function)g(*func;)0 2296 y Fr(Similarly)l(,)j(there)e(are)120 -2426 y Fq(typedef)23 b(void)g(VFunction)g(\(\);)120 2478 -y(typedef)g(char)g(*CPFunction)g(\(\);)g Fr(and)120 2530 -y Fq(typedef)g(char)g(**CPPFunction)f(\(\);)0 2670 y -Fr(for)12 b(functions)h(returning)g(no)g(v)m(alue,)g -Fq(pointer)i(to)g(char)p Fr(,)d(and)g Fq(pointer)i(to)h(pointer)g(to)f -(char)p Fr(,)e(resp)q(ectiv)o(ely)l(.)p eop -22 23 bop 0 -58 a Fr(22)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fk(2.2.2)30 b(W)-5 b(riting)15 b(a)g(New)g(F)-5 -b(unction)62 325 y Fr(In)22 b(order)f(to)g(write)g(new)h(functions)g -(for)f(Readline,)j(y)o(ou)d(need)h(to)f(kno)o(w)g(the)g(calling)i(con)o -(v)o(en)o(tions)f(for)0 387 y(k)o(eyb)q(oard-in)o(v)o(ok)o(ed)17 -b(functions,)g(and)f(the)h(names)f(of)g(the)h(v)m(ariables)h(that)d -(describ)q(e)j(the)f(curren)o(t)f(state)g(of)g(the)0 -449 y(line)h(read)e(so)g(far.)62 591 y(The)h(calling)h(sequence)f(for)f -(a)f(command)i Fq(foo)e Fr(lo)q(oks)i(lik)o(e)120 722 -y Fq(foo)23 b(\(int)h(count,)f(int)g(key\))0 864 y Fr(where)f -Fl(coun)o(t)g Fr(is)g(the)f(n)o(umeric)i(argumen)o(t)d(\(or)h(1)g(if)h -(defaulted\))g(and)f Fl(k)o(ey)26 b Fr(is)21 b(the)h(k)o(ey)f(that)g -(in)o(v)o(ok)o(ed)h(this)0 926 y(function.)62 1068 y(It)f(is)h -(completely)g(up)f(to)f(the)h(function)h(as)f(to)f(what)g(should)i(b)q -(e)g(done)f(with)g(the)g(n)o(umeric)h(argumen)o(t.)0 -1130 y(Some)c(functions)g(use)g(it)g(as)f(a)h(rep)q(eat)g(coun)o(t,)f -(some)h(as)f(a)g(\015ag,)h(and)g(others)f(to)g(c)o(ho)q(ose)h -(alternate)f(b)q(eha)o(vior)0 1192 y(\(refreshing)12 -b(the)g(curren)o(t)g(line)h(as)f(opp)q(osed)g(to)f(refreshing)i(the)f -(screen,)g(for)g(example\).)19 b(Some)12 b(c)o(ho)q(ose)f(to)h(ignore)0 -1255 y(it.)24 b(In)17 b(general,)g(if)g(a)g(function)g(uses)g(the)g(n)o -(umeric)g(argumen)o(t)f(as)g(a)g(rep)q(eat)h(coun)o(t,)f(it)h(should)h -(b)q(e)f(able)g(to)f(do)0 1317 y(something)f(useful)g(with)g(b)q(oth)f -(negativ)o(e)h(and)f(p)q(ositiv)o(e)i(argumen)o(ts.)i(A)o(t)c(the)h(v)o -(ery)f(least,)g(it)h(should)g(b)q(e)g(a)o(w)o(are)0 1379 -y(that)f(it)i(can)f(b)q(e)h(passed)g(a)e(negativ)o(e)i(argumen)o(t.)0 -1645 y Fp(2.3)33 b(Readline)16 b(V)-6 b(ariables)62 1787 -y Fr(These)16 b(v)m(ariables)g(are)f(a)o(v)m(ailable)i(to)e(function)h -(writers.)1736 1963 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 1963 18 3 v 21 w(line)p 320 1963 V -23 w(bu\013er)120 2025 y Fr(This)f(is)g(the)f(line)i(gathered)e(so)g -(far.)25 b(Y)l(ou)18 b(are)f(w)o(elcome)g(to)g(mo)q(dify)h(the)f(con)o -(ten)o(ts)g(of)f(the)i(line,)120 2087 y(but)d(see)h(Section)g(2.4.5)d -([Allo)o(wing)k(Undoing],)e(page)g(28.)1736 2263 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 2263 V 21 w(p)r(oin)n(t)120 -2325 y Fr(The)15 b(o\013set)g(of)f(the)i(curren)o(t)f(cursor)g(p)q -(osition)h(in)g Fq(rl_line_buffer)d Fr(\(the)i Fl(p)q(oin)o(t)q -Fr(\).)1736 2501 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p -140 2501 V 21 w(end)120 2563 y Fr(The)d(n)o(um)o(b)q(er)f(of)g(c)o -(haracters)g(presen)o(t)g(in)h Fq(rl_line_buffer)p Fr(.)k(When)c -Fq(rl_point)e Fr(is)i(at)f(the)g(end)120 2626 y(of)f(the)g(line,)i -Fq(rl_point)d Fr(and)h Fq(rl_end)f Fr(are)h(equal.)p -eop -23 24 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(23)1736 183 y(V)l(ariable)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(mark)120 246 y Fr(The)h(mark)e(\(sa)o(v)o -(ed)h(p)q(osition\))h(in)g(the)f(curren)o(t)h(line.)37 -b(If)20 b(set,)h(the)g(mark)e(and)i(p)q(oin)o(t)g(de\014ne)g(a)120 -308 y Fl(region)p Fr(.)1736 473 y(V)l(ariable)-1899 b -Fi(int)20 b Fh(rl)p 140 473 V 21 w(done)120 536 y Fr(Setting)13 -b(this)h(to)f(a)f(non-zero)i(v)m(alue)g(causes)f(Readline)j(to)c -(return)h(the)h(curren)o(t)f(line)h(immediately)l(.)1736 -701 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p 140 701 -V 21 w(p)r(ending)p 361 701 V 20 w(input)120 764 y Fr(Setting)15 -b(this)f(to)g(a)g(v)m(alue)i(mak)o(es)d(it)i(the)f(next)h(k)o(eystrok)o -(e)e(read.)19 b(This)c(is)g(a)f(w)o(a)o(y)f(to)h(stu\013)g(a)g(single) -120 826 y(c)o(haracter)g(in)o(to)i(the)f(input)h(stream.)1736 -991 y(V)l(ariable)-1899 b Fi(char)20 b(*)f Fh(rl)p 211 -991 V 21 w(prompt)120 1054 y Fr(The)c(prompt)e(Readline)k(uses.)j(This) -15 b(is)f(set)h(from)e(the)h(argumen)o(t)g(to)g Fq(readline)g(\(\))p -Fr(,)f(and)i(should)120 1116 y(not)g(b)q(e)h(assigned)f(to)g(directly)l -(.)1736 1282 y(V)l(ariable)-1899 b Fi(char)20 b(*)f Fh(rl)p -211 1282 V 21 w(library)p 400 1282 V 22 w(v)n(ersion)120 -1344 y Fr(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(.)1736 1509 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1509 V 21 w(terminal)p -443 1509 V 21 w(name)120 1572 y Fr(The)c(terminal)h(t)o(yp)q(e,)f(used) -h(for)f(initialization.)1736 1737 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1737 V 21 w(readline)p -430 1737 V 22 w(name)120 1800 y Fr(This)f(v)m(ariable)h(is)f(set)f(to)g -(a)g(unique)i(name)f(b)o(y)f(eac)o(h)h(application)h(using)f(Readline.) -29 b(The)18 b(v)m(alue)120 1862 y(allo)o(ws)f(conditional)h(parsing)f -(of)f(the)g(inputrc)i(\014le)f(\(see)g(Section)g(1.3.2)e([Conditional)j -(Init)f(Con-)120 1924 y(structs],)d(page)h(8\).)1736 -2090 y(V)l(ariable)-1899 b Fi(FILE)20 b(*)f Fh(rl)p 211 -2090 V 21 w(instream)120 2152 y Fr(The)c(stdio)h(stream)e(from)h(whic)o -(h)h(Readline)h(reads)e(input.)1736 2318 y(V)l(ariable)-1899 -b Fi(FILE)20 b(*)f Fh(rl)p 211 2318 V 21 w(outstream)120 -2380 y Fr(The)c(stdio)h(stream)e(to)h(whic)o(h)h(Readline)h(p)q -(erforms)e(output.)1736 2545 y(V)l(ariable)-1899 b Fi(Function)20 -b(*)g Fh(rl)p 316 2545 V 21 w(startup)p 520 2545 V 20 -w(ho)r(ok)120 2608 y Fr(If)13 b(non-zero,)h(this)f(is)h(the)f(address)g -(of)g(a)f(function)i(to)f(call)h(just)f(b)q(efore)g Fq(readline)f -Fr(prin)o(ts)h(the)g(\014rst)120 2670 y(prompt.)p eop -24 25 bop 0 -58 a Fr(24)1449 b(GNU)15 b(Readline)i(Library)1736 -183 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g Fh(rl)p -316 183 18 3 v 21 w(ev)n(en)n(t)p 469 183 V 22 w(ho)r(ok)120 -246 y Fr(If)13 b(non-zero,)f(this)h(is)g(the)g(address)f(of)g(a)g -(function)h(to)f(call)i(p)q(erio)q(dically)h(when)e(readline)h(is)f(w)o -(aiting)120 308 y(for)i(terminal)h(input.)1736 471 y(V)l(ariable)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 471 V 21 w(getc)p -439 471 V 21 w(function)120 533 y Fr(If)c(non-zero,)h -Fq(readline)d Fr(will)k(call)f(indirectly)i(through)c(this)i(p)q(oin)o -(ter)g(to)e(get)h(a)f(c)o(haracter)h(from)120 595 y(the)k(input)h -(stream.)33 b(By)20 b(default,)i(it)e(is)g(set)g(to)g -Fq(rl_getc)p Fr(,)f(the)h(default)h Fq(readline)e Fr(c)o(haracter)120 -657 y(input)d(function)g(\(see)f(Section)h(2.4.8)e([Utilit)o(y)i(F)l -(unctions],)f(page)g(31\).)1736 820 y(V)l(ariable)-1899 -b Fi(VFunction)20 b(*)g Fh(rl)p 342 820 V 21 w(redispla)n(y)p -586 820 V 22 w(function)120 883 y Fr(If)f(non-zero,)h -Fq(readline)e Fr(will)i(call)g(indirectly)i(through)c(this)i(p)q(oin)o -(ter)f(to)f(up)q(date)i(the)f(displa)o(y)120 945 y(with)d(the)g(curren) -o(t)f(con)o(ten)o(ts)g(of)h(the)f(editing)i(bu\013er.)22 -b(By)15 b(default,)h(it)g(is)h(set)e(to)g Fq(rl_redisplay)p -Fr(,)120 1007 y(the)g(default)h Fq(readline)e Fr(redispla)o(y)i -(function)g(\(see)g(Section)g(2.4.6)d([Redispla)o(y],)j(page)f(29\).) -1736 1170 y(V)l(ariable)-1899 b Fi(Keymap)20 b Fh(rl)p -218 1170 V 21 w(executing)p 476 1170 V 22 w(k)n(eymap)120 -1232 y Fr(This)15 b(v)m(ariable)h(is)f(set)g(to)f(the)g(k)o(eymap)h -(\(see)f(Section)i(2.4.2)d([Keymaps],)h(page)g(25\))g(in)h(whic)o(h)h -(the)120 1294 y(curren)o(tly)g(executing)g(readline)h(function)f(w)o -(as)e(found.)1736 1457 y(V)l(ariable)-1899 b Fi(Keymap)20 -b Fh(rl)p 218 1457 V 21 w(binding)p 426 1457 V 22 w(k)n(eymap)120 -1520 y Fr(This)15 b(v)m(ariable)h(is)f(set)g(to)f(the)g(k)o(eymap)h -(\(see)f(Section)i(2.4.2)d([Keymaps],)h(page)g(25\))g(in)h(whic)o(h)h -(the)120 1582 y(last)f(k)o(ey)g(binding)i(o)q(ccurred.)0 -1809 y Fp(2.4)33 b(Readline)16 b(Con)n(v)n(enience)g(F)-6 -b(unctions)0 2019 y Fk(2.4.1)30 b(Naming)15 b(a)g(F)-5 -b(unction)62 2157 y Fr(The)19 b(user)f(can)g(dynamically)i(c)o(hange)e -(the)g(bindings)i(of)e(k)o(eys)f(while)j(using)f(Readline.)30 -b(This)19 b(is)g(done)f(b)o(y)0 2219 y(represen)o(ting)f(the)g -(function)h(with)f(a)g(descriptiv)o(e)h(name.)25 b(The)17 -b(user)g(is)g(able)h(to)e(t)o(yp)q(e)h(the)g(descriptiv)o(e)h(name)0 -2281 y(when)e(referring)f(to)g(the)g(function.)21 b(Th)o(us,)14 -b(in)j(an)e(init)h(\014le,)g(one)f(migh)o(t)g(\014nd)120 -2408 y Fq(Meta-Rubout:)46 b(backward-kill-word)62 2545 -y Fr(This)21 b(binds)f(the)g(k)o(eystrok)o(e)f Fq(META-RUBOUT)f -Fr(to)h(the)h(function)g Fl(descriptiv)o(ely)26 b Fr(named)20 -b Fq(backward-kill-)0 2608 y(word)p Fr(.)j(Y)l(ou,)16 -b(as)g(the)g(programmer,)f(should)i(bind)h(the)e(functions)i(y)o(ou)d -(write)i(to)e(descriptiv)o(e)j(names)e(as)g(w)o(ell.)0 -2670 y(Readline)i(pro)o(vides)d(a)g(function)h(for)f(doing)g(that:)p -eop -25 26 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(25)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(add)p 253 183 V 20 w(defun)i -Fg(\()p Fq(char)14 b(*name,)g(Function)g(*function,)g(int)h(key)p -Fg(\))120 246 y Fr(Add)20 b Fl(name)i Fr(to)d(the)h(list)g(of)f(named)h -(functions.)33 b(Mak)o(e)19 b Fl(function)i Fr(b)q(e)f(the)f(function)i -(that)d(gets)120 308 y(called.)j(If)16 b Fl(k)o(ey)j -Fr(is)d(not)e(-1,)h(then)h(bind)g(it)g(to)e Fl(function)i -Fr(using)g Fq(rl_bind_key)e(\(\))p Fr(.)62 471 y(Using)i(this)g -(function)g(alone)g(is)g(su\016cien)o(t)h(for)d(most)h(applications.)22 -b(It)16 b(is)g(the)f(recommended)i(w)o(a)o(y)d(to)h(add)0 -533 y(a)i(few)h(functions)g(to)f(the)h(default)g(functions)h(that)e -(Readline)j(has)d(built)i(in.)28 b(If)18 b(y)o(ou)g(need)g(to)f(do)h -(something)0 595 y(other)c(than)h(adding)h(a)e(function)i(to)e -(Readline,)j(y)o(ou)d(ma)o(y)g(need)i(to)e(use)h(the)g(underlying)h -(functions)g(describ)q(ed)0 658 y(b)q(elo)o(w.)0 869 -y Fk(2.4.2)30 b(Selecting)15 b(a)g(Keymap)62 1006 y Fr(Key)k(bindings)i -(tak)o(e)c(place)j(on)e(a)g Fl(k)o(eymap)p Fr(.)30 b(The)18 -b(k)o(eymap)h(is)g(the)f(asso)q(ciation)h(b)q(et)o(w)o(een)g(the)f(k)o -(eys)h(that)0 1069 y(the)g(user)g(t)o(yp)q(es)g(and)g(the)g(functions)g -(that)f(get)h(run.)30 b(Y)l(ou)20 b(can)e(mak)o(e)h(y)o(our)f(o)o(wn)g -(k)o(eymaps,)h(cop)o(y)g(existing)0 1131 y(k)o(eymaps,)14 -b(and)i(tell)g(Readline)i(whic)o(h)e(k)o(eymap)f(to)f(use.)1725 -1294 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -1294 V 21 w(mak)n(e)p 370 1294 V 20 w(bare)p 500 1294 -V 20 w(k)n(eymap)j Fg(\(\))120 1356 y Fr(Returns)14 b(a)f(new,)g(empt)o -(y)g(k)o(eymap.)19 b(The)14 b(space)f(for)g(the)h(k)o(eymap)f(is)g -(allo)q(cated)i(with)e Fq(malloc)i(\(\))p Fr(;)120 1419 -y(y)o(ou)g(should)h Fq(free)f(\(\))g Fr(it)g(when)h(y)o(ou)f(are)f -(done.)1725 1582 y(F)l(unction)-1899 b Fi(Keymap)20 b -Fh(rl)p 218 1582 V 21 w(cop)n(y)p 353 1582 V 21 w(k)n(eymap)j -Fg(\()p Fq(Keymap)14 b(map)p Fg(\))120 1644 y Fr(Return)i(a)f(new)g(k)o -(eymap)g(whic)o(h)h(is)g(a)f(cop)o(y)g(of)g Fl(map)p -Fr(.)1725 1807 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p -218 1807 V 21 w(mak)n(e)p 370 1807 V 20 w(k)n(eymap)j -Fg(\(\))120 1869 y Fr(Return)c(a)f(new)h(k)o(eymap)f(with)h(the)f(prin) -o(ting)i(c)o(haracters)d(b)q(ound)j(to)e(rl)p 1407 1869 -14 2 v 16 w(insert,)i(the)e(lo)o(w)o(ercase)120 1932 -y(Meta)13 b(c)o(haracters)g(b)q(ound)h(to)f(run)h(their)g(equiv)m(alen) -o(ts,)i(and)d(the)h(Meta)f(digits)h(b)q(ound)h(to)e(pro)q(duce)120 -1994 y(n)o(umeric)j(argumen)o(ts.)1725 2157 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 2157 18 3 v 21 w(discard)p -366 2157 V 21 w(k)n(eymap)i Fg(\()p Fq(Keymap)14 b(keymap)p -Fg(\))120 2219 y Fr(F)l(ree)h(the)h(storage)d(asso)q(ciated)j(with)f -Fl(k)o(eymap)p Fr(.)62 2382 y(Readline)20 b(has)d(sev)o(eral)h(in)o -(ternal)g(k)o(eymaps.)26 b(These)18 b(functions)g(allo)o(w)g(y)o(ou)f -(to)g(c)o(hange)g(whic)o(h)h(k)o(eymap)f(is)0 2445 y(activ)o(e.)1725 -2608 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -2608 V 21 w(get)p 316 2608 V 21 w(k)n(eymap)i Fg(\(\))120 -2670 y Fr(Returns)16 b(the)f(curren)o(tly)h(activ)o(e)f(k)o(eymap.)p -eop -26 27 bop 0 -58 a Fr(26)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 183 -18 3 v 21 w(set)p 258 183 V 21 w(k)n(eymap)i Fg(\()p -Fq(Keymap)14 b(keymap)p Fg(\))120 246 y Fr(Mak)o(es)g -Fl(k)o(eymap)j Fr(the)e(curren)o(tly)h(activ)o(e)f(k)o(eymap.)1725 -420 y(F)l(unction)-1899 b Fi(Keymap)20 b Fh(rl)p 218 -420 V 21 w(get)p 316 420 V 21 w(k)n(eymap)p 530 420 V -20 w(b)n(y)p 610 420 V 21 w(name)i Fg(\()p Fq(char)14 -b(*name)p Fg(\))120 482 y Fr(Return)19 b(the)g(k)o(eymap)f(matc)o(hing) -g Fl(name)p Fr(.)30 b Fl(name)21 b Fr(is)e(one)g(whic)o(h)g(w)o(ould)g -(b)q(e)g(supplied)i(in)e(a)f Fq(set)120 544 y(keymap)c -Fr(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(5\).)1725 719 y(F)l(unction)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 719 V 21 w(get)p 309 719 V 21 w(k)n(eymap)p -523 719 V 20 w(name)i Fg(\()p Fq(Keymap)14 b(keymap)p -Fg(\))120 781 y Fr(Return)19 b(the)g(name)f(matc)o(hing)h -Fl(k)o(eymap)p Fr(.)29 b Fl(name)21 b Fr(is)e(one)g(whic)o(h)g(w)o -(ould)g(b)q(e)g(supplied)i(in)e(a)f Fq(set)120 843 y(keymap)c -Fr(inputrc)j(line)f(\(see)g(Section)g(1.3)e([Readline)j(Init)f(File],)g -(page)f(5\).)0 1088 y Fk(2.4.3)30 b(Binding)15 b(Keys)62 -1229 y Fr(Y)l(ou)h(asso)q(ciate)f(k)o(eys)f(with)i(functions)g(through) -e(the)i(k)o(eymap.)j(Readline)f(has)c(sev)o(eral)i(in)o(ternal)g(k)o -(eymaps:)0 1291 y Fq(emacs_standard_keymap)p Fr(,)i Fq -(emacs_meta_keymap)p Fr(,)g Fq(emacs_ctlx_keymap)p Fr(,)h -Fq(vi_movement_keymap)p Fr(,)f(and)0 1354 y Fq(vi_insertion_keymap)p -Fr(.)h Fq(emacs_standard_keymap)13 b Fr(is)k(the)f(default,)g(and)g -(the)g(examples)h(in)f(this)h(man)o(ual)0 1416 y(assume)e(that.)62 -1557 y(These)h(functions)g(manage)e(k)o(ey)i(bindings.)1725 -1731 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1731 -V 21 w(bind)p 272 1731 V 21 w(k)n(ey)k Fg(\()p Fq(int)14 -b(key,)h(Function)f(*function)p Fg(\))120 1794 y Fr(Binds)i -Fl(k)o(ey)j Fr(to)14 b Fl(function)i Fr(in)g(the)f(curren)o(tly)h -(activ)o(e)f(k)o(eymap.)k(Returns)d(non-zero)f(in)h(the)f(case)g(of)120 -1856 y(an)g(in)o(v)m(alid)j Fl(k)o(ey)p Fr(.)1725 2030 -y(F)l(unction)-1899 b Fi(int)19 b Fh(rl)p 139 2030 V -21 w(bind)p 271 2030 V 21 w(k)n(ey)p 376 2030 V 21 w(in)p -444 2030 V 22 w(map)i Fg(\()p Fq(int)14 b(key,)h(Function)f(*function,) -g(Keymap)g(map)p Fg(\))120 2093 y Fr(Bind)i Fl(k)o(ey)j -Fr(to)c Fl(function)h Fr(in)g Fl(map)p Fr(.)k(Returns)15 -b(non-zero)h(in)g(the)f(case)g(of)g(an)g(in)o(v)m(alid)j -Fl(k)o(ey)p Fr(.)1725 2267 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 2267 V 21 w(un)n(bind)p 334 2267 V 21 w(k)n(ey)k -Fg(\()p Fq(int)14 b(key)p Fg(\))120 2329 y Fr(Bind)h -Fl(k)o(ey)i Fr(to)c(the)h(n)o(ull)h(function)f(in)g(the)g(curren)o(tly) -g(activ)o(e)g(k)o(eymap.)19 b(Returns)14 b(non-zero)g(in)g(case)120 -2391 y(of)h(error.)1725 2566 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 2566 V 21 w(un)n(bind)p 334 2566 V 21 w(k)n(ey)p -439 2566 V 21 w(in)p 507 2566 V 22 w(map)h Fg(\()p Fq(int)14 -b(key,)h(Keymap)f(map)p Fg(\))120 2628 y Fr(Bind)i Fl(k)o(ey)j -Fr(to)c(the)g(n)o(ull)i(function)f(in)g Fl(map)p Fr(.)k(Returns)15 -b(non-zero)h(in)g(case)f(of)g(error.)p eop -27 28 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(27)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(generic)p 338 183 V 21 -w(bind)j Fg(\()p Fq(int)15 b(type,)f(char)h(*keyseq,)f(char)h(*data,)f -(Keymap)208 246 y(map)p Fg(\))120 308 y Fr(Bind)j(the)f(k)o(ey)g -(sequence)h(represen)o(ted)f(b)o(y)g(the)g(string)g Fl(k)o(eyseq)g -Fr(to)g(the)f(arbitrary)h(p)q(oin)o(ter)g Fl(data)p Fr(.)120 -370 y Fl(t)o(yp)q(e)j Fr(sa)o(ys)c(what)g(kind)i(of)f(data)f(is)i(p)q -(oin)o(ted)g(to)e(b)o(y)h Fl(data)p Fr(;)f(this)i(can)f(b)q(e)g(a)g -(function)h(\()p Fq(ISFUNC)p Fr(\),)d(a)120 432 y(macro)i(\()p -Fq(ISMACR)p Fr(\),)f(or)i(a)f(k)o(eymap)g(\()p Fq(ISKMAP)p -Fr(\).)23 b(This)18 b(mak)o(es)e(new)h(k)o(eymaps)f(as)h(necessary)l(.) -25 b(The)120 495 y(initial)17 b(k)o(eymap)e(in)h(whic)o(h)g(to)f(do)g -(bindings)i(is)f Fl(map)p Fr(.)1725 683 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 683 V 21 w(parse)p 294 683 -V 19 w(and)p 405 683 V 21 w(bind)j Fg(\()p Fq(char)14 -b(*line)p Fg(\))120 745 y Fr(P)o(arse)i Fl(line)21 b -Fr(as)16 b(if)h(it)g(had)f(b)q(een)i(read)f(from)e(the)i -Fq(inputrc)f Fr(\014le)h(and)g(p)q(erform)f(an)o(y)h(k)o(ey)f(bindings) -120 808 y(and)f(v)m(ariable)i(assignmen)o(ts)e(found)h(\(see)f(Section) -h(1.3)e([Readline)j(Init)f(File],)g(page)f(5\).)1725 -996 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 996 -V 21 w(read)p 271 996 V 20 w(init)p 375 996 V 22 w(\014le)k -Fg(\()p Fq(char)14 b(*filename)p Fg(\))120 1059 y Fr(Read)19 -b(k)o(eybindings)i(and)e(v)m(ariable)h(assignmen)o(ts)f(from)f -Fl(\014lename)k Fr(\(see)d(Section)g(1.3)f([Readline)120 -1121 y(Init)e(File],)g(page)f(5\).)0 1409 y Fk(2.4.4)30 -b(Asso)r(ciating)15 b(F)-5 b(unction)15 b(Names)g(and)g(Bindings)62 -1554 y Fr(These)22 b(functions)g(allo)o(w)g(y)o(ou)f(to)f(\014nd)i(out) -f(what)g(k)o(eys)g(in)o(v)o(ok)o(e)h(named)f(functions)h(and)g(the)f -(functions)0 1617 y(in)o(v)o(ok)o(ed)15 b(b)o(y)h(a)e(particular)i(k)o -(ey)f(sequence.)1725 1805 y(F)l(unction)-1899 b Fi(Function)20 -b(*)g Fh(rl)p 316 1805 V 21 w(named)p 504 1805 V 19 w(function)j -Fg(\()p Fq(char)14 b(*name)p Fg(\))120 1868 y Fr(Return)i(the)f -(function)h(with)g(name)f Fl(name)p Fr(.)1725 2056 y(F)l(unction)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 2056 V 21 w(function)p -542 2056 V 21 w(of)p 610 2056 V 19 w(k)n(eyseq)k Fg(\()p -Fq(char)15 b(*keyseq,)f(Keymap)g(map,)h(int)208 2118 -y(*type)p Fg(\))120 2181 y Fr(Return)i(the)f(function)h(in)o(v)o(ok)o -(ed)g(b)o(y)f Fl(k)o(eyseq)i Fr(in)f(k)o(eymap)f Fl(map)p -Fr(.)23 b(If)16 b Fl(map)i Fr(is)f(NULL,)g(the)f(curren)o(t)120 -2243 y(k)o(eymap)g(is)i(used.)25 b(If)17 b Fl(t)o(yp)q(e)i -Fr(is)e(not)g(NULL,)g(the)g(t)o(yp)q(e)g(of)f(the)h(ob)s(ject)f(is)h -(returned)g(in)h(it)f(\(one)f(of)120 2305 y Fq(ISFUNC)p -Fr(,)e Fq(ISKMAP)p Fr(,)g(or)h Fq(ISMACR)p Fr(\).)1725 -2494 y(F)l(unction)-1899 b Fi(char)20 b(**)f Fh(rl)p -237 2494 V 21 w(in)n(v)n(oking)p 466 2494 V 23 w(k)n(eyseqs)k -Fg(\()p Fq(Function)14 b(*function)p Fg(\))120 2556 y -Fr(Return)19 b(an)e(arra)o(y)g(of)h(strings)f(represen)o(ting)i(the)f -(k)o(ey)g(sequences)h(used)f(to)f(in)o(v)o(ok)o(e)h Fl(function)h -Fr(in)120 2618 y(the)c(curren)o(t)g(k)o(eymap.)p eop -28 29 bop 0 -58 a Fr(28)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(char)20 b(**)f Fh(rl)p 237 -183 18 3 v 21 w(in)n(v)n(oking)p 466 183 V 23 w(k)n(eyseqs)p -675 183 V 21 w(in)p 743 183 V 22 w(map)i Fg(\()p Fq(Function)14 -b(*function,)f(Keymap)208 246 y(map)p Fg(\))120 308 y -Fr(Return)19 b(an)e(arra)o(y)g(of)h(strings)f(represen)o(ting)i(the)f -(k)o(ey)g(sequences)h(used)f(to)f(in)o(v)o(ok)o(e)h Fl(function)h -Fr(in)120 370 y(the)c(k)o(eymap)g Fl(map)p Fr(.)1725 -563 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 563 -V 21 w(function)p 392 563 V 21 w(dump)r(er)g Fg(\()p -Fq(int)15 b(readable)p Fg(\))120 625 y Fr(Prin)o(t)i(the)g(readline)h -(function)g(names)f(and)g(the)g(k)o(ey)g(sequences)h(curren)o(tly)g(b)q -(ound)f(to)g(them)g(to)120 687 y Fq(rl_outstream)p Fr(.)j(If)c -Fl(readable)j Fr(is)d(non-zero,)g(the)g(list)g(is)g(formatted)f(in)i -(suc)o(h)f(a)f(w)o(a)o(y)g(that)g(it)h(can)120 750 y(b)q(e)g(made)f -(part)g(of)f(an)i Fq(inputrc)e Fr(\014le)i(and)f(re-read.)1725 -942 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 942 -V 21 w(list)p 262 942 V 22 w(funmap)p 475 942 V 18 w(names)h -Fg(\(\))120 1005 y Fr(Prin)o(t)15 b(the)g(names)h(of)e(all)j(bindable)g -(Readline)g(functions)f(to)f Fq(rl_outstream)p Fr(.)0 -1305 y Fk(2.4.5)30 b(Allo)n(wing)16 b(Undoing)62 1452 -y Fr(Supp)q(orting)f(the)f(undo)g(command)g(is)g(a)g(painless)h(thing,) -f(and)g(mak)o(es)f(y)o(our)h(functions)g(m)o(uc)o(h)g(more)f(useful.)0 -1515 y(It)i(is)g(certainly)g(easy)f(to)g(try)g(something)h(if)g(y)o(ou) -f(kno)o(w)g(y)o(ou)g(can)h(undo)g(it.)20 b(I)15 b(could)g(use)g(an)f -(undo)h(function)h(for)0 1577 y(the)f(sto)q(c)o(k)g(mark)o(et.)62 -1724 y(If)h(y)o(our)f(function)i(simply)g(inserts)f(text)f(once,)h(or)f -(deletes)h(text)f(once,)h(and)g(uses)g Fq(rl_insert_text)d(\(\))i -Fr(or)0 1786 y Fq(rl_delete_text)e(\(\))i Fr(to)g(do)g(it,)g(then)g -(undoing)i(is)e(already)h(done)f(for)g(y)o(ou)g(automatically)l(.)62 -1934 y(If)h(y)o(ou)f(do)g(m)o(ultiple)i(insertions)f(or)f(m)o(ultiple)i -(deletions,)f(or)f(an)o(y)g(com)o(bination)h(of)f(these)g(op)q -(erations,)g(y)o(ou)0 1996 y(should)j(group)e(them)g(together)g(in)o -(to)g(one)h(op)q(eration.)24 b(This)17 b(is)g(done)g(with)g -Fq(rl_begin_undo_group)c(\(\))j Fr(and)0 2058 y Fq(rl_end_undo_group)d -(\(\))p Fr(.)62 2206 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:)120 2343 y Fq(enum)23 b(undo_code)g({)h -(UNDO_DELETE,)e(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)h(};)62 -2490 y Fr(Notice)c(that)e Fq(UNDO_DELETE)f Fr(means)i(to)f(insert)i -(some)e(text,)h(and)g Fq(UNDO_INSERT)e Fr(means)i(to)f(delete)i(some)0 -2552 y(text.)37 b(That)21 b(is,)i(the)e(undo)h(co)q(de)f(tells)i(undo)e -(what)g(to)f(undo,)j(not)e(ho)o(w)g(to)f(undo)i(it.)38 -b Fq(UNDO_BEGIN)20 b Fr(and)0 2614 y Fq(UNDO_END)14 b -Fr(are)h(tags)f(added)i(b)o(y)f Fq(rl_begin_undo_group)e(\(\))i -Fr(and)g Fq(rl_end_undo_group)e(\(\))p Fr(.)p eop -29 30 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(29)1725 183 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 183 18 3 v 21 w(b)r(egin)p 297 183 V 20 -w(undo)p 442 183 V 20 w(group)h Fg(\(\))120 246 y Fr(Begins)e(sa)o -(ving)e(undo)i(information)f(in)g(a)g(group)f(construct.)27 -b(The)18 b(undo)h(information)f(usually)120 308 y(comes)j(from)f(calls) -h(to)g Fq(rl_insert_text)13 b(\(\))20 b Fr(and)h Fq(rl_delete_text)13 -b(\(\))p Fr(,)22 b(but)f(could)g(b)q(e)h(the)120 370 -y(result)16 b(of)e(calls)j(to)d Fq(rl_add_undo)g(\(\))p -Fr(.)1725 541 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 541 V 21 w(end)p 251 541 V 20 w(undo)p 396 541 V -20 w(group)h Fg(\(\))120 603 y Fr(Closes)d(the)f(curren)o(t)g(undo)h -(group)f(started)g(with)h Fq(rl_begin_undo_group)12 b(\(\))p -Fr(.)26 b(There)18 b(should)120 665 y(b)q(e)e(one)f(call)i(to)d -Fq(rl_end_undo_group)f(\(\))i Fr(for)f(eac)o(h)i(call)g(to)f -Fq(rl_begin_undo_group)d(\(\))p Fr(.)1725 836 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 836 V 21 w(add)p 279 836 V -20 w(undo)i Fg(\()p Fq(enum)14 b(undo_code)g(what,)g(int)h(start,)g -(int)f(end,)h(char)208 898 y(*text)p Fg(\))120 960 y -Fr(Remem)o(b)q(er)20 b(ho)o(w)e(to)h(undo)g(an)g(ev)o(en)o(t)g -(\(according)g(to)g Fl(what)q Fr(\).)30 b(The)19 b(a\013ected)g(text)f -(runs)i(from)120 1023 y Fl(start)15 b Fr(to)g Fl(end)p -Fr(,)g(and)g(encompasses)h Fl(text)p Fr(.)1725 1193 y(F)l(unction)-1899 -b Fi(void)20 b Fh(free)p 221 1193 V 20 w(undo)p 366 1193 -V 20 w(list)k Fg(\(\))120 1256 y Fr(F)l(ree)15 b(the)h(existing)g(undo) -f(list.)1725 1426 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 1426 V 21 w(do)p 222 1426 V 20 w(undo)i Fg(\(\))120 -1488 y Fr(Undo)14 b(the)f(\014rst)g(thing)h(on)g(the)f(undo)h(list.)20 -b(Returns)14 b Fq(0)f Fr(if)h(there)g(w)o(as)e(nothing)i(to)f(undo,)h -(non-zero)120 1551 y(if)i(something)f(w)o(as)f(undone.)62 -1721 y(Finally)l(,)j(if)f(y)o(ou)f(neither)i(insert)f(nor)f(delete)i -(text,)d(but)i(directly)h(mo)q(dify)f(the)f(existing)i(text)e(\(e.g.,)f -(c)o(hange)0 1784 y(its)g(case\),)f(call)i Fq(rl_modifying)e(\(\))g -Fr(once,)h(just)f(b)q(efore)h(y)o(ou)f(mo)q(dify)h(the)g(text.)19 -b(Y)l(ou)14 b(m)o(ust)f(supply)h(the)g(indices)0 1846 -y(of)h(the)g(text)g(range)g(that)f(y)o(ou)h(are)g(going)g(to)g(mo)q -(dify)l(.)1725 2017 y(F)l(unction)-1899 b Fi(int)20 b -Fh(rl)p 140 2017 V 21 w(mo)r(difying)h Fg(\()p Fq(int)15 -b(start,)f(int)h(end)p Fg(\))120 2079 y Fr(T)l(ell)e(Readline)g(to)e -(sa)o(v)o(e)f(the)i(text)f(b)q(et)o(w)o(een)g Fl(start)g -Fr(and)h Fl(end)h Fr(as)e(a)g(single)i(undo)e(unit.)20 -b(It)11 b(is)h(assumed)120 2141 y(that)i(y)o(ou)h(will)i(subsequen)o -(tly)g(mo)q(dify)e(that)g(text.)0 2375 y Fk(2.4.6)30 -b(Redispla)n(y)1725 2545 y Fr(F)l(unction)-1899 b Fi(void)20 -b Fh(rl)p 166 2545 V 21 w(redispla)n(y)k Fg(\(\))120 -2608 y Fr(Change)d(what's)g(displa)o(y)o(ed)h(on)g(the)f(screen)h(to)f -(re\015ect)h(the)f(curren)o(t)g(con)o(ten)o(ts)g(of)g -Fq(rl_line_)120 2670 y(buffer)p Fr(.)p eop -30 31 bop 0 -58 a Fr(30)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 183 -18 3 v 21 w(forced)p 315 183 V 20 w(up)r(date)p 509 183 -V 20 w(displa)n(y)k Fg(\(\))120 246 y Fr(F)l(orce)12 -b(the)g(line)h(to)f(b)q(e)g(up)q(dated)h(and)f(redispla)o(y)o(ed,)i -(whether)e(or)f(not)h(Readline)i(thinks)e(the)g(screen)120 -308 y(displa)o(y)k(is)g(correct.)1725 462 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 462 V 21 w(on)p 222 462 V 20 -w(new)p 341 462 V 21 w(line)k Fg(\(\))120 524 y Fr(T)l(ell)c(the)f(up)q -(date)g(routines)g(that)f(w)o(e)g(ha)o(v)o(e)g(mo)o(v)o(ed)g(on)o(to)g -(a)g(new)h(\(empt)o(y\))e(line,)k(usually)f(after)120 -587 y(ouputting)c(a)e(newline.)1725 741 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 741 V 21 w(reset)p 282 741 -V 20 w(line)p 390 741 V 23 w(state)j Fg(\(\))120 803 -y Fr(Reset)14 b(the)f(displa)o(y)h(state)f(to)f(a)h(clean)h(state)f -(and)g(redispla)o(y)i(the)e(curren)o(t)g(line)i(starting)e(on)g(a)g -(new)120 866 y(line.)1725 1020 y(F)l(unction)-1899 b -Fi(int)20 b Fh(rl)p 140 1020 V 21 w(message)g Fg(\()p -Fq(va_alist)p Fg(\))120 1082 y Fr(The)f(argumen)o(ts)e(are)h(a)g -(string)g(as)g(w)o(ould)h(b)q(e)g(supplied)i(to)d Fq(printf)p -Fr(.)28 b(The)19 b(resulting)g(string)f(is)120 1145 y(displa)o(y)o(ed)h -(in)f(the)g Fl(ec)o(ho)f(area)p Fr(.)27 b(The)18 b(ec)o(ho)f(area)g(is) -h(also)g(used)g(to)f(displa)o(y)h(n)o(umeric)h(argumen)o(ts)120 -1207 y(and)c(searc)o(h)g(strings.)1725 1361 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 1361 V 21 w(clear)p 279 1361 -V 21 w(message)h Fg(\(\))120 1424 y Fr(Clear)15 b(the)h(message)e(in)i -(the)g(ec)o(ho)f(area.)0 1616 y Fk(2.4.7)30 b(Mo)r(difying)15 -b(T)-5 b(ext)1725 1771 y Fr(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 1771 V 21 w(insert)p 303 1771 V 21 w(text)k -Fg(\()p Fq(char)14 b(*text)p Fg(\))120 1833 y Fr(Insert)h -Fl(text)h Fr(in)o(to)f(the)h(line)g(at)f(the)g(curren)o(t)g(cursor)g(p) -q(osition.)1725 1988 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 1988 V 21 w(delete)p 308 1988 V 22 w(text)k -Fg(\()p Fq(int)14 b(start,)h(int)f(end)p Fg(\))120 2050 -y Fr(Delete)i(the)f(text)g(b)q(et)o(w)o(een)g Fl(start)g -Fr(and)h Fl(end)h Fr(in)f(the)g(curren)o(t)f(line.)1725 -2204 y(F)l(unction)-1899 b Fi(char)20 b(*)f Fh(rl)p 211 -2204 V 21 w(cop)n(y)p 346 2204 V 21 w(text)24 b Fg(\()p -Fq(int)14 b(start,)h(int)g(end)p Fg(\))120 2266 y Fr(Return)h(a)f(cop)o -(y)g(of)g(the)g(text)f(b)q(et)o(w)o(een)i Fl(start)f -Fr(and)g Fl(end)j Fr(in)e(the)f(curren)o(t)g(line.)1725 -2421 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 2421 -V 21 w(kill)p 236 2421 V 23 w(text)k Fg(\()p Fq(int)14 -b(start,)h(int)g(end)p Fg(\))120 2483 y Fr(Cop)o(y)k(the)g(text)f(b)q -(et)o(w)o(een)i Fl(start)e Fr(and)i Fl(end)h Fr(in)f(the)f(curren)o(t)g -(line)i(to)d(the)h(kill)i(ring,)f(app)q(ending)120 2545 -y(or)e(prep)q(ending)j(to)d(the)h(last)f(kill)j(if)e(the)g(last)f -(command)h(w)o(as)e(a)i(kill)h(command.)30 b(The)19 b(text)f(is)120 -2608 y(deleted.)j(If)13 b Fl(start)g Fr(is)h(less)f(than)h -Fl(end)p Fr(,)f(the)h(text)e(is)i(app)q(ended,)h(otherwise)e(prep)q -(ended.)21 b(If)14 b(the)f(last)120 2670 y(command)i(w)o(as)f(not)h(a)g -(kill,)i(a)e(new)g(kill)i(ring)f(slot)f(is)g(used.)p -eop -31 32 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(31)0 183 y Fk(2.4.8)30 b(Utilit)n(y)16 -b(F)-5 b(unctions)1725 345 y Fr(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 345 18 3 v 21 w(read)p 271 345 V 20 w(k)n(ey)k -Fg(\(\))120 407 y Fr(Return)14 b(the)g(next)g(c)o(haracter)f(a)o(v)m -(ailable.)21 b(This)15 b(handles)g(input)g(inserted)f(in)o(to)g(the)g -(input)h(stream)120 469 y(via)h Fl(p)q(ending)i(input)h -Fr(\(see)d(Section)h(2.3)e([Readline)j(V)l(ariables],)f(page)f(22\))f -(and)i Fq(rl_stuff_char)120 532 y(\(\))p Fr(,)e(macros,)f(and)h(c)o -(haracters)f(read)h(from)g(the)g(k)o(eyb)q(oard.)1725 -693 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 693 -V 21 w(getc)j Fg(\()p Fq(FILE)14 b(*)p Fg(\))120 755 -y Fr(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.)1725 917 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 917 V 21 w(stu\013)p 271 917 V 20 w(c)n(har)j -Fg(\()p Fq(int)15 b(c)p Fg(\))120 979 y Fr(Insert)g Fl(c)i -Fr(in)o(to)e(the)g(Readline)i(input)e(stream.)k(It)c(will)h(b)q(e)g -Fq(")p Fr(read)p Fq(")e Fr(b)q(efore)h(Readline)i(attempts)d(to)120 -1041 y(read)h(c)o(haracters)g(from)f(the)h(terminal)h(with)g -Fq(rl_read_key)d(\(\))p Fr(.)1725 1203 y(F)l(unction)-1899 -b Fi(rl_extend_line_buffer)22 b Fh(\(in)n(t)j Fq(len)p -Fg(\))120 1265 y Fr(Ensure)15 b(that)f Fq(rl_line_buffer)e -Fr(has)j(enough)g(space)g(to)e(hold)j Fl(len)f Fr(c)o(haracters,)f(p)q -(ossibly)i(reallo-)120 1327 y(cating)f(it)h(if)f(necessary)l(.)1725 -1489 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1489 -V 21 w(initiali)q(z)q(e)26 b Fg(\(\))120 1551 y Fr(Initialize)18 -b(or)d(re-initialize)j(Readline's)f(in)o(ternal)f(state.)1725 -1713 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 1713 -V 21 w(reset)p 282 1713 V 20 w(terminal)j Fg(\()p Fq(char)15 -b(*terminal_name)p Fg(\))120 1775 y Fr(Reinitializ)q(e)f(Readline's)e -(idea)g(of)e(the)h(terminal)h(settings)f(using)g Fl(terminal)p -1404 1775 14 2 v 17 w(name)j Fr(as)c(the)h(terminal)120 -1837 y(t)o(yp)q(e)k(\(e.g.,)f Fq(vt100)p Fr(\).)1725 -1999 y(F)l(unction)-1899 b Fi(int)20 b Fh(alphab)r(etic)k -Fg(\()p Fq(int)14 b(c)p Fg(\))120 2061 y Fr(Return)i(1)f(if)g -Fl(c)j Fr(is)e(an)f(alphab)q(etic)i(c)o(haracter.)1725 -2222 y(F)l(unction)-1899 b Fi(int)20 b Fh(n)n(umeric)i -Fg(\()p Fq(int)15 b(c)p Fg(\))120 2285 y Fr(Return)h(1)f(if)g -Fl(c)j Fr(is)e(a)f(n)o(umeric)h(c)o(haracter.)1725 2446 -y(F)l(unction)-1899 b Fi(int)20 b Fh(ding)i Fg(\(\))120 -2508 y Fr(Ring)16 b(the)f(terminal)h(b)q(ell,)h(ob)q(eying)f(the)g -(setting)f(of)g Fq(bell-style)p Fr(.)62 2670 y(The)h(follo)o(wing)g -(are)f(implemen)o(ted)h(as)f(macros,)f(de\014ned)j(in)f -Fq(chartypes.h)p Fr(.)p eop -32 33 bop 0 -58 a Fr(32)1449 b(GNU)15 b(Readline)i(Library)1725 -183 y(F)l(unction)-1899 b Fi(int)20 b Fh(upp)r(ercase)p -351 183 18 3 v 19 w(p)j Fg(\()p Fq(int)14 b(c)p Fg(\))120 -246 y Fr(Return)i(1)f(if)g Fl(c)j Fr(is)e(an)f(upp)q(ercase)i(alphab)q -(etic)f(c)o(haracter.)1725 409 y(F)l(unction)-1899 b -Fi(int)20 b Fh(lo)n(w)n(ercase)p 334 409 V 22 w(p)i Fg(\()p -Fq(int)15 b(c)p Fg(\))120 471 y Fr(Return)h(1)f(if)g -Fl(c)j Fr(is)e(a)f(lo)o(w)o(ercase)g(alphab)q(etic)i(c)o(haracter.)1725 -634 y(F)l(unction)-1899 b Fi(int)20 b Fh(digit)p 214 -634 V 22 w(p)i Fg(\()p Fq(int)15 b(c)p Fg(\))120 696 -y Fr(Return)h(1)f(if)g Fl(c)j Fr(is)e(a)f(n)o(umeric)h(c)o(haracter.) -1725 859 y(F)l(unction)-1899 b Fi(int)20 b Fh(to)p 152 -859 V 20 w(upp)r(er)i Fg(\()p Fq(int)14 b(c)p Fg(\))120 -922 y Fr(If)h Fl(c)i Fr(is)f(a)e(lo)o(w)o(ercase)g(alphab)q(etic)j(c)o -(haracter,)c(return)i(the)g(corresp)q(onding)g(upp)q(ercase)h(c)o -(haracter.)1725 1085 y(F)l(unction)-1899 b Fi(int)20 -b Fh(to)p 152 1085 V 20 w(lo)n(w)n(er)k Fg(\()p Fq(int)15 -b(c)p Fg(\))120 1147 y Fr(If)e Fl(c)i Fr(is)e(an)f(upp)q(ercase)h -(alphab)q(etic)h(c)o(haracter,)e(return)g(the)h(corresp)q(onding)g(lo)o -(w)o(ercase)f(c)o(haracter.)1725 1310 y(F)l(unction)-1899 -b Fi(int)20 b Fh(digit)p 214 1310 V 22 w(v)m(alue)j Fg(\()p -Fq(int)15 b(c)p Fg(\))120 1372 y Fr(If)g Fl(c)k Fr(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.)0 -1584 y Fk(2.4.9)30 b(Alternate)15 b(In)n(terface)62 1721 -y Fr(An)k(alternate)e(in)o(terface)h(is)h(a)o(v)m(ailable)h(to)d(plain) -i Fq(readline\(\))p Fr(.)27 b(Some)18 b(applications)h(need)g(to)e(in)o -(terlea)o(v)o(e)0 1783 y(k)o(eyb)q(oard)d(I/O)h(with)f(\014le,)h -(device,)h(or)d(windo)o(w)i(system)e(I/O,)i(t)o(ypically)g(b)o(y)f -(using)h(a)f(main)h(lo)q(op)g(to)e Fq(select\(\))0 1846 -y Fr(on)k(v)m(arious)h(\014le)g(descriptors.)26 b(T)l(o)17 -b(accomo)q(date)g(this)h(need,)g(readline)h(can)e(also)h(b)q(e)f(in)o -(v)o(ok)o(ed)h(as)f(a)g(`callbac)o(k')0 1908 y(function)f(from)e(an)i -(ev)o(en)o(t)f(lo)q(op.)20 b(There)15 b(are)g(functions)h(a)o(v)m -(ailable)h(to)e(mak)o(e)f(this)i(easy)l(.)1725 2071 y(F)l(unction)-1899 -b Fi(void)20 b Fh(rl)p 166 2071 V 21 w(callbac)n(k)p -383 2071 V 23 w(handler)p 595 2071 V 21 w(install)25 -b Fg(\()p Fq(char)14 b(*prompt,)g(Vfunction)208 2133 -y(*lhandler)p Fg(\))120 2196 y Fr(Set)h(up)g(the)f(terminal)i(for)d -(readline)k(I/O)e(and)f(displa)o(y)i(the)f(initial)h(expanded)g(v)m -(alue)g(of)e Fl(prompt)p Fr(.)120 2258 y(Sa)o(v)o(e)h(the)f(v)m(alue)j -(of)d Fl(lhandler)20 b Fr(to)14 b(use)h(as)g(a)g(callbac)o(k)h(when)f -(a)f(complete)i(line)h(of)d(input)i(has)f(b)q(een)120 -2320 y(en)o(tered.)1725 2483 y(F)l(unction)-1899 b Fi(void)20 -b Fh(rl)p 166 2483 V 21 w(callbac)n(k)p 383 2483 V 23 -w(read)p 516 2483 V 20 w(c)n(har)j Fg(\(\))120 2545 y -Fr(Whenev)o(er)d(an)f(application)i(determines)g(that)e(k)o(eyb)q(oard) -g(input)i(is)f(a)o(v)m(ailable,)i(it)d(should)i(call)120 -2608 y Fq(rl_callback_read_char\(\))p Fr(,)11 b(whic)o(h)j(will)i(read) -e(the)g(next)g(c)o(haracter)f(from)g(the)h(curren)o(t)g(input)120 -2670 y(source.)24 b(If)17 b(that)f(c)o(haracter)g(completes)i(the)f -(line,)h Fq(rl_callback_read_char)c Fr(will)k(in)o(v)o(ok)o(e)f(the)p -eop -33 34 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(33)120 183 y Fl(lhandler)19 b Fr(function)d(sa)o(v)o -(ed)e(b)o(y)g Fq(rl_callback_handler_install)d Fr(to)j(pro)q(cess)h -(the)f(line.)21 b Fq(EOF)14 b Fr(is)120 246 y(indicated)j(b)o(y)e -(calling)i Fl(lhandler)j Fr(with)c(a)f Fq(NULL)f Fr(line.)1725 -413 y(F)l(unction)-1899 b Fi(void)20 b Fh(rl)p 166 413 -18 3 v 21 w(callbac)n(k)p 383 413 V 23 w(handler)p 595 -413 V 21 w(remo)n(v)n(e)i Fg(\(\))120 476 y Fr(Restore)12 -b(the)g(terminal)h(to)e(its)i(initial)h(state)d(and)h(remo)o(v)o(e)g -(the)g(line)i(handler.)20 b(This)12 b(ma)o(y)g(b)q(e)g(called)120 -538 y(from)i(within)j(a)e(callbac)o(k)h(as)f(w)o(ell)h(as)f(indep)q -(enden)o(tly)l(.)0 763 y Fk(2.4.10)29 b(An)16 b(Example)62 -902 y Fr(Here)d(is)g(a)f(function)h(whic)o(h)g(c)o(hanges)g(lo)o(w)o -(ercase)f(c)o(haracters)f(to)h(their)h(upp)q(ercase)g(equiv)m(alen)o -(ts,)h(and)f(upp)q(er-)0 964 y(case)j(c)o(haracters)g(to)g(lo)o(w)o -(ercase.)23 b(If)16 b(this)h(function)g(w)o(as)f(b)q(ound)h(to)f(`)p -Fq(M-c)p Fr(',)f(then)h(t)o(yping)h(`)p Fq(M-c)p Fr(')e(w)o(ould)i(c)o -(hange)0 1026 y(the)g(case)f(of)g(the)h(c)o(haracter)f(under)h(p)q(oin) -o(t.)25 b(T)o(yping)17 b(`)p Fq(M-1)d(0)h(M-c)p Fr(')h(w)o(ould)h(c)o -(hange)f(the)h(case)f(of)h(the)f(follo)o(wing)0 1089 -y(10)f(c)o(haracters,)f(lea)o(ving)i(the)f(cursor)g(on)g(the)g(last)g -(c)o(haracter)g(c)o(hanged.)120 1217 y Fq(/*)24 b(Invert)f(the)g(case)g -(of)h(the)f(COUNT)h(following)e(characters.)h(*/)120 -1269 y(int)120 1321 y(invert_case_line)f(\(count,)h(key\))239 -1373 y(int)h(count,)f(key;)120 1425 y({)168 1477 y(register)f(int)i -(start,)f(end,)g(i;)168 1580 y(start)g(=)h(rl_point;)168 -1684 y(if)f(\(rl_point)g(>=)h(rl_end\))215 1736 y(return)f(\(0\);)168 -1840 y(if)g(\(count)g(<)h(0\))215 1892 y({)263 1944 y(direction)f(=)h -(-1;)263 1995 y(count)f(=)h(-count;)215 2047 y(})168 -2099 y(else)215 2151 y(direction)f(=)h(1;)168 2255 y(/*)f(Find)h(the)f -(end)h(of)f(the)h(range)f(to)g(modify.)g(*/)168 2307 -y(end)g(=)h(start)f(+)h(\(count)f(*)h(direction\);)168 -2411 y(/*)f(Force)g(it)h(to)g(be)f(within)g(range.)g(*/)168 -2462 y(if)g(\(end)h(>)f(rl_end\))215 2514 y(end)h(=)g(rl_end;)168 -2566 y(else)f(if)h(\(end)f(<)h(0\))215 2618 y(end)g(=)g(0;)p -eop -34 35 bop 0 -58 a Fr(34)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(if)23 b(\(start)g(==)h(end\))215 235 y(return)f(\(0\);)168 -339 y(if)g(\(start)g(>)h(end\))215 391 y({)263 443 y(int)g(temp)f(=)h -(start;)263 495 y(start)f(=)h(end;)263 546 y(end)g(=)f(temp;)215 -598 y(})168 702 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)239 754 y(the)g(undo)f -(information.)f(*/)168 806 y(rl_modifying)g(\(start,)h(end\);)168 -910 y(for)g(\(i)h(=)f(start;)h(i)f(!=)h(end;)f(i++\))215 -962 y({)263 1013 y(if)h(\(uppercase_p)e(\(rl_line_buffer[i]\)\))311 -1065 y(rl_line_buffer[i])f(=)j(to_lower)f(\(rl_line_buffer[i]\);)263 -1117 y(else)g(if)h(\(lowercase_p)e(\(rl_line_buffer[i]\)\))311 -1169 y(rl_line_buffer[i])f(=)j(to_upper)f(\(rl_line_buffer[i]\);)215 -1221 y(})168 1273 y(/*)g(Move)h(point)f(to)g(on)h(top)f(of)h(the)f -(last)h(character)e(changed.)h(*/)168 1325 y(rl_point)f(=)i -(\(direction)f(==)g(1\))h(?)g(end)f(-)h(1)g(:)f(start;)168 -1377 y(return)g(\(0\);)120 1429 y(})0 1670 y Fp(2.5)33 -b(Custom)14 b(Completers)62 1809 y Fr(T)o(ypically)l(,)g(a)c(program)g -(that)h(reads)g(commands)g(from)f(the)h(user)h(has)e(a)h(w)o(a)o(y)f -(of)h(disam)o(biguating)h(commands)0 1871 y(and)k(data.)k(If)c(y)o(our) -f(program)g(is)h(one)g(of)f(these,)h(then)g(it)g(can)g(pro)o(vide)g -(completion)g(for)g(commands,)f(data,)f(or)0 1933 y(b)q(oth.)28 -b(The)18 b(follo)o(wing)h(sections)f(describ)q(e)h(ho)o(w)f(y)o(our)f -(program)g(and)h(Readline)i(co)q(op)q(erate)e(to)f(pro)o(vide)i(this)0 -1995 y(service.)0 2220 y Fk(2.5.1)30 b(Ho)n(w)15 b(Completing)g(W)-5 -b(orks)62 2359 y Fr(In)16 b(order)f(to)g(complete)h(some)f(text,)f(the) -h(full)i(list)f(of)f(p)q(ossible)i(completions)f(m)o(ust)f(b)q(e)h(a)o -(v)m(ailable.)21 b(That)15 b(is,)0 2421 y(it)k(is)f(not)g(p)q(ossible)i -(to)e(accurately)h(expand)g(a)f(partial)h(w)o(ord)e(without)i(kno)o -(wing)f(all)h(of)f(the)h(p)q(ossible)h(w)o(ords)0 2483 -y(whic)o(h)c(mak)o(e)f(sense)h(in)g(that)e(con)o(text.)20 -b(The)15 b(Readline)j(library)e(pro)o(vides)f(the)h(user)f(in)o -(terface)h(to)e(completion,)0 2545 y(and)h(t)o(w)o(o)f(of)h(the)h(most) -e(common)h(completion)h(functions:)21 b(\014lename)c(and)e(username.)20 -b(F)l(or)15 b(completing)h(other)0 2608 y(t)o(yp)q(es)h(of)f(text,)g(y) -o(ou)h(m)o(ust)f(write)h(y)o(our)f(o)o(wn)g(completion)i(function.)25 -b(This)18 b(section)f(describ)q(es)h(exactly)g(what)0 -2670 y(suc)o(h)e(functions)f(m)o(ust)g(do,)g(and)g(pro)o(vides)h(an)f -(example.)p eop -35 36 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(35)62 183 y(There)16 b(are)f(three)g(ma)s(jor)f -(functions)i(used)f(to)g(p)q(erform)g(completion:)25 -320 y(1.)29 b(The)15 b(user-in)o(terface)g(function)g -Fq(rl_complete)e(\(\))p Fr(.)20 b(This)15 b(function)g(is)g(called)h -(with)e(the)h(same)f(argumen)o(ts)90 383 y(as)j(other)g(Readline)j -(functions)f(in)o(tended)g(for)e(in)o(teractiv)o(e)h(use:)25 -b Fl(coun)o(t)18 b Fr(and)g Fl(in)o(v)o(oking)p 1633 -383 14 2 v 17 w(k)o(ey)p Fr(.)27 b(It)18 b(isolates)90 -445 y(the)j(w)o(ord)g(to)f(b)q(e)i(completed)h(and)e(calls)h -Fq(completion_matches)13 b(\(\))21 b Fr(to)f(generate)h(a)g(list)h(of)f -(p)q(ossible)90 507 y(completions.)h(It)16 b(then)g(either)h(lists)f -(the)g(p)q(ossible)h(completions,)g(inserts)f(the)g(p)q(ossible)h -(completions,)f(or)90 569 y(actually)g(p)q(erforms)f(the)g(completion,) -h(dep)q(ending)i(on)d(whic)o(h)h(b)q(eha)o(vior)f(is)h(desired.)25 -644 y(2.)29 b(The)18 b(in)o(ternal)h(function)g Fq(completion_matches) -13 b(\(\))18 b Fr(uses)g(y)o(our)f Fl(generator)k Fr(function)e(to)e -(generate)h(the)90 706 y(list)h(of)e(p)q(ossible)j(matc)o(hes,)e(and)g -(then)g(returns)g(the)g(arra)o(y)f(of)h(these)g(matc)o(hes.)28 -b(Y)l(ou)18 b(should)h(place)g(the)90 769 y(address)c(of)g(y)o(our)g -(generator)f(function)i(in)g Fq(rl_completion_entry_functi)o(on)p -Fr(.)25 843 y(3.)29 b(The)16 b(generator)g(function)h(is)f(called)i -(rep)q(eatedly)g(from)d Fq(completion_matches)e(\(\))p -Fr(,)i(returning)i(a)f(string)90 906 y(eac)o(h)j(time.)31 -b(The)19 b(argumen)o(ts)f(to)g(the)h(generator)e(function)j(are)e -Fl(text)i Fr(and)f Fl(state)p Fr(.)29 b Fl(text)19 b -Fr(is)h(the)f(partial)90 968 y(w)o(ord)13 b(to)g(b)q(e)h(completed.)21 -b Fl(state)15 b Fr(is)f(zero)g(the)g(\014rst)f(time)h(the)g(function)g -(is)g(called,)i(allo)o(wing)e(the)g(generator)90 1030 -y(to)19 b(p)q(erform)f(an)o(y)h(necessary)h(initialization,)i(and)e(a)f -(p)q(ositiv)o(e)h(non-zero)f(in)o(teger)h(for)e(eac)o(h)h(subsequen)o -(t)90 1092 y(call.)35 b(When)21 b(the)f(generator)f(function)i(returns) -f Fq(\(char)14 b(*\)NULL)19 b Fr(this)i(signals)f Fq -(completion_matches)90 1155 y(\(\))c Fr(that)g(there)h(are)f(no)h(more) -f(p)q(ossibilitie)q(s)j(left.)25 b(Usually)18 b(the)e(generator)g -(function)i(computes)e(the)h(list)90 1217 y(of)j(p)q(ossible)i -(completions)f(when)g Fl(state)h Fr(is)f(zero,)g(and)f(returns)g(them)h -(one)f(at)g(a)g(time)g(on)g(subsequen)o(t)90 1279 y(calls.)g(Eac)o(h)14 -b(string)f(the)h(generator)e(function)j(returns)e(as)g(a)g(matc)o(h)g -(m)o(ust)g(b)q(e)h(allo)q(cated)h(with)e Fq(malloc\(\))p -Fr(;)90 1341 y(Readline)18 b(frees)d(the)g(strings)g(when)h(it)f(has)g -(\014nished)i(with)f(them.)1725 1503 y(F)l(unction)-1899 -b Fi(int)20 b Fh(rl)p 140 1503 18 3 v 21 w(complete)j -Fg(\()p Fq(int)14 b(ignore,)g(int)h(invoking_key)p Fg(\))120 -1566 y Fr(Complete)j(the)f(w)o(ord)f(at)h(or)g(b)q(efore)g(p)q(oin)o -(t.)27 b(Y)l(ou)17 b(ha)o(v)o(e)g(supplied)i(the)f(function)g(that)e -(do)q(es)i(the)120 1628 y(initial)d(simple)f(matc)o(hing)f(selection)h -(algorithm)f(\(see)f Fq(completion_matches)h(\(\))p Fr(\).)18 -b(The)13 b(default)120 1690 y(is)j(to)e(do)h(\014lename)i(completion.) -1736 1852 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g -Fh(rl)p 316 1852 V 21 w(completion)p 611 1852 V 21 w(en)n(try)p -764 1852 V 21 w(function)120 1914 y Fr(This)e(is)g(a)f(p)q(oin)o(ter)h -(to)f(the)g(generator)g(function)h(for)f Fq(completion_matches)12 -b(\(\))p Fr(.)27 b(If)17 b(the)h(v)m(alue)120 1977 y(of)j -Fq(rl_completion_entry_funct)o(ion)d Fr(is)k Fq(\(Function)14 -b(*\)NULL)20 b Fr(then)i(the)f(default)h(\014lename)120 -2039 y(generator)14 b(function,)i Fq(filename_completion_functi)o(on)c -(\(\))p Fr(,)j(is)g(used.)0 2247 y Fk(2.5.2)30 b(Completion)15 -b(F)-5 b(unctions)62 2384 y Fr(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.) -1725 2545 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 -2545 V 21 w(complete)p 385 2545 V 21 w(in)n(ternal)k -Fg(\()p Fq(int)15 b(what_to_do)p Fg(\))120 2608 y Fr(Complete)d(the)g -(w)o(ord)f(at)g(or)g(b)q(efore)h(p)q(oin)o(t.)19 b Fl(what)p -979 2608 14 2 v 16 w(to)p 1036 2608 V 16 w(do)14 b Fr(sa)o(ys)d(what)g -(to)g(do)g(with)h(the)g(completion.)120 2670 y(A)g(v)m(alue)h(of)f(`)p -Fq(?)p Fr(')f(means)h(list)h(the)f(p)q(ossible)i(completions.)20 -b(`)p Fq(TAB)p Fr(')11 b(means)h(do)g(standard)f(completion.)p -eop -36 37 bop 0 -58 a Fr(36)1449 b(GNU)15 b(Readline)i(Library)120 -183 y(`)p Fq(*)p Fr(')c(means)h(insert)h(all)g(of)f(the)g(p)q(ossible)i -(completions.)21 b(`)p Fq(!)p Fr(')13 b(means)h(to)g(displa)o(y)h(all)g -(of)f(the)g(p)q(ossible)120 246 y(completions,)i(if)g(there)f(is)h -(more)e(than)h(one,)g(as)g(w)o(ell)h(as)f(p)q(erforming)h(partial)f -(completion.)1725 441 y(F)l(unction)-1899 b Fi(int)20 -b Fh(rl)p 140 441 18 3 v 21 w(complete)j Fg(\()p Fq(int)14 -b(ignore,)g(int)h(invoking_key)p Fg(\))120 503 y Fr(Complete)23 -b(the)g(w)o(ord)e(at)h(or)g(b)q(efore)h(p)q(oin)o(t.)43 -b(Y)l(ou)23 b(ha)o(v)o(e)f(supplied)j(the)d(function)i(that)e(do)q(es) -120 565 y(the)16 b(initial)j(simple)f(matc)o(hing)e(selection)i -(algorithm)e(\(see)g Fq(completion_matches)d(\(\))j Fr(and)g -Fq(rl_)120 627 y(completion_entry_function)p Fr(\))o(.)25 -b(The)18 b(default)g(is)g(to)f(do)h(\014lename)h(completion.)29 -b(This)18 b(calls)120 690 y Fq(rl_complete_internal)12 -b(\(\))j Fr(with)h(an)f(argumen)o(t)f(dep)q(ending)k(on)d -Fl(in)o(v)o(oking)p 1496 690 14 2 v 17 w(k)o(ey)p Fr(.)1725 -885 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p 140 885 -18 3 v 21 w(p)r(ossible)p 358 885 V 20 w(completions)j -Fg(\()p Fq(int)15 b(count,)f(int)h(invoking_key)p Fg(\)\))120 -947 y Fr(List)23 b(the)f(p)q(ossible)j(completions.)42 -b(See)23 b(description)h(of)e Fq(rl_complete)14 b(\(\))p -Fr(.)41 b(This)23 b(calls)g Fq(rl_)120 1009 y(complete_internal)13 -b(\(\))i Fr(with)g(an)g(argumen)o(t)g(of)g(`)p Fq(?)p -Fr('.)1725 1204 y(F)l(unction)-1899 b Fi(int)20 b Fh(rl)p -140 1204 V 21 w(insert)p 303 1204 V 21 w(completions)j -Fg(\()p Fq(int)14 b(count,)g(int)h(invoking_key)p Fg(\)\))120 -1267 y Fr(Insert)20 b(the)f(list)i(of)e(p)q(ossible)i(completions)f(in) -o(to)g(the)f(line,)j(deleting)f(the)f(partially-completed)120 -1329 y(w)o(ord.)h(See)c(description)g(of)e Fq(rl_complete)f(\(\))p -Fr(.)21 b(This)c(calls)g Fq(rl_complete_internal)12 b(\(\))k -Fr(with)120 1391 y(an)f(argumen)o(t)g(of)f(`)p Fq(*)p -Fr('.)1725 1586 y(F)l(unction)-1899 b Fi(char)20 b(**)f -Fh(completion)p 472 1586 V 21 w(matc)n(hes)j Fg(\()p -Fq(char)15 b(*text,)f(CPFunction)208 1648 y(*entry_func)p -Fg(\))120 1711 y Fr(Returns)22 b(an)g(arra)o(y)e(of)h -Fq(\(char)15 b(*\))21 b Fr(whic)o(h)i(is)f(a)f(list)i(of)e(completions) -i(for)e Fl(text)p Fr(.)39 b(If)22 b(there)f(are)120 1773 -y(no)d(completions,)i(returns)e Fq(\(char)c(**\)NULL)p -Fr(.)28 b(The)19 b(\014rst)e(en)o(try)h(in)h(the)g(returned)f(arra)o(y) -f(is)i(the)120 1835 y(substitution)c(for)e Fl(text)p -Fr(.)19 b(The)c(remaining)g(en)o(tries)f(are)g(the)g(p)q(ossible)i -(completions.)k(The)15 b(arra)o(y)d(is)120 1897 y(terminated)j(with)h -(a)f Fq(NULL)f Fr(p)q(oin)o(ter.)120 2045 y Fl(en)o(try)p -227 2045 14 2 v 16 w(func)h Fr(is)d(a)g(function)h(of)e(t)o(w)o(o)g -(args,)g(and)h(returns)g(a)f Fq(\(char)k(*\))p Fr(.)j(The)12 -b(\014rst)f(argumen)o(t)g(is)i Fl(text)p Fr(.)120 2108 -y(The)i(second)f(is)h(a)f(state)g(argumen)o(t;)f(it)i(is)g(zero)f(on)g -(the)h(\014rst)f(call,)h(and)f(non-zero)h(on)f(subsequen)o(t)120 -2170 y(calls.)21 b Fl(en)o(try)p 346 2170 V 16 w(func)c -Fr(returns)e(a)f Fq(NULL)g Fr(p)q(oin)o(ter)h(to)f(the)g(caller)i(when) -f(there)f(are)g(no)h(more)f(matc)o(hes.)1725 2365 y(F)l(unction)-1899 -b Fi(char)20 b(*)f Fh(\014lename)p 380 2365 18 3 v 20 -w(completion)p 674 2365 V 21 w(function)k Fg(\()p Fq(char)15 -b(*text,)f(int)h(state)p Fg(\))120 2427 y Fr(A)e(generator)f(function)h -(for)f(\014lename)i(completion)g(in)f(the)g(general)g(case.)19 -b(Note)13 b(that)f(completion)120 2490 y(in)18 b(Bash)f(is)h(a)f -(little)h(di\013eren)o(t)f(b)q(ecause)h(of)f(all)h(the)f(pathnames)g -(that)g(m)o(ust)f(b)q(e)i(follo)o(w)o(ed)f(when)120 2552 -y(lo)q(oking)23 b(up)f(completions)h(for)e(a)g(command.)39 -b(The)22 b(Bash)g(source)g(is)g(a)f(useful)i(reference)g(for)120 -2614 y(writing)16 b(custom)f(completion)h(functions.)p -eop -37 38 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(37)1725 183 y(F)l(unction)-1899 b Fi(char)20 -b(*)f Fh(username)p 412 183 18 3 v 19 w(completion)p -705 183 V 21 w(function)k Fg(\()p Fq(char)14 b(*text,)g(int)h(state)p -Fg(\))120 246 y Fr(A)i(completion)h(generator)e(for)g(usernames.)24 -b Fl(text)18 b Fr(con)o(tains)e(a)h(partial)g(username)g(preceded)h(b)o -(y)120 308 y(a)f(random)g(c)o(haracter)f(\(usually)j(`)p -Fq(~)p Fr('\).)24 b(As)18 b(with)f(all)h(completion)h(generators,)d -Fl(state)j Fr(is)f(zero)f(on)120 370 y(the)e(\014rst)g(call)h(and)g -(non-zero)f(for)g(subsequen)o(t)h(calls.)0 618 y Fk(2.5.3)30 -b(Completion)15 b(V)-5 b(ariables)1736 793 y Fr(V)l(ariable)-1899 -b Fi(Function)20 b(*)g Fh(rl)p 316 793 V 21 w(completion)p -611 793 V 21 w(en)n(try)p 764 793 V 21 w(function)120 -856 y Fr(A)d(p)q(oin)o(ter)h(to)f(the)g(generator)f(function)i(for)f -Fq(completion_matches)c(\(\))p Fr(.)25 b Fq(NULL)17 b -Fr(means)g(to)g(use)120 918 y Fq(filename_entry_function)12 -b(\(\))p Fr(,)j(the)g(default)h(\014lename)g(completer.)1736 -1093 y(V)l(ariable)-1899 b Fi(CPPFunction)21 b(*)e Fh(rl)p -394 1093 V 21 w(attempted)p 674 1093 V 20 w(completion)p -968 1093 V 21 w(function)120 1156 y Fr(A)g(p)q(oin)o(ter)h(to)f(an)g -(alternativ)o(e)h(function)g(to)f(create)g(matc)o(hes.)32 -b(The)20 b(function)g(is)g(called)h(with)120 1218 y Fl(text)p -Fr(,)e Fl(start)p Fr(,)g(and)g Fl(end)p Fr(.)32 b Fl(start)19 -b Fr(and)g Fl(end)j Fr(are)c(indices)j(in)f Fq(rl_line_buffer)d -Fr(sa)o(ying)i(what)g(the)120 1280 y(b)q(oundaries)c(of)e -Fl(text)h Fr(are.)19 b(If)13 b(this)h(function)g(exists)g(and)g -(returns)f Fq(NULL)p Fr(,)g(or)g(if)h(this)f(v)m(ariable)i(is)f(set)120 -1342 y(to)h Fq(NULL)p Fr(,)f(then)i Fq(rl_complete)e(\(\))h -Fr(will)i(call)g(the)e(v)m(alue)i(of)e Fq(rl_completion_entry_funct)o -(ion)120 1405 y Fr(to)g(generate)f(matc)o(hes,)h(otherwise)g(the)h -(arra)o(y)e(of)g(strings)h(returned)h(will)h(b)q(e)f(used.)1736 -1580 y(V)l(ariable)-1899 b Fi(CPFunction)21 b(*)e Fh(rl)p -368 1580 V 21 w(\014lename)p 597 1580 V 20 w(quoting)p -806 1580 V 21 w(function)120 1642 y Fr(A)e(p)q(oin)o(ter)h(to)f(a)g -(function)h(that)e(will)j(quote)e(a)g(\014lename)h(in)h(an)e -(application-)i(sp)q(eci\014c)g(fashion.)120 1705 y(This)f(is)g(called) -i(if)e(\014lename)h(completion)f(is)h(b)q(eing)f(attempted)g(and)f(one) -h(of)f(the)h(c)o(haracters)f(in)120 1767 y Fq -(rl_filename_quote_characte)o(rs)g Fr(app)q(ears)k(in)g(a)f(completed)h -(\014lename.)37 b(The)20 b(function)h(is)120 1829 y(called)14 -b(with)f Fl(text)p Fr(,)g Fl(matc)o(h)p 579 1829 14 2 -v 15 w(t)o(yp)q(e)p Fr(,)g(and)g Fl(quote)p 903 1829 -V 16 w(p)q(oin)o(ter)p Fr(.)20 b(The)13 b Fl(text)g Fr(is)g(the)g -(\014lename)h(to)e(b)q(e)h(quoted.)120 1891 y(The)21 -b Fl(matc)o(h)p 345 1891 V 16 w(t)o(yp)q(e)j Fr(is)e(either)f -Fq(SINGLE_MATCH)p Fr(,)g(if)h(there)f(is)h(only)f(one)h(completion)g -(matc)o(h,)f(or)120 1954 y Fq(MULT_MATCH)p Fr(.)d(Some)13 -b(functions)g(use)h(this)f(to)f(decide)j(whether)e(or)f(not)h(to)f -(insert)i(a)e(closing)i(quote)120 2016 y(c)o(haracter.)36 -b(The)21 b Fl(quote)p 565 2016 V 16 w(p)q(oin)o(ter)k -Fr(is)c(a)g(p)q(oin)o(ter)g(to)f(an)o(y)h(op)q(ening)h(quote)f(c)o -(haracter)f(the)h(user)120 2078 y(t)o(yp)q(ed.)f(Some)15 -b(functions)h(c)o(ho)q(ose)g(to)e(reset)h(this)h(c)o(haracter.)1736 -2254 y(V)l(ariable)-1899 b Fi(CPFunction)21 b(*)e Fh(rl)p -368 2254 18 3 v 21 w(\014lename)p 597 2254 V 20 w(dequoting)p -864 2254 V 21 w(function)120 2316 y Fr(A)f(p)q(oin)o(ter)g(to)f(a)g -(function)h(that)f(will)i(remo)o(v)o(e)e(application-sp)q(eci\014c)k -(quoting)d(c)o(haracters)f(from)120 2378 y(a)h(\014lename)i(b)q(efore)f -(completion)h(is)f(attempted,)g(so)f(those)h(c)o(haracters)f(do)g(not)h -(in)o(terfere)g(with)120 2440 y(matc)o(hing)13 b(the)g(text)f(against)g -(names)h(in)g(the)g(\014lesystem.)20 b(It)13 b(is)g(called)h(with)f -Fl(text)p Fr(,)g(the)f(text)h(of)f(the)120 2503 y(w)o(ord)i(to)g(b)q(e) -h(dequoted,)g(and)g Fl(quote)p 757 2503 14 2 v 16 w(c)o(har)p -Fr(,)f(whic)o(h)i(is)f(the)g(quoting)g(c)o(haracter)f(that)f(delimits)k -(the)120 2565 y(\014lename)d(\(usually)g(`)p Fq(')p Fr(')e(or)g(`)p -Fq(")p Fr('\).)18 b(If)13 b Fl(quote)p 838 2565 V 16 -w(c)o(har)j Fr(is)e(zero,)e(the)h(\014lename)h(w)o(as)e(not)h(in)h(an)f -(em)o(b)q(edded)120 2627 y(string.)p eop -38 39 bop 0 -58 a Fr(38)1449 b(GNU)15 b(Readline)i(Library)1736 -183 y(V)l(ariable)-1899 b Fi(Function)20 b(*)g Fh(rl)p -316 183 18 3 v 21 w(c)n(har)p 444 183 V 20 w(is)p 502 -183 V 22 w(quoted)p 695 183 V 20 w(p)120 246 y Fr(A)d(p)q(oin)o(ter)g -(to)f(a)g(function)i(to)e(call)h(that)f(determines)i(whether)f(or)f -(not)g(a)h(sp)q(eci\014c)h(c)o(haracter)e(in)120 308 -y(the)c(line)i(bu\013er)e(is)h(quoted,)f(according)h(to)e(whatev)o(er)h -(quoting)g(mec)o(hanism)h(the)f(program)f(calling)120 -370 y(readline)j(uses.)20 b(The)13 b(function)g(is)h(called)g(with)f(t) -o(w)o(o)f(argumen)o(ts:)17 b Fl(text)p Fr(,)c(the)g(text)f(of)g(the)h -(line,)i(and)120 432 y Fl(index)p Fr(,)j(the)e(index)i(of)e(the)g(c)o -(haracter)g(in)h(the)g(line.)25 b(It)16 b(is)h(used)g(to)f(decide)i -(whether)f(a)f(c)o(haracter)120 495 y(found)j(in)g Fq -(rl_completer_word_break_)o(charact)o(ers)c Fr(should)20 -b(b)q(e)e(used)h(to)f(break)g(w)o(ords)g(for)120 557 -y(the)d(completer.)1736 745 y(V)l(ariable)-1899 b Fi(int)20 -b Fh(rl)p 140 745 V 21 w(completion)p 435 745 V 21 w(query)p -598 745 V 21 w(items)120 807 y Fr(Up)h(to)e(this)i(man)o(y)f(items)h -(will)h(b)q(e)f(displa)o(y)o(ed)h(in)f(resp)q(onse)g(to)f(a)g(p)q -(ossible-completions)j(call.)120 869 y(After)16 b(that,)f(w)o(e)g(ask)h -(the)g(user)g(if)g(she)g(is)h(sure)f(she)g(w)o(an)o(ts)f(to)g(see)h -(them)g(all.)23 b(The)16 b(default)h(v)m(alue)120 932 -y(is)f(100.)1736 1120 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 1120 V 21 w(basic)p 355 1120 V 21 w(w)n(ord)p -500 1120 V 21 w(break)p 661 1120 V 20 w(c)n(haracters)120 -1182 y Fr(The)12 b(basic)g(list)h(of)e(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(the)h(completer)g -(routine.)120 1244 y(The)17 b(default)h(v)m(alue)g(of)e(this)i(v)m -(ariable)g(is)g(the)f(c)o(haracters)f(whic)o(h)h(break)g(w)o(ords)g -(for)f(completion)120 1306 y(in)g(Bash,)f(i.e.,)g Fq(")g -(\\t\\n\\"\\\\'`@$><=;|&{\(")p Fr(.)1736 1494 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 1494 V 21 w(basic)p 355 -1494 V 21 w(quote)p 515 1494 V 21 w(c)n(haracters)120 -1557 y Fr(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.)1736 1745 y(V)l(ariable)-1899 b -Fi(char)20 b(*)f Fh(rl)p 211 1745 V 21 w(completer)p -480 1745 V 21 w(w)n(ord)p 625 1745 V 20 w(break)p 785 -1745 V 20 w(c)n(haracters)120 1807 y Fr(The)f(list)h(of)e(c)o -(haracters)g(that)g(signal)i(a)f(break)f(b)q(et)o(w)o(een)h(w)o(ords)g -(for)f Fq(rl_complete_internal)120 1869 y(\(\))p Fr(.)j(The)15 -b(default)h(list)g(is)f(the)h(v)m(alue)g(of)f Fq -(rl_basic_word_break_charac)o(ters)p Fr(.)1736 2057 y(V)l(ariable)-1899 -b Fi(char)20 b(*)f Fh(rl)p 211 2057 V 21 w(completer)p -480 2057 V 21 w(quote)p 640 2057 V 21 w(c)n(haracters)120 -2120 y Fr(List)j(of)e(c)o(haracters)g(whic)o(h)i(can)f(b)q(e)h(used)f -(to)f(quote)h(a)g(substring)g(of)f(the)h(line.)39 b(Completion)120 -2182 y(o)q(ccurs)17 b(on)f(the)h(en)o(tire)g(substring,)g(and)f(within) -i(the)e(substring)h Fq(rl_completer_word_break_)120 2244 -y(characters)i Fr(are)g(treated)h(as)f(an)o(y)h(other)g(c)o(haracter,)g -(unless)h(they)f(also)g(app)q(ear)g(within)i(this)120 -2306 y(list.)1736 2494 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 2494 V 21 w(\014lename)p 440 2494 V -20 w(quote)p 599 2494 V 21 w(c)n(haracters)120 2557 y -Fr(A)g(list)h(of)e(c)o(haracters)g(that)g(cause)h(a)g(\014lename)h(to)e -(b)q(e)i(quoted)e(b)o(y)h(the)g(completer)h(when)f(they)120 -2619 y(app)q(ear)c(in)h(a)f(completed)h(\014lename.)21 -b(The)16 b(default)g(is)f(empt)o(y)l(.)p eop -39 40 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(39)1736 183 y(V)l(ariable)-1899 b Fi(char)20 -b(*)f Fh(rl)p 211 183 18 3 v 21 w(sp)r(ecial)p 398 183 -V 22 w(pre\014xes)120 246 y Fr(The)d(list)h(of)e(c)o(haracters)g(that)g -(are)h(w)o(ord)f(break)h(c)o(haracters,)f(but)h(should)h(b)q(e)f(left)g -(in)h Fl(text)f Fr(when)120 308 y(it)f(is)g(passed)g(to)f(the)g -(completion)i(function.)k(Programs)14 b(can)g(use)h(this)g(to)f(help)i -(determine)g(what)120 370 y(kind)h(of)f(completing)i(to)e(do.)23 -b(F)l(or)16 b(instance,)h(Bash)f(sets)g(this)h(v)m(ariable)h(to)e -Fq(")p Fr($)p Fq(@")f Fr(so)h(that)g(it)h(can)120 432 -y(complete)f(shell)h(v)m(ariables)f(and)g(hostnames.)1736 -587 y(V)l(ariable)-1899 b Fi(int)20 b Fh(rl)p 140 587 -V 21 w(completion)p 435 587 V 21 w(app)r(end)p 640 587 -V 19 w(c)n(haracter)120 650 y Fr(When)f(a)g(single)h(completion)g -(alternativ)o(e)f(matc)o(hes)g(at)f(the)h(end)g(of)g(the)g(command)f -(line,)k(this)120 712 y(c)o(haracter)12 b(is)i(app)q(ended)h(to)d(the)i -(inserted)g(completion)g(text.)19 b(The)13 b(default)h(is)f(a)g(space)h -(c)o(haracter)120 774 y(\(`)g('\).)21 b(Setting)c(this)f(to)f(the)h(n)o -(ull)h(c)o(haracter)e(\(`)p Fq(\\0)p Fr('\))f(prev)o(en)o(ts)i(an)o -(ything)g(b)q(eing)h(app)q(ended)g(auto-)120 836 y(matically)l(.)26 -b(This)17 b(can)g(b)q(e)g(c)o(hanged)g(in)g(custom)g(completion)h -(functions)f(to)f(pro)o(vide)h(the)g(\\most)120 899 y(sensible)i(w)o -(ord)d(separator)g(c)o(haracter")g(according)h(to)f(an)h -(application-sp)q(eci\014)q(c)j(command)c(line)120 961 -y(syn)o(tax)e(sp)q(eci\014cation.)1736 1116 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1116 V 21 w(ignore)p 316 1116 -V 20 w(completion)p 610 1116 V 21 w(duplicates)120 1178 -y Fr(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.)1736 1333 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1333 V 21 w(\014lename)p 369 -1333 V 20 w(completion)p 663 1333 V 21 w(desired)120 -1395 y Fr(Non-zero)e(means)g(that)f(the)g(results)i(of)e(the)h(matc)o -(hes)f(are)h(to)f(b)q(e)h(treated)f(as)h(\014lenames.)28 -b(This)120 1458 y(is)16 b Fl(alw)o(a)o(ys)h Fr(zero)e(on)g(en)o(try)l -(,)g(and)h(can)g(only)g(b)q(e)g(c)o(hanged)f(within)i(a)e(completion)i -(en)o(try)e(generator)120 1520 y(function.)26 b(If)18 -b(it)f(is)h(set)f(to)f(a)h(non-zero)g(v)m(alue,)i(directory)e(names)g -(ha)o(v)o(e)g(a)g(slash)g(app)q(ended)i(and)120 1582 -y(Readline)i(attempts)c(to)g(quote)h(completed)i(\014lenames)f(if)f -(they)h(con)o(tain)f(an)o(y)g(em)o(b)q(edded)i(w)o(ord)120 -1645 y(break)15 b(c)o(haracters.)1736 1800 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 1800 V 21 w(\014lename)p 369 -1800 V 20 w(quoting)p 578 1800 V 21 w(desired)120 1862 -y Fr(Non-zero)c(means)g(that)g(the)g(results)h(of)e(the)i(matc)o(hes)e -(are)h(to)g(b)q(e)h(quoted)f(using)h(double)g(quotes)120 -1924 y(\(or)d(an)h(application-sp)q(eci\014)q(c)j(quoting)d(mec)o -(hanism\))g(if)h(the)f(completed)h(\014lename)g(con)o(tains)f(an)o(y) -120 1986 y(c)o(haracters)i(in)h Fq(rl_filename_quote_chars)p -Fr(.)24 b(This)19 b(is)f Fl(alw)o(a)o(ys)h Fr(non-zero)f(on)f(en)o(try) -l(,)h(and)g(can)120 2049 y(only)d(b)q(e)g(c)o(hanged)f(within)i(a)e -(completion)h(en)o(try)f(generator)g(function.)20 b(The)14 -b(quoting)h(is)g(e\013ected)120 2111 y(via)g(a)g(call)i(to)d(the)i -(function)g(p)q(oin)o(ted)g(to)e(b)o(y)h Fq -(rl_filename_quoting_function)p Fr(.)1736 2266 y(V)l(ariable)-1899 -b Fi(int)20 b Fh(rl)p 140 2266 V 21 w(inhibit)p 324 2266 -V 23 w(completion)120 2328 y Fr(If)15 b(this)g(v)m(ariable)h(is)f -(non-zero,)g(completion)h(is)f(inhibit)p Fq(<)p Fr(ed.)22 -b(The)15 b(completion)h(c)o(haracter)e(will)i(b)q(e)120 -2390 y(inserted)g(as)f(an)o(y)g(other)g(b)q(ound)h(to)e -Fq(self-insert)p Fr(.)1736 2545 y(V)l(ariable)-1899 b -Fi(Function)20 b(*)g Fh(rl)p 316 2545 V 21 w(ignore)p -492 2545 V 20 w(some)p 639 2545 V 19 w(completions)p -955 2545 V 21 w(function)120 2608 y Fr(This)e(function,)g(if)g -(de\014ned,)h(is)f(called)h(b)o(y)e(the)h(completer)g(when)g(real)f -(\014lename)i(completion)f(is)120 2670 y(done,)13 b(after)e(all)i(the)g -(matc)o(hing)f(names)g(ha)o(v)o(e)g(b)q(een)h(generated.)19 -b(It)12 b(is)h(passed)f(a)g Fq(NULL)g Fr(terminated)p -eop -40 41 bop 0 -58 a Fr(40)1449 b(GNU)15 b(Readline)i(Library)120 -183 y(arra)o(y)f(of)h(matc)o(hes.)26 b(The)17 b(\014rst)g(elemen)o(t)h -(\()p Fq(matches[0])p Fr(\))e(is)h(the)h(maximal)g(substring)f(common) -120 246 y(to)f(all)h(matc)o(hes.)22 b(This)17 b(function)g(can)f -(re-arrange)g(the)g(list)h(of)f(matc)o(hes)g(as)f(required,)j(but)e -(eac)o(h)120 308 y(elemen)o(t)g(deleted)g(from)f(the)g(arra)o(y)f(m)o -(ust)h(b)q(e)h(freed.)1736 470 y(V)l(ariable)-1899 b -Fi(Function)20 b(*)g Fh(rl)p 316 470 18 3 v 21 w(directory)p -564 470 V 21 w(completion)p 859 470 V 21 w(ho)r(ok)120 -532 y Fr(This)15 b(function,)g(if)g(de\014ned,)h(is)f(allo)o(w)o(ed)g -(to)e(mo)q(dify)j(the)e(directory)h(p)q(ortion)g(of)f(\014lenames)h -(Read-)120 594 y(line)h(completes.)k(It)14 b(is)g(called)i(with)e(the)g -(address)g(of)g(a)g(string)g(\(the)g(curren)o(t)f(directory)i(name\))e -(as)120 656 y(an)f(argumen)o(t.)17 b(It)12 b(could)h(b)q(e)f(used)g(to) -f(expand)h(sym)o(b)q(olic)h(links)g(or)e(shell)i(v)m(ariables)g(in)f -(pathnames.)0 864 y Fk(2.5.4)30 b(A)15 b(Short)g(Completion)g(Example) -62 1001 y Fr(Here)20 b(is)h(a)e(small)i(application)g(demonstrating)f -(the)f(use)i(of)e(the)h(GNU)f(Readline)k(library)l(.)34 -b(It)20 b(is)g(called)0 1063 y Fq(fileman)p Fr(,)14 b(and)i(the)f -(source)g(co)q(de)h(resides)g(in)h(`)p Fq(examples/fileman.c)p -Fr(')o(.)h(This)e(sample)f(application)i(pro)o(vides)0 -1126 y(completion)f(of)f(command)g(names,)g(line)i(editing)f(features,) -f(and)g(access)g(to)g(the)g(history)g(list.)p eop -41 42 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(41)120 183 y Fq(/*)24 b(fileman.c)e(--)i(A)g(tiny)f -(application)f(which)h(demonstrates)g(how)g(to)h(use)f(the)192 -235 y(GNU)g(Readline)g(library.)46 b(This)24 b(application)e -(interactively)g(allows)h(users)192 287 y(to)g(manipulate)g(files)g -(and)g(their)g(modes.)h(*/)120 391 y(#include)f(<stdio.h>)120 -443 y(#include)g(<sys/types.h>)120 495 y(#include)g(<sys/file.h>)120 -546 y(#include)g(<sys/stat.h>)120 598 y(#include)g(<sys/errno.h>)120 -702 y(#include)g(<readline/readline.h>)120 754 y(#include)g -(<readline/history.h>)120 858 y(extern)g(char)g(*getwd)g(\(\);)120 -910 y(extern)g(char)g(*xmalloc)g(\(\);)120 1013 y(/*)h(The)f(names)g -(of)h(functions)e(that)i(actually)f(do)g(the)h(manipulation.)e(*/)120 -1065 y(int)h(com_list)g(\(\),)h(com_view)e(\(\),)i(com_rename)e(\(\),)i -(com_stat)f(\(\),)g(com_pwd)g(\(\);)120 1117 y(int)g(com_delete)g -(\(\),)g(com_help)g(\(\),)h(com_cd)f(\(\),)g(com_quit)g(\(\);)120 -1221 y(/*)h(A)f(structure)g(which)g(contains)g(information)f(on)i(the)f -(commands)g(this)g(program)192 1273 y(can)g(understand.)f(*/)120 -1377 y(typedef)h(struct)g({)168 1429 y(char)g(*name;)g(/*)h(User)f -(printable)g(name)g(of)h(the)f(function.)g(*/)168 1480 -y(Function)f(*func;)i(/*)f(Function)g(to)g(call)h(to)f(do)h(the)f(job.) -h(*/)168 1532 y(char)f(*doc;)g(/*)h(Documentation)e(for)h(this)h -(function.)46 b(*/)120 1584 y(})24 b(COMMAND;)120 1688 -y(COMMAND)f(commands[])f(=)i({)168 1740 y({)f("cd",)h(com_cd,)f -("Change)f(to)i(directory)f(DIR")g(},)168 1792 y({)g("delete",)g -(com_delete,)f("Delete)h(FILE")h(},)168 1844 y({)f("help",)g(com_help,) -g("Display)g(this)g(text")g(},)168 1896 y({)g("?",)h(com_help,)e -("Synonym)h(for)h(`help'")f(},)168 1947 y({)g("list",)g(com_list,)g -("List)g(files)g(in)h(DIR")f(},)168 1999 y({)g("ls",)h(com_list,)e -("Synonym)h(for)g(`list'")g(},)168 2051 y({)g("pwd",)g(com_pwd,)g -("Print)g(the)h(current)f(working)g(directory")f(},)168 -2103 y({)h("quit",)g(com_quit,)g("Quit)g(using)g(Fileman")g(},)168 -2155 y({)g("rename",)g(com_rename,)f("Rename)h(FILE)h(to)f(NEWNAME")g -(},)168 2207 y({)g("stat",)g(com_stat,)g("Print)g(out)g(statistics)g -(on)h(FILE")f(},)168 2259 y({)g("view",)g(com_view,)g("View)g(the)h -(contents)e(of)i(FILE")f(},)168 2311 y({)g(\(char)h(*\)NULL,)f -(\(Function)f(*\)NULL,)h(\(char)g(*\)NULL)g(})120 2363 -y(};)120 2466 y(/*)h(Forward)e(declarations.)h(*/)120 -2518 y(char)g(*stripwhite)g(\(\);)120 2570 y(COMMAND)g(*find_command)f -(\(\);)p eop -42 43 bop 0 -58 a Fr(42)1449 b(GNU)15 b(Readline)i(Library)120 -183 y Fq(/*)24 b(The)f(name)g(of)h(this)f(program,)g(as)h(taken)f(from) -g(argv[0].)g(*/)120 235 y(char)g(*progname;)120 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(*/)120 391 y(int)g(done;)120 495 y(char)g(*)120 -546 y(dupstr)g(\(s\))239 598 y(int)h(s;)120 650 y({)168 -702 y(char)f(*r;)168 806 y(r)g(=)h(xmalloc)f(\(strlen)g(\(s\))g(+)h -(1\);)168 858 y(strcpy)f(\(r,)g(s\);)168 910 y(return)g(\(r\);)120 -962 y(})120 1065 y(main)g(\(argc,)g(argv\))239 1117 y(int)h(argc;)239 -1169 y(char)g(**argv;)120 1221 y({)168 1273 y(char)f(*line,)g(*s;)168 -1377 y(progname)f(=)i(argv[0];)168 1480 y(initialize_readline)d(\(\);)i -(/*)h(Bind)f(our)h(completer.)e(*/)168 1584 y(/*)h(Loop)h(reading)f -(and)g(executing)g(lines)g(until)g(the)g(user)h(quits.)f(*/)168 -1636 y(for)g(\()h(;)g(done)f(==)h(0;)f(\))215 1688 y({)263 -1740 y(line)g(=)h(readline)f(\("FileMan:)f("\);)263 1844 -y(if)i(\(!line\))311 1896 y(break;)263 1999 y(/*)g(Remove)f(leading)g -(and)g(trailing)g(whitespace)f(from)i(the)f(line.)335 -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)335 2103 y(and)g(execute)g(it.)h(*/)263 -2155 y(s)g(=)g(stripwhite)e(\(line\);)263 2259 y(if)i(\(*s\))311 -2311 y({)359 2363 y(add_history)e(\(s\);)359 2414 y(execute_line)g -(\(s\);)311 2466 y(})263 2570 y(free)h(\(line\);)215 -2622 y(})p eop -43 44 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(43)168 183 y Fq(exit)23 b(\(0\);)120 -235 y(})120 339 y(/*)h(Execute)e(a)i(command)f(line.)g(*/)120 -391 y(int)120 443 y(execute_line)f(\(line\))239 495 y(char)i(*line;)120 -546 y({)168 598 y(register)e(int)i(i;)168 650 y(COMMAND)f(*command;)168 -702 y(char)g(*word;)168 806 y(/*)g(Isolate)g(the)h(command)f(word.)g -(*/)168 858 y(i)g(=)h(0;)168 910 y(while)f(\(line[i])g(&&)g(whitespace) -g(\(line[i]\)\))215 962 y(i++;)168 1013 y(word)g(=)h(line)f(+)h(i;)168 -1117 y(while)f(\(line[i])g(&&)g(!whitespace)g(\(line[i]\)\))215 -1169 y(i++;)168 1273 y(if)g(\(line[i]\))215 1325 y(line[i++])g(=)h -('\\0';)168 1429 y(command)f(=)g(find_command)g(\(word\);)168 -1532 y(if)g(\(!command\))215 1584 y({)263 1636 y(fprintf)g(\(stderr,)g -("\045s:)g(No)h(such)f(command)g(for)g(FileMan.\\n",)g(word\);)263 -1688 y(return)g(\(-1\);)215 1740 y(})168 1844 y(/*)g(Get)h(argument)f -(to)g(command,)g(if)g(any.)h(*/)168 1896 y(while)f(\(whitespace)f -(\(line[i]\)\))215 1947 y(i++;)168 2051 y(word)h(=)h(line)f(+)h(i;)168 -2155 y(/*)f(Call)h(the)f(function.)g(*/)168 2207 y(return)g -(\(\(*\(command->func\)\))e(\(word\)\);)120 2259 y(})120 -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)192 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(*/)120 2466 y(COMMAND)g(*)120 2518 y(find_command)f(\(name\)) -239 2570 y(char)i(*name;)120 2622 y({)p eop -44 45 bop 0 -58 a Fr(44)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(register)22 b(int)i(i;)168 287 y(for)f(\(i)h(=)f(0;)h -(commands[i].name;)e(i++\))215 339 y(if)i(\(strcmp)f(\(name,)g -(commands[i].name\))f(==)h(0\))263 391 y(return)g(\(&commands[i]\);)168 -495 y(return)g(\(\(COMMAND)f(*\)NULL\);)120 546 y(})120 -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)192 702 y(into)g(STRING.)g(*/)120 -754 y(char)g(*)120 806 y(stripwhite)f(\(string\))239 -858 y(char)i(*string;)120 910 y({)168 962 y(register)e(char)i(*s,)f -(*t;)168 1065 y(for)g(\(s)h(=)f(string;)g(whitespace)g(\(*s\);)g(s++\)) -215 1117 y(;)168 1221 y(if)g(\(*s)h(==)f(0\))215 1273 -y(return)g(\(s\);)168 1377 y(t)g(=)h(s)g(+)g(strlen)f(\(s\))g(-)h(1;) -168 1429 y(while)f(\(t)g(>)h(s)g(&&)g(whitespace)e(\(*t\)\))215 -1480 y(t--;)168 1532 y(*++t)h(=)h('\\0';)168 1636 y(return)f(s;)120 -1688 y(})120 1792 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)120 1844 y(/*)1575 -b(*/)120 1896 y(/*)429 b(Interface)23 b(to)g(Readline)g(Completion)381 -b(*/)120 1947 y(/*)1575 b(*/)120 1999 y(/*)24 b -(***********************)o(*******)o(********)o(*******)o(*******)o -(********)o(****)d(*/)120 2103 y(char)i(*command_generator)f(\(\);)120 -2155 y(char)h(**fileman_completion)e(\(\);)120 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)192 2311 y(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)192 2363 y(if)g(not.)g(*/)120 2414 y(initialize_readline)e -(\(\))120 2466 y({)168 2518 y(/*)i(Allow)g(conditional)g(parsing)g(of)g -(the)h(~/.inputrc)e(file.)h(*/)168 2570 y(rl_readline_name)e(=)j -("FileMan";)p eop -45 46 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(45)168 183 y Fq(/*)23 b(Tell)h(the)f(completer)g(that)g -(we)h(want)f(a)h(crack)f(first.)g(*/)168 235 y -(rl_attempted_completion_)o(functio)o(n)e(=)j(\(CPPFunction)e -(*\)fileman_completion;)120 287 y(})120 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)192 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)192 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)192 -546 y(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,)192 598 y(or)f(NULL)g(if)h -(there)f(aren't)g(any.)h(*/)120 650 y(char)f(**)120 702 -y(fileman_completion)e(\(text,)i(start,)g(end\))239 754 -y(char)h(*text;)239 806 y(int)g(start,)f(end;)120 858 -y({)168 910 y(char)g(**matches;)168 1013 y(matches)g(=)g(\(char)h -(**\)NULL;)168 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)239 -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)239 1221 y(directory.)f(*/)168 -1273 y(if)g(\(start)g(==)h(0\))215 1325 y(matches)f(=)h -(completion_matches)d(\(text,)j(command_generator\);)168 -1429 y(return)f(\(matches\);)120 1480 y(})120 1584 y(/*)h(Generator)e -(function)h(for)g(command)g(completion.)47 b(STATE)23 -b(lets)g(us)h(know)f(whether)192 1636 y(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)192 -1688 y(start)f(at)g(the)h(top)f(of)h(the)f(list.)g(*/)120 -1740 y(char)g(*)120 1792 y(command_generator)f(\(text,)h(state\))239 -1844 y(char)h(*text;)239 1896 y(int)g(state;)120 1947 -y({)168 1999 y(static)f(int)g(list_index,)g(len;)168 -2051 y(char)g(*name;)168 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)239 -2207 y(saving)f(the)h(length)f(of)g(TEXT)h(for)f(efficiency,)g(and)g -(initializing)f(the)i(index)239 2259 y(variable)f(to)h(0.)f(*/)168 -2311 y(if)g(\(!state\))215 2363 y({)263 2414 y(list_index)g(=)g(0;)263 -2466 y(len)h(=)f(strlen)g(\(text\);)215 2518 y(})168 -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 eop -46 47 bop 0 -58 a Fr(46)1449 b(GNU)15 b(Readline)i(Library)168 -183 y Fq(while)23 b(\(name)g(=)h(commands[list_index].name)o(\))215 -235 y({)263 287 y(list_index++;)263 391 y(if)g(\(strncmp)f(\(name,)g -(text,)g(len\))g(==)h(0\))311 443 y(return)f(\(dupstr\(name\)\);)215 -495 y(})168 598 y(/*)g(If)h(no)f(names)h(matched,)e(then)i(return)f -(NULL.)g(*/)168 650 y(return)g(\(\(char)g(*\)NULL\);)120 -702 y(})120 806 y(/*)h(***********************)o(*******)o(********)o -(*******)o(*******)o(********)o(****)d(*/)120 858 y(/*)1575 -b(*/)120 910 y(/*)549 b(FileMan)22 b(Commands)644 b(*/)120 -962 y(/*)1575 b(*/)120 1013 y(/*)24 b(***********************)o -(*******)o(********)o(*******)o(*******)o(********)o(****)d(*/)120 -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)192 -1169 y(commands.)f(*/)120 1221 y(static)h(char)g(syscom[1024];)120 -1325 y(/*)h(List)f(the)g(file\(s\))g(named)g(in)h(arg.)f(*/)120 -1377 y(com_list)g(\(arg\))239 1429 y(char)h(*arg;)120 -1480 y({)168 1532 y(if)f(\(!arg\))215 1584 y(arg)h(=)g("";)168 -1688 y(sprintf)f(\(syscom,)f("ls)i(-FClg)f(\045s",)g(arg\);)168 -1740 y(return)g(\(system)g(\(syscom\)\);)120 1792 y(})120 -1896 y(com_view)g(\(arg\))239 1947 y(char)h(*arg;)120 -1999 y({)168 2051 y(if)f(\(!valid_argument)f(\("view",)h(arg\)\))215 -2103 y(return)g(1;)168 2207 y(sprintf)g(\(syscom,)f("more)i(\045s",)f -(arg\);)168 2259 y(return)g(\(system)g(\(syscom\)\);)120 -2311 y(})120 2414 y(com_rename)f(\(arg\))239 2466 y(char)i(*arg;)120 -2518 y({)168 2570 y(too_dangerous)e(\("rename"\);)168 -2622 y(return)h(\(1\);)p eop -47 48 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(47)120 183 y Fq(})120 287 y(com_stat)23 -b(\(arg\))239 339 y(char)h(*arg;)120 391 y({)168 443 -y(struct)f(stat)g(finfo;)168 546 y(if)g(\(!valid_argument)f(\("stat",)h -(arg\)\))215 598 y(return)g(\(1\);)168 702 y(if)g(\(stat)g(\(arg,)h -(&finfo\))f(==)g(-1\))215 754 y({)263 806 y(perror)g(\(arg\);)263 -858 y(return)g(\(1\);)215 910 y(})168 1013 y(printf)g(\("Statistics)f -(for)h(`\045s':\\n",)g(arg\);)168 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,)359 1169 y(finfo.st_nlink,)359 1221 y(\(finfo.st_nlink)e(==)j -(1\))g(?)f("")h(:)g("s",)359 1273 y(finfo.st_size,)359 -1325 y(\(finfo.st_size)e(==)h(1\))h(?)f("")h(:)g("s"\);)168 -1377 y(printf)f(\("Inode)g(Last)g(Change)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_ctime\)\);)168 1429 y(printf)g(\(")143 b(Last)23 -b(access)g(at:)g(\045s",)h(ctime)f(\(&finfo.st_atime\)\);)168 -1480 y(printf)g(\(")95 b(Last)23 b(modified)g(at:)g(\045s",)h(ctime)f -(\(&finfo.st_mtime\)\);)168 1532 y(return)g(\(0\);)120 -1584 y(})120 1688 y(com_delete)f(\(arg\))239 1740 y(char)i(*arg;)120 -1792 y({)168 1844 y(too_dangerous)e(\("delete"\);)168 -1896 y(return)h(\(1\);)120 1947 y(})120 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)192 -2103 y(not)f(present.)g(*/)120 2155 y(com_help)g(\(arg\))239 -2207 y(char)h(*arg;)120 2259 y({)168 2311 y(register)e(int)i(i;)168 -2363 y(int)f(printed)g(=)h(0;)168 2466 y(for)f(\(i)h(=)f(0;)h -(commands[i].name;)e(i++\))215 2518 y({)263 2570 y(if)i(\(!*arg)f(||)g -(\(strcmp)g(\(arg,)g(commands[i].name\))f(==)i(0\)\))311 -2622 y({)p eop -48 49 bop 0 -58 a Fr(48)1449 b(GNU)15 b(Readline)i(Library)359 -183 y Fq(printf)23 b(\("\045s\\t\\t\045s.\\n",)e(commands[i].name,)h -(commands[i].doc\);)359 235 y(printed++;)311 287 y(})215 -339 y(})168 443 y(if)h(\(!printed\))215 495 y({)263 546 -y(printf)g(\("No)h(commands)e(match)h(`\045s'.)48 b(Possibilties)22 -b(are:\\n",)h(arg\);)263 650 y(for)h(\(i)f(=)h(0;)g(commands[i].name;)d -(i++\))311 702 y({)359 754 y(/*)i(Print)g(in)h(six)f(columns.)g(*/)359 -806 y(if)g(\(printed)g(==)h(6\))406 858 y({)454 910 y(printed)f(=)h(0;) -454 962 y(printf)f(\("\\n"\);)406 1013 y(})359 1117 y(printf)g -(\("\045s\\t",)f(commands[i].name\);)359 1169 y(printed++;)311 -1221 y(})263 1325 y(if)i(\(printed\))311 1377 y(printf)f(\("\\n"\);)215 -1429 y(})168 1480 y(return)g(\(0\);)120 1532 y(})120 -1636 y(/*)h(Change)f(to)g(the)h(directory)e(ARG.)i(*/)120 -1688 y(com_cd)f(\(arg\))239 1740 y(char)h(*arg;)120 1792 -y({)168 1844 y(if)f(\(chdir)g(\(arg\))h(==)f(-1\))215 -1896 y({)263 1947 y(perror)g(\(arg\);)263 1999 y(return)g(1;)215 -2051 y(})168 2155 y(com_pwd)g(\(""\);)168 2207 y(return)g(\(0\);)120 -2259 y(})120 2363 y(/*)h(Print)f(out)g(the)h(current)f(working)f -(directory.)h(*/)120 2414 y(com_pwd)g(\(ignore\))239 -2466 y(char)h(*ignore;)120 2518 y({)168 2570 y(char)f(dir[1024],)g(*s;) -p eop -49 50 bop 0 -58 a Fr(Chapter)15 b(2:)k(Programming)c(with)g(GNU)g -(Readline)994 b(49)168 183 y Fq(s)23 b(=)h(getwd)f(\(dir\);)168 -235 y(if)g(\(s)h(==)f(0\))215 287 y({)263 339 y(printf)g(\("Error)g -(getting)g(pwd:)g(\045s\\n",)g(dir\);)263 391 y(return)g(1;)215 -443 y(})168 546 y(printf)g(\("Current)f(directory)h(is)h(\045s\\n",)f -(dir\);)168 598 y(return)g(0;)120 650 y(})120 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(*/)120 806 y(com_quit)h(\(arg\))239 -858 y(char)h(*arg;)120 910 y({)168 962 y(done)f(=)h(1;)168 -1013 y(return)f(\(0\);)120 1065 y(})120 1169 y(/*)h(Function)e(which)i -(tells)f(you)g(that)g(you)h(can't)f(do)h(this.)f(*/)120 -1221 y(too_dangerous)f(\(caller\))239 1273 y(char)i(*caller;)120 -1325 y({)168 1377 y(fprintf)f(\(stderr,)382 1429 y("\045s:)h(Too)f -(dangerous)g(for)g(me)h(to)g(distribute.)46 b(Write)23 -b(it)h(yourself.\\n",)382 1480 y(caller\);)120 1532 y(})120 -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)192 1688 y(an)g(error)g(message)g(and)h -(return)f(zero.)g(*/)120 1740 y(int)120 1792 y(valid_argument)f -(\(caller,)h(arg\))239 1844 y(char)h(*caller,)e(*arg;)120 -1896 y({)168 1947 y(if)h(\(!arg)g(||)h(!*arg\))215 1999 -y({)263 2051 y(fprintf)f(\(stderr,)g("\045s:)g(Argument)g -(required.\\n",)f(caller\);)263 2103 y(return)h(\(0\);)215 -2155 y(})168 2259 y(return)g(\(1\);)120 2311 y(})p eop -50 51 bop 0 -58 a Fr(50)1449 b(GNU)15 b(Readline)i(Library)p -eop -51 52 bop 0 -58 a Fr(Concept)15 b(Index)1616 b(51)0 183 -y Fn(Concept)16 b(Index)0 430 y Fp(C)0 496 y Ff(command)e(editing)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)23 b Ff(2)0 604 y Fp(E)0 670 y Ff(editing)15 b(command)f(lines)d -Fe(.)6 b(.)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(.)22 -b Ff(2)0 778 y Fp(I)0 845 y Ff(initiali)q(zati)q(on)16 -b(\014le,)e(readline)d Fe(.)6 b(.)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(.)22 -b Ff(5)0 903 y(in)o(teraction,)15 b(readline)5 b Fe(.)j(.)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(.)17 b Ff(1)0 1011 -y Fp(K)0 1077 y Ff(kill)e(ring)5 b Fe(.)i(.)f(.)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(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)17 b Ff(3)1015 430 y(killin)q(g)f(text)t 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(.)h(.)f(.)g(.)g(.)g(.)17 b Ff(3)1015 579 y Fp(N)1015 -646 y Ff(notation,)e(readline)7 b Fe(.)h(.)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(.)h(.)f(.)g(.)20 b Ff(2)1015 795 -y Fp(R)1015 861 y Ff(readline,)15 b(function)8 b Fe(.)g(.)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(.)g(.)21 b Ff(19)1015 -1011 y Fp(Y)1015 1077 y Ff(y)o(anking)15 b(text)7 b Fe(.)g(.)f(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)20 b Ff(3)p eop -52 53 bop 0 -58 a Fr(52)1449 b(GNU)15 b(Readline)i(Library)p -eop -53 54 bop 0 -58 a Fr(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1337 -b(53)0 183 y Fn(F)-7 b(unction)15 b(and)g(V)-7 b(ariable)14 -b(Index)0 424 y Fp(\()0 490 y Fd(\(int)t Fe(.)5 b(.)h(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)17 b Ff(31)0 608 y Fp(A)0 674 -y Fd(abort)11 b(\(C-g\))c Fe(.)t(.)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(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)20 b Ff(17)0 -732 y Fd(accept-lin)o(e)10 b(\(Newline)o(,)g(Return\))5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)18 b Ff(12)0 790 y Fd(alphabetic)t Fe(.)s(.)7 -b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(31)0 908 y Fp(B)0 974 y Fd(backward-c)o(ha)o(r)10 -b(\(C-b\))c Fe(.)t(.)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(.)19 -b Ff(12)0 1032 y Fd(backward-d)o(el)o(ete)o(-c)o(har)9 -b(\(Rubout\))e Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)23 b Ff(14)0 1090 y Fd(backward-k)o(il)o(l-l)o(in)o -(e)10 b(\(C-x)h(Rubout\))d Fe(.)e(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(15)0 1148 y Fd(backward-k)o(il)o(l-w)o -(or)o(d)10 b(\(M-DEL\))5 b Fe(.)t(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(15)0 -1207 y Fd(backward-w)o(or)o(d)10 b(\(M-b\))c Fe(.)t(.)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(.)19 b Ff(12)0 1265 y Fd(beginning-)o(of)o(-hi)o -(st)o(ory)9 b(\(M-<\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(13)0 -1323 y Fd(beginning-)o(of)o(-li)o(ne)9 b(\(C-a\))g 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(.)22 b Ff(12)0 1381 y(b)q(ell-st)o(yle)s Fe(.)9 -b(.)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(5)0 1498 y Fp(C)0 -1565 y Fd(call-last-)o(kb)o(d-m)o(ac)o(ro)9 b(\(C-x)j(e\))7 -b Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)20 b Ff(17)0 1623 y Fd(capitalize)o(-w)o(ord)9 -b(\(M-c\))s Fe(.)t(.)d(.)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(.)16 -b Ff(14)0 1681 y Fd(character-)o(se)o(arc)o(h)10 b(\(C-]\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(17)0 1739 -y Fd(character-)o(se)o(arc)o(h-)o(bac)o(kwa)o(rd)9 b(\(M-C-]\))c -Fe(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(18)0 1797 y Fd(clear-scre)o(en)9 b(\(C-l\))e Fe(.)t(.)f(.)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(.)20 b Ff(12)0 1855 -y(commen)o(t-b)q(egin)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(5)0 1913 -y Fd(complete)10 b(\(TAB\))t Fe(.)s(.)c(.)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(.)16 b Ff(16)0 1972 y(completion-query-i) -q(tems)d Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 -b Ff(6)0 2030 y Fd(completion)p 201 2030 12 2 v 10 w(matches)6 -b Fe(.)t(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 -b Ff(36)0 2088 y(con)o(v)o(ert-meta)t Fe(.)6 b(.)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(.)16 -b Ff(6)0 2146 y Fd(copy-backw)o(ar)o(d-w)o(or)o(d)10 -b(\(\))s Fe(.)5 b(.)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(.)16 -b Ff(15)0 2204 y Fd(copy-forwa)o(rd)o(-wo)o(rd)9 b(\(\))t -Fe(.)d(.)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(.)17 b Ff(15)0 -2262 y Fd(copy-regio)o(n-)o(as-)o(ki)o(ll)9 b(\(\))h -Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(15)0 2379 -y Fp(D)0 2446 y Fd(delete-cha)o(r)10 b(\(C-d\))e Fe(.)t(.)e(.)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(.)21 b Ff(14)0 2504 -y Fd(delete-hor)o(iz)o(ont)o(al)o(-sp)o(ace)9 b(\(\))c -Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)g(.)18 b Ff(15)0 2562 y Fd(digit-argu)o(me)o(nt)9 -b(\(M-0,)i(M-1,)h(...)f(M--\))5 b Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)18 b Ff(16)0 2620 y Fd(digit)p 102 -2620 V 12 w(p)s 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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)16 -b Ff(32)0 2678 y Fd(digit)p 102 2678 V 12 w(value)7 b -Fe(.)t(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)20 b Ff(32)1015 424 y Fd(ding)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(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 b Ff(31)1015 -482 y(disable-compl)q(eti)q(on)9 b Fe(.)g(.)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(.)h(.)f(.)g(.)21 b Ff(6)1015 540 y -Fd(do-uppercas)o(e-)o(ver)o(sio)o(n)10 b(\(M-a,)g(M-b,)i(M-)p -Fe(x)p Fd(,)g Fc(:)6 b(:)g(:)g Fd(\))j Fe(.)c(.)h(.)g(.)g(.)g(.)22 -b Ff(17)1015 598 y Fd(downcase-wo)o(rd)9 b(\(M-l\))d -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(.)g(.)g(.)19 -b Ff(14)1015 656 y Fd(dump-functi)o(on)o(s)10 b(\(\))e -Fe(.)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(.)g(.)g(.)g(.)g(.)22 -b Ff(18)1015 715 y Fd(dump-macros)9 b(\(\))t Fe(.)c(.)h(.)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(.)17 b -Ff(18)1015 773 y Fd(dump-variab)o(le)o(s)10 b(\(\))e -Fe(.)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(.)g(.)g(.)g(.)g(.)22 -b Ff(18)1015 890 y Fp(E)1015 956 y Ff(editing-mo)q(de)t -Fe(.)9 b(.)d(.)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(.)17 b Ff(6)1015 1014 y(enable-k)o(eypad)d -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(.)g(.)g(.)24 b Ff(6)1015 1072 y Fd(end-kbd-mac)o(ro)9 -b(\(C-x)j(\)\))7 b Fe(.)t(.)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(.)g(.)20 -b Ff(16)1015 1131 y Fd(end-of-hist)o(or)o(y)10 b(\(M->\))t -Fe(.)t(.)d(.)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(13)1015 -1189 y Fd(end-of-line)9 b(\(C-e\))f Fe(.)t(.)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(.)22 b Ff(12)1015 1247 y Fd(exchange-po)o(in)o -(t-a)o(nd-)o(ma)o(rk)9 b(\(C-x)j(C-x\))c Fe(.)d(.)h(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)22 b Ff(17)1015 1305 y(expand-tilde)10 -b Fe(.)f(.)d(.)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(.)22 b Ff(6)1015 1422 y Fp(F)1015 -1488 y Fd(filename)p 1177 1488 V 12 w(completi)o(on)p -1388 1488 V 11 w(function)5 b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(36)1015 -1547 y Fd(forward-cha)o(r)10 b(\(C-f\))d 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(.)h(.)f(.)g(.)g(.)20 b Ff(12)1015 1605 y Fd(forward-sea)o(rc)o -(h-h)o(ist)o(or)o(y)10 b(\(C-s\))f Fe(.)d(.)g(.)g(.)g(.)h(.)f(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)25 b Ff(13)1015 -1663 y Fd(forward-wor)o(d)10 b(\(M-f\))d 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(.)h(.)f(.)g(.)g(.)20 b Ff(12)1015 1721 y Fd(free)p -1097 1721 V 13 w(undo)p 1190 1721 V 13 w(list)6 b Fe(.)t(.)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(.)19 -b Ff(29)1015 1838 y Fp(H)1015 1904 y Fd(history-sea)o(rc)o(h-b)o(ack)o -(wa)o(rd)9 b(\(\))c Fe(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 b Ff(13)1015 -1963 y Fd(history-sea)o(rc)o(h-f)o(orw)o(ar)o(d)10 b(\(\))d -Fe(.)e(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(13)1015 2021 y(horizon)o(tal-scrol)q(l)q -(-mo)q(de)t Fe(.)9 b(.)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(.)17 -b Ff(6)1015 2138 y Fp(I)1015 2204 y Ff(input-meta)s Fe(.)8 -b(.)e(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)16 b Ff(7)1015 2262 y Fd(insert-comm)o(en)o(t) -10 b(\(M-#\))t Fe(.)t(.)d(.)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(18)1015 2320 y Fd(insert-comp)o(le)o(tio)o(ns)9 -b(\(M-*\))f Fe(.)t(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)21 b Ff(16)1015 -2438 y Fp(K)1015 2504 y Ff(k)o(eymap)6 b Fe(.)h(.)f(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)19 b Ff(6)1015 2562 y Fd(kill-line)10 b(\(C-k\))f -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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)24 -b Ff(14)1015 2620 y Fd(kill-region)9 b(\(\))t Fe(.)c(.)h(.)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(.)17 -b Ff(15)1015 2678 y Fd(kill-whole-)o(li)o(ne)10 b(\(\))d -Fe(.)e(.)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(.)f(.)g(.)g(.)20 -b Ff(15)p eop -54 55 bop 0 -58 a Fr(54)1449 b(GNU)15 b(Readline)i(Library)0 -183 y Fd(kill-word)9 b(\(M-d\))g 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(.)24 b Ff(15)0 298 y Fp(L)0 -364 y Fd(lowercase)p 182 364 12 2 v 11 w(p)7 b Fe(.)e(.)h(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)20 -b Ff(32)0 479 y Fp(M)0 545 y Ff(mark-mo)q(di\014ed-lin)q(es)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(.)g(.)g(.)g(.)20 -b Ff(7)0 603 y(meta-\015ag)10 b Fe(.)c(.)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(.)g(.)g(.)g(.)g(.)22 -b Ff(7)0 718 y Fp(N)0 784 y Fd(next-histo)o(ry)9 b(\(C-n\))e -Fe(.)t(.)f(.)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(.)20 -b Ff(13)0 842 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\))82 900 y 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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)18 b Ff(13)0 958 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\))82 -1017 y 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(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(13)0 1075 y Fd(numeric)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(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(31)0 1189 y Fp(O)0 1256 y Ff(output-meta)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 -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -21 b Ff(7)0 1370 y Fp(P)0 1436 y Fd(possible-c)o(om)o(ple)o(ti)o(ons)9 -b(\(M-?\))c Fe(.)g(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)18 b Ff(16)0 1495 y Fd(prefix-met)o(a)10 -b(\(ESC\))e Fe(.)t(.)e(.)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(.) -21 b Ff(17)0 1553 y Fd(previous-h)o(is)o(tor)o(y)10 b(\(C-p\))e -Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(12)0 1667 -y Fp(Q)0 1734 y Fd(quoted-ins)o(er)o(t)10 b(\(C-q,)h(C-v\))e -Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(14)0 1848 y Fp(R)0 -1914 y Fd(re-read-in)o(it)o(-fi)o(le)9 b(\(C-x)i(C-r\))c -Fe(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)f(.)g(.)g(.)20 b Ff(17)0 1973 y Fd(readline)8 b Fe(.)s(.)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(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)21 b Ff(19)0 2031 y Fd(redraw-cur)o(re)o(nt-)o(li)o(ne)9 -b(\(\))h Fe(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)23 b Ff(12)0 -2089 y Fd(reverse-se)o(ar)o(ch-)o(hi)o(sto)o(ry)9 b(\(C-r\))h -Fe(.)c(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g -(.)g(.)24 b Ff(13)0 2147 y Fd(revert-lin)o(e)10 b(\(M-r\))e -Fe(.)t(.)e(.)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(.)21 -b Ff(17)0 2205 y Fd(rl)p 42 2205 V 13 w(add)p 115 2205 -V 13 w(defun)8 b Fe(.)d(.)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(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(25)0 2263 y Fd(rl)p -42 2263 V 13 w(add)p 115 2263 V 13 w(undo)8 b Fe(.)e(.)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(.)22 -b Ff(29)0 2321 y Fd(rl)p 42 2321 V 13 w(attempted)p 235 -2321 V 11 w(completion)p 445 2321 V 10 w(function)15 -b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 -b Ff(37)0 2379 y Fd(rl)p 42 2379 V 13 w(basic)p 155 2379 -V 13 w(quote)p 268 2379 V 12 w(character)o(s)e Fe(.)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 Ff(38)0 2438 y Fd(rl)p 42 2438 -V 13 w(basic)p 155 2438 V 13 w(word)p 248 2438 V 12 w(break)p -360 2438 V 12 w(characters)h Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(38)0 2496 y Fd(rl)p -42 2496 V 13 w(begin)p 155 2496 V 13 w(undo)p 248 2496 -V 12 w(group)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(.)h(.)f(.)g(.)23 -b Ff(28)0 2554 y Fd(rl)p 42 2554 V 13 w(bind)p 135 2554 -V 13 w(key)8 b Fe(.)e(.)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(.)22 b Ff(26)0 2612 y Fd(rl)p -42 2612 V 13 w(bind)p 135 2612 V 13 w(key)p 208 2612 -V 13 w(in)p 261 2612 V 13 w(map)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(.)19 b Ff(26)0 2670 y Fd(rl)p 42 -2670 V 13 w(binding)p 195 2670 V 12 w(keymap)14 b Fe(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 -b Ff(24)1015 183 y Fd(rl)p 1057 183 V 14 w(callback)p -1231 183 V 11 w(handler)p 1382 183 V 11 w(install)9 b -Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)22 b Ff(32)1015 241 y Fd(rl)p 1057 241 -V 14 w(callback)p 1231 241 V 11 w(handler)p 1382 241 -V 11 w(remove)8 b Fe(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Ff(33)1015 299 -y Fd(rl)p 1057 299 V 14 w(callback)p 1231 299 V 11 w(read)p -1322 299 V 12 w(char)8 b Fe(.)d(.)h(.)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(.)21 -b Ff(32)1015 358 y Fd(rl)p 1057 358 V 14 w(char)p 1151 -358 V 12 w(is)p 1203 358 V 14 w(quoted)p 1337 358 V 12 -w(p)e 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(.)g(.)h(.)f(.)g(.)g(.)g(.)20 -b Ff(37)1015 416 y Fd(rl)p 1057 416 V 14 w(clear)p 1171 -416 V 12 w(message)s 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(.)h(.)f(.)16 b Ff(30)1015 474 y Fd(rl)p 1057 -474 V 14 w(complete)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(.) -f(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(35,)13 b(36)1015 532 -y Fd(rl)p 1057 532 V 14 w(complete)p 1231 532 V 11 w(internal)6 -b Fe(.)s(.)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(.)20 b -Ff(35)1015 590 y Fd(rl)p 1057 590 V 14 w(completer)p -1250 590 V 10 w(quote)p 1361 590 V 13 w(character)o(s)e -Fe(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)22 b Ff(38)1015 648 y Fd(rl)p 1057 648 V 14 w(completer)p -1250 648 V 10 w(word)p 1341 648 V 13 w(break)p 1454 648 -V 12 w(characters)14 b Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)18 b Ff(38)1015 706 y Fd(rl)p 1057 706 V 14 w(completio)o(n)p -1270 706 V 11 w(append)p 1401 706 V 12 w(character)e -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -20 b Ff(39)1015 764 y Fd(rl)p 1057 764 V 14 w(completio)o(n)p -1270 764 V 11 w(entry)p 1381 764 V 12 w(function)14 b -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)18 -b Ff(35,)13 b(37)1015 823 y Fd(rl)p 1057 823 V 14 w(completio)o(n)p -1270 823 V 11 w(query)p 1381 823 V 12 w(items)j Fe(.)6 -b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)f(.)g(.)18 b Ff(38)1015 881 y Fd(rl)p 1057 -881 V 14 w(copy)p 1151 881 V 12 w(keymap)6 b Fe(.)t(.)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(.)19 b -Ff(25)1015 939 y Fd(rl)p 1057 939 V 14 w(copy)p 1151 -939 V 12 w(text)8 b Fe(.)d(.)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(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)21 b Ff(30)1015 997 y -Fd(rl)p 1057 997 V 14 w(delete)p 1191 997 V 12 w(text)6 -b Fe(.)t(.)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(.)19 b Ff(30)1015 1055 y Fd(rl)p 1057 1055 V 14 -w(directory)p 1250 1055 V 10 w(completion)p 1461 1055 -V 11 w(hook)i Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(40)1015 1113 y Fd(rl)p -1057 1113 V 14 w(discard)p 1211 1113 V 11 w(keymap)8 -b Fe(.)e(.)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(.)24 -b Ff(25)1015 1171 y Fd(rl)p 1057 1171 V 14 w(do)p 1111 -1171 V 13 w(undo)9 b Fe(.)d(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(29)1015 -1229 y Fd(rl)p 1057 1229 V 14 w(done)17 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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)19 b Ff(23)1015 1287 y Fd(rl)p 1057 1287 V 14 -w(end)f Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)20 b Ff(22)1015 -1346 y Fd(rl)p 1057 1346 V 14 w(end)p 1131 1346 V 13 -w(undo)p 1224 1346 V 12 w(group)5 b Fe(.)t(.)h(.)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(.)18 b Ff(29)1015 1404 y Fd(rl)p -1057 1404 V 14 w(event)p 1171 1404 V 12 w(hook)i Fe(.)6 -b(.)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(.) -22 b Ff(24)1015 1462 y Fd(rl)p 1057 1462 V 14 w(executing)p -1250 1462 V 10 w(keymap)f 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(.)g(.) -g(.)23 b Ff(24)1015 1520 y Fd(rl)p 1057 1520 V 14 w(filename)p -1231 1520 V 11 w(completio)o(n)p 1441 1520 V 11 w(desired)17 -b Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h -(.)20 b Ff(39)1015 1578 y Fd(rl)p 1057 1578 V 14 w(filename)p -1231 1578 V 11 w(dequoting)p 1421 1578 V 11 w(function)c -Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.) -20 b Ff(37)1015 1636 y Fd(rl)p 1057 1636 V 14 w(filename)p -1231 1636 V 11 w(quote)p 1342 1636 V 12 w(characters)f -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.) -g(.)g(.)23 b Ff(38)1015 1694 y Fd(rl)p 1057 1694 V 14 -w(filename)p 1231 1694 V 11 w(quoting)p 1382 1694 V 11 -w(desired)e Fe(.)7 b(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)24 b Ff(39)1015 1752 y Fd(rl)p -1057 1752 V 14 w(filename)p 1231 1752 V 11 w(quoting)p -1382 1752 V 11 w(function)c Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)23 b Ff(37)1015 1810 -y Fd(rl)p 1057 1810 V 14 w(forced)p 1191 1810 V 12 w(update)p -1323 1810 V 11 w(display)t Fe(.)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(.)17 -b Ff(30)1015 1869 y Fd(rl)p 1057 1869 V 14 w(function)p -1231 1869 V 11 w(dumper)9 b Fe(.)t(.)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(.) -h(.)f(.)g(.)22 b Ff(28)1015 1927 y Fd(rl)p 1057 1927 -V 14 w(function)p 1231 1927 V 11 w(of)p 1282 1927 V 13 -w(keyseq)8 b Fe(.)t(.)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(.)21 -b Ff(27)1015 1985 y Fd(rl)p 1057 1985 V 14 w(generic)p -1211 1985 V 11 w(bind)t Fe(.)5 b(.)h(.)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(.)18 b Ff(26)1015 2043 y Fd(rl)p -1057 2043 V 14 w(get)p 1131 2043 V 13 w(keymap)7 b Fe(.)t(.)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(.)20 -b Ff(25)1015 2101 y Fd(rl)p 1057 2101 V 14 w(get)p 1131 -2101 V 13 w(keymap)p 1264 2101 V 12 w(by)p 1316 2101 -V 13 w(name)9 b 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(.)24 -b Ff(26)1015 2159 y Fd(rl)p 1057 2159 V 14 w(get)p 1131 -2159 V 13 w(keymap)p 1264 2159 V 12 w(name)s Fe(.)t(.)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(.)17 -b Ff(26)1015 2217 y Fd(rl)p 1057 2217 V 14 w(getc)s Fe(.)5 -b(.)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(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(31)1015 2275 -y Fd(rl)p 1057 2275 V 14 w(getc)p 1151 2275 V 12 w(function)e -Fe(.)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(.)19 -b Ff(24)1015 2334 y Fd(rl)p 1057 2334 V 14 w(ignore)p -1191 2334 V 12 w(completio)o(n)p 1402 2334 V 11 w(duplicate)o(s)d -Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)19 -b Ff(39)1015 2392 y Fd(rl)p 1057 2392 V 14 w(ignore)p -1191 2392 V 12 w(some)p 1283 2392 V 12 w(completion)o(s)p -1514 2392 V 11 w(function)13 b Fe(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)17 b Ff(39)1015 2450 y Fd(rl)p 1057 2450 V -14 w(inhibit)p 1211 2450 V 11 w(completion)g Fe(.)6 b(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)21 b Ff(39)1015 2508 y Fd(rl)p 1057 2508 -V 14 w(initializ)o(e)t Fe(.)s(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)17 b Ff(31)1015 2566 -y Fd(rl)p 1057 2566 V 14 w(insert)p 1191 2566 V 12 w(completio)o(ns)t -Fe(.)t(.)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(.)19 b Ff(36)1015 -2624 y Fd(rl)p 1057 2624 V 14 w(insert)p 1191 2624 V -12 w(text)6 b Fe(.)t(.)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(.)19 b Ff(30)p eop -55 56 bop 0 -58 a Fr(F)l(unction)16 b(and)f(V)l(ariable)i(Index)1337 -b(55)0 183 y Fd(rl)p 42 183 12 2 v 13 w(instream)19 b -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(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)22 b Ff(23)0 241 y Fd(rl)p 42 241 V 13 -w(invoking)p 215 241 V 11 w(keyseqs)8 b Fe(.)t(.)e(.)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(.)21 b Ff(27)0 299 y Fd(rl)p 42 299 -V 13 w(invoking)p 215 299 V 11 w(keyseqs)p 366 299 V -12 w(in)p 418 299 V 13 w(map)t Fe(.)5 b(.)i(.)f(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)17 -b Ff(27)0 358 y Fd(rl)p 42 358 V 13 w(kill)p 135 358 -V 13 w(text)8 b Fe(.)d(.)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(.)g(.)h(.) -f(.)g(.)g(.)g(.)g(.)g(.)g(.)21 b Ff(30)0 416 y Fd(rl)p -42 416 V 13 w(library)p 195 416 V 12 w(version)g 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(.)g(.)24 b Ff(23)0 -474 y Fd(rl)p 42 474 V 13 w(line)p 135 474 V 13 w(buffer)18 -b Fe(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)21 b Ff(22)0 532 y Fd(rl)p 42 532 V 13 w(list)p 135 -532 V 13 w(funmap)p 268 532 V 12 w(names)7 b Fe(.)f(.)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 Ff(28)0 590 y Fd(rl)p 42 590 -V 13 w(make)p 135 590 V 13 w(bare)p 228 590 V 13 w(keymap)8 -b Fe(.)e(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)23 -b Ff(25)0 648 y Fd(rl)p 42 648 V 13 w(make)p 135 648 -V 13 w(keymap)6 b Fe(.)s(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)h(.)f(.)18 b Ff(25)0 706 y Fd(rl)p 42 -706 V 13 w(mark)f 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(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 -b Ff(22)0 764 y Fd(rl)p 42 764 V 13 w(message)8 b Fe(.)t(.)e(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -21 b Ff(30)0 823 y Fd(rl)p 42 823 V 13 w(modifying)5 -b Fe(.)s(.)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(.)g(.)g(.)g(.)g(.)g(.)h(.)f -(.)g(.)g(.)g(.)18 b Ff(29)0 881 y Fd(rl)p 42 881 V 13 -w(named)p 155 881 V 13 w(function)7 b Fe(.)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 -(.)h(.)f(.)g(.)g(.)g(.)g(.)23 b Ff(27)0 939 y Fd(rl)p -42 939 V 13 w(on)p 95 939 V 14 w(new)p 169 939 V 13 w(line)8 -b Fe(.)d(.)h(.)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(.)21 b Ff(30)0 997 y Fd(rl)p 42 997 V 13 w(outstream)c -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(.)20 b Ff(23)0 1055 y Fd(rl)p 42 1055 V 13 w(parse)p -155 1055 V 13 w(and)p 228 1055 V 13 w(bind)5 b Fe(.)t(.)h(.)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(.)17 b Ff(27)0 -1113 y Fd(rl)p 42 1113 V 13 w(pending)p 195 1113 V 12 -w(input)f Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)18 b Ff(23)0 1171 y Fd(rl)p 42 1171 V 13 w(point)d -Fe(.)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(.)h(.)f -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)17 b Ff(22)0 1229 y Fd(rl)p -42 1229 V 13 w(possible)p 215 1229 V 11 w(completions)7 -b Fe(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b Ff(36)0 1287 y Fd(rl)p -42 1287 V 13 w(prompt)e 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(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Ff(23)0 -1346 y Fd(rl)p 42 1346 V 13 w(read)p 135 1346 V 13 w(init)p -228 1346 V 13 w(file)5 b Fe(.)t(.)h(.)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(.)17 b Ff(27)0 1404 y Fd(rl)p 42 1404 V -13 w(read)p 135 1404 V 13 w(key)8 b Fe(.)e(.)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(.)22 -b Ff(31)0 1462 y Fd(rl)p 42 1462 V 13 w(readline)p 215 -1462 V 11 w(name)17 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(.)h(.)f(.)g(.)g(.) -g(.)g(.)g(.)g(.)18 b Ff(23)0 1520 y Fd(rl)p 42 1520 V -13 w(redisplay)5 b Fe(.)s(.)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(.)g(.)g(.) -g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Ff(29)0 1578 y Fd(rl)p -42 1578 V 13 w(redisplay)p 235 1578 V 11 w(function)f -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(.)20 b Ff(24)0 -1636 y Fd(rl)p 42 1636 V 13 w(reset)p 155 1636 V 13 w(line)p -248 1636 V 12 w(state)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(.)h(.)f -(.)g(.)23 b Ff(30)0 1694 y Fd(rl)p 42 1694 V 13 w(reset)p -155 1694 V 13 w(terminal)7 b Fe(.)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(.)h(.)f(.) -g(.)g(.)g(.)g(.)23 b Ff(31)0 1752 y Fd(rl)p 42 1752 V -13 w(set)p 115 1752 V 13 w(keymap)7 b Fe(.)t(.)f(.)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(.)20 b Ff(26)0 -1810 y Fd(rl)p 42 1810 V 13 w(special)p 195 1810 V 12 -w(prefixes)f 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(.)23 -b Ff(38)0 1869 y Fd(rl)p 42 1869 V 13 w(startup)p 195 -1869 V 12 w(hook)18 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(.)h(.)f(.)g(.)g(.)19 b Ff(23)0 1927 y Fd(rl)p 42 1927 -V 13 w(stuff)p 155 1927 V 13 w(char)7 b Fe(.)t(.)f(.)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(.)20 b -Ff(31)0 1985 y Fd(rl)p 42 1985 V 13 w(terminal)p 215 -1985 V 11 w(name)d Fe(.)6 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.) -g(.)g(.)g(.)18 b Ff(23)0 2043 y Fd(rl)p 42 2043 V 13 -w(unbind)p 175 2043 V 12 w(key)7 b Fe(.)e(.)h(.)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(.)20 b Ff(26)1015 -183 y Fd(rl)p 1057 183 V 14 w(unbind)p 1191 183 V 12 -w(key)p 1263 183 V 13 w(in)p 1316 183 V 13 w(map)t Fe(.)t(.)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(.)17 b Ff(26)1015 -291 y Fp(S)1015 358 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g -(...\))6 b Fe(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)h(.)19 b Ff(14)1015 416 y Fd(set-mark)10 b(\(C-@\))t -Fe(.)t(.)c(.)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(.)17 b Ff(17)1015 474 y(sho)o(w-all-if-am)o(bigu)q(ous)9 -b Fe(.)g(.)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(.)g(.)g(.)22 -b Ff(7)1015 532 y Fd(start-kbd-m)o(ac)o(ro)10 b(\(C-x)h(\(\))t -Fe(.)5 b(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)17 b Ff(16)1015 640 -y Fp(T)1015 706 y Fd(tab-insert)9 b(\(M-TAB\))e 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(.)h(.)f(.)g(.)g(.)20 b Ff(14)1015 764 y -Fd(tilde-expan)o(d)10 b(\(M-~\))d 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 -(.)h(.)f(.)g(.)g(.)20 b Ff(17)1015 823 y Fd(to)p 1057 -823 V 14 w(lower)8 b 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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)24 b -Ff(32)1015 881 y Fd(to)p 1057 881 V 14 w(upper)8 b 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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)24 b Ff(32)1015 939 y Fd(transpose-c)o(ha)o(rs)10 -b(\(C-t\))s Fe(.)t(.)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(.)16 -b Ff(14)1015 997 y Fd(transpose-w)o(or)o(ds)10 b(\(M-t\))s -Fe(.)t(.)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(.)16 b Ff(14)1015 -1105 y Fp(U)1015 1171 y Fd(undo)c(\(C-)p 1169 1171 V -13 w(,)g(C-x)g(C-u\))7 b Fe(.)t(.)f(.)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(.)20 b Ff(17)1015 1229 y Fd(universal-a)o(rg)o(ume)o(nt)9 -b(\(\))s 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(.)h(.)16 -b Ff(16)1015 1287 y Fd(unix-line-d)o(is)o(car)o(d)10 -b(\(C-u\))f Fe(.)t(.)d(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)22 b Ff(15)1015 -1346 y Fd(unix-word-r)o(ub)o(out)9 b(\(C-w\))g Fe(.)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(.)24 b Ff(15)1015 1404 y Fd(upcase-word)9 b(\(M-u\))f -Fe(.)t(.)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(.)22 -b Ff(14)1015 1462 y Fd(uppercase)p 1197 1462 V 11 w(p)7 -b Fe(.)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(.)20 b Ff(32)1015 1520 y Fd(username)p -1177 1520 V 12 w(completi)o(on)p 1388 1520 V 11 w(function)5 -b Fe(.)s(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.) -g(.)g(.)g(.)18 b Ff(36)1015 1628 y Fp(V)1015 1694 y Ff(visible-stats)6 -b Fe(.)j(.)d(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)h(.)18 b Ff(7)1015 1802 y Fp(Y)1015 -1869 y Fd(yank)12 b(\(C-y\))d Fe(.)t(.)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(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)22 -b Ff(15)1015 1927 y Fd(yank-last-a)o(rg)9 b(\(M-.,)i(M-)p -1436 1927 V 13 w(\))6 b Fe(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g -(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)19 -b Ff(13)1015 1985 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))t -Fe(.)s(.)d(.)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(13)1015 -2043 y Fd(yank-pop)10 b(\(M-y\))t Fe(.)t(.)c(.)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(.)17 b Ff(15)p eop -56 57 bop 0 -58 a Fr(56)1449 b(GNU)15 b(Readline)i(Library)p -eop --1 58 bop 1937 -58 a Fr(i)0 183 y Fn(T)-7 b(able)15 b(of)g(Con)n(ten)n -(ts)0 358 y Fp(1)67 b(Command)22 b(Line)i(Editing)18 -b Fb(.)10 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)38 b Fp(1)149 -435 y Fr(1.1)45 b(In)o(tro)q(duction)16 b(to)f(Line)h(Editing)d -Fa(.)8 b(.)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(.)27 b Fr(1)149 498 y(1.2)45 b(Readline)17 b(In)o(teraction)8 -b Fa(.)g(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)22 b Fr(1)299 -560 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(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)27 -b Fr(2)299 622 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(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fr(2)299 684 -y(1.2.3)44 b(Readline)17 b(Killing)h(Commands)10 b Fa(.)e(.)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(.)25 b Fr(3)299 747 y(1.2.4)44 -b(Readline)17 b(Argumen)o(ts)12 b 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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)27 b Fr(4)299 809 -y(1.2.5)44 b(Searc)o(hing)16 b(for)e(Commands)h(in)h(the)f(History)e -Fa(.)7 b(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -27 b Fr(4)149 871 y(1.3)45 b(Readline)17 b(Init)g(File)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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)28 b Fr(5)299 -934 y(1.3.1)44 b(Readline)17 b(Init)f(File)h(Syn)o(tax)6 -b Fa(.)h(.)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(.)21 -b Fr(5)299 996 y(1.3.2)44 b(Conditional)16 b(Init)g(Constructs)t -Fa(.)7 b(.)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 -Fr(8)299 1058 y(1.3.3)44 b(Sample)16 b(Init)g(File)11 -b Fa(.)e(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)25 b Fr(9)149 1120 y(1.4)45 b(Bindable)17 -b(Readline)h(Commands)6 b Fa(.)h(.)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(.)g(.)f(.)h(.)f(.)21 b Fr(12)299 1183 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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)f(.)h(.)f(.)h(.)28 b Fr(12)299 1245 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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)24 -b Fr(12)299 1307 y(1.4.3)44 b(Commands)14 b(F)l(or)h(Changing)h(T)l -(ext)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(.)29 b Fr(13)299 1369 -y(1.4.4)44 b(Killing)18 b(And)e(Y)l(anking)8 b Fa(.)g(.)g(.)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(.)23 b Fr(14)299 -1432 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(.)f(.)h(.)f(.)h -(.)f(.)h(.)f(.)h(.)f(.)h(.)27 b Fr(15)299 1494 y(1.4.6)44 -b(Letting)15 b(Readline)j(T)o(yp)q(e)d(F)l(or)g(Y)l(ou)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(.)25 b Fr(16)299 1556 y(1.4.7)44 -b(Keyb)q(oard)15 b(Macros)5 b Fa(.)i(.)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(.)f(.)21 b Fr(16)299 -1618 y(1.4.8)44 b(Some)15 b(Miscellaneous)i(Commands)6 -b Fa(.)h(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.) -h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 b Fr(17)149 1681 y(1.5)45 -b(Readline)17 b(vi)f(Mo)q(de)d 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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h -(.)28 b Fr(18)0 1805 y Fp(2)67 b(Programming)23 b(with)g(GNU)f -(Readline)d Fb(.)10 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g -(.)g(.)41 b Fp(19)149 1883 y Fr(2.1)k(Basic)16 b(Beha)o(vior)7 -b Fa(.)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(.)h(.)f(.)h(.)f(.)h(.)g(.)f(.)h(.)f(.)h(.)22 -b Fr(19)149 1945 y(2.2)45 b(Custom)14 b(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(.)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(.)22 b Fr(21)299 -2008 y(2.2.1)44 b(The)15 b(F)l(unction)h(T)o(yp)q(e)10 -b Fa(.)e(.)g(.)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 -(.)26 b Fr(21)299 2070 y(2.2.2)44 b(W)l(riting)16 b(a)e(New)i(F)l -(unction)5 b Fa(.)k(.)e(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)21 -b Fr(22)149 2132 y(2.3)45 b(Readline)17 b(V)l(ariables)f -Fa(.)7 b(.)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(.)h(.)f(.)h(.)f(.)h(.)29 b Fr(22)149 -2194 y(2.4)45 b(Readline)17 b(Con)o(v)o(enience)g(F)l(unctions)7 -b Fa(.)h(.)g(.)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(.)22 -b Fr(24)299 2257 y(2.4.1)44 b(Naming)15 b(a)g(F)l(unction)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(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)27 b Fr(24)299 2319 y(2.4.2)44 b(Selecting)17 b(a)e(Keymap)6 -b Fa(.)h(.)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 -(.)21 b Fr(25)299 2381 y(2.4.3)44 b(Binding)17 b(Keys)t -Fa(.)8 b(.)g(.)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 -(.)h(.)f(.)h(.)f(.)h(.)f(.)20 b Fr(26)299 2444 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(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)23 -b Fr(27)299 2506 y(2.4.5)44 b(Allo)o(wing)16 b(Undoing)f -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(.)f(.)h(.)f(.)h(.)f(.)h(.)f -(.)h(.)29 b Fr(28)299 2568 y(2.4.6)44 b(Redispla)o(y)10 -b Fa(.)f(.)f(.)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(.)h(.)25 b Fr(29)299 -2630 y(2.4.7)44 b(Mo)q(difying)16 b(T)l(ext)6 b Fa(.)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(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)21 -b Fr(30)p eop --2 59 bop 0 -58 a Fr(ii)1471 b(GNU)15 b(Readline)i(Library)299 -42 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(.)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(.)28 b Fr(31)299 104 y(2.4.9)44 b(Alternate)15 b(In)o(terface)t -Fa(.)8 b(.)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(.)g(.)f(.)h(.)f(.)h(.)f -(.)h(.)19 b Fr(32)299 166 y(2.4.10)43 b(An)16 b(Example)f -Fa(.)7 b(.)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(.)h(.)29 b Fr(33)149 228 y(2.5)45 b(Custom)14 -b(Completers)f Fa(.)7 b(.)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(.)f(.)h(.)f(.)h(.)g(.)27 b -Fr(34)299 291 y(2.5.1)44 b(Ho)o(w)14 b(Completing)i(W)l(orks)9 -b Fa(.)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(.)25 -b Fr(34)299 353 y(2.5.2)44 b(Completion)16 b(F)l(unctions)6 -b Fa(.)i(.)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(.)21 -b Fr(35)299 415 y(2.5.3)44 b(Completion)16 b(V)l(ariables)11 -b Fa(.)e(.)e(.)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 Fr(37)299 477 y(2.5.4)44 b(A)15 b(Short)g(Completion)h(Example)t -Fa(.)8 b(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.)f(.)h(.) -f(.)h(.)g(.)f(.)h(.)f(.)h(.)f(.)h(.)19 b Fr(40)0 602 -y Fp(Concept)j(Index)11 b Fb(.)g(.)f(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) -g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)34 b Fp(51)0 -742 y(F)-6 b(unction)25 b(and)d(V)-6 b(ariable)24 b(Index)17 -b Fb(.)10 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h -(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)38 b Fp(53)p eop end -userdict /end-hook known{end-hook}if