commit bash-20051123 snapshot bash-3.1-rc2
authorChet Ramey <chet.ramey@case.edu>
Sat, 3 Dec 2011 18:53:34 +0000 (13:53 -0500)
committerChet Ramey <chet.ramey@case.edu>
Sat, 3 Dec 2011 18:53:34 +0000 (13:53 -0500)
35 files changed:
CHANGES
CWRU/CWRU.chlog
CWRU/CWRU.chlog~
NEWS
autom4te.cache/output.0
autom4te.cache/requests
autom4te.cache/traces.0
builtins/pushd.def
configure
configure.in
doc/FAQ-3.1 [new file with mode: 0644]
doc/FAQ-3.1~ [new file with mode: 0644]
lib/readline/display.c
lib/readline/display.c.orig
lib/readline/display.c.save [new file with mode: 0644]
lib/readline/display.c~
lib/readline/doc/history.dvi
lib/readline/doc/history.html
lib/readline/doc/history.info
lib/readline/doc/history.log
lib/readline/doc/history.ps
lib/readline/doc/readline.dvi
lib/readline/doc/readline.html
lib/readline/doc/readline.info
lib/readline/doc/readline.ps
lib/readline/doc/rlman.fn
lib/readline/doc/rlman.fns
lib/readline/doc/rlman.log
lib/readline/doc/rltech.texi
lib/readline/doc/rluserman.dvi
lib/readline/doc/rluserman.html
lib/readline/doc/rluserman.info
lib/readline/doc/rluserman.log
lib/readline/doc/rluserman.ps
pcomplete.c

diff --git a/CHANGES b/CHANGES
index ff4ea84..bd1e6a5 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,39 @@
+This document details the changes between this version, bash-3.1-rc2,
+and the previous version, bash-3.1-rc1.
+
+1.  Changes to Bash
+
+a.  Fixed a bug that caused a DEBUG trap to overwrite a command string that's
+    eventually attached to a background job.
+
+b.  Changed some code so that filenames with leading tildes with spaces in the
+    name aren't tilde-expanded by the bash completion code.
+
+c.  Fixed a bug that caused the pushd builtin to fail to change to
+    directories with leading `-'.
+
+d.  Fixed a small memory leak in the programmable completion code.
+
+2.  Changes to Readline
+
+a.  Fixed a redisplay bug caused by moving the cursor vertically to a line
+    with invisible characters in the prompt in a multibyte locale.
+
+b.  Fixed a bug that could cause the terminal special chars to be bound in the
+    wrong keymap in vi mode.
+
+3.  New Features in Bash
+
+a.  If compiled for strict POSIX conformance, LINES and COLUMNS may now
+    override the true terminal size.
+
+4.  New Features in Readline
+
+a.  A new external application-controllable variable that allows the LINES
+    and COLUMNS environment variables to set the window size regardless of
+    what the kernel returns.
+
+------------------------------------------------------------------------------
 This document details the changes between this version, bash-3.1-rc1,
 and the previous version, bash-3.1-beta1.
 
index 87c7e22..371731a 100644 (file)
@@ -12430,3 +12430,27 @@ lib/readline/rltty.c
          special characters in the vi insertion keymap if in vi mode.  This
          matters if we get accept-line for the previous line while in vi
          command mode
+
+                                  11/14
+                                  -----
+builtins/pushd.def
+       - make sure any call to cd_builtin includes a leading `--' from the
+         argument list (or constructs one)
+
+                                  11/16
+                                  -----
+pcomplete.c
+       - fix small memory leak in gen_wordlist_matches
+
+[bash-3.1-rc2 frozen]
+
+                                  11/23
+                                  -----
+lib/readline/display.c
+       - changes to rl_redisplay to compensate for update_line updating
+         _rl_last_c_pos without taking invisible characters in the line into
+         account.  Important in multibyte locales where _rl_last_c_pos is an
+         absolute cursor position
+       - changes to _rl_move_cursor_relative to account for _rl_last_c_pos
+         being an absolute cursor position in a multibyte character locale
+       - rewrote _rl_move_cursor_relative to make it a little simpler
index f9e51d9..58bd180 100644 (file)
@@ -12422,3 +12422,24 @@ lib/readline/readline.h
 
 lib/readline/doc/rltech.texi
        - document rl_prefer_env_winsize
+
+                                  11/13
+                                  -----
+lib/readline/rltty.c
+       - change rl_prep_terminal to make sure we set and reset the tty
+         special characters in the vi insertion keymap if in vi mode.  This
+         matters if we get accept-line for the previous line while in vi
+         command mode
+
+                                  11/14
+                                  -----
+builtins/pushd.def
+       - make sure any call to cd_builtin includes a leading `--' from the
+         argument list (or constructs one)
+
+                                  11/16
+                                  -----
+pcomplete.c
+       - fix small memory leak in gen_wordlist_matches
+
+[bash-3.1-rc2 frozen]
diff --git a/NEWS b/NEWS
index e1c1135..977d9a3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -62,6 +62,9 @@ s.  Bash now sets the extern variable `environ' to the export environment it
 t.  A new configuration option, `--enable-strict-posix-default', which will
     build bash to be POSIX conforming by default.
 
+u.  If compiled for strict POSIX conformance, LINES and COLUMNS may now
+    override the true terminal size.
+
 2.  New Features in Readline
 
 a.  The key sequence sent by the keypad `delete' key is now automatically
@@ -78,6 +81,10 @@ d.  New bindable command: vi-rubout.  Saves deleted text for possible
     reinsertion, as with any vi-mode `text modification' command; `X' is bound
     to this in vi command mode.
 
+e.  A new external application-controllable variable that allows the LINES
+    and COLUMNS environment variables to set the window size regardless of
+    what the kernel returns: rl_prefer_env_winsize
+
 -------------------------------------------------------------------------------
 This is a terse description of the new features added to bash-3.0 since
 the release of bash-2.05b.  As always, the manual page (doc/bash.1) is
index 1ca09bd..f5ccff2 100644 (file)
@@ -1,7 +1,7 @@
 @%:@! /bin/sh
-@%:@ From configure.in for Bash 3.1, version 3.180.
+@%:@ From configure.in for Bash 3.1, version 3.182.
 @%:@ Guess values for system-dependent variables and create Makefiles.
-@%:@ Generated by GNU Autoconf 2.59 for bash 3.1-rc1.
+@%:@ Generated by GNU Autoconf 2.59 for bash 3.1-rc2.
 @%:@
 @%:@ Report bugs to <bug-bash@gnu.org>.
 @%:@ 
@@ -270,8 +270,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='3.1-rc1'
-PACKAGE_STRING='bash 3.1-rc1'
+PACKAGE_VERSION='3.1-rc2'
+PACKAGE_STRING='bash 3.1-rc2'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 
 ac_unique_file="shell.h"
@@ -785,7 +785,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 3.1-rc1 to adapt to many kinds of systems.
+\`configure' configures bash 3.1-rc2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -846,7 +846,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 3.1-rc1:";;
+     short | recursive ) echo "Configuration of bash 3.1-rc2:";;
    esac
   cat <<\_ACEOF
 
@@ -1039,7 +1039,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 3.1-rc1
+bash configure 3.1-rc2
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1053,7 +1053,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 3.1-rc1, which was
+It was created by bash $as_me 3.1-rc2, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -1422,7 +1422,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
 
 BASHVERS=3.1
-RELSTATUS=rc1
+RELSTATUS=rc2
 
 case "$RELSTATUS" in
 alp*|bet*|dev*|rc*)    DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -27212,7 +27212,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by bash $as_me 3.1-rc1, which was
+This file was extended by bash $as_me 3.1-rc2, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27275,7 +27275,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-bash config.status 3.1-rc1
+bash config.status 3.1-rc2
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
index baa7f90..84e4075 100644 (file)
                       {
                         'm4_pattern_forbid' => 1,
                         'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AC_TYPE_OFF_T' => 1,
                         'AC_C_VOLATILE' => 1,
+                        'AC_TYPE_OFF_T' => 1,
                         'AC_FUNC_CLOSEDIR_VOID' => 1,
                         'AC_REPLACE_FNMATCH' => 1,
                         'AC_PROG_LIBTOOL' => 1,
                         'AC_FUNC_STAT' => 1,
-                        'AC_FUNC_WAIT3' => 1,
                         'AC_HEADER_TIME' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'AC_STRUCT_TM' => 1,
+                        'AC_FUNC_WAIT3' => 1,
                         'AC_FUNC_LSTAT' => 1,
-                        'AC_FUNC_GETMNTENT' => 1,
+                        'AC_STRUCT_TM' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
                         'AC_TYPE_MODE_T' => 1,
+                        'AC_FUNC_GETMNTENT' => 1,
                         'AC_FUNC_STRTOD' => 1,
                         'AC_CHECK_HEADERS' => 1,
                         'AC_FUNC_STRNLEN' => 1,
                         'AC_STRUCT_ST_BLOCKS' => 1,
                         'AC_TYPE_SIGNAL' => 1,
                         'AC_TYPE_UID_T' => 1,
-                        'AC_PROG_MAKE_SET' => 1,
                         'AC_CONFIG_AUX_DIR' => 1,
-                        'm4_pattern_allow' => 1,
+                        'AC_PROG_MAKE_SET' => 1,
                         'sinclude' => 1,
+                        'm4_pattern_allow' => 1,
                         'AC_DEFINE_TRACE_LITERAL' => 1,
                         'AC_FUNC_STRERROR_R' => 1,
                         'AC_PROG_CC' => 1,
-                        'AC_DECL_SYS_SIGLIST' => 1,
                         'AC_FUNC_FORK' => 1,
-                        'AC_FUNC_STRCOLL' => 1,
+                        'AC_DECL_SYS_SIGLIST' => 1,
                         'AC_FUNC_VPRINTF' => 1,
+                        'AC_FUNC_STRCOLL' => 1,
                         'AC_PROG_YACC' => 1,
                         'AC_INIT' => 1,
                         'AC_STRUCT_TIMEZONE' => 1,
                         'AM_MAINTAINER_MODE' => 1,
                         'AC_FUNC_UTIME_NULL' => 1,
                         'AC_FUNC_SELECT_ARGTYPES' => 1,
-                        'AC_HEADER_STAT' => 1,
                         'AC_FUNC_STRFTIME' => 1,
-                        'AC_C_INLINE' => 1,
+                        'AC_HEADER_STAT' => 1,
                         'AC_PROG_CPP' => 1,
-                        'AC_C_CONST' => 1,
-                        'AC_PROG_LEX' => 1,
+                        'AC_C_INLINE' => 1,
                         'AC_TYPE_PID_T' => 1,
+                        'AC_PROG_LEX' => 1,
+                        'AC_C_CONST' => 1,
                         'AC_CONFIG_FILES' => 1,
                         'include' => 1,
                         'AC_FUNC_SETVBUF_REVERSED' => 1,
                         'AC_PROG_INSTALL' => 1,
                         'AM_GNU_GETTEXT' => 1,
-                        'AC_FUNC_OBSTACK' => 1,
                         'AC_CHECK_LIB' => 1,
+                        'AC_FUNC_OBSTACK' => 1,
                         'AC_FUNC_MALLOC' => 1,
                         'AC_FUNC_GETGROUPS' => 1,
                         'AC_FUNC_GETLOADAVG' => 1,
                         'AH_OUTPUT' => 1,
                         'AC_FUNC_FSEEKO' => 1,
                         'AM_PROG_CC_C_O' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
                         'AC_FUNC_MKTIME' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AM_CONDITIONAL' => 1,
                         'AC_CONFIG_HEADERS' => 1,
                         'AC_HEADER_SYS_WAIT' => 1,
-                        'AC_PROG_LN_S' => 1,
                         'AC_FUNC_MEMCMP' => 1,
+                        'AC_PROG_LN_S' => 1,
                         'm4_include' => 1,
                         'AC_HEADER_DIRENT' => 1,
                         'AC_CHECK_FUNCS' => 1
index af2442c..09dcbbb 100644 (file)
@@ -1,4 +1,4 @@
-m4trace:configure.in:30: -1- AC_INIT([bash], [3.1-rc1], [bug-bash@gnu.org])
+m4trace:configure.in:30: -1- AC_INIT([bash], [3.1-rc2], [bug-bash@gnu.org])
 m4trace:configure.in:30: -1- m4_pattern_forbid([^_?A[CHUM]_])
 m4trace:configure.in:30: -1- m4_pattern_forbid([_AC_])
 m4trace:configure.in:30: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS'])
index e7ab45d..0978fc9 100644 (file)
@@ -151,11 +151,13 @@ int
 pushd_builtin (list)
      WORD_LIST *list;
 {
+  WORD_LIST *orig_list;
   char *temp, *current_directory, *top;
   int j, flags, skipopt;
   intmax_t num;
   char direction;
 
+  orig_list = list;
   if (list && list->word && ISOPTION (list->word->word, '-'))
     {
       list = list->next;
@@ -270,7 +272,7 @@ pushd_builtin (list)
   if (current_directory == 0)
     return (EXECUTION_FAILURE);
 
-  j = ((flags & NOCD) == 0) ? cd_builtin (list) : EXECUTION_SUCCESS;
+  j = ((flags & NOCD) == 0) ? cd_builtin (skipopt ? orig_list : list) : EXECUTION_SUCCESS;
   if (j == EXECUTION_SUCCESS)
     {
       add_dirstack_element ((flags & NOCD) ? savestring (list->word->word) : current_directory);
@@ -504,9 +506,11 @@ cd_to_string (name)
      char *name;
 {
   WORD_LIST *tlist;
+  WORD_LIST *dir;
   int result;
 
-  tlist = make_word_list (make_word (name), NULL);
+  dir = make_word_list (make_word (name), NULL);
+  tlist = make_word_list (make_word ("--"), dir);
   result = cd_builtin (tlist);
   dispose_words (tlist);
   return (result);
index 66e7be4..27587f0 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
 #! /bin/sh
-# From configure.in for Bash 3.1, version 3.180.
+# From configure.in for Bash 3.1, version 3.182.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for bash 3.1-rc1.
+# Generated by GNU Autoconf 2.59 for bash 3.1-rc2.
 #
 # Report bugs to <bug-bash@gnu.org>.
 #
@@ -270,8 +270,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
 # Identity of this package.
 PACKAGE_NAME='bash'
 PACKAGE_TARNAME='bash'
-PACKAGE_VERSION='3.1-rc1'
-PACKAGE_STRING='bash 3.1-rc1'
+PACKAGE_VERSION='3.1-rc2'
+PACKAGE_STRING='bash 3.1-rc2'
 PACKAGE_BUGREPORT='bug-bash@gnu.org'
 
 ac_unique_file="shell.h"
@@ -785,7 +785,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures bash 3.1-rc1 to adapt to many kinds of systems.
+\`configure' configures bash 3.1-rc2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -846,7 +846,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of bash 3.1-rc1:";;
+     short | recursive ) echo "Configuration of bash 3.1-rc2:";;
    esac
   cat <<\_ACEOF
 
@@ -1039,7 +1039,7 @@ fi
 test -n "$ac_init_help" && exit 0
 if $ac_init_version; then
   cat <<\_ACEOF
-bash configure 3.1-rc1
+bash configure 3.1-rc2
 generated by GNU Autoconf 2.59
 
 Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1053,7 +1053,7 @@ cat >&5 <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by bash $as_me 3.1-rc1, which was
+It was created by bash $as_me 3.1-rc2, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   $ $0 $@
@@ -1422,7 +1422,7 @@ ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
 
 
 BASHVERS=3.1
-RELSTATUS=rc1
+RELSTATUS=rc2
 
 case "$RELSTATUS" in
 alp*|bet*|dev*|rc*)    DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;;
@@ -27212,7 +27212,7 @@ _ASBOX
 } >&5
 cat >&5 <<_CSEOF
 
-This file was extended by bash $as_me 3.1-rc1, which was
+This file was extended by bash $as_me 3.1-rc2, which was
 generated by GNU Autoconf 2.59.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -27275,7 +27275,7 @@ _ACEOF
 
 cat >>$CONFIG_STATUS <<_ACEOF
 ac_cs_version="\\
-bash config.status 3.1-rc1
+bash config.status 3.1-rc2
 configured by $0, generated by GNU Autoconf 2.59,
   with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
 
index 6437aa5..22ab1d7 100644 (file)
@@ -22,10 +22,10 @@ dnl Process this file with autoconf to produce a configure script.
 # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 # 02111-1307, USA.
 
-AC_REVISION([for Bash 3.1, version 3.180])dnl
+AC_REVISION([for Bash 3.1, version 3.182])dnl
 
 define(bashvers, 3.1)
-define(relstatus, rc1)
+define(relstatus, rc2)
 
 AC_INIT(bash, bashvers-relstatus, bug-bash@gnu.org)
 
diff --git a/doc/FAQ-3.1 b/doc/FAQ-3.1
new file mode 100644 (file)
index 0000000..92f5086
--- /dev/null
@@ -0,0 +1,1797 @@
+This is the Bash FAQ, version 3.31, for Bash version 3.1.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A:  The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+    machine.  Why not?
+A9) What's the `POSIX Shell and Utilities standard'?
+A10) What is the bash `posix mode'?
+
+Section B:  The latest version
+
+B1) What's new in version 3.1?
+B2) Are there any user-visible incompatibilities between bash-3.1 and
+    bash-2.05b?
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+Section E:  Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+    looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A:  The Basics
+
+A1)  What is it?
+
+Bash is a Unix command interpreter (shell).  It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming.  Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion.  Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation.  The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2)  What's the latest version?
+
+The latest version is 3.1, first made available on xx December, 2005.
+
+A3)  Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors.  The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 3.1:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-3.1.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-3.1.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.1.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-3.1.tar.gz
+
+Any patches for the current version are available with the URL:
+
+ftp://ftp.cwru.edu/pub/bash/bash-3.1-patches/
+
+A4)  On what machines will bash run?
+
+Bash has been ported to nearly every version of Unix.  All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'.  The build process
+will attempt to discover the version of Unix you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution.  Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet. 
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface.  This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions (now part of Red Hat) as part
+of their CYGWIN project.  For more information about the project, see
+http://www.cygwin.com/.
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases.  Cygnus has also done
+ports of bash-2.05b and bash-3.0 to the CYGWIN environment, and both
+are available as part of their current release.  Bash-3.1 is currently
+being tested and should be available soon.
+
+Bash-2.05b and later versions should require no local Cygnus changes to
+build and run under CYGWIN.
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project.  For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2.  The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark began to work with bash-2.05, but I don't know the current status.
+
+Bash-3.0 compiles and runs with no modifications under Microsoft's Services
+for Unix (SFU), once known as Interix.  I do not anticipate any problems
+with building bash-3.1.
+
+A6) How can I build bash with gcc? 
+
+Bash configures to use gcc by default if it is available.  Read the
+file INSTALL in the distribution for more information.
+
+A7)  How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell.  Other
+systems use `passwd -s' or `passwd -e'.  If one of these works for
+you, that's all you need.  Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell.  For this, you may need the assistance of your
+friendly local system administrator. 
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks.  The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+       if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file.  If you must put the command in ~/.cshrc, use something
+like
+
+       if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+       [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+               exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell.  Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE.  CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts.  If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing.  It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files.  You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+       if [ -n "$DT" ]; then
+               [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+       fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+       BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+       unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+   machine.  Why not?
+
+You must add the full pathname to bash to the file /etc/shells.  As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell. 
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP. 
+
+A9)  What's the `POSIX Shell and Utilities standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX.  There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management.  Each area of standardization is
+assigned to a working group in the 1003 series. 
+
+The POSIX Shell and Utilities standard was originally developed by
+IEEE Working Group 1003.2 (POSIX.2).  Today it has been merged with
+the original 1003.1 Working Group and is maintained by the Austin
+Group (a joint working group of the IEEE, The Open Group and
+ISO/IEC SC22/WG15).  Today the Shell and Utilities are a volume
+within the set of documents that make up IEEE Std 1003.1-2001, and
+thus now the former POSIX.2 (from 1992) is now part of the current
+POSIX.1 standard (POSIX 1003.1-2001). 
+
+The Shell and Utilities volume concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs.  The standard is freely
+available on the web at http://www.UNIX-systems.org/version3/ . 
+Work continues at the Austin Group on maintenance issues; see
+http://www.opengroup.org/austin/ to join the discussions. 
+
+Bash is concerned with the aspects of the shell's behavior defined
+by the POSIX Shell and Utilities volume.  The shell command
+language has of course been standardized, including the basic flow
+control and program execution constructs, I/O redirection and
+pipelining, argument handling, variable expansion, and quoting. 
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'.  Other utilities appear in the sections of POSIX not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'. 
+POSIX also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing.  Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The latest version of the POSIX Shell and Utilities standard is
+available (now updated to the 2004 Edition) as part of the Single
+UNIX Specification Version 3 at
+
+http://www.UNIX-systems.org/version3/
+
+A10)  What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX shell
+specification, there are areas where the bash default behavior
+differs from that spec.  The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely. 
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B:  The latest version
+
+B1) What's new in version 3.1?
+
+Bash-3.1 is the first maintenance release of the third major release of
+bash.  It contains the following significant new features (see the manual
+page for complete descriptions and the CHANGES and NEWS files in the
+bash-3.1 distribution).
+
+o Bash-3.1 may now be configured and built in a mode that enforces strict
+  POSIX compliance.
+
+o The `+=' assignment operator, which appends to the value of a string or
+  array variable, has been implemented.
+
+o It is now possible to ignore case when matching in contexts other than
+  filename generation using the new `nocasematch' shell option.
+
+A short feature history dating from Bash-2.0:
+
+Bash-3.0 contained the following new features:
+
+o Features to support the bash debugger have been implemented, and there
+  is a new `extdebug' option to turn the non-default options on
+
+o HISTCONTROL is now a colon-separated list of options and has been
+  extended with a new `erasedups' option that will result in only one
+  copy of a command being kept in the history list
+
+o Brace expansion has been extended with a new {x..y} form, producing
+  sequences of digits or characters
+
+o Timestamps are now kept with history entries, with an option to save
+  and restore them from the history file; there is a new HISTTIMEFORMAT
+  variable describing how to display the timestamps when listing history
+  entries
+
+o The `[[' command can now perform extended regular expression (egrep-like)
+  matching, with matched subexpressions placed in the BASH_REMATCH array
+  variable
+
+o A new `pipefail' option causes a pipeline to return a failure status if
+  any command in it fails
+
+o The `jobs', `kill', and `wait' builtins now accept job control notation
+  in their arguments even if job control is not enabled
+
+o The `gettext' package and libintl have been integrated, and the shell
+  messages may be translated into other languages
+
+Bash-2.05b introduced the following new features:
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+  [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+  supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+  and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator:  <<< word
+
+o when displaying variables, function attributes and definitions are shown
+  separately, allowing them to be re-used as input (attempting to re-use
+  the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+  new DEBUG trap semantics, the command set has been made more gdb-like,
+  and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+  function start if the shell is interactive -- if the shell is running a
+  script, $LINENO expands to the line number in the script.  This is as
+  POSIX-2001 requires
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+  login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+  HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+  completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+  when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+  `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+  processing pattern matching bracket expressions, as POSIX requires. 
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+  per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+  port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+   of the aspects of that compspec.  Valid values are:
+
+        default - perform bash default completion if programmable
+                  completion produces no matches
+        dirnames - perform directory name completion if programmable
+                   completion produces no matches
+        filenames - tell readline that the compspec produces filenames,
+                    so it can do things like append slashes to
+                    directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+  in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+  way that allows them to be reused as input.  This affects `declare' and 
+  `declare -p' as well.  This only happens when the shell is not in POSIX
+   mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+  examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+  command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+       for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially:  /dev/fd/N,
+  /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+  /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+  to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+  function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+  respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+  with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+  point at the end of the line when the search string is empty, like
+  reverse-search-history, and forward-search-history
+o A new function for applications:  rl_on_new_line_with_prompt()
+o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes.  A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+       whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+       compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+       as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+       startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03.  For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+       bash versions) that is more page-oriented, more conservative
+       with memory usage, does not `orphan' large blocks when they
+       are freed, is usable on 64-bit machines, and has allocation
+       checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+       $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+       alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+       shell functions
+one-dimensional arrays with a new compound assignment statement,
+        appropriate expansion constructs and modifications to some
+       of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+       string translation
+new expansions to do substring extraction, pattern replacement, and
+       indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+              MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+       (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+       visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:  
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+       (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-3.1 and
+    bash-2.05b?
+
+There are a few incompatibilities between version 2.05b and version 3.1.
+They are detailed in the file COMPAT in the bash distribution.  That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell.  The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+       long invocation options
+       [+-]O invocation option
+       -l invocation option
+       `!' reserved word to invert pipeline return value
+       `time' reserved word to time pipelines and shell builtins
+       the `function' reserved word
+       the `select' compound command and reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       new $'...' and $"..." quoting
+       the $(...) form of command substitution
+       the $(<filename) form of command substitution, equivalent to
+               $(cat filename)
+       the ${#param} parameter value length operator
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+       expansion of positional parameters beyond $9 with ${num}
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+                  TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+                  LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+                  ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+                  HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+                  PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+                  SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+                  auto_resume
+       DEBUG trap
+       ERR trap
+       variable arrays with new compound assignment syntax
+       redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+       prompt string special char translation and variable expansion
+       auto-export of variables in initial environment
+       command search finds functions before builtins
+       bash return builtin will exit a file sourced with `.'
+       builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+                 export -n/-f/-p/name=value, pwd -L/-P,
+                 read -e/-p/-a/-t/-n/-d/-s/-u,
+                 readonly -a/-f/name=value, trap -l, set +o,
+                 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+                 unset -f/-v, ulimit -m/-p/-u,
+                 type -a/-p/-t/-f/-P, suspend -f, kill -n,
+                 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+       bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+       bash restricted shell mode is more extensive
+       bash allows functions and variables with the same name
+       brace expansion
+       tilde expansion
+       arithmetic expansion with $((...)) and `let' builtin
+       the `[[...]]' extended conditional command
+       process substitution
+       aliases and alias/unalias builtins
+       local variables in functions and `local' builtin
+       readline and command-line editing with programmable completion
+       command history and history/fc builtins
+       csh-like history expansion
+       other new bash builtins: bind, command, compgen, complete, builtin,
+                                declare/typeset, dirs, enable, fc, help,
+                                history, logout, popd, pushd, disown, shopt,
+                                printf
+       exported functions
+       filename generation when using output redirection (command >a*)
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       variable assignments preceding commands affect only that command,
+               even for builtins and functions
+       posix mode and strict posix conformance
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+               /dev/tcp/host/port, /dev/udp/host/port
+       debugger support, including `caller' builtin and new variables
+       RETURN trap
+       the `+=' assignment operator
+
+
+Things sh has that bash does not:
+       uses variable SHACCT to do shell accounting
+       includes `stop' builtin (bash can use alias stop='kill -s STOP')
+       `newgrp' builtin
+       turns on job control if called as `jsh'
+       $TIMEOUT (like bash $TMOUT)
+       `^' is a synonym for `|'
+       new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+       redirection to/from compound commands causes sh to create a subshell
+       bash does not allow unbalanced quotes; sh silently inserts them at EOF
+       bash does not mess with signal 11
+       sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+       bash splits only the results of expansions on IFS, using POSIX.2
+               field splitting rules; sh splits all words on IFS
+       sh does not allow MAILCHECK to be unset (?)
+       sh does not allow traps on SIGALRM or SIGCHLD
+       bash allows multiple option arguments when invoked (e.g. -x -v);
+               sh allows only a single option argument (`sh -x -v' attempts
+               to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+               On Solaris 2.4 and earlier versions, sh goes into an infinite
+               loop.)
+       sh exits a script if any builtin fails; bash exits only if one of
+               the POSIX.2 `special' builtins fails
+
+C2)  How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+       long invocation options
+       [-+]O invocation option
+       -l invocation option
+       `!' reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       arithmetic in largest machine-supported size (intmax_t)
+       posix mode and posix conformance
+       command hashing
+       tilde expansion for assignment statements that look like $PATH
+       process substitution with named pipes if /dev/fd is not available
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+                  TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+                  HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+                  IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+                  PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+                  GROUPS, FUNCNAME, histchars, auto_resume
+       prompt expansion with backslash escapes and command substitution
+       redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+       more extensive and extensible editing and programmable completion
+       builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+                 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+                 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+                 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+                 set -o braceexpand/-o histexpand/-o interactive-comments/
+                 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+                 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+                 typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+                 disown, printf, complete, compgen
+       `!' csh-style history expansion
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       `**' arithmetic operator to do exponentiation
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+       arrays of unlimited size
+       TMOUT is default timeout for `read' and `select'
+       debugger support, including the `caller' builtin
+       RETURN trap
+       Timestamps in history entries
+       {x..y} brace expansion
+       The `+=' assignment operator
+
+Things ksh88 has or uses that bash does not:
+       tracked aliases (alias -t)
+       variables: ERRNO, FPATH, EDITOR, VISUAL
+       co-processes (|&, >&p, <&p)
+       weirdly-scoped functions
+       typeset +f to list all function names without definitions
+       text of command history kept in a file, not memory
+       builtins: alias -x, cd old new, newgrp, print,
+                 read -p/-s/var?prompt, set -A/-o gmacs/
+                 -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
+                 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+       using environment to pass attributes of exported variables
+       arithmetic evaluation done on arguments to some builtins
+       reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+       ksh runs last command of a pipeline in parent shell context
+       bash has brace expansion by default (ksh88 compile-time option)
+       bash has fixed startup file for all interactive shells; ksh reads $ENV
+       bash has exported functions
+       bash command search finds functions before builtins
+       bash waits for all commands in pipeline to exit before returning status
+       emacs-mode editing has some slightly different key bindings
+
+C3)  Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-3.0:
+       associative arrays
+       floating point arithmetic and variables
+       math library functions
+       ${!name[sub]} name of subscript for associative array
+       `.' is allowed in variable names to create a hierarchical namespace
+       more extensive compound assignment syntax
+       discipline functions
+       `sleep' and `getconf' builtins (bash has loadable versions)
+       typeset -n and `nameref' variables
+       KEYBD trap
+       variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+                  .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+       backreferences in pattern matching (\N)
+       `&' operator in pattern lists for matching
+       print -f (bash uses printf)
+       `fc' has been renamed to `hist'
+       `.' can execute shell functions
+       exit statuses between 0 and 255
+       FPATH and PATH mixing
+       getopts -a
+       -I invocation option
+       printf %H, %P, %T, %Z modifiers, output base for %d
+       lexical scoping for local variables in `ksh' functions
+       no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-3.0:
+       [n]<&word- and [n]>&word- redirections (combination dup and close)
+        for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+        ?:, ++, --, `expr1 , expr2' arithmetic operators
+       expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+                   ${!param*}
+       compound array assignment
+       the `!' reserved word
+       loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+       `command', `builtin', `disown' builtins
+       new $'...' and $"..." quoting
+       FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+       set -o notify/-C
+       changes to kill builtin
+       read -A (bash uses read -a)
+        read -t/-d
+       trap -p
+       exec -c/-a
+       `.' restores the positional parameters when it completes
+       POSIX.2 `test'
+       umask -S
+       unalias -a
+       command and arithmetic substitution performed on PS1, PS4, and ENV
+       command name completion
+       ENV processed only for interactive shells
+       set -o pipefail
+       The `+=' assignment operator
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh.  In tcsh, `which' and its cousin `where'
+are builtins.  On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked.  Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment.  The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell.  If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+       which()
+       {
+               builtin type "$@"
+       }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+       where()
+       {
+               builtin type -a "$@"
+       }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded.  Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code.  This affords the greatest degree of sh
+compatibility. 
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+        Remove smallest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the suffix matched by the pattern deleted.
+
+        x=file.c
+        echo ${x%.c}.o
+        -->file.o
+
+${parameter%%word}
+
+        Remove largest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the suffix matched by the pattern deleted.
+
+        x=posix/src/std
+        echo ${x%%/*}
+        -->posix
+
+${parameter#word}
+        Remove smallest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the prefix matched by the pattern deleted.
+
+        x=$HOME/src/cmd
+        echo ${x#$HOME}
+        -->/src/cmd
+
+${parameter##word}
+        Remove largest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the prefix matched by the pattern deleted.
+
+        x=/one/two/three
+        echo ${x##*/}
+        -->three
+
+
+Given
+       a=/a/b/c/d
+       b=b.xxx
+
+       csh                     bash            result
+       ---                     ----            ------
+       $a:h                    ${a%/*}            /a/b/c
+       $a:t                    ${a##*/}           d
+       $b:r                    ${b%.*}            b
+       $b:e                    ${b##*.}           xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does. 
+The details can be found in the documentation.  We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh.  Here is
+how you use it:
+  
+Start csh in the normal way for you.  (e.g., `csh')
+  
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+  
+       alias | bash aliasconv.sh >bash_aliases
+  
+Edit `bash_aliases', carefully reading through any created
+functions.  You will need to change the names of some csh specific
+variables to the bash equivalents.  The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1.  You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+  
+       alias cd 'cd \!*; echo $cwd'
+  
+is converted to the bash function:
+
+       cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+  
+       cd () { command cd "$@"; echo "$PWD" ; }
+  
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent.  This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment. 
+
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+
+Use
+       command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents.  Most, however, can be emulated with very little trouble.
+
+ksh-88 feature         Bash equivalent
+--------------         ---------------
+compiled-in aliases    set up aliases in .bashrc; some ksh aliases are
+                       bash builtins (hash, history, type)
+coprocesses            named pipe pairs (one for read, one for write)
+typeset +f             declare -F
+cd, print, whence      function substitutes in examples/functions/kshenv
+autoloaded functions   examples/functions/autoload is the same as typeset -fu
+read var?prompt                read -p prompt var
+
+ksh-93 feature         Bash equivalent
+--------------         ---------------
+sleep, getconf         Bash has loadable versions in examples/loadables
+${.sh.version}         $BASH_VERSION
+print -f               printf
+hist                   alias hist=fc
+$HISTEDIT              $FCEDIT
+
+Section E:  How can I get bash to do certain things, and why does bash do
+           things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+   
+Here is the set of rules for processing test arguments.
+  
+    0 Args: False
+    1 Arg:  True iff argument is not null.
+    2 Args: If first arg is !, True iff second argument is null.
+           If first argument is unary, then true if unary test is true
+           Otherwise error.
+    3 Args: If second argument is a binary operator, do binary test of $1 $3
+           If first argument is !, negate two argument test of $2 $3
+           If first argument is `(' and third argument is `)', do the
+           one-argument test of the second argument.
+           Otherwise error.
+    4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+           Otherwise unspecified
+    5 or more Args: unspecified.  (Historical shells would use their
+    current algorithm).
+   
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+   
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal.  Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it. 
+For example, in:
+  
+      ps -aux | head
+  
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader.  In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE. 
+
+As of bash-3.1, bash will not report SIGPIPE errors by default.  You
+can build a version of bash that will report such errors.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen.  The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen. 
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space. 
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence. 
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes.  It affects all commands run in pipelines, not just
+simple calls to `read'.  For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline, even a builtin or shell function,
+runs in a separate process, a child of the shell running the
+pipeline.  A subprocess cannot affect its parent's environment. 
+When the `read' command sets the variable to the input, that
+variable is set only in the subshell, not the parent shell.  When
+the subshell exits, the value of the variable is lost. 
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command.  The output can then be assigned to a
+variable:
+
+       grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+       ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments.  If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+       /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+       OIFS="$IFS"
+       IFS=.
+       set -- $(/usr/local/bin/ipaddr)
+       IFS="$OIFS"
+       A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters.  If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+    $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'.  It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation.  The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them. 
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default.  Run
+configure with the --enable-xpg-echo-default option to turn this
+on.  Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime.  Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix.  The only
+thing that can be suspended is the process group.  This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies.  These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+       ...
+
+subdirs-clean:
+       for d in ${SUBDIRS}; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+       for d in ; do
+               ( cd $d && ${MAKE} ${MFLAGS} clean )
+       done
+
+In versions of bash before bash-2.05a, this was a syntax error.  If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline.  The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded.  These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+       subdirs=$SUBDIRS ; for d in $$subdirs; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+The latest updated POSIX standard has changed this:  the word list
+is no longer required.  Bash versions 2.05a and later accept the
+new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal.  This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]). 
+This is what POSIX.2 and SUSv3/XPG6 specify. 
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters).  Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+       AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'.  Others collate like
+
+       aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1).  If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+       export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z].  This will prevent things like
+
+       rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility.  Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group.  Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH.  (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group.  This foreground process group receives the SIGWINCH; bash
+does not.  Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash.  Enable it with `shopt -s checkwinsize'.
+
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+When substring expansion of the form ${param:offset[:length} is used,
+an `offset' that evaluates to a number less than zero counts back from
+the end of the expanded value of $param.
+
+When a negative `offset' begins with a minus sign, however, unexpected things
+can happen.  Consider
+
+       a=12345678
+       echo ${a:-4}
+
+intending to print the last four characters of $a.  The problem is that
+${param:-word} already has a well-defined meaning: expand to word if the
+expanded value of param is unset or null, and $param otherwise.
+
+To use negative offsets that begin with a minus sign, separate the
+minus sign and the colon with a space.
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input.  When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves.  As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry.  For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution. 
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool.  If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include. 
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash.  This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb. 
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server.  When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null. 
+So far, so good. 
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns.  The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory. 
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed.  You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2.  You can change this
+character to whatever you want using `stty'.  For example, to
+change the line kill character to control-u, type
+
+       stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+
+The actual command in question is something like
+
+       < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error.  Redirections may only precede `simple
+commands'.  A subshell construct such as the above is one of the shell's
+`compound commands'.  A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell).  While most commands of the form
+
+       cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct.  It will not apply with `patch'; you must
+modify parse.y by hand.  Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK.  This introduces a large
+number of reduce/reduce conflicts into the shell grammar. 
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+        set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+       $if mode=emacs
+               [...]
+       $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use.  The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
+the compilation should complete successfully.
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits.  For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input.  Use `stty' to do this:
+
+       stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+       stty pass8
+
+You may also need
+
+       stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters.  You use readline variables to do
+this.  These variables can be set in your .inputrc or using the bash
+`bind' builtin.  Here's an example using `bind':
+
+       bash$ bind 'set convert-meta off'
+       bash$ bind 'set meta-flag on'
+       bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist.  The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name.  The
+`builtin' builtin executes the builtin command given as its first
+argument directly. 
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+       cd()
+       {
+               builtin cd "$@" && xtitle "$HOST: $PWD"
+       }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient. 
+
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly.  You can use 
+
+       ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+       var1=var2
+       var2=z
+       echo ${!var1}
+
+For sh compatibility, use the `eval' builtin.  The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on. 
+
+For example, this expression prints the value of the last positional
+parameter:
+
+       eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed.  In versions of bash later than bash-2.0,
+
+       echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar.  I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+     looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3).  The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+       TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+       TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed.  The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME.  The \W
+expansion gives the basename of the current directory.  To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD.  Here are some examples:
+
+       PS1='\w$ '      # current directory with tilde
+       PS1='\W$ '      # basename of current directory
+       PS1='$PWD$ '    # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3.  The following `for'
+loop will do the trick:
+
+       for f in *.foo; do
+               mv $f ${f%foo}bar
+       done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick.  The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+       echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+
+Use the `bashbug' script to report bugs.  It is built and
+installed at the same time as bash.  It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment. 
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug.  Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution.  It should
+contain at least the following files:
+
+bash.1         an extensive, thorough Unix-style manual page
+builtins.1     a manual page covering just bash builtin commands
+bashref.texi   a reference manual in GNU tex`info format
+bashref.info   an info version of the reference manual
+FAQ            this file
+article.ms     text of an article written for The Linux Journal
+readline.3     a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
+Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X.  Look for it in fine bookstores near you.  This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.  
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2.  Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003).  It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details).  The publisher
+will donate $1 to the Free Software Foundation for each copy sold. 
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+Rocky Bernstein's bash debugger (support is included with bash-3.0)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+       variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+       associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2006.  Never make predictions. 
+
+This document is Copyright 1995-2005 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
diff --git a/doc/FAQ-3.1~ b/doc/FAQ-3.1~
new file mode 100644 (file)
index 0000000..37e4674
--- /dev/null
@@ -0,0 +1,1788 @@
+This is the Bash FAQ, version 3.30, for Bash version 3.0.
+
+This document contains a set of frequently-asked questions concerning
+Bash, the GNU Bourne-Again Shell.  Bash is a freely-available command
+interpreter with advanced features for both interactive use and shell
+programming.
+
+Another good source of basic information about shells is the collection
+of FAQ articles periodically posted to comp.unix.shell.
+
+Questions and comments concerning this document should be sent to
+chet@po.cwru.edu.
+
+This document is available for anonymous FTP with the URL
+
+ftp://ftp.cwru.edu/pub/bash/FAQ
+
+The Bash home page is http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html
+
+----------
+Contents:
+
+Section A:  The Basics
+
+A1) What is it?
+A2) What's the latest version?
+A3) Where can I get it?
+A4) On what machines will bash run?
+A5) Will bash run on operating systems other than Unix?
+A6) How can I build bash with gcc?
+A7) How can I make bash my login shell?
+A8) I just changed my login shell to bash, and now I can't FTP into my
+    machine.  Why not?
+A9) What's the `POSIX Shell and Utilities standard'?
+A10) What is the bash `posix mode'?
+
+Section B:  The latest version
+
+B1) What's new in version 3.0?
+B2) Are there any user-visible incompatibilities between bash-3.0 and
+    bash-1.14.7?
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+C2) How does bash differ from the Korn shell, version ksh88?
+C3) Which new features in ksh-93 are not in bash, and which are?
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+D2) Why doesn't bash treat brace expansions exactly like csh?
+D3) Why doesn't bash have csh variable modifiers?
+D4) How can I make my csh aliases work when I convert to bash?
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+Section E:  Why does bash do certain things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+E2) Why does bash sometimes say `Broken pipe'?
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+E7) What about empty for loops in Makefiles?
+E8) Why does the arithmetic evaluation code complain about `08'?
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+E10) Why does `cd //' leave $PWD as `//'?
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+F7) Why do bash-2.05a and  bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+G4) How can I make the bash `time' reserved word print timing output that
+    looks like the output from my system's /usr/bin/time?
+G5) How do I get the current directory into my prompt?
+G6) How can I rename "*.foo" to "*.bar"?
+G7) How can I translate a filename from uppercase to lowercase?
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+H2) What kind of bash documentation is there?
+H3) What's coming in future versions?
+H4) What's on the bash `wish list'?
+H5) When will the next release appear?
+
+----------
+Section A:  The Basics
+
+A1)  What is it?
+
+Bash is a Unix command interpreter (shell).  It is an implementation of
+the Posix 1003.2 shell standard, and resembles the Korn and System V
+shells.
+
+Bash contains a number of enhancements over those shells, both
+for interactive use and shell programming.  Features geared
+toward interactive use include command line editing, command
+history, job control, aliases, and prompt expansion.  Programming
+features include additional variable expansions, shell
+arithmetic, and a number of variables and options to control
+shell behavior.
+
+Bash was originally written by Brian Fox of the Free Software
+Foundation.  The current developer and maintainer is Chet Ramey
+of Case Western Reserve University.
+
+A2)  What's the latest version?
+
+The latest version is 3.0, first made available on 27 July, 2004.
+
+A3)  Where can I get it?
+
+Bash is the GNU project's shell, and so is available from the
+master GNU archive site, ftp.gnu.org, and its mirrors.  The
+latest version is also available for FTP from ftp.cwru.edu.
+The following URLs tell how to get version 3.0:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-3.0.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-3.0.tar.gz
+
+Formatted versions of the documentation are available with the URLs:
+
+ftp://ftp.gnu.org/pub/gnu/bash/bash-doc-3.0.tar.gz
+ftp://ftp.cwru.edu/pub/bash/bash-doc-3.0.tar.gz
+
+Any patches for the current version are available with the URL:
+
+ftp://ftp.cwru.edu/pub/bash/bash-3.0-patches/
+
+A4)  On what machines will bash run?
+
+Bash has been ported to nearly every version of Unix.  All you
+should have to do to build it on a machine for which a port
+exists is to type `configure' and then `make'.  The build process
+will attempt to discover the version of Unix you have and tailor
+itself accordingly, using a script created by GNU autoconf.
+
+More information appears in the file `INSTALL' in the distribution.
+
+The Bash web page (http://cnswww.cns.cwru.edu/~chet/bash/bashtop.html)
+explains how to obtain binary versions of bash for most of the major
+commercial Unix systems.
+
+A5) Will bash run on operating systems other than Unix?
+
+Configuration specifics for Unix-like systems such as QNX and
+LynxOS are included in the distribution.  Bash-2.05 and later
+versions should compile and run on Minix 2.0 (patches were
+contributed), but I don't believe anyone has built bash-2.x on
+earlier Minix versions yet. 
+
+Bash has been ported to versions of Windows implementing the Win32
+programming interface.  This includes Windows 95 and Windows NT.
+The port was done by Cygnus Solutions (now part of Red Hat) as part
+of their CYGWIN project.  For more information about the project, see
+http://www.cygwin.com/.
+
+Cygnus originally ported bash-1.14.7, and that port was part of their
+early GNU-Win32 (the original name) releases.  Cygnus has also done a
+port of bash-2.05b to the CYGWIN environment, and it is available as
+part of their current release.  Bash-3.0 is currently being tested and
+should be available soon.
+
+Bash-2.05b and later versions should require no local Cygnus changes to
+build and run under CYGWIN.
+
+DJ Delorie has a port of bash-2.x which runs under MS-DOS, as part
+of the DJGPP project.  For more information on the project, see
+
+http://www.delorie.com/djgpp/
+
+I have been told that the original DJGPP port was done by Daisuke Aoyama.
+
+Mark Elbrecht <snowball3@bigfoot.com> has sent me notice that bash-2.04
+is available for DJGPP V2.  The files are available as:
+
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204b.zip binary
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204d.zip documentation
+ftp://ftp.simtel.net/pub/simtelnet/gnu/djgpp/v2gnu/bsh204s.zip source
+
+Mark began to work with bash-2.05, but I don't know the current status.
+
+Bash-3.0 compiles and runs with no modifications under Microsoft's Services
+for Unix (SFU), once known as Interix.
+
+A6) How can I build bash with gcc? 
+
+Bash configures to use gcc by default if it is available.  Read the
+file INSTALL in the distribution for more information.
+
+A7)  How can I make bash my login shell?
+
+Some machines let you use `chsh' to change your login shell.  Other
+systems use `passwd -s' or `passwd -e'.  If one of these works for
+you, that's all you need.  Note that many systems require the full
+pathname to a shell to appear in /etc/shells before you can make it
+your login shell.  For this, you may need the assistance of your
+friendly local system administrator. 
+
+If you cannot do this, you can still use bash as your login shell, but
+you need to perform some tricks.  The basic idea is to add a command
+to your login shell's startup file to replace your login shell with
+bash.
+
+For example, if your login shell is csh or tcsh, and you have installed
+bash in /usr/gnu/bin/bash, add the following line to ~/.login:
+
+       if ( -f /usr/gnu/bin/bash ) exec /usr/gnu/bin/bash --login
+
+(the `--login' tells bash that it is a login shell).
+
+It's not a good idea to put this command into ~/.cshrc, because every
+csh you run without the `-f' option, even ones started to run csh scripts,
+reads that file.  If you must put the command in ~/.cshrc, use something
+like
+
+       if ( $?prompt ) exec /usr/gnu/bin/bash --login
+
+to ensure that bash is exec'd only when the csh is interactive.
+
+If your login shell is sh or ksh, you have to do two things.
+
+First, create an empty file in your home directory named `.bash_profile'.
+The existence of this file will prevent the exec'd bash from trying to
+read ~/.profile, and re-execing itself over and over again.  ~/.bash_profile
+is the first file bash tries to read initialization commands from when
+it is invoked as a login shell.
+
+Next, add a line similar to the above to ~/.profile:
+
+       [ -f /usr/gnu/bin/bash ] && [ -x /usr/gnu/bin/bash ] && \
+               exec /usr/gnu/bin/bash --login
+
+This will cause login shells to replace themselves with bash running as
+a login shell.  Once you have this working, you can copy your initialization
+code from ~/.profile to ~/.bash_profile.
+
+I have received word that the recipe supplied above is insufficient for
+machines running CDE.  CDE has a maze of twisty little startup files, all
+slightly different.
+
+If you cannot change your login shell in the password file to bash, you
+will have to (apparently) live with CDE using the shell in the password
+file to run its startup scripts.  If you have changed your shell to bash,
+there is code in the CDE startup files (on Solaris, at least) that attempts
+to do the right thing.  It is, however, often broken, and may require that
+you use the $BASH_ENV trick described below.
+
+`dtterm' claims to use $SHELL as the default program to start, so if you
+can change $SHELL in the CDE startup files, you should be able to use bash
+in your terminal windows.
+
+Setting DTSOURCEPROFILE in ~/.dtprofile will cause the `Xsession' program
+to read your login shell's startup files.  You may be able to use bash for
+the rest of the CDE programs by setting SHELL to bash in ~/.dtprofile as
+well, but I have not tried this.
+
+You can use the above `exec' recipe to start bash when not logging in with
+CDE by testing the value of the DT variable:
+
+       if [ -n "$DT" ]; then
+               [ -f /usr/gnu/bin/bash ] && exec /usr/gnu/bin/bash --login
+       fi
+
+If CDE starts its shells non-interactively during login, the login shell
+startup files (~/.profile, ~/.bash_profile) will not be sourced at login.
+To get around this problem, append a line similar to the following to your
+~/.dtprofile:
+
+       BASH_ENV=${HOME}/.bash_profile ; export BASH_ENV
+
+and add the following line to the beginning of ~/.bash_profile:
+
+       unset BASH_ENV
+
+A8) I just changed my login shell to bash, and now I can't FTP into my
+   machine.  Why not?
+
+You must add the full pathname to bash to the file /etc/shells.  As
+noted in the answer to the previous question, many systems require
+this before you can make bash your login shell. 
+
+Most versions of ftpd use this file to prohibit `special' users
+such as `uucp' and `news' from using FTP. 
+
+A9)  What's the `POSIX Shell and Utilities standard'?
+
+POSIX is a name originally coined by Richard Stallman for a
+family of open system standards based on UNIX.  There are a
+number of aspects of UNIX under consideration for
+standardization, from the basic system services at the system
+call and C library level to applications and tools to system
+administration and management.  Each area of standardization is
+assigned to a working group in the 1003 series. 
+
+The POSIX Shell and Utilities standard was originally developed by
+IEEE Working Group 1003.2 (POSIX.2).  Today it has been merged with
+the original 1003.1 Working Group and is maintained by the Austin
+Group (a joint working group of the IEEE, The Open Group and
+ISO/IEC SC22/WG15).  Today the Shell and Utilities are a volume
+within the set of documents that make up IEEE Std 1003.1-2001, and
+thus now the former POSIX.2 (from 1992) is now part of the current
+POSIX.1 standard (POSIX 1003.1-2001). 
+
+The Shell and Utilities volume concentrates on the command
+interpreter interface and utility programs commonly executed from
+the command line or by other programs.  The standard is freely
+available on the web at http://www.UNIX-systems.org/version3/ . 
+Work continues at the Austin Group on maintenance issues; see
+http://www.opengroup.org/austin/ to join the discussions. 
+
+Bash is concerned with the aspects of the shell's behavior defined
+by the POSIX Shell and Utilities volume.  The shell command
+language has of course been standardized, including the basic flow
+control and program execution constructs, I/O redirection and
+pipelining, argument handling, variable expansion, and quoting. 
+
+The `special' builtins, which must be implemented as part of the
+shell to provide the desired functionality, are specified as
+being part of the shell; examples of these are `eval' and
+`export'.  Other utilities appear in the sections of POSIX not
+devoted to the shell which are commonly (and in some cases must
+be) implemented as builtin commands, such as `read' and `test'. 
+POSIX also specifies aspects of the shell's interactive
+behavior as part of the UPE, including job control and command
+line editing.  Only vi-style line editing commands have been
+standardized; emacs editing commands were left out due to
+objections.
+
+The latest version of the POSIX Shell and Utilities standard is
+available (now updated to the 2004 Edition) as part of the Single
+UNIX Specification Version 3 at
+
+http://www.UNIX-systems.org/version3/
+
+A10)  What is the bash `posix mode'?
+
+Although bash is an implementation of the POSIX shell
+specification, there are areas where the bash default behavior
+differs from that spec.  The bash `posix mode' changes the bash
+behavior in these areas so that it obeys the spec more closely. 
+
+Posix mode is entered by starting bash with the --posix or
+'-o posix' option or executing `set -o posix' after bash is running.
+
+The specific aspects of bash which change when posix mode is
+active are listed in the file POSIX in the bash distribution.
+They are also listed in a section in the Bash Reference Manual
+(from which that file is generated).
+
+Section B:  The latest version
+
+B1) What's new in version 3.0?
+
+Bash-3.0 is the third major release of bash.  The features introduced
+in the intermediate releases following bash-2.05 have been completed.
+Support for the bash debugger (a separate project) has been integrated.
+
+Bash-3.0 contains the following new features (see the manual page for
+complete descriptions and the CHANGES and NEWS files in the bash-3.0
+distribution):
+
+o Features to support the bash debugger have been implemented, and there
+  is a new `extdebug' option to turn the non-default options on
+
+o HISTCONTROL is now a colon-separated list of options and has been
+  extended with a new `erasedups' option that will result in only one
+  copy of a command being kept in the history list
+
+o Brace expansion has been extended with a new {x..y} form, producing
+  sequences of digits or characters
+
+o Timestamps are now kept with history entries, with an option to save
+  and restore them from the history file; there is a new HISTTIMEFORMAT
+  variable describing how to display the timestamps when listing history
+  entries
+
+o The `[[' command can now perform extended regular expression (egrep-like)
+  matching, with matched subexpressions placed in the BASH_REMATCH array
+  variable
+
+o A new `pipefail' option causes a pipeline to return a failure status if
+  any command in it fails
+
+o The `jobs', `kill', and `wait' builtins now accept job control notation
+  in their arguments even if job control is not enabled
+
+o The `gettext' package and libintl have been integrated, and the shell
+  messages may be translated into other languages
+
+A short feature history dating from Bash-2.0:
+
+Bash-2.05b introduced the following new features:
+
+o support for multibyte characters has been added to both bash and readline
+
+o the DEBUG trap is now run *before* simple commands, ((...)) commands,
+  [[...]] conditional commands, and for ((...)) loops
+
+o the shell now performs arithmetic in the largest integer size the machine
+  supports (intmax_t)
+
+o there is a new \D{...} prompt expansion; passes the `...' to strftime(3)
+  and inserts the result into the expanded prompt
+
+o there is a new `here-string' redirection operator:  <<< word
+
+o when displaying variables, function attributes and definitions are shown
+  separately, allowing them to be re-used as input (attempting to re-use
+  the old output would result in syntax errors).
+
+o `read' has a new `-u fd' option to read from a specified file descriptor
+
+o the bash debugger in examples/bashdb has been modified to work with the
+  new DEBUG trap semantics, the command set has been made more gdb-like,
+  and the changes to $LINENO make debugging functions work better
+
+o the expansion of $LINENO inside a shell function is only relative to the
+  function start if the shell is interactive -- if the shell is running a
+  script, $LINENO expands to the line number in the script.  This is as
+  POSIX-2001 requires
+
+Bash-2.05a introduced the following new features:
+
+o The `printf' builtin has undergone major work
+
+o There is a new read-only `shopt' option: login_shell, which is set by
+  login shells and unset otherwise
+
+o New `\A' prompt string escape sequence; expanding to time in 24-hour
+  HH:MM format
+
+o New `-A group/-g' option to complete and compgen; goes group name
+  completion
+
+o New [+-]O invocation option to set and unset `shopt' options at startup
+
+o ksh-like `ERR' trap
+
+o `for' loops now allow empty word lists after the `in' reserved word
+
+o new `hard' and `soft' arguments for the `ulimit' builtin
+
+o Readline can be configured to place the user at the same point on the line
+  when retrieving commands from the history list
+
+o Readline can be configured to skip `hidden' files (filenames with a leading
+  `.' on Unix) when performing completion
+
+Bash-2.05 introduced the following new features:
+
+o This version has once again reverted to using locales and strcoll(3) when
+  processing pattern matching bracket expressions, as POSIX requires. 
+o Added a new `--init-file' invocation argument as a synonym for `--rcfile',
+  per the new GNU coding standards.
+o The /dev/tcp and /dev/udp redirections now accept service names as well as
+  port numbers.
+o `complete' and `compgen' now take a `-o value' option, which controls some
+   of the aspects of that compspec.  Valid values are:
+
+        default - perform bash default completion if programmable
+                  completion produces no matches
+        dirnames - perform directory name completion if programmable
+                   completion produces no matches
+        filenames - tell readline that the compspec produces filenames,
+                    so it can do things like append slashes to
+                    directory names and suppress trailing spaces
+o A new loadable builtin, realpath, which canonicalizes and expands symlinks
+  in pathname arguments.
+o When `set' is called without options, it prints function defintions in a
+  way that allows them to be reused as input.  This affects `declare' and 
+  `declare -p' as well.  This only happens when the shell is not in POSIX
+   mode, since POSIX.2 forbids this behavior.
+
+Bash-2.04 introduced the following new features:
+
+o Programmable word completion with the new `complete' and `compgen' builtins;
+  examples are provided in examples/complete/complete-examples
+o `history' has a new `-d' option to delete a history entry
+o `bind' has a new `-x' option to bind key sequences to shell commands
+o The prompt expansion code has new `\j' and `\l' escape sequences
+o The `no_empty_cmd_completion' shell option, if enabled, inhibits
+  command completion when TAB is typed on an empty line
+o `help' has a new `-s' option to print a usage synopsis
+o New arithmetic operators: var++, var--, ++var, --var, expr1,expr2 (comma)
+o New ksh93-style arithmetic for command:
+       for ((expr1 ; expr2; expr3 )); do list; done
+o `read' has new options: `-t', `-n', `-d', `-s'
+o The redirection code handles several filenames specially:  /dev/fd/N,
+  /dev/stdin, /dev/stdout, /dev/stderr
+o The redirection code now recognizes /dev/tcp/HOST/PORT and
+  /dev/udp/HOST/PORT and tries to open a TCP or UDP socket, respectively,
+  to the specified port on the specified host
+o The ${!prefix*} expansion has been implemented
+o A new FUNCNAME variable, which expands to the name of a currently-executing
+  function
+o The GROUPS variable is no longer readonly
+o A new shopt `xpg_echo' variable, to control the behavior of echo with
+  respect to backslash-escape sequences at runtime
+o The NON_INTERACTIVE_LOGIN_SHELLS #define has returned
+
+The version of Readline released with Bash-2.04, Readline-4.1, had several
+new features as well:
+
+o Parentheses matching is always compiled into readline, and controllable
+  with the new `blink-matching-paren' variable
+o The history-search-forward and history-search-backward functions now leave
+  point at the end of the line when the search string is empty, like
+  reverse-search-history, and forward-search-history
+o A new function for applications:  rl_on_new_line_with_prompt()
+o New variables for applications:  rl_already_prompted, and rl_gnu_readline_p
+
+
+Bash-2.03 had very few new features, in keeping with the convention
+that odd-numbered releases provide mainly bug fixes.  A number of new
+features were added to Readline, mostly at the request of the Cygnus
+folks.
+
+A new shopt option, `restricted_shell', so that startup files can test
+       whether or not the shell was started in restricted mode
+Filename generation is now performed on the words between ( and ) in
+       compound array assignments (this is really a bug fix)
+OLDPWD is now auto-exported, as POSIX.2 requires
+ENV and BASH_ENV are read-only variables in a restricted shell
+Bash may now be linked against an already-installed Readline library,
+       as long as the Readline library is version 4 or newer
+All shells begun with the `--login' option will source the login shell
+       startup files, even if the shell is not interactive
+
+There were lots of changes to the version of the Readline library released
+along with Bash-2.03.  For a complete list of the changes, read the file
+CHANGES in the Bash-2.03 distribution.
+
+Bash-2.02 contained the following new features:
+
+a new version of malloc (based on the old GNU malloc code in previous
+       bash versions) that is more page-oriented, more conservative
+       with memory usage, does not `orphan' large blocks when they
+       are freed, is usable on 64-bit machines, and has allocation
+       checking turned on unconditionally
+POSIX.2-style globbing character classes ([:alpha:], [:alnum:], etc.)
+POSIX.2-style globbing equivalence classes
+POSIX.2-style globbing collating symbols
+the ksh [[...]] extended conditional command
+the ksh egrep-style extended pattern matching operators
+a new `printf' builtin
+the ksh-like $(<filename) command substitution, which is equivalent to
+       $(cat filename)
+new tilde prefixes that expand to directories from the directory stack
+new `**' arithmetic operator to do exponentiation
+case-insensitive globbing (filename expansion)
+menu completion a la tcsh
+`magic-space' history expansion function like tcsh
+the readline inputrc `language' has a new file inclusion directive ($include)
+
+Bash-2.01 contained only a few new features:
+
+new `GROUPS' builtin array variable containing the user's group list
+new bindable readline commands: history-and-alias-expand-line and
+       alias-expand-line
+
+Bash-2.0 contained extensive changes and new features from bash-1.14.7.
+Here's a short list:
+
+new `time' reserved word to time pipelines, shell builtins, and
+       shell functions
+one-dimensional arrays with a new compound assignment statement,
+        appropriate expansion constructs and modifications to some
+       of the builtins (read, declare, etc.) to use them
+new quoting syntaxes for ANSI-C string expansion and locale-specific
+       string translation
+new expansions to do substring extraction, pattern replacement, and
+       indirect variable expansion
+new builtins: `disown' and `shopt'
+new variables: HISTIGNORE, SHELLOPTS, PIPESTATUS, DIRSTACK, GLOBIGNORE,
+              MACHTYPE, BASH_VERSINFO
+special handling of many unused or redundant variables removed
+       (e.g., $notify, $glob_dot_filenames, $no_exit_on_failed_exec)
+dynamic loading of new builtin commands; many loadable examples provided
+new prompt expansions: \a, \e, \n, \H, \T, \@, \v, \V
+history and aliases available in shell scripts
+new readline variables: enable-keypad, mark-directories, input-meta,
+       visible-stats, disable-completion, comment-begin
+new readline commands to manipulate the mark and operate on the region
+new readline emacs mode commands and bindings for ksh-88 compatibility
+updated and extended builtins
+new DEBUG trap
+expanded (and now documented) restricted shell mode
+
+implementation stuff:  
+autoconf-based configuration
+nearly all of the bugs reported since version 1.14 have been fixed
+most builtins converted to use builtin `getopt' for consistency
+most builtins use -p option to display output in a reusable form
+       (for consistency)
+grammar tighter and smaller (66 reduce-reduce conflicts gone)
+lots of code now smaller and faster
+test suite greatly expanded
+
+B2) Are there any user-visible incompatibilities between bash-3.0 and
+    bash-1.14.7?
+
+There are a few incompatibilities between version 1.14.7 and version 3.0.
+They are detailed in the file COMPAT in the bash distribution.  That file
+is not meant to be all-encompassing; send mail to bash-maintainers@gnu.org
+if if you find something that's not mentioned there.
+
+Section C:  Differences from other Unix shells
+
+C1) How does bash differ from sh, the Bourne shell?
+
+This is a non-comprehensive list of features that differentiate bash
+from the SVR4.2 shell.  The bash manual page explains these more
+completely.
+
+Things bash has that sh does not:
+       long invocation options
+       [+-]O invocation option
+       -l invocation option
+       `!' reserved word to invert pipeline return value
+       `time' reserved word to time pipelines and shell builtins
+       the `function' reserved word
+       the `select' compound command and reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       new $'...' and $"..." quoting
+       the $(...) form of command substitution
+       the $(<filename) form of command substitution, equivalent to
+               $(cat filename)
+       the ${#param} parameter value length operator
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       expansions to perform substring removal (${p%[%]w}, ${p#[#]w})
+       expansion of positional parameters beyond $9 with ${num}
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, REPLY,
+                  TIMEFORMAT, PPID, PWD, OLDPWD, SHLVL, RANDOM, SECONDS,
+                  LINENO, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE, HOSTNAME,
+                  ENV, PS3, PS4, DIRSTACK, PIPESTATUS, HISTSIZE, HISTFILE,
+                  HISTFILESIZE, HISTCONTROL, HISTIGNORE, GLOBIGNORE, GROUPS,
+                  PROMPT_COMMAND, FCEDIT, FIGNORE, IGNOREEOF, INPUTRC,
+                  SHELLOPTS, OPTERR, HOSTFILE, TMOUT, FUNCNAME, histchars,
+                  auto_resume
+       DEBUG trap
+       ERR trap
+       variable arrays with new compound assignment syntax
+       redirections: <>, &>, >|, <<<, [n]<&word-, [n]>&word-
+       prompt string special char translation and variable expansion
+       auto-export of variables in initial environment
+       command search finds functions before builtins
+       bash return builtin will exit a file sourced with `.'
+       builtins: cd -/-L/-P, exec -l/-c/-a, echo -e/-E, hash -d/-l/-p/-t.
+                 export -n/-f/-p/name=value, pwd -L/-P,
+                 read -e/-p/-a/-t/-n/-d/-s/-u,
+                 readonly -a/-f/name=value, trap -l, set +o,
+                 set -b/-m/-o option/-h/-p/-B/-C/-H/-P,
+                 unset -f/-v, ulimit -m/-p/-u,
+                 type -a/-p/-t/-f/-P, suspend -f, kill -n,
+                 test -o optname/s1 == s2/s1 < s2/s1 > s2/-nt/-ot/-ef/-O/-G/-S
+       bash reads ~/.bashrc for interactive shells, $ENV for non-interactive
+       bash restricted shell mode is more extensive
+       bash allows functions and variables with the same name
+       brace expansion
+       tilde expansion
+       arithmetic expansion with $((...)) and `let' builtin
+       the `[[...]]' extended conditional command
+       process substitution
+       aliases and alias/unalias builtins
+       local variables in functions and `local' builtin
+       readline and command-line editing with programmable completion
+       command history and history/fc builtins
+       csh-like history expansion
+       other new bash builtins: bind, command, compgen, complete, builtin,
+                                declare/typeset, dirs, enable, fc, help,
+                                history, logout, popd, pushd, disown, shopt,
+                                printf
+       exported functions
+       filename generation when using output redirection (command >a*)
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       variable assignments preceding commands affect only that command,
+               even for builtins and functions
+       posix mode
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr,
+               /dev/tcp/host/port, /dev/udp/host/port
+       debugger support, including `caller' builtin and new variables
+       RETURN trap
+
+
+Things sh has that bash does not:
+       uses variable SHACCT to do shell accounting
+       includes `stop' builtin (bash can use alias stop='kill -s STOP')
+       `newgrp' builtin
+       turns on job control if called as `jsh'
+       $TIMEOUT (like bash $TMOUT)
+       `^' is a synonym for `|'
+       new SVR4.2 sh builtins: mldmode, priv
+
+Implementation differences:
+       redirection to/from compound commands causes sh to create a subshell
+       bash does not allow unbalanced quotes; sh silently inserts them at EOF
+       bash does not mess with signal 11
+       sh sets (euid, egid) to (uid, gid) if -p not supplied and uid < 100
+       bash splits only the results of expansions on IFS, using POSIX.2
+               field splitting rules; sh splits all words on IFS
+       sh does not allow MAILCHECK to be unset (?)
+       sh does not allow traps on SIGALRM or SIGCHLD
+       bash allows multiple option arguments when invoked (e.g. -x -v);
+               sh allows only a single option argument (`sh -x -v' attempts
+               to open a file named `-v', and, on SunOS 4.1.4, dumps core.
+               On Solaris 2.4 and earlier versions, sh goes into an infinite
+               loop.)
+       sh exits a script if any builtin fails; bash exits only if one of
+               the POSIX.2 `special' builtins fails
+
+C2)  How does bash differ from the Korn shell, version ksh88?
+
+Things bash has or uses that ksh88 does not:
+       long invocation options
+       [-+]O invocation option
+       -l invocation option
+       `!' reserved word
+       arithmetic for command: for ((expr1 ; expr2; expr3 )); do list; done
+       arithmetic in largest machine-supported size (intmax_t)
+       posix mode and posix conformance
+       command hashing
+       tilde expansion for assignment statements that look like $PATH
+       process substitution with named pipes if /dev/fd is not available
+       the ${!param} indirect parameter expansion operator
+       the ${!param*} prefix expansion operator
+       the ${param:offset[:length]} parameter substring operator
+       the ${param/pat[/string]} parameter pattern substitution operator
+       variables: BASH, BASH_VERSION, BASH_VERSINFO, UID, EUID, SHLVL,
+                  TIMEFORMAT, HISTCMD, HOSTTYPE, OSTYPE, MACHTYPE,
+                  HISTFILESIZE, HISTIGNORE, HISTCONTROL, PROMPT_COMMAND,
+                  IGNOREEOF, FIGNORE, INPUTRC, HOSTFILE, DIRSTACK,
+                  PIPESTATUS, HOSTNAME, OPTERR, SHELLOPTS, GLOBIGNORE,
+                  GROUPS, FUNCNAME, histchars, auto_resume
+       prompt expansion with backslash escapes and command substitution
+       redirection: &> (stdout and stderr), <<<, [n]<&word-, [n]>&word-
+       more extensive and extensible editing and programmable completion
+       builtins: bind, builtin, command, declare, dirs, echo -e/-E, enable,
+                 exec -l/-c/-a, fc -s, export -n/-f/-p, hash, help, history,
+                 jobs -x/-r/-s, kill -s/-n/-l, local, logout, popd, pushd,
+                 read -e/-p/-a/-t/-n/-d/-s, readonly -a/-n/-f/-p,
+                 set -o braceexpand/-o histexpand/-o interactive-comments/
+                 -o notify/-o physical/-o posix/-o hashall/-o onecmd/
+                 -h/-B/-C/-b/-H/-P, set +o, suspend, trap -l, type,
+                 typeset -a/-F/-p, ulimit -u, umask -S, alias -p, shopt,
+                 disown, printf, complete, compgen
+       `!' csh-style history expansion
+       POSIX.2-style globbing character classes
+       POSIX.2-style globbing equivalence classes
+       POSIX.2-style globbing collating symbols
+       egrep-like extended pattern matching operators
+       case-insensitive pattern matching and globbing
+       `**' arithmetic operator to do exponentiation
+       redirection to /dev/fd/N, /dev/stdin, /dev/stdout, /dev/stderr
+       arrays of unlimited size
+       TMOUT is default timeout for `read' and `select'
+       debugger support, including the `caller' builtin
+       RETURN trap
+       Timestamps in history entries
+       {x..y} brace expansion
+
+Things ksh88 has or uses that bash does not:
+       tracked aliases (alias -t)
+       variables: ERRNO, FPATH, EDITOR, VISUAL
+       co-processes (|&, >&p, <&p)
+       weirdly-scoped functions
+       typeset +f to list all function names without definitions
+       text of command history kept in a file, not memory
+       builtins: alias -x, cd old new, newgrp, print,
+                 read -p/-s/var?prompt, set -A/-o gmacs/
+                 -o bgnice/-o markdirs/-o trackall/-o viraw/-s,
+                 typeset -H/-L/-R/-Z/-A/-ft/-fu/-fx/-l/-u/-t, whence
+       using environment to pass attributes of exported variables
+       arithmetic evaluation done on arguments to some builtins
+       reads .profile from $PWD when invoked as login shell
+
+Implementation differences:
+       ksh runs last command of a pipeline in parent shell context
+       bash has brace expansion by default (ksh88 compile-time option)
+       bash has fixed startup file for all interactive shells; ksh reads $ENV
+       bash has exported functions
+       bash command search finds functions before builtins
+       bash waits for all commands in pipeline to exit before returning status
+       emacs-mode editing has some slightly different key bindings
+
+C3)  Which new features in ksh-93 are not in bash, and which are?
+
+New things in ksh-93 not in bash-3.0:
+       associative arrays
+       floating point arithmetic and variables
+       math library functions
+       ${!name[sub]} name of subscript for associative array
+       `.' is allowed in variable names to create a hierarchical namespace
+       more extensive compound assignment syntax
+       discipline functions
+       `sleep' and `getconf' builtins (bash has loadable versions)
+       typeset -n and `nameref' variables
+       KEYBD trap
+       variables: .sh.edchar, .sh.edmode, .sh.edcol, .sh.edtext, .sh.version,
+                  .sh.name, .sh.subscript, .sh.value, .sh.match, HISTEDIT
+       backreferences in pattern matching (\N)
+       `&' operator in pattern lists for matching
+       print -f (bash uses printf)
+       `fc' has been renamed to `hist'
+       `.' can execute shell functions
+       exit statuses between 0 and 255
+       `+=' variable assignment operator
+       FPATH and PATH mixing
+       getopts -a
+       -I invocation option
+       printf %H, %P, %T, %Z modifiers, output base for %d
+       lexical scoping for local variables in `ksh' functions
+       no scoping for local variables in `POSIX' functions
+
+New things in ksh-93 present in bash-3.0:
+       [n]<&word- and [n]>&word- redirections (combination dup and close)
+        for (( expr1; expr2; expr3 )) ; do list; done - arithmetic for command
+        ?:, ++, --, `expr1 , expr2' arithmetic operators
+       expansions: ${!param}, ${param:offset[:len]}, ${param/pat[/str]},
+                   ${!param*}
+       compound array assignment
+       the `!' reserved word
+       loadable builtins -- but ksh uses `builtin' while bash uses `enable'
+       `command', `builtin', `disown' builtins
+       new $'...' and $"..." quoting
+       FIGNORE (but bash uses GLOBIGNORE), HISTCMD
+       set -o notify/-C
+       changes to kill builtin
+       read -A (bash uses read -a)
+        read -t/-d
+       trap -p
+       exec -c/-a
+       `.' restores the positional parameters when it completes
+       POSIX.2 `test'
+       umask -S
+       unalias -a
+       command and arithmetic substitution performed on PS1, PS4, and ENV
+       command name completion
+       ENV processed only for interactive shells
+       set -o pipefail
+
+Section D:  Why does bash do some things differently than other Unix shells?
+
+D1) Why does bash run a different version of `command' than
+    `which command' says it will?
+
+On many systems, `which' is actually a csh script that assumes
+you're running csh.  In tcsh, `which' and its cousin `where'
+are builtins.  On other Unix systems, `which' is a perl script
+that uses the PATH environment variable.
+
+The csh script version reads the csh startup files from your
+home directory and uses those to determine which `command' will
+be invoked.  Since bash doesn't use any of those startup files,
+there's a good chance that your bash environment differs from
+your csh environment.  The bash `type' builtin does everything
+`which' does, and will report correct results for the running
+shell.  If you're really wedded to the name `which', try adding
+the following function definition to your .bashrc:
+
+       which()
+       {
+               builtin type "$@"
+       }
+
+If you're moving from tcsh and would like to bring `where' along
+as well, use this function:
+
+       where()
+       {
+               builtin type -a "$@"
+       }
+
+D2) Why doesn't bash treat brace expansions exactly like csh?
+
+The only difference between bash and csh brace expansion is that
+bash requires a brace expression to contain at least one unquoted
+comma if it is to be expanded.  Any brace-surrounded word not
+containing an unquoted comma is left unchanged by the brace
+expansion code.  This affords the greatest degree of sh
+compatibility. 
+
+Bash, ksh, zsh, and pd-ksh all implement brace expansion this way. 
+
+D3) Why doesn't bash have csh variable modifiers?
+
+Posix has specified a more powerful, albeit somewhat more cryptic,
+mechanism cribbed from ksh, and bash implements it.
+
+${parameter%word}
+        Remove smallest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the suffix matched by the pattern deleted.
+
+        x=file.c
+        echo ${x%.c}.o
+        -->file.o
+
+${parameter%%word}
+
+        Remove largest suffix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the suffix matched by the pattern deleted.
+
+        x=posix/src/std
+        echo ${x%%/*}
+        -->posix
+
+${parameter#word}
+        Remove smallest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        smallest portion of the prefix matched by the pattern deleted.
+
+        x=$HOME/src/cmd
+        echo ${x#$HOME}
+        -->/src/cmd
+
+${parameter##word}
+        Remove largest prefix pattern.  The WORD is expanded to produce
+        a pattern.  It then expands to the value of PARAMETER, with the
+        largest portion of the prefix matched by the pattern deleted.
+
+        x=/one/two/three
+        echo ${x##*/}
+        -->three
+
+
+Given
+       a=/a/b/c/d
+       b=b.xxx
+
+       csh                     bash            result
+       ---                     ----            ------
+       $a:h                    ${a%/*}            /a/b/c
+       $a:t                    ${a##*/}           d
+       $b:r                    ${b%.*}            b
+       $b:e                    ${b##*.}           xxx
+
+
+D4) How can I make my csh aliases work when I convert to bash?
+
+Bash uses a different syntax to support aliases than csh does. 
+The details can be found in the documentation.  We have provided
+a shell script which does most of the work of conversion for you;
+this script can be found in ./examples/misc/aliasconv.sh.  Here is
+how you use it:
+  
+Start csh in the normal way for you.  (e.g., `csh')
+  
+Pipe the output of `alias' through `aliasconv.sh', saving the
+results into `bash_aliases':
+  
+       alias | bash aliasconv.sh >bash_aliases
+  
+Edit `bash_aliases', carefully reading through any created
+functions.  You will need to change the names of some csh specific
+variables to the bash equivalents.  The script converts $cwd to
+$PWD, $term to $TERM, $home to $HOME, $user to $USER, and $prompt
+to $PS1.  You may also have to add quotes to avoid unwanted
+expansion.
+
+For example, the csh alias:
+  
+       alias cd 'cd \!*; echo $cwd'
+  
+is converted to the bash function:
+
+       cd () { command cd "$@"; echo $PWD ; }
+
+The only thing that needs to be done is to quote $PWD:
+  
+       cd () { command cd "$@"; echo "$PWD" ; }
+  
+Merge the edited file into your ~/.bashrc.
+
+There is an additional, more ambitious, script in
+examples/misc/cshtobash that attempts to convert your entire csh
+environment to its bash equivalent.  This script can be run as
+simply `cshtobash' to convert your normal interactive
+environment, or as `cshtobash ~/.login' to convert your login
+environment. 
+
+D5) How can I pipe standard output and standard error from one command to
+    another, like csh does with `|&'?
+
+Use
+       command 2>&1 | command2
+
+The key is to remember that piping is performed before redirection, so
+file descriptor 1 points to the pipe when it is duplicated onto file
+descriptor 2.
+
+D6) Now that I've converted from ksh to bash, are there equivalents to
+    ksh features like autoloaded functions and the `whence' command?
+
+There are features in ksh-88 and ksh-93 that do not have direct bash
+equivalents.  Most, however, can be emulated with very little trouble.
+
+ksh-88 feature         Bash equivalent
+--------------         ---------------
+compiled-in aliases    set up aliases in .bashrc; some ksh aliases are
+                       bash builtins (hash, history, type)
+coprocesses            named pipe pairs (one for read, one for write)
+typeset +f             declare -F
+cd, print, whence      function substitutes in examples/functions/kshenv
+autoloaded functions   examples/functions/autoload is the same as typeset -fu
+read var?prompt                read -p prompt var
+
+ksh-93 feature         Bash equivalent
+--------------         ---------------
+sleep, getconf         Bash has loadable versions in examples/loadables
+${.sh.version}         $BASH_VERSION
+print -f               printf
+hist                   alias hist=fc
+$HISTEDIT              $FCEDIT
+
+Section E:  How can I get bash to do certain things, and why does bash do
+           things the way it does?
+
+E1) Why is the bash builtin `test' slightly different from /bin/test?
+
+The specific example used here is [ ! x -o x ], which is false.
+
+Bash's builtin `test' implements the Posix.2 spec, which can be
+summarized as follows (the wording is due to David Korn):
+   
+Here is the set of rules for processing test arguments.
+  
+    0 Args: False
+    1 Arg:  True iff argument is not null.
+    2 Args: If first arg is !, True iff second argument is null.
+           If first argument is unary, then true if unary test is true
+           Otherwise error.
+    3 Args: If second argument is a binary operator, do binary test of $1 $3
+           If first argument is !, negate two argument test of $2 $3
+           If first argument is `(' and third argument is `)', do the
+           one-argument test of the second argument.
+           Otherwise error.
+    4 Args: If first argument is !, negate three argument test of $2 $3 $4.
+           Otherwise unspecified
+    5 or more Args: unspecified.  (Historical shells would use their
+    current algorithm).
+   
+The operators -a and -o are considered binary operators for the purpose
+of the 3 Arg case.
+   
+As you can see, the test becomes (not (x or x)), which is false.
+
+E2) Why does bash sometimes say `Broken pipe'?
+
+If a sequence of commands appears in a pipeline, and one of the
+reading commands finishes before the writer has finished, the
+writer receives a SIGPIPE signal.  Many other shells special-case
+SIGPIPE as an exit status in the pipeline and do not report it. 
+For example, in:
+  
+      ps -aux | head
+  
+`head' can finish before `ps' writes all of its output, and ps
+will try to write on a pipe without a reader.  In that case, bash
+will print `Broken pipe' to stderr when ps is killed by a
+SIGPIPE. 
+
+You can build a version of bash that will not report SIGPIPE errors
+by uncommenting the definition of DONT_REPORT_SIGPIPE in the file
+config-top.h.
+
+E3) When I have terminal escape sequences in my prompt, why does bash
+    wrap lines at the wrong column?
+
+Readline, the line editing library that bash uses, does not know
+that the terminal escape sequences do not take up space on the
+screen.  The redisplay code assumes, unless told otherwise, that
+each character in the prompt is a `printable' character that
+takes up one character position on the screen. 
+
+You can use the bash prompt expansion facility (see the PROMPTING
+section in the manual page) to tell readline that sequences of
+characters in the prompt strings take up no screen space. 
+
+Use the \[ escape to begin a sequence of non-printing characters,
+and the \] escape to signal the end of such a sequence. 
+
+E4) If I pipe the output of a command into `read variable', why doesn't
+    the output show up in $variable when the read command finishes?
+
+This has to do with the parent-child relationship between Unix
+processes.  It affects all commands run in pipelines, not just
+simple calls to `read'.  For example, piping a command's output
+into a `while' loop that repeatedly calls `read' will result in
+the same behavior.
+
+Each element of a pipeline, even a builtin or shell function,
+runs in a separate process, a child of the shell running the
+pipeline.  A subprocess cannot affect its parent's environment. 
+When the `read' command sets the variable to the input, that
+variable is set only in the subshell, not the parent shell.  When
+the subshell exits, the value of the variable is lost. 
+
+Many pipelines that end with `read variable' can be converted
+into command substitutions, which will capture the output of
+a specified command.  The output can then be assigned to a
+variable:
+
+       grep ^gnu /usr/lib/news/active | wc -l | read ngroup
+
+can be converted into
+
+       ngroup=$(grep ^gnu /usr/lib/news/active | wc -l)
+
+This does not, unfortunately, work to split the text among
+multiple variables, as read does when given multiple variable
+arguments.  If you need to do this, you can either use the
+command substitution above to read the output into a variable
+and chop up the variable using the bash pattern removal
+expansion operators or use some variant of the following
+approach.
+
+Say /usr/local/bin/ipaddr is the following shell script:
+
+#! /bin/sh
+host `hostname` | awk '/address/ {print $NF}'
+
+Instead of using
+
+       /usr/local/bin/ipaddr | read A B C D
+
+to break the local machine's IP address into separate octets, use
+
+       OIFS="$IFS"
+       IFS=.
+       set -- $(/usr/local/bin/ipaddr)
+       IFS="$OIFS"
+       A="$1" B="$2" C="$3" D="$4"
+
+Beware, however, that this will change the shell's positional
+parameters.  If you need them, you should save them before doing
+this.
+
+This is the general approach -- in most cases you will not need to
+set $IFS to a different value.
+
+Some other user-supplied alternatives include:
+
+read A B C D << HERE
+    $(IFS=.; echo $(/usr/local/bin/ipaddr))
+HERE
+
+and, where process substitution is available,
+
+read A B C D < <(IFS=.; echo $(/usr/local/bin/ipaddr))
+
+E5) I have a bunch of shell scripts that use backslash-escaped characters
+    in arguments to `echo'.  Bash doesn't interpret these characters.  Why
+    not, and how can I make it understand them?
+
+This is the behavior of echo on most Unix System V machines.
+
+The bash builtin `echo' is modeled after the 9th Edition
+Research Unix version of `echo'.  It does not interpret
+backslash-escaped characters in its argument strings by default;
+it requires the use of the -e option to enable the
+interpretation.  The System V echo provides no way to disable the
+special characters; the bash echo has a -E option to disable
+them. 
+
+There is a configuration option that will make bash behave like
+the System V echo and interpret things like `\t' by default.  Run
+configure with the --enable-xpg-echo-default option to turn this
+on.  Be aware that this will cause some of the tests run when you
+type `make tests' to fail.
+
+There is a shell option, `xpg_echo', settable with `shopt', that will
+change the behavior of echo at runtime.  Enabling this option turns
+on expansion of backslash-escape sequences.
+
+E6) Why doesn't a while or for loop get suspended when I type ^Z?
+
+This is a consequence of how job control works on Unix.  The only
+thing that can be suspended is the process group.  This is a single
+command or pipeline of commands that the shell forks and executes.
+
+When you run a while or for loop, the only thing that the shell forks
+and executes are any commands in the while loop test and commands in
+the loop bodies.  These, therefore, are the only things that can be
+suspended when you type ^Z.
+
+If you want to be able to stop the entire loop, you need to put it
+within parentheses, which will force the loop into a subshell that
+may be stopped (and subsequently restarted) as a single unit.
+
+E7) What about empty for loops in Makefiles?
+
+It's fairly common to see constructs like this in automatically-generated
+Makefiles:
+
+SUBDIRS = @SUBDIRS@
+
+       ...
+
+subdirs-clean:
+       for d in ${SUBDIRS}; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+When SUBDIRS is empty, this results in a command like this being passed to
+bash:
+
+       for d in ; do
+               ( cd $d && ${MAKE} ${MFLAGS} clean )
+       done
+
+In versions of bash before bash-2.05a, this was a syntax error.  If the
+reserved word `in' was present, a word must follow it before the semicolon
+or newline.  The language in the manual page referring to the list of words
+being empty referred to the list after it is expanded.  These versions of
+bash required that there be at least one word following the `in' when the
+construct was parsed.
+
+The idiomatic Makefile solution is something like:
+
+SUBDIRS = @SUBDIRS@
+
+subdirs-clean:
+       subdirs=$SUBDIRS ; for d in $$subdirs; do \
+               ( cd $$d && ${MAKE} ${MFLAGS} clean ) \
+       done
+
+The latest updated POSIX standard has changed this:  the word list
+is no longer required.  Bash versions 2.05a and later accept the
+new syntax.
+
+E8) Why does the arithmetic evaluation code complain about `08'?
+
+The bash arithmetic evaluation code (used for `let', $(()), (()), and in
+other places), interprets a leading `0' in numeric constants as denoting
+an octal number, and a leading `0x' as denoting hexadecimal.  This is
+in accordance with the POSIX.2 spec, section 2.9.2.1, which states that
+arithmetic constants should be handled as signed long integers as defined
+by the ANSI/ISO C standard.
+
+The POSIX.2 interpretation committee has confirmed this:
+
+http://www.pasc.org/interps/unofficial/db/p1003.2/pasc-1003.2-173.html
+
+E9) Why does the pattern matching expression [A-Z]* match files beginning
+    with every letter except `z'?
+
+Bash-2.03, Bash-2.05 and later versions honor the current locale setting
+when processing ranges within pattern matching bracket expressions ([A-Z]). 
+This is what POSIX.2 and SUSv3/XPG6 specify. 
+
+The behavior of the matcher in bash-2.05 and later versions depends on the
+current LC_COLLATE setting.  Setting this variable to `C' or `POSIX' will
+result in the traditional behavior ([A-Z] matches all uppercase ASCII
+characters).  Many other locales, including the en_US locale (the default
+on many US versions of Linux) collate the upper and lower case letters like
+this:
+
+       AaBb...Zz
+
+which means that [A-Z] matches every letter except `z'.  Others collate like
+
+       aAbBcC...zZ
+
+which means that [A-Z] matches every letter except `a'.
+
+The portable way to specify upper case letters is [:upper:] instead of
+A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+present, locale(1).  If you have locale(1), you can use it to find
+your current locale information even if you do not have any of the
+LC_ variables set.
+
+My advice is to put
+
+       export LC_COLLATE=C
+
+into /etc/profile and inspect any shell scripts run from cron for
+constructs like [A-Z].  This will prevent things like
+
+       rm [A-Z]*
+
+from removing every file in the current directory except those beginning
+with `z' and still allow individual users to change the collation order.
+Users may put the above command into their own profiles as well, of course.
+
+E10) Why does `cd //' leave $PWD as `//'?
+
+POSIX.2, in its description of `cd', says that *three* or more leading
+slashes may be replaced with a single slash when canonicalizing the
+current working directory.
+
+This is, I presume, for historical compatibility.  Certain versions of
+Unix, and early network file systems, used paths of the form
+//hostname/path to access `path' on server `hostname'.
+
+E11) If I resize my xterm while another program is running, why doesn't bash
+     notice the change?
+
+This is another issue that deals with job control.
+
+The kernel maintains a notion of a current terminal process group.  Members
+of this process group (processes whose process group ID is equal to the
+current terminal process group ID) receive terminal-generated signals like
+SIGWINCH.  (For more details, see the JOB CONTROL section of the bash
+man page.)
+
+If a terminal is resized, the kernel sends SIGWINCH to each member of
+the terminal's current process group (the `foreground' process group).
+
+When bash is running with job control enabled, each pipeline (which may be
+a single command) is run in its own process group, different from bash's
+process group.  This foreground process group receives the SIGWINCH; bash
+does not.  Bash has no way of knowing that the terminal has been resized.
+
+There is a `checkwinsize' option, settable with the `shopt' builtin, that
+will cause bash to check the window size and adjust its idea of the
+terminal's dimensions each time a process stops or exits and returns control
+of the terminal to bash.  Enable it with `shopt -s checkwinsize'.
+
+E12) Why don't negative offsets in substring expansion work like I expect?
+
+When substring expansion of the form ${param:offset[:length} is used,
+an `offset' that evaluates to a number less than zero counts back from
+the end of the expanded value of $param.
+
+When a negative `offset' begins with a minus sign, however, unexpected things
+can happen.  Consider
+
+       a=12345678
+       echo ${a:-4}
+
+intending to print the last four characters of $a.  The problem is that
+${param:-word} already has a well-defined meaning: expand to word if the
+expanded value of param is unset or null, and $param otherwise.
+
+To use negative offsets that begin with a minus sign, separate the
+minus sign and the colon with a space.
+
+Section F:  Things to watch out for on certain Unix versions
+
+F1) Why can't I use command line editing in my `cmdtool'?
+
+The problem is `cmdtool' and bash fighting over the input.  When
+scrolling is enabled in a cmdtool window, cmdtool puts the tty in
+`raw mode' to permit command-line editing using the mouse for
+applications that cannot do it themselves.  As a result, bash and
+cmdtool each try to read keyboard input immediately, with neither
+getting enough of it to be useful.
+
+This mode also causes cmdtool to not implement many of the
+terminal functions and control sequences appearing in the
+`sun-cmd' termcap entry.  For a more complete explanation, see
+that file examples/suncmd.termcap in the bash distribution. 
+
+`xterm' is a better choice, and gets along with bash much more
+smoothly.
+
+If you must use cmdtool, you can use the termcap description in
+examples/suncmd.termcap.  Set the TERMCAP variable to the terminal
+description contained in that file, i.e.
+
+TERMCAP='Mu|sun-cmd:am:bs:km:pt:li#34:co#80:cl=^L:ce=\E[K:cd=\E[J:rs=\E[s:'
+
+Then export TERMCAP and start a new cmdtool window from that shell.
+The bash command-line editing should behave better in the new
+cmdtool.  If this works, you can put the assignment to TERMCAP
+in your bashrc file.
+
+F2) I built bash on Solaris 2.  Why do globbing expansions and filename
+    completion chop off the first few characters of each filename?
+
+This is the consequence of building bash on SunOS 5 and linking
+with the libraries in /usr/ucblib, but using the definitions
+and structures from files in /usr/include. 
+
+The actual conflict is between the dirent structure in
+/usr/include/dirent.h and the struct returned by the version of
+`readdir' in libucb.a (a 4.3-BSD style `struct direct'). 
+
+Make sure you've got /usr/ccs/bin ahead of /usr/ucb in your $PATH
+when configuring and building bash.  This will ensure that you
+use /usr/ccs/bin/cc or acc instead of /usr/ucb/cc and that you
+link with libc before libucb. 
+
+If you have installed the Sun C compiler, you may also need to
+put /usr/ccs/bin and /opt/SUNWspro/bin into your $PATH before
+/usr/ucb.
+
+F3) Why does bash dump core after I interrupt username completion or
+    `~user' tilde expansion on a machine running NIS?
+
+This is a famous and long-standing bug in the SunOS YP (sorry, NIS)
+client library, which is part of libc.
+
+The YP library code keeps static state -- a pointer into the data
+returned from the server.  When YP initializes itself (setpwent),
+it looks at this pointer and calls free on it if it's non-null. 
+So far, so good. 
+
+If one of the YP functions is interrupted during getpwent (the
+exact function is interpretwithsave()), and returns NULL, the
+pointer is freed without being reset to NULL, and the function
+returns.  The next time getpwent is called, it sees that this
+pointer is non-null, calls free, and the bash free() blows up
+because it's being asked to free freed memory. 
+
+The traditional Unix mallocs allow memory to be freed multiple
+times; that's probably why this has never been fixed.  You can
+run configure with the `--without-gnu-malloc' option to use
+the C library malloc and avoid the problem.
+
+F4) I'm running SVR4.2.  Why is the line erased every time I type `@'?
+
+The `@' character is the default `line kill' character in most
+versions of System V, including SVR4.2.  You can change this
+character to whatever you want using `stty'.  For example, to
+change the line kill character to control-u, type
+
+       stty kill ^U
+
+where the `^' and `U' can be two separate characters.
+
+F5) Why does bash report syntax errors when my C News scripts use a
+    redirection before a subshell command?
+
+The actual command in question is something like
+
+       < file ( command )
+
+According to the grammar given in the POSIX.2 standard, this construct
+is, in fact, a syntax error.  Redirections may only precede `simple
+commands'.  A subshell construct such as the above is one of the shell's
+`compound commands'.  A redirection may only follow a compound command.
+
+This affects the mechanical transformation of commands that use `cat'
+to pipe a file into a command (a favorite Useless-Use-Of-Cat topic on
+comp.unix.shell).  While most commands of the form
+
+       cat file | command
+
+can be converted to `< file command', shell control structures such as
+loops and subshells require `command < file'.
+
+The file CWRU/sh-redir-hack in the bash distribution is an
+(unofficial) patch to parse.y that will modify the grammar to
+support this construct.  It will not apply with `patch'; you must
+modify parse.y by hand.  Note that if you apply this, you must
+recompile with -DREDIRECTION_HACK.  This introduces a large
+number of reduce/reduce conflicts into the shell grammar. 
+
+F6) Why can't I use vi-mode editing on Red Hat Linux 6.1?
+
+The short answer is that Red Hat screwed up.
+
+The long answer is that they shipped an /etc/inputrc that only works
+for emacs mode editing, and then screwed all the vi users by setting
+INPUTRC to /etc/inputrc in /etc/profile.
+
+The short fix is to do one of the following: remove or rename
+/etc/inputrc, set INPUTRC=~/.inputrc in ~/.bashrc (or .bash_profile,
+but make sure you export it if you do), remove the assignment to
+INPUTRC from /etc/profile, add
+
+        set keymap emacs
+
+to the beginning of /etc/inputrc, or bracket the key bindings in
+/etc/inputrc with these lines
+
+       $if mode=emacs
+               [...]
+       $endif
+
+F7) Why do bash-2.05a and bash-2.05b fail to compile `printf.def' on
+    HP/UX 11.x?
+
+HP/UX's support for long double is imperfect at best.
+
+GCC will support it without problems, but the HP C library functions
+like strtold(3) and printf(3) don't actually work with long doubles.
+HP implemented a `long_double' type as a 4-element array of 32-bit
+ints, and that is what the library functions use.  The ANSI C
+`long double' type is a 128-bit floating point scalar.
+
+The easiest fix, until HP fixes things up, is to edit the generated
+config.h and #undef the HAVE_LONG_DOUBLE line.  After doing that,
+the compilation should complete successfully.
+
+Section G:  How can I get bash to do certain common things?
+
+G1) How can I get bash to read and display eight-bit characters?
+
+This is a process requiring several steps.
+
+First, you must ensure that the `physical' data path is a full eight
+bits.  For xterms, for example, the `vt100' resources `eightBitInput'
+and `eightBitOutput' should be set to `true'.
+
+Once you have set up an eight-bit path, you must tell the kernel and
+tty driver to leave the eighth bit of characters alone when processing
+keyboard input.  Use `stty' to do this:
+
+       stty cs8 -istrip -parenb
+
+For old BSD-style systems, you can use
+
+       stty pass8
+
+You may also need
+
+       stty even odd
+
+Finally, you need to tell readline that you will be inputting and
+displaying eight-bit characters.  You use readline variables to do
+this.  These variables can be set in your .inputrc or using the bash
+`bind' builtin.  Here's an example using `bind':
+
+       bash$ bind 'set convert-meta off'
+       bash$ bind 'set meta-flag on'
+       bash$ bind 'set output-meta on'
+
+The `set' commands between the single quotes may also be placed
+in ~/.inputrc.
+
+G2) How do I write a function `x' to replace builtin command `x', but
+    still invoke the command from within the function?
+
+This is why the `command' and `builtin' builtins exist.  The
+`command' builtin executes the command supplied as its first
+argument, skipping over any function defined with that name.  The
+`builtin' builtin executes the builtin command given as its first
+argument directly. 
+
+For example, to write a function to replace `cd' that writes the
+hostname and current directory to an xterm title bar, use
+something like the following:
+
+       cd()
+       {
+               builtin cd "$@" && xtitle "$HOST: $PWD"
+       }
+
+This could also be written using `command' instead of `builtin';
+the version above is marginally more efficient. 
+
+G3) How can I find the value of a shell variable whose name is the value
+    of another shell variable?
+
+Versions of Bash newer than Bash-2.0 support this directly.  You can use 
+
+       ${!var}
+
+For example, the following sequence of commands will echo `z':
+
+       var1=var2
+       var2=z
+       echo ${!var1}
+
+For sh compatibility, use the `eval' builtin.  The important
+thing to remember is that `eval' expands the arguments you give
+it again, so you need to quote the parts of the arguments that
+you want `eval' to act on. 
+
+For example, this expression prints the value of the last positional
+parameter:
+
+       eval echo \"\$\{$#\}\"
+
+The expansion of the quoted portions of this expression will be
+deferred until `eval' runs, while the `$#' will be expanded
+before `eval' is executed.  In versions of bash later than bash-2.0,
+
+       echo ${!#}
+
+does the same thing.
+
+This is not the same thing as ksh93 `nameref' variables, though the syntax
+is similar.  I may add namerefs in a future bash version.
+
+G4) How can I make the bash `time' reserved word print timing output that
+     looks like the output from my system's /usr/bin/time?
+
+The bash command timing code looks for a variable `TIMEFORMAT' and
+uses its value as a format string to decide how to display the
+timing statistics.
+
+The value of TIMEFORMAT is a string with `%' escapes expanded in a
+fashion similar in spirit to printf(3).  The manual page explains
+the meanings of the escape sequences in the format string.
+
+If TIMEFORMAT is not set, bash acts as if the following assignment had
+been performed:
+
+       TIMEFORMAT=$'\nreal\t%3lR\nuser\t%3lU\nsys\t%3lS'
+
+The POSIX.2 default time format (used by `time -p command') is
+
+       TIMEFORMAT=$'real %2R\nuser %2U\nsys %2S'
+
+The BSD /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\t%1R real\t%1U user\t%1S sys'
+
+The System V /usr/bin/time format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%1R\nuser\t%1U\nsys\t%1S'
+
+The ksh format can be emulated with:
+
+       TIMEFORMAT=$'\nreal\t%2lR\nuser\t%2lU\nsys\t%2lS'
+
+G5) How do I get the current directory into my prompt?
+
+Bash provides a number of backslash-escape sequences which are expanded
+when the prompt string (PS1 or PS2) is displayed.  The full list is in
+the manual page.
+
+The \w expansion gives the full pathname of the current directory, with
+a tilde (`~') substituted for the current value of $HOME.  The \W
+expansion gives the basename of the current directory.  To put the full
+pathname of the current directory into the path without any tilde
+subsitution, use $PWD.  Here are some examples:
+
+       PS1='\w$ '      # current directory with tilde
+       PS1='\W$ '      # basename of current directory
+       PS1='$PWD$ '    # full pathname of current directory
+
+The single quotes are important in the final example to prevent $PWD from
+being expanded when the assignment to PS1 is performed.
+
+G6) How can I rename "*.foo" to "*.bar"?
+
+Use the pattern removal functionality described in D3.  The following `for'
+loop will do the trick:
+
+       for f in *.foo; do
+               mv $f ${f%foo}bar
+       done
+
+G7) How can I translate a filename from uppercase to lowercase?
+
+The script examples/functions/lowercase, originally written by John DuBois,
+will do the trick.  The converse is left as an exercise.
+
+G8) How can I write a filename expansion (globbing) pattern that will match
+    all files in the current directory except "." and ".."?
+
+You must have set the `extglob' shell option using `shopt -s extglob' to use
+this:
+
+       echo .!(.|) *
+
+A solution that works without extended globbing is given in the Unix Shell
+FAQ, posted periodically to comp.unix.shell.
+
+Section H:  Where do I go from here?
+
+H1) How do I report bugs in bash, and where should I look for fixes and
+    advice?
+
+Use the `bashbug' script to report bugs.  It is built and
+installed at the same time as bash.  It provides a standard
+template for reporting a problem and automatically includes
+information about your configuration and build environment. 
+
+`bashbug' sends its reports to bug-bash@gnu.org, which
+is a large mailing list gatewayed to the usenet newsgroup gnu.bash.bug. 
+
+Bug fixes, answers to questions, and announcements of new releases
+are all posted to gnu.bash.bug.  Discussions concerning bash features
+and problems also take place there.
+
+To reach the bash maintainers directly, send mail to
+bash-maintainers@gnu.org.
+
+H2) What kind of bash documentation is there?
+
+First, look in the doc directory in the bash distribution.  It should
+contain at least the following files:
+
+bash.1         an extensive, thorough Unix-style manual page
+builtins.1     a manual page covering just bash builtin commands
+bashref.texi   a reference manual in GNU tex`info format
+bashref.info   an info version of the reference manual
+FAQ            this file
+article.ms     text of an article written for The Linux Journal
+readline.3     a man page describing readline
+
+Postscript, HTML, and ASCII files created from the above source are
+available in the documentation distribution.
+
+There is additional documentation available for anonymous FTP from host
+ftp.cwru.edu in the `pub/bash' directory.
+
+Cameron Newham and Bill Rosenblatt have written a book on bash, published
+by O'Reilly and Associates.  The book is based on Bill Rosenblatt's Korn
+Shell book.  The title is ``Learning the Bash Shell'', and the ISBN number
+is 1-56592-147-X.  Look for it in fine bookstores near you.  This book
+covers bash-1.14, but has an appendix describing some of the new features
+in bash-2.0.  
+
+A second edition of this book is available, published in January, 1998.
+The ISBN number is 1-56592-347-2.  Look for it in the same fine bookstores
+or on the web.
+
+The GNU Bash Reference Manual has been published as a printed book by
+Network Theory Ltd (Paperback, ISBN: 0-9541617-7-7, Feb 2003).  It covers
+bash-2.0 and is available from most online bookstores (see
+http://www.network-theory.co.uk/bash/manual/ for details).  The publisher
+will donate $1 to the Free Software Foundation for each copy sold. 
+
+H3) What's coming in future versions?
+
+These are features I hope to include in a future version of bash.
+
+Rocky Bernstein's bash debugger (support is included with bash-3.0)
+associative arrays
+co-processes, but with a new-style syntax that looks like function declaration
+
+H4) What's on the bash `wish list' for future versions?
+
+These are features that may or may not appear in a future version of bash.
+
+breaking some of the shell functionality into embeddable libraries
+a module system like zsh's, using dynamic loading like builtins
+a bash programmer's guide with a chapter on creating loadable builtins
+a better loadable interface to perl with access to the shell builtins and
+       variables (contributions gratefully accepted)
+ksh93-like `nameref' variables
+ksh93-like `+=' variable assignment operator
+ksh93-like `xx.yy' variables (including some of the .sh.* variables) and
+       associated disipline functions
+Some of the new ksh93 pattern matching operators, like backreferencing
+
+H5) When will the next release appear?
+
+The next version will appear sometime in 2005.  Never make predictions. 
+
+This document is Copyright 1995-2004 by Chester Ramey.
+
+Permission is hereby granted, without written agreement and
+without license or royalty fees, to use, copy, and distribute
+this document for any purpose, provided that the above copyright
+notice appears in all copies of this document and that the
+contents of this document remain unaltered.
index 18a176f..233d76b 100644 (file)
@@ -443,7 +443,7 @@ rl_redisplay ()
 {
   register int in, out, c, linenum, cursor_linenum;
   register char *line;
-  int c_pos, inv_botlin, lb_botlin, lb_linenum;
+  int c_pos, inv_botlin, lb_botlin, lb_linenum, o_cpos;
   int newlines, lpos, temp, modmark, n0, num;
   char *prompt_this_line;
 #if defined (HANDLE_MULTIBYTE)
@@ -853,7 +853,7 @@ rl_redisplay ()
 
   if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
     {
-      int nleft, pos, changed_screen_line, tx, fudge;
+      int nleft, pos, changed_screen_line, tx;
 
       if (!rl_display_fixed || forced_display)
        {
@@ -884,9 +884,23 @@ rl_redisplay ()
          /* For each line in the buffer, do the updating display. */
          for (linenum = 0; linenum <= inv_botlin; linenum++)
            {
+             o_cpos = _rl_last_c_pos;
              update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
                           VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
 
+#if 1
+             /* update_line potentially changes _rl_last_c_pos, but doesn't
+                take invisible characters into account, since _rl_last_c_pos
+                is an absolute cursor position in a multibyte locale.  See
+                if compensating here is the right thing, or if we have to
+                change update_line itself. */
+             if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+                 _rl_last_c_pos != o_cpos &&
+                 _rl_last_c_pos > wrap_offset &&
+                 o_cpos < prompt_last_invisible)
+               _rl_last_c_pos -= wrap_offset;
+#endif
+                 
              /* If this is the line with the prompt, we might need to
                 compensate for invisible characters in the new line. Do
                 this only if there is not more than one new line (which
@@ -958,7 +972,7 @@ rl_redisplay ()
 #endif
              _rl_output_some_chars (local_prompt, nleft);
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft);
+               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset;
              else
                _rl_last_c_pos = nleft;
            }
@@ -974,7 +988,6 @@ rl_redisplay ()
             multibyte locale, however, _rl_last_c_pos is an absolute cursor
             position that doesn't take invisible characters in the prompt
             into account.  We use a fudge factor to compensate. */
-         fudge = (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? wrap_offset : 0;
 
          /* Since _rl_backspace() doesn't know about invisible characters in the
             prompt, and there's no good way to tell it, we compensate for
@@ -982,16 +995,20 @@ rl_redisplay ()
          if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
            {
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               tx = _rl_col_width (&visible_line[pos], 0, nleft);
+               tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
              else
                tx = nleft;
-             if ((_rl_last_c_pos+fudge) != tx)
+             if (_rl_last_c_pos > tx)
                {
-                 _rl_backspace (_rl_last_c_pos + fudge - tx);  /* XXX */
+                 _rl_backspace (_rl_last_c_pos - tx);  /* XXX */
                  _rl_last_c_pos = tx;
                }
            }
 
+         /* We need to note that in a multibyte locale we are dealing with
+            _rl_last_c_pos as an absolute cursor position, but moving to a
+            point specified by a buffer position (NLEFT) that doesn't take
+            invisible characters into account. */
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
            _rl_move_cursor_relative (nleft, &invisible_line[pos]);
          else if (nleft != _rl_last_c_pos)
@@ -1388,7 +1405,11 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
 #endif
       _rl_output_some_chars (local_prompt, lendiff);
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+#if 0
+       _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset;
+#else
        _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+#endif
       else
        _rl_last_c_pos = lendiff;
     }
@@ -1465,7 +1486,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
                 the end.  We have invisible characters in this line.  This
                 is a dumb update. */
              _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
+             _rl_last_c_pos += col_temp;       /* XXX */
              return;
            }
          /* Copy (new) chars to screen from first diff to last match. */
@@ -1489,6 +1510,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          /* cannot insert chars, write to EOL */
          _rl_output_some_chars (nfd, temp);
          _rl_last_c_pos += col_temp;
+         /* If we're in a multibyte locale and before the last invisible char
+            in the current line (which assumes we just output some invisible
+            characters) we need to adjust _rl_last_c_pos, since it represents
+            a physical character position. */
        }
     }
   else                         /* Delete characters from line. */
@@ -1520,7 +1545,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          if (temp > 0)
            {
              _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
+             _rl_last_c_pos += col_temp;               /* XXX */
            }
          lendiff = (oe - old) - (ne - new);
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
@@ -1582,7 +1607,7 @@ rl_on_new_line_with_prompt ()
 
   l = strlen (prompt_last_line);
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);   /* XXX */
   else
     _rl_last_c_pos = l;
 
@@ -1631,6 +1656,8 @@ rl_forced_update_display ()
 }
 
 /* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+   (Well, when we don't have multibyte characters, _rl_last_c_pos is a
+   buffer index.)
    DATA is the contents of the screen line of interest; i.e., where
    the movement is being done. */
 void
@@ -1639,28 +1666,40 @@ _rl_move_cursor_relative (new, data)
      const char *data;
 {
   register int i;
+  int woff;                    /* number of invisible chars on current line */
+  int cpos, dpos;              /* current and desired cursor positions */
 
-  /* If we don't have to do anything, then return. */
+  woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+  cpos = _rl_last_c_pos;
 #if defined (HANDLE_MULTIBYTE)
   /* If we have multibyte characters, NEW is indexed by the buffer point in
      a multibyte string, but _rl_last_c_pos is the display position.  In
      this case, NEW's display position is not obvious and must be
-     calculated. */
-  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+     calculated.  We need to account for invisible characters in this line,
+     as long as we are past them and they are counted by _rl_col_width. */
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     {
-      if (_rl_last_c_pos == new)
-       return;
+      dpos = _rl_col_width (data, 0, new);
+      if (dpos > woff)
+       dpos -= woff;
     }
-  else if (_rl_last_c_pos == _rl_col_width (data, 0, new))
-    return;
-#else
-  if (_rl_last_c_pos == new) return;
+  else
 #endif
+    dpos = new;
+
+  /* If we don't have to do anything, then return. */
+  if (cpos == dpos)
+    return;
 
   /* It may be faster to output a CR, and then move forwards instead
      of moving backwards. */
   /* i == current physical cursor position. */
-  i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    i = _rl_last_c_pos;
+  else
+#endif
+  i = _rl_last_c_pos - woff;
   if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
       (_rl_term_autowrap && i == _rl_screenwidth))
     {
@@ -1669,10 +1708,10 @@ _rl_move_cursor_relative (new, data)
 #else
       tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif /* !__MSDOS__ */
-      _rl_last_c_pos = 0;
+      cpos = _rl_last_c_pos = 0;
     }
 
-  if (_rl_last_c_pos < new)
+  if (cpos < dpos)
     {
       /* Move the cursor forward.  We do it by printing the command
         to move the cursor forward if there is one, else print that
@@ -1686,31 +1725,11 @@ _rl_move_cursor_relative (new, data)
 #if defined (HACK_TERMCAP_MOTION)
       if (_rl_term_forward_char)
        {
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {
-             int width;
-             width = _rl_col_width (data, _rl_last_c_pos, new);
-             for (i = 0; i < width; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-         else
-           {
-             for (i = _rl_last_c_pos; i < new; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-       }
-      else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       {
-         tputs (_rl_term_cr, 1, _rl_output_character_function);
-         for (i = 0; i < new; i++)
-           putc (data[i], rl_outstream);
+         for (i = cpos; i < dpos; i++)
+           tputs (_rl_term_forward_char, 1, _rl_output_character_function);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
-         putc (data[i], rl_outstream);
-
-#else /* !HACK_TERMCAP_MOTION */
-
+#endif /* HACK_TERMCAP_MOTION */
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        {
          tputs (_rl_term_cr, 1, _rl_output_character_function);
@@ -1718,32 +1737,20 @@ _rl_move_cursor_relative (new, data)
            putc (data[i], rl_outstream);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
+       for (i = cpos; i < new; i++)
          putc (data[i], rl_outstream);
-
-#endif /* !HACK_TERMCAP_MOTION */
-
     }
+
 #if defined (HANDLE_MULTIBYTE)
   /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
      The byte length of the string is probably bigger than the column width
      of the string, which means that if NEW == _rl_last_c_pos, then NEW's
      display point is less than _rl_last_c_pos. */
-  else if (_rl_last_c_pos >= new)
-#else
-  else if (_rl_last_c_pos > new)
 #endif
-    {
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
-      else
-       _rl_backspace (_rl_last_c_pos - new);
-    }
+  else if (cpos > dpos)
+    _rl_backspace (cpos - dpos);
 
-  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos =  _rl_col_width (data, 0, new);
-  else
-    _rl_last_c_pos = new;
+  _rl_last_c_pos = dpos;
 }
 
 /* PWP: move the cursor up or down. */
index 0ff428e..18a176f 100644 (file)
@@ -1,6 +1,6 @@
 /* display.c -- readline redisplay facility. */
 
-/* Copyright (C) 1987-2004 Free Software Foundation, Inc.
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
 
    This file is part of the GNU Readline Library, a library for
    reading lines of text with interactive input and history editing.
@@ -118,13 +118,19 @@ rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
 int rl_display_fixed = 0;
 
 int _rl_suppress_redisplay = 0;
+int _rl_want_redisplay = 0;
 
 /* The stuff that gets printed out before the actual text of the line.
    This is usually pointing to rl_prompt. */
 char *rl_display_prompt = (char *)NULL;
 
 /* Pseudo-global variables declared here. */
+
 /* The visible cursor position.  If you print some text, adjust this. */
+/* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale
+   supporting multibyte characters, and an absolute cursor position when
+   in such a locale.  This is an artifact of the donated multibyte support.
+   Care must be taken when modifying its value. */
 int _rl_last_c_pos = 0;
 int _rl_last_v_pos = 0;
 
@@ -180,6 +186,18 @@ static int prompt_last_screen_line;
 
 static int prompt_physical_chars;
 
+/* Variables to save and restore prompt and display information. */
+
+/* These are getting numerous enough that it's time to create a struct. */
+
+static char *saved_local_prompt;
+static char *saved_local_prefix;
+static int saved_last_invisible;
+static int saved_visible_length;
+static int saved_prefix_length;
+static int saved_invis_chars_first_line;
+static int saved_physical_chars;
+
 /* Expand the prompt string S and return the number of visible
    characters in *LP, if LP is not null.  This is currently more-or-less
    a placeholder for expansion.  LIP, if non-null is a place to store the
@@ -201,7 +219,7 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
      int *lp, *lip, *niflp, *vlp;
 {
   char *r, *ret, *p;
-  int l, rl, last, ignoring, ninvis, invfl, ind, pind, physchars;
+  int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
 
   /* Short-circuit if we can. */
   if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
@@ -222,6 +240,7 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
   r = ret = (char *)xmalloc (l + 1);
 
   invfl = 0;   /* invisible chars in first line of prompt */
+  invflset = 0;        /* we only want to set invfl once */
 
   for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
     {
@@ -235,7 +254,8 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
       else if (ignoring && *p == RL_PROMPT_END_IGNORE)
        {
          ignoring = 0;
-         last = r - ret - 1;
+         if (p[-1] != RL_PROMPT_START_IGNORE)
+           last = r - ret - 1;
          continue;
        }
       else
@@ -249,7 +269,10 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
              while (l--)
                *r++ = *p++;
              if (!ignoring)
-               rl += ind - pind;
+               {
+                 rl += ind - pind;
+                 physchars += _rl_col_width (pmt, pind, ind);
+               }
              else
                ninvis += ind - pind;
              p--;                      /* compensate for later increment */
@@ -259,16 +282,19 @@ expand_prompt (pmt, lp, lip, niflp, vlp)
            {
              *r++ = *p;
              if (!ignoring)
-               rl++;                   /* visible length byte counter */
+               {
+                 rl++;                 /* visible length byte counter */
+                 physchars++;
+               }
              else
                ninvis++;               /* invisible chars byte counter */
            }
 
-         if (rl >= _rl_screenwidth)
-           invfl = ninvis;
-
-         if (ignoring == 0)
-           physchars++;
+         if (invflset == 0 && rl >= _rl_screenwidth)
+           {
+             invfl = ninvis;
+             invflset = 1;
+           }
        }
     }
 
@@ -328,7 +354,8 @@ rl_expand_prompt (prompt)
   FREE (local_prompt_prefix);
 
   local_prompt = local_prompt_prefix = (char *)0;
-  prompt_last_invisible = prompt_visible_length = 0;
+  prompt_last_invisible = prompt_invis_chars_first_line = 0;
+  prompt_visible_length = prompt_physical_chars = 0;
 
   if (prompt == 0 || *prompt == 0)
     return (0);
@@ -351,14 +378,14 @@ rl_expand_prompt (prompt)
       local_prompt = expand_prompt (p, &prompt_visible_length,
                                       &prompt_last_invisible,
                                       (int *)NULL,
-                                      (int *)NULL);
+                                      &prompt_physical_chars);
       c = *t; *t = '\0';
       /* The portion of the prompt string up to and including the
         final newline is now null-terminated. */
       local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
                                                   (int *)NULL,
                                                   &prompt_invis_chars_first_line,
-                                                  &prompt_physical_chars);
+                                                  (int *)NULL);
       *t = c;
       return (prompt_prefix_length);
     }
@@ -417,7 +444,7 @@ rl_redisplay ()
   register int in, out, c, linenum, cursor_linenum;
   register char *line;
   int c_pos, inv_botlin, lb_botlin, lb_linenum;
-  int newlines, lpos, temp, modmark;
+  int newlines, lpos, temp, modmark, n0, num;
   char *prompt_this_line;
 #if defined (HANDLE_MULTIBYTE)
   wchar_t wc;
@@ -433,7 +460,7 @@ rl_redisplay ()
   if (!rl_display_prompt)
     rl_display_prompt = "";
 
-  if (invisible_line == 0)
+  if (invisible_line == 0 || vis_lbreaks == 0)
     {
       init_line_structures (0);
       rl_on_new_line ();
@@ -573,6 +600,7 @@ rl_redisplay ()
 
 #if defined (HANDLE_MULTIBYTE)
   memset (_rl_wrapped_line, 0, vis_lbsize);
+  num = 0;
 #endif
 
   /* prompt_invis_chars_first_line is the number of invisible characters in
@@ -591,13 +619,32 @@ rl_redisplay ()
          probably too much work for the benefit gained.  How many people have
          prompts that exceed two physical lines?
          Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
+#if defined (HANDLE_MULTIBYTE)
+      n0 = num;
+      temp = local_prompt ? strlen (local_prompt) : 0;
+      while (num < temp)
+       {
+         if (_rl_col_width  (local_prompt, n0, num) > _rl_screenwidth)
+           {
+             num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY);
+             break;
+           }
+         num++;
+       }
+      temp = num +
+#else
       temp = ((newlines + 1) * _rl_screenwidth) +
+#endif /* !HANDLE_MULTIBYTE */
              ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
                                                            : ((newlines == 1) ? wrap_offset : 0))
                                         : ((newlines == 0) ? wrap_offset :0));
              
       inv_lbreaks[++newlines] = temp;
+#if defined (HANDLE_MULTIBYTE)
+      lpos -= _rl_col_width (local_prompt, n0, num);
+#else
       lpos -= _rl_screenwidth;
+#endif
     }
 
   prompt_last_screen_line = newlines;
@@ -806,7 +853,7 @@ rl_redisplay ()
 
   if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
     {
-      int nleft, pos, changed_screen_line;
+      int nleft, pos, changed_screen_line, tx, fudge;
 
       if (!rl_display_fixed || forced_display)
        {
@@ -851,7 +898,10 @@ rl_redisplay ()
                  (wrap_offset > visible_wrap_offset) &&
                  (_rl_last_c_pos < visible_first_line_len))
                {
-                 nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+                 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+                   nleft = _rl_screenwidth - _rl_last_c_pos;
+                 else
+                   nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
                  if (nleft)
                    _rl_clear_to_eol (nleft);
                }
@@ -887,7 +937,7 @@ rl_redisplay ()
                 the physical cursor position on the screen stays the same,
                 but the buffer position needs to be adjusted to account
                 for invisible characters. */
-             if (cursor_linenum == 0 && wrap_offset)
+             if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset)
                _rl_last_c_pos += wrap_offset;
            }
 
@@ -920,16 +970,26 @@ rl_redisplay ()
             start of the line and the cursor position. */
          nleft = c_pos - pos;
 
+         /* NLEFT is now a number of characters in a buffer.  When in a
+            multibyte locale, however, _rl_last_c_pos is an absolute cursor
+            position that doesn't take invisible characters in the prompt
+            into account.  We use a fudge factor to compensate. */
+         fudge = (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? wrap_offset : 0;
+
          /* Since _rl_backspace() doesn't know about invisible characters in the
             prompt, and there's no good way to tell it, we compensate for
             those characters here and call _rl_backspace() directly. */
          if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
            {
-             _rl_backspace (_rl_last_c_pos - nleft);
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               _rl_last_c_pos = _rl_col_width (&visible_line[pos], 0, nleft);
+               tx = _rl_col_width (&visible_line[pos], 0, nleft);
              else
-               _rl_last_c_pos = nleft;
+               tx = nleft;
+             if ((_rl_last_c_pos+fudge) != tx)
+               {
+                 _rl_backspace (_rl_last_c_pos + fudge - tx);  /* XXX */
+                 _rl_last_c_pos = tx;
+               }
            }
 
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
@@ -1090,7 +1150,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
      the exact cursor position and cut-and-paste with certain terminal
      emulators.  In this calculation, TEMP is the physical screen
      position of the cursor. */
-  temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    temp = _rl_last_c_pos;
+  else
+    temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
   if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
        && _rl_last_v_pos == current_line - 1)
     {
@@ -1296,7 +1359,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
   if (_rl_last_v_pos != current_line)
     {
       _rl_move_vert (current_line);
-      if (current_line == 0 && visible_wrap_offset)
+      if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
        _rl_last_c_pos += visible_wrap_offset;
     }
 
@@ -1387,7 +1450,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
              insert_some_chars (nfd, lendiff, col_lendiff);
              _rl_last_c_pos += col_lendiff;
            }
-         else if (*ols == 0 && lendiff > 0)
+         else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0)
            {
              /* At the end of a line the characters do not have to
                 be "inserted".  They can just be placed on the screen. */
@@ -1769,9 +1832,9 @@ rl_character_len (c, pos)
 
   return ((ISPRINT (uc)) ? 1 : 2);
 }
-
 /* How to print things in the "echo-area".  The prompt is treated as a
    mini-modeline. */
+static int msg_saved_prompt = 0;
 
 #if defined (USE_VARARGS)
 int
@@ -1802,8 +1865,19 @@ rl_message (va_alist)
 #endif
   va_end (args);
 
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
   rl_display_prompt = msg_buf;
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
   (*rl_redisplay_function) ();
+
   return 0;
 }
 #else /* !USE_VARARGS */
@@ -1813,8 +1887,20 @@ rl_message (format, arg1, arg2)
 {
   sprintf (msg_buf, format, arg1, arg2);
   msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+
   rl_display_prompt = msg_buf;
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
   (*rl_redisplay_function) ();
+      
   return 0;
 }
 #endif /* !USE_VARARGS */
@@ -1824,6 +1910,11 @@ int
 rl_clear_message ()
 {
   rl_display_prompt = rl_prompt;
+  if (msg_saved_prompt)
+    {
+      rl_restore_prompt ();
+      msg_saved_prompt = 0;
+    }
   (*rl_redisplay_function) ();
   return 0;
 }
@@ -1838,27 +1929,19 @@ rl_reset_line_state ()
   return 0;
 }
 
-/* These are getting numerous enough that it's time to create a struct. */
-
-static char *saved_local_prompt;
-static char *saved_local_prefix;
-static int saved_last_invisible;
-static int saved_visible_length;
-static int saved_invis_chars_first_line;
-static int saved_physical_chars;
-
 void
 rl_save_prompt ()
 {
   saved_local_prompt = local_prompt;
   saved_local_prefix = local_prompt_prefix;
+  saved_prefix_length = prompt_prefix_length;
   saved_last_invisible = prompt_last_invisible;
   saved_visible_length = prompt_visible_length;
   saved_invis_chars_first_line = prompt_invis_chars_first_line;
   saved_physical_chars = prompt_physical_chars;
 
   local_prompt = local_prompt_prefix = (char *)0;
-  prompt_last_invisible = prompt_visible_length = 0;
+  prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0;
   prompt_invis_chars_first_line = prompt_physical_chars = 0;
 }
 
@@ -1870,10 +1953,16 @@ rl_restore_prompt ()
 
   local_prompt = saved_local_prompt;
   local_prompt_prefix = saved_local_prefix;
+  prompt_prefix_length = saved_prefix_length;
   prompt_last_invisible = saved_last_invisible;
   prompt_visible_length = saved_visible_length;
   prompt_invis_chars_first_line = saved_invis_chars_first_line;
   prompt_physical_chars = saved_physical_chars;
+
+  /* can test saved_local_prompt to see if prompt info has been saved. */
+  saved_local_prompt = saved_local_prefix = (char *)0;
+  saved_last_invisible = saved_visible_length = saved_prefix_length = 0;
+  saved_invis_chars_first_line = saved_physical_chars = 0;
 }
 
 char *
@@ -1907,6 +1996,8 @@ _rl_make_prompt_for_search (pchar)
       prompt_visible_length = saved_visible_length + 1;
     }
 
+  prompt_physical_chars = saved_physical_chars + 1;
+
   return pmt;
 }
 
@@ -1967,6 +2058,9 @@ insert_some_chars (string, count, col)
      char *string;
      int count, col;
 {
+#if defined (__MSDOS__) || defined (__MINGW32__)
+  _rl_output_some_chars (string, count);
+#else
   /* DEBUGGING */
   if (MB_CUR_MAX == 1 || rl_byte_oriented)
     if (count != col)
@@ -2005,6 +2099,7 @@ insert_some_chars (string, count, col)
       if (_rl_term_ei && *_rl_term_ei)
        tputs (_rl_term_ei, 1, _rl_output_character_function);
     }
+#endif /* __MSDOS__ || __MINGW32__ */
 }
 
 /* Delete COUNT characters from the display line. */
@@ -2015,6 +2110,7 @@ delete_chars (count)
   if (count > _rl_screenwidth) /* XXX */
     return;
 
+#if !defined (__MSDOS__) && !defined (__MINGW32__)
   if (_rl_term_DC && *_rl_term_DC)
     {
       char *buffer;
@@ -2027,6 +2123,7 @@ delete_chars (count)
        while (count--)
          tputs (_rl_term_dc, 1, _rl_output_character_function);
     }
+#endif /* !__MSDOS__ && !__MINGW32__ */
 }
 
 void
@@ -2082,18 +2179,10 @@ static void
 redraw_prompt (t)
      char *t;
 {
-  char *oldp, *oldl, *oldlprefix;
-  int oldlen, oldlast, oldplen, oldninvis, oldphyschars;
+  char *oldp;
 
-  /* Geez, I should make this a struct. */
   oldp = rl_display_prompt;
-  oldl = local_prompt;
-  oldlprefix = local_prompt_prefix;
-  oldlen = prompt_visible_length;
-  oldplen = prompt_prefix_length;
-  oldlast = prompt_last_invisible;
-  oldninvis = prompt_invis_chars_first_line;
-  oldphyschars = prompt_physical_chars;
+  rl_save_prompt ();
 
   rl_display_prompt = t;
   local_prompt = expand_prompt (t, &prompt_visible_length,
@@ -2101,16 +2190,11 @@ redraw_prompt (t)
                                   &prompt_invis_chars_first_line,
                                   &prompt_physical_chars);
   local_prompt_prefix = (char *)NULL;
+
   rl_forced_update_display ();
 
   rl_display_prompt = oldp;
-  local_prompt = oldl;
-  local_prompt_prefix = oldlprefix;
-  prompt_visible_length = oldlen;
-  prompt_prefix_length = oldplen;
-  prompt_last_invisible = oldlast;
-  prompt_invis_chars_first_line = oldninvis;
-  prompt_physical_chars = oldphyschars;
+  rl_restore_prompt();
 }
       
 /* Redisplay the current line after a SIGWINCH is received. */
diff --git a/lib/readline/display.c.save b/lib/readline/display.c.save
new file mode 100644 (file)
index 0000000..9046530
--- /dev/null
@@ -0,0 +1,2373 @@
+/* display.c -- readline redisplay facility. */
+
+/* Copyright (C) 1987-2005 Free Software Foundation, Inc.
+
+   This file is part of the GNU Readline Library, a library for
+   reading lines of text with interactive input and history editing.
+
+   The GNU Readline Library is free software; you can redistribute it
+   and/or modify it under the terms of the GNU General Public License
+   as published by the Free Software Foundation; either version 2, or
+   (at your option) any later version.
+
+   The GNU Readline Library is distributed in the hope that it will be
+   useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+   of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   The GNU General Public License is often shipped with GNU software, and
+   is generally kept in a file called COPYING or LICENSE.  If you do not
+   have a copy of the license, write to the Free Software Foundation,
+   59 Temple Place, Suite 330, Boston, MA 02111 USA. */
+#define READLINE_LIBRARY
+
+#if defined (HAVE_CONFIG_H)
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+
+#if defined (HAVE_UNISTD_H)
+#  include <unistd.h>
+#endif /* HAVE_UNISTD_H */
+
+#include "posixstat.h"
+
+#if defined (HAVE_STDLIB_H)
+#  include <stdlib.h>
+#else
+#  include "ansi_stdlib.h"
+#endif /* HAVE_STDLIB_H */
+
+#include <stdio.h>
+
+/* System-specific feature definitions and include files. */
+#include "rldefs.h"
+#include "rlmbutil.h"
+
+/* Termcap library stuff. */
+#include "tcap.h"
+
+/* Some standard library routines. */
+#include "readline.h"
+#include "history.h"
+
+#include "rlprivate.h"
+#include "xmalloc.h"
+
+#if !defined (strchr) && !defined (__STDC__)
+extern char *strchr (), *strrchr ();
+#endif /* !strchr && !__STDC__ */
+
+#if defined (HACK_TERMCAP_MOTION)
+extern char *_rl_term_forward_char;
+#endif
+
+static void update_line PARAMS((char *, char *, int, int, int, int));
+static void space_to_eol PARAMS((int));
+static void delete_chars PARAMS((int));
+static void insert_some_chars PARAMS((char *, int, int));
+static void cr PARAMS((void));
+
+#if defined (HANDLE_MULTIBYTE)
+static int _rl_col_width PARAMS((const char *, int, int));
+static int *_rl_wrapped_line;
+#else
+#  define _rl_col_width(l, s, e)       (((e) <= (s)) ? 0 : (e) - (s))
+#endif
+
+static int *inv_lbreaks, *vis_lbreaks;
+static int inv_lbsize, vis_lbsize;
+
+/* Heuristic used to decide whether it is faster to move from CUR to NEW
+   by backing up or outputting a carriage return and moving forward. */
+#define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new)))
+
+/* **************************************************************** */
+/*                                                                 */
+/*                     Display stuff                               */
+/*                                                                 */
+/* **************************************************************** */
+
+/* This is the stuff that is hard for me.  I never seem to write good
+   display routines in C.  Let's see how I do this time. */
+
+/* (PWP) Well... Good for a simple line updater, but totally ignores
+   the problems of input lines longer than the screen width.
+
+   update_line and the code that calls it makes a multiple line,
+   automatically wrapping line update.  Careful attention needs
+   to be paid to the vertical position variables. */
+
+/* Keep two buffers; one which reflects the current contents of the
+   screen, and the other to draw what we think the new contents should
+   be.  Then compare the buffers, and make whatever changes to the
+   screen itself that we should.  Finally, make the buffer that we
+   just drew into be the one which reflects the current contents of the
+   screen, and place the cursor where it belongs.
+
+   Commands that want to can fix the display themselves, and then let
+   this function know that the display has been fixed by setting the
+   RL_DISPLAY_FIXED variable.  This is good for efficiency. */
+
+/* Application-specific redisplay function. */
+rl_voidfunc_t *rl_redisplay_function = rl_redisplay;
+
+/* Global variables declared here. */
+/* What YOU turn on when you have handled all redisplay yourself. */
+int rl_display_fixed = 0;
+
+int _rl_suppress_redisplay = 0;
+int _rl_want_redisplay = 0;
+
+/* The stuff that gets printed out before the actual text of the line.
+   This is usually pointing to rl_prompt. */
+char *rl_display_prompt = (char *)NULL;
+
+/* Pseudo-global variables declared here. */
+
+/* The visible cursor position.  If you print some text, adjust this. */
+/* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale
+   supporting multibyte characters, and an absolute cursor position when
+   in such a locale.  This is an artifact of the donated multibyte support.
+   Care must be taken when modifying its value. */
+int _rl_last_c_pos = 0;
+int _rl_last_v_pos = 0;
+
+/* Number of lines currently on screen minus 1. */
+int _rl_vis_botlin = 0;
+
+/* Variables used only in this file. */
+/* The last left edge of text that was displayed.  This is used when
+   doing horizontal scrolling.  It shifts in thirds of a screenwidth. */
+static int last_lmargin;
+
+/* The line display buffers.  One is the line currently displayed on
+   the screen.  The other is the line about to be displayed. */
+static char *visible_line = (char *)NULL;
+static char *invisible_line = (char *)NULL;
+
+/* A buffer for `modeline' messages. */
+static char msg_buf[128];
+
+/* Non-zero forces the redisplay even if we thought it was unnecessary. */
+static int forced_display;
+
+/* Default and initial buffer size.  Can grow. */
+static int line_size = 1024;
+
+/* Variables to keep track of the expanded prompt string, which may
+   include invisible characters. */
+
+static char *local_prompt, *local_prompt_prefix;
+static int prompt_visible_length, prompt_prefix_length;
+
+/* The number of invisible characters in the line currently being
+   displayed on the screen. */
+static int visible_wrap_offset;
+
+/* The number of invisible characters in the prompt string.  Static so it
+   can be shared between rl_redisplay and update_line */
+static int wrap_offset;
+
+/* The index of the last invisible character in the prompt string. */
+static int prompt_last_invisible;
+
+/* The length (buffer offset) of the first line of the last (possibly
+   multi-line) buffer displayed on the screen. */
+static int visible_first_line_len;
+
+/* Number of invisible characters on the first physical line of the prompt.
+   Only valid when the number of physical characters in the prompt exceeds
+   (or is equal to) _rl_screenwidth. */
+static int prompt_invis_chars_first_line;
+
+static int prompt_last_screen_line;
+
+static int prompt_physical_chars;
+
+/* Variables to save and restore prompt and display information. */
+
+/* These are getting numerous enough that it's time to create a struct. */
+
+static char *saved_local_prompt;
+static char *saved_local_prefix;
+static int saved_last_invisible;
+static int saved_visible_length;
+static int saved_prefix_length;
+static int saved_invis_chars_first_line;
+static int saved_physical_chars;
+
+/* Expand the prompt string S and return the number of visible
+   characters in *LP, if LP is not null.  This is currently more-or-less
+   a placeholder for expansion.  LIP, if non-null is a place to store the
+   index of the last invisible character in the returned string. NIFLP,
+   if non-zero, is a place to store the number of invisible characters in
+   the first prompt line.  The previous are used as byte counts -- indexes
+   into a character buffer. */
+
+/* Current implementation:
+       \001 (^A) start non-visible characters
+       \002 (^B) end non-visible characters
+   all characters except \001 and \002 (following a \001) are copied to
+   the returned string; all characters except those between \001 and
+   \002 are assumed to be `visible'. */        
+
+static char *
+expand_prompt (pmt, lp, lip, niflp, vlp)
+     char *pmt;
+     int *lp, *lip, *niflp, *vlp;
+{
+  char *r, *ret, *p;
+  int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars;
+
+  /* Short-circuit if we can. */
+  if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (pmt, RL_PROMPT_START_IGNORE) == 0)
+    {
+      r = savestring (pmt);
+      if (lp)
+       *lp = strlen (r);
+      if (lip)
+       *lip = 0;
+      if (niflp)
+       *niflp = 0;
+      if (vlp)
+       *vlp = lp ? *lp : strlen (r);
+      return r;
+    }
+
+  l = strlen (pmt);
+  r = ret = (char *)xmalloc (l + 1);
+
+  invfl = 0;   /* invisible chars in first line of prompt */
+  invflset = 0;        /* we only want to set invfl once */
+
+  for (rl = ignoring = last = ninvis = physchars = 0, p = pmt; p && *p; p++)
+    {
+      /* This code strips the invisible character string markers
+        RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */
+      if (*p == RL_PROMPT_START_IGNORE)
+       {
+         ignoring++;
+         continue;
+       }
+      else if (ignoring && *p == RL_PROMPT_END_IGNORE)
+       {
+         ignoring = 0;
+         if (p[-1] != RL_PROMPT_START_IGNORE)
+           last = r - ret - 1;
+         continue;
+       }
+      else
+       {
+#if defined (HANDLE_MULTIBYTE)
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           {
+             pind = p - pmt;
+             ind = _rl_find_next_mbchar (pmt, pind, 1, MB_FIND_NONZERO);
+             l = ind - pind;
+             while (l--)
+               *r++ = *p++;
+             if (!ignoring)
+               {
+                 rl += ind - pind;
+                 physchars += _rl_col_width (pmt, pind, ind);
+               }
+             else
+               ninvis += ind - pind;
+             p--;                      /* compensate for later increment */
+           }
+         else
+#endif
+           {
+             *r++ = *p;
+             if (!ignoring)
+               {
+                 rl++;                 /* visible length byte counter */
+                 physchars++;
+               }
+             else
+               ninvis++;               /* invisible chars byte counter */
+           }
+
+         if (invflset == 0 && rl >= _rl_screenwidth)
+           {
+             invfl = ninvis;
+             invflset = 1;
+           }
+       }
+    }
+
+  if (rl < _rl_screenwidth)
+    invfl = ninvis;
+
+  *r = '\0';
+  if (lp)
+    *lp = rl;
+  if (lip)
+    *lip = last;
+  if (niflp)
+    *niflp = invfl;
+  if  (vlp)
+    *vlp = physchars;
+  return ret;
+}
+
+/* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from
+   PMT and return the rest of PMT. */
+char *
+_rl_strip_prompt (pmt)
+     char *pmt;
+{
+  char *ret;
+
+  ret = expand_prompt (pmt, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL);
+  return ret;
+}
+
+/*
+ * Expand the prompt string into the various display components, if
+ * necessary.
+ *
+ * local_prompt = expanded last line of string in rl_display_prompt
+ *               (portion after the final newline)
+ * local_prompt_prefix = portion before last newline of rl_display_prompt,
+ *                      expanded via expand_prompt
+ * prompt_visible_length = number of visible characters in local_prompt
+ * prompt_prefix_length = number of visible characters in local_prompt_prefix
+ *
+ * This function is called once per call to readline().  It may also be
+ * called arbitrarily to expand the primary prompt.
+ *
+ * The return value is the number of visible characters on the last line
+ * of the (possibly multi-line) prompt.
+ */
+int
+rl_expand_prompt (prompt)
+     char *prompt;
+{
+  char *p, *t;
+  int c;
+
+  /* Clear out any saved values. */
+  FREE (local_prompt);
+  FREE (local_prompt_prefix);
+
+  local_prompt = local_prompt_prefix = (char *)0;
+  prompt_last_invisible = prompt_invis_chars_first_line = 0;
+  prompt_visible_length = prompt_physical_chars = 0;
+
+  if (prompt == 0 || *prompt == 0)
+    return (0);
+
+  p = strrchr (prompt, '\n');
+  if (!p)
+    {
+      /* The prompt is only one logical line, though it might wrap. */
+      local_prompt = expand_prompt (prompt, &prompt_visible_length,
+                                           &prompt_last_invisible,
+                                           &prompt_invis_chars_first_line,
+                                           &prompt_physical_chars);
+      local_prompt_prefix = (char *)0;
+      return (prompt_visible_length);
+    }
+  else
+    {
+      /* The prompt spans multiple lines. */
+      t = ++p;
+      local_prompt = expand_prompt (p, &prompt_visible_length,
+                                      &prompt_last_invisible,
+                                      (int *)NULL,
+                                      &prompt_physical_chars);
+      c = *t; *t = '\0';
+      /* The portion of the prompt string up to and including the
+        final newline is now null-terminated. */
+      local_prompt_prefix = expand_prompt (prompt, &prompt_prefix_length,
+                                                  (int *)NULL,
+                                                  &prompt_invis_chars_first_line,
+                                                  (int *)NULL);
+      *t = c;
+      return (prompt_prefix_length);
+    }
+}
+
+/* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated
+   arrays of line break markers.  MINSIZE is the minimum size of VISIBLE_LINE
+   and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is
+   increased.  If the lines have already been allocated, this ensures that
+   they can hold at least MINSIZE characters. */
+static void
+init_line_structures (minsize)
+      int minsize;
+{
+  register int n;
+
+  if (invisible_line == 0)     /* initialize it */
+    {
+      if (line_size < minsize)
+       line_size = minsize;
+      visible_line = (char *)xmalloc (line_size);
+      invisible_line = (char *)xmalloc (line_size);
+    }
+  else if (line_size < minsize)        /* ensure it can hold MINSIZE chars */
+    {
+      line_size *= 2;
+      if (line_size < minsize)
+       line_size = minsize;
+      visible_line = (char *)xrealloc (visible_line, line_size);
+      invisible_line = (char *)xrealloc (invisible_line, line_size);
+    }
+
+  for (n = minsize; n < line_size; n++)
+    {
+      visible_line[n] = 0;
+      invisible_line[n] = 1;
+    }
+
+  if (vis_lbreaks == 0)
+    {
+      /* should be enough. */
+      inv_lbsize = vis_lbsize = 256;
+      inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int));
+      vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int));
+#if defined (HANDLE_MULTIBYTE)
+      _rl_wrapped_line = (int *)xmalloc (vis_lbsize * sizeof (int));
+#endif
+      inv_lbreaks[0] = vis_lbreaks[0] = 0;
+    }
+}
+  
+/* Basic redisplay algorithm. */
+void
+rl_redisplay ()
+{
+  register int in, out, c, linenum, cursor_linenum;
+  register char *line;
+  int c_pos, inv_botlin, lb_botlin, lb_linenum, o_cpos;
+  int newlines, lpos, temp, modmark, n0, num;
+  char *prompt_this_line;
+#if defined (HANDLE_MULTIBYTE)
+  wchar_t wc;
+  size_t wc_bytes;
+  int wc_width;
+  mbstate_t ps;
+  int _rl_wrapped_multicolumn = 0;
+#endif
+
+  if (!readline_echoing_p)
+    return;
+
+  if (!rl_display_prompt)
+    rl_display_prompt = "";
+
+  if (invisible_line == 0 || vis_lbreaks == 0)
+    {
+      init_line_structures (0);
+      rl_on_new_line ();
+    }
+
+  /* Draw the line into the buffer. */
+  c_pos = -1;
+
+  line = invisible_line;
+  out = inv_botlin = 0;
+
+  /* Mark the line as modified or not.  We only do this for history
+     lines. */
+  modmark = 0;
+  if (_rl_mark_modified_lines && current_history () && rl_undo_list)
+    {
+      line[out++] = '*';
+      line[out] = '\0';
+      modmark = 1;
+    }
+
+  /* If someone thought that the redisplay was handled, but the currently
+     visible line has a different modification state than the one about
+     to become visible, then correct the caller's misconception. */
+  if (visible_line[0] != invisible_line[0])
+    rl_display_fixed = 0;
+
+  /* If the prompt to be displayed is the `primary' readline prompt (the
+     one passed to readline()), use the values we have already expanded.
+     If not, use what's already in rl_display_prompt.  WRAP_OFFSET is the
+     number of non-visible characters in the prompt string. */
+  if (rl_display_prompt == rl_prompt || local_prompt)
+    {
+      int local_len = local_prompt ? strlen (local_prompt) : 0;
+      if (local_prompt_prefix && forced_display)
+       _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix));
+
+      if (local_len > 0)
+       {
+         temp = local_len + out + 2;
+         if (temp >= line_size)
+           {
+             line_size = (temp + 1024) - (temp % 1024);
+             visible_line = (char *)xrealloc (visible_line, line_size);
+             line = invisible_line = (char *)xrealloc (invisible_line, line_size);
+           }
+         strncpy (line + out, local_prompt, local_len);
+         out += local_len;
+       }
+      line[out] = '\0';
+      wrap_offset = local_len - prompt_visible_length;
+    }
+  else
+    {
+      int pmtlen;
+      prompt_this_line = strrchr (rl_display_prompt, '\n');
+      if (!prompt_this_line)
+       prompt_this_line = rl_display_prompt;
+      else
+       {
+         prompt_this_line++;
+         pmtlen = prompt_this_line - rl_display_prompt;        /* temp var */
+         if (forced_display)
+           {
+             _rl_output_some_chars (rl_display_prompt, pmtlen);
+             /* Make sure we are at column zero even after a newline,
+                regardless of the state of terminal output processing. */
+             if (pmtlen < 2 || prompt_this_line[-2] != '\r')
+               cr ();
+           }
+       }
+
+      prompt_physical_chars = pmtlen = strlen (prompt_this_line);
+      temp = pmtlen + out + 2;
+      if (temp >= line_size)
+       {
+         line_size = (temp + 1024) - (temp % 1024);
+         visible_line = (char *)xrealloc (visible_line, line_size);
+         line = invisible_line = (char *)xrealloc (invisible_line, line_size);
+       }
+      strncpy (line + out,  prompt_this_line, pmtlen);
+      out += pmtlen;
+      line[out] = '\0';
+      wrap_offset = prompt_invis_chars_first_line = 0;
+    }
+
+#define CHECK_INV_LBREAKS() \
+      do { \
+       if (newlines >= (inv_lbsize - 2)) \
+         { \
+           inv_lbsize *= 2; \
+           inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+         } \
+      } while (0)
+
+#if defined (HANDLE_MULTIBYTE)   
+#define CHECK_LPOS() \
+      do { \
+       lpos++; \
+       if (lpos >= _rl_screenwidth) \
+         { \
+           if (newlines >= (inv_lbsize - 2)) \
+             { \
+               inv_lbsize *= 2; \
+               inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+               _rl_wrapped_line = (int *)xrealloc (_rl_wrapped_line, inv_lbsize * sizeof (int)); \
+             } \
+           inv_lbreaks[++newlines] = out; \
+           _rl_wrapped_line[newlines] = _rl_wrapped_multicolumn; \
+           lpos = 0; \
+         } \
+      } while (0)
+#else
+#define CHECK_LPOS() \
+      do { \
+       lpos++; \
+       if (lpos >= _rl_screenwidth) \
+         { \
+           if (newlines >= (inv_lbsize - 2)) \
+             { \
+               inv_lbsize *= 2; \
+               inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \
+             } \
+           inv_lbreaks[++newlines] = out; \
+           lpos = 0; \
+         } \
+      } while (0)
+#endif
+
+  /* inv_lbreaks[i] is where line i starts in the buffer. */
+  inv_lbreaks[newlines = 0] = 0;
+#if 0
+  lpos = out - wrap_offset;
+#else
+  lpos = prompt_physical_chars + modmark;
+#endif
+
+#if defined (HANDLE_MULTIBYTE)
+  memset (_rl_wrapped_line, 0, vis_lbsize);
+  num = 0;
+#endif
+
+  /* prompt_invis_chars_first_line is the number of invisible characters in
+     the first physical line of the prompt.
+     wrap_offset - prompt_invis_chars_first_line is the number of invis
+     chars on the second line. */
+
+  /* what if lpos is already >= _rl_screenwidth before we start drawing the
+     contents of the command line? */
+  while (lpos >= _rl_screenwidth)
+    {
+      /* fix from Darin Johnson <darin@acuson.com> for prompt string with
+         invisible characters that is longer than the screen width.  The
+         prompt_invis_chars_first_line variable could be made into an array
+         saying how many invisible characters there are per line, but that's
+         probably too much work for the benefit gained.  How many people have
+         prompts that exceed two physical lines?
+         Additional logic fix from Edward Catmur <ed@catmur.co.uk> */
+#if defined (HANDLE_MULTIBYTE)
+      n0 = num;
+      temp = local_prompt ? strlen (local_prompt) : 0;
+      while (num < temp)
+       {
+         if (_rl_col_width  (local_prompt, n0, num) > _rl_screenwidth)
+           {
+             num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY);
+             break;
+           }
+         num++;
+       }
+      temp = num +
+#else
+      temp = ((newlines + 1) * _rl_screenwidth) +
+#endif /* !HANDLE_MULTIBYTE */
+             ((local_prompt_prefix == 0) ? ((newlines == 0) ? prompt_invis_chars_first_line
+                                                           : ((newlines == 1) ? wrap_offset : 0))
+                                        : ((newlines == 0) ? wrap_offset :0));
+             
+      inv_lbreaks[++newlines] = temp;
+#if defined (HANDLE_MULTIBYTE)
+      lpos -= _rl_col_width (local_prompt, n0, num);
+#else
+      lpos -= _rl_screenwidth;
+#endif
+    }
+
+  prompt_last_screen_line = newlines;
+
+  /* Draw the rest of the line (after the prompt) into invisible_line, keeping
+     track of where the cursor is (c_pos), the number of the line containing
+     the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin).
+     It maintains an array of line breaks for display (inv_lbreaks).
+     This handles expanding tabs for display and displaying meta characters. */
+  lb_linenum = 0;
+#if defined (HANDLE_MULTIBYTE)
+  in = 0;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      memset (&ps, 0, sizeof (mbstate_t));
+      wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps);
+    }
+  else
+    wc_bytes = 1;
+  while (in < rl_end)
+#else
+  for (in = 0; in < rl_end; in++)
+#endif
+    {
+      c = (unsigned char)rl_line_buffer[in];
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         if (MB_INVALIDCH (wc_bytes))
+           {
+             /* Byte sequence is invalid or shortened.  Assume that the
+                first byte represents a character. */
+             wc_bytes = 1;
+             /* Assume that a character occupies a single column. */
+             wc_width = 1;
+             memset (&ps, 0, sizeof (mbstate_t));
+           }
+         else if (MB_NULLWCH (wc_bytes))
+           break;                      /* Found '\0' */
+         else
+           {
+             temp = wcwidth (wc);
+             wc_width = (temp >= 0) ? temp : 1;
+           }
+       }
+#endif
+
+      if (out + 8 >= line_size)                /* XXX - 8 for \t */
+       {
+         line_size *= 2;
+         visible_line = (char *)xrealloc (visible_line, line_size);
+         invisible_line = (char *)xrealloc (invisible_line, line_size);
+         line = invisible_line;
+       }
+
+      if (in == rl_point)
+       {
+         c_pos = out;
+         lb_linenum = newlines;
+       }
+
+#if defined (HANDLE_MULTIBYTE)
+      if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */
+#else
+      if (META_CHAR (c))
+#endif
+       {
+         if (_rl_output_meta_chars == 0)
+           {
+             sprintf (line + out, "\\%o", c);
+
+             if (lpos + 4 >= _rl_screenwidth)
+               {
+                 temp = _rl_screenwidth - lpos;
+                 CHECK_INV_LBREAKS ();
+                 inv_lbreaks[++newlines] = out + temp;
+                 lpos = 4 - temp;
+               }
+             else
+               lpos += 4;
+
+             out += 4;
+           }
+         else
+           {
+             line[out++] = c;
+             CHECK_LPOS();
+           }
+       }
+#if defined (DISPLAY_TABS)
+      else if (c == '\t')
+       {
+         register int newout;
+
+#if 0
+         newout = (out | (int)7) + 1;
+#else
+         newout = out + 8 - lpos % 8;
+#endif
+         temp = newout - out;
+         if (lpos + temp >= _rl_screenwidth)
+           {
+             register int temp2;
+             temp2 = _rl_screenwidth - lpos;
+             CHECK_INV_LBREAKS ();
+             inv_lbreaks[++newlines] = out + temp2;
+             lpos = temp - temp2;
+             while (out < newout)
+               line[out++] = ' ';
+           }
+         else
+           {
+             while (out < newout)
+               line[out++] = ' ';
+             lpos += temp;
+           }
+       }
+#endif
+      else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
+       {
+         line[out++] = '\0';   /* XXX - sentinel */
+         CHECK_INV_LBREAKS ();
+         inv_lbreaks[++newlines] = out;
+         lpos = 0;
+       }
+      else if (CTRL_CHAR (c) || c == RUBOUT)
+       {
+         line[out++] = '^';
+         CHECK_LPOS();
+         line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+         CHECK_LPOS();
+       }
+      else
+       {
+#if defined (HANDLE_MULTIBYTE)
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           {
+             register int i;
+
+             _rl_wrapped_multicolumn = 0;
+
+             if (_rl_screenwidth < lpos + wc_width)
+               for (i = lpos; i < _rl_screenwidth; i++)
+                 {
+                   /* The space will be removed in update_line() */
+                   line[out++] = ' ';
+                   _rl_wrapped_multicolumn++;
+                   CHECK_LPOS();
+                 }
+             if (in == rl_point)
+               {
+                 c_pos = out;
+                 lb_linenum = newlines;
+               }
+             for (i = in; i < in+wc_bytes; i++)
+               line[out++] = rl_line_buffer[i];
+             for (i = 0; i < wc_width; i++)
+               CHECK_LPOS();
+           }
+         else
+           {
+             line[out++] = c;
+             CHECK_LPOS();
+           }
+#else
+         line[out++] = c;
+         CHECK_LPOS();
+#endif
+       }
+
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         in += wc_bytes;
+         wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps);
+       }
+      else
+        in++;
+#endif
+
+    }
+  line[out] = '\0';
+  if (c_pos < 0)
+    {
+      c_pos = out;
+      lb_linenum = newlines;
+    }
+
+  inv_botlin = lb_botlin = newlines;
+  CHECK_INV_LBREAKS ();
+  inv_lbreaks[newlines+1] = out;
+  cursor_linenum = lb_linenum;
+
+  /* C_POS == position in buffer where cursor should be placed.
+     CURSOR_LINENUM == line number where the cursor should be placed. */
+
+  /* PWP: now is when things get a bit hairy.  The visible and invisible
+     line buffers are really multiple lines, which would wrap every
+     (screenwidth - 1) characters.  Go through each in turn, finding
+     the changed region and updating it.  The line order is top to bottom. */
+
+  /* If we can move the cursor up and down, then use multiple lines,
+     otherwise, let long lines display in a single terminal line, and
+     horizontally scroll it. */
+
+  if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up)
+    {
+      int nleft, pos, changed_screen_line, tx;
+
+      if (!rl_display_fixed || forced_display)
+       {
+         forced_display = 0;
+
+         /* If we have more than a screenful of material to display, then
+            only display a screenful.  We should display the last screen,
+            not the first.  */
+         if (out >= _rl_screenchars)
+           {
+             if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+               out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY);
+             else
+               out = _rl_screenchars - 1;
+           }
+
+         /* The first line is at character position 0 in the buffer.  The
+            second and subsequent lines start at inv_lbreaks[N], offset by
+            OFFSET (which has already been calculated above).  */
+
+#define W_OFFSET(line, offset) ((line) == 0 ? offset : 0)
+#define VIS_LLEN(l)    ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l]))
+#define INV_LLEN(l)    (inv_lbreaks[l+1] - inv_lbreaks[l])
+#define VIS_CHARS(line) (visible_line + vis_lbreaks[line])
+#define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line)
+#define INV_LINE(line) (invisible_line + inv_lbreaks[line])
+
+         /* For each line in the buffer, do the updating display. */
+         for (linenum = 0; linenum <= inv_botlin; linenum++)
+           {
+             o_cpos = _rl_last_c_pos;
+             update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
+                          VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
+
+#if 1
+             /* update_line potentially changes _rl_last_c_pos, but doesn't
+                take invisible characters into account, since _rl_last_c_pos
+                is an absolute cursor position in a multibyte locale.  See
+                if compensating here is the right thing, or if we have to
+                change update_line itself. */
+             if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+                 _rl_last_c_pos != o_cpos &&
+                 _rl_last_c_pos > wrap_offset &&
+                 o_cpos < prompt_last_invisible)
+               _rl_last_c_pos -= wrap_offset;
+#endif
+                 
+             /* If this is the line with the prompt, we might need to
+                compensate for invisible characters in the new line. Do
+                this only if there is not more than one new line (which
+                implies that we completely overwrite the old visible line)
+                and the new line is shorter than the old.  Make sure we are
+                at the end of the new line before clearing. */
+             if (linenum == 0 &&
+                 inv_botlin == 0 && _rl_last_c_pos == out &&
+                 (wrap_offset > visible_wrap_offset) &&
+                 (_rl_last_c_pos < visible_first_line_len))
+               {
+                 if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+                   nleft = _rl_screenwidth - _rl_last_c_pos;
+                 else
+                   nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos;
+                 if (nleft)
+                   _rl_clear_to_eol (nleft);
+               }
+
+             /* Since the new first line is now visible, save its length. */
+             if (linenum == 0)
+               visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset;
+           }
+
+         /* We may have deleted some lines.  If so, clear the left over
+            blank ones at the bottom out. */
+         if (_rl_vis_botlin > inv_botlin)
+           {
+             char *tt;
+             for (; linenum <= _rl_vis_botlin; linenum++)
+               {
+                 tt = VIS_CHARS (linenum);
+                 _rl_move_vert (linenum);
+                 _rl_move_cursor_relative (0, tt);
+                 _rl_clear_to_eol
+                   ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth);
+               }
+           }
+         _rl_vis_botlin = inv_botlin;
+
+         /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a
+            different screen line during this redisplay. */
+         changed_screen_line = _rl_last_v_pos != cursor_linenum;
+         if (changed_screen_line)
+           {
+             _rl_move_vert (cursor_linenum);
+             /* If we moved up to the line with the prompt using _rl_term_up,
+                the physical cursor position on the screen stays the same,
+                but the buffer position needs to be adjusted to account
+                for invisible characters. */
+             if ((MB_CUR_MAX == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset)
+               _rl_last_c_pos += wrap_offset;
+           }
+
+         /* We have to reprint the prompt if it contains invisible
+            characters, since it's not generally OK to just reprint
+            the characters from the current cursor position.  But we
+            only need to reprint it if the cursor is before the last
+            invisible character in the prompt string. */
+         nleft = prompt_visible_length + wrap_offset;
+         if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 &&
+             _rl_last_c_pos <= prompt_last_invisible && local_prompt)
+           {
+#if defined (__MSDOS__)
+             putc ('\r', rl_outstream);
+#else
+             if (_rl_term_cr)
+               tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+             _rl_output_some_chars (local_prompt, nleft);
+             if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset;
+             else
+               _rl_last_c_pos = nleft;
+           }
+
+         /* Where on that line?  And where does that line start
+            in the buffer? */
+         pos = inv_lbreaks[cursor_linenum];
+         /* nleft == number of characters in the line buffer between the
+            start of the line and the cursor position. */
+         nleft = c_pos - pos;
+
+         /* NLEFT is now a number of characters in a buffer.  When in a
+            multibyte locale, however, _rl_last_c_pos is an absolute cursor
+            position that doesn't take invisible characters in the prompt
+            into account.  We use a fudge factor to compensate. */
+
+         /* Since _rl_backspace() doesn't know about invisible characters in the
+            prompt, and there's no good way to tell it, we compensate for
+            those characters here and call _rl_backspace() directly. */
+         if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
+           {
+             if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+               tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
+             else
+               tx = nleft;
+             if (_rl_last_c_pos > tx)
+               {
+                 _rl_backspace (_rl_last_c_pos - tx);  /* XXX */
+                 _rl_last_c_pos = tx;
+               }
+           }
+
+         /* We need to note that in a multibyte locale we are dealing with
+            _rl_last_c_pos as an absolute cursor position, but moving to a
+            point specified by a buffer position (NLEFT) that doesn't take
+            invisible characters into account. */
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+         else if (nleft != _rl_last_c_pos)
+           _rl_move_cursor_relative (nleft, &invisible_line[pos]);
+       }
+    }
+  else                         /* Do horizontal scrolling. */
+    {
+#define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0)
+      int lmargin, ndisp, nleft, phys_c_pos, t;
+
+      /* Always at top line. */
+      _rl_last_v_pos = 0;
+
+      /* Compute where in the buffer the displayed line should start.  This
+        will be LMARGIN. */
+
+      /* The number of characters that will be displayed before the cursor. */
+      ndisp = c_pos - wrap_offset;
+      nleft  = prompt_visible_length + wrap_offset;
+      /* Where the new cursor position will be on the screen.  This can be
+        longer than SCREENWIDTH; if it is, lmargin will be adjusted. */
+      phys_c_pos = c_pos - (last_lmargin ? last_lmargin : wrap_offset);
+      t = _rl_screenwidth / 3;
+
+      /* If the number of characters had already exceeded the screenwidth,
+        last_lmargin will be > 0. */
+
+      /* If the number of characters to be displayed is more than the screen
+        width, compute the starting offset so that the cursor is about
+        two-thirds of the way across the screen. */
+      if (phys_c_pos > _rl_screenwidth - 2)
+       {
+         lmargin = c_pos - (2 * t);
+         if (lmargin < 0)
+           lmargin = 0;
+         /* If the left margin would be in the middle of a prompt with
+            invisible characters, don't display the prompt at all. */
+         if (wrap_offset && lmargin > 0 && lmargin < nleft)
+           lmargin = nleft;
+       }
+      else if (ndisp < _rl_screenwidth - 2)            /* XXX - was -1 */
+       lmargin = 0;
+      else if (phys_c_pos < 1)
+       {
+         /* If we are moving back towards the beginning of the line and
+            the last margin is no longer correct, compute a new one. */
+         lmargin = ((c_pos - 1) / t) * t;      /* XXX */
+         if (wrap_offset && lmargin > 0 && lmargin < nleft)
+           lmargin = nleft;
+       }
+      else
+       lmargin = last_lmargin;
+
+      /* If the first character on the screen isn't the first character
+        in the display line, indicate this with a special character. */
+      if (lmargin > 0)
+       line[lmargin] = '<';
+
+      /* If SCREENWIDTH characters starting at LMARGIN do not encompass
+        the whole line, indicate that with a special character at the
+        right edge of the screen.  If LMARGIN is 0, we need to take the
+        wrap offset into account. */
+      t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth;
+      if (t < out)
+       line[t - 1] = '>';
+
+      if (!rl_display_fixed || forced_display || lmargin != last_lmargin)
+       {
+         forced_display = 0;
+         update_line (&visible_line[last_lmargin],
+                      &invisible_line[lmargin],
+                      0,
+                      _rl_screenwidth + visible_wrap_offset,
+                      _rl_screenwidth + (lmargin ? 0 : wrap_offset),
+                      0);
+
+         /* If the visible new line is shorter than the old, but the number
+            of invisible characters is greater, and we are at the end of
+            the new line, we need to clear to eol. */
+         t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset);
+         if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) &&
+             (_rl_last_c_pos == out) &&
+             t < visible_first_line_len)
+           {
+             nleft = _rl_screenwidth - t;
+             _rl_clear_to_eol (nleft);
+           }
+         visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset);
+         if (visible_first_line_len > _rl_screenwidth)
+           visible_first_line_len = _rl_screenwidth;
+
+         _rl_move_cursor_relative (c_pos - lmargin, &invisible_line[lmargin]);
+         last_lmargin = lmargin;
+       }
+    }
+  fflush (rl_outstream);
+
+  /* Swap visible and non-visible lines. */
+  {
+    char *vtemp = visible_line;
+    int *itemp = vis_lbreaks, ntemp = vis_lbsize;
+
+    visible_line = invisible_line;
+    invisible_line = vtemp;
+
+    vis_lbreaks = inv_lbreaks;
+    inv_lbreaks = itemp;
+
+    vis_lbsize = inv_lbsize;
+    inv_lbsize = ntemp;
+
+    rl_display_fixed = 0;
+    /* If we are displaying on a single line, and last_lmargin is > 0, we
+       are not displaying any invisible characters, so set visible_wrap_offset
+       to 0. */
+    if (_rl_horizontal_scroll_mode && last_lmargin)
+      visible_wrap_offset = 0;
+    else
+      visible_wrap_offset = wrap_offset;
+  }
+}
+
+/* PWP: update_line() is based on finding the middle difference of each
+   line on the screen; vis:
+
+                            /old first difference
+       /beginning of line   |        /old last same       /old EOL
+       v                    v        v             v
+old:   eddie> Oh, my little gruntle-buggy is to me, as lurgid as
+new:   eddie> Oh, my little buggy says to me, as lurgid as
+       ^                    ^  ^                          ^
+       \beginning of line   |  \new last same     \new end of line
+                            \new first difference
+
+   All are character pointers for the sake of speed.  Special cases for
+   no differences, as well as for end of line additions must be handled.
+
+   Could be made even smarter, but this works well enough */
+static void
+update_line (old, new, current_line, omax, nmax, inv_botlin)
+     register char *old, *new;
+     int current_line, omax, nmax, inv_botlin;
+{
+  register char *ofd, *ols, *oe, *nfd, *nls, *ne;
+  int temp, lendiff, wsatend, od, nd;
+  int current_invis_chars;
+  int col_lendiff, col_temp;
+#if defined (HANDLE_MULTIBYTE)
+  mbstate_t ps_new, ps_old;
+  int new_offset, old_offset, tmp;
+#endif
+
+  /* If we're at the right edge of a terminal that supports xn, we're
+     ready to wrap around, so do so.  This fixes problems with knowing
+     the exact cursor position and cut-and-paste with certain terminal
+     emulators.  In this calculation, TEMP is the physical screen
+     position of the cursor. */
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    temp = _rl_last_c_pos;
+  else
+    temp = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+  if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode
+       && _rl_last_v_pos == current_line - 1)
+    {
+#if defined (HANDLE_MULTIBYTE)
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         wchar_t wc;
+         mbstate_t ps;
+         int tempwidth, bytes;
+         size_t ret;
+
+         /* This fixes only double-column characters, but if the wrapped
+            character comsumes more than three columns, spaces will be
+            inserted in the string buffer. */
+         if (_rl_wrapped_line[current_line] > 0)
+           _rl_clear_to_eol (_rl_wrapped_line[current_line]);
+
+         memset (&ps, 0, sizeof (mbstate_t));
+         ret = mbrtowc (&wc, new, MB_CUR_MAX, &ps);
+         if (MB_INVALIDCH (ret))
+           {
+             tempwidth = 1;
+             ret = 1;
+           }
+         else if (MB_NULLWCH (ret))
+           tempwidth = 0;
+         else
+           tempwidth = wcwidth (wc);
+
+         if (tempwidth > 0)
+           {
+             int count;
+             bytes = ret;
+             for (count = 0; count < bytes; count++)
+               putc (new[count], rl_outstream);
+             _rl_last_c_pos = tempwidth;
+             _rl_last_v_pos++;
+             memset (&ps, 0, sizeof (mbstate_t));
+             ret = mbrtowc (&wc, old, MB_CUR_MAX, &ps);
+             if (ret != 0 && bytes != 0)
+               {
+                 if (MB_INVALIDCH (ret))
+                   memmove (old+bytes, old+1, strlen (old+1));
+                 else
+                   memmove (old+bytes, old+ret, strlen (old+ret));
+                 memcpy (old, new, bytes);
+               }
+           }
+         else
+           {
+             putc (' ', rl_outstream);
+             _rl_last_c_pos = 1;
+             _rl_last_v_pos++;
+             if (old[0] && new[0])
+               old[0] = new[0];
+           }
+       }
+      else
+#endif
+       {
+         if (new[0])
+           putc (new[0], rl_outstream);
+         else
+           putc (' ', rl_outstream);
+         _rl_last_c_pos = 1;           /* XXX */
+         _rl_last_v_pos++;
+         if (old[0] && new[0])
+           old[0] = new[0];
+       }
+    }
+
+      
+  /* Find first difference. */
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      /* See if the old line is a subset of the new line, so that the
+        only change is adding characters. */
+      temp = (omax < nmax) ? omax : nmax;
+      if (memcmp (old, new, temp) == 0)
+       {
+         ofd = old + temp;
+         nfd = new + temp;
+       }
+      else
+       {      
+         memset (&ps_new, 0, sizeof(mbstate_t));
+         memset (&ps_old, 0, sizeof(mbstate_t));
+
+         if (omax == nmax && STREQN (new, old, omax))
+           {
+             ofd = old + omax;
+             nfd = new + nmax;
+           }
+         else
+           {
+             new_offset = old_offset = 0;
+             for (ofd = old, nfd = new;
+                   (ofd - old < omax) && *ofd &&
+                   _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); )
+               {
+                 old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY);
+                 new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY);
+                 ofd = old + old_offset;
+                 nfd = new + new_offset;
+               }
+           }
+       }
+    }
+  else
+#endif
+  for (ofd = old, nfd = new;
+       (ofd - old < omax) && *ofd && (*ofd == *nfd);
+       ofd++, nfd++)
+    ;
+
+  /* Move to the end of the screen line.  ND and OD are used to keep track
+     of the distance between ne and new and oe and old, respectively, to
+     move a subtraction out of each loop. */
+  for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++);
+  for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++);
+
+  /* If no difference, continue to next line. */
+  if (ofd == oe && nfd == ne)
+    return;
+
+  wsatend = 1;                 /* flag for trailing whitespace */
+
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY);
+      nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY);
+      while ((ols > ofd) && (nls > nfd))
+       {
+         memset (&ps_old, 0, sizeof (mbstate_t));
+         memset (&ps_new, 0, sizeof (mbstate_t));
+
+#if 0
+         /* On advice from jir@yamato.ibm.com */
+         _rl_adjust_point (old, ols - old, &ps_old);
+         _rl_adjust_point (new, nls - new, &ps_new);
+#endif
+
+         if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0)
+           break;
+
+         if (*ols == ' ')
+           wsatend = 0;
+
+         ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY);
+         nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY);
+       }
+    }
+  else
+    {
+#endif /* HANDLE_MULTIBYTE */
+  ols = oe - 1;                        /* find last same */
+  nls = ne - 1;
+  while ((ols > ofd) && (nls > nfd) && (*ols == *nls))
+    {
+      if (*ols != ' ')
+       wsatend = 0;
+      ols--;
+      nls--;
+    }
+#if defined (HANDLE_MULTIBYTE)
+    }
+#endif
+
+  if (wsatend)
+    {
+      ols = oe;
+      nls = ne;
+    }
+#if defined (HANDLE_MULTIBYTE)
+  /* This may not work for stateful encoding, but who cares?  To handle
+     stateful encoding properly, we have to scan each string from the
+     beginning and compare. */
+  else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0)
+#else
+  else if (*ols != *nls)
+#endif
+    {
+      if (*ols)                        /* don't step past the NUL */
+       {
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY);
+         else
+           ols++;
+       }
+      if (*nls)
+       {
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY);
+         else
+           nls++;
+       }
+    }
+
+  /* count of invisible characters in the current invisible line. */
+  current_invis_chars = W_OFFSET (current_line, wrap_offset);
+  if (_rl_last_v_pos != current_line)
+    {
+      _rl_move_vert (current_line);
+      if ((MB_CUR_MAX == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset)
+       _rl_last_c_pos += visible_wrap_offset;
+    }
+
+  /* If this is the first line and there are invisible characters in the
+     prompt string, and the prompt string has not changed, and the current
+     cursor position is before the last invisible character in the prompt,
+     and the index of the character to move to is past the end of the prompt
+     string, then redraw the entire prompt string.  We can only do this
+     reliably if the terminal supports a `cr' capability.
+
+     This is not an efficiency hack -- there is a problem with redrawing
+     portions of the prompt string if they contain terminal escape
+     sequences (like drawing the `unbold' sequence without a corresponding
+     `bold') that manifests itself on certain terminals. */
+
+  lendiff = local_prompt ? strlen (local_prompt) : 0;
+  od = ofd - old;      /* index of first difference in visible line */
+  if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+      _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 &&
+      od >= lendiff && _rl_last_c_pos <= prompt_last_invisible)
+    {
+#if defined (__MSDOS__)
+      putc ('\r', rl_outstream);
+#else
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+      _rl_output_some_chars (local_prompt, lendiff);
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+#if 0
+       _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset;
+#else
+       _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+#endif
+      else
+       _rl_last_c_pos = lendiff;
+    }
+
+  _rl_move_cursor_relative (od, old);
+
+  /* if (len (new) > len (old))
+     lendiff == difference in buffer
+     col_lendiff == difference on screen
+     When not using multibyte characters, these are equal */
+  lendiff = (nls - nfd) - (ols - ofd);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    col_lendiff = _rl_col_width (new, nfd - new, nls - new) - _rl_col_width (old, ofd - old, ols - old);
+  else
+    col_lendiff = lendiff;
+
+  /* If we are changing the number of invisible characters in a line, and
+     the spot of first difference is before the end of the invisible chars,
+     lendiff needs to be adjusted. */
+  if (current_line == 0 && !_rl_horizontal_scroll_mode &&
+      current_invis_chars != visible_wrap_offset)
+    {
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         lendiff += visible_wrap_offset - current_invis_chars;
+         col_lendiff += visible_wrap_offset - current_invis_chars;
+       }
+      else
+       {
+         lendiff += visible_wrap_offset - current_invis_chars;
+         col_lendiff = lendiff;
+       }
+    }
+
+  /* Insert (diff (len (old), len (new)) ch. */
+  temp = ne - nfd;
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    col_temp = _rl_col_width (new, nfd - new, ne - new);
+  else
+    col_temp = temp;
+
+  if (col_lendiff > 0) /* XXX - was lendiff */
+    {
+      /* Non-zero if we're increasing the number of lines. */
+      int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin;
+      /* Sometimes it is cheaper to print the characters rather than
+        use the terminal's capabilities.  If we're growing the number
+        of lines, make sure we actually cause the new line to wrap
+        around on auto-wrapping terminals. */
+      if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl))
+       {
+         /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and
+            _rl_horizontal_scroll_mode == 1, inserting the characters with
+            _rl_term_IC or _rl_term_ic will screw up the screen because of the
+            invisible characters.  We need to just draw them. */
+         if (*ols && (!_rl_horizontal_scroll_mode || _rl_last_c_pos > 0 ||
+                       lendiff <= prompt_visible_length || !current_invis_chars))
+           {
+             insert_some_chars (nfd, lendiff, col_lendiff);
+             _rl_last_c_pos += col_lendiff;
+           }
+         else if ((MB_CUR_MAX == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0)
+           {
+             /* At the end of a line the characters do not have to
+                be "inserted".  They can just be placed on the screen. */
+             /* However, this screws up the rest of this block, which
+                assumes you've done the insert because you can. */
+             _rl_output_some_chars (nfd, lendiff);
+             _rl_last_c_pos += col_lendiff;
+           }
+         else
+           {
+             /* We have horizontal scrolling and we are not inserting at
+                the end.  We have invisible characters in this line.  This
+                is a dumb update. */
+             _rl_output_some_chars (nfd, temp);
+             _rl_last_c_pos += col_temp;       /* XXX */
+             return;
+           }
+         /* Copy (new) chars to screen from first diff to last match. */
+         temp = nls - nfd;
+         if ((temp - lendiff) > 0)
+           {
+             _rl_output_some_chars (nfd + lendiff, temp - lendiff);
+#if 1
+            /* XXX -- this bears closer inspection.  Fixes a redisplay bug
+               reported against bash-3.0-alpha by Andreas Schwab involving
+               multibyte characters and prompt strings with invisible
+               characters, but was previously disabled. */
+             _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-col_lendiff);
+#else
+             _rl_last_c_pos += _rl_col_width (nfd+lendiff, 0, temp-lendiff);
+#endif
+           }
+       }
+      else
+       {
+         /* cannot insert chars, write to EOL */
+         _rl_output_some_chars (nfd, temp);
+         _rl_last_c_pos += col_temp;
+         /* If we're in a multibyte locale and before the last invisible char
+            in the current line (which assumes we just output some invisible
+            characters) we need to adjust _rl_last_c_pos, since it represents
+            a physical character position. */
+       }
+    }
+  else                         /* Delete characters from line. */
+    {
+      /* If possible and inexpensive to use terminal deletion, then do so. */
+      if (_rl_term_dc && (2 * col_temp) >= -col_lendiff)
+       {
+         /* If all we're doing is erasing the invisible characters in the
+            prompt string, don't bother.  It screws up the assumptions
+            about what's on the screen. */
+         if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 &&
+             -lendiff == visible_wrap_offset)
+           col_lendiff = 0;
+
+         if (col_lendiff)
+           delete_chars (-col_lendiff); /* delete (diff) characters */
+
+         /* Copy (new) chars to screen from first diff to last match */
+         temp = nls - nfd;
+         if (temp > 0)
+           {
+             _rl_output_some_chars (nfd, temp);
+             _rl_last_c_pos += _rl_col_width (nfd, 0, temp);;
+           }
+       }
+      /* Otherwise, print over the existing material. */
+      else
+       {
+         if (temp > 0)
+           {
+             _rl_output_some_chars (nfd, temp);
+             _rl_last_c_pos += col_temp;               /* XXX */
+           }
+         lendiff = (oe - old) - (ne - new);
+         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+           col_lendiff = _rl_col_width (old, 0, oe - old) - _rl_col_width (new, 0, ne - new);
+         else
+           col_lendiff = lendiff;
+
+         if (col_lendiff)
+           {     
+             if (_rl_term_autowrap && current_line < inv_botlin)
+               space_to_eol (col_lendiff);
+             else
+               _rl_clear_to_eol (col_lendiff);
+           }
+       }
+    }
+}
+
+/* Tell the update routines that we have moved onto a new (empty) line. */
+int
+rl_on_new_line ()
+{
+  if (visible_line)
+    visible_line[0] = '\0';
+
+  _rl_last_c_pos = _rl_last_v_pos = 0;
+  _rl_vis_botlin = last_lmargin = 0;
+  if (vis_lbreaks)
+    vis_lbreaks[0] = vis_lbreaks[1] = 0;
+  visible_wrap_offset = 0;
+  return 0;
+}
+
+/* Tell the update routines that we have moved onto a new line with the
+   prompt already displayed.  Code originally from the version of readline
+   distributed with CLISP.  rl_expand_prompt must have already been called
+   (explicitly or implicitly).  This still doesn't work exactly right. */
+int
+rl_on_new_line_with_prompt ()
+{
+  int prompt_size, i, l, real_screenwidth, newlines;
+  char *prompt_last_line, *lprompt;
+
+  /* Initialize visible_line and invisible_line to ensure that they can hold
+     the already-displayed prompt. */
+  prompt_size = strlen (rl_prompt) + 1;
+  init_line_structures (prompt_size);
+
+  /* Make sure the line structures hold the already-displayed prompt for
+     redisplay. */
+  lprompt = local_prompt ? local_prompt : rl_prompt;
+  strcpy (visible_line, lprompt);
+  strcpy (invisible_line, lprompt);
+
+  /* If the prompt contains newlines, take the last tail. */
+  prompt_last_line = strrchr (rl_prompt, '\n');
+  if (!prompt_last_line)
+    prompt_last_line = rl_prompt;
+
+  l = strlen (prompt_last_line);
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);   /* XXX */
+  else
+    _rl_last_c_pos = l;
+
+  /* Dissect prompt_last_line into screen lines. Note that here we have
+     to use the real screenwidth. Readline's notion of screenwidth might be
+     one less, see terminal.c. */
+  real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1);
+  _rl_last_v_pos = l / real_screenwidth;
+  /* If the prompt length is a multiple of real_screenwidth, we don't know
+     whether the cursor is at the end of the last line, or already at the
+     beginning of the next line. Output a newline just to be safe. */
+  if (l > 0 && (l % real_screenwidth) == 0)
+    _rl_output_some_chars ("\n", 1);
+  last_lmargin = 0;
+
+  newlines = 0; i = 0;
+  while (i <= l)
+    {
+      _rl_vis_botlin = newlines;
+      vis_lbreaks[newlines++] = i;
+      i += real_screenwidth;
+    }
+  vis_lbreaks[newlines] = l;
+  visible_wrap_offset = 0;
+
+  rl_display_prompt = rl_prompt;       /* XXX - make sure it's set */
+
+  return 0;
+}
+
+/* Actually update the display, period. */
+int
+rl_forced_update_display ()
+{
+  if (visible_line)
+    {
+      register char *temp = visible_line;
+
+      while (*temp)
+       *temp++ = '\0';
+    }
+  rl_on_new_line ();
+  forced_display++;
+  (*rl_redisplay_function) ();
+  return 0;
+}
+
+/* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+   (Well, when we don't have multibyte characters, _rl_last_c_pos is a
+   buffer index.)
+   DATA is the contents of the screen line of interest; i.e., where
+   the movement is being done. */
+void
+_rl_move_cursor_relative (new, data)
+     int new;
+     const char *data;
+{
+  register int i;
+  int woff;                    /* number of invisible chars on current line */
+  int cpos, dpos;              /* current and desired cursor positions */
+
+  woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+  cpos = _rl_last_c_pos;
+#if defined (HANDLE_MULTIBYTE)
+  /* If we have multibyte characters, NEW is indexed by the buffer point in
+     a multibyte string, but _rl_last_c_pos is the display position.  In
+     this case, NEW's display position is not obvious and must be
+     calculated.  We need to account for invisible characters in this line,
+     as long as we are past them and they are counted by _rl_col_width. */
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    {
+      dpos = _rl_col_width (data, 0, new);
+      if (dpos > woff)
+       dpos -= woff;
+    }
+  else
+#endif
+    dpos = new;
+
+  /* If we don't have to do anything, then return. */
+  if (cpos == dpos)
+    return;
+
+  /* It may be faster to output a CR, and then move forwards instead
+     of moving backwards. */
+  /* i == current physical cursor position. */
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    i = _rl_last_c_pos;
+  else
+#endif
+  i = _rl_last_c_pos - woff;
+  if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
+      (_rl_term_autowrap && i == _rl_screenwidth))
+    {
+#if defined (__MSDOS__)
+      putc ('\r', rl_outstream);
+#else
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif /* !__MSDOS__ */
+      cpos = _rl_last_c_pos = 0;
+    }
+
+  if (cpos < dpos)
+    {
+      /* Move the cursor forward.  We do it by printing the command
+        to move the cursor forward if there is one, else print that
+        portion of the output buffer again.  Which is cheaper? */
+
+      /* The above comment is left here for posterity.  It is faster
+        to print one character (non-control) than to print a control
+        sequence telling the terminal to move forward one character.
+        That kind of control is for people who don't know what the
+        data is underneath the cursor. */
+#if defined (HACK_TERMCAP_MOTION)
+      if (_rl_term_forward_char)
+       {
+         for (i = _rl_last_c_pos; i < dpos; i++)
+           tputs (_rl_term_forward_char, 1, _rl_output_character_function);
+       }
+      else
+#endif /* HACK_TERMCAP_MOTION */
+      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+       {
+         tputs (_rl_term_cr, 1, _rl_output_character_function);
+         for (i = 0; i < new; i++)
+           putc (data[i], rl_outstream);
+       }
+      else
+       for (i = _rl_last_c_pos; i < new; i++)
+         putc (data[i], rl_outstream);
+    }
+
+#if defined (HANDLE_MULTIBYTE)
+  /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
+     The byte length of the string is probably bigger than the column width
+     of the string, which means that if NEW == _rl_last_c_pos, then NEW's
+     display point is less than _rl_last_c_pos. */
+#endif
+  else if (cpos > dpos)
+    _rl_backspace (_rl_last_c_pos - dpos);
+
+  _rl_last_c_pos = dpos;
+}
+
+/* PWP: move the cursor up or down. */
+void
+_rl_move_vert (to)
+     int to;
+{
+  register int delta, i;
+
+  if (_rl_last_v_pos == to || to > _rl_screenheight)
+    return;
+
+  if ((delta = to - _rl_last_v_pos) > 0)
+    {
+      for (i = 0; i < delta; i++)
+       putc ('\n', rl_outstream);
+#if defined (__MSDOS__)
+      putc ('\r', rl_outstream);
+#else
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+      _rl_last_c_pos = 0;
+    }
+  else
+    {                  /* delta < 0 */
+      if (_rl_term_up && *_rl_term_up)
+       for (i = 0; i < -delta; i++)
+         tputs (_rl_term_up, 1, _rl_output_character_function);
+    }
+
+  _rl_last_v_pos = to;         /* Now TO is here */
+}
+
+/* Physically print C on rl_outstream.  This is for functions which know
+   how to optimize the display.  Return the number of characters output. */
+int
+rl_show_char (c)
+     int c;
+{
+  int n = 1;
+  if (META_CHAR (c) && (_rl_output_meta_chars == 0))
+    {
+      fprintf (rl_outstream, "M-");
+      n += 2;
+      c = UNMETA (c);
+    }
+
+#if defined (DISPLAY_TABS)
+  if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT)
+#else
+  if (CTRL_CHAR (c) || c == RUBOUT)
+#endif /* !DISPLAY_TABS */
+    {
+      fprintf (rl_outstream, "C-");
+      n += 2;
+      c = CTRL_CHAR (c) ? UNCTRL (c) : '?';
+    }
+
+  putc (c, rl_outstream);
+  fflush (rl_outstream);
+  return n;
+}
+
+int
+rl_character_len (c, pos)
+     register int c, pos;
+{
+  unsigned char uc;
+
+  uc = (unsigned char)c;
+
+  if (META_CHAR (uc))
+    return ((_rl_output_meta_chars == 0) ? 4 : 1);
+
+  if (uc == '\t')
+    {
+#if defined (DISPLAY_TABS)
+      return (((pos | 7) + 1) - pos);
+#else
+      return (2);
+#endif /* !DISPLAY_TABS */
+    }
+
+  if (CTRL_CHAR (c) || c == RUBOUT)
+    return (2);
+
+  return ((ISPRINT (uc)) ? 1 : 2);
+}
+/* How to print things in the "echo-area".  The prompt is treated as a
+   mini-modeline. */
+static int msg_saved_prompt = 0;
+
+#if defined (USE_VARARGS)
+int
+#if defined (PREFER_STDARG)
+rl_message (const char *format, ...)
+#else
+rl_message (va_alist)
+     va_dcl
+#endif
+{
+  va_list args;
+#if defined (PREFER_VARARGS)
+  char *format;
+#endif
+
+#if defined (PREFER_STDARG)
+  va_start (args, format);
+#else
+  va_start (args);
+  format = va_arg (args, char *);
+#endif
+
+#if defined (HAVE_VSNPRINTF)
+  vsnprintf (msg_buf, sizeof (msg_buf) - 1, format, args);
+#else
+  vsprintf (msg_buf, format, args);
+  msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+#endif
+  va_end (args);
+
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
+  rl_display_prompt = msg_buf;
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
+  (*rl_redisplay_function) ();
+
+  return 0;
+}
+#else /* !USE_VARARGS */
+int
+rl_message (format, arg1, arg2)
+     char *format;
+{
+  sprintf (msg_buf, format, arg1, arg2);
+  msg_buf[sizeof(msg_buf) - 1] = '\0'; /* overflow? */
+
+  rl_display_prompt = msg_buf;
+  if (saved_local_prompt == 0)
+    {
+      rl_save_prompt ();
+      msg_saved_prompt = 1;
+    }
+  local_prompt = expand_prompt (msg_buf, &prompt_visible_length,
+                                        &prompt_last_invisible,
+                                        &prompt_invis_chars_first_line,
+                                        &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
+  (*rl_redisplay_function) ();
+      
+  return 0;
+}
+#endif /* !USE_VARARGS */
+
+/* How to clear things from the "echo-area". */
+int
+rl_clear_message ()
+{
+  rl_display_prompt = rl_prompt;
+  if (msg_saved_prompt)
+    {
+      rl_restore_prompt ();
+      msg_saved_prompt = 0;
+    }
+  (*rl_redisplay_function) ();
+  return 0;
+}
+
+int
+rl_reset_line_state ()
+{
+  rl_on_new_line ();
+
+  rl_display_prompt = rl_prompt ? rl_prompt : "";
+  forced_display = 1;
+  return 0;
+}
+
+void
+rl_save_prompt ()
+{
+  saved_local_prompt = local_prompt;
+  saved_local_prefix = local_prompt_prefix;
+  saved_prefix_length = prompt_prefix_length;
+  saved_last_invisible = prompt_last_invisible;
+  saved_visible_length = prompt_visible_length;
+  saved_invis_chars_first_line = prompt_invis_chars_first_line;
+  saved_physical_chars = prompt_physical_chars;
+
+  local_prompt = local_prompt_prefix = (char *)0;
+  prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0;
+  prompt_invis_chars_first_line = prompt_physical_chars = 0;
+}
+
+void
+rl_restore_prompt ()
+{
+  FREE (local_prompt);
+  FREE (local_prompt_prefix);
+
+  local_prompt = saved_local_prompt;
+  local_prompt_prefix = saved_local_prefix;
+  prompt_prefix_length = saved_prefix_length;
+  prompt_last_invisible = saved_last_invisible;
+  prompt_visible_length = saved_visible_length;
+  prompt_invis_chars_first_line = saved_invis_chars_first_line;
+  prompt_physical_chars = saved_physical_chars;
+
+  /* can test saved_local_prompt to see if prompt info has been saved. */
+  saved_local_prompt = saved_local_prefix = (char *)0;
+  saved_last_invisible = saved_visible_length = saved_prefix_length = 0;
+  saved_invis_chars_first_line = saved_physical_chars = 0;
+}
+
+char *
+_rl_make_prompt_for_search (pchar)
+     int pchar;
+{
+  int len;
+  char *pmt;
+
+  rl_save_prompt ();
+
+  if (saved_local_prompt == 0)
+    {
+      len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0;
+      pmt = (char *)xmalloc (len + 2);
+      if (len)
+       strcpy (pmt, rl_prompt);
+      pmt[len] = pchar;
+      pmt[len+1] = '\0';
+    }
+  else
+    {
+      len = *saved_local_prompt ? strlen (saved_local_prompt) : 0;
+      pmt = (char *)xmalloc (len + 2);
+      if (len)
+       strcpy (pmt, saved_local_prompt);
+      pmt[len] = pchar;
+      pmt[len+1] = '\0';
+      local_prompt = savestring (pmt);
+      prompt_last_invisible = saved_last_invisible;
+      prompt_visible_length = saved_visible_length + 1;
+    }
+
+  prompt_physical_chars = saved_physical_chars + 1;
+
+  return pmt;
+}
+
+/* Quick redisplay hack when erasing characters at the end of the line. */
+void
+_rl_erase_at_end_of_line (l)
+     int l;
+{
+  register int i;
+
+  _rl_backspace (l);
+  for (i = 0; i < l; i++)
+    putc (' ', rl_outstream);
+  _rl_backspace (l);
+  for (i = 0; i < l; i++)
+    visible_line[--_rl_last_c_pos] = '\0';
+  rl_display_fixed++;
+}
+
+/* Clear to the end of the line.  COUNT is the minimum
+   number of character spaces to clear, */
+void
+_rl_clear_to_eol (count)
+     int count;
+{
+  if (_rl_term_clreol)
+    tputs (_rl_term_clreol, 1, _rl_output_character_function);
+  else if (count)
+    space_to_eol (count);
+}
+
+/* Clear to the end of the line using spaces.  COUNT is the minimum
+   number of character spaces to clear, */
+static void
+space_to_eol (count)
+     int count;
+{
+  register int i;
+
+  for (i = 0; i < count; i++)
+   putc (' ', rl_outstream);
+
+  _rl_last_c_pos += count;
+}
+
+void
+_rl_clear_screen ()
+{
+  if (_rl_term_clrpag)
+    tputs (_rl_term_clrpag, 1, _rl_output_character_function);
+  else
+    rl_crlf ();
+}
+
+/* Insert COUNT characters from STRING to the output stream at column COL. */
+static void
+insert_some_chars (string, count, col)
+     char *string;
+     int count, col;
+{
+#if defined (__MSDOS__) || defined (__MINGW32__)
+  _rl_output_some_chars (string, count);
+#else
+  /* DEBUGGING */
+  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+    if (count != col)
+      fprintf(stderr, "readline: debug: insert_some_chars: count (%d) != col (%d)\n", count, col);
+
+  /* If IC is defined, then we do not have to "enter" insert mode. */
+  if (_rl_term_IC)
+    {
+      char *buffer;
+
+      buffer = tgoto (_rl_term_IC, 0, col);
+      tputs (buffer, 1, _rl_output_character_function);
+      _rl_output_some_chars (string, count);
+    }
+  else
+    {
+      register int i;
+
+      /* If we have to turn on insert-mode, then do so. */
+      if (_rl_term_im && *_rl_term_im)
+       tputs (_rl_term_im, 1, _rl_output_character_function);
+
+      /* If there is a special command for inserting characters, then
+        use that first to open up the space. */
+      if (_rl_term_ic && *_rl_term_ic)
+       {
+         for (i = col; i--; )
+           tputs (_rl_term_ic, 1, _rl_output_character_function);
+       }
+
+      /* Print the text. */
+      _rl_output_some_chars (string, count);
+
+      /* If there is a string to turn off insert mode, we had best use
+        it now. */
+      if (_rl_term_ei && *_rl_term_ei)
+       tputs (_rl_term_ei, 1, _rl_output_character_function);
+    }
+#endif /* __MSDOS__ || __MINGW32__ */
+}
+
+/* Delete COUNT characters from the display line. */
+static void
+delete_chars (count)
+     int count;
+{
+  if (count > _rl_screenwidth) /* XXX */
+    return;
+
+#if !defined (__MSDOS__) && !defined (__MINGW32__)
+  if (_rl_term_DC && *_rl_term_DC)
+    {
+      char *buffer;
+      buffer = tgoto (_rl_term_DC, count, count);
+      tputs (buffer, count, _rl_output_character_function);
+    }
+  else
+    {
+      if (_rl_term_dc && *_rl_term_dc)
+       while (count--)
+         tputs (_rl_term_dc, 1, _rl_output_character_function);
+    }
+#endif /* !__MSDOS__ && !__MINGW32__ */
+}
+
+void
+_rl_update_final ()
+{
+  int full_lines;
+
+  full_lines = 0;
+  /* If the cursor is the only thing on an otherwise-blank last line,
+     compensate so we don't print an extra CRLF. */
+  if (_rl_vis_botlin && _rl_last_c_pos == 0 &&
+       visible_line[vis_lbreaks[_rl_vis_botlin]] == 0)
+    {
+      _rl_vis_botlin--;
+      full_lines = 1;
+    }
+  _rl_move_vert (_rl_vis_botlin);
+  /* If we've wrapped lines, remove the final xterm line-wrap flag. */
+  if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth))
+    {
+      char *last_line;
+
+      last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]];
+      _rl_move_cursor_relative (_rl_screenwidth - 1, last_line);
+      _rl_clear_to_eol (0);
+      putc (last_line[_rl_screenwidth - 1], rl_outstream);
+    }
+  _rl_vis_botlin = 0;
+  rl_crlf ();
+  fflush (rl_outstream);
+  rl_display_fixed++;
+}
+
+/* Move to the start of the current line. */
+static void
+cr ()
+{
+  if (_rl_term_cr)
+    {
+#if defined (__MSDOS__)
+      putc ('\r', rl_outstream);
+#else
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+      _rl_last_c_pos = 0;
+    }
+}
+
+/* Redraw the last line of a multi-line prompt that may possibly contain
+   terminal escape sequences.  Called with the cursor at column 0 of the
+   line to draw the prompt on. */
+static void
+redraw_prompt (t)
+     char *t;
+{
+  char *oldp;
+
+  oldp = rl_display_prompt;
+  rl_save_prompt ();
+
+  rl_display_prompt = t;
+  local_prompt = expand_prompt (t, &prompt_visible_length,
+                                  &prompt_last_invisible,
+                                  &prompt_invis_chars_first_line,
+                                  &prompt_physical_chars);
+  local_prompt_prefix = (char *)NULL;
+
+  rl_forced_update_display ();
+
+  rl_display_prompt = oldp;
+  rl_restore_prompt();
+}
+      
+/* Redisplay the current line after a SIGWINCH is received. */
+void
+_rl_redisplay_after_sigwinch ()
+{
+  char *t;
+
+  /* Clear the current line and put the cursor at column 0.  Make sure
+     the right thing happens if we have wrapped to a new screen line. */
+  if (_rl_term_cr)
+    {
+#if defined (__MSDOS__)
+      putc ('\r', rl_outstream);
+#else
+      tputs (_rl_term_cr, 1, _rl_output_character_function);
+#endif
+      _rl_last_c_pos = 0;
+#if defined (__MSDOS__)
+      space_to_eol (_rl_screenwidth);
+      putc ('\r', rl_outstream);
+#else
+      if (_rl_term_clreol)
+       tputs (_rl_term_clreol, 1, _rl_output_character_function);
+      else
+       {
+         space_to_eol (_rl_screenwidth);
+         tputs (_rl_term_cr, 1, _rl_output_character_function);
+       }
+#endif
+      if (_rl_last_v_pos > 0)
+       _rl_move_vert (0);
+    }
+  else
+    rl_crlf ();
+
+  /* Redraw only the last line of a multi-line prompt. */
+  t = strrchr (rl_display_prompt, '\n');
+  if (t)
+    redraw_prompt (++t);
+  else
+    rl_forced_update_display ();
+}
+
+void
+_rl_clean_up_for_exit ()
+{
+  if (readline_echoing_p)
+    {
+      _rl_move_vert (_rl_vis_botlin);
+      _rl_vis_botlin = 0;
+      fflush (rl_outstream);
+      rl_restart_output (1, 0);
+    }
+}
+
+void
+_rl_erase_entire_line ()
+{
+  cr ();
+  _rl_clear_to_eol (0);
+  cr ();
+  fflush (rl_outstream);
+}
+
+/* return the `current display line' of the cursor -- the number of lines to
+   move up to get to the first screen line of the current readline line. */
+int
+_rl_current_display_line ()
+{
+  int ret, nleft;
+
+  /* Find out whether or not there might be invisible characters in the
+     editing buffer. */
+  if (rl_display_prompt == rl_prompt)
+    nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length;
+  else
+    nleft = _rl_last_c_pos - _rl_screenwidth;
+
+  if (nleft > 0)
+    ret = 1 + nleft / _rl_screenwidth;
+  else
+    ret = 0;
+
+  return ret;
+}
+
+#if defined (HANDLE_MULTIBYTE)
+/* Calculate the number of screen columns occupied by STR from START to END.
+   In the case of multibyte characters with stateful encoding, we have to
+   scan from the beginning of the string to take the state into account. */
+static int
+_rl_col_width (str, start, end)
+     const char *str;
+     int start, end;
+{
+  wchar_t wc;
+  mbstate_t ps = {0};
+  int tmp, point, width, max;
+
+  if (end <= start)
+    return 0;
+
+  point = 0;
+  max = end;
+
+  while (point < start)
+    {
+      tmp = mbrlen (str + point, max, &ps);
+      if (MB_INVALIDCH ((size_t)tmp))
+       {
+         /* In this case, the bytes are invalid or too short to compose a
+            multibyte character, so we assume that the first byte represents
+            a single character. */
+         point++;
+         max--;
+
+         /* Clear the state of the byte sequence, because in this case the
+            effect of mbstate is undefined. */
+         memset (&ps, 0, sizeof (mbstate_t));
+       }
+      else if (MB_NULLWCH (tmp))
+       break;          /* Found '\0' */
+      else
+       {
+         point += tmp;
+         max -= tmp;
+       }
+    }
+
+  /* If START is not a byte that starts a character, then POINT will be
+     greater than START.  In this case, assume that (POINT - START) gives
+     a byte count that is the number of columns of difference. */
+  width = point - start;
+
+  while (point < end)
+    {
+      tmp = mbrtowc (&wc, str + point, max, &ps);
+      if (MB_INVALIDCH ((size_t)tmp))
+       {
+         /* In this case, the bytes are invalid or too short to compose a
+            multibyte character, so we assume that the first byte represents
+            a single character. */
+         point++;
+         max--;
+
+         /* and assume that the byte occupies a single column. */
+         width++;
+
+         /* Clear the state of the byte sequence, because in this case the
+            effect of mbstate is undefined. */
+         memset (&ps, 0, sizeof (mbstate_t));
+       }
+      else if (MB_NULLWCH (tmp))
+       break;                  /* Found '\0' */
+      else
+       {
+         point += tmp;
+         max -= tmp;
+         tmp = wcwidth(wc);
+         width += (tmp >= 0) ? tmp : 1;
+       }
+    }
+
+  width += point - end;
+
+  return width;
+}
+#endif /* HANDLE_MULTIBYTE */
index 2a806ca..e22df47 100644 (file)
@@ -443,8 +443,8 @@ rl_redisplay ()
 {
   register int in, out, c, linenum, cursor_linenum;
   register char *line;
-  int c_pos, inv_botlin, lb_botlin, lb_linenum;
-  int newlines, lpos, temp, modmark, n0, num, fudge;
+  int c_pos, inv_botlin, lb_botlin, lb_linenum, o_cpos;
+  int newlines, lpos, temp, modmark, n0, num;
   char *prompt_this_line;
 #if defined (HANDLE_MULTIBYTE)
   wchar_t wc;
@@ -884,9 +884,23 @@ rl_redisplay ()
          /* For each line in the buffer, do the updating display. */
          for (linenum = 0; linenum <= inv_botlin; linenum++)
            {
+             o_cpos = _rl_last_c_pos;
              update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum,
                           VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin);
 
+#if 1
+             /* update_line potentially changes _rl_last_c_pos, but doesn't
+                take invisible characters into account, since _rl_last_c_pos
+                is an absolute cursor position in a multibyte locale.  See
+                if compensating here is the right thing, or if we have to
+                change update_line itself. */
+             if (linenum == 0 && (MB_CUR_MAX > 1 && rl_byte_oriented == 0) &&
+                 _rl_last_c_pos != o_cpos &&
+                 _rl_last_c_pos > wrap_offset &&
+                 o_cpos < prompt_last_invisible)
+               _rl_last_c_pos -= wrap_offset;
+#endif
+                 
              /* If this is the line with the prompt, we might need to
                 compensate for invisible characters in the new line. Do
                 this only if there is not more than one new line (which
@@ -958,7 +972,7 @@ rl_redisplay ()
 #endif
              _rl_output_some_chars (local_prompt, nleft);
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft);
+               _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft) - wrap_offset;
              else
                _rl_last_c_pos = nleft;
            }
@@ -974,7 +988,6 @@ rl_redisplay ()
             multibyte locale, however, _rl_last_c_pos is an absolute cursor
             position that doesn't take invisible characters in the prompt
             into account.  We use a fudge factor to compensate. */
-         fudge = (MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? wrap_offset : 0;
 
          /* Since _rl_backspace() doesn't know about invisible characters in the
             prompt, and there's no good way to tell it, we compensate for
@@ -982,16 +995,20 @@ rl_redisplay ()
          if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos)
            {
              if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-               tx = _rl_col_width (&visible_line[pos], 0, nleft);
+               tx = _rl_col_width (&visible_line[pos], 0, nleft) - visible_wrap_offset;
              else
                tx = nleft;
-             if ((_rl_last_c_pos+fudge) != tx)
+             if (_rl_last_c_pos > tx)
                {
-                 _rl_backspace (_rl_last_c_pos + fudge - tx);  /* XXX */
+                 _rl_backspace (_rl_last_c_pos - tx);  /* XXX */
                  _rl_last_c_pos = tx;
                }
            }
 
+         /* We need to note that in a multibyte locale we are dealing with
+            _rl_last_c_pos as an absolute cursor position, but moving to a
+            point specified by a buffer position (NLEFT) that doesn't take
+            invisible characters into account. */
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
            _rl_move_cursor_relative (nleft, &invisible_line[pos]);
          else if (nleft != _rl_last_c_pos)
@@ -1388,7 +1405,11 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
 #endif
       _rl_output_some_chars (local_prompt, lendiff);
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+#if 0
+       _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff) - wrap_offset;
+#else
        _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff);
+#endif
       else
        _rl_last_c_pos = lendiff;
     }
@@ -1465,7 +1486,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
                 the end.  We have invisible characters in this line.  This
                 is a dumb update. */
              _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
+             _rl_last_c_pos += col_temp;       /* XXX */
              return;
            }
          /* Copy (new) chars to screen from first diff to last match. */
@@ -1489,6 +1510,10 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          /* cannot insert chars, write to EOL */
          _rl_output_some_chars (nfd, temp);
          _rl_last_c_pos += col_temp;
+         /* If we're in a multibyte locale and before the last invisible char
+            in the current line (which assumes we just output some invisible
+            characters) we need to adjust _rl_last_c_pos, since it represents
+            a physical character position. */
        }
     }
   else                         /* Delete characters from line. */
@@ -1520,7 +1545,7 @@ update_line (old, new, current_line, omax, nmax, inv_botlin)
          if (temp > 0)
            {
              _rl_output_some_chars (nfd, temp);
-             _rl_last_c_pos += col_temp;
+             _rl_last_c_pos += col_temp;               /* XXX */
            }
          lendiff = (oe - old) - (ne - new);
          if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
@@ -1582,7 +1607,7 @@ rl_on_new_line_with_prompt ()
 
   l = strlen (prompt_last_line);
   if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);
+    _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l);   /* XXX */
   else
     _rl_last_c_pos = l;
 
@@ -1631,6 +1656,8 @@ rl_forced_update_display ()
 }
 
 /* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices.
+   (Well, when we don't have multibyte characters, _rl_last_c_pos is a
+   buffer index.)
    DATA is the contents of the screen line of interest; i.e., where
    the movement is being done. */
 void
@@ -1639,28 +1666,40 @@ _rl_move_cursor_relative (new, data)
      const char *data;
 {
   register int i;
+  int woff;                    /* number of invisible chars on current line */
+  int cpos, dpos;              /* current and desired cursor positions */
 
-  /* If we don't have to do anything, then return. */
+  woff = W_OFFSET (_rl_last_v_pos, wrap_offset);
+  cpos = _rl_last_c_pos;
 #if defined (HANDLE_MULTIBYTE)
   /* If we have multibyte characters, NEW is indexed by the buffer point in
      a multibyte string, but _rl_last_c_pos is the display position.  In
      this case, NEW's display position is not obvious and must be
-     calculated. */
-  if (MB_CUR_MAX == 1 || rl_byte_oriented)
+     calculated.  We need to account for invisible characters in this line,
+     as long as we are past them and they are counted by _rl_col_width. */
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
     {
-      if (_rl_last_c_pos == new)
-       return;
+      dpos = _rl_col_width (data, 0, new);
+      if (dpos > woff)
+       dpos -= woff;
     }
-  else if (_rl_last_c_pos == _rl_col_width (data, 0, new))
-    return;
-#else
-  if (_rl_last_c_pos == new) return;
+  else
 #endif
+    dpos = new;
+
+  /* If we don't have to do anything, then return. */
+  if (cpos == dpos)
+    return;
 
   /* It may be faster to output a CR, and then move forwards instead
      of moving backwards. */
   /* i == current physical cursor position. */
-  i = _rl_last_c_pos - W_OFFSET(_rl_last_v_pos, visible_wrap_offset);
+#if defined (HANDLE_MULTIBYTE)
+  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
+    i = _rl_last_c_pos;
+  else
+#endif
+  i = _rl_last_c_pos - woff;
   if (new == 0 || CR_FASTER (new, _rl_last_c_pos) ||
       (_rl_term_autowrap && i == _rl_screenwidth))
     {
@@ -1669,10 +1708,13 @@ _rl_move_cursor_relative (new, data)
 #else
       tputs (_rl_term_cr, 1, _rl_output_character_function);
 #endif /* !__MSDOS__ */
-      _rl_last_c_pos = 0;
+      cpos = _rl_last_c_pos = 0;
     }
 
-  if (_rl_last_c_pos < new)
+if (cpos != _rl_last_c_pos)
+itrace("_rl_move_cursor_relative: cpos (%d) != _rl_last_c_pos (%d)", cpos, _rl_last_c_pos);
+
+  if (cpos < dpos)
     {
       /* Move the cursor forward.  We do it by printing the command
         to move the cursor forward if there is one, else print that
@@ -1686,31 +1728,11 @@ _rl_move_cursor_relative (new, data)
 #if defined (HACK_TERMCAP_MOTION)
       if (_rl_term_forward_char)
        {
-         if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-           {
-             int width;
-             width = _rl_col_width (data, _rl_last_c_pos, new);
-             for (i = 0; i < width; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-         else
-           {
-             for (i = _rl_last_c_pos; i < new; i++)
-               tputs (_rl_term_forward_char, 1, _rl_output_character_function);
-           }
-       }
-      else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       {
-         tputs (_rl_term_cr, 1, _rl_output_character_function);
-         for (i = 0; i < new; i++)
-           putc (data[i], rl_outstream);
+         for (i = cpos; i < dpos; i++)
+           tputs (_rl_term_forward_char, 1, _rl_output_character_function);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
-         putc (data[i], rl_outstream);
-
-#else /* !HACK_TERMCAP_MOTION */
-
+#endif /* HACK_TERMCAP_MOTION */
       if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
        {
          tputs (_rl_term_cr, 1, _rl_output_character_function);
@@ -1718,32 +1740,20 @@ _rl_move_cursor_relative (new, data)
            putc (data[i], rl_outstream);
        }
       else
-       for (i = _rl_last_c_pos; i < new; i++)
+       for (i = cpos; i < new; i++)
          putc (data[i], rl_outstream);
-
-#endif /* !HACK_TERMCAP_MOTION */
-
     }
+
 #if defined (HANDLE_MULTIBYTE)
   /* NEW points to the buffer point, but _rl_last_c_pos is the display point.
      The byte length of the string is probably bigger than the column width
      of the string, which means that if NEW == _rl_last_c_pos, then NEW's
      display point is less than _rl_last_c_pos. */
-  else if (_rl_last_c_pos >= new)
-#else
-  else if (_rl_last_c_pos > new)
 #endif
-    {
-      if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-       _rl_backspace (_rl_last_c_pos - _rl_col_width (data, 0, new));
-      else
-       _rl_backspace (_rl_last_c_pos - new);
-    }
+  else if (cpos > dpos)
+    _rl_backspace (cpos - dpos);
 
-  if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
-    _rl_last_c_pos =  _rl_col_width (data, 0, new);
-  else
-    _rl_last_c_pos = new;
+  _rl_last_c_pos = dpos;
 }
 
 /* PWP: move the cursor up or down. */
index f83858e..55b4393 100644 (file)
Binary files a/lib/readline/doc/history.dvi and b/lib/readline/doc/history.dvi differ
index 2654875..dc543d8 100644 (file)
@@ -1,6 +1,6 @@
 <HTML>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on October, 27  2005 by texi2html 1.64 -->
+<!-- Created on November, 17  2005 by texi2html 1.64 -->
 <!-- 
 Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
             Karl Berry  <karl@freefriends.org>
@@ -2100,7 +2100,7 @@ to permit their use in free software.
 <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="history.html#SEC_About"> ? </A>]</TD>
 </TR></TABLE>
 <H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+This document was generated by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 <P></P>  
@@ -2262,7 +2262,7 @@ the following structure:
 <BR>  
 <FONT SIZE="-1">
 This document was generated
-by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 
index 7a8fe9b..69754ec 100644 (file)
@@ -2,7 +2,7 @@ This is history.info, produced by makeinfo version 4.7 from
 ./history.texi.
 
    This document describes the GNU History library (version 5.1-beta1,
-7 October 2005), a programming tool that provides a consistent user
+11 November 2005), a programming tool that provides a consistent user
 interface for recalling lines of previously typed input.
 
    Copyright (C) 1988-2004 Free Software Foundation, Inc.
@@ -1325,28 +1325,28 @@ Appendix C Function and Variable Index
 
 \1f
 Tag Table:
-Node: Top\7f1285
-Node: Using History Interactively\7f1910
-Node: History Interaction\7f2418
-Node: Event Designators\7f3842
-Node: Word Designators\7f4777
-Node: Modifiers\7f6416
-Node: Programming with GNU History\7f7643
-Node: Introduction to History\7f8375
-Node: History Storage\7f10065
-Node: History Functions\7f11200
-Node: Initializing History and State Management\7f12189
-Node: History List Management\7f13001
-Node: Information About the History List\7f15033
-Node: Moving Around the History List\7f16530
-Node: Searching the History List\7f17531
-Node: Managing the History File\7f19463
-Node: History Expansion\7f21283
-Node: History Variables\7f23191
-Node: History Programming Example\7f25997
-Node: Copying This Manual\7f28674
-Node: GNU Free Documentation License\7f28934
-Node: Concept Index\7f51340
-Node: Function and Variable Index\7f52180
+Node: Top\7f1287
+Node: Using History Interactively\7f1912
+Node: History Interaction\7f2420
+Node: Event Designators\7f3844
+Node: Word Designators\7f4779
+Node: Modifiers\7f6418
+Node: Programming with GNU History\7f7645
+Node: Introduction to History\7f8377
+Node: History Storage\7f10067
+Node: History Functions\7f11202
+Node: Initializing History and State Management\7f12191
+Node: History List Management\7f13003
+Node: Information About the History List\7f15035
+Node: Moving Around the History List\7f16532
+Node: Searching the History List\7f17533
+Node: Managing the History File\7f19465
+Node: History Expansion\7f21285
+Node: History Variables\7f23193
+Node: History Programming Example\7f25999
+Node: Copying This Manual\7f28676
+Node: GNU Free Documentation License\7f28936
+Node: Concept Index\7f51342
+Node: Function and Variable Index\7f52182
 \1f
 End Tag Table
index 943a824..ba63efb 100644 (file)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  27 OCT 2005 17:26
+This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  17 NOV 2005 10:43
 **/usr/homes/chet/src/bash/src/lib/readline/doc/history.texi
 (/usr/homes/chet/src/bash/src/lib/readline/doc/history.texi (./texinfo.tex
 Loading texinfo [version 2003-02-03.16]: Basics,
@@ -160,10 +160,10 @@ Chapter 2 [3] [4] [5] [6] [7] [8] [9] [10] [11]) Appendix A [12] (./fdl.texi
 Here is how much of TeX's memory you used:
  1409 strings out of 98002
  16451 string characters out of 1221987
- 45514 words of memory out of 1000001
+ 45518 words of memory out of 1000001
  2271 multiletter control sequences out of 10000+50000
  31953 words of font info for 111 fonts, out of 500000 for 1000
  19 hyphenation exceptions out of 1000
  15i,6n,17p,283b,649s stack positions out of 1500i,500n,5000p,200000b,5000s
 
-Output written on history.dvi (28 pages, 79880 bytes).
+Output written on history.dvi (28 pages, 79896 bytes).
index 6973c35..bc03975 100644 (file)
@@ -10,7 +10,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -o history.ps history.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2005.10.27:1726
+%DVIPSSource:  TeX output 2005.11.17:1043
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -3316,20 +3316,21 @@ TeXDict begin
 %%Page: 1 1
 TeXDict begin 1 0 bop 75 659 a Fs(GNU)33 b(History)e(Library)p
 75 709 1800 17 v 710 757 a Fr(Edition)14 b(5.1-b)q(eta1,)g(for)h
-Fq(History)f(Library)g Fr(V)l(ersion)h(5.1-b)q(eta1.)1608
-811 y(Octob)q(er)h(2005)75 2467 y Fp(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)75
-2534 y(Brian)g(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6
-b(oundation)p 75 2570 1800 9 v eop end
+Fq(History)f(Library)g Fr(V)l(ersion)h(5.1-b)q(eta1.)1569
+811 y(No)o(v)o(em)o(b)q(er)g(2005)75 2467 y Fp(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)75 2534 y(Brian)g(F)-6 b(o)n(x,)23 b(F)-6
+b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570
+1800 9 v eop end
 %%Page: 2 2
-TeXDict begin 2 1 bop 75 1512 a Fr(This)17 b(do)q(cumen)o(t)h(describ)q
-(es)g(the)g(GNU)f(History)g(library)f(\(v)o(ersion)h(5.1-b)q(eta1,)g(7)
-g(Octob)q(er)h(2005\),)e(a)75 1567 y(programming)e(to)q(ol)h(that)h
-(pro)o(vides)f(a)h(consisten)o(t)f(user)h(in)o(terface)f(for)h
-(recalling)e(lines)i(of)g(previously)75 1621 y(t)o(yp)q(ed)g(input.)75
-1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fo(\015)f
-Fr(1988-2004)e(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)g(Inc.)75
-1756 y(P)o(ermission)h(is)g(gran)o(ted)h(to)f(mak)o(e)h(and)g
+TeXDict begin 2 1 bop 75 1512 a Fr(This)15 b(do)q(cumen)o(t)h(describ)q
+(es)h(the)f(GNU)f(History)g(library)f(\(v)o(ersion)h(5.1-b)q(eta1,)f
+(11)h(No)o(v)o(em)o(b)q(er)h(2005\),)75 1567 y(a)d(programming)e(to)q
+(ol)h(that)g(pro)o(vides)h(a)g(consisten)o(t)f(user)h(in)o(terface)f
+(for)h(recalling)e(lines)i(of)g(previously)75 1621 y(t)o(yp)q(ed)j
+(input.)75 1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689
+y Fo(\015)f Fr(1988-2004)e(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)g
+(Inc.)75 1756 y(P)o(ermission)h(is)g(gran)o(ted)h(to)f(mak)o(e)h(and)g
 (distribute)g(v)o(erbatim)e(copies)i(of)g(this)g(man)o(ual)f(pro)o
 (vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)g(this)g(p)q
 (ermission)f(notice)h(are)g(preserv)o(ed)h(on)f(all)f(copies.)195
index f3166aa..35d6186 100644 (file)
Binary files a/lib/readline/doc/readline.dvi and b/lib/readline/doc/readline.dvi differ
index 36b928e..fcd5f0a 100644 (file)
@@ -1,6 +1,6 @@
 <HTML>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on October, 27  2005 by texi2html 1.64 -->
+<!-- Created on November, 17  2005 by texi2html 1.64 -->
 <!-- 
 Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
             Karl Berry  <karl@freefriends.org>
@@ -2541,6 +2541,15 @@ If <CODE>NULL</CODE>, Readline defaults to <VAR>stdout</VAR>.
 
 <A NAME="IDX198"></A>
 <DL>
+<DT><U>Variable:</U> int <B>rl_prefer_env_winsize</B>
+<DD>If non-zero, Readline gives values found in the <CODE>LINES</CODE> and
+<CODE>COLUMNS</CODE> environment variables greater precedence than values fetched
+from the kernel when computing the screen dimensions.
+</DL>
+</P><P>
+
+<A NAME="IDX199"></A>
+<DL>
 <DT><U>Variable:</U> rl_command_func_t * <B>rl_last_func</B>
 <DD>The address of the last command function Readline executed.  May be used to
 test whether or not a function is being executed twice in succession, for
@@ -2548,7 +2557,7 @@ example.
 </DL>
 </P><P>
 
-<A NAME="IDX199"></A>
+<A NAME="IDX200"></A>
 <DL>
 <DT><U>Variable:</U> rl_hook_func_t * <B>rl_startup_hook</B>
 <DD>If non-zero, this is the address of a function to call just
@@ -2556,7 +2565,7 @@ before <CODE>readline</CODE> prints the first prompt.
 </DL>
 </P><P>
 
-<A NAME="IDX200"></A>
+<A NAME="IDX201"></A>
 <DL>
 <DT><U>Variable:</U> rl_hook_func_t * <B>rl_pre_input_hook</B>
 <DD>If non-zero, this is the address of a function to call after
@@ -2565,7 +2574,7 @@ starts reading input characters.
 </DL>
 </P><P>
 
-<A NAME="IDX201"></A>
+<A NAME="IDX202"></A>
 <DL>
 <DT><U>Variable:</U> rl_hook_func_t * <B>rl_event_hook</B>
 <DD>If non-zero, this is the address of a function to call periodically
@@ -2575,7 +2584,7 @@ is no keyboard input.
 </DL>
 </P><P>
 
-<A NAME="IDX202"></A>
+<A NAME="IDX203"></A>
 <DL>
 <DT><U>Variable:</U> rl_getc_func_t * <B>rl_getc_function</B>
 <DD>If non-zero, Readline will call indirectly through this pointer
@@ -2585,7 +2594,7 @@ to get a character from the input stream.  By default, it is set to
 </DL>
 </P><P>
 
-<A NAME="IDX203"></A>
+<A NAME="IDX204"></A>
 <DL>
 <DT><U>Variable:</U> rl_voidfunc_t * <B>rl_redisplay_function</B>
 <DD>If non-zero, Readline will call indirectly through this pointer
@@ -2595,7 +2604,7 @@ redisplay function (see section <A HREF="readline.html#SEC35">2.4.6 Redisplay</A
 </DL>
 </P><P>
 
-<A NAME="IDX204"></A>
+<A NAME="IDX205"></A>
 <DL>
 <DT><U>Variable:</U> rl_vintfunc_t * <B>rl_prep_term_function</B>
 <DD>If non-zero, Readline will call indirectly through this pointer
@@ -2606,7 +2615,7 @@ By default, this is set to <CODE>rl_prep_terminal</CODE>
 </DL>
 </P><P>
 
-<A NAME="IDX205"></A>
+<A NAME="IDX206"></A>
 <DL>
 <DT><U>Variable:</U> rl_voidfunc_t * <B>rl_deprep_term_function</B>
 <DD>If non-zero, Readline will call indirectly through this pointer
@@ -2617,7 +2626,7 @@ By default, this is set to <CODE>rl_deprep_terminal</CODE>
 </DL>
 </P><P>
 
-<A NAME="IDX206"></A>
+<A NAME="IDX207"></A>
 <DL>
 <DT><U>Variable:</U> Keymap <B>rl_executing_keymap</B>
 <DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
@@ -2625,7 +2634,7 @@ currently executing readline function was found.
 </DL>
 </P><P>
 
-<A NAME="IDX207"></A>
+<A NAME="IDX208"></A>
 <DL>
 <DT><U>Variable:</U> Keymap <B>rl_binding_keymap</B>
 <DD>This variable is set to the keymap (see section <A HREF="readline.html#SEC31">2.4.2 Selecting a Keymap</A>) in which the
@@ -2633,14 +2642,14 @@ last key binding occurred.
 </DL>
 </P><P>
 
-<A NAME="IDX208"></A>
+<A NAME="IDX209"></A>
 <DL>
 <DT><U>Variable:</U> char * <B>rl_executing_macro</B>
 <DD>This variable is set to the text of any currently-executing macro.
 </DL>
 </P><P>
 
-<A NAME="IDX209"></A>
+<A NAME="IDX210"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_readline_state</B>
 <DD>A variable with bit values that encapsulate the current Readline state.
@@ -2696,7 +2705,7 @@ and is about to return the line to the caller.
 </DL>
 </P><P>
 
-<A NAME="IDX210"></A>
+<A NAME="IDX211"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_explicit_arg</B>
 <DD>Set to a non-zero value if an explicit numeric argument was specified by
@@ -2704,7 +2713,7 @@ the user.  Only valid in a bindable command function.
 </DL>
 </P><P>
 
-<A NAME="IDX211"></A>
+<A NAME="IDX212"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_numeric_arg</B>
 <DD>Set to the value of any numeric argument explicitly specified by the user
@@ -2713,7 +2722,7 @@ command function.
 </DL>
 </P><P>
 
-<A NAME="IDX212"></A>
+<A NAME="IDX213"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_editing_mode</B>
 <DD>Set to a value denoting Readline's current editing mode.  A value of
@@ -2791,7 +2800,7 @@ programmer, should bind the functions you write to descriptive names as
 well.  Readline provides a function for doing that:
 </P><P>
 
-<A NAME="IDX213"></A>
+<A NAME="IDX214"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_add_defun</B> <I>(const char *name, rl_command_func_t *function, int key)</I>
 <DD>Add <VAR>name</VAR> to the list of named functions.  Make <VAR>function</VAR> be
@@ -2831,7 +2840,7 @@ get run.  You can make your own keymaps, copy existing keymaps, and tell
 Readline which keymap to use.
 </P><P>
 
-<A NAME="IDX214"></A>
+<A NAME="IDX215"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_make_bare_keymap</B> <I>(void)</I>
 <DD>Returns a new, empty keymap.  The space for the keymap is allocated with
@@ -2840,14 +2849,14 @@ Readline which keymap to use.
 </DL>
 </P><P>
 
-<A NAME="IDX215"></A>
+<A NAME="IDX216"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_copy_keymap</B> <I>(Keymap map)</I>
 <DD>Return a new keymap which is a copy of <VAR>map</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX216"></A>
+<A NAME="IDX217"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_make_keymap</B> <I>(void)</I>
 <DD>Return a new keymap with the printing characters bound to rl_insert,
@@ -2856,7 +2865,7 @@ the Meta digits bound to produce numeric arguments.
 </DL>
 </P><P>
 
-<A NAME="IDX217"></A>
+<A NAME="IDX218"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_discard_keymap</B> <I>(Keymap keymap)</I>
 <DD>Free the storage associated with <VAR>keymap</VAR>.
@@ -2867,21 +2876,21 @@ Readline has several internal keymaps.  These functions allow you to
 change which keymap is active.
 </P><P>
 
-<A NAME="IDX218"></A>
+<A NAME="IDX219"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_get_keymap</B> <I>(void)</I>
 <DD>Returns the currently active keymap.
 </DL>
 </P><P>
 
-<A NAME="IDX219"></A>
+<A NAME="IDX220"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_set_keymap</B> <I>(Keymap keymap)</I>
 <DD>Makes <VAR>keymap</VAR> the currently active keymap.
 </DL>
 </P><P>
 
-<A NAME="IDX220"></A>
+<A NAME="IDX221"></A>
 <DL>
 <DT><U>Function:</U> Keymap <B>rl_get_keymap_by_name</B> <I>(const char *name)</I>
 <DD>Return the keymap matching <VAR>name</VAR>.  <VAR>name</VAR> is one which would
@@ -2889,7 +2898,7 @@ be supplied in a <CODE>set keymap</CODE> inputrc line (see section <A HREF="read
 </DL>
 </P><P>
 
-<A NAME="IDX221"></A>
+<A NAME="IDX222"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_get_keymap_name</B> <I>(Keymap keymap)</I>
 <DD>Return the name matching <VAR>keymap</VAR>.  <VAR>name</VAR> is one which would
@@ -2934,7 +2943,7 @@ initialization function assigned to the <CODE>rl_startup_hook</CODE> variable
 These functions manage key bindings.
 </P><P>
 
-<A NAME="IDX222"></A>
+<A NAME="IDX223"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_key</B> <I>(int key, rl_command_func_t *function)</I>
 <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> in the currently active keymap.
@@ -2942,7 +2951,7 @@ Returns non-zero in the case of an invalid <VAR>key</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX223"></A>
+<A NAME="IDX224"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_key_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I>
 <DD>Bind <VAR>key</VAR> to <VAR>function</VAR> in <VAR>map</VAR>.
@@ -2950,7 +2959,7 @@ Returns non-zero in the case of an invalid <VAR>key</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX224"></A>
+<A NAME="IDX225"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_key_if_unbound</B> <I>(int key, rl_command_func_t *function)</I>
 <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in the
@@ -2960,7 +2969,7 @@ already bound.
 </DL>
 </P><P>
 
-<A NAME="IDX225"></A>
+<A NAME="IDX226"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_key_if_unbound_in_map</B> <I>(int key, rl_command_func_t *function, Keymap map)</I>
 <DD>Binds <VAR>key</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>.
@@ -2969,7 +2978,7 @@ already bound.
 </DL>
 </P><P>
 
-<A NAME="IDX226"></A>
+<A NAME="IDX227"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_key</B> <I>(int key)</I>
 <DD>Bind <VAR>key</VAR> to the null function in the currently active keymap.
@@ -2977,7 +2986,7 @@ Returns non-zero in case of error.
 </DL>
 </P><P>
 
-<A NAME="IDX227"></A>
+<A NAME="IDX228"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_key_in_map</B> <I>(int key, Keymap map)</I>
 <DD>Bind <VAR>key</VAR> to the null function in <VAR>map</VAR>.
@@ -2985,21 +2994,21 @@ Returns non-zero in case of error.
 </DL>
 </P><P>
 
-<A NAME="IDX228"></A>
+<A NAME="IDX229"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_function_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
 <DD>Unbind all keys that execute <VAR>function</VAR> in <VAR>map</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX229"></A>
+<A NAME="IDX230"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_unbind_command_in_map</B> <I>(const char *command, Keymap map)</I>
 <DD>Unbind all keys that are bound to <VAR>command</VAR> in <VAR>map</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX230"></A>
+<A NAME="IDX231"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_keyseq</B> <I>(const char *keyseq, rl_command_func_t *function)</I>
 <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
@@ -3009,7 +3018,7 @@ The return value is non-zero if <VAR>keyseq</VAR> is invalid.
 </DL>
 </P><P>
 
-<A NAME="IDX231"></A>
+<A NAME="IDX232"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_keyseq_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
 <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the function
@@ -3019,14 +3028,14 @@ The return value is non-zero if <VAR>keyseq</VAR> is invalid.
 </DL>
 </P><P>
 
-<A NAME="IDX232"></A>
+<A NAME="IDX233"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_key</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
 <DD>Equivalent to <CODE>rl_bind_keyseq_in_map</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX233"></A>
+<A NAME="IDX234"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound</B> <I>(const char *keyseq, rl_command_func_t *function)</I>
 <DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in the
@@ -3036,7 +3045,7 @@ already bound.
 </DL>
 </P><P>
 
-<A NAME="IDX234"></A>
+<A NAME="IDX235"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_bind_keyseq_if_unbound_in_map</B> <I>(const char *keyseq, rl_command_func_t *function, Keymap map)</I>
 <DD>Binds <VAR>keyseq</VAR> to <VAR>function</VAR> if it is not already bound in <VAR>map</VAR>.
@@ -3045,7 +3054,7 @@ already bound.
 </DL>
 </P><P>
 
-<A NAME="IDX235"></A>
+<A NAME="IDX236"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_generic_bind</B> <I>(int type, const char *keyseq, char *data, Keymap map)</I>
 <DD>Bind the key sequence represented by the string <VAR>keyseq</VAR> to the arbitrary
@@ -3056,7 +3065,7 @@ necessary.  The initial keymap in which to do bindings is <VAR>map</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX236"></A>
+<A NAME="IDX237"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_parse_and_bind</B> <I>(char *line)</I>
 <DD>Parse <VAR>line</VAR> as if it had been read from the <CODE>inputrc</CODE> file and
@@ -3065,7 +3074,7 @@ perform any key bindings and variable assignments found
 </DL>
 </P><P>
 
-<A NAME="IDX237"></A>
+<A NAME="IDX238"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_read_init_file</B> <I>(const char *filename)</I>
 <DD>Read keybindings and variable assignments from <VAR>filename</VAR>
@@ -3096,14 +3105,14 @@ and the functions invoked by a particular key sequence.  You may also
 associate a new function name with an arbitrary function.
 </P><P>
 
-<A NAME="IDX238"></A>
+<A NAME="IDX239"></A>
 <DL>
 <DT><U>Function:</U> rl_command_func_t * <B>rl_named_function</B> <I>(const char *name)</I>
 <DD>Return the function with name <VAR>name</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX239"></A>
+<A NAME="IDX240"></A>
 <DL>
 <DT><U>Function:</U> rl_command_func_t * <B>rl_function_of_keyseq</B> <I>(const char *keyseq, Keymap map, int *type)</I>
 <DD>Return the function invoked by <VAR>keyseq</VAR> in keymap <VAR>map</VAR>.
@@ -3113,7 +3122,7 @@ it points to (one of <CODE>ISFUNC</CODE>, <CODE>ISKMAP</CODE>, or <CODE>ISMACR</
 </DL>
 </P><P>
 
-<A NAME="IDX240"></A>
+<A NAME="IDX241"></A>
 <DL>
 <DT><U>Function:</U> char ** <B>rl_invoking_keyseqs</B> <I>(rl_command_func_t *function)</I>
 <DD>Return an array of strings representing the key sequences used to
@@ -3121,7 +3130,7 @@ invoke <VAR>function</VAR> in the current keymap.
 </DL>
 </P><P>
 
-<A NAME="IDX241"></A>
+<A NAME="IDX242"></A>
 <DL>
 <DT><U>Function:</U> char ** <B>rl_invoking_keyseqs_in_map</B> <I>(rl_command_func_t *function, Keymap map)</I>
 <DD>Return an array of strings representing the key sequences used to
@@ -3129,7 +3138,7 @@ invoke <VAR>function</VAR> in the keymap <VAR>map</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX242"></A>
+<A NAME="IDX243"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_function_dumper</B> <I>(int readable)</I>
 <DD>Print the readline function names and the key sequences currently
@@ -3139,14 +3148,14 @@ the list is formatted in such a way that it can be made part of an
 </DL>
 </P><P>
 
-<A NAME="IDX243"></A>
+<A NAME="IDX244"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_list_funmap_names</B> <I>(void)</I>
 <DD>Print the names of all bindable Readline functions to <CODE>rl_outstream</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX244"></A>
+<A NAME="IDX245"></A>
 <DL>
 <DT><U>Function:</U> const char ** <B>rl_funmap_names</B> <I>(void)</I>
 <DD>Return a NULL terminated array of known function names.  The array is
@@ -3155,7 +3164,7 @@ should <CODE>free()</CODE> the array when you are done, but not the pointers.
 </DL>
 </P><P>
 
-<A NAME="IDX245"></A>
+<A NAME="IDX246"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_add_funmap_entry</B> <I>(const char *name, rl_command_func_t *function)</I>
 <DD>Add <VAR>name</VAR> to the list of bindable Readline command names, and make
@@ -3210,7 +3219,7 @@ tells what to undo, not how to undo it.  <CODE>UNDO_BEGIN</CODE> and
 <CODE>rl_end_undo_group()</CODE>.
 </P><P>
 
-<A NAME="IDX246"></A>
+<A NAME="IDX247"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_begin_undo_group</B> <I>(void)</I>
 <DD>Begins saving undo information in a group construct.  The undo
@@ -3220,7 +3229,7 @@ information usually comes from calls to <CODE>rl_insert_text()</CODE> and
 </DL>
 </P><P>
 
-<A NAME="IDX247"></A>
+<A NAME="IDX248"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_end_undo_group</B> <I>(void)</I>
 <DD>Closes the current undo group started with <CODE>rl_begin_undo_group
@@ -3229,7 +3238,7 @@ for each call to <CODE>rl_begin_undo_group()</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX248"></A>
+<A NAME="IDX249"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_add_undo</B> <I>(enum undo_code what, int start, int end, char *text)</I>
 <DD>Remember how to undo an event (according to <VAR>what</VAR>).  The affected
@@ -3237,14 +3246,14 @@ text runs from <VAR>start</VAR> to <VAR>end</VAR>, and encompasses <VAR>text</VA
 </DL>
 </P><P>
 
-<A NAME="IDX249"></A>
+<A NAME="IDX250"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_free_undo_list</B> <I>(void)</I>
 <DD>Free the existing undo list.
 </DL>
 </P><P>
 
-<A NAME="IDX250"></A>
+<A NAME="IDX251"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_do_undo</B> <I>(void)</I>
 <DD>Undo the first thing on the undo list.  Returns <CODE>0</CODE> if there was
@@ -3258,7 +3267,7 @@ once, just before you modify the text.  You must supply the indices of
 the text range that you are going to modify.
 </P><P>
 
-<A NAME="IDX251"></A>
+<A NAME="IDX252"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_modifying</B> <I>(int start, int end)</I>
 <DD>Tell Readline to save the text between <VAR>start</VAR> and <VAR>end</VAR> as a
@@ -3285,7 +3294,7 @@ that text.
 <!--docid::SEC35::-->
 <P>
 
-<A NAME="IDX252"></A>
+<A NAME="IDX253"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_redisplay</B> <I>(void)</I>
 <DD>Change what's displayed on the screen to reflect the current contents
@@ -3293,7 +3302,7 @@ of <CODE>rl_line_buffer</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX253"></A>
+<A NAME="IDX254"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_forced_update_display</B> <I>(void)</I>
 <DD>Force the line to be updated and redisplayed, whether or not
@@ -3301,7 +3310,7 @@ Readline thinks the screen display is correct.
 </DL>
 </P><P>
 
-<A NAME="IDX254"></A>
+<A NAME="IDX255"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_on_new_line</B> <I>(void)</I>
 <DD>Tell the update functions that we have moved onto a new (empty) line,
@@ -3309,7 +3318,7 @@ usually after ouputting a newline.
 </DL>
 </P><P>
 
-<A NAME="IDX255"></A>
+<A NAME="IDX256"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_on_new_line_with_prompt</B> <I>(void)</I>
 <DD>Tell the update functions that we have moved onto a new line, with
@@ -3321,7 +3330,7 @@ It should be used after setting <VAR>rl_already_prompted</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX256"></A>
+<A NAME="IDX257"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_reset_line_state</B> <I>(void)</I>
 <DD>Reset the display state to a clean state and redisplay the current line
@@ -3329,14 +3338,14 @@ starting on a new line.
 </DL>
 </P><P>
 
-<A NAME="IDX257"></A>
+<A NAME="IDX258"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_crlf</B> <I>(void)</I>
 <DD>Move the cursor to the start of the next screen line.
 </DL>
 </P><P>
 
-<A NAME="IDX258"></A>
+<A NAME="IDX259"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_show_char</B> <I>(int c)</I>
 <DD>Display character <VAR>c</VAR> on <CODE>rl_outstream</CODE>.
@@ -3347,7 +3356,7 @@ redisplay.
 </DL>
 </P><P>
 
-<A NAME="IDX259"></A>
+<A NAME="IDX260"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_message</B> <I>(const char *, <small>...</small>)</I>
 <DD>The arguments are a format string as would be supplied to <CODE>printf</CODE>,
@@ -3360,7 +3369,7 @@ before calling this function.
 </DL>
 </P><P>
 
-<A NAME="IDX260"></A>
+<A NAME="IDX261"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_clear_message</B> <I>(void)</I>
 <DD>Clear the message in the echo area.  If the prompt was saved with a call to
@@ -3369,7 +3378,7 @@ call <CODE>rl_restore_prompt</CODE> before calling this function.
 </DL>
 </P><P>
 
-<A NAME="IDX261"></A>
+<A NAME="IDX262"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_save_prompt</B> <I>(void)</I>
 <DD>Save the local Readline prompt display state in preparation for
@@ -3377,7 +3386,7 @@ displaying a new message in the message area with <CODE>rl_message()</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX262"></A>
+<A NAME="IDX263"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_restore_prompt</B> <I>(void)</I>
 <DD>Restore the local Readline prompt display state saved by the most
@@ -3388,7 +3397,7 @@ corresponding call to <CODE>rl_clear_message</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX263"></A>
+<A NAME="IDX264"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_expand_prompt</B> <I>(char *prompt)</I>
 <DD>Expand any special character sequences in <VAR>prompt</VAR> and set up the
@@ -3406,7 +3415,7 @@ be used to embed terminal-specific escape sequences in prompts.
 </DL>
 </P><P>
 
-<A NAME="IDX264"></A>
+<A NAME="IDX265"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_prompt</B> <I>(const char *prompt)</I>
 <DD>Make Readline use <VAR>prompt</VAR> for subsequent redisplay.  This calls
@@ -3433,7 +3442,7 @@ to the result.
 <!--docid::SEC36::-->
 <P>
 
-<A NAME="IDX265"></A>
+<A NAME="IDX266"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_insert_text</B> <I>(const char *text)</I>
 <DD>Insert <VAR>text</VAR> into the line at the current cursor position.
@@ -3441,7 +3450,7 @@ Returns the number of characters inserted.
 </DL>
 </P><P>
 
-<A NAME="IDX266"></A>
+<A NAME="IDX267"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_delete_text</B> <I>(int start, int end)</I>
 <DD>Delete the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line.
@@ -3449,7 +3458,7 @@ Returns the number of characters deleted.
 </DL>
 </P><P>
 
-<A NAME="IDX267"></A>
+<A NAME="IDX268"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_copy_text</B> <I>(int start, int end)</I>
 <DD>Return a copy of the text between <VAR>start</VAR> and <VAR>end</VAR> in
@@ -3457,7 +3466,7 @@ the current line.
 </DL>
 </P><P>
 
-<A NAME="IDX268"></A>
+<A NAME="IDX269"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_kill_text</B> <I>(int start, int end)</I>
 <DD>Copy the text between <VAR>start</VAR> and <VAR>end</VAR> in the current line
@@ -3469,7 +3478,7 @@ not a kill, a new kill ring slot is used.
 </DL>
 </P><P>
 
-<A NAME="IDX269"></A>
+<A NAME="IDX270"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_push_macro_input</B> <I>(char *macro)</I>
 <DD>Cause <VAR>macro</VAR> to be inserted into the line, as if it had been invoked
@@ -3496,7 +3505,7 @@ by a key bound to a macro.  Not especially useful; use
 <!--docid::SEC37::-->
 <P>
 
-<A NAME="IDX270"></A>
+<A NAME="IDX271"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_read_key</B> <I>(void)</I>
 <DD>Return the next character available from Readline's current input stream.
@@ -3508,7 +3517,7 @@ the <CODE>rl_event_hook</CODE> variable.
 </DL>
 </P><P>
 
-<A NAME="IDX271"></A>
+<A NAME="IDX272"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_getc</B> <I>(FILE *stream)</I>
 <DD>Return the next character available from <VAR>stream</VAR>, which is assumed to
@@ -3516,7 +3525,7 @@ be the keyboard.
 </DL>
 </P><P>
 
-<A NAME="IDX272"></A>
+<A NAME="IDX273"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_stuff_char</B> <I>(int c)</I>
 <DD>Insert <VAR>c</VAR> into the Readline input stream.  It will be "read"
@@ -3527,7 +3536,7 @@ before Readline attempts to read characters from the terminal with
 </DL>
 </P><P>
 
-<A NAME="IDX273"></A>
+<A NAME="IDX274"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_execute_next</B> <I>(int c)</I>
 <DD>Make <VAR>c</VAR> be the next command to be executed when <CODE>rl_read_key()</CODE>
@@ -3535,7 +3544,7 @@ is called.  This sets <VAR>rl_pending_input</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX274"></A>
+<A NAME="IDX275"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_clear_pending_input</B> <I>(void)</I>
 <DD>Unset <VAR>rl_pending_input</VAR>, effectively negating the effect of any
@@ -3544,7 +3553,7 @@ pending input has not already been read with <CODE>rl_read_key()</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX275"></A>
+<A NAME="IDX276"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_keyboard_input_timeout</B> <I>(int u)</I>
 <DD>While waiting for keyboard input in <CODE>rl_read_key()</CODE>, Readline will
@@ -3572,7 +3581,7 @@ one-tenth of a second.  Returns the old timeout value.
 <!--docid::SEC38::-->
 <P>
 
-<A NAME="IDX276"></A>
+<A NAME="IDX277"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_prep_terminal</B> <I>(int meta_flag)</I>
 <DD>Modify the terminal settings for Readline's use, so <CODE>readline()</CODE>
@@ -3582,7 +3591,7 @@ read eight-bit input.
 </DL>
 </P><P>
 
-<A NAME="IDX277"></A>
+<A NAME="IDX278"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_deprep_terminal</B> <I>(void)</I>
 <DD>Undo the effects of <CODE>rl_prep_terminal()</CODE>, leaving the terminal in
@@ -3591,7 +3600,7 @@ the state in which it was before the most recent call to
 </DL>
 </P><P>
 
-<A NAME="IDX278"></A>
+<A NAME="IDX279"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_tty_set_default_bindings</B> <I>(Keymap kmap)</I>
 <DD>Read the operating system's terminal editing characters (as would be
@@ -3600,7 +3609,7 @@ The bindings are performed in <VAR>kmap</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX279"></A>
+<A NAME="IDX280"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_tty_unset_default_bindings</B> <I>(Keymap kmap)</I>
 <DD>Reset the bindings manipulated by <CODE>rl_tty_set_default_bindings</CODE> so
@@ -3609,7 +3618,7 @@ The bindings are performed in <VAR>kmap</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX280"></A>
+<A NAME="IDX281"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_reset_terminal</B> <I>(const char *terminal_name)</I>
 <DD>Reinitialize Readline's idea of the terminal settings using
@@ -3637,7 +3646,7 @@ environment variable is used.
 <!--docid::SEC39::-->
 <P>
 
-<A NAME="IDX281"></A>
+<A NAME="IDX282"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_replace_line</B> <I>(const char *text, int clear_undo)</I>
 <DD>Replace the contents of <CODE>rl_line_buffer</CODE> with <VAR>text</VAR>.
@@ -3647,7 +3656,7 @@ current line is cleared.
 </DL>
 </P><P>
 
-<A NAME="IDX282"></A>
+<A NAME="IDX283"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_extend_line_buffer</B> <I>(int len)</I>
 <DD>Ensure that <CODE>rl_line_buffer</CODE> has enough space to hold <VAR>len</VAR>
@@ -3655,7 +3664,7 @@ characters, possibly reallocating it if necessary.
 </DL>
 </P><P>
 
-<A NAME="IDX283"></A>
+<A NAME="IDX284"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_initialize</B> <I>(void)</I>
 <DD>Initialize or re-initialize Readline's internal state.
@@ -3664,21 +3673,21 @@ reading any input.
 </DL>
 </P><P>
 
-<A NAME="IDX284"></A>
+<A NAME="IDX285"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_ding</B> <I>(void)</I>
 <DD>Ring the terminal bell, obeying the setting of <CODE>bell-style</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX285"></A>
+<A NAME="IDX286"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_alphabetic</B> <I>(int c)</I>
 <DD>Return 1 if <VAR>c</VAR> is an alphabetic character.
 </DL>
 </P><P>
 
-<A NAME="IDX286"></A>
+<A NAME="IDX287"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_display_match_list</B> <I>(char **matches, int len, int max)</I>
 <DD>A convenience function for displaying a list of strings in
@@ -3695,28 +3704,28 @@ The following are implemented as macros, defined in <CODE>chardefs.h</CODE>.
 Applications should refrain from using them.
 </P><P>
 
-<A NAME="IDX287"></A>
+<A NAME="IDX288"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_uppercase_p</B> <I>(int c)</I>
 <DD>Return 1 if <VAR>c</VAR> is an uppercase alphabetic character.
 </DL>
 </P><P>
 
-<A NAME="IDX288"></A>
+<A NAME="IDX289"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_lowercase_p</B> <I>(int c)</I>
 <DD>Return 1 if <VAR>c</VAR> is a lowercase alphabetic character.
 </DL>
 </P><P>
 
-<A NAME="IDX289"></A>
+<A NAME="IDX290"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_digit_p</B> <I>(int c)</I>
 <DD>Return 1 if <VAR>c</VAR> is a numeric character.
 </DL>
 </P><P>
 
-<A NAME="IDX290"></A>
+<A NAME="IDX291"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_to_upper</B> <I>(int c)</I>
 <DD>If <VAR>c</VAR> is a lowercase alphabetic character, return the corresponding
@@ -3724,7 +3733,7 @@ uppercase character.
 </DL>
 </P><P>
 
-<A NAME="IDX291"></A>
+<A NAME="IDX292"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_to_lower</B> <I>(int c)</I>
 <DD>If <VAR>c</VAR> is an uppercase alphabetic character, return the corresponding
@@ -3732,7 +3741,7 @@ lowercase character.
 </DL>
 </P><P>
 
-<A NAME="IDX292"></A>
+<A NAME="IDX293"></A>
 <DL>
 <DT><U>Function:</U> int <B>_rl_digit_value</B> <I>(int c)</I>
 <DD>If <VAR>c</VAR> is a number, return the value it represents.
@@ -3757,7 +3766,7 @@ lowercase character.
 <!--docid::SEC40::-->
 <P>
 
-<A NAME="IDX293"></A>
+<A NAME="IDX294"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_macro_bind</B> <I>(const char *keyseq, const char *macro, Keymap map)</I>
 <DD>Bind the key sequence <VAR>keyseq</VAR> to invoke the macro <VAR>macro</VAR>.
@@ -3767,7 +3776,7 @@ use <CODE>rl_generic_bind()</CODE> instead.
 </DL>
 </P><P>
 
-<A NAME="IDX294"></A>
+<A NAME="IDX295"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_macro_dumper</B> <I>(int readable)</I>
 <DD>Print the key sequences bound to macros and their values, using
@@ -3777,7 +3786,7 @@ that it can be made part of an <CODE>inputrc</CODE> file and re-read.
 </DL>
 </P><P>
 
-<A NAME="IDX295"></A>
+<A NAME="IDX296"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_variable_bind</B> <I>(const char *variable, const char *value)</I>
 <DD>Make the Readline variable <VAR>variable</VAR> have <VAR>value</VAR>.
@@ -3787,7 +3796,7 @@ file (see section <A HREF="readline.html#SEC10">1.3.1 Readline Init File Syntax<
 </DL>
 </P><P>
 
-<A NAME="IDX296"></A>
+<A NAME="IDX297"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_variable_value</B> <I>(const char *variable)</I>
 <DD>Return a string representing the value of the Readline variable <VAR>variable</VAR>.
@@ -3795,7 +3804,7 @@ For boolean variables, this string is either <SAMP>`on'</SAMP> or <SAMP>`off'</S
 </DL>
 </P><P>
 
-<A NAME="IDX297"></A>
+<A NAME="IDX298"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_variable_dumper</B> <I>(int readable)</I>
 <DD>Print the readline variable names and their current values
@@ -3805,7 +3814,7 @@ that it can be made part of an <CODE>inputrc</CODE> file and re-read.
 </DL>
 </P><P>
 
-<A NAME="IDX298"></A>
+<A NAME="IDX299"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_paren_blink_timeout</B> <I>(int u)</I>
 <DD>Set the time interval (in microseconds) that Readline waits when showing
@@ -3813,7 +3822,7 @@ a balancing character when <CODE>blink-matching-paren</CODE> has been enabled.
 </DL>
 </P><P>
 
-<A NAME="IDX299"></A>
+<A NAME="IDX300"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_get_termcap</B> <I>(const char *cap)</I>
 <DD>Retrieve the string value of the termcap capability <VAR>cap</VAR>.
@@ -3851,7 +3860,7 @@ also be invoked as a `callback' function from an event loop.  There
 are functions available to make this easy.
 </P><P>
 
-<A NAME="IDX300"></A>
+<A NAME="IDX301"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_callback_handler_install</B> <I>(const char *prompt, rl_vcpfunc_t *lhandler)</I>
 <DD>Set up the terminal for readline I/O and display the initial
@@ -3861,7 +3870,7 @@ The function takes the text of the line as an argument.
 </DL>
 </P><P>
 
-<A NAME="IDX301"></A>
+<A NAME="IDX302"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_callback_read_char</B> <I>(void)</I>
 <DD>Whenever an application determines that keyboard input is available, it
@@ -3880,7 +3889,7 @@ the terminal settings are modified for Readline's use again.
 </DL>
 </P><P>
 
-<A NAME="IDX302"></A>
+<A NAME="IDX303"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_callback_handler_remove</B> <I>(void)</I>
 <DD>Restore the terminal to its initial state and remove the line handler.
@@ -4038,7 +4047,7 @@ values of these variables only when calling <CODE>readline()</CODE>, not in
 a signal handler, so Readline's internal signal state is not corrupted.
 </P><P>
 
-<A NAME="IDX303"></A>
+<A NAME="IDX304"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_catch_signals</B>
 <DD>If this variable is non-zero, Readline will install signal handlers for
@@ -4050,7 +4059,7 @@ The default value of <CODE>rl_catch_signals</CODE> is 1.
 </DL>
 </P><P>
 
-<A NAME="IDX304"></A>
+<A NAME="IDX305"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_catch_sigwinch</B>
 <DD>If this variable is non-zero, Readline will install a signal handler for
@@ -4068,7 +4077,7 @@ Readline provides convenience functions to do the necessary terminal
 and internal state cleanup upon receipt of a signal.
 </P><P>
 
-<A NAME="IDX305"></A>
+<A NAME="IDX306"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_cleanup_after_signal</B> <I>(void)</I>
 <DD>This function will reset the state of the terminal to what it was before
@@ -4078,7 +4087,7 @@ all signals, depending on the values of <CODE>rl_catch_signals</CODE> and
 </DL>
 </P><P>
 
-<A NAME="IDX306"></A>
+<A NAME="IDX307"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_free_line_state</B> <I>(void)</I>
 <DD>This will free any partial state associated with the current input line
@@ -4090,7 +4099,7 @@ current input line.
 </DL>
 </P><P>
 
-<A NAME="IDX307"></A>
+<A NAME="IDX308"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_reset_after_signal</B> <I>(void)</I>
 <DD>This will reinitialize the terminal and reinstall any Readline signal
@@ -4105,18 +4114,19 @@ Readline to update its idea of the terminal size when a <CODE>SIGWINCH</CODE>
 is received.
 </P><P>
 
-<A NAME="IDX308"></A>
+<A NAME="IDX309"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_resize_terminal</B> <I>(void)</I>
 <DD>Update Readline's internal screen size by reading values from the kernel.
 </DL>
 </P><P>
 
-<A NAME="IDX309"></A>
+<A NAME="IDX310"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_set_screen_size</B> <I>(int rows, int cols)</I>
 <DD>Set Readline's idea of the terminal size to <VAR>rows</VAR> rows and
-<VAR>cols</VAR> columns.
+<VAR>cols</VAR> columns.  If either <VAR>rows</VAR> or <VAR>columns</VAR> is less than
+or equal to 0, Readline's idea of that terminal dimension is unchanged.
 </DL>
 </P><P>
 
@@ -4125,7 +4135,7 @@ is still interested in the screen dimensions, Readline's idea of the screen
 size may be queried.
 </P><P>
 
-<A NAME="IDX310"></A>
+<A NAME="IDX311"></A>
 <DL>
 <DT><U>Function:</U> void <B>rl_get_screen_size</B> <I>(int *rows, int *cols)</I>
 <DD>Return Readline's idea of the terminal's size in the
@@ -4133,10 +4143,17 @@ variables pointed to by the arguments.
 </DL>
 </P><P>
 
+<A NAME="IDX312"></A>
+<DL>
+<DT><U>Function:</U> void <B>rl_reset_screen_size</B> <I>(void)</I>
+<DD>Cause Readline to reobtain the screen size and recalculate its dimensions.
+</DL>
+</P><P>
+
 The following functions install and remove Readline's signal handlers.
 </P><P>
 
-<A NAME="IDX311"></A>
+<A NAME="IDX313"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_set_signals</B> <I>(void)</I>
 <DD>Install Readline's signal handler for <CODE>SIGINT</CODE>, <CODE>SIGQUIT</CODE>,
@@ -4146,7 +4163,7 @@ The following functions install and remove Readline's signal handlers.
 </DL>
 </P><P>
 
-<A NAME="IDX312"></A>
+<A NAME="IDX314"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_clear_signals</B> <I>(void)</I>
 <DD>Remove all of the Readline signal handlers installed by
@@ -4259,7 +4276,7 @@ Such a generator function is referred to as an
 </OL>
 <P>
 
-<A NAME="IDX313"></A>
+<A NAME="IDX315"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
 <DD>Complete the word at or before point.  You have supplied the function
@@ -4268,7 +4285,7 @@ that does the initial simple matching selection algorithm (see
 </DL>
 </P><P>
 
-<A NAME="IDX314"></A>
+<A NAME="IDX316"></A>
 <DL>
 <DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
 <DD>This is a pointer to the generator function for
@@ -4304,7 +4321,7 @@ Here is the complete list of callable completion functions present in
 Readline.
 </P><P>
 
-<A NAME="IDX315"></A>
+<A NAME="IDX317"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete_internal</B> <I>(int what_to_do)</I>
 <DD>Complete the word at or before point.  <VAR>what_to_do</VAR> says what to do
@@ -4318,7 +4335,7 @@ a common prefix.
 </DL>
 </P><P>
 
-<A NAME="IDX316"></A>
+<A NAME="IDX318"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_complete</B> <I>(int ignore, int invoking_key)</I>
 <DD>Complete the word at or before point.  You have supplied the function
@@ -4330,7 +4347,7 @@ argument depending on <VAR>invoking_key</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX317"></A>
+<A NAME="IDX319"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_possible_completions</B> <I>(int count, int invoking_key)</I>
 <DD>List the possible completions.  See description of <CODE>rl_complete
@@ -4339,7 +4356,7 @@ argument depending on <VAR>invoking_key</VAR>.
 </DL>
 </P><P>
 
-<A NAME="IDX318"></A>
+<A NAME="IDX320"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_insert_completions</B> <I>(int count, int invoking_key)</I>
 <DD>Insert the list of possible completions into the line, deleting the
@@ -4348,7 +4365,7 @@ This calls <CODE>rl_complete_internal()</CODE> with an argument of <SAMP>`*'</SA
 </DL>
 </P><P>
 
-<A NAME="IDX319"></A>
+<A NAME="IDX321"></A>
 <DL>
 <DT><U>Function:</U> int <B>rl_completion_mode</B> <I>(rl_command_func_t *cfunc)</I>
 <DD>Returns the apppriate value to pass to <CODE>rl_complete_internal()</CODE>
@@ -4360,7 +4377,7 @@ the same interface as <CODE>rl_complete()</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX320"></A>
+<A NAME="IDX322"></A>
 <DL>
 <DT><U>Function:</U> char ** <B>rl_completion_matches</B> <I>(const char *text, rl_compentry_func_t *entry_func)</I>
 <DD>Returns an array of strings which is a list of completions for
@@ -4378,7 +4395,7 @@ when there are no more matches.
 </DL>
 </P><P>
 
-<A NAME="IDX321"></A>
+<A NAME="IDX323"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_filename_completion_function</B> <I>(const char *text, int state)</I>
 <DD>A generator function for filename completion in the general case.
@@ -4389,7 +4406,7 @@ Readline functions).
 </DL>
 </P><P>
 
-<A NAME="IDX322"></A>
+<A NAME="IDX324"></A>
 <DL>
 <DT><U>Function:</U> char * <B>rl_username_completion_function</B> <I>(const char *text, int state)</I>
 <DD>A completion generator for usernames.  <VAR>text</VAR> contains a partial
@@ -4417,7 +4434,7 @@ for subsequent calls.
 <!--docid::SEC47::-->
 <P>
 
-<A NAME="IDX323"></A>
+<A NAME="IDX325"></A>
 <DL>
 <DT><U>Variable:</U> rl_compentry_func_t * <B>rl_completion_entry_function</B>
 <DD>A pointer to the generator function for <CODE>rl_completion_matches()</CODE>.
@@ -4426,7 +4443,7 @@ the default filename completer.
 </DL>
 </P><P>
 
-<A NAME="IDX324"></A>
+<A NAME="IDX326"></A>
 <DL>
 <DT><U>Variable:</U> rl_completion_func_t * <B>rl_attempted_completion_function</B>
 <DD>A pointer to an alternative function to create matches.
@@ -4443,7 +4460,7 @@ completion even if this function returns no matches.
 </DL>
 </P><P>
 
-<A NAME="IDX325"></A>
+<A NAME="IDX327"></A>
 <DL>
 <DT><U>Variable:</U> rl_quote_func_t * <B>rl_filename_quoting_function</B>
 <DD>A pointer to a function that will quote a filename in an
@@ -4460,7 +4477,7 @@ to reset this character.
 </DL>
 </P><P>
 
-<A NAME="IDX326"></A>
+<A NAME="IDX328"></A>
 <DL>
 <DT><U>Variable:</U> rl_dequote_func_t * <B>rl_filename_dequoting_function</B>
 <DD>A pointer to a function that will remove application-specific quoting
@@ -4473,7 +4490,7 @@ that delimits the filename (usually <SAMP>`''</SAMP> or <SAMP>`"'</SAMP>).  If
 </DL>
 </P><P>
 
-<A NAME="IDX327"></A>
+<A NAME="IDX329"></A>
 <DL>
 <DT><U>Variable:</U> rl_linebuf_func_t * <B>rl_char_is_quoted_p</B>
 <DD>A pointer to a function to call that determines whether or not a specific
@@ -4486,7 +4503,7 @@ used to break words for the completer.
 </DL>
 </P><P>
 
-<A NAME="IDX328"></A>
+<A NAME="IDX330"></A>
 <DL>
 <DT><U>Variable:</U> rl_compignore_func_t * <B>rl_ignore_some_completions_function</B>
 <DD>This function, if defined, is called by the completer when real filename
@@ -4499,7 +4516,7 @@ from the array must be freed.
 </DL>
 </P><P>
 
-<A NAME="IDX329"></A>
+<A NAME="IDX331"></A>
 <DL>
 <DT><U>Variable:</U> rl_icppfunc_t * <B>rl_directory_completion_hook</B>
 <DD>This function, if defined, is allowed to modify the directory portion
@@ -4515,7 +4532,7 @@ It could be used to expand symbolic links or shell variables in pathnames.
 </DL>
 </P><P>
 
-<A NAME="IDX330"></A>
+<A NAME="IDX332"></A>
 <DL>
 <DT><U>Variable:</U> rl_compdisp_func_t * <B>rl_completion_display_matches_hook</B>
 <DD>If non-zero, then this is the address of a function to call when
@@ -4532,7 +4549,7 @@ function may be called from this hook.
 </DL>
 </P><P>
 
-<A NAME="IDX331"></A>
+<A NAME="IDX333"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_basic_word_break_characters</B>
 <DD>The basic list of characters that signal a break between words for the
@@ -4542,14 +4559,14 @@ which break words for completion in Bash:
 </DL>
 </P><P>
 
-<A NAME="IDX332"></A>
+<A NAME="IDX334"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_basic_quote_characters</B>
 <DD>A list of quote characters which can cause a word break.
 </DL>
 </P><P>
 
-<A NAME="IDX333"></A>
+<A NAME="IDX335"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_completer_word_break_characters</B>
 <DD>The list of characters that signal a break between words for
@@ -4558,7 +4575,7 @@ which break words for completion in Bash:
 </DL>
 </P><P>
 
-<A NAME="IDX334"></A>
+<A NAME="IDX336"></A>
 <DL>
 <DT><U>Variable:</U> rl_cpvfunc_t * <B>rl_completion_word_break_hook</B>
 <DD>If non-zero, this is the address of a function to call when Readline is
@@ -4570,7 +4587,7 @@ returns <CODE>NULL</CODE>, <CODE>rl_completer_word_break_characters</CODE> is us
 </DL>
 </P><P>
 
-<A NAME="IDX335"></A>
+<A NAME="IDX337"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_completer_quote_characters</B>
 <DD>A list of characters which can be used to quote a substring of the line.
@@ -4580,7 +4597,7 @@ unless they also appear within this list.
 </DL>
 </P><P>
 
-<A NAME="IDX336"></A>
+<A NAME="IDX338"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_filename_quote_characters</B>
 <DD>A list of characters that cause a filename to be quoted by the completer
@@ -4588,7 +4605,7 @@ when they appear in a completed filename.  The default is the null string.
 </DL>
 </P><P>
 
-<A NAME="IDX337"></A>
+<A NAME="IDX339"></A>
 <DL>
 <DT><U>Variable:</U> const char * <B>rl_special_prefixes</B>
 <DD>The list of characters that are word break characters, but should be
@@ -4599,7 +4616,7 @@ shell variables and hostnames.
 </DL>
 </P><P>
 
-<A NAME="IDX338"></A>
+<A NAME="IDX340"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_query_items</B>
 <DD>Up to this many items will be displayed in response to a
@@ -4609,7 +4626,7 @@ indicates that Readline should never ask the user.
 </DL>
 </P><P>
 
-<A NAME="IDX339"></A>
+<A NAME="IDX341"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_append_character</B>
 <DD>When a single completion alternative matches at the end of the command
@@ -4622,7 +4639,7 @@ an application-specific command line syntax specification.
 </DL>
 </P><P>
 
-<A NAME="IDX340"></A>
+<A NAME="IDX342"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_suppress_append</B>
 <DD>If non-zero, <VAR>rl_completion_append_character</VAR> is not appended to
@@ -4632,7 +4649,7 @@ is called, and may only be changed within such a function.
 </DL>
 </P><P>
 
-<A NAME="IDX341"></A>
+<A NAME="IDX343"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_quote_character</B>
 <DD>When Readline is completing quoted text, as delimited by one of the
@@ -4642,7 +4659,7 @@ This is set before any application-specific completion function is called.
 </DL>
 </P><P>
 
-<A NAME="IDX342"></A>
+<A NAME="IDX344"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_suppress_quote</B>
 <DD>If non-zero, Readline does not append a matching quote character when
@@ -4652,7 +4669,7 @@ is called, and may only be changed within such a function.
 </DL>
 </P><P>
 
-<A NAME="IDX343"></A>
+<A NAME="IDX345"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_found_quote</B>
 <DD>When Readline is completing quoted text, it sets this variable
@@ -4662,7 +4679,7 @@ This is set before any application-specific completion function is called.
 </DL>
 </P><P>
 
-<A NAME="IDX344"></A>
+<A NAME="IDX346"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_mark_symlink_dirs</B>
 <DD>If non-zero, a slash will be appended to completed filenames that are
@@ -4677,7 +4694,7 @@ function modifies the value, the user's preferences are honored.
 </DL>
 </P><P>
 
-<A NAME="IDX345"></A>
+<A NAME="IDX347"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_ignore_completion_duplicates</B>
 <DD>If non-zero, then duplicates in the matches are removed.
@@ -4685,7 +4702,7 @@ The default is 1.
 </DL>
 </P><P>
 
-<A NAME="IDX346"></A>
+<A NAME="IDX348"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_filename_completion_desired</B>
 <DD>Non-zero means that the results of the matches are to be treated as
@@ -4699,7 +4716,7 @@ characters in <CODE>rl_filename_quote_characters</CODE> and
 </DL>
 </P><P>
 
-<A NAME="IDX347"></A>
+<A NAME="IDX349"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_filename_quoting_desired</B>
 <DD>Non-zero means that the results of the matches are to be quoted using
@@ -4713,7 +4730,7 @@ by <CODE>rl_filename_quoting_function</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX348"></A>
+<A NAME="IDX350"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_attempted_completion_over</B>
 <DD>If an application-specific completion function assigned to
@@ -4724,7 +4741,7 @@ It should be set only by an application's completion function.
 </DL>
 </P><P>
 
-<A NAME="IDX349"></A>
+<A NAME="IDX351"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_completion_type</B>
 <DD>Set to a character describing the type of completion Readline is currently
@@ -4736,7 +4753,7 @@ the same interface as <CODE>rl_complete()</CODE>.
 </DL>
 </P><P>
 
-<A NAME="IDX350"></A>
+<A NAME="IDX352"></A>
 <DL>
 <DT><U>Variable:</U> int <B>rl_inhibit_completion</B>
 <DD>If this variable is non-zero, completion is inhibited.  The completion
@@ -5247,7 +5264,7 @@ valid_argument (caller, arg)
 <!--docid::SEC50::-->
 <P>
 
-<A NAME="IDX351"></A>
+<A NAME="IDX353"></A>
 <center>
  Version 1.2, November 2002
 </center>
@@ -5817,7 +5834,7 @@ to permit their use in free software.
 <TR><TD></TD><TD valign=top><A HREF="readline.html#SEC4">editing command lines</A></TD><TD valign=top><A HREF="rlman.html#SEC4">1.2.1 Readline Bare Essentials</A></TD></TR>
 <TR><TD COLSPAN=3> <HR></TD></TR>
 <TR><TH><A NAME="cp_F"></A>F</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX351">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX353">FDL, GNU Free Documentation License</A></TD><TD valign=top><A HREF="rlman.html#SEC50">A.1 GNU Free Documentation License</A></TD></TR>
 <TR><TD COLSPAN=3> <HR></TD></TR>
 <TR><TH><A NAME="cp_I"></A>I</TH><TD></TD><TD></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#SEC9">initialization file, readline</A></TD><TD valign=top><A HREF="rlman.html#SEC9">1.3 Readline Init File</A></TD></TR>
@@ -5925,12 +5942,12 @@ to permit their use in free software.
 <TR><TD></TD><TH ALIGN=LEFT>Index Entry</TH><TH ALIGN=LEFT> Section</TH></TR>
 <TR><TD COLSPAN=3> <HR></TD></TR>
 <TR><TH><A NAME="fn__"></A>_</TH><TD></TD><TD></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX290"><CODE>_rl_digit_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>_rl_digit_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX289"><CODE>_rl_lowercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX292"><CODE>_rl_to_lower</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX291"><CODE>_rl_to_upper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX288"><CODE>_rl_uppercase_p</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
 <TR><TD COLSPAN=3> <HR></TD></TR>
 <TR><TH><A NAME="fn_A"></A>A</TH><TD></TD><TD></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX146"><CODE>abort (C-g)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
@@ -6096,171 +6113,173 @@ to permit their use in free software.
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX55"><CODE>reverse-search-history (C-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC15">1.4.2 Commands For Manipulating The History</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX154"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX155"><CODE>revert-line (M-r)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC21">1.4.8 Some Miscellaneous Commands</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_add_defun</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC30">2.4.1 Naming a Function</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_add_funmap_entry</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_add_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_alphabetic</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX190">rl_already_prompted</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX348">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX246"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">rl_completion_found_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX344">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_quote_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_completion_suppress_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX349">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_completion_word_break_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_attempted_completion_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX350">rl_attempted_completion_over</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX334">rl_basic_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX333">rl_basic_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_begin_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX223"><CODE>rl_bind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX225"><CODE>rl_bind_key_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_bind_key_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX224"><CODE>rl_bind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX231"><CODE>rl_bind_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX234"><CODE>rl_bind_keyseq_if_unbound</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_bind_keyseq_if_unbound_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_bind_keyseq_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_binding_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX301"><CODE>rl_callback_handler_install</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX303"><CODE>rl_callback_handler_remove</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX302"><CODE>rl_callback_read_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC41">2.4.12 Alternate Interface</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX304">rl_catch_signals</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX305">rl_catch_sigwinch</A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX329">rl_char_is_quoted_p</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_cleanup_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_clear_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_clear_pending_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX314"><CODE>rl_clear_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX315"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_complete</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_complete_internal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_completer_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX335">rl_completer_word_break_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX341">rl_completion_append_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX332">rl_completion_display_matches_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX316">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC45">2.6.1 How Completing Works</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_completion_entry_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX345">rl_completion_found_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX346">rl_completion_mark_symlink_dirs</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322"><CODE>rl_completion_matches</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321"><CODE>rl_completion_mode</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX340">rl_completion_query_items</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX343">rl_completion_quote_character</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX342">rl_completion_suppress_append</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX344">rl_completion_suppress_quote</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX351">rl_completion_type</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_completion_word_break_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_copy_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_copy_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_crlf</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX267"><CODE>rl_delete_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_deprep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_deprep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX285"><CODE>rl_ding</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX331">rl_directory_completion_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_discard_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX187">rl_dispatching</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX286"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX287"><CODE>rl_display_match_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_do_undo</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX184">rl_done</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX213">rl_editing_mode</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX182">rl_end</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX247"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX248"><CODE>rl_end_undo_group</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX188">rl_erase_empty_line</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX206">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX208">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX346">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX321"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX326">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX336">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX347">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX325">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX306"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX249"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX235"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX218"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX202">rl_event_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX274"><CODE>rl_execute_next</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX207">rl_executing_keymap</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_executing_macro</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_expand_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211">rl_explicit_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_extend_line_buffer</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX348">rl_filename_completion_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX323"><CODE>rl_filename_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_filename_dequoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX338">rl_filename_quote_characters</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX349">rl_filename_quoting_desired</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX327">rl_filename_quoting_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_forced_update_display</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_free_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX250"><CODE>rl_free_undo_list</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_function_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_function_of_keyseq</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX245"><CODE>rl_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_generic_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_get_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX221"><CODE>rl_get_keymap_by_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX222"><CODE>rl_get_keymap_name</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_get_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX300"><CODE>rl_get_termcap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_getc</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_getc_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX193">rl_gnu_readline_p</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX345">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX328">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX350">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX283"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX318"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX347">rl_ignore_completion_duplicates</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX330">rl_ignore_some_completions_function</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX352">rl_inhibit_completion</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX284"><CODE>rl_initialize</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX320"><CODE>rl_insert_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX266"><CODE>rl_insert_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX196">rl_instream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX240"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX268"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX241"><CODE>rl_invoking_keyseqs</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX242"><CODE>rl_invoking_keyseqs_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_kill_text</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_last_func</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX191">rl_library_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX180">rl_line_buffer</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX243"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX293"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX214"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX216"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX244"><CODE>rl_list_funmap_names</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX294"><CODE>rl_macro_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_macro_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX215"><CODE>rl_make_bare_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX217"><CODE>rl_make_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX183">rl_mark</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX251"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX260"><CODE>rl_message</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_modifying</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC34">2.4.5 Allowing Undoing</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX239"><CODE>rl_named_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC33">2.4.4 Associating Function Names and Bindings</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX185">rl_num_chars_to_read</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX211">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX254"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX212">rl_numeric_arg</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX255"><CODE>rl_on_new_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_on_new_line_with_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX197">rl_outstream</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX236"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_parse_and_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX186">rl_pending_input</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX181">rl_point</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX317"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX319"><CODE>rl_possible_completions</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX201">rl_pre_input_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX198">rl_prefer_env_winsize</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX205">rl_prep_term_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX277"><CODE>rl_prep_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX189">rl_prompt</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX269"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX237"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX270"><CODE>rl_push_macro_input</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC36">2.4.7 Modifying Text</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX238"><CODE>rl_read_init_file</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX271"><CODE>rl_read_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX195">rl_readline_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX209">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX210">rl_readline_state</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX192">rl_readline_version</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX252"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX203">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX307"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX256"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX261"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX232"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX275"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX219"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX264"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX311"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX258"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX337">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX199">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX272"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX253"><CODE>rl_redisplay</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX204">rl_redisplay_function</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX282"><CODE>rl_replace_line</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC39">2.4.10 Utility Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX308"><CODE>rl_reset_after_signal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX257"><CODE>rl_reset_line_state</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX312"><CODE>rl_reset_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX281"><CODE>rl_reset_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX309"><CODE>rl_resize_terminal</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX263"><CODE>rl_restore_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX262"><CODE>rl_save_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX233"><CODE>rl_set_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX276"><CODE>rl_set_keyboard_input_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX220"><CODE>rl_set_keymap</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC31">2.4.2 Selecting a Keymap</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX299"><CODE>rl_set_paren_blink_timeout</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX265"><CODE>rl_set_prompt</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX310"><CODE>rl_set_screen_size</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX313"><CODE>rl_set_signals</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC43">2.5 Readline Signal Handling</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX259"><CODE>rl_show_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC35">2.4.6 Redisplay</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX339">rl_special_prefixes</A></TD><TD valign=top><A HREF="rlman.html#SEC47">2.6.3 Completion Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX200">rl_startup_hook</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX273"><CODE>rl_stuff_char</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC37">2.4.8 Character Input</A></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX194">rl_terminal_name</A></TD><TD valign=top><A HREF="rlman.html#SEC28">2.3 Readline Variables</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX278"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX226"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX322"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX295"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
-<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_variable_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX279"><CODE>rl_tty_set_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX280"><CODE>rl_tty_unset_default_bindings</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC38">2.4.9 Terminal Management</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX230"><CODE>rl_unbind_command_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX229"><CODE>rl_unbind_function_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX227"><CODE>rl_unbind_key</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX228"><CODE>rl_unbind_key_in_map</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC32">2.4.3 Binding Keys</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX324"><CODE>rl_username_completion_function</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC46">2.6.2 Completion Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX296"><CODE>rl_variable_bind</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX298"><CODE>rl_variable_dumper</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
+<TR><TD></TD><TD valign=top><A HREF="readline.html#IDX297"><CODE>rl_variable_value</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC40">2.4.11 Miscellaneous Functions</A></TD></TR>
 <TR><TD COLSPAN=3> <HR></TD></TR>
 <TR><TH><A NAME="fn_S"></A>S</TH><TD></TD><TD></TD></TR>
 <TR><TD></TD><TD valign=top><A HREF="readline.html#IDX80"><CODE>self-insert (a, b, A, 1, !, &#60;small&#62;...&#60;/small&#62;)</CODE></A></TD><TD valign=top><A HREF="rlman.html#SEC16">1.4.3 Commands For Changing Text</A></TD></TR>
@@ -6524,7 +6543,7 @@ to permit their use in free software.
 <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="readline.html#SEC_About"> ? </A>]</TD>
 </TR></TABLE>
 <H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+This document was generated by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 <P></P>  
@@ -6686,7 +6705,7 @@ the following structure:
 <BR>  
 <FONT SIZE="-1">
 This document was generated
-by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 
index 1c8e097..66e456c 100644 (file)
@@ -2,7 +2,7 @@ This is readline.info, produced by makeinfo version 4.7 from
 ./rlman.texi.
 
    This manual describes the GNU Readline Library (version 5.1-beta1,
-7 October 2005), a library which aids in the consistency of user
+11 November 2005), a library which aids in the consistency of user
 interface across discrete programs which provide a command line
 interface.
 
@@ -1640,6 +1640,11 @@ These variables are available to function writers.
      The stdio stream to which Readline performs output.  If `NULL',
      Readline defaults to STDOUT.
 
+ -- Variable: int rl_prefer_env_winsize
+     If non-zero, Readline gives values found in the `LINES' and
+     `COLUMNS' environment variables greater precedence than values
+     fetched from the kernel when computing the screen dimensions.
+
  -- Variable: rl_command_func_t * rl_last_func
      The address of the last command function Readline executed.  May
      be used to test whether or not a function is being executed twice
@@ -2593,7 +2598,8 @@ to update its idea of the terminal size when a `SIGWINCH' is received.
 
  -- Function: void rl_set_screen_size (int rows, int cols)
      Set Readline's idea of the terminal size to ROWS rows and COLS
-     columns.
+     columns.  If either ROWS or COLUMNS is less than or equal to 0,
+     Readline's idea of that terminal dimension is unchanged.
 
    If an application does not want to install a `SIGWINCH' handler, but
 is still interested in the screen dimensions, Readline's idea of the
@@ -2603,6 +2609,10 @@ screen size may be queried.
      Return Readline's idea of the terminal's size in the variables
      pointed to by the arguments.
 
+ -- Function: void rl_reset_screen_size (void)
+     Cause Readline to reobtain the screen size and recalculate its
+     dimensions.
+
    The following functions install and remove Readline's signal
 handlers.
 
@@ -4088,7 +4098,7 @@ Function and Variable Index
 * rl_bind_keyseq_if_unbound:             Binding Keys.        (line  77)
 * rl_bind_keyseq_if_unbound_in_map:      Binding Keys.        (line  83)
 * rl_bind_keyseq_in_map:                 Binding Keys.        (line  66)
-* rl_binding_keymap:                     Readline Variables.  (line 149)
+* rl_binding_keymap:                     Readline Variables.  (line 154)
 * rl_callback_handler_install:           Alternate Interface. (line  15)
 * rl_callback_handler_remove:            Alternate Interface. (line  33)
 * rl_callback_read_char:                 Alternate Interface. (line  21)
@@ -4103,11 +4113,11 @@ Function and Variable Index
 * rl_clear_message:                      Redisplay.           (line  48)
 * rl_clear_pending_input:                Character Input.     (line  30)
 * rl_clear_signals:                      Readline Signal Handling.
-                                                              (line 114)
-* rl_complete <1>:                       How Completing Works.
-                                                              (line  49)
-* rl_complete:                           Completion Functions.
+                                                              (line 119)
+* rl_complete <1>:                       Completion Functions.
                                                               (line  20)
+* rl_complete:                           How Completing Works.
+                                                              (line  49)
 * rl_complete_internal:                  Completion Functions.
                                                               (line  10)
 * rl_completer_quote_characters:         Completion Variables.
@@ -4146,7 +4156,7 @@ Function and Variable Index
 * rl_copy_text:                          Modifying Text.      (line  15)
 * rl_crlf:                               Redisplay.           (line  30)
 * rl_delete_text:                        Modifying Text.      (line  11)
-* rl_deprep_term_function:               Readline Variables.  (line 139)
+* rl_deprep_term_function:               Readline Variables.  (line 144)
 * rl_deprep_terminal:                    Terminal Management. (line  13)
 * rl_ding:                               Utility Functions.   (line  21)
 * rl_directory_completion_hook:          Completion Variables.
@@ -4156,16 +4166,16 @@ Function and Variable Index
 * rl_display_match_list:                 Utility Functions.   (line  28)
 * rl_do_undo:                            Allowing Undoing.    (line  48)
 * rl_done:                               Readline Variables.  (line  28)
-* rl_editing_mode:                       Readline Variables.  (line 237)
+* rl_editing_mode:                       Readline Variables.  (line 242)
 * rl_end:                                Readline Variables.  (line  19)
 * rl_end_undo_group:                     Allowing Undoing.    (line  35)
 * rl_erase_empty_line:                   Readline Variables.  (line  47)
-* rl_event_hook:                         Readline Variables.  (line 114)
+* rl_event_hook:                         Readline Variables.  (line 119)
 * rl_execute_next:                       Character Input.     (line  26)
-* rl_executing_keymap:                   Readline Variables.  (line 145)
-* rl_executing_macro:                    Readline Variables.  (line 153)
+* rl_executing_keymap:                   Readline Variables.  (line 150)
+* rl_executing_macro:                    Readline Variables.  (line 158)
 * rl_expand_prompt:                      Redisplay.           (line  64)
-* rl_explicit_arg:                       Readline Variables.  (line 228)
+* rl_explicit_arg:                       Readline Variables.  (line 233)
 * rl_extend_line_buffer:                 Utility Functions.   (line  12)
 * rl_filename_completion_desired:        Completion Variables.
                                                               (line 187)
@@ -4194,11 +4204,11 @@ Function and Variable Index
 * rl_get_keymap_by_name:                 Keymaps.             (line  38)
 * rl_get_keymap_name:                    Keymaps.             (line  43)
 * rl_get_screen_size:                    Readline Signal Handling.
-                                                              (line 101)
+                                                              (line 102)
 * rl_get_termcap:                        Miscellaneous Functions.
                                                               (line  42)
 * rl_getc:                               Character Input.     (line  15)
-* rl_getc_function:                      Readline Variables.  (line 120)
+* rl_getc_function:                      Readline Variables.  (line 125)
 * rl_gnu_readline_p:                     Readline Variables.  (line  78)
 * rl_ignore_completion_duplicates:       Completion Variables.
                                                               (line 183)
@@ -4216,7 +4226,7 @@ Function and Variable Index
 * rl_invoking_keyseqs_in_map:            Associating Function Names and Bindings.
                                                               (line  26)
 * rl_kill_text:                          Modifying Text.      (line  19)
-* rl_last_func:                          Readline Variables.  (line 100)
+* rl_last_func:                          Readline Variables.  (line 105)
 * rl_library_version:                    Readline Variables.  (line  68)
 * rl_line_buffer:                        Readline Variables.  (line   9)
 * rl_list_funmap_names:                  Associating Function Names and Bindings.
@@ -4233,7 +4243,7 @@ Function and Variable Index
 * rl_named_function:                     Associating Function Names and Bindings.
                                                               (line  11)
 * rl_num_chars_to_read:                  Readline Variables.  (line  32)
-* rl_numeric_arg:                        Readline Variables.  (line 232)
+* rl_numeric_arg:                        Readline Variables.  (line 237)
 * rl_on_new_line:                        Redisplay.           (line  15)
 * rl_on_new_line_with_prompt:            Redisplay.           (line  19)
 * rl_outstream:                          Readline Variables.  (line  96)
@@ -4242,22 +4252,25 @@ Function and Variable Index
 * rl_point:                              Readline Variables.  (line  15)
 * rl_possible_completions:               Completion Functions.
                                                               (line  28)
-* rl_pre_input_hook:                     Readline Variables.  (line 109)
-* rl_prep_term_function:                 Readline Variables.  (line 132)
+* rl_pre_input_hook:                     Readline Variables.  (line 114)
+* rl_prefer_env_winsize:                 Readline Variables.  (line 100)
+* rl_prep_term_function:                 Readline Variables.  (line 137)
 * rl_prep_terminal:                      Terminal Management. (line   7)
 * rl_prompt:                             Readline Variables.  (line  53)
 * rl_push_macro_input:                   Modifying Text.      (line  26)
 * rl_read_init_file:                     Binding Keys.        (line 101)
 * rl_read_key:                           Character Input.     (line   7)
 * rl_readline_name:                      Readline Variables.  (line  87)
-* rl_readline_state:                     Readline Variables.  (line 156)
+* rl_readline_state:                     Readline Variables.  (line 161)
 * rl_readline_version:                   Readline Variables.  (line  71)
 * rl_redisplay:                          Redisplay.           (line   7)
-* rl_redisplay_function:                 Readline Variables.  (line 126)
+* rl_redisplay_function:                 Readline Variables.  (line 131)
 * rl_replace_line:                       Utility Functions.   (line   7)
 * rl_reset_after_signal:                 Readline Signal Handling.
                                                               (line  80)
 * rl_reset_line_state:                   Redisplay.           (line  26)
+* rl_reset_screen_size:                  Readline Signal Handling.
+                                                              (line 106)
 * rl_reset_terminal:                     Terminal Management. (line  28)
 * rl_resize_terminal:                    Readline Signal Handling.
                                                               (line  89)
@@ -4272,11 +4285,11 @@ Function and Variable Index
 * rl_set_screen_size:                    Readline Signal Handling.
                                                               (line  93)
 * rl_set_signals:                        Readline Signal Handling.
-                                                              (line 108)
+                                                              (line 113)
 * rl_show_char:                          Redisplay.           (line  33)
 * rl_special_prefixes:                   Completion Variables.
                                                               (line 124)
-* rl_startup_hook:                       Readline Variables.  (line 105)
+* rl_startup_hook:                       Readline Variables.  (line 110)
 * rl_stuff_char:                         Character Input.     (line  19)
 * rl_terminal_name:                      Readline Variables.  (line  82)
 * rl_tty_set_default_bindings:           Terminal Management. (line  18)
@@ -4327,58 +4340,58 @@ Function and Variable Index
 
 \1f
 Tag Table:
-Node: Top\7f1301
-Node: Command Line Editing\7f1939
-Node: Introduction and Notation\7f2591
-Node: Readline Interaction\7f4214
-Node: Readline Bare Essentials\7f5406
-Node: Readline Movement Commands\7f7196
-Node: Readline Killing Commands\7f8162
-Node: Readline Arguments\7f10083
-Node: Searching\7f11128
-Node: Readline Init File\7f13280
-Node: Readline Init File Syntax\7f14346
-Node: Conditional Init Constructs\7f26281
-Node: Sample Init File\7f28815
-Node: Bindable Readline Commands\7f31933
-Node: Commands For Moving\7f32991
-Node: Commands For History\7f33853
-Node: Commands For Text\7f36978
-Node: Commands For Killing\7f39705
-Node: Numeric Arguments\7f41848
-Node: Commands For Completion\7f42988
-Node: Keyboard Macros\7f44533
-Node: Miscellaneous Commands\7f45105
-Node: Readline vi Mode\7f48467
-Node: Programming with GNU Readline\7f50291
-Node: Basic Behavior\7f51266
-Node: Custom Functions\7f54683
-Node: Readline Typedefs\7f56167
-Node: Function Writing\7f57806
-Node: Readline Variables\7f59113
-Node: Readline Convenience Functions\7f68574
-Node: Function Naming\7f69564
-Node: Keymaps\7f70826
-Node: Binding Keys\7f72598
-Node: Associating Function Names and Bindings\7f77145
-Node: Allowing Undoing\7f79407
-Node: Redisplay\7f81957
-Node: Modifying Text\7f85857
-Node: Character Input\7f87103
-Node: Terminal Management\7f88901
-Node: Utility Functions\7f90337
-Node: Miscellaneous Functions\7f92702
-Node: Alternate Interface\7f94999
-Node: A Readline Example\7f97158
-Node: Readline Signal Handling\7f99061
-Node: Custom Completers\7f104679
-Node: How Completing Works\7f105399
-Node: Completion Functions\7f108713
-Node: Completion Variables\7f112285
-Node: A Short Completion Example\7f124475
-Node: Copying This Manual\7f136648
-Node: GNU Free Documentation License\7f136910
-Node: Concept Index\7f159317
-Node: Function and Variable Index\7f160973
+Node: Top\7f1303
+Node: Command Line Editing\7f1941
+Node: Introduction and Notation\7f2593
+Node: Readline Interaction\7f4216
+Node: Readline Bare Essentials\7f5408
+Node: Readline Movement Commands\7f7198
+Node: Readline Killing Commands\7f8164
+Node: Readline Arguments\7f10085
+Node: Searching\7f11130
+Node: Readline Init File\7f13282
+Node: Readline Init File Syntax\7f14348
+Node: Conditional Init Constructs\7f26283
+Node: Sample Init File\7f28817
+Node: Bindable Readline Commands\7f31935
+Node: Commands For Moving\7f32993
+Node: Commands For History\7f33855
+Node: Commands For Text\7f36980
+Node: Commands For Killing\7f39707
+Node: Numeric Arguments\7f41850
+Node: Commands For Completion\7f42990
+Node: Keyboard Macros\7f44535
+Node: Miscellaneous Commands\7f45107
+Node: Readline vi Mode\7f48469
+Node: Programming with GNU Readline\7f50293
+Node: Basic Behavior\7f51268
+Node: Custom Functions\7f54685
+Node: Readline Typedefs\7f56169
+Node: Function Writing\7f57808
+Node: Readline Variables\7f59115
+Node: Readline Convenience Functions\7f68817
+Node: Function Naming\7f69807
+Node: Keymaps\7f71069
+Node: Binding Keys\7f72841
+Node: Associating Function Names and Bindings\7f77388
+Node: Allowing Undoing\7f79650
+Node: Redisplay\7f82200
+Node: Modifying Text\7f86100
+Node: Character Input\7f87346
+Node: Terminal Management\7f89144
+Node: Utility Functions\7f90580
+Node: Miscellaneous Functions\7f92945
+Node: Alternate Interface\7f95242
+Node: A Readline Example\7f97401
+Node: Readline Signal Handling\7f99304
+Node: Custom Completers\7f105172
+Node: How Completing Works\7f105892
+Node: Completion Functions\7f109206
+Node: Completion Variables\7f112778
+Node: A Short Completion Example\7f124968
+Node: Copying This Manual\7f137141
+Node: GNU Free Documentation License\7f137403
+Node: Concept Index\7f159810
+Node: Function and Variable Index\7f161466
 \1f
 End Tag Table
index d892c86..63427cb 100644 (file)
@@ -10,7 +10,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -o readline.ps readline.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2005.10.27:1726
+%DVIPSSource:  TeX output 2005.11.17:1043
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -4126,19 +4126,20 @@ TeXDict begin
 %%Page: 1 1
 TeXDict begin 1 0 bop 75 659 a Fu(GNU)33 b(Readline)f(Library)p
 75 709 1800 17 v 686 757 a Ft(Edition)15 b(5.1-b)q(eta1,)e(for)i
-Fs(Readline)f(Library)g Ft(V)l(ersion)h(5.1-b)q(eta1.)1608
-811 y(Octob)q(er)h(2005)75 2467 y Fr(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)75
-2534 y(Brian)g(F)-6 b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6
-b(oundation)p 75 2570 1800 9 v eop end
+Fs(Readline)f(Library)g Ft(V)l(ersion)h(5.1-b)q(eta1.)1569
+811 y(No)o(v)o(em)o(b)q(er)g(2005)75 2467 y Fr(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)75 2534 y(Brian)g(F)-6 b(o)n(x,)23 b(F)-6
+b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570
+1800 9 v eop end
 %%Page: 2 2
-TeXDict begin 2 1 bop 75 1512 a Ft(This)18 b(man)o(ual)f(describ)q(es)i
-(the)f(GNU)g(Readline)h(Library)f(\(v)o(ersion)f(5.1-b)q(eta1,)h(7)f
-(Octob)q(er)i(2005\),)e(a)75 1567 y(library)10 b(whic)o(h)h(aids)g(in)f
-(the)i(consistency)f(of)f(user)i(in)o(terface)e(across)h(discrete)f
-(programs)g(whic)o(h)h(pro)o(vide)75 1621 y(a)k(command)g(line)g(in)o
-(terface.)75 1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289
-1689 y Fq(\015)g Ft(1988-2004)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
+TeXDict begin 2 1 bop 75 1512 a Ft(This)16 b(man)o(ual)g(describ)q(es)h
+(the)f(GNU)g(Readline)h(Library)f(\(v)o(ersion)g(5.1-b)q(eta1,)f(11)h
+(No)o(v)o(em)o(b)q(er)g(2005\),)75 1567 y(a)k(library)g(whic)o(h)g
+(aids)g(in)h(the)g(consistency)f(of)g(user)h(in)o(terface)f(across)g
+(discrete)h(programs)e(whic)o(h)75 1621 y(pro)o(vide)c(a)g(command)g
+(line)g(in)o(terface.)75 1689 y(Cop)o(yrigh)o(t)301 1688
+y(c)289 1689 y Fq(\015)g Ft(1988-2004)e(F)l(ree)i(Soft)o(w)o(are)f(F)l
 (oundation,)g(Inc.)75 1756 y(P)o(ermission)h(is)g(gran)o(ted)h(to)f
 (mak)o(e)h(and)g(distribute)g(v)o(erbatim)e(copies)i(of)g(this)g(man)o
 (ual)f(pro)o(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)g
@@ -5753,490 +5754,496 @@ Ft(,)g(and)h(should)195 259 y(not)g(b)q(e)h(assigned)f(to)g(directly)l
 (.)19 b(The)14 b Fs(rl_set_prompt\(\))d Ft(function)i(\(see)h(Section)f
 (2.4.6)f([Redis-)195 314 y(pla)o(y],)i(page)h(32\))f(ma)o(y)h(b)q(e)g
 (used)h(to)f(mo)q(dify)g(the)g(prompt)g(string)f(after)g(calling)g
-Fs(readline\(\))p Ft(.)1685 399 y([V)l(ariable])-1801
-b Fg(int)20 b Ff(rl)p 217 399 V 24 w(already)p 425 399
-V 25 w(prompted)195 453 y Ft(If)e(an)g(application)f(wishes)h(to)g
+Fs(readline\(\))p Ft(.)1685 412 y([V)l(ariable])-1801
+b Fg(int)20 b Ff(rl)p 217 412 V 24 w(already)p 425 412
+V 25 w(prompted)195 467 y Ft(If)e(an)g(application)f(wishes)h(to)g
 (displa)o(y)f(the)h(prompt)g(itself,)f(rather)h(than)g(ha)o(v)o(e)g
-(Readline)g(do)195 508 y(it)e(the)g(\014rst)g(time)g
+(Readline)g(do)195 522 y(it)e(the)g(\014rst)g(time)g
 Fs(readline\(\))f Ft(is)h(called,)g(it)f(should)i(set)f(this)g(v)m
-(ariable)f(to)h(a)g(non-zero)h(v)m(alue)195 563 y(after)h(displa)o
+(ariable)f(to)h(a)g(non-zero)h(v)m(alue)195 577 y(after)h(displa)o
 (ying)g(the)h(prompt.)31 b(The)19 b(prompt)g(m)o(ust)f(also)g(b)q(e)i
-(passed)f(as)f(the)h(argumen)o(t)g(to)195 618 y Fs(readline\(\))c
+(passed)f(as)f(the)h(argumen)o(t)g(to)195 632 y Fs(readline\(\))c
 Ft(so)h(the)h(redispla)o(y)e(functions)i(can)f(up)q(date)h(the)g
 (displa)o(y)f(prop)q(erly)l(.)23 b(The)17 b(calling)195
-672 y(application)d(is)h(resp)q(onsible)g(for)f(managing)g(the)i(v)m
-(alue;)f(Readline)g(nev)o(er)h(sets)e(it.)1685 757 y([V)l(ariable])
--1801 b Fg(const)20 b(char)g(*)f Ff(rl)p 438 757 V 25
-w(library)p 633 757 V 24 w(v)n(ersion)195 812 y Ft(The)c(v)o(ersion)g
+686 y(application)d(is)h(resp)q(onsible)g(for)f(managing)g(the)i(v)m
+(alue;)f(Readline)g(nev)o(er)h(sets)e(it.)1685 785 y([V)l(ariable])
+-1801 b Fg(const)20 b(char)g(*)f Ff(rl)p 438 785 V 25
+w(library)p 633 785 V 24 w(v)n(ersion)195 840 y Ft(The)c(v)o(ersion)g
 (n)o(um)o(b)q(er)g(of)g(this)g(revision)f(of)h(the)g(library)l(.)1685
-897 y([V)l(ariable])-1801 b Fg(int)20 b Ff(rl)p 217 897
-V 24 w(readline)p 441 897 V 25 w(v)n(ersion)195 951 y
+938 y([V)l(ariable])-1801 b Fg(int)20 b Ff(rl)p 217 938
+V 24 w(readline)p 441 938 V 25 w(v)n(ersion)195 993 y
 Ft(An)d(in)o(teger)g(enco)q(ding)g(the)g(curren)o(t)g(v)o(ersion)f(of)h
 (the)g(library)l(.)25 b(The)17 b(enco)q(ding)g(is)g(of)g(the)g(form)195
-1006 y(0x)p Fi(MMmm)p Ft(,)g(where)i Fi(MM)j Ft(is)c(the)g(t)o(w)o
+1048 y(0x)p Fi(MMmm)p Ft(,)g(where)i Fi(MM)j Ft(is)c(the)g(t)o(w)o
 (o-digit)e(ma)s(jor)h(v)o(ersion)h(n)o(um)o(b)q(er,)h(and)f
-Fi(mm)g Ft(is)g(the)g(t)o(w)o(o-)195 1061 y(digit)g(minor)f(v)o(ersion)
+Fi(mm)g Ft(is)g(the)g(t)o(w)o(o-)195 1103 y(digit)g(minor)f(v)o(ersion)
 h(n)o(um)o(b)q(er.)31 b(F)l(or)18 b(example,)h(for)f(Readline-4.2,)h
-Fs(rl_readline_version)195 1116 y Ft(w)o(ould)c(ha)o(v)o(e)f(the)i(v)m
-(alue)f(0x0402.)1685 1200 y([V)l(ariable])-1801 b Fg(int)20
-b Ff(rl)p 217 1200 V 24 w(gn)n(u)p 332 1200 V 25 w(readline)p
-557 1200 V 25 w(p)195 1255 y Ft(Alw)o(a)o(ys)14 b(set)h(to)f(1,)h
+Fs(rl_readline_version)195 1158 y Ft(w)o(ould)c(ha)o(v)o(e)f(the)i(v)m
+(alue)f(0x0402.)1685 1256 y([V)l(ariable])-1801 b Fg(int)20
+b Ff(rl)p 217 1256 V 24 w(gn)n(u)p 332 1256 V 25 w(readline)p
+557 1256 V 25 w(p)195 1311 y Ft(Alw)o(a)o(ys)14 b(set)h(to)f(1,)h
 (denoting)g(that)f(this)h(is)g Fm(gnu)g Ft(readline)f(rather)h(than)g
-(some)g(em)o(ulation.)1685 1340 y([V)l(ariable])-1801
-b Fg(const)20 b(char)g(*)f Ff(rl)p 438 1340 V 25 w(terminal)p
-675 1340 V 24 w(name)195 1395 y Ft(The)14 b(terminal)f(t)o(yp)q(e,)h
+(some)g(em)o(ulation.)1685 1410 y([V)l(ariable])-1801
+b Fg(const)20 b(char)g(*)f Ff(rl)p 438 1410 V 25 w(terminal)p
+675 1410 V 24 w(name)195 1465 y Ft(The)14 b(terminal)f(t)o(yp)q(e,)h
 (used)h(for)e(initialization.)k(If)d(not)f(set)h(b)o(y)g(the)g
-(application,)f(Readline)h(sets)195 1450 y(this)h(to)f(the)h(v)m(alue)h
+(application,)f(Readline)h(sets)195 1519 y(this)h(to)f(the)h(v)m(alue)h
 (of)f(the)g Fs(TERM)g Ft(en)o(vironmen)o(t)f(v)m(ariable)h(the)g
-(\014rst)g(time)f(it)h(is)f(called.)1685 1534 y([V)l(ariable])-1801
-b Fg(const)20 b(char)g(*)f Ff(rl)p 438 1534 V 25 w(readline)p
-663 1534 V 24 w(name)195 1589 y Ft(This)c(v)m(ariable)g(is)g(set)h(to)f
+(\014rst)g(time)f(it)h(is)f(called.)1685 1618 y([V)l(ariable])-1801
+b Fg(const)20 b(char)g(*)f Ff(rl)p 438 1618 V 25 w(readline)p
+663 1618 V 24 w(name)195 1673 y Ft(This)c(v)m(ariable)g(is)g(set)h(to)f
 (a)g(unique)h(name)g(b)o(y)f(eac)o(h)h(application)e(using)h(Readline.)
-22 b(The)16 b(v)m(alue)195 1644 y(allo)o(ws)c(conditional)h(parsing)g
+22 b(The)16 b(v)m(alue)195 1728 y(allo)o(ws)c(conditional)h(parsing)g
 (of)h(the)g(inputrc)g(\014le)g(\(see)g(Section)g(1.3.2)e([Conditional)g
-(Init)i(Con-)195 1699 y(structs],)g(page)h(9\).)1685
-1783 y([V)l(ariable])-1801 b Fg(FILE)20 b(*)f Ff(rl)p
-288 1783 V 25 w(instream)195 1838 y Ft(The)i(stdio)e(stream)h(from)g
+(Init)i(Con-)195 1782 y(structs],)g(page)h(9\).)1685
+1881 y([V)l(ariable])-1801 b Fg(FILE)20 b(*)f Ff(rl)p
+288 1881 V 25 w(instream)195 1936 y Ft(The)i(stdio)e(stream)h(from)g
 (whic)o(h)g(Readline)h(reads)f(input.)36 b(If)21 b Fs(NULL)p
-Ft(,)g(Readline)g(defaults)f(to)195 1893 y Fi(stdin)p
-Ft(.)1685 1978 y([V)l(ariable])-1801 b Fg(FILE)20 b(*)f
-Ff(rl)p 288 1978 V 25 w(outstream)195 2032 y Ft(The)e(stdio)g(stream)f
+Ft(,)g(Readline)g(defaults)f(to)195 1991 y Fi(stdin)p
+Ft(.)1685 2089 y([V)l(ariable])-1801 b Fg(FILE)20 b(*)f
+Ff(rl)p 288 2089 V 25 w(outstream)195 2144 y Ft(The)e(stdio)g(stream)f
 (to)h(whic)o(h)g(Readline)g(p)q(erforms)g(output.)26
 b(If)18 b Fs(NULL)p Ft(,)e(Readline)i(defaults)f(to)195
-2087 y Fi(stdout)p Ft(.)1685 2172 y([V)l(ariable])-1801
-b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 2172 V 25
-w(last)p 742 2172 V 24 w(func)195 2227 y Ft(The)f(address)f(of)g(the)g
+2199 y Fi(stdout)p Ft(.)1685 2297 y([V)l(ariable])-1801
+b Fg(int)20 b Ff(rl)p 217 2297 V 24 w(prefer)p 391 2297
+V 24 w(en)n(v)p 501 2297 V 26 w(winsize)195 2352 y Ft(If)14
+b(non-zero,)h(Readline)f(giv)o(es)g(v)m(alues)g(found)g(in)g(the)h
+Fs(LINES)e Ft(and)i Fs(COLUMNS)e Ft(en)o(vironmen)o(t)g(v)m(ari-)195
+2407 y(ables)20 b(greater)g(precedence)i(than)e(v)m(alues)h(fetc)o(hed)
+g(from)e(the)i(k)o(ernel)f(when)h(computing)f(the)195
+2462 y(screen)c(dimensions.)1685 2560 y([V)l(ariable])-1801
+b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 2560 V 25
+w(last)p 742 2560 V 24 w(func)195 2615 y Ft(The)f(address)f(of)g(the)g
 (last)g(command)g(function)g(Readline)h(executed.)27
-b(Ma)o(y)17 b(b)q(e)h(used)g(to)f(test)195 2281 y(whether)e(or)g(not)g
+b(Ma)o(y)17 b(b)q(e)h(used)g(to)f(test)195 2670 y(whether)e(or)g(not)g
 (a)g(function)g(is)f(b)q(eing)i(executed)g(t)o(wice)f(in)g(succession,)
-g(for)f(example.)1685 2366 y([V)l(ariable])-1801 b Fg(rl_hook_func_t)21
-b(*)e Ff(rl)p 549 2366 V 25 w(startup)p 757 2366 V 25
-w(ho)r(ok)195 2421 y Ft(If)e(non-zero,)h(this)f(is)f(the)i(address)f
-(of)f(a)h(function)g(to)g(call)f(just)h(b)q(efore)g Fs(readline)f
-Ft(prin)o(ts)h(the)195 2476 y(\014rst)e(prompt.)1685
-2560 y([V)l(ariable])-1801 b Fg(rl_hook_func_t)21 b(*)e
-Ff(rl)p 549 2560 V 25 w(pre)p 656 2560 V 25 w(input)p
-815 2560 V 25 w(ho)r(ok)195 2615 y Ft(If)f(non-zero,)g(this)f(is)h(the)
-g(address)f(of)h(a)f(function)h(to)f(call)g(after)g(the)h(\014rst)f
-(prompt)g(has)h(b)q(een)195 2670 y(prin)o(ted)d(and)g(just)g(b)q(efore)
-h Fs(readline)e Ft(starts)g(reading)g(input)i(c)o(haracters.)p
-eop end
+g(for)f(example.)p eop end
 %%Page: 26 30
 TeXDict begin 26 29 bop 75 -58 a Ft(26)1299 b(GNU)15
 b(Readline)g(Library)1685 149 y([V)l(ariable])-1801 b
 Fg(rl_hook_func_t)21 b(*)e Ff(rl)p 549 149 18 3 v 25
-w(ev)n(en)n(t)p 706 149 V 27 w(ho)r(ok)195 204 y Ft(If)i(non-zero,)g
-(this)f(is)g(the)g(address)g(of)g(a)g(function)g(to)g(call)g(p)q(erio)q
-(dically)f(when)i(Readline)f(is)195 259 y(w)o(aiting)13
-b(for)h(terminal)f(input.)20 b(By)14 b(default,)g(this)g(will)g(b)q(e)h
-(called)f(at)g(most)g(ten)g(times)g(a)g(second)195 314
-y(if)h(there)g(is)g(no)g(k)o(eyb)q(oard)g(input.)1685
-407 y([V)l(ariable])-1801 b Fg(rl_getc_func_t)21 b(*)e
-Ff(rl)p 549 407 V 25 w(getc)p 676 407 V 26 w(function)195
-462 y Ft(If)c(non-zero,)h(Readline)f(will)f(call)g(indirectly)h
+w(startup)p 757 149 V 25 w(ho)r(ok)195 204 y Ft(If)e(non-zero,)h(this)f
+(is)f(the)i(address)f(of)f(a)h(function)g(to)g(call)f(just)h(b)q(efore)
+g Fs(readline)f Ft(prin)o(ts)h(the)195 259 y(\014rst)e(prompt.)1685
+352 y([V)l(ariable])-1801 b Fg(rl_hook_func_t)21 b(*)e
+Ff(rl)p 549 352 V 25 w(pre)p 656 352 V 25 w(input)p 815
+352 V 25 w(ho)r(ok)195 407 y Ft(If)f(non-zero,)g(this)f(is)h(the)g
+(address)f(of)h(a)f(function)h(to)f(call)g(after)g(the)h(\014rst)f
+(prompt)g(has)h(b)q(een)195 462 y(prin)o(ted)d(and)g(just)g(b)q(efore)h
+Fs(readline)e Ft(starts)g(reading)g(input)i(c)o(haracters.)1685
+555 y([V)l(ariable])-1801 b Fg(rl_hook_func_t)21 b(*)e
+Ff(rl)p 549 555 V 25 w(ev)n(en)n(t)p 706 555 V 27 w(ho)r(ok)195
+610 y Ft(If)i(non-zero,)g(this)f(is)g(the)g(address)g(of)g(a)g
+(function)g(to)g(call)g(p)q(erio)q(dically)f(when)i(Readline)f(is)195
+665 y(w)o(aiting)13 b(for)h(terminal)f(input.)20 b(By)14
+b(default,)g(this)g(will)g(b)q(e)h(called)f(at)g(most)g(ten)g(times)g
+(a)g(second)195 719 y(if)h(there)g(is)g(no)g(k)o(eyb)q(oard)g(input.)
+1685 812 y([V)l(ariable])-1801 b Fg(rl_getc_func_t)21
+b(*)e Ff(rl)p 549 812 V 25 w(getc)p 676 812 V 26 w(function)195
+867 y Ft(If)c(non-zero,)h(Readline)f(will)f(call)g(indirectly)h
 (through)g(this)f(p)q(oin)o(ter)h(to)g(get)f(a)h(c)o(haracter)g(from)
-195 517 y(the)k(input)h(stream.)31 b(By)19 b(default,)g(it)g(is)g(set)g
+195 922 y(the)k(input)h(stream.)31 b(By)19 b(default,)g(it)g(is)g(set)g
 (to)f Fs(rl_getc)p Ft(,)h(the)g(default)g(Readline)h(c)o(haracter)195
-571 y(input)15 b(function)g(\(see)g(Section)g(2.4.8)f([Character)g
-(Input],)h(page)g(34\).)1685 665 y([V)l(ariable])-1801
-b Fg(rl_voidfunc_t)21 b(*)e Ff(rl)p 523 665 V 25 w(redispla)n(y)p
-773 665 V 25 w(function)195 719 y Ft(If)f(non-zero,)h(Readline)f(will)f
-(call)g(indirectly)g(through)h(this)f(p)q(oin)o(ter)h(to)f(up)q(date)i
-(the)f(displa)o(y)195 774 y(with)13 b(the)g(curren)o(t)h(con)o(ten)o
-(ts)f(of)g(the)g(editing)g(bu\013er.)19 b(By)14 b(default,)f(it)g(is)g
-(set)g(to)g Fs(rl_redisplay)p Ft(,)195 829 y(the)i(default)g(Readline)h
-(redispla)o(y)e(function)h(\(see)g(Section)g(2.4.6)f([Redispla)o(y],)g
-(page)h(32\).)1685 922 y([V)l(ariable])-1801 b Fg(rl_vintfunc_t)21
-b(*)e Ff(rl)p 523 922 V 25 w(prep)p 662 922 V 25 w(term)p
-807 922 V 25 w(function)195 977 y Ft(If)12 b(non-zero,)h(Readline)f
+977 y(input)15 b(function)g(\(see)g(Section)g(2.4.8)f([Character)g
+(Input],)h(page)g(34\).)1685 1070 y([V)l(ariable])-1801
+b Fg(rl_voidfunc_t)21 b(*)e Ff(rl)p 523 1070 V 25 w(redispla)n(y)p
+773 1070 V 25 w(function)195 1125 y Ft(If)f(non-zero,)h(Readline)f
+(will)f(call)g(indirectly)g(through)h(this)f(p)q(oin)o(ter)h(to)f(up)q
+(date)i(the)f(displa)o(y)195 1180 y(with)13 b(the)g(curren)o(t)h(con)o
+(ten)o(ts)f(of)g(the)g(editing)g(bu\013er.)19 b(By)14
+b(default,)f(it)g(is)g(set)g(to)g Fs(rl_redisplay)p Ft(,)195
+1234 y(the)i(default)g(Readline)h(redispla)o(y)e(function)h(\(see)g
+(Section)g(2.4.6)f([Redispla)o(y],)g(page)h(32\).)1685
+1328 y([V)l(ariable])-1801 b Fg(rl_vintfunc_t)21 b(*)e
+Ff(rl)p 523 1328 V 25 w(prep)p 662 1328 V 25 w(term)p
+807 1328 V 25 w(function)195 1382 y Ft(If)12 b(non-zero,)h(Readline)f
 (will)f(call)g(indirectly)g(through)h(this)f(p)q(oin)o(ter)h(to)f
-(initialize)f(the)j(terminal.)195 1032 y(The)19 b(function)f(tak)o(es)g
+(initialize)f(the)j(terminal.)195 1437 y(The)19 b(function)f(tak)o(es)g
 (a)g(single)g(argumen)o(t,)g(an)h Fs(int)f Ft(\015ag)g(that)g(sa)o(ys)g
-(whether)g(or)h(not)f(to)g(use)195 1087 y(eigh)o(t-bit)e(c)o
+(whether)g(or)h(not)f(to)g(use)195 1492 y(eigh)o(t-bit)e(c)o
 (haracters.)25 b(By)17 b(default,)g(this)f(is)h(set)f(to)h
 Fs(rl_prep_terminal)e Ft(\(see)i(Section)g(2.4.9)195
-1141 y([T)l(erminal)d(Managemen)o(t],)f(page)i(35\).)1685
-1234 y([V)l(ariable])-1801 b Fg(rl_voidfunc_t)21 b(*)e
-Ff(rl)p 523 1234 V 25 w(deprep)p 720 1234 V 25 w(term)p
-865 1234 V 25 w(function)195 1289 y Ft(If)g(non-zero,)g(Readline)f
+1547 y([T)l(erminal)d(Managemen)o(t],)f(page)i(35\).)1685
+1640 y([V)l(ariable])-1801 b Fg(rl_voidfunc_t)21 b(*)e
+Ff(rl)p 523 1640 V 25 w(deprep)p 720 1640 V 25 w(term)p
+865 1640 V 25 w(function)195 1695 y Ft(If)g(non-zero,)g(Readline)f
 (will)f(call)h(indirectly)f(through)h(this)g(p)q(oin)o(ter)f(to)h
-(reset)g(the)h(terminal.)195 1344 y(This)e(function)g(should)h(undo)g
+(reset)g(the)h(terminal.)195 1749 y(This)e(function)g(should)h(undo)g
 (the)f(e\013ects)h(of)f Fs(rl_prep_term_function)p Ft(.)24
-b(By)17 b(default,)h(this)195 1399 y(is)d(set)g(to)f
+b(By)17 b(default,)h(this)195 1804 y(is)d(set)g(to)f
 Fs(rl_deprep_terminal)f Ft(\(see)i(Section)g(2.4.9)f([T)l(erminal)g
-(Managemen)o(t],)f(page)i(35\).)1685 1492 y([V)l(ariable])-1801
-b Fg(Keymap)20 b Ff(rl)p 295 1492 V 25 w(executing)p
-558 1492 V 26 w(k)n(eymap)195 1547 y Ft(This)e(v)m(ariable)f(is)g(set)h
+(Managemen)o(t],)f(page)i(35\).)1685 1897 y([V)l(ariable])-1801
+b Fg(Keymap)20 b Ff(rl)p 295 1897 V 25 w(executing)p
+558 1897 V 26 w(k)n(eymap)195 1952 y Ft(This)e(v)m(ariable)f(is)g(set)h
 (to)g(the)g(k)o(eymap)f(\(see)h(Section)g(2.4.2)f([Keymaps],)g(page)h
-(28\))f(in)h(whic)o(h)195 1602 y(the)d(curren)o(tly)g(executing)g
-(readline)g(function)g(w)o(as)g(found.)1685 1695 y([V)l(ariable])-1801
-b Fg(Keymap)20 b Ff(rl)p 295 1695 V 25 w(binding)p 509
-1695 V 24 w(k)n(eymap)195 1750 y Ft(This)e(v)m(ariable)f(is)g(set)h(to)
+(28\))f(in)h(whic)o(h)195 2007 y(the)d(curren)o(tly)g(executing)g
+(readline)g(function)g(w)o(as)g(found.)1685 2100 y([V)l(ariable])-1801
+b Fg(Keymap)20 b Ff(rl)p 295 2100 V 25 w(binding)p 509
+2100 V 24 w(k)n(eymap)195 2155 y Ft(This)e(v)m(ariable)f(is)g(set)h(to)
 g(the)g(k)o(eymap)f(\(see)h(Section)g(2.4.2)f([Keymaps],)g(page)h(28\))
-f(in)h(whic)o(h)195 1804 y(the)d(last)f(k)o(ey)h(binding)h(o)q
-(ccurred.)1685 1898 y([V)l(ariable])-1801 b Fg(char)20
-b(*)f Ff(rl)p 288 1898 V 25 w(executing)p 551 1898 V
-26 w(macro)195 1952 y Ft(This)c(v)m(ariable)f(is)h(set)g(to)g(the)g
+f(in)h(whic)o(h)195 2210 y(the)d(last)f(k)o(ey)h(binding)h(o)q
+(ccurred.)1685 2303 y([V)l(ariable])-1801 b Fg(char)20
+b(*)f Ff(rl)p 288 2303 V 25 w(executing)p 551 2303 V
+26 w(macro)195 2358 y Ft(This)c(v)m(ariable)f(is)h(set)g(to)g(the)g
 (text)g(of)f(an)o(y)h(curren)o(tly-executing)g(macro.)1685
-2046 y([V)l(ariable])-1801 b Fg(int)20 b Ff(rl)p 217
-2046 V 24 w(readline)p 441 2046 V 25 w(state)195 2100
+2451 y([V)l(ariable])-1801 b Fg(int)20 b Ff(rl)p 217
+2451 V 24 w(readline)p 441 2451 V 25 w(state)195 2506
 y Ft(A)d(v)m(ariable)g(with)f(bit)h(v)m(alues)h(that)e(encapsulate)h
 (the)h(curren)o(t)f(Readline)g(state.)25 b(A)18 b(bit)e(is)h(set)195
-2155 y(with)h(the)h Fs(RL_SETSTATE)f Ft(macro,)h(and)g(unset)g(with)f
+2560 y(with)h(the)h Fs(RL_SETSTATE)f Ft(macro,)h(and)g(unset)g(with)f
 (the)h Fs(RL_UNSETSTATE)e Ft(macro.)31 b(Use)19 b(the)195
-2210 y Fs(RL_ISSTATE)e Ft(macro)h(to)g(test)g(whether)h(a)f(particular)
+2615 y Fs(RL_ISSTATE)e Ft(macro)h(to)g(test)g(whether)h(a)f(particular)
 g(state)f(bit)i(is)f(set.)30 b(Curren)o(t)18 b(state)g(bits)195
-2265 y(include:)195 2345 y Fs(RL_STATE_NONE)435 2400
-y Ft(Readline)d(has)h(not)e(y)o(et)h(b)q(een)h(called,)f(nor)g(has)g
-(it)f(b)q(egun)i(to)f(in)o(tialize.)195 2480 y Fs
-(RL_STATE_INITIALIZING)435 2535 y Ft(Readline)g(is)g(initializing)e
-(its)h(in)o(ternal)g(data)h(structures.)195 2615 y Fs
-(RL_STATE_INITIALIZED)435 2670 y Ft(Readline)g(has)h(completed)f(its)f
-(initialization.)p eop end
+2670 y(include:)p eop end
 %%Page: 27 31
 TeXDict begin 27 30 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)14
-b(with)g(GNU)h(Readline)842 b(27)195 149 y Fs(RL_STATE_TERMPREPPED)435
-204 y Ft(Readline)15 b(has)f(mo)q(di\014ed)h(the)f(terminal)f(mo)q(des)
-i(to)e(do)i(its)e(o)o(wn)h(input)g(and)h(redis-)435 259
-y(pla)o(y)l(.)195 344 y Fs(RL_STATE_READCMD)435 398 y
-Ft(Readline)g(is)g(reading)g(a)g(command)g(from)f(the)i(k)o(eyb)q
-(oard.)195 483 y Fs(RL_STATE_METANEXT)435 538 y Ft(Readline)f(is)g
+b(with)g(GNU)h(Readline)842 b(27)195 149 y Fs(RL_STATE_NONE)435
+204 y Ft(Readline)15 b(has)h(not)e(y)o(et)h(b)q(een)h(called,)f(nor)g
+(has)g(it)f(b)q(egun)i(to)f(in)o(tialize.)195 277 y Fs
+(RL_STATE_INITIALIZING)435 332 y Ft(Readline)g(is)g(initializing)e(its)
+h(in)o(ternal)g(data)h(structures.)195 405 y Fs(RL_STATE_INITIALIZED)
+435 460 y Ft(Readline)g(has)h(completed)f(its)f(initialization.)195
+533 y Fs(RL_STATE_TERMPREPPED)435 588 y Ft(Readline)h(has)f(mo)q
+(di\014ed)h(the)f(terminal)f(mo)q(des)i(to)e(do)i(its)e(o)o(wn)h(input)
+g(and)h(redis-)435 643 y(pla)o(y)l(.)195 716 y Fs(RL_STATE_READCMD)435
+770 y Ft(Readline)g(is)g(reading)g(a)g(command)g(from)f(the)i(k)o(eyb)q
+(oard.)195 844 y Fs(RL_STATE_METANEXT)435 898 y Ft(Readline)f(is)g
 (reading)g(more)g(input)g(after)f(reading)h(the)g(meta-pre\014x)h(c)o
-(haracter.)195 622 y Fs(RL_STATE_DISPATCHING)435 677
+(haracter.)195 971 y Fs(RL_STATE_DISPATCHING)435 1026
 y Ft(Readline)f(is)g(dispatc)o(hing)g(to)f(a)h(command.)195
-762 y Fs(RL_STATE_MOREINPUT)435 816 y Ft(Readline)g(is)g(reading)g
+1099 y Fs(RL_STATE_MOREINPUT)435 1154 y Ft(Readline)g(is)g(reading)g
 (more)g(input)g(while)g(executing)g(an)g(editing)g(command.)195
-901 y Fs(RL_STATE_ISEARCH)435 956 y Ft(Readline)g(is)g(p)q(erforming)g
-(an)g(incremen)o(tal)f(history)g(searc)o(h.)195 1040
-y Fs(RL_STATE_NSEARCH)435 1095 y Ft(Readline)h(is)g(p)q(erforming)g(a)g
-(non-incremen)o(tal)f(history)h(searc)o(h.)195 1180 y
-Fs(RL_STATE_SEARCH)435 1234 y Ft(Readline)10 b(is)g(searc)o(hing)g(bac)
+1227 y Fs(RL_STATE_ISEARCH)435 1282 y Ft(Readline)g(is)g(p)q(erforming)
+g(an)g(incremen)o(tal)f(history)g(searc)o(h.)195 1355
+y Fs(RL_STATE_NSEARCH)435 1410 y Ft(Readline)h(is)g(p)q(erforming)g(a)g
+(non-incremen)o(tal)f(history)h(searc)o(h.)195 1483 y
+Fs(RL_STATE_SEARCH)435 1538 y Ft(Readline)10 b(is)g(searc)o(hing)g(bac)
 o(kw)o(ard)f(or)h(forw)o(ard)f(through)h(the)g(history)f(for)g(a)h
-(string.)195 1319 y Fs(RL_STATE_NUMERICARG)435 1374 y
+(string.)195 1611 y Fs(RL_STATE_NUMERICARG)435 1665 y
 Ft(Readline)15 b(is)g(reading)g(a)g(n)o(umeric)g(argumen)o(t.)195
-1458 y Fs(RL_STATE_MACROINPUT)435 1513 y Ft(Readline)d(is)g(curren)o
+1738 y Fs(RL_STATE_MACROINPUT)435 1793 y Ft(Readline)d(is)g(curren)o
 (tly)g(getting)f(its)g(input)h(from)f(a)h(previously-de\014ned)h(k)o
-(eyb)q(oard)435 1568 y(macro.)195 1652 y Fs(RL_STATE_MACRODEF)435
-1707 y Ft(Readline)i(is)g(curren)o(tly)g(reading)g(c)o(haracters)f
-(de\014ning)i(a)f(k)o(eyb)q(oard)g(macro.)195 1792 y
-Fs(RL_STATE_OVERWRITE)435 1846 y Ft(Readline)g(is)g(in)g(o)o(v)o
-(erwrite)f(mo)q(de.)195 1931 y Fs(RL_STATE_COMPLETING)435
-1986 y Ft(Readline)h(is)g(p)q(erforming)g(w)o(ord)f(completion.)195
-2070 y Fs(RL_STATE_SIGHANDLER)435 2125 y Ft(Readline)h(is)g(curren)o
+(eyb)q(oard)435 1848 y(macro.)195 1921 y Fs(RL_STATE_MACRODEF)435
+1976 y Ft(Readline)i(is)g(curren)o(tly)g(reading)g(c)o(haracters)f
+(de\014ning)i(a)f(k)o(eyb)q(oard)g(macro.)195 2049 y
+Fs(RL_STATE_OVERWRITE)435 2104 y Ft(Readline)g(is)g(in)g(o)o(v)o
+(erwrite)f(mo)q(de.)195 2177 y Fs(RL_STATE_COMPLETING)435
+2232 y Ft(Readline)h(is)g(p)q(erforming)g(w)o(ord)f(completion.)195
+2305 y Fs(RL_STATE_SIGHANDLER)435 2359 y Ft(Readline)h(is)g(curren)o
 (tly)g(executing)g(the)g(readline)g(signal)f(handler.)195
-2210 y Fs(RL_STATE_UNDOING)435 2264 y Ft(Readline)h(is)g(p)q(erforming)
-g(an)g(undo.)195 2349 y Fs(RL_STATE_DONE)435 2404 y Ft(Readline)f(has)g
+2433 y Fs(RL_STATE_UNDOING)435 2487 y Ft(Readline)h(is)g(p)q(erforming)
+g(an)g(undo.)195 2560 y Fs(RL_STATE_DONE)435 2615 y Ft(Readline)f(has)g
 (read)g(a)f(k)o(ey)h(sequence)h(b)q(ound)g(to)e Fs(accept-line)f
-Ft(and)i(is)g(ab)q(out)g(to)435 2459 y(return)h(the)g(line)g(to)g(the)g
-(caller.)1685 2560 y([V)l(ariable])-1801 b Fg(int)20
-b Ff(rl)p 217 2560 18 3 v 24 w(explicit)p 424 2560 V
-26 w(arg)195 2615 y Ft(Set)f(to)g(a)g(non-zero)h(v)m(alue)g(if)e(an)i
-(explicit)e(n)o(umeric)i(argumen)o(t)e(w)o(as)h(sp)q(eci\014ed)h(b)o(y)
-g(the)f(user.)195 2670 y(Only)c(v)m(alid)g(in)g(a)g(bindable)g(command)
-h(function.)p eop end
+Ft(and)i(is)g(ab)q(out)g(to)435 2670 y(return)h(the)g(line)g(to)g(the)g
+(caller.)p eop end
 %%Page: 28 32
 TeXDict begin 28 31 bop 75 -58 a Ft(28)1299 b(GNU)15
 b(Readline)g(Library)1685 149 y([V)l(ariable])-1801 b
-Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(n)n(umeric)p
-442 149 V 25 w(arg)195 204 y Ft(Set)j(to)f(the)g(v)m(alue)h(of)g(an)o
-(y)f(n)o(umeric)g(argumen)o(t)g(explicitly)g(sp)q(eci\014ed)i(b)o(y)e
-(the)h(user)g(b)q(efore)195 259 y(executing)13 b(the)g(curren)o(t)g
-(Readline)g(function.)19 b(Only)13 b(v)m(alid)g(in)g(a)g(bindable)g
-(command)f(function.)1685 349 y([V)l(ariable])-1801 b
-Fg(int)20 b Ff(rl)p 217 349 V 24 w(editing)p 414 349
-V 25 w(mo)r(de)195 404 y Ft(Set)13 b(to)f(a)g(v)m(alue)h(denoting)f
-(Readline's)g(curren)o(t)h(editing)f(mo)q(de.)19 b(A)12
-b(v)m(alue)h(of)f Fi(1)k Ft(means)d(Readline)195 458
-y(is)i(curren)o(tly)f(in)h(emacs)h(mo)q(de;)f Fi(0)j
-Ft(means)d(that)g(vi)g(mo)q(de)g(is)g(activ)o(e.)75 585
-y Fr(2.4)33 b(Readline)21 b(Con)n(v)n(enience)h(F)-6
-b(unctions)75 749 y Fh(2.4.1)30 b(Naming)20 b(a)g(F)-5
-b(unction)137 871 y Ft(The)20 b(user)g(can)g(dynamically)f(c)o(hange)h
+Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(explicit)p 424
+149 V 26 w(arg)195 204 y Ft(Set)f(to)g(a)g(non-zero)h(v)m(alue)g(if)e
+(an)i(explicit)e(n)o(umeric)i(argumen)o(t)e(w)o(as)h(sp)q(eci\014ed)h
+(b)o(y)g(the)f(user.)195 259 y(Only)c(v)m(alid)g(in)g(a)g(bindable)g
+(command)h(function.)1685 354 y([V)l(ariable])-1801 b
+Fg(int)20 b Ff(rl)p 217 354 V 24 w(n)n(umeric)p 442 354
+V 25 w(arg)195 409 y Ft(Set)j(to)f(the)g(v)m(alue)h(of)g(an)o(y)f(n)o
+(umeric)g(argumen)o(t)g(explicitly)g(sp)q(eci\014ed)i(b)o(y)e(the)h
+(user)g(b)q(efore)195 464 y(executing)13 b(the)g(curren)o(t)g(Readline)
+g(function.)19 b(Only)13 b(v)m(alid)g(in)g(a)g(bindable)g(command)f
+(function.)1685 558 y([V)l(ariable])-1801 b Fg(int)20
+b Ff(rl)p 217 558 V 24 w(editing)p 414 558 V 25 w(mo)r(de)195
+613 y Ft(Set)13 b(to)f(a)g(v)m(alue)h(denoting)f(Readline's)g(curren)o
+(t)h(editing)f(mo)q(de.)19 b(A)12 b(v)m(alue)h(of)f Fi(1)k
+Ft(means)d(Readline)195 668 y(is)i(curren)o(tly)f(in)h(emacs)h(mo)q
+(de;)f Fi(0)j Ft(means)d(that)g(vi)g(mo)q(de)g(is)g(activ)o(e.)75
+800 y Fr(2.4)33 b(Readline)21 b(Con)n(v)n(enience)h(F)-6
+b(unctions)75 970 y Fh(2.4.1)30 b(Naming)20 b(a)g(F)-5
+b(unction)137 1093 y Ft(The)20 b(user)g(can)g(dynamically)f(c)o(hange)h
 (the)g(bindings)g(of)f(k)o(eys)h(while)f(using)h(Readline.)34
-b(This)19 b(is)75 925 y(done)g(b)o(y)f(represen)o(ting)g(the)h
+b(This)19 b(is)75 1148 y(done)g(b)o(y)f(represen)o(ting)g(the)h
 (function)f(with)g(a)g(descriptiv)o(e)g(name.)29 b(The)19
-b(user)f(is)g(able)h(to)e(t)o(yp)q(e)i(the)75 980 y(descriptiv)o(e)c
+b(user)f(is)g(able)h(to)e(t)o(yp)q(e)i(the)75 1203 y(descriptiv)o(e)c
 (name)g(when)h(referring)e(to)h(the)g(function.)20 b(Th)o(us,)14
 b(in)h(an)g(init)g(\014le,)g(one)g(migh)o(t)f(\014nd)195
-1047 y Fs(Meta-Rubout:)46 b(backward-kill-word)137 1113
-y Ft(This)20 b(binds)g(the)g(k)o(eystrok)o(e)661 1111
-y Fk(h)p 673 1085 209 2 v 673 1113 a Fj(Meta-Rub)q(out)p
-673 1121 V 879 1111 a Fk(i)914 1113 y Ft(to)g(the)g(function)f
-Fn(descriptively)24 b Ft(named)c Fs(backward-)75 1168
+1271 y Fs(Meta-Rubout:)46 b(backward-kill-word)137 1340
+y Ft(This)20 b(binds)g(the)g(k)o(eystrok)o(e)661 1338
+y Fk(h)p 673 1312 209 2 v 673 1340 a Fj(Meta-Rub)q(out)p
+673 1348 V 879 1338 a Fk(i)914 1340 y Ft(to)g(the)g(function)f
+Fn(descriptively)24 b Ft(named)c Fs(backward-)75 1395
 y(kill-word)p Ft(.)29 b(Y)l(ou,)19 b(as)f(the)h(programmer,)f(should)h
 (bind)f(the)h(functions)g(y)o(ou)f(write)g(to)f(descriptiv)o(e)75
-1223 y(names)e(as)g(w)o(ell.)k(Readline)c(pro)o(vides)g(a)g(function)g
-(for)f(doing)h(that:)1675 1313 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 1313 18 3 v 24 w(add)p 333
-1313 V 25 w(defun)i Fe(\()p Fs(const)14 b(char)h(*name,)f
-(rl_command_func_t)f(*function,)283 1367 y(int)h(key)p
-Fe(\))195 1422 y Ft(Add)k Fi(name)i Ft(to)d(the)h(list)f(of)g(named)h
+1449 y(names)e(as)g(w)o(ell.)k(Readline)c(pro)o(vides)g(a)g(function)g
+(for)f(doing)h(that:)1675 1544 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 1544 18 3 v 24 w(add)p 333
+1544 V 25 w(defun)i Fe(\()p Fs(const)14 b(char)h(*name,)f
+(rl_command_func_t)f(*function,)283 1599 y(int)h(key)p
+Fe(\))195 1654 y Ft(Add)k Fi(name)i Ft(to)d(the)h(list)f(of)g(named)h
 (functions.)27 b(Mak)o(e)17 b Fi(function)g Ft(b)q(e)h(the)g(function)g
-(that)e(gets)195 1477 y(called.)j(If)d Fi(k)o(ey)j Ft(is)c(not)f(-1,)h
+(that)e(gets)195 1709 y(called.)j(If)d Fi(k)o(ey)j Ft(is)c(not)f(-1,)h
 (then)h(bind)f(it)g(to)f Fi(function)h Ft(using)g Fs(rl_bind_key\(\))p
-Ft(.)137 1567 y(Using)g(this)f(function)h(alone)g(is)f(su\016cien)o(t)h
+Ft(.)137 1804 y(Using)g(this)f(function)h(alone)g(is)f(su\016cien)o(t)h
 (for)g(most)f(applications.)k(It)d(is)g(the)g(recommended)h(w)o(a)o(y)
-75 1622 y(to)d(add)h(a)f(few)g(functions)g(to)g(the)h(default)f
+75 1858 y(to)d(add)h(a)f(few)g(functions)g(to)g(the)h(default)f
 (functions)g(that)g(Readline)h(has)f(built)g(in.)19 b(If)14
-b(y)o(ou)f(need)h(to)f(do)75 1676 y(something)j(other)h(than)f(adding)h
+b(y)o(ou)f(need)h(to)f(do)75 1913 y(something)j(other)h(than)f(adding)h
 (a)f(function)h(to)f(Readline,)h(y)o(ou)g(ma)o(y)f(need)i(to)e(use)h
-(the)g(underlying)75 1731 y(functions)e(describ)q(ed)h(b)q(elo)o(w.)75
-1841 y Fh(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 1962
+(the)g(underlying)75 1968 y(functions)e(describ)q(ed)h(b)q(elo)o(w.)75
+2083 y Fh(2.4.2)30 b(Selecting)20 b(a)h(Keymap)137 2206
 y Ft(Key)16 b(bindings)g(tak)o(e)e(place)i(on)f(a)g Fi(k)o(eymap)p
 Ft(.)21 b(The)15 b(k)o(eymap)h(is)e(the)i(asso)q(ciation)e(b)q(et)o(w)o
-(een)i(the)f(k)o(eys)75 2017 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
+(een)i(the)f(k)o(eys)75 2261 y(that)f(the)g(user)g(t)o(yp)q(es)g(and)h
 (the)f(functions)g(that)g(get)g(run.)19 b(Y)l(ou)c(can)f(mak)o(e)g(y)o
-(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 2072 y(existing)g(k)o(eymaps,)
+(our)g(o)o(wn)f(k)o(eymaps,)h(cop)o(y)75 2316 y(existing)g(k)o(eymaps,)
 h(and)g(tell)f(Readline)i(whic)o(h)f(k)o(eymap)g(to)f(use.)1675
-2162 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
-2162 V 25 w(mak)n(e)p 450 2162 V 25 w(bare)p 585 2162
-V 25 w(k)n(eymap)j Fe(\()p Fs(void)p Fe(\))195 2216 y
+2411 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
+2411 V 25 w(mak)n(e)p 450 2411 V 25 w(bare)p 585 2411
+V 25 w(k)n(eymap)j Fe(\()p Fs(void)p Fe(\))195 2466 y
 Ft(Returns)13 b(a)e(new,)i(empt)o(y)f(k)o(eymap.)18 b(The)13
 b(space)f(for)f(the)i(k)o(eymap)e(is)h(allo)q(cated)f(with)g
-Fs(malloc\(\))p Ft(;)195 2271 y(the)k(caller)g(should)g(free)g(it)g(b)o
+Fs(malloc\(\))p Ft(;)195 2520 y(the)k(caller)g(should)g(free)g(it)g(b)o
 (y)g(calling)f Fs(rl_discard_keymap\(\))e Ft(when)k(done.)1675
-2361 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
-2361 V 25 w(cop)n(y)p 434 2361 V 25 w(k)n(eymap)k Fe(\()p
-Fs(Keymap)14 b(map)p Fe(\))195 2416 y Ft(Return)i(a)f(new)g(k)o(eymap)g
-(whic)o(h)g(is)g(a)g(cop)o(y)g(of)g Fi(map)p Ft(.)1675
-2506 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
-2506 V 25 w(mak)n(e)p 450 2506 V 25 w(k)n(eymap)k Fe(\()p
-Fs(void)p Fe(\))195 2560 y Ft(Return)16 b(a)g(new)g(k)o(eymap)f(with)g
-(the)h(prin)o(ting)f(c)o(haracters)f(b)q(ound)j(to)e(rl)p
-1455 2560 14 2 v 20 w(insert,)f(the)i(lo)o(w)o(ercase)195
-2615 y(Meta)11 b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)e(equiv)m
-(alen)o(ts,)i(and)f(the)h(Meta)e(digits)g(b)q(ound)i(to)f(pro)q(duce)
-195 2670 y(n)o(umeric)k(argumen)o(ts.)p eop end
+2615 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
+2615 V 25 w(cop)n(y)p 434 2615 V 25 w(k)n(eymap)k Fe(\()p
+Fs(Keymap)14 b(map)p Fe(\))195 2670 y Ft(Return)i(a)f(new)g(k)o(eymap)g
+(whic)o(h)g(is)g(a)g(cop)o(y)g(of)g Fi(map)p Ft(.)p eop
+end
 %%Page: 29 33
 TeXDict begin 29 32 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)14
 b(with)g(GNU)h(Readline)842 b(29)1675 149 y([F)l(unction])-1801
-b Fg(void)20 b Ff(rl)p 243 149 18 3 v 24 w(discard)p
-447 149 V 25 w(k)n(eymap)j Fe(\()p Fs(Keymap)14 b(keymap)p
-Fe(\))195 204 y Ft(F)l(ree)h(the)h(storage)d(asso)q(ciated)i(with)f
-Fi(k)o(eymap)p Ft(.)137 292 y(Readline)23 b(has)g(sev)o(eral)f(in)o
+b Fg(Keymap)20 b Ff(rl)p 295 149 18 3 v 25 w(mak)n(e)p
+450 149 V 25 w(k)n(eymap)k Fe(\()p Fs(void)p Fe(\))195
+204 y Ft(Return)16 b(a)g(new)g(k)o(eymap)f(with)g(the)h(prin)o(ting)f
+(c)o(haracters)f(b)q(ound)j(to)e(rl)p 1455 204 14 2 v
+20 w(insert,)f(the)i(lo)o(w)o(ercase)195 259 y(Meta)11
+b(c)o(haracters)f(b)q(ound)i(to)f(run)h(their)e(equiv)m(alen)o(ts,)i
+(and)f(the)h(Meta)e(digits)g(b)q(ound)i(to)f(pro)q(duce)195
+314 y(n)o(umeric)k(argumen)o(ts.)1675 402 y([F)l(unction])-1801
+b Fg(void)20 b Ff(rl)p 243 402 18 3 v 24 w(discard)p
+447 402 V 25 w(k)n(eymap)j Fe(\()p Fs(Keymap)14 b(keymap)p
+Fe(\))195 456 y Ft(F)l(ree)h(the)h(storage)d(asso)q(ciated)i(with)f
+Fi(k)o(eymap)p Ft(.)137 544 y(Readline)23 b(has)g(sev)o(eral)f(in)o
 (ternal)f(k)o(eymaps.)42 b(These)23 b(functions)f(allo)o(w)f(y)o(ou)h
-(to)g(c)o(hange)h(whic)o(h)75 347 y(k)o(eymap)15 b(is)g(activ)o(e.)1675
-435 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
-435 V 25 w(get)p 397 435 V 25 w(k)n(eymap)j Fe(\()p Fs(void)p
-Fe(\))195 490 y Ft(Returns)16 b(the)f(curren)o(tly)g(activ)o(e)f(k)o
-(eymap.)1675 577 y([F)l(unction])-1801 b Fg(void)20 b
-Ff(rl)p 243 577 V 24 w(set)p 338 577 V 26 w(k)n(eymap)j
-Fe(\()p Fs(Keymap)14 b(keymap)p Fe(\))195 632 y Ft(Mak)o(es)g
+(to)g(c)o(hange)h(whic)o(h)75 599 y(k)o(eymap)15 b(is)g(activ)o(e.)1675
+687 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
+687 V 25 w(get)p 397 687 V 25 w(k)n(eymap)j Fe(\()p Fs(void)p
+Fe(\))195 742 y Ft(Returns)16 b(the)f(curren)o(tly)g(activ)o(e)f(k)o
+(eymap.)1675 830 y([F)l(unction])-1801 b Fg(void)20 b
+Ff(rl)p 243 830 V 24 w(set)p 338 830 V 26 w(k)n(eymap)j
+Fe(\()p Fs(Keymap)14 b(keymap)p Fe(\))195 884 y Ft(Mak)o(es)g
 Fi(k)o(eymap)j Ft(the)e(curren)o(tly)g(activ)o(e)f(k)o(eymap.)1675
-720 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
-720 V 25 w(get)p 397 720 V 25 w(k)n(eymap)p 614 720 V
-26 w(b)n(y)p 700 720 V 26 w(name)i Fe(\()p Fs(const)14
-b(char)h(*name)p Fe(\))195 775 y Ft(Return)i(the)g(k)o(eymap)f(matc)o
+972 y([F)l(unction])-1801 b Fg(Keymap)20 b Ff(rl)p 295
+972 V 25 w(get)p 397 972 V 25 w(k)n(eymap)p 614 972 V
+26 w(b)n(y)p 700 972 V 26 w(name)i Fe(\()p Fs(const)14
+b(char)h(*name)p Fe(\))195 1027 y Ft(Return)i(the)g(k)o(eymap)f(matc)o
 (hing)g Fi(name)p Ft(.)24 b Fi(name)19 b Ft(is)d(one)h(whic)o(h)f(w)o
-(ould)g(b)q(e)i(supplied)f(in)f(a)g Fs(set)195 830 y(keymap)e
+(ould)g(b)q(e)i(supplied)f(in)f(a)g Fs(set)195 1082 y(keymap)e
 Ft(inputrc)i(line)e(\(see)i(Section)f(1.3)f([Readline)h(Init)g(File],)f
-(page)h(4\).)1675 917 y([F)l(unction])-1801 b Fg(char)20
-b(*)f Ff(rl)p 288 917 V 25 w(get)p 390 917 V 25 w(k)n(eymap)p
-607 917 V 26 w(name)j Fe(\()p Fs(Keymap)14 b(keymap)p
-Fe(\))195 972 y Ft(Return)j(the)g(name)g(matc)o(hing)e
+(page)h(4\).)1675 1170 y([F)l(unction])-1801 b Fg(char)20
+b(*)f Ff(rl)p 288 1170 V 25 w(get)p 390 1170 V 25 w(k)n(eymap)p
+607 1170 V 26 w(name)j Fe(\()p Fs(Keymap)14 b(keymap)p
+Fe(\))195 1224 y Ft(Return)j(the)g(name)g(matc)o(hing)e
 Fi(k)o(eymap)p Ft(.)24 b Fi(name)19 b Ft(is)d(one)h(whic)o(h)f(w)o
-(ould)g(b)q(e)i(supplied)f(in)f(a)g Fs(set)195 1027 y(keymap)e
+(ould)g(b)q(e)i(supplied)f(in)f(a)g Fs(set)195 1279 y(keymap)e
 Ft(inputrc)i(line)e(\(see)i(Section)f(1.3)f([Readline)h(Init)g(File],)f
-(page)h(4\).)75 1135 y Fh(2.4.3)30 b(Binding)20 b(Keys)137
-1255 y Ft(Key)13 b(sequences)g(are)e(asso)q(ciate)g(with)h(functions)f
+(page)h(4\).)75 1387 y Fh(2.4.3)30 b(Binding)20 b(Keys)137
+1508 y Ft(Key)13 b(sequences)g(are)e(asso)q(ciate)g(with)h(functions)f
 (through)h(the)g(k)o(eymap.)19 b(Readline)12 b(has)g(sev)o(eral)f(in-)
-75 1310 y(ternal)j(k)o(eymaps:)19 b Fs(emacs_standard_keymap)p
+75 1562 y(ternal)j(k)o(eymaps:)19 b Fs(emacs_standard_keymap)p
 Ft(,)11 b Fs(emacs_meta_keymap)p Ft(,)h Fs(emacs_ctlx_keymap)p
-Ft(,)g Fs(vi_)75 1365 y(movement_keymap)p Ft(,)20 b(and)i
+Ft(,)g Fs(vi_)75 1617 y(movement_keymap)p Ft(,)20 b(and)i
 Fs(vi_insertion_keymap)p Ft(.)35 b Fs(emacs_standard_keymap)18
-b Ft(is)j(the)g(default,)75 1420 y(and)15 b(the)h(examples)f(in)g(this)
-f(man)o(ual)h(assume)g(that.)137 1486 y(Since)g Fs(readline\(\))d
+b Ft(is)j(the)g(default,)75 1672 y(and)15 b(the)h(examples)f(in)g(this)
+f(man)o(ual)h(assume)g(that.)137 1738 y(Since)g Fs(readline\(\))d
 Ft(installs)g(a)i(set)f(of)h(default)f(k)o(ey)h(bindings)f(the)h
-(\014rst)g(time)f(it)g(is)g(called,)h(there)f(is)75 1540
+(\014rst)g(time)f(it)g(is)g(called,)h(there)f(is)75 1793
 y(alw)o(a)o(ys)i(the)h(danger)g(that)g(a)g(custom)g(binding)g
 (installed)f(b)q(efore)i(the)f(\014rst)g(call)g(to)f
-Fs(readline\(\))g Ft(will)75 1595 y(b)q(e)f(o)o(v)o(erridden.)k(An)13
+Fs(readline\(\))g Ft(will)75 1847 y(b)q(e)f(o)o(v)o(erridden.)k(An)13
 b(alternate)f(mec)o(hanism)h(is)f(to)g(install)f(custom)i(k)o(ey)g
-(bindings)f(in)h(an)g(initialization)75 1650 y(function)18
+(bindings)f(in)h(an)g(initialization)75 1902 y(function)18
 b(assigned)h(to)e(the)i Fs(rl_startup_hook)e Ft(v)m(ariable)h(\(see)g
-(Section)g(2.3)g([Readline)h(V)l(ariables],)75 1705 y(page)c(24\).)137
-1771 y(These)h(functions)f(manage)f(k)o(ey)i(bindings.)1675
-1858 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
-1858 V 24 w(bind)p 353 1858 V 25 w(k)n(ey)k Fe(\()p Fs(int)14
-b(key,)h(rl_command_func_t)e(*function)p Fe(\))195 1913
+(Section)g(2.3)g([Readline)h(V)l(ariables],)75 1957 y(page)c(24\).)137
+2023 y(These)h(functions)f(manage)f(k)o(ey)i(bindings.)1675
+2111 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
+2111 V 24 w(bind)p 353 2111 V 25 w(k)n(ey)k Fe(\()p Fs(int)14
+b(key,)h(rl_command_func_t)e(*function)p Fe(\))195 2166
 y Ft(Binds)k Fi(k)o(ey)j Ft(to)c Fi(function)g Ft(in)h(the)f(curren)o
 (tly)g(activ)o(e)g(k)o(eymap.)23 b(Returns)17 b(non-zero)g(in)f(the)h
-(case)195 1968 y(of)e(an)g(in)o(v)m(alid)f Fi(k)o(ey)p
-Ft(.)1675 2056 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p
-217 2056 V 24 w(bind)p 353 2056 V 25 w(k)n(ey)p 462 2056
-V 26 w(in)p 536 2056 V 25 w(map)i Fe(\()p Fs(int)15 b(key,)f
-(rl_command_func_t)f(*function,)283 2111 y(Keymap)h(map)p
-Fe(\))195 2166 y Ft(Bind)h Fi(k)o(ey)k Ft(to)c Fi(function)g
+(case)195 2220 y(of)e(an)g(in)o(v)m(alid)f Fi(k)o(ey)p
+Ft(.)1675 2308 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p
+217 2308 V 24 w(bind)p 353 2308 V 25 w(k)n(ey)p 462 2308
+V 26 w(in)p 536 2308 V 25 w(map)i Fe(\()p Fs(int)15 b(key,)f
+(rl_command_func_t)f(*function,)283 2363 y(Keymap)h(map)p
+Fe(\))195 2418 y Ft(Bind)h Fi(k)o(ey)k Ft(to)c Fi(function)g
 Ft(in)g Fi(map)p Ft(.)20 b(Returns)15 b(non-zero)h(in)f(the)g(case)g
-(of)g(an)g(in)o(v)m(alid)g Fi(k)o(ey)p Ft(.)1675 2253
-y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 2253
-V 24 w(bind)p 353 2253 V 25 w(k)n(ey)p 462 2253 V 26
-w(if)p 522 2253 V 25 w(un)n(b)r(ound)h Fe(\()p Fs(int)15
-b(key,)f(rl_command_func_t)283 2308 y(*function)p Fe(\))195
-2363 y Ft(Binds)22 b Fi(k)o(ey)k Ft(to)21 b Fi(function)h
-Ft(if)g(it)f(is)g(not)h(already)f(b)q(ound)i(in)f(the)g(curren)o(tly)f
-(activ)o(e)h(k)o(eymap.)195 2418 y(Returns)16 b(non-zero)f(in)g(the)h
-(case)f(of)f(an)i(in)o(v)m(alid)e Fi(k)o(ey)19 b Ft(or)c(if)f
-Fi(k)o(ey)19 b Ft(is)c(already)g(b)q(ound.)1675 2506
+(of)g(an)g(in)o(v)m(alid)g Fi(k)o(ey)p Ft(.)1675 2506
 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 2506
 V 24 w(bind)p 353 2506 V 25 w(k)n(ey)p 462 2506 V 26
-w(if)p 522 2506 V 25 w(un)n(b)r(ound)p 768 2506 V 24
-w(in)p 840 2506 V 25 w(map)i Fe(\()p Fs(int)14 b(key,)283
-2560 y(rl_command_func_t)e(*function,)i(Keymap)h(map)p
-Fe(\))195 2615 y Ft(Binds)f Fi(k)o(ey)j Ft(to)c Fi(function)h
-Ft(if)f(it)g(is)g(not)g(already)g(b)q(ound)i(in)e Fi(map)p
-Ft(.)20 b(Returns)14 b(non-zero)g(in)f(the)h(case)195
-2670 y(of)h(an)g(in)o(v)m(alid)f Fi(k)o(ey)19 b Ft(or)c(if)g
-Fi(k)o(ey)k Ft(is)14 b(already)h(b)q(ound.)p eop end
+w(if)p 522 2506 V 25 w(un)n(b)r(ound)h Fe(\()p Fs(int)15
+b(key,)f(rl_command_func_t)283 2560 y(*function)p Fe(\))195
+2615 y Ft(Binds)22 b Fi(k)o(ey)k Ft(to)21 b Fi(function)h
+Ft(if)g(it)f(is)g(not)h(already)f(b)q(ound)i(in)f(the)g(curren)o(tly)f
+(activ)o(e)h(k)o(eymap.)195 2670 y(Returns)16 b(non-zero)f(in)g(the)h
+(case)f(of)f(an)i(in)o(v)m(alid)e Fi(k)o(ey)19 b Ft(or)c(if)f
+Fi(k)o(ey)19 b Ft(is)c(already)g(b)q(ound.)p eop end
 %%Page: 30 34
 TeXDict begin 30 33 bop 75 -58 a Ft(30)1299 b(GNU)15
 b(Readline)g(Library)1675 149 y([F)l(unction])-1801 b
-Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(un)n(bind)p 415
-149 V 25 w(k)n(ey)k Fe(\()p Fs(int)14 b(key)p Fe(\))195
-204 y Ft(Bind)k Fi(k)o(ey)k Ft(to)c(the)g(n)o(ull)g(function)g(in)g
+Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(bind)p 353 149
+V 25 w(k)n(ey)p 462 149 V 26 w(if)p 522 149 V 25 w(un)n(b)r(ound)p
+768 149 V 24 w(in)p 840 149 V 25 w(map)i Fe(\()p Fs(int)14
+b(key,)283 204 y(rl_command_func_t)e(*function,)i(Keymap)h(map)p
+Fe(\))195 259 y Ft(Binds)f Fi(k)o(ey)j Ft(to)c Fi(function)h
+Ft(if)f(it)g(is)g(not)g(already)g(b)q(ound)i(in)e Fi(map)p
+Ft(.)20 b(Returns)14 b(non-zero)g(in)f(the)h(case)195
+314 y(of)h(an)g(in)o(v)m(alid)f Fi(k)o(ey)19 b Ft(or)c(if)g
+Fi(k)o(ey)k Ft(is)14 b(already)h(b)q(ound.)1675 396 y([F)l(unction])
+-1801 b Fg(int)20 b Ff(rl)p 217 396 V 24 w(un)n(bind)p
+415 396 V 25 w(k)n(ey)k Fe(\()p Fs(int)14 b(key)p Fe(\))195
+451 y Ft(Bind)k Fi(k)o(ey)k Ft(to)c(the)g(n)o(ull)g(function)g(in)g
 (the)g(curren)o(tly)f(activ)o(e)h(k)o(eymap.)28 b(Returns)19
-b(non-zero)f(in)195 259 y(case)d(of)g(error.)1675 347
-y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 347 V
-24 w(un)n(bind)p 415 347 V 25 w(k)n(ey)p 524 347 V 26
-w(in)p 598 347 V 25 w(map)i Fe(\()p Fs(int)15 b(key,)f(Keymap)h(map)p
-Fe(\))195 401 y Ft(Bind)g Fi(k)o(ey)k Ft(to)c(the)g(n)o(ull)g(function)
+b(non-zero)f(in)195 506 y(case)d(of)g(error.)1675 588
+y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 588 V
+24 w(un)n(bind)p 415 588 V 25 w(k)n(ey)p 524 588 V 26
+w(in)p 598 588 V 25 w(map)i Fe(\()p Fs(int)15 b(key,)f(Keymap)h(map)p
+Fe(\))195 643 y Ft(Bind)g Fi(k)o(ey)k Ft(to)c(the)g(n)o(ull)g(function)
 g(in)g Fi(map)p Ft(.)20 b(Returns)15 b(non-zero)h(in)f(case)g(of)g
-(error.)1675 489 y([F)l(unction])-1801 b Fg(int)20 b
-Ff(rl)p 217 489 V 24 w(un)n(bind)p 415 489 V 25 w(function)p
-646 489 V 24 w(in)p 718 489 V 25 w(map)i Fe(\()p Fs(rl_command_func_t)
-13 b(*function,)283 544 y(Keymap)h(map)p Fe(\))195 599
+(error.)1675 725 y([F)l(unction])-1801 b Fg(int)20 b
+Ff(rl)p 217 725 V 24 w(un)n(bind)p 415 725 V 25 w(function)p
+646 725 V 24 w(in)p 718 725 V 25 w(map)i Fe(\()p Fs(rl_command_func_t)
+13 b(*function,)283 780 y(Keymap)h(map)p Fe(\))195 834
 y Ft(Un)o(bind)i(all)e(k)o(eys)h(that)f(execute)i Fi(function)f
-Ft(in)g Fi(map)p Ft(.)1675 686 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 686 V 24 w(un)n(bind)p 415
-686 V 25 w(command)p 682 686 V 24 w(in)p 754 686 V 25
+Ft(in)g Fi(map)p Ft(.)1675 917 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 917 V 24 w(un)n(bind)p 415
+917 V 25 w(command)p 682 917 V 24 w(in)p 754 917 V 25
 w(map)i Fe(\()p Fs(const)14 b(char)h(*command,)f(Keymap)283
-741 y(map)p Fe(\))195 796 y Ft(Un)o(bind)i(all)e(k)o(eys)h(that)f(are)h
-(b)q(ound)h(to)f Fi(command)i Ft(in)e Fi(map)p Ft(.)1675
-884 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 884
-V 24 w(bind)p 353 884 V 25 w(k)n(eyseq)k Fe(\()p Fs(const)14
-b(char)h(*keyseq,)f(rl_command_func_t)283 938 y(*function)p
-Fe(\))195 993 y Ft(Bind)22 b(the)f(k)o(ey)h(sequence)h(represen)o(ted)f
-(b)o(y)f(the)h(string)e Fi(k)o(eyseq)j Ft(to)e(the)g(function)g
-Fi(function)p Ft(,)195 1048 y(b)q(eginning)14 b(in)g(the)g(curren)o(t)g
-(k)o(eymap.)20 b(This)13 b(mak)o(es)h(new)g(k)o(eymaps)g(as)g
-(necessary)l(.)20 b(The)14 b(return)195 1103 y(v)m(alue)h(is)g
-(non-zero)h(if)e Fi(k)o(eyseq)j Ft(is)d(in)o(v)m(alid.)1675
-1191 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
-1191 V 24 w(bind)p 353 1191 V 25 w(k)n(eyseq)p 541 1191
-V 26 w(in)p 615 1191 V 25 w(map)i Fe(\()p Fs(const)15
-b(char)f(*keyseq,)283 1245 y(rl_command_func_t)e(*function,)i(Keymap)h
-(map)p Fe(\))195 1300 y Ft(Bind)e(the)f(k)o(ey)h(sequence)h(represen)o
-(ted)f(b)o(y)f(the)h(string)e Fi(k)o(eyseq)j Ft(to)e(the)g(function)h
-Fi(function)p Ft(.)18 b(This)195 1355 y(mak)o(es)c(new)h(k)o(eymaps)f
+971 y(map)p Fe(\))195 1026 y Ft(Un)o(bind)i(all)e(k)o(eys)h(that)f(are)
+h(b)q(ound)h(to)f Fi(command)i Ft(in)e Fi(map)p Ft(.)1675
+1108 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
+1108 V 24 w(bind)p 353 1108 V 25 w(k)n(eyseq)k Fe(\()p
+Fs(const)14 b(char)h(*keyseq,)f(rl_command_func_t)283
+1163 y(*function)p Fe(\))195 1218 y Ft(Bind)22 b(the)f(k)o(ey)h
+(sequence)h(represen)o(ted)f(b)o(y)f(the)h(string)e Fi(k)o(eyseq)j
+Ft(to)e(the)g(function)g Fi(function)p Ft(,)195 1273
+y(b)q(eginning)14 b(in)g(the)g(curren)o(t)g(k)o(eymap.)20
+b(This)13 b(mak)o(es)h(new)g(k)o(eymaps)g(as)g(necessary)l(.)20
+b(The)14 b(return)195 1328 y(v)m(alue)h(is)g(non-zero)h(if)e
+Fi(k)o(eyseq)j Ft(is)d(in)o(v)m(alid.)1675 1410 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 1410 V 24 w(bind)p 353 1410
+V 25 w(k)n(eyseq)p 541 1410 V 26 w(in)p 615 1410 V 25
+w(map)i Fe(\()p Fs(const)15 b(char)f(*keyseq,)283 1465
+y(rl_command_func_t)e(*function,)i(Keymap)h(map)p Fe(\))195
+1519 y Ft(Bind)e(the)f(k)o(ey)h(sequence)h(represen)o(ted)f(b)o(y)f
+(the)h(string)e Fi(k)o(eyseq)j Ft(to)e(the)g(function)h
+Fi(function)p Ft(.)18 b(This)195 1574 y(mak)o(es)c(new)h(k)o(eymaps)f
 (as)g(necessary)l(.)20 b(Initial)14 b(bindings)g(are)h(p)q(erformed)f
-(in)h Fi(map)p Ft(.)k(The)c(return)195 1410 y(v)m(alue)g(is)g(non-zero)
-h(if)e Fi(k)o(eyseq)j Ft(is)d(in)o(v)m(alid.)1675 1497
-y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 1497
-V 24 w(set)p 312 1497 V 26 w(k)n(ey)j Fe(\()p Fs(const)15
+(in)h Fi(map)p Ft(.)k(The)c(return)195 1629 y(v)m(alue)g(is)g(non-zero)
+h(if)e Fi(k)o(eyseq)j Ft(is)d(in)o(v)m(alid.)1675 1711
+y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 1711
+V 24 w(set)p 312 1711 V 26 w(k)n(ey)j Fe(\()p Fs(const)15
 b(char)f(*keyseq,)g(rl_command_func_t)f(*function,)283
-1552 y(Keymap)h(map)p Fe(\))195 1607 y Ft(Equiv)m(alen)o(t)h(to)f
-Fs(rl_bind_keyseq_in_map)p Ft(.)1675 1695 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 1695 V 24 w(bind)p 353 1695
-V 25 w(k)n(eyseq)p 541 1695 V 26 w(if)p 601 1695 V 25
+1766 y(Keymap)h(map)p Fe(\))195 1821 y Ft(Equiv)m(alen)o(t)h(to)f
+Fs(rl_bind_keyseq_in_map)p Ft(.)1675 1903 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 1903 V 24 w(bind)p 353 1903
+V 25 w(k)n(eyseq)p 541 1903 V 26 w(if)p 601 1903 V 25
 w(un)n(b)r(ound)h Fe(\()p Fs(const)14 b(char)h(*keyseq,)283
-1749 y(rl_command_func_t)d(*function)p Fe(\))195 1804
+1958 y(rl_command_func_t)d(*function)p Fe(\))195 2012
 y Ft(Binds)18 b Fi(k)o(eyseq)h Ft(to)e Fi(function)g
 Ft(if)h(it)f(is)g(not)g(already)g(b)q(ound)i(in)f(the)f(curren)o(tly)h
-(activ)o(e)f(k)o(eymap.)195 1859 y(Returns)f(non-zero)f(in)g(the)h
+(activ)o(e)f(k)o(eymap.)195 2067 y(Returns)f(non-zero)f(in)g(the)h
 (case)f(of)f(an)i(in)o(v)m(alid)e Fi(k)o(eyseq)i Ft(or)f(if)g
-Fi(k)o(eyseq)h Ft(is)f(already)f(b)q(ound.)1675 1947
-y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 1947
-V 24 w(bind)p 353 1947 V 25 w(k)n(eyseq)p 541 1947 V
-26 w(if)p 601 1947 V 25 w(un)n(b)r(ound)p 847 1947 V
-24 w(in)p 919 1947 V 25 w(map)i Fe(\()p Fs(const)14 b(char)h(*keyseq,)
-283 2001 y(rl_command_func_t)d(*function,)i(Keymap)h(map)p
-Fe(\))195 2056 y Ft(Binds)h Fi(k)o(eyseq)h Ft(to)f Fi(function)f
+Fi(k)o(eyseq)h Ft(is)f(already)f(b)q(ound.)1675 2149
+y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217 2149
+V 24 w(bind)p 353 2149 V 25 w(k)n(eyseq)p 541 2149 V
+26 w(if)p 601 2149 V 25 w(un)n(b)r(ound)p 847 2149 V
+24 w(in)p 919 2149 V 25 w(map)i Fe(\()p Fs(const)14 b(char)h(*keyseq,)
+283 2204 y(rl_command_func_t)d(*function,)i(Keymap)h(map)p
+Fe(\))195 2259 y Ft(Binds)h Fi(k)o(eyseq)h Ft(to)f Fi(function)f
 Ft(if)h(it)f(is)h(not)f(already)g(b)q(ound)i(in)f Fi(map)p
-Ft(.)22 b(Returns)17 b(non-zero)f(in)g(the)195 2111 y(case)f(of)g(an)g
+Ft(.)22 b(Returns)17 b(non-zero)f(in)g(the)195 2314 y(case)f(of)g(an)g
 (in)o(v)m(alid)g Fi(k)o(eyseq)h Ft(or)f(if)f Fi(k)o(eyseq)i
-Ft(is)f(already)g(b)q(ound.)1675 2199 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 2199 V 24 w(generic)p 419 2199
+Ft(is)f(already)g(b)q(ound.)1675 2396 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 2396 V 24 w(generic)p 419 2396
 V 25 w(bind)j Fe(\()p Fs(int)14 b(type,)g(const)h(char)f(*keyseq,)h
-(char)f(*data,)283 2254 y(Keymap)g(map)p Fe(\))195 2308
+(char)f(*data,)283 2451 y(Keymap)g(map)p Fe(\))195 2506
 y Ft(Bind)g(the)f(k)o(ey)h(sequence)h(represen)o(ted)e(b)o(y)h(the)g
 (string)e Fi(k)o(eyseq)j Ft(to)d(the)i(arbitrary)e(p)q(oin)o(ter)h
-Fi(data)p Ft(.)195 2363 y Fi(t)o(yp)q(e)k Ft(sa)o(ys)c(what)h(kind)g
+Fi(data)p Ft(.)195 2560 y Fi(t)o(yp)q(e)k Ft(sa)o(ys)c(what)h(kind)g
 (of)g(data)g(is)f(p)q(oin)o(ted)i(to)e(b)o(y)h Fi(data)p
 Ft(;)g(this)g(can)g(b)q(e)h(a)f(function)g(\()p Fs(ISFUNC)p
-Ft(\),)e(a)195 2418 y(macro)i(\()p Fs(ISMACR)p Ft(\),)f(or)h(a)h(k)o
+Ft(\),)e(a)195 2615 y(macro)i(\()p Fs(ISMACR)p Ft(\),)f(or)h(a)h(k)o
 (eymap)f(\()p Fs(ISKMAP)p Ft(\).)k(This)d(mak)o(es)f(new)h(k)o(eymaps)f
-(as)h(necessary)l(.)20 b(The)195 2473 y(initial)13 b(k)o(eymap)i(in)g
-(whic)o(h)g(to)g(do)g(bindings)g(is)g Fi(map)p Ft(.)1675
-2560 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
-2560 V 24 w(parse)p 374 2560 V 25 w(and)p 491 2560 V
-24 w(bind)i Fe(\()p Fs(char)15 b(*line)p Fe(\))195 2615
-y Ft(P)o(arse)f Fi(line)j Ft(as)d(if)g(it)g(had)h(b)q(een)h(read)f
-(from)f(the)g Fs(inputrc)g Ft(\014le)h(and)g(p)q(erform)f(an)o(y)h(k)o
-(ey)f(bindings)195 2670 y(and)h(v)m(ariable)g(assignmen)o(ts)f(found)i
-(\(see)f(Section)g(1.3)f([Readline)h(Init)g(File],)f(page)h(4\).)p
+(as)h(necessary)l(.)20 b(The)195 2670 y(initial)13 b(k)o(eymap)i(in)g
+(whic)o(h)g(to)g(do)g(bindings)g(is)g Fi(map)p Ft(.)p
 eop end
 %%Page: 31 35
 TeXDict begin 31 34 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)14
 b(with)g(GNU)h(Readline)842 b(31)1675 149 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(read)p 351
-149 V 25 w(init)p 462 149 V 25 w(\014le)j Fe(\()p Fs(const)14
-b(char)h(*filename)p Fe(\))195 204 y Ft(Read)h(k)o(eybindings)g(and)g
+b Fg(int)20 b Ff(rl)p 217 149 18 3 v 24 w(parse)p 374
+149 V 25 w(and)p 491 149 V 24 w(bind)i Fe(\()p Fs(char)15
+b(*line)p Fe(\))195 204 y Ft(P)o(arse)f Fi(line)j Ft(as)d(if)g(it)g
+(had)h(b)q(een)h(read)f(from)f(the)g Fs(inputrc)g Ft(\014le)h(and)g(p)q
+(erform)f(an)o(y)h(k)o(ey)f(bindings)195 259 y(and)h(v)m(ariable)g
+(assignmen)o(ts)f(found)i(\(see)f(Section)g(1.3)f([Readline)h(Init)g
+(File],)f(page)h(4\).)1675 354 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 354 V 24 w(read)p 351 354 V
+25 w(init)p 462 354 V 25 w(\014le)j Fe(\()p Fs(const)14
+b(char)h(*filename)p Fe(\))195 409 y Ft(Read)h(k)o(eybindings)g(and)g
 (v)m(ariable)f(assignmen)o(ts)g(from)g Fi(\014lename)j
-Ft(\(see)e(Section)f(1.3)g([Readline)195 259 y(Init)g(File],)f(page)h
-(4\).)75 396 y Fh(2.4.4)30 b(Asso)r(ciating)20 b(F)-5
-b(unction)20 b(Names)h(and)f(Bindings)137 530 y Ft(These)11
+Ft(\(see)e(Section)f(1.3)g([Readline)195 464 y(Init)g(File],)f(page)h
+(4\).)75 579 y Fh(2.4.4)30 b(Asso)r(ciating)20 b(F)-5
+b(unction)20 b(Names)h(and)f(Bindings)137 703 y Ft(These)11
 b(functions)g(allo)o(w)d(y)o(ou)j(to)f(\014nd)h(out)f(what)g(k)o(eys)h
 (in)o(v)o(ok)o(e)e(named)i(functions)g(and)f(the)h(functions)75
-585 y(in)o(v)o(ok)o(ed)i(b)o(y)h(a)f(particular)f(k)o(ey)i(sequence.)21
+757 y(in)o(v)o(ok)o(ed)i(b)o(y)h(a)f(particular)f(k)o(ey)i(sequence.)21
 b(Y)l(ou)14 b(ma)o(y)f(also)f(asso)q(ciate)h(a)h(new)g(function)f(name)
-h(with)f(an)75 640 y(arbitrary)h(function.)1675 757 y([F)l(unction])
--1801 b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 757
-V 25 w(named)p 819 757 V 24 w(function)j Fe(\()p Fs(const)14
-b(char)h(*name)p Fe(\))195 811 y Ft(Return)h(the)f(function)g(with)g
-(name)g Fi(name)p Ft(.)1675 928 y([F)l(unction])-1801
-b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 928 V 25
-w(function)p 859 928 V 24 w(of)p 930 928 V 24 w(k)n(eyseq)24
-b Fe(\()p Fs(const)15 b(char)f(*keyseq,)283 983 y(Keymap)g(map,)g(int)h
-(*type)p Fe(\))195 1038 y Ft(Return)i(the)f(function)g(in)o(v)o(ok)o
+h(with)f(an)75 812 y(arbitrary)h(function.)1675 907 y([F)l(unction])
+-1801 b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 907
+V 25 w(named)p 819 907 V 24 w(function)j Fe(\()p Fs(const)14
+b(char)h(*name)p Fe(\))195 962 y Ft(Return)h(the)f(function)g(with)g
+(name)g Fi(name)p Ft(.)1675 1057 y([F)l(unction])-1801
+b Fg(rl_command_func_t)22 b(*)d Ff(rl)p 628 1057 V 25
+w(function)p 859 1057 V 24 w(of)p 930 1057 V 24 w(k)n(eyseq)24
+b Fe(\()p Fs(const)15 b(char)f(*keyseq,)283 1112 y(Keymap)g(map,)g(int)
+h(*type)p Fe(\))195 1167 y Ft(Return)i(the)f(function)g(in)o(v)o(ok)o
 (ed)g(b)o(y)g Fi(k)o(eyseq)h Ft(in)f(k)o(eymap)g Fi(map)p
 Ft(.)23 b(If)17 b Fi(map)g Ft(is)f Fs(NULL)p Ft(,)g(the)g(curren)o(t)
-195 1092 y(k)o(eymap)i(is)g(used.)31 b(If)18 b Fi(t)o(yp)q(e)j
+195 1222 y(k)o(eymap)i(is)g(used.)31 b(If)18 b Fi(t)o(yp)q(e)j
 Ft(is)d(not)h Fs(NULL)p Ft(,)f(the)g(t)o(yp)q(e)h(of)f(the)h(ob)s(ject)
-f(is)g(returned)h(in)f(the)g Fs(int)195 1147 y Ft(v)m(ariable)d(it)f(p)
+f(is)g(returned)h(in)f(the)g Fs(int)195 1277 y Ft(v)m(ariable)d(it)f(p)
 q(oin)o(ts)h(to)f(\(one)h(of)g Fs(ISFUNC)p Ft(,)f Fs(ISKMAP)p
-Ft(,)g(or)h Fs(ISMACR)p Ft(\).)1675 1264 y([F)l(unction])-1801
-b Fg(char)20 b(**)f Ff(rl)p 314 1264 V 25 w(in)n(v)n(oking)p
-549 1264 V 25 w(k)n(eyseqs)24 b Fe(\()p Fs(rl_command_func_t)12
-b(*function)p Fe(\))195 1319 y Ft(Return)k(an)g(arra)o(y)e(of)h
+Ft(,)g(or)h Fs(ISMACR)p Ft(\).)1675 1372 y([F)l(unction])-1801
+b Fg(char)20 b(**)f Ff(rl)p 314 1372 V 25 w(in)n(v)n(oking)p
+549 1372 V 25 w(k)n(eyseqs)24 b Fe(\()p Fs(rl_command_func_t)12
+b(*function)p Fe(\))195 1427 y Ft(Return)k(an)g(arra)o(y)e(of)h
 (strings)g(represen)o(ting)g(the)h(k)o(ey)f(sequences)i(used)f(to)f(in)
-o(v)o(ok)o(e)g Fi(function)g Ft(in)195 1374 y(the)g(curren)o(t)g(k)o
-(eymap.)1675 1490 y([F)l(unction])-1801 b Fg(char)20
-b(**)f Ff(rl)p 314 1490 V 25 w(in)n(v)n(oking)p 549 1490
-V 25 w(k)n(eyseqs)p 760 1490 V 26 w(in)p 834 1490 V 25
-w(map)j Fe(\()p Fs(rl_command_func_t)283 1545 y(*function,)13
-b(Keymap)i(map)p Fe(\))195 1600 y Ft(Return)h(an)g(arra)o(y)e(of)h
+o(v)o(ok)o(e)g Fi(function)g Ft(in)195 1481 y(the)g(curren)o(t)g(k)o
+(eymap.)1675 1577 y([F)l(unction])-1801 b Fg(char)20
+b(**)f Ff(rl)p 314 1577 V 25 w(in)n(v)n(oking)p 549 1577
+V 25 w(k)n(eyseqs)p 760 1577 V 26 w(in)p 834 1577 V 25
+w(map)j Fe(\()p Fs(rl_command_func_t)283 1632 y(*function,)13
+b(Keymap)i(map)p Fe(\))195 1686 y Ft(Return)h(an)g(arra)o(y)e(of)h
 (strings)g(represen)o(ting)g(the)h(k)o(ey)f(sequences)i(used)f(to)f(in)
-o(v)o(ok)o(e)g Fi(function)g Ft(in)195 1655 y(the)g(k)o(eymap)g
-Fi(map)p Ft(.)1675 1772 y([F)l(unction])-1801 b Fg(void)20
-b Ff(rl)p 243 1772 V 24 w(function)p 473 1772 V 25 w(dump)r(er)h
-Fe(\()p Fs(int)15 b(readable)p Fe(\))195 1826 y Ft(Prin)o(t)f(the)g
+o(v)o(ok)o(e)g Fi(function)g Ft(in)195 1741 y(the)g(k)o(eymap)g
+Fi(map)p Ft(.)1675 1836 y([F)l(unction])-1801 b Fg(void)20
+b Ff(rl)p 243 1836 V 24 w(function)p 473 1836 V 25 w(dump)r(er)h
+Fe(\()p Fs(int)15 b(readable)p Fe(\))195 1891 y Ft(Prin)o(t)f(the)g
 (readline)h(function)f(names)h(and)f(the)h(k)o(ey)g(sequences)g(curren)
-o(tly)f(b)q(ound)i(to)e(them)h(to)195 1881 y Fs(rl_outstream)p
+o(tly)f(b)q(ound)i(to)e(them)h(to)195 1946 y Fs(rl_outstream)p
 Ft(.)j(If)c Fi(readable)i Ft(is)d(non-zero,)h(the)g(list)e(is)i
 (formatted)e(in)i(suc)o(h)g(a)f(w)o(a)o(y)g(that)g(it)g(can)195
-1936 y(b)q(e)j(made)f(part)g(of)f(an)i Fs(inputrc)e Ft(\014le)h(and)g
-(re-read.)1675 2053 y([F)l(unction])-1801 b Fg(void)20
-b Ff(rl)p 243 2053 V 24 w(list)p 344 2053 V 25 w(funmap)p
-559 2053 V 24 w(names)i Fe(\()p Fs(void)p Fe(\))195 2108
+2001 y(b)q(e)j(made)f(part)g(of)f(an)i Fs(inputrc)e Ft(\014le)h(and)g
+(re-read.)1675 2096 y([F)l(unction])-1801 b Fg(void)20
+b Ff(rl)p 243 2096 V 24 w(list)p 344 2096 V 25 w(funmap)p
+559 2096 V 24 w(names)i Fe(\()p Fs(void)p Fe(\))195 2151
 y Ft(Prin)o(t)14 b(the)h(names)h(of)e(all)h(bindable)g(Readline)g
-(functions)g(to)g Fs(rl_outstream)p Ft(.)1675 2224 y([F)l(unction])
--1801 b Fg(const)20 b(char)g(**)f Ff(rl)p 464 2224 V
-25 w(funmap)p 679 2224 V 23 w(names)j Fe(\()p Fs(void)p
-Fe(\))195 2279 y Ft(Return)14 b(a)e(NULL)i(terminated)f(arra)o(y)e(of)i
+(functions)g(to)g Fs(rl_outstream)p Ft(.)1675 2246 y([F)l(unction])
+-1801 b Fg(const)20 b(char)g(**)f Ff(rl)p 464 2246 V
+25 w(funmap)p 679 2246 V 23 w(names)j Fe(\()p Fs(void)p
+Fe(\))195 2301 y Ft(Return)14 b(a)e(NULL)i(terminated)f(arra)o(y)e(of)i
 (kno)o(wn)g(function)f(names.)20 b(The)13 b(arra)o(y)f(is)g(sorted.)19
-b(The)195 2334 y(arra)o(y)11 b(itself)h(is)g(allo)q(cated,)g(but)h(not)
+b(The)195 2356 y(arra)o(y)11 b(itself)h(is)g(allo)q(cated,)g(but)h(not)
 f(the)h(strings)e(inside.)19 b(Y)l(ou)13 b(should)g Fs(free\(\))e
-Ft(the)i(arra)o(y)e(when)195 2389 y(y)o(ou)k(are)g(done,)g(but)g(not)g
+Ft(the)i(arra)o(y)e(when)195 2410 y(y)o(ou)k(are)g(done,)g(but)g(not)g
 (the)g(p)q(oin)o(ters.)1675 2506 y([F)l(unction])-1801
 b Fg(int)20 b Ff(rl)p 217 2506 V 24 w(add)p 333 2506
 V 25 w(funmap)p 548 2506 V 24 w(en)n(try)j Fe(\()p Fs(const)14
@@ -6905,150 +6912,158 @@ b Fg(void)20 b Ff(rl)p 243 149 18 3 v 24 w(reset)p 388
 Fe(\))195 204 y Ft(This)14 b(will)f(reinitialize)f(the)i(terminal)f
 (and)i(reinstall)e(an)o(y)g(Readline)i(signal)e(handlers,)h(dep)q(end-)
 195 259 y(ing)h(on)g(the)g(v)m(alues)h(of)e Fs(rl_catch_signals)f
-Ft(and)j Fs(rl_catch_sigwinch)p Ft(.)137 358 y(If)k(an)g(application)e
+Ft(and)j Fs(rl_catch_sigwinch)p Ft(.)137 351 y(If)k(an)g(application)e
 (do)q(es)i(not)g(wish)f(Readline)h(to)f(catc)o(h)g Fs(SIGWINCH)p
-Ft(,)h(it)f(ma)o(y)g(call)f Fs(rl_resize_)75 413 y(terminal\(\))12
+Ft(,)h(it)f(ma)o(y)g(call)f Fs(rl_resize_)75 406 y(terminal\(\))12
 b Ft(or)h Fs(rl_set_screen_size\(\))e Ft(to)i(force)g(Readline)h(to)f
-(up)q(date)h(its)f(idea)g(of)h(the)f(terminal)75 468
+(up)q(date)h(its)f(idea)g(of)h(the)f(terminal)75 461
 y(size)i(when)h(a)f Fs(SIGWINCH)f Ft(is)g(receiv)o(ed.)1675
-567 y([F)l(unction])-1801 b Fg(void)20 b Ff(rl)p 243
-567 V 24 w(resize)p 407 567 V 26 w(terminal)i Fe(\()p
-Fs(void)p Fe(\))195 621 y Ft(Up)q(date)16 b(Readline's)f(in)o(ternal)f
+553 y([F)l(unction])-1801 b Fg(void)20 b Ff(rl)p 243
+553 V 24 w(resize)p 407 553 V 26 w(terminal)i Fe(\()p
+Fs(void)p Fe(\))195 608 y Ft(Up)q(date)16 b(Readline's)f(in)o(ternal)f
 (screen)h(size)h(b)o(y)f(reading)f(v)m(alues)i(from)e(the)i(k)o(ernel.)
-1675 720 y([F)l(unction])-1801 b Fg(void)20 b Ff(rl)p
-243 720 V 24 w(set)p 338 720 V 26 w(screen)p 520 720
+1675 700 y([F)l(unction])-1801 b Fg(void)20 b Ff(rl)p
+243 700 V 24 w(set)p 338 700 V 26 w(screen)p 520 700
 V 25 w(size)j Fe(\()p Fs(int)14 b(rows,)h(int)g(cols)p
-Fe(\))195 775 y Ft(Set)g(Readline's)g(idea)g(of)g(the)g(terminal)f
-(size)h(to)g Fi(ro)o(ws)h Ft(ro)o(ws)e(and)i Fi(cols)g
-Ft(columns.)137 874 y(If)h(an)g(application)e(do)q(es)i(not)f(w)o(an)o
-(t)g(to)g(install)f(a)i Fs(SIGWINCH)e Ft(handler,)i(but)g(is)f(still)f
-(in)o(terested)h(in)75 929 y(the)f(screen)h(dimensions,)e(Readline's)i
-(idea)e(of)h(the)h(screen)f(size)g(ma)o(y)g(b)q(e)h(queried.)1675
-1028 y([F)l(unction])-1801 b Fg(void)20 b Ff(rl)p 243
-1028 V 24 w(get)p 344 1028 V 26 w(screen)p 526 1028 V
-25 w(size)j Fe(\()p Fs(int)14 b(*rows,)h(int)f(*cols)p
-Fe(\))195 1083 y Ft(Return)i(Readline's)f(idea)f(of)h(the)g(terminal's)
+Fe(\))195 755 y Ft(Set)f(Readline's)g(idea)g(of)g(the)g(terminal)f
+(size)h(to)f Fi(ro)o(ws)i Ft(ro)o(ws)e(and)h Fi(cols)i
+Ft(columns.)j(If)14 b(either)g Fi(ro)o(ws)195 810 y Ft(or)j
+Fi(columns)i Ft(is)e(less)h(than)f(or)g(equal)h(to)e(0,)i(Readline's)f
+(idea)h(of)f(that)g(terminal)f(dimension)h(is)195 864
+y(unc)o(hanged.)137 957 y(If)g(an)g(application)e(do)q(es)i(not)f(w)o
+(an)o(t)g(to)g(install)f(a)i Fs(SIGWINCH)e Ft(handler,)i(but)g(is)f
+(still)f(in)o(terested)h(in)75 1011 y(the)f(screen)h(dimensions,)e
+(Readline's)i(idea)e(of)h(the)h(screen)f(size)g(ma)o(y)g(b)q(e)h
+(queried.)1675 1104 y([F)l(unction])-1801 b Fg(void)20
+b Ff(rl)p 243 1104 V 24 w(get)p 344 1104 V 26 w(screen)p
+526 1104 V 25 w(size)j Fe(\()p Fs(int)14 b(*rows,)h(int)f(*cols)p
+Fe(\))195 1158 y Ft(Return)i(Readline's)f(idea)f(of)h(the)g(terminal's)
 e(size)i(in)g(the)g(v)m(ariables)g(p)q(oin)o(ted)g(to)f(b)o(y)h(the)g
-(argu-)195 1138 y(men)o(ts.)137 1237 y(The)h(follo)o(wing)d(functions)i
-(install)e(and)j(remo)o(v)o(e)e(Readline's)h(signal)f(handlers.)1675
-1336 y([F)l(unction])-1801 b Fg(int)20 b Ff(rl)p 217
-1336 V 24 w(set)p 312 1336 V 26 w(signals)h Fe(\()p Fs(void)p
-Fe(\))195 1390 y Ft(Install)c(Readline's)g(signal)g(handler)g(for)g
-Fs(SIGINT)p Ft(,)g Fs(SIGQUIT)p Ft(,)g Fs(SIGTERM)p Ft(,)g
-Fs(SIGALRM)p Ft(,)f Fs(SIGTSTP)p Ft(,)195 1445 y Fs(SIGTTIN)p
-Ft(,)11 b Fs(SIGTTOU)p Ft(,)g(and)h Fs(SIGWINCH)p Ft(,)e(dep)q(ending)j
-(on)f(the)f(v)m(alues)h(of)f Fs(rl_catch_signals)f Ft(and)195
-1500 y Fs(rl_catch_sigwinch)p Ft(.)1675 1599 y([F)l(unction])-1801
-b Fg(int)20 b Ff(rl)p 217 1599 V 24 w(clear)p 360 1599
-V 26 w(signals)h Fe(\()p Fs(void)p Fe(\))195 1654 y Ft(Remo)o(v)o(e)15
+(argu-)195 1213 y(men)o(ts.)1675 1306 y([F)l(unction])-1801
+b Fg(void)20 b Ff(rl)p 243 1306 V 24 w(reset)p 388 1306
+V 26 w(screen)p 570 1306 V 25 w(size)j Fe(\()p Fs(void)p
+Fe(\))195 1360 y Ft(Cause)15 b(Readline)h(to)e(reobtain)h(the)g(screen)
+h(size)f(and)g(recalculate)f(its)h(dimensions.)137 1453
+y(The)h(follo)o(wing)d(functions)i(install)e(and)j(remo)o(v)o(e)e
+(Readline's)h(signal)f(handlers.)1675 1545 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 1545 V 24 w(set)p 312 1545
+V 26 w(signals)h Fe(\()p Fs(void)p Fe(\))195 1600 y Ft(Install)c
+(Readline's)g(signal)g(handler)g(for)g Fs(SIGINT)p Ft(,)g
+Fs(SIGQUIT)p Ft(,)g Fs(SIGTERM)p Ft(,)g Fs(SIGALRM)p
+Ft(,)f Fs(SIGTSTP)p Ft(,)195 1654 y Fs(SIGTTIN)p Ft(,)11
+b Fs(SIGTTOU)p Ft(,)g(and)h Fs(SIGWINCH)p Ft(,)e(dep)q(ending)j(on)f
+(the)f(v)m(alues)h(of)f Fs(rl_catch_signals)f Ft(and)195
+1709 y Fs(rl_catch_sigwinch)p Ft(.)1675 1801 y([F)l(unction])-1801
+b Fg(int)20 b Ff(rl)p 217 1801 V 24 w(clear)p 360 1801
+V 26 w(signals)h Fe(\()p Fs(void)p Fe(\))195 1856 y Ft(Remo)o(v)o(e)15
 b(all)f(of)h(the)g(Readline)h(signal)e(handlers)h(installed)f(b)o(y)h
-Fs(rl_set_signals\(\))p Ft(.)75 1791 y Fr(2.6)33 b(Custom)21
-b(Completers)137 1917 y Ft(T)o(ypically)l(,)16 b(a)g(program)f(that)h
+Fs(rl_set_signals\(\))p Ft(.)75 1985 y Fr(2.6)33 b(Custom)21
+b(Completers)137 2107 y Ft(T)o(ypically)l(,)16 b(a)g(program)f(that)h
 (reads)h(commands)f(from)g(the)h(user)f(has)h(a)f(w)o(a)o(y)g(of)g
-(disam)o(biguating)75 1971 y(commands)i(and)f(data.)27
+(disam)o(biguating)75 2162 y(commands)i(and)f(data.)27
 b(If)18 b(y)o(our)f(program)g(is)g(one)h(of)f(these,)i(then)f(it)f(can)
-g(pro)o(vide)h(completion)f(for)75 2026 y(commands,)d(data,)g(or)g(b)q
+g(pro)o(vide)h(completion)f(for)75 2217 y(commands,)d(data,)g(or)g(b)q
 (oth.)20 b(The)15 b(follo)o(wing)d(sections)i(describ)q(e)h(ho)o(w)f(y)
-o(our)g(program)g(and)h(Readline)75 2081 y(co)q(op)q(erate)g(to)g(pro)o
-(vide)f(this)h(service.)75 2200 y Fh(2.6.1)30 b(Ho)n(w)21
-b(Completing)f(W)-5 b(orks)137 2325 y Ft(In)18 b(order)f(to)f(complete)
+o(our)g(program)g(and)h(Readline)75 2271 y(co)q(op)q(erate)g(to)g(pro)o
+(vide)f(this)h(service.)75 2384 y Fh(2.6.1)30 b(Ho)n(w)21
+b(Completing)f(W)-5 b(orks)137 2506 y Ft(In)18 b(order)f(to)f(complete)
 h(some)g(text,)g(the)g(full)g(list)e(of)i(p)q(ossible)g(completions)f
-(m)o(ust)h(b)q(e)h(a)o(v)m(ailable.)75 2380 y(That)e(is,)h(it)f(is)h
+(m)o(ust)h(b)q(e)h(a)o(v)m(ailable.)75 2560 y(That)e(is,)h(it)f(is)h
 (not)g(p)q(ossible)f(to)h(accurately)f(expand)i(a)e(partial)g(w)o(ord)g
-(without)g(kno)o(wing)g(all)g(of)h(the)75 2435 y(p)q(ossible)g(w)o
+(without)g(kno)o(wing)g(all)g(of)h(the)75 2615 y(p)q(ossible)g(w)o
 (ords)g(whic)o(h)g(mak)o(e)g(sense)h(in)g(that)e(con)o(text.)26
 b(The)18 b(Readline)g(library)e(pro)o(vides)h(the)h(user)75
-2490 y(in)o(terface)e(to)g(completion,)g(and)g(t)o(w)o(o)g(of)g(the)h
+2670 y(in)o(terface)e(to)g(completion,)g(and)g(t)o(w)o(o)g(of)g(the)h
 (most)f(common)g(completion)g(functions:)22 b(\014lename)17
-b(and)75 2545 y(username.)i(F)l(or)10 b(completing)g(other)g(t)o(yp)q
-(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f(write)g(y)o(our)g(o)o(wn)h
-(completion)e(function.)75 2599 y(This)15 b(section)g(describ)q(es)g
-(exactly)g(what)g(suc)o(h)g(functions)g(m)o(ust)g(do,)f(and)i(pro)o
-(vides)e(an)i(example.)137 2670 y(There)g(are)f(three)g(ma)s(jor)f
-(functions)h(used)g(to)g(p)q(erform)g(completion:)p eop
-end
+b(and)p eop end
 %%Page: 42 46
 TeXDict begin 42 45 bop 75 -58 a Ft(42)1299 b(GNU)15
-b(Readline)g(Library)100 149 y(1.)29 b(The)22 b(user-in)o(terface)f
-(function)h Fs(rl_complete\(\))p Ft(.)37 b(This)21 b(function)h(is)f
-(called)g(with)g(the)h(same)165 204 y(argumen)o(ts)17
-b(as)g(other)h(bindable)g(Readline)g(functions:)25 b
-Fi(coun)o(t)18 b Ft(and)g Fi(in)o(v)o(oking)p 1555 204
-14 2 v 19 w(k)o(ey)p Ft(.)28 b(It)18 b(isolates)165 259
-y(the)h(w)o(ord)f(to)g(b)q(e)i(completed)e(and)h(calls)f
-Fs(rl_completion_matches\(\))e Ft(to)i(generate)g(a)h(list)e(of)165
-314 y(p)q(ossible)e(completions.)20 b(It)c(then)g(either)f(lists)f(the)
-i(p)q(ossible)f(completions,)g(inserts)g(the)g(p)q(ossible)165
-369 y(completions,)23 b(or)f(actually)g(p)q(erforms)g(the)g
-(completion,)i(dep)q(ending)f(on)g(whic)o(h)f(b)q(eha)o(vior)g(is)165
-423 y(desired.)100 495 y(2.)29 b(The)17 b(in)o(ternal)f(function)g
-Fs(rl_completion_matches\(\))e Ft(uses)j(an)g(application-supplied)f
-Fi(gener-)165 549 y(ator)21 b Ft(function)d(to)g(generate)g(the)h(list)
-e(of)h(p)q(ossible)g(matc)o(hes,)h(and)f(then)h(returns)g(the)f(arra)o
-(y)f(of)165 604 y(these)j(matc)o(hes.)32 b(The)20 b(caller)e(should)i
-(place)f(the)h(address)f(of)h(its)e(generator)h(function)g(in)g
-Fs(rl_)165 659 y(completion_entry_function)p Ft(.)100
-730 y(3.)29 b(The)12 b(generator)e(function)h(is)g(called)g(rep)q
-(eatedly)h(from)f Fs(rl_completion_matches\(\))p Ft(,)d(returning)165
-785 y(a)16 b(string)f(eac)o(h)i(time.)23 b(The)17 b(argumen)o(ts)e(to)h
+b(Readline)g(Library)75 149 y(username.)k(F)l(or)10 b(completing)g
+(other)g(t)o(yp)q(es)h(of)f(text,)h(y)o(ou)g(m)o(ust)f(write)g(y)o(our)
+g(o)o(wn)h(completion)e(function.)75 204 y(This)15 b(section)g(describ)
+q(es)g(exactly)g(what)g(suc)o(h)g(functions)g(m)o(ust)g(do,)f(and)i
+(pro)o(vides)e(an)i(example.)137 268 y(There)g(are)f(three)g(ma)s(jor)f
+(functions)h(used)g(to)g(p)q(erform)g(completion:)100
+331 y(1.)29 b(The)22 b(user-in)o(terface)f(function)h
+Fs(rl_complete\(\))p Ft(.)37 b(This)21 b(function)h(is)f(called)g(with)
+g(the)h(same)165 386 y(argumen)o(ts)17 b(as)g(other)h(bindable)g
+(Readline)g(functions:)25 b Fi(coun)o(t)18 b Ft(and)g
+Fi(in)o(v)o(oking)p 1555 386 14 2 v 19 w(k)o(ey)p Ft(.)28
+b(It)18 b(isolates)165 440 y(the)h(w)o(ord)f(to)g(b)q(e)i(completed)e
+(and)h(calls)f Fs(rl_completion_matches\(\))e Ft(to)i(generate)g(a)h
+(list)e(of)165 495 y(p)q(ossible)e(completions.)20 b(It)c(then)g
+(either)f(lists)f(the)i(p)q(ossible)f(completions,)g(inserts)g(the)g(p)
+q(ossible)165 550 y(completions,)23 b(or)f(actually)g(p)q(erforms)g
+(the)g(completion,)i(dep)q(ending)f(on)g(whic)o(h)f(b)q(eha)o(vior)g
+(is)165 605 y(desired.)100 668 y(2.)29 b(The)17 b(in)o(ternal)f
+(function)g Fs(rl_completion_matches\(\))e Ft(uses)j(an)g
+(application-supplied)f Fi(gener-)165 723 y(ator)21 b
+Ft(function)d(to)g(generate)g(the)h(list)e(of)h(p)q(ossible)g(matc)o
+(hes,)h(and)f(then)h(returns)g(the)f(arra)o(y)f(of)165
+778 y(these)j(matc)o(hes.)32 b(The)20 b(caller)e(should)i(place)f(the)h
+(address)f(of)h(its)e(generator)h(function)g(in)g Fs(rl_)165
+832 y(completion_entry_function)p Ft(.)100 896 y(3.)29
+b(The)12 b(generator)e(function)h(is)g(called)g(rep)q(eatedly)h(from)f
+Fs(rl_completion_matches\(\))p Ft(,)d(returning)165 951
+y(a)16 b(string)f(eac)o(h)i(time.)23 b(The)17 b(argumen)o(ts)e(to)h
 (the)g(generator)g(function)g(are)g Fi(text)h Ft(and)g
-Fi(state)p Ft(.)22 b Fi(text)165 840 y Ft(is)16 b(the)g(partial)e(w)o
+Fi(state)p Ft(.)22 b Fi(text)165 1005 y Ft(is)16 b(the)g(partial)e(w)o
 (ord)h(to)h(b)q(e)h(completed.)22 b Fi(state)c Ft(is)d(zero)h(the)g
-(\014rst)g(time)f(the)h(function)g(is)g(called,)165 895
+(\014rst)g(time)f(the)h(function)g(is)g(called,)165 1060
 y(allo)o(wing)k(the)i(generator)f(to)g(p)q(erform)h(an)o(y)g(necessary)
 g(initializatio)o(n,)f(and)h(a)g(p)q(ositiv)o(e)f(non-)165
-949 y(zero)14 b(in)o(teger)g(for)g(eac)o(h)h(subsequen)o(t)g(call.)k
+1115 y(zero)14 b(in)o(teger)g(for)g(eac)o(h)h(subsequen)o(t)g(call.)k
 (The)c(generator)e(function)i(returns)f Fs(\(char)h(*\)NULL)f
-Ft(to)165 1004 y(inform)k Fs(rl_completion_matches\(\))e
+Ft(to)165 1170 y(inform)k Fs(rl_completion_matches\(\))e
 Ft(that)i(there)h(are)g(no)g(more)g(p)q(ossibilities)e(left.)31
-b(Usually)165 1059 y(the)19 b(generator)g(function)g(computes)h(the)f
+b(Usually)165 1225 y(the)19 b(generator)g(function)g(computes)h(the)f
 (list)f(of)h(p)q(ossible)g(completions)g(when)g Fi(state)j
-Ft(is)c(zero,)165 1114 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)
+Ft(is)c(zero,)165 1279 y(and)13 b(returns)g(them)f(one)h(at)f(a)h(time)
 f(on)h(subsequen)o(t)g(calls.)18 b(Eac)o(h)13 b(string)e(the)i
-(generator)f(function)165 1169 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)
+(generator)f(function)165 1334 y(returns)k(as)f(a)h(matc)o(h)f(m)o(ust)
 h(b)q(e)g(allo)q(cated)f(with)h Fs(malloc\(\))p Ft(;)e(Readline)j
-(frees)f(the)g(strings)e(when)165 1223 y(it)i(has)h(\014nished)h(with)e
+(frees)f(the)g(strings)e(when)165 1389 y(it)i(has)h(\014nished)h(with)e
 (them.)25 b(Suc)o(h)18 b(a)e(generator)g(function)h(is)f(referred)h(to)
-g(as)f(an)h Fi(application-)165 1278 y(sp)q(eci\014c)f(completion)e
-(function)p Ft(.)1675 1386 y([F)l(unction])-1801 b Fg(int)20
-b Ff(rl)p 217 1386 18 3 v 24 w(complete)j Fe(\()p Fs(int)15
-b(ignore,)f(int)h(invoking_key)p Fe(\))195 1441 y Ft(Complete)g(the)g
+g(as)f(an)h Fi(application-)165 1444 y(sp)q(eci\014c)f(completion)e
+(function)p Ft(.)1675 1524 y([F)l(unction])-1801 b Fg(int)20
+b Ff(rl)p 217 1524 18 3 v 24 w(complete)j Fe(\()p Fs(int)15
+b(ignore,)f(int)h(invoking_key)p Fe(\))195 1579 y Ft(Complete)g(the)g
 (w)o(ord)g(at)f(or)h(b)q(efore)h(p)q(oin)o(t.)k(Y)l(ou)15
 b(ha)o(v)o(e)g(supplied)h(the)f(function)h(that)e(do)q(es)i(the)195
-1496 y(initial)j(simple)h(matc)o(hing)f(selection)h(algorithm)f(\(see)h
-Fs(rl_completion_matches\(\))p Ft(\).)33 b(The)195 1551
+1634 y(initial)j(simple)h(matc)o(hing)f(selection)h(algorithm)f(\(see)h
+Fs(rl_completion_matches\(\))p Ft(\).)33 b(The)195 1688
 y(default)15 b(is)f(to)h(do)g(\014lename)g(completion.)1685
-1659 y([V)l(ariable])-1801 b Fg(rl_compentry_func_t)22
-b(*)d Ff(rl)p 680 1659 V 25 w(completion)p 980 1659 V
-25 w(en)n(try)p 1137 1659 V 25 w(function)195 1714 y
+1769 y([V)l(ariable])-1801 b Fg(rl_compentry_func_t)22
+b(*)d Ff(rl)p 680 1769 V 25 w(completion)p 980 1769 V
+25 w(en)n(try)p 1137 1769 V 25 w(function)195 1823 y
 Ft(This)h(is)f(a)h(p)q(oin)o(ter)f(to)g(the)h(generator)g(function)f
 (for)h Fs(rl_completion_matches\(\))p Ft(.)31 b(If)20
-b(the)195 1769 y(v)m(alue)12 b(of)g Fs(rl_completion_entry_fun)o(ction)
+b(the)195 1878 y(v)m(alue)12 b(of)g Fs(rl_completion_entry_fun)o(ction)
 d Ft(is)i Fs(NULL)g Ft(then)h(the)g(default)g(\014lename)g(generator)
-195 1823 y(function,)24 b Fs(rl_filename_completion_f)o(unction\()o(\))
+195 1933 y(function,)24 b Fs(rl_filename_completion_f)o(unction\()o(\))
 p Ft(,)d(is)h(used.)42 b(An)23 b Fi(application-sp)q(eci\014c)195
-1878 y(completion)10 b(function)g Ft(is)g(a)g(function)h(whose)f
+1988 y(completion)10 b(function)g Ft(is)g(a)g(function)h(whose)f
 (address)h(is)f(assigned)g(to)g Fs(rl_completion_entry_)195
-1933 y(function)k Ft(and)h(whose)h(return)f(v)m(alues)g(are)g(used)h
-(to)e(generate)h(p)q(ossible)g(completions.)75 2061 y
-Fh(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137 2191
+2043 y(function)k Ft(and)h(whose)h(return)f(v)m(alues)g(are)g(used)h
+(to)e(generate)h(p)q(ossible)g(completions.)75 2143 y
+Fh(2.6.2)30 b(Completion)20 b(F)-5 b(unctions)137 2261
 y Ft(Here)16 b(is)e(the)i(complete)f(list)f(of)g(callable)h(completion)
-f(functions)h(presen)o(t)g(in)g(Readline.)1675 2299 y([F)l(unction])
--1801 b Fg(int)20 b Ff(rl)p 217 2299 V 24 w(complete)p
-465 2299 V 26 w(in)n(ternal)i Fe(\()p Fs(int)15 b(what_to_do)p
-Fe(\))195 2354 y Ft(Complete)j(the)g(w)o(ord)g(at)f(or)h(b)q(efore)h(p)
-q(oin)o(t.)28 b Fi(what)p 1104 2354 14 2 v 20 w(to)p
-1165 2354 V 19 w(do)21 b Ft(sa)o(ys)c(what)h(to)g(do)g(with)g(the)g
-(com-)195 2409 y(pletion.)i(A)c(v)m(alue)g(of)f(`)p Fs(?)p
+f(functions)h(presen)o(t)g(in)g(Readline.)1675 2341 y([F)l(unction])
+-1801 b Fg(int)20 b Ff(rl)p 217 2341 V 24 w(complete)p
+465 2341 V 26 w(in)n(ternal)i Fe(\()p Fs(int)15 b(what_to_do)p
+Fe(\))195 2396 y Ft(Complete)j(the)g(w)o(ord)g(at)f(or)h(b)q(efore)h(p)
+q(oin)o(t.)28 b Fi(what)p 1104 2396 14 2 v 20 w(to)p
+1165 2396 V 19 w(do)21 b Ft(sa)o(ys)c(what)h(to)g(do)g(with)g(the)g
+(com-)195 2451 y(pletion.)i(A)c(v)m(alue)g(of)f(`)p Fs(?)p
 Ft(')g(means)g(list)g(the)g(p)q(ossible)h(completions.)k(`)p
-Fs(TAB)p Ft(')14 b(means)i(do)f(standard)195 2464 y(completion.)20
+Fs(TAB)p Ft(')14 b(means)i(do)f(standard)195 2506 y(completion.)20
 b(`)p Fs(*)p Ft(')15 b(means)g(insert)g(all)g(of)g(the)h(p)q(ossible)f
 (completions.)20 b(`)p Fs(!)p Ft(')15 b(means)g(to)g(displa)o(y)g(all)
-195 2519 y(of)i(the)g(p)q(ossible)g(completions,)f(if)h(there)g(is)g
+195 2560 y(of)i(the)g(p)q(ossible)g(completions,)f(if)h(there)g(is)g
 (more)g(than)g(one,)g(as)g(w)o(ell)f(as)h(p)q(erforming)g(partial)195
-2573 y(completion.)h(`)p Fs(@)p Ft(')13 b(is)g(similar)f(to)h(`)p
+2615 y(completion.)h(`)p Fs(@)p Ft(')13 b(is)g(similar)f(to)h(`)p
 Fs(!)p Ft(',)g(but)h(p)q(ossible)f(completions)g(are)g(not)g(listed)g
-(if)g(the)h(p)q(ossible)195 2628 y(completions)g(share)h(a)g(common)g
+(if)g(the)h(p)q(ossible)195 2670 y(completions)g(share)h(a)g(common)g
 (pre\014x.)p eop end
 %%Page: 43 47
 TeXDict begin 43 46 bop 75 -58 a Ft(Chapter)15 b(2:)k(Programming)14
@@ -8580,7 +8595,7 @@ b Fb(29)75 1653 y Fd(rl_bind_ke)o(y_)o(if_)o(un)o(bou)o(nd)8
 b Fa(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)24 b Fb(29)75 1697 y Fd(rl_bind_ke)o(y_)o(if_)o(un)o(bou)o
 (nd_)o(in)o(_ma)o(p)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)19 b Fb(29)75 1741 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5
+(.)g(.)19 b Fb(30)75 1741 y Fd(rl_bind_ke)o(y_)o(in_)o(ma)o(p)5
 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
 g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(29)75 1786 y
 Fd(rl_bind_ke)o(ys)o(eq)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
@@ -8617,16 +8632,16 @@ b Fa(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)24 b Fb(35)75 2405 y Fd(rl_clear_s)o(ig)o(nal)o(s)6
 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
 g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(41)75
-2449 y Fd(rl_complet)o(e)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)23 b Fb(42)75 2493 y Fd(rl_complet)o(e_)o(int)o(er)o
-(nal)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(42)75 2537 y Fd(rl_complet)o(er)
-o(_qu)o(ot)o(e_c)o(har)o(ac)o(ter)o(s)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)19 b Fb(45)75 2582 y Fd(rl_complet)o(er)o(_wo)o
-(rd)o(_br)o(eak)o(_c)o(har)o(ac)o(ter)o(s)9 b Fa(.)d(.)g(.)g(.)g(.)g(.)
-h(.)24 b Fb(45)75 2626 y Fd(rl_complet)o(io)o(n_a)o(pp)o(end)o(_ch)o
-(ar)o(act)o(er)5 b Fa(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18
+2449 y Fd(rl_complet)o(e)6 b Fa(.)s(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)19 b Fb(42,)13 b(43)75 2493 y Fd(rl_complet)o(e_)o(int)o(er)o(nal)s
+Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(42)75 2537 y Fd(rl_complet)o(er)o(_qu)o
+(ot)o(e_c)o(har)o(ac)o(ter)o(s)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)19 b Fb(45)75 2582 y Fd(rl_complet)o(er)o(_wo)o(rd)o
+(_br)o(eak)o(_c)o(har)o(ac)o(ter)o(s)9 b Fa(.)d(.)g(.)g(.)g(.)g(.)h(.)
+24 b Fb(45)75 2626 y Fd(rl_complet)o(io)o(n_a)o(pp)o(end)o(_ch)o(ar)o
+(act)o(er)5 b Fa(.)s(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)18
 b Fb(46)75 2670 y Fd(rl_complet)o(io)o(n_d)o(is)o(pla)o(y_m)o(at)o(che)
 o(s_)o(hoo)o(k)9 b Fa(.)d(.)g(.)g(.)g(.)g(.)h(.)24 b
 Fb(45)1012 149 y Fd(rl_completi)o(on)o(_en)o(tr)o(y_f)o(un)o(cti)o(on)s
@@ -8709,7 +8724,7 @@ o(mac)o(ro)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
 (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
 g(.)20 b Fb(34)1012 1609 y Fd(rl_explicit)o(_a)o(rg)7
 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(27)1012
+f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(28)1012
 1653 y Fd(rl_extend_l)o(in)o(e_b)o(uf)o(fer)8 b Fa(.)f(.)f(.)g(.)g(.)g
 (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)25
 b Fb(36)1012 1697 y Fd(rl_filename)o(_c)o(omp)o(le)o(tio)o(n_)o(des)o
@@ -8807,15 +8822,15 @@ h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
 (.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(28)75 812
 y Fd(rl_make_ke)o(ym)o(ap)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
 g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)21 b Fb(28)75 856 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)
+(.)g(.)21 b Fb(29)75 856 y Fd(rl_mark)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
 (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)17
 b Fb(24)75 900 y Fd(rl_message)7 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 945 y Fd(rl_modifyi)o(ng)6
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)24 b Fb(33)75 944 y Fd(rl_modifyi)o(ng)6
 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Fb(32)75 989 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g
+b Fb(32)75 988 y Fd(rl_named_f)o(un)o(cti)o(on)5 b Fa(.)s(.)i(.)f(.)g
 (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
 g(.)g(.)g(.)g(.)19 b Fb(31)75 1033 y Fd(rl_num_cha)o(rs)o(_to)o(_r)o
 (ead)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
@@ -8826,12 +8841,12 @@ b Fb(28)75 1121 y Fd(rl_on_new_)o(li)o(ne)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 (.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 1165 y Fd(rl_on_new_)o(li)o(ne_)o
 (wi)o(th_)o(pro)o(mp)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1210 y Fd(rl_outstre)o(am)6
+(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(33)75 1209 y Fd(rl_outstre)o(am)6
 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
-b Fb(25)75 1254 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g
+b Fb(25)75 1253 y Fd(rl_parse_a)o(nd)o(_bi)o(nd)5 b Fa(.)s(.)i(.)f(.)g
 (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)19 b Fb(30)75 1298 y Fd(rl_pending)o(_i)o(npu)o(t)6
+g(.)g(.)g(.)g(.)19 b Fb(31)75 1298 y Fd(rl_pending)o(_i)o(npu)o(t)6
 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
 g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(24)75
 1342 y Fd(rl_point)s Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
@@ -8841,151 +8856,156 @@ g(.)g(.)g(.)g(.)h(.)f(.)g(.)16 b Fb(24)75 1386 y Fd(rl_possibl)o(e_)o
 h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(43)75 1430 y
 Fd(rl_pre_inp)o(ut)o(_ho)o(ok)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
 f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(25)75 1475 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o(tio)o(n)9
+b Fb(26)75 1474 y Fd(rl_prefer_)o(en)o(v_w)o(in)o(siz)o(e)9
 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Fb(26)75 1519 y Fd(rl_prep_te)o(rm)o(ina)o(l)6
-b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19 b Fb(35)75
-1563 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1607 y Fd(rl_push_ma)o(cr)o(o_i)o(np)
-o(ut)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(34)75 1651
-y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-19 b Fb(31)75 1695 y Fd(rl_read_ke)o(y)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(34)75 1740 y
-Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
-19 b Fb(25)75 1784 y Fd(rl_readlin)o(e_)o(sta)o(te)5
-b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75 1828
-y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
+f(.)g(.)g(.)g(.)25 b Fb(25)75 1518 y Fd(rl_prep_te)o(rm)o(_fu)o(nc)o
+(tio)o(n)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1563 y Fd(rl_prep_te)o(rm)o
+(ina)o(l)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
+(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)19
+b Fb(35)75 1607 y Fd(rl_prompt)8 b Fa(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)24 b Fb(25)75 1651 y
+Fd(rl_push_ma)o(cr)o(o_i)o(np)o(ut)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g
 (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17
-b Fb(25)75 1872 y Fd(rl_redispl)o(ay)6 b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)22 b Fb(32)75 1916 y Fd(rl_redispl)o(ay)o(_fu)o
-(nc)o(tio)o(n)9 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(26)75 1960 y
-Fd(rl_replace)o(_l)o(ine)6 b Fa(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+b Fb(34)75 1695 y Fd(rl_read_in)o(it)o(_fi)o(le)5 b Fa(.)s(.)i(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)19 b Fb(31)75 1739 y Fd(rl_read_ke)o(y)7
+b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
+b Fb(34)75 1783 y Fd(rl_readlin)o(e_)o(nam)o(e)6 b Fa(.)t(.)g(.)g(.)g
 (.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-20 b Fb(36)75 2005 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9
+g(.)g(.)g(.)g(.)h(.)19 b Fb(25)75 1828 y Fd(rl_readlin)o(e_)o(sta)o(te)
+5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19 b Fb(26)75
+1872 y Fd(rl_readlin)o(e_)o(ver)o(si)o(on)t Fa(.)s(.)6
+b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
+(.)g(.)g(.)h(.)f(.)17 b Fb(25)75 1916 y Fd(rl_redispl)o(ay)6
+b Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
+h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)22
+b Fb(32)75 1960 y Fd(rl_redispl)o(ay)o(_fu)o(nc)o(tio)o(n)9
 b Fa(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)25 b Fb(41)75 2049 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o
-(te)t Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 2093
-y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-19 b Fb(35)75 2137 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5
+f(.)g(.)g(.)g(.)25 b Fb(26)75 2004 y Fd(rl_replace)o(_l)o(ine)6
+b Fa(.)t(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
+g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(36)75
+2048 y Fd(rl_reset_a)o(ft)o(er_)o(si)o(gna)o(l)9 b Fa(.)d(.)g(.)g(.)h
+(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
+b Fb(41)75 2092 y Fd(rl_reset_l)o(in)o(e_s)o(ta)o(te)t
+Fa(.)s(.)6 b(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)g(.)h(.)f(.)17 b Fb(33)75 2137 y Fd(rl_reset_s)o(cr)o
+(een)o(_s)o(ize)s Fa(.)s(.)6 b(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
+(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)16 b Fb(41)75
+2181 y Fd(rl_reset_t)o(er)o(min)o(al)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g
+(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
+g(.)19 b Fb(35)75 2225 y Fd(rl_resize_)o(te)o(rmi)o(na)o(l)5
 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(41)75 2181 y
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)18 b Fb(41)75 2269 y
 Fd(rl_restore)o(_p)o(rom)o(pt)5 b Fa(.)s(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)
 f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(33)75 2225 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
+b Fb(33)75 2313 y Fd(rl_save_pr)o(om)o(pt)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2270 y Fd(rl_set_key)7
+(.)h(.)f(.)g(.)g(.)g(.)21 b Fb(33)75 2357 y Fd(rl_set_key)7
 b Fa(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
 g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)24
-b Fb(30)75 2314 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou)
+b Fb(30)75 2402 y Fd(rl_set_key)o(bo)o(ard)o(_i)o(npu)o(t_t)o(im)o(eou)
 o(t)6 b Fa(.)s(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)19
-b Fb(35)75 2358 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f
+b Fb(35)75 2446 y Fd(rl_set_key)o(ma)o(p)9 b Fa(.)s(.)d(.)g(.)g(.)h(.)f
 (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2402 y Fd(rl_set_par)o(en)o(_bl)o
+h(.)f(.)g(.)g(.)g(.)g(.)22 b Fb(29)75 2490 y Fd(rl_set_par)o(en)o(_bl)o
 (in)o(k_t)o(ime)o(ou)o(t)8 b Fa(.)t(.)e(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)75 2446 y Fd(rl_set_pro)o(mp)o(t)9
-b Fa(.)s(.)d(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)22
-b Fb(34)1012 149 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6
+(.)g(.)g(.)g(.)h(.)f(.)21 b Fb(37)1012 149 y Fd(rl_set_prom)o(pt)8
+b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
+g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
+b Fb(34)1012 193 y Fd(rl_set_scre)o(en)o(_si)o(ze)t Fa(.)t(.)6
 b(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(41)1012 193 y Fd(rl_set_sign)o(al)o(s)8
+(.)g(.)g(.)g(.)g(.)g(.)19 b Fb(41)1012 237 y Fd(rl_set_sign)o(al)o(s)8
 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)
 f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)21 b
-Fb(41)1012 237 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g
+Fb(41)1012 280 y Fd(rl_show_cha)o(r)6 b Fa(.)g(.)h(.)f(.)g(.)g(.)g(.)g
 (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 280 y Fd(rl_special_)o(pr)o
+g(.)g(.)h(.)f(.)g(.)g(.)23 b Fb(33)1012 324 y Fd(rl_special_)o(pr)o
 (efi)o(xe)o(s)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)18 b Fb(45)1012
-324 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
+368 y Fd(rl_startup_)o(ho)o(ok)7 b Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g
 (.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)21 b Fb(25)1012 368 y Fd(rl_stuff_ch)o(ar)8 b
+g(.)g(.)21 b Fb(26)1012 411 y Fd(rl_stuff_ch)o(ar)8 b
 Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
 (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Fb(35)1012 411 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h
+b Fb(35)1012 455 y Fd(rl_terminal)o(_n)o(ame)6 b Fa(.)s(.)g(.)g(.)g(.)h
 (.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
-h(.)f(.)g(.)g(.)20 b Fb(25)1012 455 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
+h(.)f(.)g(.)g(.)20 b Fb(25)1012 498 y Fd(rl_tty_set_)o(de)o(fau)o(lt)o
 (_bi)o(nd)o(ing)o(s)8 b Fa(.)s(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)g(.)21 b Fb(35)1012 498 y Fd(rl_tty_unse)o(t_)o(def)o(au)o
+(.)h(.)f(.)g(.)21 b Fb(35)1012 542 y Fd(rl_tty_unse)o(t_)o(def)o(au)o
 (lt_)o(bi)o(ndi)o(ngs)5 b Fa(.)t(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)
-g(.)g(.)20 b Fb(35)1012 542 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o
+g(.)g(.)20 b Fb(35)1012 586 y Fd(rl_unbind_c)o(om)o(man)o(d_)o(in_)o
 (ma)o(p)7 b Fa(.)f(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)23 b Fb(30)1012 586 y Fd(rl_unbind_f)o(un)o(cti)o(on)o
+(.)g(.)h(.)f(.)23 b Fb(30)1012 629 y Fd(rl_unbind_f)o(un)o(cti)o(on)o
 (_in)o(_m)o(ap)9 b Fa(.)s(.)d(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 629 y Fd(rl_unbind_k)o(ey)8
+(.)g(.)g(.)g(.)g(.)23 b Fb(30)1012 673 y Fd(rl_unbind_k)o(ey)8
 b Fa(.)s(.)e(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
 g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)22
-b Fb(30)1012 673 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
+b Fb(30)1012 717 y Fd(rl_unbind_k)o(ey)o(_in)o(_m)o(ap)s
 Fa(.)t(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)
-g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 717 y Fd(rl_username)o(_c)o
+g(.)g(.)g(.)h(.)f(.)g(.)17 b Fb(30)1012 760 y Fd(rl_username)o(_c)o
 (omp)o(le)o(tio)o(n_)o(fun)o(cti)o(on)t Fa(.)s(.)7 b(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)18 b Fb(43)1012 760 y Fd(rl_variable)o(_b)o(ind)6
+g(.)h(.)f(.)g(.)18 b Fb(43)1012 804 y Fd(rl_variable)o(_b)o(ind)6
 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)
 h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)20 b Fb(37)1012
-804 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
+847 y Fd(rl_variable)o(_d)o(ump)o(er)t Fa(.)t(.)6 b(.)g(.)g(.)g(.)h(.)f
 (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)
-19 b Fb(37)1012 847 y Fd(rl_variable)o(_v)o(alu)o(e)6
+19 b Fb(37)1012 891 y Fd(rl_variable)o(_v)o(alu)o(e)6
 b Fa(.)s(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(37)1012 969
-y Fr(S)1012 1027 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o
+g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)19 b Fb(37)1012 1012
+y Fr(S)1012 1070 y Fd(self-insert)9 b(\(a,)j(b,)g(A,)g(1,)g(!,)g(...)o
 (\))6 b Fa(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20
-b Fb(15)1012 1070 y Fd(set-mark)10 b(\(C-@\))g Fa(.)c(.)g(.)g(.)g(.)g
+b Fb(15)1012 1114 y Fd(set-mark)10 b(\(C-@\))g Fa(.)c(.)g(.)g(.)g(.)g
 (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(18)1012 1114 y(sho)o(w-all-if-am)o
+g(.)h(.)f(.)g(.)g(.)g(.)25 b Fb(18)1012 1158 y(sho)o(w-all-if-am)o
 (biguous)11 b Fa(.)6 b(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
 (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)23 b Fb(7)1012
-1158 y(sho)o(w-all-if-unmo)q(di\014ed)6 b Fa(.)h(.)f(.)g(.)g(.)h(.)f(.)
+1201 y(sho)o(w-all-if-unmo)q(di\014ed)6 b Fa(.)h(.)f(.)g(.)g(.)h(.)f(.)
 g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)19 b Fb(7)1012 1201 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c
+(.)19 b Fb(7)1012 1245 y Fd(start-kbd-m)o(ac)o(ro)9 b(\(C-x)j(\(\))c
 Fa(.)d(.)i(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g
-(.)g(.)g(.)22 b Fb(18)1012 1322 y Fr(T)1012 1380 y Fd(tab-insert)9
-b(\(M-)1281 1378 y Fk(h)p 1292 1352 74 2 v 1292 1380
-a Fj(T)m(AB)p 1292 1388 V 1364 1378 a Fk(i)1379 1380
+(.)g(.)g(.)22 b Fb(18)1012 1366 y Fr(T)1012 1424 y Fd(tab-insert)9
+b(\(M-)1281 1422 y Fk(h)p 1292 1396 74 2 v 1292 1424
+a Fj(T)m(AB)p 1292 1431 V 1364 1422 a Fk(i)1379 1424
 y Fd(\))e Fa(.)f(.)g(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
-f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1424
+f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)20 b Fb(15)1012 1467
 y Fd(tilde-expan)o(d)10 b(\(M-~\))f Fa(.)s(.)e(.)f(.)g(.)g(.)g(.)g(.)g
 (.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)22
-b Fb(18)1012 1467 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
+b Fb(18)1012 1511 y Fd(transpose-c)o(ha)o(rs)9 b(\(C-t\))d
 Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
-(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1511 y Fd(transpose-w)o(or)o(ds)9
+(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1555 y Fd(transpose-w)o(or)o(ds)9
 b(\(M-t\))d Fa(.)f(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g
-(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1637 y
-Fr(U)1012 1695 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
+(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(15)1012 1681 y
+Fr(U)1012 1739 y Fd(undo)12 b(\(C-_)f(or)h(C-x)g(C-u\))c
 Fa(.)t(.)e(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g
-(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1739 y Fd(universal-a)o(rg)o
+(.)g(.)h(.)f(.)g(.)g(.)21 b Fb(18)1012 1782 y Fd(universal-a)o(rg)o
 (ume)o(nt)9 b(\(\))d Fa(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f
 (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)20 b Fb(17)1012
-1782 y Fd(unix-filena)o(me)o(-ru)o(bo)o(ut)9 b(\(\))c
+1826 y Fd(unix-filena)o(me)o(-ru)o(bo)o(ut)9 b(\(\))c
 Fa(.)h(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g
-(.)h(.)f(.)18 b Fb(16)1012 1826 y Fd(unix-line-d)o(is)o(car)o(d)10
+(.)h(.)f(.)18 b Fb(16)1012 1870 y Fd(unix-line-d)o(is)o(car)o(d)10
 b(\(C-u\))5 b Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(16)1012 1870 y Fd(unix-word-r)o(ub)o
+g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(16)1012 1913 y Fd(unix-word-r)o(ub)o
 (out)9 b(\(C-w\))d Fa(.)t(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1913
+(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)19 b Fb(16)1012 1957
 y Fd(upcase-word)9 b(\(M-u\))e Fa(.)f(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
 (.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)23
-b Fb(15)1012 2039 y Fr(V)1012 2097 y Fd(vi-editing-)o(mo)o(de)9
+b Fb(15)1012 2083 y Fr(V)1012 2141 y Fd(vi-editing-)o(mo)o(de)9
 b(\(M-C-j\))c Fa(.)t(.)h(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)
-g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(19)1012 2141 y(visible-stats)11
+g(.)g(.)g(.)g(.)h(.)f(.)18 b Fb(19)1012 2184 y(visible-stats)11
 b Fa(.)6 b(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h
 (.)f(.)g(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)
-24 b Fb(7)1012 2257 y Fr(Y)1012 2315 y Fd(yank)12 b(\(C-y\))5
+24 b Fb(7)1012 2301 y Fr(Y)1012 2359 y Fd(yank)12 b(\(C-y\))5
 b Fa(.)t(.)h(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)
 f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)19
-b Fb(17)1012 2359 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
+b Fb(17)1012 2403 y Fd(yank-last-a)o(rg)9 b(\(M-.)i(or)h(M-_\))c
 Fa(.)f(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)23
-b Fb(14)1012 2403 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
+b Fb(14)1012 2446 y Fd(yank-nth-ar)o(g)10 b(\(M-C-y\))d
 Fa(.)s(.)f(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f
-(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2446 y Fd(yank-pop)10
+(.)g(.)g(.)g(.)g(.)h(.)20 b Fb(14)1012 2490 y Fd(yank-pop)10
 b(\(M-y\))g Fa(.)c(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g
 (.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)g(.)h(.)f(.)g(.)g(.)g(.)25
 b Fb(17)p eop end
index 3c44918..55b85a6 100644 (file)
 \entry{rl_readline_name}{25}{\code {rl_readline_name}}
 \entry{rl_instream}{25}{\code {rl_instream}}
 \entry{rl_outstream}{25}{\code {rl_outstream}}
+\entry{rl_prefer_env_winsize}{25}{\code {rl_prefer_env_winsize}}
 \entry{rl_last_func}{25}{\code {rl_last_func}}
-\entry{rl_startup_hook}{25}{\code {rl_startup_hook}}
-\entry{rl_pre_input_hook}{25}{\code {rl_pre_input_hook}}
+\entry{rl_startup_hook}{26}{\code {rl_startup_hook}}
+\entry{rl_pre_input_hook}{26}{\code {rl_pre_input_hook}}
 \entry{rl_event_hook}{26}{\code {rl_event_hook}}
 \entry{rl_getc_function}{26}{\code {rl_getc_function}}
 \entry{rl_redisplay_function}{26}{\code {rl_redisplay_function}}
 \entry{rl_binding_keymap}{26}{\code {rl_binding_keymap}}
 \entry{rl_executing_macro}{26}{\code {rl_executing_macro}}
 \entry{rl_readline_state}{26}{\code {rl_readline_state}}
-\entry{rl_explicit_arg}{27}{\code {rl_explicit_arg}}
+\entry{rl_explicit_arg}{28}{\code {rl_explicit_arg}}
 \entry{rl_numeric_arg}{28}{\code {rl_numeric_arg}}
 \entry{rl_editing_mode}{28}{\code {rl_editing_mode}}
 \entry{rl_add_defun}{28}{\code {rl_add_defun}}
 \entry{rl_make_bare_keymap}{28}{\code {rl_make_bare_keymap}}
 \entry{rl_copy_keymap}{28}{\code {rl_copy_keymap}}
-\entry{rl_make_keymap}{28}{\code {rl_make_keymap}}
+\entry{rl_make_keymap}{29}{\code {rl_make_keymap}}
 \entry{rl_discard_keymap}{29}{\code {rl_discard_keymap}}
 \entry{rl_get_keymap}{29}{\code {rl_get_keymap}}
 \entry{rl_set_keymap}{29}{\code {rl_set_keymap}}
 \entry{rl_bind_key}{29}{\code {rl_bind_key}}
 \entry{rl_bind_key_in_map}{29}{\code {rl_bind_key_in_map}}
 \entry{rl_bind_key_if_unbound}{29}{\code {rl_bind_key_if_unbound}}
-\entry{rl_bind_key_if_unbound_in_map}{29}{\code {rl_bind_key_if_unbound_in_map}}
+\entry{rl_bind_key_if_unbound_in_map}{30}{\code {rl_bind_key_if_unbound_in_map}}
 \entry{rl_unbind_key}{30}{\code {rl_unbind_key}}
 \entry{rl_unbind_key_in_map}{30}{\code {rl_unbind_key_in_map}}
 \entry{rl_unbind_function_in_map}{30}{\code {rl_unbind_function_in_map}}
 \entry{rl_bind_keyseq_if_unbound}{30}{\code {rl_bind_keyseq_if_unbound}}
 \entry{rl_bind_keyseq_if_unbound_in_map}{30}{\code {rl_bind_keyseq_if_unbound_in_map}}
 \entry{rl_generic_bind}{30}{\code {rl_generic_bind}}
-\entry{rl_parse_and_bind}{30}{\code {rl_parse_and_bind}}
+\entry{rl_parse_and_bind}{31}{\code {rl_parse_and_bind}}
 \entry{rl_read_init_file}{31}{\code {rl_read_init_file}}
 \entry{rl_named_function}{31}{\code {rl_named_function}}
 \entry{rl_function_of_keyseq}{31}{\code {rl_function_of_keyseq}}
 \entry{rl_resize_terminal}{41}{\code {rl_resize_terminal}}
 \entry{rl_set_screen_size}{41}{\code {rl_set_screen_size}}
 \entry{rl_get_screen_size}{41}{\code {rl_get_screen_size}}
+\entry{rl_reset_screen_size}{41}{\code {rl_reset_screen_size}}
 \entry{rl_set_signals}{41}{\code {rl_set_signals}}
 \entry{rl_clear_signals}{41}{\code {rl_clear_signals}}
 \entry{rl_complete}{42}{\code {rl_complete}}
 \entry{rl_completion_entry_function}{42}{\code {rl_completion_entry_function}}
 \entry{rl_complete_internal}{42}{\code {rl_complete_internal}}
-\entry{rl_complete}{42}{\code {rl_complete}}
+\entry{rl_complete}{43}{\code {rl_complete}}
 \entry{rl_possible_completions}{43}{\code {rl_possible_completions}}
 \entry{rl_insert_completions}{43}{\code {rl_insert_completions}}
 \entry{rl_completion_mode}{43}{\code {rl_completion_mode}}
index db0cca5..f48c5ce 100644 (file)
 \entry {\code {rl_begin_undo_group}}{32}
 \entry {\code {rl_bind_key}}{29}
 \entry {\code {rl_bind_key_if_unbound}}{29}
-\entry {\code {rl_bind_key_if_unbound_in_map}}{29}
+\entry {\code {rl_bind_key_if_unbound_in_map}}{30}
 \entry {\code {rl_bind_key_in_map}}{29}
 \entry {\code {rl_bind_keyseq}}{30}
 \entry {\code {rl_bind_keyseq_if_unbound}}{30}
 \entry {\code {rl_clear_message}}{33}
 \entry {\code {rl_clear_pending_input}}{35}
 \entry {\code {rl_clear_signals}}{41}
-\entry {\code {rl_complete}}{42}
+\entry {\code {rl_complete}}{42, 43}
 \entry {\code {rl_complete_internal}}{42}
 \entry {\code {rl_completer_quote_characters}}{45}
 \entry {\code {rl_completer_word_break_characters}}{45}
 \entry {\code {rl_executing_keymap}}{26}
 \entry {\code {rl_executing_macro}}{26}
 \entry {\code {rl_expand_prompt}}{34}
-\entry {\code {rl_explicit_arg}}{27}
+\entry {\code {rl_explicit_arg}}{28}
 \entry {\code {rl_extend_line_buffer}}{36}
 \entry {\code {rl_filename_completion_desired}}{46}
 \entry {\code {rl_filename_completion_function}}{43}
 \entry {\code {rl_macro_bind}}{37}
 \entry {\code {rl_macro_dumper}}{37}
 \entry {\code {rl_make_bare_keymap}}{28}
-\entry {\code {rl_make_keymap}}{28}
+\entry {\code {rl_make_keymap}}{29}
 \entry {\code {rl_mark}}{24}
 \entry {\code {rl_message}}{33}
 \entry {\code {rl_modifying}}{32}
 \entry {\code {rl_on_new_line}}{33}
 \entry {\code {rl_on_new_line_with_prompt}}{33}
 \entry {\code {rl_outstream}}{25}
-\entry {\code {rl_parse_and_bind}}{30}
+\entry {\code {rl_parse_and_bind}}{31}
 \entry {\code {rl_pending_input}}{24}
 \entry {\code {rl_point}}{24}
 \entry {\code {rl_possible_completions}}{43}
-\entry {\code {rl_pre_input_hook}}{25}
+\entry {\code {rl_pre_input_hook}}{26}
+\entry {\code {rl_prefer_env_winsize}}{25}
 \entry {\code {rl_prep_term_function}}{26}
 \entry {\code {rl_prep_terminal}}{35}
 \entry {\code {rl_prompt}}{25}
 \entry {\code {rl_replace_line}}{36}
 \entry {\code {rl_reset_after_signal}}{41}
 \entry {\code {rl_reset_line_state}}{33}
+\entry {\code {rl_reset_screen_size}}{41}
 \entry {\code {rl_reset_terminal}}{35}
 \entry {\code {rl_resize_terminal}}{41}
 \entry {\code {rl_restore_prompt}}{33}
 \entry {\code {rl_set_signals}}{41}
 \entry {\code {rl_show_char}}{33}
 \entry {\code {rl_special_prefixes}}{45}
-\entry {\code {rl_startup_hook}}{25}
+\entry {\code {rl_startup_hook}}{26}
 \entry {\code {rl_stuff_char}}{35}
 \entry {\code {rl_terminal_name}}{25}
 \entry {\code {rl_tty_set_default_bindings}}{35}
index 5fb8c7c..1f821c4 100644 (file)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  27 OCT 2005 17:26
+This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  17 NOV 2005 10:43
 **/usr/homes/chet/src/bash/src/lib/readline/doc/rlman.texi
 (/usr/homes/chet/src/bash/src/lib/readline/doc/rlman.texi (./texinfo.tex
 Loading texinfo [version 2003-02-03.16]: Basics,
@@ -183,7 +183,7 @@ gnored[] |
 [11] [12] [13] [14] [15] [16] [17] [18]) (./rltech.texi Chapter 2 [19] [20]
 [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35]
 [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46]
-Underfull \hbox (badness 7379) in paragraph at lines 1807--1812
+Underfull \hbox (badness 7379) in paragraph at lines 1818--1823
  []@textrm If an application-specific com-ple-tion func-tion as-signed to @text
 tt rl_attempted_
 
@@ -201,10 +201,10 @@ tt rl_attempted_
 Here is how much of TeX's memory you used:
  1499 strings out of 98002
  18486 string characters out of 1221987
- 58299 words of memory out of 1000001
+ 59444 words of memory out of 1000001
  2361 multiletter control sequences out of 10000+50000
  31953 words of font info for 111 fonts, out of 500000 for 1000
  19 hyphenation exceptions out of 1000
  15i,8n,17p,281b,695s stack positions out of 1500i,500n,5000p,200000b,5000s
 
-Output written on rlman.dvi (74 pages, 276580 bytes).
+Output written on rlman.dvi (74 pages, 277700 bytes).
index b585d66..6f2e2ee 100644 (file)
@@ -400,7 +400,7 @@ The stdio stream to which Readline performs output.
 If @code{NULL}, Readline defaults to @var{stdout}.
 @end deftypevar
 
-@detypevar int rl_prefer_env_winsize
+@deftypevar int rl_prefer_env_winsize
 If non-zero, Readline gives values found in the @env{LINES} and
 @env{COLUMNS} environment variables greater precedence than values fetched
 from the kernel when computing the screen dimensions.
index 6d34180..ed84348 100644 (file)
Binary files a/lib/readline/doc/rluserman.dvi and b/lib/readline/doc/rluserman.dvi differ
index 4fc4af5..973c8ff 100644 (file)
@@ -1,6 +1,6 @@
 <HTML>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
-<!-- Created on October, 27  2005 by texi2html 1.64 -->
+<!-- Created on November, 17  2005 by texi2html 1.64 -->
 <!-- 
 Written by: Lionel Cons <Lionel.Cons@cern.ch> (original author)
             Karl Berry  <karl@freefriends.org>
@@ -2626,7 +2626,7 @@ to permit their use in free software.
 <TD VALIGN="MIDDLE" ALIGN="LEFT">[<A HREF="rluserman.html#SEC_About"> ? </A>]</TD>
 </TR></TABLE>
 <H1>About this document</H1>
-This document was generated by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+This document was generated by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 <P></P>  
@@ -2788,7 +2788,7 @@ the following structure:
 <BR>  
 <FONT SIZE="-1">
 This document was generated
-by <I>Chet Ramey</I> on <I>October, 27  2005</I>
+by <I>Chet Ramey</I> on <I>November, 17  2005</I>
 using <A HREF="http://www.mathematik.uni-kl.de/~obachman/Texi2html
 "><I>texi2html</I></A>
 
index 4d0a70c..5fe9475 100644 (file)
@@ -2,9 +2,9 @@ This is rluserman.info, produced by makeinfo version 4.7 from
 ./rluserman.texi.
 
    This manual describes the end user interface of the GNU Readline
-Library (version 5.1-beta1, 7 October 2005), a library which aids in the
-consistency of user interface across discrete programs which provide a
-command line interface.
+Library (version 5.1-beta1, 11 November 2005), a library which aids in
+the consistency of user interface across discrete programs which provide
+command line interface.
 
    Copyright (C) 1988-2005 Free Software Foundation, Inc.
 
@@ -1717,30 +1717,30 @@ permit their use in free software.
 
 \1f
 Tag Table:
-Node: Top\7f1344
-Node: Command Line Editing\7f1776
-Node: Introduction and Notation\7f2419
-Node: Readline Interaction\7f4043
-Node: Readline Bare Essentials\7f5236
-Node: Readline Movement Commands\7f7027
-Node: Readline Killing Commands\7f7994
-Node: Readline Arguments\7f9916
-Node: Searching\7f10962
-Node: Readline Init File\7f13115
-Node: Readline Init File Syntax\7f14182
-Node: Conditional Init Constructs\7f26118
-Node: Sample Init File\7f28653
-Node: Bindable Readline Commands\7f31772
-Node: Commands For Moving\7f32831
-Node: Commands For History\7f33694
-Node: Commands For Text\7f36820
-Node: Commands For Killing\7f39548
-Node: Numeric Arguments\7f41692
-Node: Commands For Completion\7f42833
-Node: Keyboard Macros\7f44379
-Node: Miscellaneous Commands\7f44952
-Node: Readline vi Mode\7f48315
-Node: Copying This Manual\7f49236
-Node: GNU Free Documentation License\7f49468
+Node: Top\7f1346
+Node: Command Line Editing\7f1778
+Node: Introduction and Notation\7f2421
+Node: Readline Interaction\7f4045
+Node: Readline Bare Essentials\7f5238
+Node: Readline Movement Commands\7f7029
+Node: Readline Killing Commands\7f7996
+Node: Readline Arguments\7f9918
+Node: Searching\7f10964
+Node: Readline Init File\7f13117
+Node: Readline Init File Syntax\7f14184
+Node: Conditional Init Constructs\7f26120
+Node: Sample Init File\7f28655
+Node: Bindable Readline Commands\7f31774
+Node: Commands For Moving\7f32833
+Node: Commands For History\7f33696
+Node: Commands For Text\7f36822
+Node: Commands For Killing\7f39550
+Node: Numeric Arguments\7f41694
+Node: Commands For Completion\7f42835
+Node: Keyboard Macros\7f44381
+Node: Miscellaneous Commands\7f44954
+Node: Readline vi Mode\7f48317
+Node: Copying This Manual\7f49238
+Node: GNU Free Documentation License\7f49470
 \1f
 End Tag Table
index 4671744..38cbe92 100644 (file)
@@ -1,4 +1,4 @@
-This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  27 OCT 2005 17:26
+This is TeX, Version 3.14159 (Web2C 7.4.5) (format=tex 2005.3.22)  17 NOV 2005 10:43
 **/usr/homes/chet/src/bash/src/lib/readline/doc/rluserman.texi
 (/usr/homes/chet/src/bash/src/lib/readline/doc/rluserman.texi (./texinfo.tex
 Loading texinfo [version 2003-02-03.16]: Basics,
@@ -186,10 +186,10 @@ gnored[] |
 Here is how much of TeX's memory you used:
  1405 strings out of 98002
  16392 string characters out of 1221987
- 44924 words of memory out of 1000001
+ 44928 words of memory out of 1000001
  2276 multiletter control sequences out of 10000+50000
  31953 words of font info for 111 fonts, out of 500000 for 1000
  19 hyphenation exceptions out of 1000
  13i,8n,10p,285b,695s stack positions out of 1500i,500n,5000p,200000b,5000s
 
-Output written on rluserman.dvi (32 pages, 92856 bytes).
+Output written on rluserman.dvi (32 pages, 92872 bytes).
index d0a686a..f10c7e2 100644 (file)
@@ -10,7 +10,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips -D 300 -o rluserman.ps rluserman.dvi
 %DVIPSParameters: dpi=300, compressed
-%DVIPSSource:  TeX output 2005.10.27:1726
+%DVIPSSource:  TeX output 2005.11.17:1043
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -3042,41 +3042,42 @@ TeXDict begin
 TeXDict begin 1 0 bop 75 659 a Fp(GNU)33 b(Readline)f(Library)f(User)i
 (In)m(terface)p 75 709 1800 17 v 686 757 a Fo(Edition)15
 b(5.1-b)q(eta1,)e(for)i Fn(Readline)f(Library)g Fo(V)l(ersion)h(5.1-b)q
-(eta1.)1608 811 y(Octob)q(er)h(2005)75 2467 y Fm(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)75 2534 y(Brian)g(F)-6 b(o)n(x,)23 b(F)-6
-b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p 75 2570
-1800 9 v eop end
+(eta1.)1569 811 y(No)o(v)o(em)o(b)q(er)g(2005)75 2467
+y Fm(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)75 2534 y(Brian)g(F)-6
+b(o)n(x,)23 b(F)-6 b(ree)23 b(Soft)n(w)n(are)f(F)-6 b(oundation)p
+75 2570 1800 9 v eop end
 %%Page: 2 2
 TeXDict begin 2 1 bop 75 1512 a Fo(This)19 b(man)o(ual)f(describ)q(es)i
 (the)f(end)h(user)f(in)o(terface)g(of)f(the)i(GNU)f(Readline)g(Library)
-g(\(v)o(ersion)f(5.1-)75 1567 y(b)q(eta1,)k(7)e(Octob)q(er)h(2005\),)f
-(a)h(library)e(whic)o(h)i(aids)f(in)h(the)g(consistency)f(of)h(user)g
-(in)o(terface)f(across)75 1621 y(discrete)15 b(programs)f(whic)o(h)h
-(pro)o(vide)g(a)g(command)g(line)g(in)o(terface.)75 1689
-y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fl(\015)g Fo(1988-2005)e(F)l
-(ree)i(Soft)o(w)o(are)f(F)l(oundation,)g(Inc.)75 1756
-y(P)o(ermission)h(is)g(gran)o(ted)h(to)f(mak)o(e)h(and)g(distribute)g
-(v)o(erbatim)e(copies)i(of)g(this)g(man)o(ual)f(pro)o(vided)h(the)75
-1811 y(cop)o(yrigh)o(t)e(notice)h(and)g(this)g(p)q(ermission)f(notice)h
-(are)g(preserv)o(ed)h(on)f(all)f(copies.)195 1878 y(P)o(ermission)i(is)
-h(gran)o(ted)g(to)g(cop)o(y)l(,)h(distribute)f(and/or)g(mo)q(dify)g
-(this)g(do)q(cumen)o(t)h(under)195 1933 y(the)h(terms)f(of)h(the)g(GNU)
-g(F)l(ree)g(Do)q(cumen)o(tation)f(License,)i(V)l(ersion)f(1.1)f(or)g
-(an)o(y)h(later)195 1988 y(v)o(ersion)13 b(published)h(b)o(y)g(the)g(F)
-l(ree)f(Soft)o(w)o(are)g(F)l(oundation;)g(with)g(no)g(In)o(v)m(arian)o
-(t)h(Sections,)195 2042 y(with)h(the)g(F)l(ron)o(t-Co)o(v)o(er)e(texts)
-i(b)q(eing)h(\\A)f(GNU)g(Man)o(ual,")f(and)h(with)g(the)g(Bac)o(k-Co)o
-(v)o(er)195 2097 y(T)l(exts)h(as)g(in)g(\(a\))f(b)q(elo)o(w.)23
-b(A)16 b(cop)o(y)g(of)g(the)g(license)g(is)g(included)h(in)f(the)g
-(section)g(en)o(titled)195 2152 y(\\GNU)f(F)l(ree)g(Do)q(cumen)o
-(tation)f(License.")195 2219 y(\(a\))k(The)h(FSF's)f(Bac)o(k-Co)o(v)o
-(er)g(T)l(ext)h(is:)27 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop)
-o(y)h(and)g(mo)q(dify)195 2274 y(this)d(GNU)g(Man)o(ual,)f(lik)o(e)g
-(GNU)h(soft)o(w)o(are.)22 b(Copies)16 b(published)g(b)o(y)h(the)f(F)l
-(ree)g(Soft)o(w)o(are)195 2329 y(F)l(oundation)f(raise)f(funds)i(for)e
-(GNU)h(dev)o(elopmen)o(t.")75 2451 y(Published)g(b)o(y)h(the)f(F)l(ree)
-g(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)g(Place,)f
+g(\(v)o(ersion)f(5.1-)75 1567 y(b)q(eta1,)e(11)g(No)o(v)o(em)o(b)q(er)g
+(2005\),)f(a)h(library)g(whic)o(h)g(aids)g(in)g(the)h(consistency)f(of)
+g(user)h(in)o(terface)f(across)75 1621 y(discrete)f(programs)f(whic)o
+(h)h(pro)o(vide)g(a)g(command)g(line)g(in)o(terface.)75
+1689 y(Cop)o(yrigh)o(t)301 1688 y(c)289 1689 y Fl(\015)g
+Fo(1988-2005)e(F)l(ree)i(Soft)o(w)o(are)f(F)l(oundation,)g(Inc.)75
+1756 y(P)o(ermission)h(is)g(gran)o(ted)h(to)f(mak)o(e)h(and)g
+(distribute)g(v)o(erbatim)e(copies)i(of)g(this)g(man)o(ual)f(pro)o
+(vided)h(the)75 1811 y(cop)o(yrigh)o(t)e(notice)h(and)g(this)g(p)q
+(ermission)f(notice)h(are)g(preserv)o(ed)h(on)f(all)f(copies.)195
+1878 y(P)o(ermission)i(is)h(gran)o(ted)g(to)g(cop)o(y)l(,)h(distribute)
+f(and/or)g(mo)q(dify)g(this)g(do)q(cumen)o(t)h(under)195
+1933 y(the)h(terms)f(of)h(the)g(GNU)g(F)l(ree)g(Do)q(cumen)o(tation)f
+(License,)i(V)l(ersion)f(1.1)f(or)g(an)o(y)h(later)195
+1988 y(v)o(ersion)13 b(published)h(b)o(y)g(the)g(F)l(ree)f(Soft)o(w)o
+(are)g(F)l(oundation;)g(with)g(no)g(In)o(v)m(arian)o(t)h(Sections,)195
+2042 y(with)h(the)g(F)l(ron)o(t-Co)o(v)o(er)e(texts)i(b)q(eing)h(\\A)f
+(GNU)g(Man)o(ual,")f(and)h(with)g(the)g(Bac)o(k-Co)o(v)o(er)195
+2097 y(T)l(exts)h(as)g(in)g(\(a\))f(b)q(elo)o(w.)23 b(A)16
+b(cop)o(y)g(of)g(the)g(license)g(is)g(included)h(in)f(the)g(section)g
+(en)o(titled)195 2152 y(\\GNU)f(F)l(ree)g(Do)q(cumen)o(tation)f
+(License.")195 2219 y(\(a\))k(The)h(FSF's)f(Bac)o(k-Co)o(v)o(er)g(T)l
+(ext)h(is:)27 b(\\Y)l(ou)19 b(ha)o(v)o(e)g(freedom)g(to)f(cop)o(y)h
+(and)g(mo)q(dify)195 2274 y(this)d(GNU)g(Man)o(ual,)f(lik)o(e)g(GNU)h
+(soft)o(w)o(are.)22 b(Copies)16 b(published)g(b)o(y)h(the)f(F)l(ree)g
+(Soft)o(w)o(are)195 2329 y(F)l(oundation)f(raise)f(funds)i(for)e(GNU)h
+(dev)o(elopmen)o(t.")75 2451 y(Published)g(b)o(y)h(the)f(F)l(ree)g
+(Soft)o(w)o(are)f(F)l(oundation)75 2506 y(59)h(T)l(emple)g(Place,)f
 (Suite)i(330,)75 2560 y(Boston,)e(MA)h(02111-1307)75
 2615 y(USA)p eop end
 %%Page: -1 3
index 2956b8f..ee462dc 100644 (file)
@@ -845,6 +845,7 @@ gen_wordlist_matches (cs, text)
     }
   sl->list[sl->list_len = nw] = (char *)NULL;
 
+  dispose_words (l2);
   FREE (ntxt);
   return sl;
 }